第二周学习总结
编程的历史
编程语言的本质
编程的目的:用计算机解决现实世界的问题
编程的过程:用计算机的模型(解空间)与现实世界的问题建立一种联系
编程语言是一种抽象机制,描述模型
问题领域
要解决的问题相关要素
抽象的种类
对基础机器进行抽象
对计算处理逻辑抽象
结构化的程序设计
面象对象的程序设计
编程方法的演进
编程的核心要素
面向对象编程
定义:
万物皆为对象
程序是对象的集合,它们通过发送消息来告知彼此所要做的。
每个对象都有自己的由其他对象所构成的存储。
每个对象都拥有其类型。
某一特定类型的所有对象都可以接收同样的消息。
对象定义
状态:每个对象有自己的数据
行为:每个对象可以产生行为
标识:区别其它对象
面向对象编程三要素
封装、继承、多态
面向对象编程与面向对象分析
面向对象编程是利用多态性进行编程
面向对象分析是将客观世界问题转换为对象描述与交互
面向对象设计的目的和原则
目的:
强内聚、低耦合,从而是系统易扩展、更强壮、可移植、更简单
原则:
为了达到上述设计目的,总结了多种指导原则
设计模式
用于解决某一种问题的通用的解决方案
Gof23:创建、行为、结构
框架 VS 工具
框架调用应用程序代码
应用程序代码调用工具
架构师用框架保证架构的落地
架构师用工具提高开发效率
面向对象设计原则
开/闭原则(OCP)
OCP - Open/Closed Principle
• 对于扩展是开放的(Open for extension)
• 对于更改是封闭的(Closed for modification)
• 简言之:不需要修改软件实体(类、模块、函数等),就应该能实现功能的扩展。
传统的扩展模块的方式就是修改模块的源代码。如何实现不修改而扩展呢?
• 关键是抽象!
依赖倒置原则(DIP)
DIP - Dependency Inversion Principle
• 高层模块不能依赖低层模块,而是大家都依赖于抽象;
• 抽象不能依赖实现,而是实现依赖抽象。
DIP 倒置了什么?
• 模块或包的依赖关系
• 开发顺序和职责
软件的层次化
• 高层决定低层
• 高层被重用
Liskov 替换原则(LSP)
子类型(subtype)必须能够替换掉它们的基类型(base type)
一个正确的继承必须满足 LSP
单一职责原则(SRP)
SRP - Single Responsibility Principle
• 又被称为“内聚性原则(Cohesion)”,意为: 一个模块的组成元素之间的功能相关性。
• 将它与引起一个模块改变的作用力相联,就形成了如下描述: 一个类,只能有一个引起它的变化的原因。
我们需要理解封装,知道要把什么样的内容放到一起;
我们需要理解分离关注点,知道要把不同的内容拆分开来;
我们需要理解变化的来源,知道把不同行为者负责的代码放到不同的地方。
接口分离原则(ISP)
ISP - Interface Segregation Principle
• 不应该强迫客户程序依赖它们不需要的方法。
ISP 和 SRP 的关系
• ISP 和 SRP 是相关的,都和“内聚性”有关。
• SRP 指出应该如何设计一个类 —— 只能有一种原因才能促使类发生改变。
• ISP 指出应该如何设计一个接口 —— 从客户的需要出发,强调不要让客户看到他们不需要 的方法。
评论