写点什么

编程的发展和设计的美

用户头像
林昱榕
关注
发布于: 2020 年 06 月 17 日

编程语言的实质



  • 目的:用计算机解决现实问题;

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

  • 本质:一种抽象工具,关键是看对“谁”抽象。

问题领域,即包含与系统所要解决问题相关的实物和概念的空间。



从抽象对象的变化,看编程语言的发展



第一阶段:对基础机器抽象,产生机器代码和汇编语言;

第二阶段:对计算逻辑抽象,产生非结构化的高级语言(Basic、Fortran等);

第三阶段:对问题领域进行一定程度的抽象,产生结构化的程序设计语言;

第四阶段:直接对问题空间的元素进行抽象,产生面对对象语言。



可以看到编程方法的演化路径为:汇编语言->高级语言->结构化设计->OOP。



什么是面向对象编程

第一个成功的面向对象语言 SmallTalk 描述:

  • 万物皆对象;

  • 程序是对象的集合,对象之间通过发送消息通信;

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

  • 每个对象都拥有其类型;

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



什么是对象

Booch 对于对象的描述:对象具有状态、行为、标识。

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

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

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



面向对象编程的三要素

  • 封装

  • 隐藏实现细节(访问控制)

  • 定义接口

  • 继承

  • IS-A关系

  • HAS-A关系(组合)

  • 多态

  • 后期绑定(虚函数)

  • 向上转型



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

面向对象编程是利用多态特性编程,而非使用面向对象语言编程。



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

  • 充血模型和贫血模型

  • 领域驱动设计DDD



面向对象设计的目的和原则

  • 目的:高内聚、低耦合,使系统

  • 易拓展 - 添加新功能

  • 更健壮 - 不易被粗心程序员破坏

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

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



与之相反,不好的设计会让软件发出如下“臭味”:

  1. 僵硬 - 不易改变

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

  3. 不可移植 - 不能适应环境的变化

  4. 导致误用的陷阱 - 做错误的事情比做正确的事情容易,引诱程序破坏原有的设计

  5. 晦涩 - 代码难以理解

  6. 过度设计、copy-paste 代码。



  • 原则:为达到上述目标而总结出的指导原则,常见的五大设计原则:

  • 开闭原则

  • 依赖倒置

  • 里氏替换

  • 单一职责

  • 接口隔离



设计模式

设计模式是用于解决某一种问题的通用解决方案,贯彻了设计原则。

Gang of Four (Erich Gamma, Richard Helm, Ralph Johnson and John Vlissides) 提出了三大类23种基本的设计模式:

  • 创建模式

  • 行为模式

  • 结构模式



框架 VS 工具

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

  • 可同比于大厦的框架

  • 简化软件开发者的工作

  • 实现了多种设计模式,方便开发者高效设计和开发良好的程序。



工具,则是完成具体某项功能,供应用程序代码调用,提高架构师和开发者的开发效率。

而应用程序代码由框架来调用,保证架构落地。



总结

这里面的很多概念还值得仔细去推敲。体会编程与设计的美,在于领悟它们的精髓。

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

林昱榕

关注

开心生活,努力工作。 2018.02.13 加入

还未添加个人简介

评论

发布
暂无评论
编程的发展和设计的美