简洁架构之道_读书笔记

本文探讨了编程的三大范式:结构化、面向对象和函数式编程,强调了它们在软件架构设计中的作用。结构化编程通过限制程序控制权转移,提高模块的可验证性;面向对象编程通过多态对间接控制权进行约束,实现插件式架构;函数式编程通过不可变性减少并发问题。此外,文章深入介绍了设计原则,如单一职责、开闭、里氏替换、接口隔离和依赖反转原则,以及组件构建原则,如复用/发布等同、共同闭包和共同复用原则,强调了组件耦合的重要性。
摘要由CSDN通过智能技术生成

1. 编程范式

1.结构化编程

Bohm和jocopini证明了可以使用顺序结构、分支结构、循环结构构造出任何程序

goto是有害的

顺序结构、分支结构和循环结构均可以证明其正确性,并且用这三种结构可以构造出任何程序。那么这就意味着可以将模块可以按功能进行降解拆分为一系列函数,而这些函数可以用结构化编程范式来写。只要这些函数是正确的,那么整个程序就是正确的。

Dijstra:测试只能展示bug的存在,不能证明bug不存在

结构化编程方式最有价值的地方在于它赋予了我们创造可以证伪程序单元的能力。这就是现代编程语言一般不支持无限制goto语句的原因。更重要的是,这也是为什么在架构设计领域,功能降解性拆分仍是最佳实现之一。

无论在哪一个层面上,从最小的函数到最大的组件,软件开发过程都是由证伪驱动的。软件架构师需要定义可以方便的进行证伪的模块、组件以及服务。为了达到这个目的,它们需要将类似结构化编程的限制方法应用在更高的层面上。

具体的限制性方法待补充。。。。

2.面向对象编程

什么是面向对象?

回答1:面向对象是数据与函数的组合。这种回答方式并不贴切。因为他似乎暗示了o.f()与f(o)之间的有区别。

回答2:面向对象编程时一种对真实世界进行建模的方式。这句话似乎意味着“由于采用面向对象方式构建的软件与真实世界的关系更加紧密,所以面向对象编程使软件开发更加容易”。但是该回答并没有说清楚——面向对象编程就是什么

回答3:面向对象编程就是封装、继承、多态。这只是面向对象编程的特性。

封装:

封装特性并不是面向对象编程所独有的。其实C语言也支持完成的封装,并且更加完美。而C++作为一种面向对象语言,反而破坏了C的完美封装性。因为C++编译器要求类的成员变量必须在类的头文件中声明(可以使用IMPL方式避免,但终归是一种规避方式)。

基于上述原因,很难说封装是面向对象的必要条件,事实上,有很多面向对象编程语言对封装性没有强制性的要求。

继承:

继承的主要作用是让我们可以在某个作用域内对外部定义的一组变量与函数进行覆盖。这事实上也是C程序员在面向对象发明之前一直做的事。只不过面向对象编程对原有的继承方式进行了拓展,支持了多重继承。

多态:

多态其实不过是函数指针的一种应用。自20世纪40年代冯诺依曼架构诞生的那一天起,程序员们就一直在使用函数指针模拟多态了。所以面向对象编程在多态方面没有提出任何新的概念,但是面向对象编程让多态变更更加安全,更加便于使用。

面向对象编程其实是对程序间接控制权的转移进行了约束。也就是说,非面向对象编程实现多态时是直接使用函数指针,只要符合规则,可以在使用函数指针在任意的函数之间转换。而面向对象编程使多态只能在继承关系中进行使用,从而达到了对程序间接控制权

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值