面向对象的几个概念


     一、抽象(abstract)

 抽象是通过特定的实例抽取共同特征以后形成概念的过程。它强调主要特征,忽略次要特征。一个对象是现实世界中一个实体的抽象,一个类是一组对象的抽象,抽象是一种单一化的描述,它强调给出与应用相关的特性,抛弃不相关的特性。

 

二、封装(encapsulation)

封装是指一种将抽象性函式接口的实现细节部分包装、隐藏起来的方法。封装可以被认为是一个保护屏障,防止该类的代码和数据被外部类定义的代码随机访问。要访问该类的代码和数据,必须通过严格的接口控制。封装最主要的功能在于我们能修改自己的实现代码,而不用修改那些调用我们代码的程序片段。适当的封装可以让程式码更容易理解与维护,也加强了程式码的安全性。

 

三、继承(inheritance)

继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的属性和方法,或子类从父类继承方法,使得子类具有父类相同的行为。

 

 四、多态(polymorphism)

多态指同一个实体同时具有多种形式。它是面向对象程序设计(OOP)的一个重要特征。如果一个语言只支持类而不支持多态,只能说明它是基于对象的,而不是面向对象的。C++中的多态性具体体现在运行和编译两个方面。运行时多态是动态多态,其具体引用的对象在运行时才能确定。编译时多态是静态多态,在编译时就可以确定对象使用的形式。


      五、藕合(coupling)

藕合是模块之间相关联程度的度量。相对于聚合的内向性,耦合关注的是某一模块和其他模块之间的关联性。所谓"高聚合、低耦合",也就是说模块之间的关联尽量越少越好。

 

六、继承

 继承指的是一个类(称为子类)继承另外的一个类(称为父类)的功能,并可以在子类中增加自己的新属性和功能。在Java中继承关系可以通过关键字 extends明确标识。在UML类图表示中,用一条带空心三角箭头的实线表示继承关系,由子类指向父类。

 

七、实现

 实现指的是一个class类实现interface接口(可以是多个)的功能,实现是类与接口之间最常见的关系。在Java中此类关系通过关键字 implements明确标识。在C++中,实现关系体现在抽象父类与具体子类之间的关系。在UML类图中,用一条带空心三角箭头的虚线表示实现关系,从类指向实现的接口。

 

八、依赖

 依赖就是一个类A使用到了另一个类B来实现某些功能,而这种使用关系是具有偶然性的、临时性的、非常弱的,但是类B的变化会影响到类A。在代码中,常表现为类B作为参数被类A在某个方法中使用。在UML类图中,依赖关系用由类A指向类B的带箭头虚线表示。 

 

九、关联

 关联体现的是两个类之间语义级别的一种强依赖关系,这种关系比依赖关系更强,一般是长期性的。关联可以是单向、双向的。在代码中常体现在,被关联类B以类的属性形式出现在关联类A中,也可能是关联类A引用了一个类型为被关联类B的全局变量。在UML类图中,用由关联类A指向被关联类B的带箭头实线表示关联关系,在关联的两端可以标注关联双方的角色和多重性标记。 

 

十、聚合

 聚合是关联关系的一种特例,它体现的是整体与部分的关系,即has-a的关系。此时整体与部分之间是可分离的,它们可以具有各自的生命周期,部分可以属于多个整体对象,也可以为多个整体对象共享。比如飞机场和飞机。在代码中的体现,和关联关系是一致的,只能从语义级别来区分。在UML类图设计中,用空心菱形加实线箭头表示聚合关系。 

 

十一、组合

 组合也是关联关系的一种特例,体现的是一种contains-a的关系,这种关系比聚合更强,也称为强聚合。它同样体现整体与部分间的关系,但此时整体与部分是不可分的,整体的生命周期结束也就意味着部分的生命周期结束,比如人和人的大脑。在代码中也与关联关系是一致的,只能从语义级别来区分。在 UML类图设计中,用实心菱形加实线箭头表示组合关系。

 

posted @ 2020-05-25 21:03  肥宅快乐鼠  阅读(38)  评论(0编辑  收藏  举报