总结
编程语言的实质:
编程的目的是:用计算机来解决现实世界的问题。
编程的过程即:在计算机所能理解的“模型”和现实世界之间建立一种联系。
编程语言是一种抽象的机制问题是对谁来抽象。
领域问题---分析抽象--->模型<---设计抽象--->软件系统
问题领域:
包含与系统所要解决的问题相关的实物和概念的空间。
抽象的种类:
机器代码和汇编语言:对基础机器进行抽象
非结构化的高级语言:对计算处理逻辑抽象
结构化的程序设计:开始对问题领域进行一定程度的抽象
面向对象的程序设计:直接表达问题空间内的元素
什么是面向对象编程?
万物皆为对象。
程序是对象的集合,他们通过发送消息来告知彼此所要做的。
每个对象都有自己的由其他对象所构成的存储。
每个对象都拥有其类型。
某一特定类型的所有对象都可以接收同样的消息。
什么是对象?
对象具有状态、行为和标识,
状态:表明每个对象都可以有自己的数据。
行为:表明每个对象都可以产生行为。
标识:表明每个对象痘区别与其他的对象。
面向对象编程的三要素
封装:隐藏实现细节、定义接口。
继承:is-a关系、has-a关系(组合)
多态:后期绑定、向上转行
面向对象编程与面向对象分析
面向对象编程不是使用面向对象的编程语言来进行编程,而是利用多态特性进行编程。
面向对象分析是将客观世界,即编程的业务领域进行对象分析。
充血模型与贫血模型
领域驱动设计DDD
面向对象设计的目的和原则
目的:强内聚、低耦合,从而是系统:易扩展、更强壮、可移植、更简单。
原则:
为达到上述设计目标,有人总结出了多种指导原则。
原则是独立于编程语言的,甚至也可以用于非面向对象的编程语言中。
设计模式
设计模式是用于解决某一种问题的通用的解决方案,设计模式也是独立于语言的,设计模式贯彻了设计原则。
框架
框架是用来实现某一类应用的结构性的程序,是对某一类架构方案可复用的设计与实现。
原则一:开闭原则(ocp)
OCP - Open/Closed Principle
对于扩展是开放的
对于更改是封闭的
简而言之:不需要修改软件实体,就应该能实现功能的扩展。关键是:抽象。
原则二:依赖倒置原则(DIP)
DIP - Dependency Inversion Principle
高层模块不能依赖底层模块,而是大家都依赖于抽象。
抽象不能依赖实现,而是实现依赖抽象。
DIP倒置了什么?
模块或包的依赖关系、开发顺序和职责。
软件的层次化:
高层决定低层、高层被重用。
原则三:理式替换原则(LSP)
一个正确的继承要符合什么要求? 要符合理式替换原则。
LSP要求,凡是使用基类的地方,一定也适用其子类。
子类一定得拥有基类的整个接口。
子类的访问控制不能比基类更严格。
原则四:单一职责原则(SRP)
SRP - Single Responsibility Principle
单一职责原则又称为 “内聚性原则”:即一个模块的组成元素之间的功能相关性。
将它与引起一个模块改变的作用力相联,就形成了如下描述:一个类,只能有一个引起它变化的原因。
什么是职责:一个职责是一个变化的原因。
原则五:接口隔离原则(ISP)
ISP - Interface Segregation Principle
不应该强迫客户程序依赖他们不需要的方法。
ISP和SRP的关系:
ISP和SRP是相关的,都和内聚性有关。
SRP指出应该如何设计一个类 -- 只能有一个原因裁成促使类发生改变。
ISP指出应该如何设计一个接口 -- 从客户的需要出发,强调不要让客户看到他们不要的方法。
评论