第二周课程总结

发布于: 2020 年 06 月 17 日

一、从编程的历史看编程的本质和未来

莱布尼兹对编程的想法:期望将各种事物都通过一种逻辑语言进行描述,然后用一种可执行演算规则的机器进行计算,即可以计算出事物的各种结果。

Ada利用打孔纸带写出人类第一个软件程序。这个程序已经包含了循环和子程序;

总结:先有了软件的想法,才有了计算机的诞生; 

计算机是通过读取数据进行计算,这些数据本身包含了计算的逻辑,这个数据就是程序,这个数据包含输入的数据和执行的逻辑;

每一种CPU都有独特的机器语言,因而需要不同的汇编语言

二、编程语言的本质

目的:用计算机来解决现实世界的问题

过程:在计算机所能理解的“模型“(解空间)和现实世界(问题空间)之间,建立一种联系;

语言:抽象机制,对领域问题进行抽象;

编程的要素:

三、面向对象编程

3.1对象的定义:对象具有状态、行为和标识

  • 状态:表明么个对象可以有自己的数据

  • 行为:表明每个对象可以产生行为

  • 标识:表明每个对象都区别于其他的对象

3.2面向对象编程的三要素(特征)

  • 封装性

  • 隐藏实现细节

  • 定义接口

  • 继承性

  • is-a关系

  • has-a(组合)

  • 多态性

  • 后期绑定(虚函数)

  • 向上转型(Up Casting)

3.3本质:我们的业务领域本身就是对象,抽象为编程语言之中的对象,就可以直接投入开发;

四、面向对象实践与分析

面向对象编程是利用多态特性进行编程;

面向对象分析就是将客户世界,即编程的业务领域进行对象分析

  • 充血模型与贫血模型

  • 领域驱动设计DDD

面向对象编程实践

  • 面向对象设计

  • 设计模式

五、软件设计

概念:框架是用来实现一类应用的结构性的程序,是对某一类架构方案可复用的设计与设计

特征:

  • 如同框架结构的大厦的框架

  • 简化应用开发的工作

  • 实现了多种设计模式,使应用开发者不需要花太大的力气,就能设计出结构良好的程序

软件设计的最终目的,使软件达到“强内聚、松耦合”,从而使软件具备以下te's

  • 易扩展 --- 易于增加新的功能

  • 更强壮 --- 不容易被粗心的程序员破坏

  • 可移植 --- 能够在多样的环境下运行

  • 更简单 --- 容易理解、容易维护

相反,一个不好的软件,会发出以下“臭味”:

  • 僵硬 --- 如果单一的改动会导致依赖关系的模块中的连锁改动,那么设计就是僵化的

  • 脆弱性 --- 对系统的改动会导致与改动无概念上关联的许多地方出现问题 

  • 牢固性 

  • 粘滞性

  • 不必要的复杂性

  • 不必要的重复

  • 晦涩性

OOD软件设计原则

1、开/闭原则(OCP)--- Open/Closed Principle

  • 对于扩展是开放的(Open for extension)

  • 对于更改是封闭的 (Closed for modification)

简言之:不需要修改软件实体(类、模块、函数等),就应该能实现功能的扩展

如何实现 —— 关键是进行抽象设计 

2、依赖倒置原则(DIP) — Dependency Inversion Principle

    特征

  • 高层模块不能依赖底层模块,而是大家都依赖于抽象

  • 抽象不能依赖实现,而是实现依赖于抽象

倒置

  • 模块或包的依赖关系

  • 开发顺序和职责

软件层次化

  • 高层决定底层

  • 高层被重新

3、Liskov替换原则(LSP)

  • 若对每个类型T1的对象o1,都存在雷霆T2的对象o2,使得在所有针对T2编程的程序P中,用o1替换o2后,程序P的行为功能不变,则T1是T2的子类型

  • 简而言之:子类型(subtype)必须能够替换掉他们的父类型(base type)

4、单一职责原则(SRP) — Single Responsibility Principle

  • 内聚性原则 --- 一个模块的组成元素之间的功能相关性

  • 一个类,只能有一个引起它变化的原因

5、接口分离原则(ISP) — interface Segregation Principle

  • 不应该强迫客户程序依赖它们不需要的方法

用户头像

考尔菲德

关注

还未添加个人签名 2018.04.19 加入

还未添加个人简介

评论

发布
暂无评论
第二周课程总结