第二周
统一建模语言 UML是一种直观化 明确化 构建和文档化软件系统产物的通用可视化建模语言 它捕捉了被构建系统的有关决策和理解 用来理解 设计 浏览 配置 维 护以及控制系统的信息捕捉系统静态结构和动态行为的信息 还包括用包来分解模型的组织性结构 不是编程语言
一、UML第一部分
介绍了UML的概念,视图,扩展结构,视图之间的联系等等。
二、设计模式六大原则
设计原则是思想上的指导,而设计模式是实现上的手段,是针对某个场景下某些问题的某个解决方案,因此设计模式应该遵 守这些原则,换句话说,设计模式就是这些设计原则的一些具体体现。
1.设计模式的目的
设计模式是为了更好的代码重用性,可读性,可靠性,可维护性。
2.常用的六大设计模式
1)单一职责原则
2)里氏替换原则
3)依赖倒转原则
4)接口隔离原则
5)迪米特法则
6)开闭原则
UML(统一建模语言),是一种直观化 明确化 构建和文档化软件系统产物的通用可视
化建模语言。UML可以与所有的开发方法、生命阶、段 应用领域和媒介一同使用,
它不是编程语言, 工具可以提供 UML 至各种编程语言的代码生成 ,以及可以从现有
的程序逆向构筑模型。
UML概念和模型可以被划分为以下的范围:
静态结构、动态行为、实现构造、模型组织、扩展机制。
UML视图在最高层次可以划分为三个领域 :结构性分类、动态行为和模型管理。
结构性分类描述了系统中的事物和事物间的关系 。分类包括类 、用例 、构件和结点。 分
类提供了动态行为构建的基础。 分类视图包括静态视图 、用例视图和实现视图。
动态行为描述了系统时间上的行为。 行为可以用静态视图中系统快照的一系列变更来描
述。 行为视图包括状态机图 、活动图和交互图。
模型管理描述了用层次式的单元对模型自身的组织。 包是模型的通用组织单元。特殊的
包包括模型和子系统。 模型管理视图与其它视图相交迭 ,为团队工作和配置控制把它们组
织起来。
静态视图对应用领域的概念建模,以及将内建的概念作为应用实现的一部分。该视图不
描述时间相关的行为,因而是静态的。时间相关的行为由其它视图描述。静态视图的主要
组成部分是类和关系:关联、继承和各种依赖,如实现和使用。
用例视图对外部用户 -- 称为活动者 -- 所感知的系统功能进行建模。用例是用活动者
和系统之间的交互来表达、条理分明的功能单元。用例视图的目的是列举活动者和用例
显示活动者在每个用例中的参与情况。
设计模式六大原则:
1、单一职责原则
2、里氏替换原则
3、依赖倒置原则
4、接口隔离原则
5、迪米特法则
6、开闭原则
设计模式原则
一、 单一职责原则:
1、 定义:应该有且仅有一个原因引起类的变更。
2、 单一职责原则要求:单一职责原则要求一个接口或类只有一个原因引起变化,也就是一个接口或类只有一个职责,它就是负责一件事情。
3、 单一职责原则的好处:
①类的复杂性降低,实现什么职责都有清晰明确的定义;
②可读性提高,复杂性降低,因此提高了可读性;
③可维护性提高,可读性提高,因此更容易维护;
④变更引起的风险降低,变更是必不可少的,如果接口的单一职责做的好,一个接口修改只对相应的实现类有影响,对其他接口无影响,这对系统的扩展性、维护性都有非常大的帮助。
注意:在面向接口编程中,我们对外公布的是接口而不是实现类。
单一职责原则提出了一个编写程序的标准,用“职责”或“变化原因”来衡量接口或类设计的是否优良,但是“职责”和“变化原因”都是不可度量的,因项目而异,因环境而异。
二、 里氏替换原则:
1、 继承语言机制的优点:
a.代码共享,减少创建类的工作量,每个子类都拥有父类的方法和属性;
b.提高代码的重用性;
c.子类可以形似父类,但又异于父类,“龙生龙,凤生凤,老鼠生来会打洞”是说子拥有父的“种”,“世界上没有两片完全相同的叶子”是指明子与父的不同;
d.提高代码的可扩展性,实现父类的方法就可以“为所欲为”了,君不见很多开源框架的扩展接口都是通过继承父类来完成的;
e.提高产品或项目的开放性。
2、继承的缺点如下:
a.继承是侵入性的。只要继承,就必须拥有父类的所有属性和方法;
b.降低代码的灵活性。子类必须拥有父类的属性和方法,让子类自由的世界中多了些约束。
c.增强了耦合性。当父类的常量、变量和方法被修改时,必需要考虑子类的修改,而且在觖乏规范的环境下,这种修改可能带来非常糟糕的结果一大片的代码需要重构。
3、 里氏替换原则的两种定义:
①如果对每一个类型为S的对象O1,都有类型为T的对象O2,使得以T定义的所有程序P在所有的对象O1都代换成O2时,程序P的行为没有发生变化,那么类型S是类型T的子类型。
②所有引用基类的地方必须能透明的使用其子类对象。
4、 里氏替换原则继承的规范
A:子类必须完全实现父类的方法。
B:子类可以有自己的个性。
C:覆盖或实现父类方法时输入参数可以被放大。
D:覆写或实现父类的方法时输出结果可以被缩小。
三、 依赖倒置原则:
定义:1、高层模块不应该依赖低层模块,两者都应该依赖其抽象;
2、抽象不应该依赖细节;
3、细节应该依赖抽象。
高层模块和低层模块容易理解,每一个逻辑的实现都是由原子逻辑组成的,不可分割的原子逻辑就是低层模块,原子逻辑的再组装就是高层模块。那什么是抽象?什么又是细节呢?在Java语言中,抽象就是指接口或抽象类,两者都是不能直接被实例化的;细节就是实现类,实现接口或继承抽象类而产生的类就是细节,其特点就是可以直接被实例化,也就是可以加上一个关键字new产生-一个对象。依赖倒置原则在Java语言中的表现就是:
1、模块间的依赖通过抽象发生,实现类之间不发生直接的依赖关系,其依赖关系是通过接
2、或抽象类产生的:
3、接口或抽象类不依赖于实现类;
4、实现类依赖接口或抽象类。
C#面向对象设计模式纵横谈
第一讲 面向对象设计模式与原则
设计模式
1.什么是设计模式? (相当于程序设计的经验)
设计模式是在软件设计过程中,遇到的某一类问题的一般性解决方案。
2.什么是面向对象设计模式? (环境:面向对象)
面向对象设计模式描述了在面向对象软件设计工作中,特定的环境下,类与相互通信的对象之间常见的组织关系。
3.GOF(“四人组”) 23种设计模式:
GOF 23种设计模式是面向对象设计模式的起点,而非终点。
4.“GOF 23种设计模式”与“面向对象设计模式”的关系:
1>“GOF 23种设计模式”隐含地表示“面向对象设计模式”。
2>“GOF 23种设计模式”不等于“面向对象设计模式”,“面向对象设计模式”是大范围的。
3>除了“GOF 23种设计模式”外,还有更多的“面向对象设计模式”。
面向对象设计模式
1.设计目的:
解决类与相互通信的对象之间的组织关系,包括角色、职责、协作方式几个方面。
2.什么样的面向对象设计模式才是好的?
遵循原则:减少修改,提高复用。
3.面向对象设计模式适用于什么情况?
适用于支持.net框架的所有.net语言,如C++等。
4.注意:面向对象设计模式不是数学公式,应该通过“重构”得来,是建立在对“面向对象”纯熟、深入的理解的基础上的经验性知识。
5.面向对象的三大特性:
1> 封装:隐藏内部信息
2> 继承:提高代码复用
3> 多态:改写对象的行为
6.C# 的好处?
强化面向对象的编程思维。
7.不能通过面向对象语言来看待面向对象,这种认识是片面的,是停留在代码实现阶段的,要系统地理解面向对象。
8.怎样认识面向对象设计模式?
从微观层面看,更强调各个类的“责任”。
9.什么是“对象”?
1> 概念层面上看,对象是拥有某种责任的抽象。
2> 规格层面上看,对象是一系列可以被其他对象使用的公共接口。
3> 实现层面上看,对象封装了状态和行为。
10.怎样设计“好的面向对象”呢?
掌握“面向对象”->遵循一定的面向对象设计原则->熟练运用一些典型的设计模式。
11.概述设计原则?
1>针对接口进行编程,而不是针对实现编程。
2>优先使用对象组合,而不是类继承。类继承耦合度高,破坏了封装,对象组合耦合度较低。
一般具有强烈的父类、子类迹象,才使用类继承。
3>封装变化点:封装的代码不会影响其他代码。
12.详细设计原则(5个):
1>单一职责原则(SRP):只有一个引起变化的原因。
2>开放封闭原则(OCP):尽可能不会引起改变,可以进行扩展。
3>Liskov替换原则(LSP):子类必须可以替换父类。
4>依赖倒置原则(DIP):高层模块不依赖低层模块,二者都应依赖抽象。实现细节应依赖于抽象。
5>接口隔离原则:不依赖用不着的方法。

浙公网安备 33010602011771号