面向对象设计七大原则-步骤资料
面向对象的主要6-7条编程原则并查阅常用设计模式

面向对象的主要6-7条编程原则并查阅常用设计模式面向对象的主要6-7条编程原则是 SOLID 原则,分别是单一责任原则、开闭原则、里氏替换原则、接口隔离原则、依赖倒置原则和最少知识原则。
1. 单一责任原则(Single Responsibility Principle,SRP):单一责任原则要求一个类只负责一个功能或者只有一个引起它变化的原因。
一个类只应该有一个引起它变化的原因,这样可以提高类的可维护性、可扩展性和可测试性。
设计模式参考:观察者模式(Observer Pattern)观察者模式定义了一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。
2. 开闭原则(Open-Closed Principle,OCP):开闭原则要求对扩展开放,对修改关闭。
一个模块应该是可扩展的,而不是修改其源代码。
这样可以保证系统的稳定性和可维护性。
设计模式参考:策略模式(Strategy Pattern)策略模式定义了一系列算法,并将每个算法封装在独立的类中,使它们可以互相替换。
这样可以在不修改原有代码的情况下动态改变算法的行为。
3. 里氏替换原则(Liskov Substitution Principle,LSP):里氏替换原则要求子类能够替换掉父类并保持程序逻辑的一致性。
子类应该能够完全替换父类并且不影响程序的正确性。
设计模式参考:模板方法模式(Template Method Pattern)模板方法模式定义了一个算法的骨架,将一些步骤延迟到子类中实现。
子类可以在不改变算法结构的情况下重新定义算法的某些步骤。
4. 接口隔离原则(Interface Segregation Principle,ISP):接口隔离原则要求一个类对其他类只依赖于其需要的方法。
接口应该为其使用者提供最小的依赖接口,不应该强迫它们依赖于和它们无关的方法。
设计模式参考:适配器模式(Adapter Pattern)适配器模式将一个类的接口转换成客户端所期望的另一个接口。
面向对象设计的基本原则和实践建议

面向对象设计的基本原则:1 层次化抽象原则,按照问题域逻辑关系来识别类;2 责任均衡分配原则,避免出现God类和Idiot类;3 简单化原则,一个方法尽量只处理一种情况,把问题要求进行的处理进行划分,识别出多种不同情况;4 封装原则,一个类的属性都不可以让外部直接访问;5 局部化原则,类之间不要冗余存储相同的数据,方法之间不能够出现控制耦合;6 完整性原则,一个类需要提供针对相应数据进行处理的完整方法集。
完整是个相对概念,一般来说是相对于问题域需求。
7 重用原则(共性抽取原则),把不同类之间具有的共性数据或处理抽象成继承关系,避免冗余;8 显式表达原则,显式表达所有想要表达的数据或逻辑,不使用数组存储位置或者常量来隐含表示某个特定状态或数据;9 信任原则,一个方法被调用时,调用者需要检查和确保方法的基本要求能够被满足,获得调用结果后需要按照约定的多种情况分别进行处理;10 懂我原则,所有类、对象、变量、方法等的命名做到“顾名思义”。
面向对象设计实践建议:(1) 首先问题结构分析和抽象表达:识别出几个关键类及其关系,这时候和具体的数据表示和结构都没有关系;(2) 根据问题要满足的功能,定义每个类外部可访问的行为,不涉及类的内部行为和数据,并规划这些类如何协同来完成系统功能,逐层分解。
(3) 对每个类,定义它应该保存的属性及类型,和相应的数据控制行为(外部可见),从而满足对外部可见行为的实现;(4) 系统输入和输出的处理。
分析输入和输出的层次性和模式特征。
如果如层次性,则按照相应模式分层进行处理。
顶层一般可交给主类进行处理;往下各个层次应该交给对输入分析结果感兴趣的类去处理,减少信息耦合度。
(5) 检查得到的设计结果是否出现违背相关原则的问题。
面向对象程序设计的七大原则

