OOP思想:封装、继承、多态

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

  • 封装是实现面向对象的第一步,封装就是将数据或函数等集合在一个单元中(类)。被封装的对象通常被称为抽象数据类型。
  • 类具有封装性,类能够把数据和算法(操作数据的函数)组合在一起,构成一个不可分割的整体;
  • 类具有信息隐藏的能力,它能够有效地把类的内部数据(即私有和受保护成员)隐藏起来,使外部函数只能通过类的公有成员才能访问类的内部数据,并且控制访问级别。

封装使类成为一个具有内部数据的自我隐藏能力、功能独立的软件模块
  封装的意义

  1. 保护或防止代码(数据)在无意中被破坏。保护类中的成员,不让类以外的程序直接访问或修改,只能通过提供的公共接口访问(数据封装)
  2. 隐藏方法(实现)细节,只要接口不变,内容的修改不会影响到外部的调用者(方法封装)
  3. 封装可以使对象拥有完整的属性和方法(类中的函数)
  4. 外部不能直接访问对象的属性,只能通过该属性对应的公有方法访问

  对象封装原则

  1. 内聚:指一个模块(类)内部各个部分之间的关联程度
  2. 耦合:指各个模块(类)之间的关联程度

总结:用类实现封装,用封装来实现高内聚,低耦合

访问级别:public,private,protected

  • public:通常使用public设置公有成员,让本类之外的其他函数能够通过公有成员,按照类允许的方法访问类的私有数据,就能起到数据保护的目的。
  • private:通常使用private把不想让其他程序访问的数据或者函数设置成私有成员,可禁止其他程序对这些数据随意修改。
  • protected:通过protected设置保护成员,在封装中没什么用,通常在继承中使用。

 

继承:
继承主要实现重用代码,节省开发时间

  1. 继承是在已有类的基础上创建新类的过程,已有类称为基类(父类),新类称为派生类(子类);
  2. 派生类继承了基类的功能,且能够对基类的功能进行扩充、修改或重定义。
  3. 派生类复用了基类的全体数据和成员函数,具有从基类复制而来的数据成员和成员函数(基类私有成员可被继承,但是无法被访问)
  4. 派生类可以从一个或多个基类派生;通过一个基类派生的继承称为单继承,多个基类派生的继承为多重继承
  5. 一个类可以作为多个类的基类,一个派生类也可以作为另一个类的基类。
  6. 继承可传递 如果C从B中派生,B又从A中派生,那么C不仅继承了B中声明的成员,同样也继承了A中的成员。Object类作为所有类的基类。
  7. 基类中的构造函数、析构函数、友元函数、静态数据成员、静态成员函数都不能被继承。基类中成员的访问方式只能决定派生类能否访问它们。
  8. 基类的程序代码可以被派生类服用,提高了软件复用的效率,缩短了软件开发的周期
  9. 派生类如果定义了与继承而来的成员同名的新成员,就可以覆盖已继承的成员。但这并不因为这派生类删除了这些成员,只是不能再访问这些成员。

语法:
class 派生类名:[继承方式] 基类名{
  派生类成员声明与定义
};

公有继承(public):基类成员的访问权限在派生类中保持不变
私有继承(private):基类的private成员在派生类仍是private成员,但是基类的public和protected成员在派生类中会变成private成员。
保护继承(protected):

  1. 具有protected权限的数据,在该类没有被继承的情况下,protected访问属性与private完全相同。
  2. 在继承结构中,基类的protected成员不能被派生类的外部函数访问,但是可被派生类直接访问

 

多态:
多态: 指不同对象接收到同一消息时会产生不同的行为(一个接口,多种方法)
简单来说,就是在同一个类或继承体系结构的基类与派生类中,用同名函数来实现各种不同的功能

多态的三个条件:

  1. 继承的存在(继承是多态的基础,没有继承就没有多态).
  2. 子类重写父类的方法(多态下调用子类重写的方法).
  3. 父类引用变量指向子类对象(子类到父类的类型转换).

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

 

实现多态方式:

  • 接口多态性
  • 继承多态性
  • 通过抽象类实现的多态性

多态的好处:

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

 

  --学无止境,爱拼才会赢

posted @ 2022-09-20 18:25  struggle-way  阅读(135)  评论(0编辑  收藏  举报