设计模式:C#面向对象设计模式纵横谈[学习:01.面向对象的设计模式与法 课程笔记]

设计模式:C#面向对象设计模式纵横谈[学习:01.面向对象的设计模式与法 课程笔记]

首先说话:1. 面向对象设计模式与规则

设计模式简介:

      
每一个模式描述了一个在咱们周围不断重复发生的题目,以及该问题之缓解方案的基本。
                                                        ——Christopher
Alexander{建筑师}

软件设计师对设计模式的概念的解:

(1)设计模式描述了软件设计过程被某个一样看似常见问题的常备的缓解方案。
(2)面向对象设计模式描述了面向对象设计过程中、特定情景下、类及交互通信的靶子里头常见的组织关系。
(3)人是一个经验性的动物

 

GoF23 种设计模式是面向对象设计模式的基础、但无是设计模式的一切
• 历史性著作《设计模式:可复用面向对象软件的基本功》1994
一开中描述了23栽经典面向对象设计模式,创立了模式于软件设计中之身份。该书四员作者为众人连称呼Gang
of Four (GoF),“四人组”,该书讲述的23栽经典设计模式又于众人叫GoF23
种设计模式。

由于《设计模式:可复用面向对象软件的底蕴》一书确定了设计模式的地位,人们日常所说之设计模式隐含地意味着“面向对象设计模式”。但迅即并无意味着“设计模式”就当“面向对象设计模式”,也不意味GoF23栽模式就是象征了具有的“面向对象设计模式”。除了“面向对象设计模式”外,还闹其它设计模式。除了GoF23
种设计模式外,还有复多的面向对象设计模式。
• GoF23
种设计模式是读书面向对象设计模式的起点,而非终点;本培训科目的靶子是于学生在起在有效方法的基本功及,掌握GoF23栽设计模式。

 

设计模式与面向对象

面向对象设计模式解决之凡“类和互动通信的靶子期间的组织关系,包括它的角色、职责、协作方法几独点。

面向对象设计模式是“好的面向对象设计”,所谓“好之面向对象设计”是那些可以满足“应针对转移,提高复用”的设计。{“源代码就是统筹”,“好的模式是透过不鸣金收兵的重构”}

面向对象设计模式描述的是软件设计,因此其是独立为编程语言的,但是面向对象设计模式的尾声实现还要使用面向对象编程语言来表达,本课程基于C#语言,但骨子里它适用于支持.NET框架的所有.NET语言,如Visual
Basic.NET、C++/CLI等。

面向对象设计模式不像算法技巧,可以照搬照用,它是白手起家以针对“面向对象”纯熟、深入之知的底蕴及之经验性认识。掌握面向对象设计模式的前提是第一掌握“面向对象”!

 

基础:从编程语言直观了解面向对象
{至少在语言层了解面向对象,实现交汇了解面向对象}

各种面向对象编程语言相互区分,但犹能看到她对面向对象三生机制的支持,即:
“封装、继承、多态”
    – 封装,隐藏其中贯彻
    – 继承,复用现有代码
    – 多态,改写对象行为