面向对象程序设计的七大原则是软件开发中的基本原则,也被称为“SOLID原则”。
这七个原则是由Robert C. Martin所提出的,是为了确保软件系统具有可扩展性、可维护性、可重用性和可测试性等优良的质量属性。
一、单一职责原则(SRP)单一职责原则指的是一个类应该有且只有一个引起它变化的原因。
换言之,一个类只承担一种职责或功能。
如果一个类具有多个职责,那么当其中一个职责变化时,可能影响其他职责的正确性和稳定性,从而导致软件系统出现难以预测的错误。
二、开放封闭原则(OCP)开放封闭原则指的是软件实体(类、模块等)应该是可扩展的,但不可修改的。
这意味着应该允许修改软件实体的行为,但不允许直接修改其源代码。
相反,应该通过添加新代码来扩展其功能。
通过遵循该原则,可以使软件系统更加稳定和易于维护。
三、里氏替换原则(LSP)里氏替换原则指的是,任何基类可以被替换为其子类,而不会影响软件系统的正确性。
换言之,一个子类应该能够替换掉其父类,同时保持其原有的行为和功能。
遵循该原则可以提高软件系统的灵活性和可扩展性。
四、接口隔离原则(ISP)接口隔离原则指的是,不应该限制一个类必须实现其不需要的接口。
接口应该是精简的,只包含其实现类所需要的方法和属性。
这样可以避免代码冗余和不必要的复杂性,从而提高代码的可读性和可维护性。
五、依赖倒置原则(DIP)依赖倒置原则指的是高层模块不应该依赖于低层模块,它们应该依赖于抽象接口。
同时,抽象接口也不应该依赖于具体实现类。
换言之,应该依赖于抽象而不是具体实现。
遵循该原则可以提高代码的灵活性和可重用性。
六、迪米特法则(Law of Demeter)迪米特法则,也被称为最少知识原则(LSP),其指导思想是一个对象应该尽量不去了解其它对象的内部实现细节。
这意味着一个对象只能与其直接联系的对象发生交互。
这样可以降低对象之间的耦合度,提高代码的可维护性和可测试性。
七、组合/聚合复用原则(CARP)组合/聚合复用原则是建立在利用继承和实现来实现代码重用的六大原则之外的一种方式。
面向对象程序设计之设计原则与方法

面向对象程序设计之设计原则与方法面向对象程序设计是一种先进的程序设计范式,关键在于建立一个具有自主行为和自我描述能力的程序体系结构,它可以非常自然的模拟现实世界中的对象和关系,提升程序的可读性、可扩展性和可维护性,其重要性不言而喻。
在面向对象的程序设计中,设计原则和设计方法是非常重要的,以下是我对其的理解和分析。
一、设计原则设计原则是设计过程中最重要的指导方针。
它可以帮助开发人员做出更好的设计决策,确保程序具有高内聚性和低耦合性,以此提高程序的可扩展性、可维护性和可重用性。
下面是一些常用的面向对象设计原则:1. 单一职责原则(Single Responsibility Principle,SRP)单一职责原则是指一个类、模块或者函数只负责一项任务。
这样做可以降低类的复杂度,提高代码的可读性,方便代码的维护和修改。
2. 开放-封闭原则(Open-Closed Principle,OCP)开放-封闭原则是指一个软件实体(类、模块或函数等)应该对扩展开放,对修改关闭。
也就是说,在不修改现有代码的情况下,可以通过增加新的代码来扩展软件的功能。
3. 里氏替换原则(Liskov Substitution Principle,LSP)里氏替换原则是指如果一个软件实体使用了另一个软件实体,那么它们应该是可以互换的。
也就是说,子类可以替换父类出现在程序中的任何地方,并保证程序的功能正确性。
4. 依赖倒置原则(Dependency Inversion Principle,DIP)依赖倒置原则是指高层模块不应该依赖低层模块,二者都应该依赖抽象。
同时,抽象不应该依赖细节,细节应该依赖抽象。
这样做可以降低模块之间的耦合度,提高代码的可维护性和可重用性。
5. 接口隔离原则(Interface Segregation Principle,ISP)接口隔离原则是指一个类不应该依赖一个它不需要的接口。
也就是说,一个接口应该只提供它的客户端需要的方法,而不应该强迫它们实现它们不需要的方法。
面向对象设计应遵循那些准则

