面向对象设计原则
面向对象设计原则-开放封闭原则,对于扩展是开放的,对于修改是封闭的。
修改(增加)类的成员变量或属性都是属于“修改”。
扩展一般是指在原有的架构(小一点的说是接口)基础上进行扩展。
开放封闭原则是指在现有的功能中,不修改原有的代码中进行扩展。
为符合开放封闭原则,可以利用一些设计模式来实现。
如第四副图,在原有countArea()方法需要增加输出功能。
比如可以使用适配器模式(前提是要面向接口编程)。
如下:原先的设计是定义一个接口ISqure,其定义的方法为第四副图左边类Squre包含的setLength、countArea方法。
第四副图左边类Squre实现了ISqure。
客户端调用代码:ISqure squre = new Square(); (一般不会这样直接获取对象,如通过工厂方法获取对象);double area = squre.countArea();以上是原有的设计现在需要countArea方法中还具有输出功能,如何在不修改Squre类的情况下做到呢?新建另一个类SqureImpl,同时它也实现接口ISqure,代码如下:public class SqureAdapter implements ISqure{static ISqure squre = new Squre();//原有的代码中的类Squrepublic void setLength(double length){squre.setLength(length);}public double countArea(){double area = squre.countArea();System.out.println(area); //增加输出areareturn area;}}修改客户端调用代码:ISqure squre = new SqureAdapter(); double area = squre.countArea();这样达到了不修改原有Square类,而是通过继承(扩展)接口ISqure,来增加了输出area的功能。
这样做的好处是维持了原有代码(功能)的稳定性(可能系统的代码其他地方有很多调用Square的countArea方法,这样对它们是不影响的)。
我也是最近在看面向对象设计原则的书,有问题或建议请提出来,大家共同学习。
设计模式是6大原则还是7大原则
设计模式应该是六大原则吧1、开闭原则(Open Close Principle)开闭原则就是说对扩展开放,对修改关闭。
在程序需要进行拓展的时候,不能去修改原有的代码,实现一个热插拔的效果。
所以一句话概括就是:为了使程序的扩展性好,易于维护和升级。
想要达到这样的效果,我们需要使用接口和抽象类,后面的具体设计中我们会提到这点。
2、里氏代换原则(Liskov Substitution Principle)里氏代换原则(Liskov Substitution Principle LSP)面向对象设计的基本原则之一。
里氏代换原则中说,任何基类可以出现的地方,子类一定可以出现。
LSP是继承复用的基石,只有当衍生类可以替换掉基类,软件单位的功能不受到影响时,基类才能真正被复用,而衍生类也能够在基类的基础上增加新的行为。
里氏代换原则是对“开-闭”原则的补充。
实现“开-闭”原则的关键步骤就是抽象化。
而基类与子类的继承关系就是抽象化的具体实现,所以里氏代换原则是对实现抽象化的具体步骤的规范。
—— From Baidu 百科3、依赖倒转原则(Dependence Inversion Principle)这个是开闭原则的基础,具体内容:真对接口编程,依赖于抽象而不依赖于具体。
4、接口隔离原则(Interface Segregation Principle)这个原则的意思是:使用多个隔离的接口,比使用单个接口要好。
还是一个降低类之间的耦合度的意思,从这儿我们看出,其实设计模式就是一个软件的设计思想,从大型软件架构出发,为了升级和维护方便。
所以上文中多次出现:降低依赖,降低耦合。
5、迪米特法则(最少知道原则)(Demeter Principle)为什么叫最少知道原则,就是说:一个实体应当尽量少的与其他实体之间发生相互作用,使得系统功能模块相对独立。
6、合成复用原则(Composite Reuse Principle)原则是尽量使用合成/聚合的方式,而不是使用继承。
...
请问“开发模式”,“架构模式”和“设计模式”的定义和区别
开发模式 也就是瀑布,螺旋等四种开发模式架构模式 这个就说不太清楚,从俗语言说一下吧:层、模型-视图-控制、表示-抽象-控制 等设计模式 开-闭原则、抽象类、合成/聚合原则等和UML设计相关的很多,你看一下Rose、EA等UML工具就明白了
面向对象编程的3大特性是什么?设计原则有哪些
面向对象的特点是:封装.多态.继承.其中多态有分为重载和重写.面向对象的编程思想更加接近现实的事物. 有这样几点好处: 1.是编程更加容易.因为面向对象更接近于现实.所以你可以从现实的东西出发.进行适当的抽象. 2.在软件工程上.面向对象可以使工程更加模块化.实现更低的耦合和更高的内聚. 3.在设计模式上(似乎只有面向对象才设计到设计模式).面向对象可以更好的实现开-闭原则.也使代码更易阅读.
java与模式,“对可变性的封装原则”?
一楼的回答就是“对可变性的封装原则”基本概念,这种东西还是举一个例子吧!比如“人”作为一个对象来说他是属于可变的,最起码她可以分为男人和女人,好了,我们直接上代码abstract class Person{//简单的给出了两个属性,姓名和性别protected String name="";protected String sex = "";public Person(String name,String sex){this.name = name;this.sex = sex;}/** 不管男性女性都有走路的行为* */public void run(){System.out.println(this.name+"走路");}public void eat(){System.out.println(this.name+"吃饭");}public abstract void method();}class Man extends Person{public Man(String name, String sex) {super(name, sex);System.out.println("初始化男性同胞");}/*** 这是男性特有的行为,打仗(当然女性也可以打仗,我们只假设男性会打仗)*/public void method(){System.out.println(this.name+"参加战斗");}}class Women extends Person{public Women(String name, String sex) {super(name, sex);System.out.println("初始化女性同胞");}/*** 女性有生育的行为*/public void method(){System.out.println(this.name+"生小孩");}}public class Hello{public static void main(String[] args) {Person man = new Man("zhangsan", "male");man.eat();man.run();man.method();Person women = new Women("zhangsan", "male");women.eat();women.run();women.method();}}由于person是可变的,所以我们对其进行了抽象封装,man和women分别对其进行了继承,那么我们如何让它可变呢,衍生出不同的子类就是一种可变,更严格的说就是一种扩展。
设计模式中优先使用什么关系实现复用
开-闭”原则,即“对扩展开放,对修改关闭”,指的是在软件设计中,当对某一软件实体进行扩展时,尽量不要去修改原有的软件实体,换句话说就是在不修改原有软件实体的情况下对其进行扩展。
这种软件设计方式其实是一种目标,它考虑了软件后期的维护等其它因素。
一个软件系统如果可以达到这个目标,那它就是可扩展、易维护的。
在软件设计中,众多的设计模式的应用就是为了达到这个目标。
如何理解面向对象设计中的开闭原则
面向对象的特点是:封装.多态.继承.其中多态有分为重载和重写.面向对象的编程思想更加接近现实的事物. 有这样几点好处: 1.是编程更加容易.因为面向对象更接近于现实.所以你可以从现实的东西出发.进行适当的抽象. 2.在软件工程上.面向对象可以使工程更加模块化.实现更低的耦合和更高的内聚. 3.在设计模式上(似乎只有面向对象才设计到设计模式).面向对象可以更好的实现开-闭原则.也使代码更易阅读....
什么是面向对象,什么是面向过程
面向过程就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了。
面向对象是把构成问题事务分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描叙某个事物在整个解决问题的步骤中的行为。
1.什么是面向对象技术?面向对象技术是一种以对象为基础,以事件或消息来驱动对象执行处理的程序设计技术。
它具有抽象性、封装性、继承性及多态性。
2.面向对象与面向过程程序设计有什么不同?面向对象与面向过程程序设计有如下不同:(1)面向过程程序设计方法采用函数(或过程)来描述对数据的操作,但又将函数与其操作的数据分离开来;面向对象程序设计方法将数据和对数据的操作封装在一起,作为一个整体来处理。
函数与数据是否分离 (2)面向过程程序设计方法以功能为中心来设计功能模块,难于维护;而面向对象程序设计方法以数据为中心来描述系统,数据相对于功能而言具有较强的稳定性,因此更易于维护。
(3)面向过程程序的控制流程由程序中预定顺序来决定;面向对象程序的控制流程由运行时各种事件的实际发生来触发,而不再由预定顺序来决定,更符合实际需要。
预定顺序;由运行时各种事件的实际发生来触发 (4)面向对象程序设计方法可以利用框架产品(如MFC,Microsoft Foundation Classes)进行编程。
面向对象可利用框架 面向对象和面向过程的根本差别,在于封装之后,面向对象提供了面向过程不具备的各种特性,最主要的,就是继承和多态。
3.面向对象技术有哪些优点?面向对象技术具有程序结构清晰,自动生成程序框架,实现简单,可有效地减少程序的维护工作量,代码重用率高,软件开发效率高等优点。
4.面向对象技术中的封装性有何优缺点?如何克服这些缺点?封装将对象有关的数据和行为封装成整体来处理,使得对象以外的部分不能随意存取对象的内部属性,从而有效地避免了外部错误对它的影响,大大减小了查错和排错的难度。
另一方面,当进行修改对象内部时,由于只有少量的外部接口对外提供服务,因此同样减小了内部的修改对外部的影响。
如果一味地强调封装,对象的任何属性都不允许外部直接存取,则要增加许多没有其他意义、只负责读或写的行为。
这会为编程工作增加负担,增加运行开销,并且使程序显得臃肿。
为了避免这一点,在程序的具体实现过程中应使对象有不同程度的可见性,进而与客观世界的具体情况相符合。
面向对象的特点是:封装,多态,继承。
其中多态有分为重载和重写。
面向对象的编程思想更加接近现实的事物。
有这样几点好处:1、是编程更加容易。
因为面向对象更接近于现实,所以你可以从现实的东西出发,进行适当的抽象。
2、在软件工程上,面向对象可以使工程更加模块化,实现更低的耦合和更高的内聚。
3、在设计模式上(似乎只有面向对象才设计到设计模式),面向对象可以更好的实现开-闭原则。
也使代码更易阅读。
相对而言,面向过程的程序设计是面向对象程序设计的基础。
面向对象的程序里面一定会有面向过程的程序片断的5.为什么要应用继承机制? 客观事物既有共性,也有特性。
如果只考虑事物的共性,而不考虑事物的特性,就不能反映出客观世界中事物之间的层次关系。
抽象机制是考虑事物的共性,继承机制是考虑事物的特性,这样才能完整地描述客观世界的层次关系。
继承能使软件模块具有可重用性、独立性,缩短软件开发周期,提高软件开发效率,同时使软件易于维护。
6.C++对多态性的支持体现在哪些方面?C++的多态性分为编译时多态和运行时多态。
编译时多态是指在程序的编译阶段由编译系统根据参数确定与哪个同名的函数相联系;运行时多态是指在程序的运行阶段才根据产生的信息确定需要调用哪个同名的函数。
C++通过函数重载和运算符重载实现编译时多态,通过继承和虚函数来实现运行时多态。
7.目前常用的面向对象程序设计语言有何异同? 目前常用的面向对象程序设计语言有C++、Java、Visual Basic等。
C++是混合型面向对象程序设计语言,继承并改进了C语言,是一种既支持面向对象又支持面向过程的程序设计方法。
Java是纯面向对象程序设计语言,从C++发展而来。
C++和Java均支持面向对象技术的基本概念和基本特征,如封装、类、构造函数、析构函数、继承、多态等。
C++与Java语法描述有相同之处,也有不同之处。
如基本结构语句的语法大致相同,而类定义的语法等方面则不相同。
此外还有以下不同:(1)C++有运算符重载机制,而Java没有此特性;(2)C++支持多重继承,而Java只支持单重继承;(3)C++通过构造函数创建对象,可以直接使用指针来操作对象的成员,而Java通过new运算符创建对象,通过new运算符返回的对象引用来使用对象,而不是直接操作指针;(4)C++程序要显式地释放所分配的内存,而Java具有内存垃圾收集机制,自动管理内存,不需要显式释放所分配的内存。
Visual Basic继承了BASIC语言所具有的语法简单、容易学习、容易使用、数据处理能力强的特点,又引入了面向对象、事件驱动的编程机制和可视化程序设计...
面向对象的语言和面向过程有什么区别啊
C,fortran等较早的高级语言因为应用环境简单,系统规模较小采取的是面向过程的思路。
总体来说你首先思考的是该干什么,关键字是动词。
比如起床、刷牙,吃饭,然后上班。
之后随着系统复杂性提高,C++,java等高级语言,采取了面向对象的思路。
总体来说你首先思考由谁去干,关键字是名词。
比如我的生活。
然后我具有一些属性,比如能够睡觉,能够清洁,需要饮食,需要工作。
之后去调用。
我.起床,我.刷牙。
你也可以看出来,这个过程并不是对立的。
在面向对象的思路中依然会需要面向过程的思路解决局部问题。
不过他可以更好地重用代码。
此外还有lisp等用于工业设计语言的功能型编程范式。
究竟采取哪种范式来编程看你解决问题的规模和需求。
面向对象的特点是:封装,多态,继承。
其中多态有分为重载和重写。
面向对象的编程思想更加接近现实的事物。
有这样几点好处: 1、是编程更加容易。
因为面向对象更接近于现实,所以你可以从现实的东西出发,进行适当的抽象。
2、在软件工程上,面向对象可以使工程更加模块化,实现更低的耦合和更高的内聚。
3、在设计模式上(似乎只有面向对象才设计到设计模式),面向对象可以更好的实现开-闭原则。
也使代码更易阅读。
相对而言,面向过程的程序设计是面向对象程序设计的基础。
面向对象的程序里面一定会有面向过程的程序片断的!...
转载请注明出处51数据库 » 开-闭原则的软件设计模式
吃了亏别沾水