写点什么

【Week02】框架设计

用户头像
Aldaron
关注
发布于: 2020 年 06 月 18 日
【Week02】框架设计

软件开发简史

从编程的历史看编程的本质与未来(以史为鉴)

莱布尼兹

1700年代,莱布尼兹期望将各种事物都通过一个逻辑语言进行描述,然后用一种可执行演算规则的机器进行计算,就可以计算出事物的各种结果。

Ada

莱布尼兹并没有实现具体的程序,100年后由法国人雅卡尔发明了一台可编程的织布机,这种织布机读取纸带上的打孔,进而控制织布机织出不同的图案。于是人们开始尝试打孔纸带进行计算机编程。

计算机?程序?

从莱布尼兹、Ada到图灵、冯诺伊曼,这些现代计算机的开创者视图创建的是一个通用的计算机,这种计算机不是读取数值进行计算,而是读取数据进行计算,这些数据本身包含着计算逻辑,这个数据就是程序

编程语言

-----机器语言------

汇编语言 -关注-> 指令

Basic语言 -关注-> 指令

Perl语言 -关注-> 逻辑

------高级语言-----

C语言 -关注-> 结构化

C++语言 -关注-> 面向对象

Java语言 -关注-> 面向对象

实质

目的是什么?:用计算机来解决现实时间的问题

过程是什么?:在计算机所能理解的“模型”和现实世界之间建立一种联系

编程语言是一种“抽象”的机制,问题是对“谁”来抽象

直击灵魂的问题:你是否理解面向对象编程? 是否在运用面向对象编程?

DDD:是对于面向对象的落地方式

问题领域(Problem Domain)

包含与系统所要解决的问题相关的实体和概念的空间

【问题的抽象】

抽象的种类

机器代码 --> 对基础机器进行抽象

非结构化的高级语言 --> 对于计算处理逻辑抽象

结构化的高级语言 --> 对问题领域进行一定程度的抽象

面向对象的程序设计 --> 直接表达问题空间内的元素

编程的核心要素

  • 人(劳动者)

  • 客观业务领域(劳动对象)

  • 计算机(劳动工具)

面向对象

什么是?

  • 万物皆对象

  • 程序是对象的集合,他们通过发送消息来告知彼此要做什么

  • 每个对象都有自己的由其他对象所构成的存储

  • 每个对象都拥有其类型

  • 某一特定类型的所有对象都可以接收同样的消息

什么是对象?

对象具有状态、行为和标识

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

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

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

三要素

  • 封装

  • 继承

  • 多态

多态是面向对象编程的核心,如何用好多态才是值得思考的。



面向对象编程与面向对象分析

编程:利用多态特性进行编程【多态很重要】

分析:将客观世界,即编程的业务领域进行对象分析【模块拆解会详细讲解】

  • 充血模型与贫血模型

  • DDD 领域驱动设计

如何用好多态:设计原则与设计模式总结了很多很好的实践方式

框架

什么是框架(What)

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

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

  • 简化开发者工作

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

【架构师需要关注框架】

框架 VS 工具

框架:框架应用程序代码

工具:应用程序代码的使用

面向对象的设计原则

什么是不好的设计

软件的设计最终的目的是让软件“强内聚,低耦合”,使软件:

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

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

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

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

不好的设计

  • 僵化性()

  • 脆弱性

  • 牢固性

  • 粘滞性

  • 不必要的复杂性

  • 不必要的重复

  • 晦涩性

OOD原则

开闭原则(OCP)

  • 对于扩展是开放的

  • 对于更改是封闭的

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

传统的扩展模块的方式就是修改模块的源代码。如何不修改? —— 抽象

【策略模式】

【适配器模式】

【观察者模式】

依赖导致原则(DIP)

DIP - Dependency Inversion Principle 【策略模式】

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

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

倒置了什么?

  • 模块或包的依赖关系

  • 开发顺序和职责

【抽象属于高层】

发布于: 2020 年 06 月 18 日阅读数: 53
用户头像

Aldaron

关注

还未添加个人签名 2018.04.28 加入

还未添加个人简介

评论

发布
暂无评论
【Week02】框架设计