面向对象和面向过程有什么区别?

这个讲的很好,每次忘了就看看这个,讲的通俗易懂

⾯向过程 :⾯向过程性能⽐⾯向对象⾼。 因为类调⽤时需要实例化,开销⽐较⼤,⽐较消耗资源,所以当性能是最重要的考量因素的时候,⽐如单⽚机、嵌⼊式开发、Linux/Unix 等⼀般采⽤⾯向过程开发。但是,⾯向过程没有⾯向对象易维护、易复⽤、易扩展。

⾯向对象 :⾯向对象易维护、易复⽤、易扩展。 因为⾯向对象有封装、继承、多态性的特性, 所以可以设计出低耦合的系统,使系统更加灵活、更加易于维护。但是,⾯向对象性能⽐⾯向过程低。

⾯向过程性能⽐⾯向对象⾼
不一定,⾯向过程也需要分配内存,计算内存偏移量,Java 性能差的主要原因并不是因为它是⾯向对象语⾔,⽽是 Java 是半编译语⾔,最终的执⾏代码并不是可以直接被 CPU 执⾏的 ⼆进制机械码。
⽽⾯向过程语⾔⼤多都是直接编译成机械码在电脑上执⾏,并且其它⼀些⾯向过程的脚本语⾔性能 也并不⼀定⽐ Java 好。

二、面向对象的特点

在这里插入图片描述

对象:

属性属于对象静态的一面,用来形容对象的一些特性,身高、体重这些。
方法属于对象动态的一面,例如,小明会跑,会说话。跑,说话这些行为就是对象的方法!

面向对象的三个基本特征:封装、继承、多态

1. 封装

  • a. 保护或防止代码(数据)在无意中被破坏。保护类中的成员,不让类以外的程序直接访问或修改,只能通过提供的公共接口访问(数据封装)
  • b. 隐藏方法(实现)细节,只要接口不变,内容的修改不会影响到外部的调用者(方法封装)
  • c. 封装可以使对象拥有完整的属性和方法
  • d. 外部不能直接访问对象的属性,只能通过该属性对应的公有方法访问 对象封装原则
  • e. 内聚:指一个模块(类)内部各个部分之间的关联程度
  • f. 耦合:指各个模块(类)之间的关联程度

总结:用类实现封装,用封装来实现高内聚,低耦合
访问级别:public、private、protected

2. 继承

  1. 继承主要实现重用代码,节省开发时间
    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. 父类引用变量指向子类对象(子类到父类的类型转换).

多态性主要体现在:向不同的对象发送同一个消息,不同对象接收到消息时产生不同的行为,即每个对象以自己的方式响应同样的消息。
多态可以按照实现的时机分为编译时多态,运行时多态
编译时多态:(静态联编) 指程序在编译时就可确定的多态性,通过重载机制实现
运行时多态:(动态联编) 指必须在运行中才可确定的多态性,通过继承和虚函数

多态的好处:
  1. 可替换性:多态对已存在的代码具有可替换性
  2. 可扩充性:多态对代码具有可扩充性。新增子类不会影响已存在类的各种性质。
  3. 灵活性:多态在程序中体现了灵活多样的操作,提高了使用效率(重载函数,重写函数)
  4. 简化性:多态简化对应用软件的代码编写和修改过程,尤其在处理大量对象的运算和操作时,这个特点尤为突出和重要
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

-有风无风皆自由-

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值