面向对象设计应遵循那些准则
1. 单一职责原则(SRP):一个类或对象只应该有一个单一的职责或目的。
2. 开闭原则(OCP):开放扩展、封闭修改,即设计应该尽可能地支持拓展,而不是修改现有代码。
3. 里式替换原则(LSP):任何父类出现的地方,都可以用其子类替换,而不会影响程序的正确性。
4. 接口隔离原则(ISP):不应该强制一个类实现它用不到的接口,而是应该将接口细分为更小、更具体的接口。
5. 依赖倒置原则(DIP):高层模块不应该依赖低层模块,两者都应该依赖于抽象接口,即程序设计的抽象应该依赖于细节,而不是细节依赖于抽象。
6. 迪米特法则(LoD):一个对象应该仅知道与其相关的对象,而不应该知道与其无关的对象。
7. 组合/聚合复用原则(CARP):优先使用组合或聚合的方式实现代码复用,而不是继承。
面向对象开发中的七大设计原则和23种设计模式

⾯向对象开发中的七⼤设计原则和23种设计模式⼀、⾯向对象开发中的七⼤设计原则 软件开发中最核⼼的思想就是“⾼内聚,低耦合”,主要的⽬的也是为了⽅便后期的维护和变更。
下⾯的设计原则也是依靠这个核⼼思想衍⽣出来的。
1、单⼀职责原则【SINGLE RESPONSIBILITY PRINCIPLE】:单⼀职责原则想表达的核⼼思想就是“⾼内聚”,⼀个模块只完成⼀项功能。
在⾯向对象设计中,⼀个类只应该负责⼀项职责,如果同时承担太多职责,就等于把这些职责耦合在了⼀起。
后⾯很可能因为某项职责的变更⽽导致其他职责的削弱或者抑制其他职责的能⼒。
2、⾥⽒替换原则【LISKOV SUBSTITUTION PRINCIPLE】:任何时候都可以⽤⼦类型来替换⽗类型。
3、依赖倒置原则【DEPENDENCE INVERSION PRINCIPLE】:⾯向接⼝编程,声明⽅法的参数类型、⽅法的返回类型、变量的引⽤类型时,尽可能使⽤抽象类型⽽不⽤具体类型,因为抽象类型可以被它的任何⼀个⼦类型所替代,请参考下⾯的⾥⽒替换原则。
4、接⼝隔离原则【INTERFACE SEGREGATION PRINCIPLE】:建⽴单⼀接⼝,不要建⽴庞⼤臃肿的接⼝,尽量细化接⼝。
5、迪⽶特法则【LOW OF DEMETER】:迪⽶特法则⼜叫最少知识原则,⼀个对象应当对其他对象有尽可能少的了解。
(低耦合) 6、开闭原则【OPEN CLOSE PRINCIPLE】⼀个软件实体如类、模块和函数应该对扩展开放,对修改关闭。
7、组合/聚合复⽤原则【Composition/Aggregation Reuse Principle(CARP) 】:尽量使⽤组合和聚合,少使⽤继承的关系来达到复⽤的原则。
类与类之间简单的说有三种关系,IS-A关系、HAS-A关系、USE-A关系,分别代表继承、关联和依赖。
其中,关联关系根据其关联的强度⼜可以进⼀步划分为关联、聚合和合成,但说⽩了都是HAS-A关系,合成聚合复⽤原则想表达的是优先考虑HAS-A关系⽽不是IS-A关系复⽤代码⼆、23种设计模式 设计模式是⼀套被反复使⽤的代码设计经验的总结,是对上⾯的设计原则的进⼀步细化,使⽤设计模式是为了可重⽤代码、让代码更容易被他⼈理解、保证代码可靠性。
面向对象基础设计原则

