【架构师训练营 - week2 -2】总结
我们都曾经思考过一个问题:”我从哪里来,要到哪里去?“,这个终极的哲学问题,也许每个人都有自己的答案,但却没人能给出标准回答。纵观整个人类族群,通过各种蛛丝马迹也只能在历史的长河中管中窥豹。要到哪里去?这需要无限的想象加之时间的涌动去慢慢验证。
对于计算机,诞生于人类的智慧,随着现代技术的演进和各种高级框架的出现。我们也应该问问自己“它从哪里来,要到哪里去?”
什么是计算机?什么是程序?
计算机是现代一种用于高速计算的电子计算机器,可以进行数值计算,又可以进行逻辑计算,还具有存储记忆功能。程序就是一组计算机能识别和执行的指令。
形形色色的编程语言
当计算机的集成越来越复杂,打孔变成就变得越来越复杂, 于是为了提高效率,汇编语言就随之诞生了。之后随着计算机的发展以及人类对计算机的要求越来越高。汇编很难满足实际业务中的需要。于是Basic语言,C语言诞生了, 以至于之后衍生除了我们熟悉的面向对象语言Java等。
编程语言的本质
用来解决现实世界的问题。
编程的过程即是模型和现实世界建立联系。
编程的核心要素
什么是对象
对象具有状态,行为和标识
状态:表明每个对象可以有自己的数据。
行为:表明每个对象可以产生行为。
标识:表明每个对象都区别于其他对象。
面向对象编程的三要素
封装性
继承性
多态性
面向对象设计原则
开闭原则
软件实体(模块,类,方法等)应该对扩展开放,对修改关闭
扩展开放:某模块的功能是可扩展的,则该模块是扩展开放的。软件系统的功能上的可扩展性要求模块是扩展开放的。
修改关闭:某模块被其他模块调用,如果该模块的源代码不允许修改,则该模块修改关闭的。软件系统的功能上的稳定性,持续性要求模块是修改关闭的。
里氏替换原则
所有引用基类的地方必须能透明地使用其派生类的对象。
类的继承原则:如果一个派生类的对象可能会在基类出现的地方出现运行错误,则该派生类不应该从该基类继承,或者说,应该重新设计它们之间的关系。
动作正确性保证:从另一个侧面上保证了符合LSP设计原则的类的扩展不会给已有的系统引入新的错误。
迪米特原则
迪米特原则(Law of Demeter)又叫最少知道原则(Least Knowledge Principle),可以简单说成:talk only to your immediate friends,只与你直接的朋友们通信,不要跟“陌生人”说话。
当前对象本身(this)
以参量形式传入到当前对象方法中的对象
当前对象的实例变量直接引用的对象
当前对象的实例变量如果是一个聚集,那么聚集中的元素也都是朋友
当前对象所创建的对象
单一职责原则
永远不要让一个类存在多个改变的理由。
一方面,如果一个职责使用了外部类库,则使用另外一个职责的用户却也不得不包含这个未被使用的外部类库。
另一方面,某个用户由于某个原因需要修改其中一个职责,另外一个职责的用户也将受到影响,他将不得不重新编译和配置。
这违反了设计的开闭原则,也不是我们所期望的。
接口分隔原则
不能强迫用户去依赖那些他们不使用的接口。
接口的设计原则:接口的设计应该遵循最小接口原则,不要把用户不使用的方法塞进同一个接口里。如果一个接口的方法没有被使用到,则说明该接口过胖,应该将其分割成几个功能专一的接口。
接口的依赖(继承)原则:如果一个接口a继承另一个接口b,则接口a相当于继承了接口b的方法,那么继承了接口b后的接口a也应该遵循上述原则:不应该包含用户不使用的方法。 反之,则说明接口a被b给污染了,应该重新设计它们的关系。
依赖倒置原则
A. 高层模块不应该依赖于低层模块,二者都应该依赖于抽象
B. 抽象不应该依赖于细节,细节应该依赖于抽象 C.针对接口编程,不要针对实现编程。
高层模块与低层模块:往往在一个应用程序中,我们有一些低层次的类,这些类实现了一些基本的或初级的操作,我们称之为低层模块;另外有一些高层次的类,这些类封装了某些复杂的逻辑,并且依赖于低层次的类,这些类我们称之为高层模块。
依赖倒置(Dependency Inversion):
面向对象程序设计相对于面向过程(结构化)程序设计而言,依赖关系被倒置了。因为传统的结构化程序设计中,高层模块总是依赖于低层模块。
评论