OOAD---UML图,设计原则,设计模式

620 阅读6分钟

UML图

类的表示

在 UML 中,类使⽤包含类名、属性和操作且带有分隔线的矩形来表示。 (1) 类名(Name)是⼀个字符串,例如,Student。 (2) 属性(Attribute)是指类的特性,即类的成员变量。 UML 按以下格式表示:[可⻅性]属性名:类型[=默认值]。 注意:“可⻅性”表示该属性对类外的元素是否可⻅,包括公有(Public)、私有(Private)、受保护 (Protected)和朋友(Friendly)4 种,在类图中分别⽤符号+、-、#、~表示。 (3) 操作(Operations)是类的任意⼀个实例对象都可以使⽤的⾏为,是类的成员⽅法。UML 按以下格 式表示:[可⻅性]名称(参数列表)[:返回类型]。 图 1 所示是学⽣类的 UML 表示。 image.png

接口的表示

接⼝(Interface)是⼀种特殊的类,它具有类的结构但不可被实例化,只可以被⼦类实现。它包含抽象 操作,但不包含属性。它描述了类或组件对外可⻅的动作。在 UML 中,接⼝使⽤⼀个带有名称的⼩圆圈 来进⾏表示。 图 2 所示是图形类接⼝的 UML 表示。 image.png

类之间的关系与表示

在软件系统中,类不是孤⽴存在的,类与类之间存在各种关系。 根据类与类之间的耦合度从弱到强排列,UML 中的类图有以下⼏种关系:依赖关系、一般关联关系、聚合关 系、组合关系、泛化关系和实现关系。其中泛化和实现的耦合度相等,它们是最强的。

依赖关系

依赖(Dependency)关系是⼀种使⽤关系,它是对象之间耦合度最弱的⼀种关联⽅式,是临时性的关 联。在代码中,某个类的⽅法通过【局部变量、⽅法的参数或者对静态⽅法】的调⽤来访问另⼀个类 (被依赖类)中的某些⽅法来完成⼀些职责。 在 UML 类图中,依赖关系使⽤带箭头的虚线来表示,箭头从使⽤类指向被依赖的类。图 4 所示是⼈与 ⼿机的关系图,⼈通过⼿机的语⾳传送⽅法打电话。 image.png

一般关联关系

在 UML 类图中,双向的关联可以⽤带两个箭头或者没有箭头的实线来表示,单向的关联⽤带⼀个箭头的 实线来表示,箭头从使⽤类指向被关联的类。也可以在关联线的两端标注⻆⾊名,代表两种不同的⻆ ⾊。 在代码中通常将⼀个类的对象作为另⼀个类的【成员变量】来实现关联关系。 图 5 所示是⽼师和学⽣的关系图,每个⽼师可以教多个学⽣,每个学⽣也可向多个⽼师学,他们是双向 关联。 image.png

聚合关系

聚合(Aggregation)关系是关联关系的⼀种,是强关联关系,是整体和部分之间的关系,是 has-a 的关 系。 聚合关系也是通过成员对象来实现的,其中成员对象是整体对象的⼀部分,但是成员对象可以脱离整体 对象⽽ᇿ⽴存在。例如,学校与⽼师的关系,学校包含⽼师,但如果学校停办了,⽼师依然存在。 在 UML 类图中,聚合关系可以⽤带空⼼菱形的实线来表示,菱形指向整体。 图 6 所示是⼤学和教师的关系图。 image.png

组合关系

组合(Composition)关系也是关联关系的⼀种,也表示类之间的整体与部分的关系,但它是⼀种更强 烈的聚合关系,是 contains-a 关系。 在组合关系中,整体对象可以控制部分对象的⽣命周期,⼀旦整体对象不存在,部分对象也将不存在, 部分对象不能脱离整体对象⽽存在。例如,头和嘴的关系,没有了头,嘴也就不存在了。 在 UML 类图中,组合关系⽤带实⼼菱形的实线来表示,菱形指向整体。 图 7 所示是头和嘴的关系图。 image.png

泛化关系(继承)

泛化(Generalization)关系是对象之间耦合度最⼤的⼀种关系,表示⼀般与特殊的关系,是⽗类与⼦ 类之间的关系,是⼀种继承关系,是 is-a 的关系。 在 UML 类图中,泛化关系⽤带空⼼三⻆箭头的实线来表示,箭头从⼦类指向⽗类。在代码实现时,使⽤ ⾯向对象的继承机制来实现泛化关系。例如,Student 类和 Teacher 类都是 Person 类的⼦类,其类图 如图 8 所示。 image.png

实现关系(接⼝)

实现(Realization)关系是接⼝与实现类之间的关系。在这种关系中,类实现了接⼝,类中的操作实现 了接⼝中所声明的所有的抽象操作。 在 UML 类图中,实现关系使⽤带空⼼三⻆箭头的虚线来表示,箭头从实现类指向接⼝。例如,汽⻋和船 实现了交通⼯具,其类图如图 9 所示。 image.png

面向对象设计原则

开闭原则

开闭原则是总纲,它告诉我们要对扩展开放,对修改关闭。

⾥⽒替换原则

⾥⽒替换原则告诉我们不要破坏继承体系,所有引⽤基类对象的地⽅能够透明地使⽤其⼦类的对象。

依赖倒置原则

依赖倒置原则告诉我们要⾯向接⼝编程,⽽不是针对实现编程。

单⼀职责原则

⼀个类只负责⼀个功能领域中的相应职责。

接⼝隔离原则

使⽤多个专⻔的接⼝,⽽不使⽤单⼀的总接⼝。

迪⽶特法则

⼀个软件实体应当尽可能少地与其他实体发⽣相互作⽤。

合成复⽤原则

尽量使⽤对象组合,⽽不是继承来达到复⽤的⽬的。

设计模式的类型

总体来说,设计模式按照功能分为三类23种:

创建型(5种) :

⼯⼚模式、抽象⼯⼚模式、单例模式(重点)、原型模式、构建者模式

结构型(7种):

适配器模式、装饰模式、代理模式(重点) 、外观模式、桥接模式、组合模式、享 元模式

⾏为型(11种):

模板⽅法模式、策略模式 、观察者模式、中介者模式、状态模式、 责任链模式 、 命令模式、迭代器模式、访问者模式、解释器模式、备忘录模式