面向对象基础设计原则
1.单一职责原则(SRP):一个类应该只有一个引起变化的原因。
换句话说,一个类应该只有一个责任。
2.开放封闭原则(OCP):一个模块应该对扩展开放,对修改关闭。
也就是说,一个模块的行为应该是可扩展的,而不是通过修改代码来实现。
3.里氏替换原则(LSP):子类必须完全替换其父类。
换句话说,如果一个函数期望父类,那么它必须以其子类作为参数。
4.依赖倒置原则(DIP):高级模块不应该依赖于低级模块,两者都应该依赖于抽象接口。
抽象接口不应该依赖于实现细节,而实现细节应该依赖于抽象接口。
5.接口隔离原则(ISP):不应该强迫客户端实现它们不需要的方法。
接口应该根据使用者的需求而设计,而不是根据实现者的需求而设计。
6.合成/聚合复用原则(CARP):通过合成/聚合来实现代码复用,而不是继承。
这样做可以避免继承的一些缺点,如紧密耦合和脆弱性。
面向对象7大原则

面向对象7大原则1.单一职责原则(SRP)一个类应该只有一个引起它变化的原因。
也就是说,一个类只负责一项职责。
例如,一个“员工信息管理类”,它就只应该负责员工信息(如姓名、年龄、职位等)的增删改查操作,而不应该同时处理工资计算等其他功能。
这样可以使类的职责更加明确,当系统功能需要改变时,只需要修改对应的职责类,降低类之间的耦合度。
2.开闭原则(OCP)软件实体(类、模块、函数等)应该对扩展开放,对修改关闭。
比如开发一个图形绘制系统,一开始有绘制圆形的功能,用一个“圆形绘制类”来实现。
当需要增加绘制矩形的功能时,不应该修改“圆形绘制类”,而是通过新建一个“矩形绘制类”来扩展系统功能。
这样可以保证原有代码的稳定性,减少修改可能带来的风险。
3.里氏替换原则(LSP)所有引用基类(父类)的地方必须能透明地使用其子类的对象。
例如有一个“交通工具”基类,有“行驶”方法,“汽车”和“自行车”是它的子类。
在程序中如果有一个使用“交通工具”类型的方法(如计算行驶里程),那么“汽车”和“自行车”的对象都可以正确地代入这个方法中,并且不改变程序的正确性。
这保证了继承关系的正确性和代码的可维护性。
4.依赖倒置原则(DIP)高层模块不应该依赖低层模块,二者都应该依赖其抽象;抽象不应该依赖细节,细节应该依赖抽象。
比如在一个电商系统中,“订单处理模块”(高层模块)不应该直接依赖“数据库存储模块”(低层模块)。
而是定义一个“数据存储接口”,“订单处理模块”依赖这个接口,“数据库存储模块”实现这个接口。
这样可以降低模块之间的耦合度,方便系统的扩展和维护。
5.接口隔离原则(ISP)客户端不应该被迫依赖于它不需要的接口。
例如,在一个系统中有“用户管理接口”,里面包含了用户的增删改查、用户权限设置等多个方法。
但对于一个只负责用户信息显示的模块,它只需要用户的查询方法,那就应该把这个接口拆分成更小的接口,如“用户查询接口”和“用户操作接口”,让这个模块只依赖它需要的“用户查询接口”,避免引入不需要的方法和依赖。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
面向对象设计原则
A. 面向对象设计七大原则
a) 开闭原则
Ø 软件实体对扩展开发,对修改关闭。
Ø 当软件系统面对着新的需求的时候,系统的设计是稳定的。
Ø 满足“开-闭”原则系统的优点:
1. 通过扩展已有的模块,提供新的行为,满足新需求,使得变化中的软件系统有一定的适应性和灵活性
2. 已有的软件模块,特别是最重要的抽象层模块不能再修改,这就使得变化中的模块有一定的稳定性和延续性.
Ø 怎样才能做到开闭原则?
1. 抽象化,为系统定义一个不再更改的抽象设计,这个设计预见了所有可能的变化。
满足了开闭原则的“闭”
2. 找到系统中变化的部分,把可变性封装起来。
使用继承或者其他方式来封装变化,将变化封装在一个方法中或者一个类中。
b) “里氏转换”原则(LSP)
Ø 定义:如果一个软件实体使用一个基类的话,那么一定适合于它的子类。
也就是基类出现的地方,子类一定可以出现,替换后软件行为不会发生变化,而且它根本不能识别出基类和子类对象的区别。
Ø 里氏转换原则是对开-闭原则的补充。
违反了里氏原则,有就违反了开闭原则;反之不成立。
Ø 里氏转换原则是继承复用的基础.只有当衍生类可以替换掉基类,软件功能不会受到影响的时候,基类才能被真正复用,而衍生类才能在基类的基础上增加新的行为。
Ø 理氏转换原则是代理模式成立的基础.代理模式和真实主题模式都是抽象主题角色的子类。
客户端只知道抽象主题,而代理主题可以替代抽象主题出现在任何地方
c) “依赖倒转”原则
Ø 抽象不应该依赖于细节,细节应该依赖于抽象.
Ø (高层模块不应该依赖于底层模块,两个都依赖于抽象)
Ø 通俗地说:面向接口编程,不要对实现编程.
d) “接口隔离”原则
Ø 使用专门的接口比使用一个总的接口好;一个类对另外一个类的依赖性应当建立在最小的接口上的.
Ø 接口理解成角色,一个接口就只是代表一个角色,每个角色都有它特定的一个接口,这里的这个原则可以叫做"角色隔离原则".
Ø OOD设计的时候,准确的划分角色以及角色对应的接口。
将没有关系的接口合并在一起,就会对接口和角色构成污染。
e) “组合/聚合复用”原则
Ø 要尽量使用合成/聚合达到复用,尽量少用继承。
Ø 将一个已经有的对象纳入新对象中,使之成为新对象的一部分,新对象可以调用引入的旧对象的方法和功能.
Ø 优势:
1. 新对象存取成分对象的唯一方法是通过成分对象的接口。
2. 这种对象的复用是黑箱复用,因为成分对象的内部实现细节对于新的对象是看不见的。
3. 这种复用支持包装。
4. 新对象可以在运行的时候动态的引用于成分对象类型相同的对象。
f) “组合/聚合复用”原则
Ø 继承复用的优势:
1. 新的实现较为容易,因为超类的大部分功能可以通过继承关系自动进入子类。
2. 修改或者扩展继承而来的实现比较容易。
Ø 继承复用的缺点:
1. 继承复用破坏包装。
将超类的实现细节暴露给子类。
超类的内部细节常常对子类是透明的,白箱复用。
2. 超类的实现发生了改变,子类的实现也不得不改变
3. 超类继承而来的是静态的,不可能在运行时间内发生改变。
因此没有足够的灵活性。
g) “迪米特”原则
Ø 又叫最少知识原则;
Ø 一个对象应当对其他对象有尽可能少的了解。
Ø 只与你的朋友们通信,不要和陌生人说话;
Ø 不相往来: 将被统治的对象隔离开来,使它们没有直接的通信,可以达到分化瓦解,继而分而治之的效果
Ø 迪米特法则能够减少耦合.类之间的耦合越小,越有利于复用。
Ø “定制服务”设计原则,只向客户端提供客户端需要的方法,其他的不需要的不提供,这也是符合迪米特法则的。
h) 单一职责原则
Ø 就一个类而言,应该仅有一个引起他变化的原因。
Ø 如果一个类承担的职责过多,就等于把这些职责耦合在一起,一个职责的变化可能会削弱或者抑制这个类完成其他职责的能力。
这种耦合会导致脆弱的设计。
当变化发生的时候,设计会遭受意想不到的破坏。
Ø 对设计而言,就是发现职责并把这些职责分离。
B. 面向对象系统设计(OOD)
a) OOD的步骤:
Ø 细化重组类
Ø 细化和实现类之间的关系,明确其可见性.
Ø 增加属性,指定属性的类型和可见性.
Ø 分配职责,定义执行每个职责的方法.
Ø 对消息驱动的系统,明确消息传递的方式.
Ø 利用设计模式进行局部设计.
Ø 画出详细的类图和时序图。