面向对象的精髓(JAVA,C++)

面向对象和面向过程的区别:

小时候学过pascal,跨专业自学过c语言,都是面向过程编程
而如今学的C++,python,java都是面向对象编程。
网上所云是设计方式的不同
过程编程:你可以看到解决问题的每一个步骤,每一个步骤可能都有千丝万缕的联系。
对象编程:你仅仅能看到什么模块解决什么问题,模块之间相互独立,而怎么解决的具体过程,被黑盒化了。
虽然问题都被解决了,但是方式不同。

这样讲不通俗易懂:我认为的对象过程的差别很简单
1.对象编程是复杂工程项目的衍生物
2.极端点,对象编程是过程编程的优化
以前对象编程还没问世之前,那个时候的工程量还小,程序猿们用机器语言就可以解决问题,再后来,为了方便理解升级成了汇编语言,之后在发展有了c这种正常人能看得懂的语言,当时人脑对于处理几千行几万行代码还能承受,随之科技普及,项目复杂度增大时,代码的行数变为几十亿行时,人们渐渐力不从心,想办法如何能够将代码的可读性,可扩展性提高,在短时间内就可以理解清楚一个项目的逻辑,框架,于是面向对象就诞生了。

我是学工科的,其实这个趋势,第一次第二次工业革命就可见一斑,但凡一个东西一旦复杂化,就违背了我们人类使用的初衷,因为我们生来就是为了偷懒
以前的匠人手工能做一件商品,后来机器去替代了手工。
汽车的目的是为了人们方便开车,我们不需要了解发动机的构造。
集成电路的目的是给计算机带来算力,材料性能和电路原理亦不需要我们知道。
如今,人工智能的目的是解放人类,达到人类懒之极境,我们也不用了解背后的数学奥秘。

编程也很简单:好程序
1.通俗易懂(可读性
2.未来还能继续使用(健壮性
3.方便增删改查功能模块(可扩展性
4.多个项目之间可以套用(可复用性
5.被他人改动任然问题出错不大(可维护性
6.以最快速度完成并解决任务(低复杂度性
总之就一个目的:遇到问题后我越省事,这个代码就越棒

这就是面向对象发展的原因。

对象与类

有句话说得好:万物皆对象,万物皆类,有的时候我在思考,计算机是不是还参考了马哲的原理。这分明就是个别和一般的辩证关系嘛!!
不信的话我个别换成对象,一般换成类,我来给大家吟诵一遍马哲辩证原理:
对象一定与类相联系而存在.对象只能通过类存在,任何对象都是类的(一部分).任何类都是对象的(本质).任何类只是大致地包括一切对象事物.任何对象都不能完全地包括在类之中,类与对象相互转化、相互联系

当然开个玩笑,具体到一个项目的时候,类和对象都确定了,当然是那就不能相互转化了,不然就乱套了,不过上面的马哲可以很好的阐述这两者直接的关系,
 类就是泛指,而对象呢,其实就是具指。
 举个栗子:
 当我定义鼠标为类时,此时鼠标为泛指,那么贴着联想标签的鼠标就是鼠标类的具指了。
 当我定义电脑配件为类时,此时配件为泛指,那么鼠标就是配件类的具指了.
 写在程序里,我们创建对象时,要将其实例化

C++
class Mouse
{
    public:
    	int click;
    //公共的行为或属性
}
int main(){
	// 两种不同的创建对象方式
	Mouse mouseWithLenovo = Mouse(); //栈中分配内存
	Mouse *mouseWithLenovo = new Mouse();// 堆中分配内存
}

JAVA
// 创建类
public class Mouse{
	String click; 
}
public static void main(String[] args){
	// 实例化对象
	Mouse mouseWithLenovo = new Mouse();
}

继承

继承是子类继承父类的特征和和行为,使得子类对象(实例)具有父类的实例域和方法,还可以以此基础添加新方法和域来满足需求。
即子类能调用父类的方法和属性,甚至还能根据自己独有的特性重写父类的方法。

抽象类.

1.抽象类不能实例化,抽象类必须被继承。(设计阶段考虑清楚)
2.抽象类是类的一种特例规则,这种类没有描绘具体的对象的信息。
3.抽象类里可以写具体方法,也可以写抽象方法
4.抽象类是用来捕捉子类的通用特性的

接口

1.接口不能用于实例化对象
2.接口没有构造方法
3.接口中所有的方法必须是抽象方法。(1.8以前)
 1.8以后非抽象方法也可以。(方法不需要实现)
4.接口不能包含成员变量,除了 static 和 final 变量。
5.接口不是被类继承了,而是要被类实现
6.接口支持多继承

抽象类与接口的区别:

在这里插入图片描述
在这里插入图片描述

使用场景

1.一些方法实现时需要使用抽象类
2.多继承时使用接口
3.不断增加基础功能的时候使用抽象类
4. 当使用接口时 增加功能就需要修改每个实现了该接口的实现类

构造方法:

1.构造无参方法

构造方法是用来初始化类的成员变量,形成一个个无值的成员变量的对象。

2.构造有参方法

构造器构造一个更个性化的对象(即含有参数值的对象)

方法重载

前提

1.函数或者方法有相同的名称。
2.参数列表不相同的(包括参数个数和类型)。
3.返回值不同不算重载。

构造方法相同名称分无参有参其实是一种方法重载的一种体现。
普通方法相同名称无参有参也是方法重载的一种体现。

封装

封装是一种抽象化的概念,意为将实现细节隐藏起来形成黑盒子,给用户使用
封装的实现是通过继承和接口来实现的
1.通过接口来告知需要实现哪些抽象方法抽象类或者父类来实现从属关系的抽象
2.通过继承来在子类具体实现所有方法,将细节描绘。
3.对外只暴露接口,让用户无法了解其内部原理。

发布了19 篇原创文章 · 获赞 4 · 访问量 489

猜你喜欢

转载自blog.csdn.net/qq_35050438/article/details/104061311