1、UML(统一建模语言,包括视图,图,模型元素和通用机制四部分,5种视图和13个图)
2、类与类图
(1)类的属性即类的数据职责,类的操作即类的行为职责
(2)类图(Class Diagram)使用出现在系统中的不同类来描述系统的静态结构,它用来描述不同的类以及它们之间的关系
(3)在UML类图中,类一般由三部分组成:类名,属性和类的操作。
(PS:可见性:公有(+);私有(-);受保护(#)。为了保证数据的封装性,属性的可见性一般为private,通过公有的Getter和Setter方法供外界使用。参数个数是任意的,多个参数之间用“逗号”隔开。如果是构造方法,则无返回类型。)
3、类之间的关系(注意各种关系之间的符号表示)(关联关系全是实线,依赖关系是虚线)
(1)关联关系:
1)双向关联(直线)
2)单向关联(带箭头的实线)
3)自关联
4)多重性关联
5)聚合关系(聚合(Aggregation)关系表示整体与部分的关系;在聚合关系中,成员对象是整体对象的一部分,但是成员对象可以脱离整体对象独立存在;带空心菱形的直线表示)
6)组合关系(组合(Composition)关系也表示类之间整体和部分的关系,但是在组合关系中整体对象可以控制成员对象的生命周期,一旦整体对象不存在,成员对象也将不存在;带实心菱形的直线表示)
(PS:聚合关系表示整体与部分关系比较弱,而组合关系较强;聚合关系通过对象注入方式实现,而组合关系通过在整体类的构造函数中实例化成员类来实现,共同点是一个类的实例为另一个类的成员对象)
(2)依赖关系(某个类的方法使用另一个类的对象作为参数;用带箭头的虚线表示。由依赖的一方指向被依赖的一方)
(3)泛化关系(即继承关系,描述父类与子类之间的关系;用带空心三角形的直线来表示;在Java语言中使用extends关键字、在C++/C#中使用冒号“:”来实现)
(4)接口与实现关系(接口之间也可以有与类之间关系类似的继承关系和依赖关系;接口和类之间存在一种实现(Realization)关系,在这种关系中,类实现了接口,类中的操作实现了接口中声明的操作;用带空心三角形的虚线来表示;在Java语言中使用implements关键字、在C++/C#中使用冒号“:”来实现)
4、顺序图是一种强调对象间消息传递次序的交互图,又称为时序图或序列图。
5、状态图用来描述一个特定对象的所有可能状态及引起其状态转移的事件。
6、对于面向对象的软件系统设计来说,在支持可维护性的同时提高系统的可复用性是一个核心问题,面向对象设计原则正是为解决这个问题而诞生的。 面向对象设计原则为支持可维护性复用而诞生,属于指导性原则,非强制性原则(7个,原则并不是孤立存在的,它们相互依赖、相互补充)
7、重点原则:(七大面向对象设计原则)
(1)单一职责原则(最简单的面向对象设计原则)
一个对象应该只包含单一的职责,并且该职责被完整地封装在一个类中(将不同的变化原因封装在不同的类中,单一职责原则是实现高内聚、低耦合的指导方针)
(2)开闭原则(里氏代换原则,依赖倒转原则等原则都是开闭原则的实现方法)
软件实体应当对扩展开放,对修改关闭。(开闭原则是面向对象的可复用设计的第一块基石;开闭原则是指软件实体应尽量在不修改原有代码的情况下进行扩展;抽象化是开闭原则的关键;)
(3)里氏代换原则
所有引用基类(父类)的地方必须能透明地使用其子类的对象。(在软件中将一个基类对象替换成它的子类对象,程序将不会产生任何错误和异常,反过来则不一定成立;在程序中尽量使用基类类型来对对象进行定义,而在运行时再确定其子类类型)
(4)依赖倒转原则
高层模块不应该依赖低层模块,它们都应该依赖抽象。抽象不应该依赖于细节,细节应该依赖于抽象。(要针对接口编程,不要针对实现编程;在程序代码中传递参数时或在关联关系中,尽量引用层次高的抽象层类;在代码中使用抽象类,而将具体类写在配置文件中;针对抽象层编程,将具体类的对象通过依赖注入(Dependency Injection, DI)的方式注入到其他对象)
8、设计模式
(1)定义:设计模式(Design Pattern)是一套被反复使用、多数人知晓的、经过分类的、代码设计经验的总结
(2)目的:使用设计模式是为了可重用代码、让代码更容易被他人理解、提高代码的可靠性
(3)设计模式的关键要素包括四个方面:
1)模式名称
2)问题
3)解决方案
4)效果
9、设计模式的分类
根据目的分为(模式是用来做什么的)创建型(Creational),结构型(Structural)和行为型(Behavioral)三类:
创建型模式主要用于创建对象(5种)
结构型模式主要用于处理类或对象的组合(7种)
行为型模式主要用于描述类或对象如何交互和怎样分配职责(11种)
(GoF一共描述了23种设计模式)