读书笔记第四周
《松本行弘的程序世界》
这本书讲述了Ruby之父松本行动弘站在一个程序语言的设计者角度,分析了当今各种流行的编程语言的特点,以及他是如何在Ruby语言中权衡取舍的,读这样一本书,回过头来看各种编程语言时候油然而生一种高屋建瓴的感觉。 主要看了面向对象与设计模式两章。
面向对象
书中为我们展示了随着计算机行性能的提升,以及人们都快速开发大型软件的渴望,使得编程语言从面向过程逐渐向面向对象演变。一直以来大家面向对象都有着自己的理解,作者也阐述了他对于面向对象的理解,并对面向对象的语言的特性进行了解读。
首先是多态特性,松本认为多态是面向对象技术的最重要的一个概念。因为它使得程序员只需要关注我们要处理什么,而不是怎么去处理。这样在引进新的数据时,只需要简单的追加,而不是修改原有的代码,使得程序可扩展性大大提升。
为了对抗数据复杂性,数据抽象化应运而生,。因为数据类型的增多,使得分别管理程序处理内容与处理数据对象的复杂性越来越高,因为我们要时刻注意数据与处理方法的一致性。因此便想到将数据与处理方法结合在一起,这样即使对数据基础的操作有改动,在外部通过这些操作写的代码却不需要改动。这样我们处理的就不再是简单的数据,而是一些具有自身动作的一些现实物体的抽象,面向对象编程由此得名。
随着我们抽象出的类越来越多,复杂度依旧很大,随之我们发现这其中其实有很多具有相似性质的类。我们便把相同的特性提取出来,称为父类,不同的特性便利用继承重载来体现。文中关于多重继承与单一继承的讨论让我受益匪浅,其对各自的利弊做了详细的讲述,主要考虑到多态继承用的不好容易让类之间的关系变得错综复杂以及可能带来的内容冲突,但是单一继承会导致同时具有两个类特性时必然有一个类的特性无法继承导致必须复制部分代码,Ruby提出max—in模块,将相同的写到模块中,在具有此模块特性的类直接进行继承,从而实现共通。与此同时,限制max-in模块不能实例化也不能继承普通类,使得类的关系依旧保持着树状,可以说十分巧妙的实现了多重继承。
![](https://i-blog.csdnimg.cn/blog_migrate/eb60a19a09a77030cac282a5dd31c53f.png)
之后讲到动态类型与面向对象思想紧密的联系,可以说面向对象的思想极大的促进了动态类型的发展,虽然静态类型具有在编译的时候就能看到类型不匹配,以及可以让编译器进行优化的优势,但是动态类型可以让代码变得更加简洁(因为舍弃了类型定义语句,同时也获得了强大的适应类型变化的能力,即如果开发过程中发现类型定义不当,不必更改所有关联的代码。
设计模式
假如把数据构造抽象化,就出现了抽象数据类型,把抽象数据类型中共同的部分抽象出来,就产生了继承的工具,那么将软件实现抽象化,就产生了设计模式。因为我们在实现一个系统中,如何设计我们需要的类其实是一件十分困难的事情,但是有了设计模式的概念,我们就可以将过去优秀的人的设计模式借鉴一下,就可以做出优秀的设计。
作者为我们介绍了利用Ruby的delegate库简洁的实现了Proxy模式,以及如何实现Template Method,Observer模式等,无奈自己实际项目经验太少,无法完全理解,对Ruby语言不算熟悉,例子也无法体会到妙处,决定留到以后再重看一遍。