首页 > 代码库 > 1.面向对象和UML

1.面向对象和UML

一.面向对象的基本特征

面向对象编程具有三个基本特征

  • 继承:当子类继承父类后,子类作为一种特殊的父类,将直接获得父类的属性和方法。继承可以分为单继承和多继承。由于多继承可能引起继承结构的混乱,而且会大大降低程序的可理解性,因此java是单继承。

  • 多态:子类对象可以直接赋给父类变量,但运行时仍然表现出子类的行为特征。这意味着同一类型的对象在执行同一个方法时,可能表现出多种行为特征。(VS:方法重载)

  • 封装:通过访问权限,将对象的实现细节封装起来,然后通过一些公用方法暴露该对象的功能。

除此之外,抽象也是面向对象的重要部分,抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标相关的方面。虽然抽象是面向对象的重要部分,但它并不是面向对象的特征之一,因为所有的编程语言都需要抽象。需要抽象哪些特征没有必然的规定,而是取决于软件系统的功能需求。

在编程语言领域,还有一个"基于对象"的概念,这两个概念极易混淆。通常而言,“基于对象”也使用了对象,但是无法利用现有的对象模版(类)产生新的对象类型(类),继而产生新的对象,也就是说,“基于对象”没有继承的特点,而多态需要继承,没有了继承的概念也就无从谈起多态。面向对象编程的三大基本特征(继承,多态,封装)缺一不可。例如,javascript是基于对象的,它使用一些封装好的对象,调用对象的方法,设置对象的属性,但是它无法让开发者派生新的类,开发者只能使用现有对象的方法和属性。

判断一门语言是否是面向对象的,通常可以使用继承和多态来加以判断。“面向对象”和“基于对象”都实现了封装概念,但是面向对象实现了继承和多态,而“基于对象”没有实现这些。

二.UML

UML是一种定义良好,易于表达,功能强大且普遍适用的建模语言,它的作用域不限于支持面向对象的分析和涉及,还支持从需求分析开始的软件开发全过程。

UML1.1和UML2.0是UML历史上两个具有里程碑意义的版本,其中UML2.0是目前最成熟、稳定的UML版本。

类图

类在类图上使用包含三个部分的矩形来描述,在最上面的是类的名称,中间部门是类的属性,最下面部门包含类的方法。如图:

类图除了可以表示类的静态内部结构外,还可以表示类之间的相互关系,类之间有三种基本的关系

  • 关联(聚合,组合)

  • 泛化(继承,实现)

  • 依赖

关联

关联具有一定的方向性,如果仅能从一个类单向地访问另一个类,则被成为单向关联,使用带箭头的实线表示;如果两个类可以互相访问对象,则被成为双向关联,使用实线表示。一个对象能访问关联对象的数目被成为多重性。

泛化

类继承父类,叫做泛化(继承),使用带空心三角形的实线表示;类实现接口,叫做实现(),带空心三角形的虚线表示。

继承:

实现:

依赖

一个类的改动将会导致另一个类的改动,则称辆各类之间存在依赖,使用带箭头的虚线表示。可以简单的理解,就是一个类A使用到了另一个类B,而这种使用关系是具有偶然性的、、临时性的、非常弱的,但是B类的变化会影响到A;比如某人要过河,需要借用一条船,此时人与船之间的关系就是依赖;表现在代码层面,为类B作为参数被类A在某个method方法中使用。