标签:包括 需求 类继承 性问题 耦合 trigger 更改 针对 程序
3行李货物再按一1 再按3
各种面向对象编程语言相互有别,但都能看到他们对面向对象三大机制的支持,即:”封装、继承、多态“
-封装,隐藏内部实现
-继承,复用现有代码
-多态,改写对象行为
继承是以封装为基础的,多态是以继承为基础的。
封装,侧重于对象的描述。
继承和多态,侧重于对象之间关系的描述。
使用面向对象编程语言(如C#),可以推动程序员以面向对象的思维来思考软件设计结构,从而强化面向对象的编程范式。
C#是一门支持面向对象编程的优秀语言,包括:各种级别的封装支持;单实现继承与多接口实现;抽象方法与虚方法的重写。
通过面向对象编程语言(OOPL)认识到面向对象,并不是面向对象的全部,甚至只是浅陋的面向对象。
OOPL的三大机制“封装、继承、多态”可以表达面向对象的所有概念,但这三大机制本身并没有刻画出面向对象的核心精神。换言之,既可以用这三大机制刻画出“好的面向对象设计“,也可以用这三大机制做出“差的面向对象设计”。不是使用了面向对象的语言(例如C#),就实现了面向对象的设计与开发!因此我们不能依赖编程语言的面向对象机制,来掌握面向对象。
OOPL没有回答面向对象的根本性问题--我们为什么要使用面向对象?我们应该怎样使用面向对象机制来实现“好的面向对象”?我们应该遵循什么样的面向对象原则?
任何一个严肃的面向对象程序员(例如C#程序员),都需要系统地去学习面向对象的知识,单纯从语言上获得的面向对象知识,不能够胜任面向对象设计与开发。
重新认识面向对象——为什么是面向对象?
隔离变化:从宏观层面上看,面向对象的构建方式更能适应软件的变化,能将变化所带来的影响减为最小。
各司其职:从微观层面上看,面向对象的方式更能强调各个类的“责任”,新增类型不会影响原来员工类型的实现代码——这更符合真实的世界,也能控制变化所影响的范围。
耦合关系直接决定着软件面对变化时的行为:
模块与模块之间的紧耦合使得软件面对变化时,相关的模块都要随之更改。
模块与模块之间的松耦合使得软件面对变化时,一些模块更容易被替换或者更改,但其他模块保持不变。
紧耦合就是模块之间或者系统之间关系太紧密,存在互相调用;
松耦合就是模块之间或者系统之间通过数据接口联系。
大型数据系统要求系统之间松耦合,便于实现功能的任意组合和重用。
怎样使用三大机制实现"好的面向对象"?
1、面向接口编程,而不是针对实现编程(方法返回的类型为接口,而不是返回某个具体的类型。)
客户程序(调用程序的程序,写C#调用.netFramework程序,则所写的代码为客户。还有COM接口编程等)无需知道所使用的对象的特定类型,只要知道对象拥有所期望的接口。
2、优秀使用对象组合,而不是类继承。
类继承通常为“白箱复用(子类父类耦合度很高的复用)”,对象组合通常为“黑箱复用(相互包含的关系)”继承在某种程度上破坏了封装性,子类父类耦合度高,而对象组合只要求被组合的对象具有良好定义的接口(满足接口即可),耦合度低。
3、封装变化
设计模式是“封装变化”方法最佳阐释。无论是创建型模式、结构型模式还是行为模式,归根结底都是寻找软件中可能存在的“变化”,然后利用抽象的方式对这些变化进行封装。由于抽象没有具体的体现,就代表了无限的可能性,使得其扩展成为了肯能。所以我们在设计之初,除了要求实现需求所设定的具体用例之外,还需要标定可能或已经存在的“变化”之处。封装变化,最重要的一点是发现变化,或者是寻找变化。
常用的设计原则包括七个,这些原则并不是孤立存在的,它们相互依赖,相互补充。设计模式是根据这些原则总结出来的。
标签:包括 需求 类继承 性问题 耦合 trigger 更改 针对 程序
原文地址:https://www.cnblogs.com/sy-liu/p/13020521.html