使用面向对象编程语言(如C#),可以有助于程序员以面向对象的考虑来构思软件设计结构,从而加剧面向对象的编程范式。

C#是一律山头支持面向对象编程的精良语言,包括:各种级别的包装支持;单实现持续+多接口实现;抽象方法和虚方法重写。

 

唯独OOPL并非面向对象的全套
{应用面向目标的言语及祭面向目标设计模式是少单完全两样之情状,了解面向对象语言不可知印证你左右面向设计模式}

通过面向对象编程语言(OOPL)认识及之面向对象,并无是面向对象的成套,甚至只有是浅尝辄止的面向对象。
• OOPL的老三老机制“封装、继承、多态”
可以发挥面向对象的有所概念,但迅即三深机制自我并不曾写出面向对象的骨干精神。换言之,既可就此当下三雅机制做出“好的面向对象设计”,也堪用这三杀机制做出“差的面向对象设计”。不是用了面向对象的言语(例如C#),就兑现了面向对象的宏图及开发!因此我们不克拄编程语言的面向对象机制,来控制面向对象。

OOPL没有回应面向对象的根本性问题——我们为什么而运用面向对象?我们该什么利用三百般机制来促成“好之面向对象”?
我们当按照什么的面向对象原则?

任何一个庄重的面向对象程序员(例如C#程序员),都急需系统地念面向对象的文化,单纯由编程语言及落的面向对象知识,不能够胜任面向对象设计和开发。

 

由一个示范谈起{什么样的规划才是面向设计目标设计}
咱要统筹一个人事管理系统,其中的一个功效是针对各种不同档次的员工,计算其当月底工资——不等类别的员工,拥有不同的薪金计算制度
演示场景:(1)结构化做法(pasical\C)
1。获得人事系统受具有可能的职工类型
2。根据不同之员工类型所对应的两样的薪金制度,计算其工资
enumEmployeeType{Engineer;Sales;Manager;…}
// 计算工资程序
If ( type==EmployeeType.Engineer) {……}
else if (type== Employeetype.Sales) {……}

 

以身作则场景:(2)面向对象设计
1。根据不同之员工类型设计不同的类,并而这些类继承自一个Employee抽象类,其中有一个浮泛方法GetSalary。
2。在一一不同的职工类吃,根据自己之薪水制度,重写(override)GetSalary方法。
abstract class Employee{

public abstract intGetSalary();
}
class Engineer: Employee{

public override intGetSalary() {
……
}
}
class Sales: Employee{

public override intGetSalary() {
……
}
}
// 显示工资程序
Employee e=emFactory.GetEmployee(id);
MessageBox.Show( e.GetSalary());

当今急需变动了{}……
趁着客户公司工作范围的开展,又出新了更多花色的职工,比如钟点工、计件工……等等,这对准人事管理系统提出了挑战——原有的次序必须改变。
以身作则场景:(1)结构化做法
几乎有涉嫌到员工类型的地方(当然包括“计算工资程序”)都待做改变……这些代码都亟需再行编译,重新部署…….
(2)面向对象做法
特需要以初的公文里增添新的员工类,让那个后续自Employee抽象类,并重复写GetSalary()方法,然后于EmployeeFactory.GetEmployee方法中因相关规范,产生新的员工类型就好了。其他地方(显示工资程序、Engineer类、Sales类等)则免需举行其他改变。

 

重新认识面向对象

对于前的事例,从总层面来拘禁,面向对象的构建方式重新能适应软件之变更,能将转变所带动的影响减弱为极其小

从微观层面来拘禁,面向对象的措施更强调各个类的“责任”,新增员工类型不会见潜移默化原本员工类型的实现代码——这再合乎实际的社会风气,也再次能够操纵转变所影响的界定,毕竟Engineer类不该也新增的“钟点工”来购买只……
• 对象是啊?{不体贴内部的环节}。
– 从概念层面谈,对象是某种拥有责任之悬空{}。
– 从规范层面谈,对象是同多重可以让其他对象下的公物接口
– 从语言实现规模来拘禁,对象封装了代码和数量{封装了行为同状态}。
• 有了这些认识以后,怎样才能设计“好之面向对象”?
– 遵循一定之面向对象设计标准
– 熟悉一些榜首的面向对象设计模式

自统筹规范及设计模式
• 针对接口编程,而不是针对性落实编程–
客户无论是需掌握所动对象的特定类型,只需要理解对象拥有客户所愿意之接口。
• 优先利用对象成,而无是类继承–
类继承通常为“白箱复用”,对象成通常也“黑箱复用”。继承在某种程度上摔了封装性,子类父类耦合度高;而目标成则只是要求被整合的对
象具有得天独厚定义的接口,耦合度低。
• 封装变化点

使用封装来创建对象之间的分界层,让设计者可以在分界层的沿进行改动,而休会见指向任何一侧发生浅的影响,从而实现层次中的松耦合。

使用重构得到模式——设计模式的动不宜先称为主,一齐来即使采取设计模式是指向设计模式的绝特别误用。没有一步到位的设计模式。速软件开发实践提倡的“Refactoring
to Patterns
举凡现阶段常见公认的极度好的施用设计模式的措施。{源代码就是统筹}

 

几乎长还现实的计划条件
• 单一职责规范(SRP):
– 一个好像应该单纯发生一个逗她生成的由来。
• 开放封闭原则(OCP):
– 类模块应该是可扩大的,但是不得修改(对扩大开放,对转移封闭)
• Liskov 替换原则(LSP):
子类必须能够替换它的基类
• 依赖倒置原则(DIP):
– 高层模块不应当乘让低层模块,二者都应负让肤浅。
– 抽象不应有借助让实现细节,实现细节应该依靠让肤浅。
接口隔离原则(ISP):
– 不该强迫客户程序依赖让它们并非的点子。

讲座总结

设计模式描述了软件设计过程中有平类似常见问题的常备的缓解方案。面向对象设计模式描述了面向对象设计过程被、特定情景下、类及相互通信的靶子之间常见的组织关系。

深刻理解面向对象是学好设计模式的功底,掌握一定的面向对象设计原则才能把面向对象设计模式的花,从而实现灵活运用设计模式。
• 三格外核心面向对象设计规范
– 针对接口编程,而未是对准落实编程
– 优先采取对象成,而非是接近继承
– 封装变化点
• 使用重构得到模式。敏捷软件开发实践提倡的“Refactoring to
Patterns”是时下大面积公认的极其好的以设计模式的艺术。

admin

网站地图xml地图