写点什么

面向对象编程与软件设计原则

用户头像
zero2onemore
关注
发布于: 2020 年 09 月 27 日

编程历史:机器语言是机器指令的抽象、结构化语言是人类逻辑的抽象、面向对象是现实世界的抽象。通过面向对象语言解决复杂线性逻辑的耦合。


面向对象的编程更能够有效的反应我们要解决的问题领域,也能够对问题进行更好的抽象,更符合我们对于问题的理解和认知,所以面向对象编程成为今天最主流的编程方式。


领域驱动设计(ddd)微服务 中台化


大数据时代:变成对象编程了数据,对应了函数式编程,反应式编程


面向对象语言的特性:封装、继承、多态。这几个特点并不是面向对象语言唯一独有的。

封装:public protected private 隐藏实现

继承:接口的重用

多态:对象互换的魔法,子类实现父类或者接口的抽象方法,程序使用抽象的父类或接口进行编程,在运行期注入不同的子类,程序就实现了不同的形态,这就是多态,是面向对象编程一个重要的特点。


面向抽象类或者接口编程,这个时候我们并不知道具体方法会表现出什么行为,在运行期,使用具体的值来替代这个接口,这个时候就表现出不同的特性。面向对象的编程技巧是围绕多态展开的。面向对象的各种编程技巧、设计模式、设计原则都是围绕多态这个特性展开的。


面向对象设计的目标:强内聚、低耦合,从而使系统易扩展、更强壮、可移植。


方法:通过遵循特定的设计原则、设计模式或者使用通过设计原则、设计模式构建出的框架、工具。


设计模式贯彻了时机原则。设计模式是为了解决某一种特定问题的通用的解决方案。


框架调应用程序、应用程序调用工具。spring tomcat 都是框架。log4j 就可以看作工具,程序加入依赖,然后调用。

架构师用框架保证架构的落地、用工具提高开发效率。


程序不要晦涩,程序要先给人看,然后给人去执行。


软件开发的上下文:不定的需求变更,哈哈


之所以强调一件事情,是因为这件事容易被忘记。


开闭原则:程序对扩展开放、对修改关闭。通过抽象、面向接口编程来实现。

依赖倒置原则:高层模块不依赖底层模块,两者都依赖接口;高层模块设计接口,底层模块来实现接口。

依赖倒置原则是框架设计的核心 和 指导原则。


请描述什么是依赖倒置原则,为什么有时候依赖倒置原则又被称为好莱坞原则?

高层模块不依赖底层模块,底层模块也不依赖高层,两者都依赖接口(抽象);抽象属于高层模块,高层模块设计接口,底层模块来实现接口,底层模块反过来依赖高层模块的设计。

依赖倒置是框架设计的指导原则中,,比如 tomcat 和 应用程序的关系,tomcat 可以看作高层框架,应用程序实现 servlet 接口,看作为底层。


好莱坞原则:Don't call me, I will call you! Don't call 框架,框架 will call 我们的代码。


李氏替换原则是解决继承问题的,分析继承是否合理。

静态分析继承: is-a 如果子类是一个父类,那么这个继承就是合理的。如:苹果是一个水果、汽车是一个车。

李氏替换原则分析:在一个应用场景中,如果子类可以替换父类,则这个继承是合理的。 小马-》马 人骑马 ;在这个场景中,继承不太合适,人不能骑小马,小马还没长大,哈哈。


不符合 is-a 关系的继承,一定不符合 LSP

LSP 要求,凡是使用基类的地方,一定也适用于子类。从 java 语法的角度看:子类一定得拥有父类的整个接口;子类的访问控制不能比父类更严,子类的契约不能比基类更严格(比如正方形和长方形)

解决方法:提取共性到基类 或者更好的办法:将继承改为组合,将想要基层的父类变成自己的成员变量。


继承和组合是 oop 的两种扩展方式,优先使用组合。


单一职责原则:又称为内聚性原则,一个类只能有一个引起它变化的原因。

接口分离原则(ISP):isp 和 srp 是相关的,都和内聚性有关。

srp 指出应该如何设计一个类:只能有一种原因促使类发生改变。

isp 指出应该如何设计一个接口:从客户的需求出发,强调不要让客户看到他们不需要的方法。解决办法:适配器或者多继承


用户头像

zero2onemore

关注

还未添加个人签名 2018.06.14 加入

还未添加个人简介

评论

发布
暂无评论
面向对象编程与软件设计原则