week02 小结

发布于: 21 分钟前

先有程序才有了计算机

计算机计算的是数据而不是数值,数据本身是包含计算逻辑,这个数据也就是程序。

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

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

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

编程的核心要素:人(劳动者)、计算机(劳动工具)、客观业务领域(劳动对象)

什么是对象?

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

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

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

标识:每个对象都有区别与其他对象

大多数情况是用面向对象的编程语言做面向结构的编程。真正面向对象编程不是仅仅使用了面向对象的编程语言进行编程,而是利用了多态特性进行编程。

面向对象分析时将客观世界,即编程的业务领域进行对象分析。

  • 充血模型与贫血模型

  • 领域驱动设计DDD

编程语言的最终形态一定是面向对象编程的,但是近几年有出现面向AI、面向数据的编程,机器学习编程模型。

函数式编程是面向对象编程的一个细分领域。

目前存在的三层架构,基本是无状态、无行为的对象。

面向对象设计的目的:

强内聚、低耦合,从而使系统易扩展(易于增加新的功能)、更强壮(不容易被粗心的程序员破坏)、可移植(能够在多样的环境下运行)、更简单(容易理解,容易维护)

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

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

  • 简化应用开发者的工作

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

框架 VS 工具

框架调用应用程序代码

应用程序代码调用工具

架构师使用框架保证架构的落地

架构师用工具提高开发效率

log4j是工具,Junit是框架

一个“不好的”软件,会发出如下“臭味”

  • 僵硬 - 不易改变

  • 脆弱 - 只想改A,结果B被意外破坏

  • 不可移植 - 不能适用环境的变化

  • 导致误用的陷进 - 做错误的事比做正确的事更容易,引诱程序员破坏原有的设计

  • 晦涩 - 代码难以理解

  • 过渡设计、copy-paste 代码

1、开/闭原则

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

如何实现不修改而扩展呢?关键是抽象!

善用:策略模式、适配器模式、监听者模块,改造 if else

组装类是必须要修改的!

2、依赖倒置原则

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

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

高层决定低层,高层被重用

controller是高层,service是低层

抽象由高层决定

框架的核心:好莱坞思想:Don’t call me,I’ll call you

框架调用应用程序,框架传递参数

3、LS替换

一个正确的继承要符合什么要求呢?答案是:Liskov 替换原则

优先使用组合,慎用继承,如果本身是未继承而设计的,可以用继承

子类型必须能够替换掉它们的基类型

设计和界定一个类,应该以其行为作为区分

LSP要求,凡是使用基类的地方,一定也适用于其子类。子类的“契约” 不能比基类更“严格”

4、单一原则

把类拆小一些,拆的过程就要考虑效率

敏捷开发 -> 设计先是敏捷的 ,开发才能是敏捷的

一个类,只能有一个引起它的变化的原因。一个职责是一个变化的原因。

5、接口分离原则(ISP)

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

与单一原则是相关的,都和“内聚性”有关。

单一原则:指出应该如何设计一个类 — 只能有一种原因才才能促使类发生改变。

接口隔离原则:指出应该如何设计一个接口 — 从客户的需求出发,强调不要让客户看到他们不需要的方法。

最后:

单元测试很重要,优秀的代码是欢迎需求变更,设计好的架构是喜欢需求变更。

依赖倒置 — 策略模式 — 反应式编程框架。

用户头像

Geek_196d0f

关注

还未添加个人签名 2018.09.06 加入

还未添加个人简介

评论

发布
暂无评论
week02 小结