⾯向过程 :⾯向过程性能⽐⾯向对象⾼。 因为类调⽤时需要实例化,开销⽐较⼤,⽐较消耗资源,所以当性能是最重要的考量因素的时候,⽐如单⽚机、嵌⼊式开发、Linux/Unix 等⼀般采⽤⾯向过程开发。但是,⾯向过程没有⾯向对象易维护、易复⽤、易扩展。
⾯向对象 :⾯向对象易维护、易复⽤、易扩展。 因为⾯向对象有封装、继承、多态性的特性, 所以可以设计出低耦合的系统,使系统更加灵活、更加易于维护。但是,⾯向对象性能⽐⾯向过程低。
⾯向过程性能⽐⾯向对象⾼?
不一定,⾯向过程也需要分配内存,计算内存偏移量,Java 性能差的主要原因并不是因为它是⾯向对象语⾔,⽽是 Java 是半编译语⾔,最终的执⾏代码并不是可以直接被 CPU 执⾏的 ⼆进制机械码。
⽽⾯向过程语⾔⼤多都是直接编译成机械码在电脑上执⾏,并且其它⼀些⾯向过程的脚本语⾔性能 也并不⼀定⽐ Java 好。
二、面向对象的特点
对象:
属性属于对象静态的一面,用来形容对象的一些特性,身高、体重这些。
方法属于对象动态的一面,例如,小明会跑,会说话。跑,说话这些行为就是对象的方法!
面向对象的三个基本特征:封装、继承、多态
1. 封装
- a. 保护或防止代码(数据)在无意中被破坏。保护类中的成员,不让类以外的程序直接访问或修改,只能通过提供的公共接口访问(数据封装)
- b. 隐藏方法(实现)细节,只要接口不变,内容的修改不会影响到外部的调用者(方法封装)
- c. 封装可以使对象拥有完整的属性和方法
- d. 外部不能直接访问对象的属性,只能通过该属性对应的公有方法访问 对象封装原则
- e. 内聚:指一个模块(类)内部各个部分之间的关联程度
- f. 耦合:指各个模块(类)之间的关联程度
总结:用类实现封装,用封装来实现高内聚,低耦合
访问级别:public、private、protected
2. 继承
- 继承主要实现重用代码,节省开发时间
a. 继承是在已有类的基础上创建新类的过程,已有类称为基类(父类),新类称为派生类(子类);
b. 派生类继承了基类的功能,且能够对基类的功能进行扩充、修改或重定义。
c. 派生类复用了基类的全体数据和成员函数,具有从基类复制而来的数据成员和成员函数(基类私有成员可被继承,但是无法被访问)
d. 派生类可以从一个或多个基类派生;通过一个基类派生的继承称为单继承,多个基类派生的继承为多重继承
e. 一个类可以作为多个类的基类,一个派生类也可以作为另一个类的基类。
f. 继承可传递 如果C从B中派生,B又从A中派生,那么C不仅继承了B中声明的成员,同样也继承了A中的成员。Object类作为所有类的基类。
g. 基类中的构造函数、析构函数、友元函数、静态数据成员、静态成员函数都不能被继承。基类中成员的访问方式只能决定派生类能否访问它们。
h. 基类的程序代码可以被派生类复用,提高了软件复用的效率,缩短了软件开发的周期
i. 派生类如果定义了与继承而来的成员同名的新成员,就可以覆盖已继承的成员。但这并不因为这派生类删除了这些成员,只是不能再访问这些成员。
继承方式:
class 派生类名:[继承方式] 基类名{
派生类成员声明与定义
};
公有继承(public):基类成员的访问权限在派生类中保持不变
私有继承(private):基类的private成员在派生类仍是private成员,但是基类的public和protected成员在派生类中会变成private成员。
保护继承(protected):
具有protected权限的数据,在该类没有被继承的情况下,protected访问属性与private完全相同。
在继承结构中,基类的protected成员不能被派生类的外部函数访问,但是可被派生类直接访问
3. 多态
多态: 指不同对象接收到同一消息时会产生不同的行为(一个接口,多种方法)
简单来说,就是在同一个类或继承体系结构的基类与派生类中,用同名函数来实现各种不同的功能
多态的三个条件:
a. 继承的存在(继承是多态的基础,没有继承就没有多态).
b. 子类重写父类的方法(多态下调用子类重写的方法).
c. 父类引用变量指向子类对象(子类到父类的类型转换).
多态性主要体现在:向不同的对象发送同一个消息,不同对象接收到消息时产生不同的行为,即每个对象以自己的方式响应同样的消息。
多态可以按照实现的时机分为编译时多态,运行时多态
编译时多态:(静态联编) 指程序在编译时就可确定的多态性,通过重载机制实现
运行时多态:(动态联编) 指必须在运行中才可确定的多态性,通过继承和虚函数
多态的好处:
- 可替换性:多态对已存在的代码具有可替换性
- 可扩充性:多态对代码具有可扩充性。新增子类不会影响已存在类的各种性质。
- 灵活性:多态在程序中体现了灵活多样的操作,提高了使用效率(重载函数,重写函数)
- 简化性:多态简化对应用软件的代码编写和修改过程,尤其在处理大量对象的运算和操作时,这个特点尤为突出和重要