基础框架第二周总结「架构师训练营第 1 期」
编程语言的实质
用计算机来解决现实世界的问题
面向对象的三特征
面向对象的三特征是封装,继承,多态。
封装可以认为是它是给你一台电脑,你不需要知道里面的细节,有什么元器件组件,隐藏了实现,表现为 protected,private,public,default 不同的关键字,定义类,接口与方法,对于子类,不同包的可见性。另外调用者只知道接口,不需要见到其细节,也体现了封装。
继承,子类继承父类,则共用父类的属性与方法,体现了复用。Is-a 的关系,如果 has-a 包含一个,则是组合的关系
多态,定义接口,可以有多个实现类,或是考虑接口的依赖,聚合等关系,表现出对扩展开放,对修改关闭。程序使用抽像的父类或接口编程,运行期注入不同的子类,程序就可以灵活的表现不同的形态,使用同一个接口,不同实例而执行不同方法。例如打印机打印接口,使用黑白打印机实例打印黑白照片,使用彩色打印机实例打印彩色照片。
对象之间强弱关系
依赖<关联<聚合<组合
依赖是弱关联,是偶然临时的关系,表现为方法参数
关联是强关系,类之间的关系,一对一,一对多,班级与学生的关系,一对多,表现为类的成员变量
聚合,整体与部分的关系,是关联的特例,has a 拥有的关系,与关联一样表现为类的成员变量
组合,与聚合更强,整体不存在了,部分也死了,contain a 包含的关系,与关联一样表现为类的成员变量
面向对象的目的
高内聚,低藕合,从开发到需求变更,增加功能,修改功能,上线部署,版本迭代,线上运维等软件生命周期过程中都更容易操作。
扩展,新增功能
强壮,不容易被粗心的程序员破坏
移值,可以部署到不同的环境中运行
简单,阅读代码容易,部署,启动关闭等运维都容易
代码的臭味
易扩展-》僵硬,改不动
强壮-》脆弱,改一个功能,另外一个功能受到了影响,关联影响范围大
可移值-》不可移值,例如 window 中开发 java 软件,在 linux 中跑不了,使用了 window 的特性或是依赖 window 的组件
简单-》晦涩,复杂难理解
过度设计,类过多等
大量的拷贝复制相同的代码
面向对象的原则
设计原则有:开闭原则,依赖倒置原则,里氏替换原则,单一职责,接口隔离原则
开闭原则:对扩展开放,对修改关闭
依赖倒置:高层与低层模块都依赖一个抽像,并且这个抽像由高层定义
里氏替换:is a 的关系,并且结合实际环境,判断是否合理,调用处可以使用子类变成父类也不受影响
单一职责:接口的功能单一,一个接口类只能一个方法,当然要结合实现情况分组,结合调用的客户端的实际情况,与扩展情况将接口分组,以免接口类过多
接口隔离:客户端只需要知道自已知道的功能,知道的越多,软件越危险
开发一个基础框架
设计与开发一个框架是架构师的基本功,基础框架可以规范约束开发。
设计一个框架最重要的一个原则是依赖倒置,高层与低层模块,都依赖抽像,而且这个抽像不是低层的,而是高层的。
我们常用的开发是,定义接口,与实现这个接口功能,然后做为生产者把接口提供给对方,对方作为消费者调用接口实现代码。
而开发一个框架,它的思路是相反的,高层使自已定义的接口,实现自已要实现的功能,开发人员根据这个规范实现业务功能的开发,这就是相反思路,则是依赖倒置。
依赖倒置定义了开发的顺序,先有高层模块的功能与抽像实现,后有低层模块的开发。也定义了模块与包的结构,抽像与高层模块的代码都是一体的。
一个软件的开发,最好的方式是可复用,可扩展,这样则可以减少技术债务,代码也能变成有条理,灵活。
版权声明: 本文为 InfoQ 作者【天天向善】的原创文章。
原文链接:【http://xie.infoq.cn/article/f5a9e1f94864325466052c546】。
本文遵守【CC-BY 4.0】协议,转载请保留原文出处及本版权声明。
评论