第二周学习总结
本次学习通过提问式问题引导学习,老师提出以下问题:
如何进行优雅的程序设计
程序如何设计,程序的架构怎么做
今天的编程方式,编程语言的应用,软件编程是怎么样一步步走到今天的样子的
程序设计软件编程的本质是什么
大多数面向对象编程语言,其本质是什么
什么是软件框架,软件框架的作用是什么
如何设计软件框架
1 软件开发简史
从编程的历史看编程的本质和未来,最早 1700 年代莱布尼茨逻辑语言的想法,1800 年代的雅卡尔发明可编程的织布机,19 世纪中叶英国人 Ada 写出第一个软件程序,现代计算机是冯诺依曼输入第一个程序时开始的。
1.1 什么是计算机?什么是程序?
人类发明制造计算机器有非常悠久的历史,但是这些计算机器都是专门进行数值计算的,
加减乘除、微分积分等等。而从莱布尼兹、Ada,到图灵、冯诺依曼,这些现代计算机
的开创者们试图创造的是一种通用的计算机,这种计算机不是读取数值进行计算,而是
读取数据进行计算,这些数据本身包含着计算的逻辑,这个数据就是程序。
1.2 编程语言的实质
编程的目的是:用计算机来解决现实世界的问题。
编程的过程即:在计算机所能理解的“模型”(解空间)和现实世界(问题空间)之间,
建立一种联系。
编程语言是一种“抽象”的机制,问题是对“谁”来抽象:
1.3 问题领域(Problem Domain)
包含与系统所要解决的问题相关的实物和概念的空间。
对基础机器进行抽象:机器代码和汇编语言
对计算处理逻辑抽象:非结构化的高级语言
对问题领域进行一定程度的抽象:结构化的程序设计
直接表达问题空间内的元素:面象对象的程序设计
2 面向对象
2.1 什么是面向对象编程?
万物皆为对象
程序是对象的集合,它们通过发送消息来告知彼此所要做的。
每个对象都有自己的由其他对象所构成的存储。
每个对象都拥有其类型。
某一特定类型的所有对象都可以接收同样的消息。
2.2 什么是对象?
Booch 对于对象的描述:对象具有状态、行为和标识。
状态:表明每个对象可以有自己的数据。
行为:表明每个对象可以产生行为。
标识:表明每个对象都区别于其它的对象。(唯一的地址)
2.3 面向对象编程的三要素
封装性(Encapsulation)
隐藏实现细节(访问控制)
定义接口
继承性(Inheritance)
IS-A 关系
HAS-A 关系(组合)
多态性(Polymorphism)
后期绑定(虚函数)
向上转形(Up Casting)
2.4 面向对象编程与面向对象分析
面向对象编程不是使用面向对象的编程语言进行编程,而是利用多态特性进行编程。
面向对象分析是将客观世界,即编程的业务领域进行对象分析。
充血模型与贫血模型
领域驱动设计 DDD
2.5 面向对象设计的目的
面向对象设计的目的
强内聚、低耦合,从而使系统
易扩展- 易于增加新的功能
更强壮- 不容易被粗心的程序员破坏
可移植- 能够在多样的环境下运行
更简单- 容易理解、容易维护
2.6 框架(frameworks)
框架是用来实现某一类应用的结构性的程序, 是对某一类架构方案可复用的设计与实现
如同框架结构的大厦的框架
简化应用开发者的工作
实现了多种设计模式,使应用开发者不需要花太大的力气,就能设计出结构良好的程序来
不同领域的框架
微软公司为 Windows 编程开发了 MFC 框架。
Java 为它的 GUI(图形用户界面)开发了 AWT 框架。
还有许多开源的框架:MyBatis,Spring 等。
Web 服务器也是框架:Tomcat
3.面向对象设计原则
3.1 开/闭原则(OCP)
对于扩展是开放的(Open for extension)
对于更改是封闭的(Closed for modification)
简言之:不需要修改软件实体(类、模块、函数等),就应该能实现功能的扩展。
3.2 依赖倒置原则(DIP)
DIP - Dependency Inversion Principle
高层模块不能依赖低层模块,而是大家都依赖于抽象;
抽象不能依赖实现,而是实现依赖抽象。
DIP 倒置了什么?
模块或包的依赖关系
开发顺序和职责
软件的层次化
高层决定低层
高层被重用
3.3 Liskov 替换原则(LSP)
里氏替换原则主要阐述了有关继承的一些原则,也就是什么时候应该使用继承,什么时候不应该使用继承,以及其中蕴含的原理。里氏替换原是继承复用的基础,它反映了基类与子类之间的关系,是对开闭原则的补充,是对实现抽象化的具体步骤的规范。里氏替换原则的主要作用如下。
里氏替换原则是实现开闭原则的重要方式之一。
它克服了继承中重写父类造成的可复用性变差的缺点。
它是动作正确性的保证。即类的扩展不会给已有的系统引入新的错误,降低了代码出错的可能性。
加强程序的健壮性,同时变更时可以做到非常好的兼容性,提高程序的维护性、可扩展性,降低需求变更时引入的风险。
3.4 单一职责原则(SRP)
SRP - Single Responsibility Principle
又被称为“内聚性原则(Cohesion)”,意为:一个模块的组成元素之间的功能相关性。
将它与引起一个模块改变的作用力相联,就形成了如下描述:一个类,只能有一个引起它的变化的原因。
单一职责原则的核心就是控制类的粒度大小、将对象解耦、提高其内聚性。如果遵循单一职责原则将有以下优点。
降低类的复杂度。一个类只负责一项职责,其逻辑肯定要比负责多项职责简单得多。
提高类的可读性。复杂性降低,自然其可读性会提高。
提高系统的可维护性。可读性提高,那自然更容易维护了。
变更引起的风险降低。变更是必然的,如果单一职责原则遵守得好,当修改一个功能时,可以显著降低对其他功能的影响。
•
评论