面向对象的概念和术语总结和UML类图说明
最近打算给开发和QA的同学介绍一下面向对象和UML相关的内容。这是第一篇,介绍主要面向对象的基础概念和UML类图的绘制。
类
概念:类似对象的一种软件抽象,创建对象的模板。
UML图:属性和操作之前可附加一个可见性修饰符。加号(+)表示具有公共可见性。减号(-)表示私有可见性。#号表示受保护的可见性。省略这些修饰符表示具有package(包)级别的可见性。如果属性或操作具有下划线,表明它是静态的。在操作中,可同时列出它接受的参数,以及返回类型。
接口
概念:定义了一套内聚行为的一个或多个操作特性标记的集合。接口是确保送耦合的一种强大的方法。它们允许类参与一套共同的功能集,除了支持接口意外,不需要别的类知道任何有关他的事情。接口的设计要遵循“接口分离原则”,参见什么是面相对象设计的SOLID原则(s)
UML图:接口的UML图展现的样式会有几种变化,但内容都是一样的。
注:在StarUML中可以通过选择Interface元素的Format->【Stereotype Display】、【Suppress Attributes】、【Suppress Operations】来调整。
联系(Association)
概念:实体之间的一个结构化关系表明对象是相互连接的。箭头是可选的,它用于指定导航能力。如果没有箭头,暗示是一种双向的导航能力。
UML图:
- 方向性。开口箭头指出关联的方向。只有一个开口箭头的关联是单向的:它仅可以在一个方向(箭头的方向)上移动。没有箭头时,表示关联是可以在两个方向上移动。
- 标签。标签是可选的,一般有一到两个词组成,用来描述关联。
- 多重性(Multiplicity)。关联的多重性在线的两端标出,每个方向有一个多重性指示器。
聚合(Aggregation)
概念:有时对象会有其他对象组成。例如,飞机由机身、机翼、引擎、起落架等组成。这些全部都是聚合这个概念的例子,它表示“is part of”关系。
UML图:

class Node { private: vector<Node*> itsNodes; };
上述代码只有当子节点不会成为父节点的父节点时(即,必须是树结构,不能是图结构),才能称之
为聚合。
组合(Composition)
概念:组合是更强形式的聚合,其中“整体”负责部分,每个“部分”对象也仅与一个整体对象联系。例如,
在任何给定时间,引擎是且仅是飞机的一部分。而且,除了飞机以外,其他对象都不能直接与引擎对象发
生交互。
UML图:
class Car { public: virtual ~Car() {delete itsCarb;} private: Carburetor* itsCarb };
依赖(Dependency)
概念:对象之间存在临时关系,只有一个原因,它们可能会相互协作。一个对象与另一个对象进行协作,它需要了解这个对象。这意味着两个对象之间必须存在对象关系或part-of关系。当两个对象之间不存在持久关联的时候,我们需要在两个类之间建立依赖。
UML图:
泛化(Generalization)
概念:表示一个更泛化的元素和一个更具体的元素之间的关系。
UML图:
AbstractKmsTheme被标记为抽象的(名字是斜体)。
实现(Realization)
概念:指定两个实体之间的一个合同。换言之,一个实体定义一个合同,而另一个实体保证履行该合同。
UML图
总结面向对象的概念和术语汇总表
| 术语 | 描述 |
| Abstract Class抽象类 | 不能实例化的类 |
| Abstraction抽象 | 一个项目(可能是类或者操作)的本质特征 |
| Aggregation聚合 | 两个类或者组件之间的关系,定义为“is part of” |
| Association关联 | 两个类或者对象之间的关系 |
| Attribute属性 | 类了解的东西(数据/信息) |
| Cardinality基数 | 表示“有多少”的概念 |
| Class类 | 类似对象的一种软件抽象,创建对象的模板 |
| Cohesion内聚 | 封装单元(如组件或者类)的相关程度 |
| Component组件 | 一种内聚功能单元,可以独立开发、发布、由其他组件编辑组成更大的单元。 |
| Composition组合 | 强类型的聚合,其中“整体”完全负责各个组成部分,每个部分对象仅与一个“整体”对象相关联 |
| Concrete Class具体类 | 可以从中实例化对象的类 |
| Coupling耦合 | 两个项目之间的依赖程度 |
| Generalization泛化 | 表示一个更泛化的元素和一个更具体的元素之间的关系。 |
| Inheritance继承 | 定义为“is a”或者“is like”的关系 |
| Instance实例 | 一个对象,它是某个类的一个示例 |
| Instantiate实例化 | 从类定义中创建对象 |
| Interface接口 | 定义了一套内聚行为的一个或多个操作特性标记的集合 |
| Message消息 | 请求星系或者执行任务 |
| Messaging消息传递 | 对象之间通过发送消息相互协作的过程 |
| Method方法 | 有执行值操作的类实现的一个过程(与结构化编程中的函数相似) |
| Multiple Inheritance多重继承 | 直接继承自一个以上的类 |
| Object对象 | 基于类定义的人物、地点、事件、事物等等 |
| Optionality选择性 | 概念“你需要它吗?” |
| Override | 在子类中重新定义属性和/或方法,以使它们与父类中的定义有区别 |
| Pattern | 在考虑相关因素的情况下,通用问题的一个可行性解决方案 |
| Polymorphism多态 | 不同的对象可以以不同的方式响应同一消息,使对象可以交互而不需要知道确切的类型 |
| Property | 在UML2中,是一个命名的值,例如,属性和关联,包括组合,指定元素(例如类或者组件)的一个特征。在Java中,属性的组合包括Getter和Setter |
| Single Inheritance多重继承 | 仅从一个类直接继承 |
| Stereotype构造型 | 建模元素的一种通用用法 |
| Subclass子类 | 继承自另一个类的类 |
| Superclass父类 | 另一个类从中继承的类 |
参考
The Ojbect Primer中文版第二章


网站有点小卡。嗯一定是太远了 。