《松本行弘的程序世界》读书笔记

songben
《松本行弘的程序世界》,内容比较杂,主题宽泛。把阅读中的思考总结一下

关于系统集成

在较大的系统中,做好集成和接口是很重要的。集成有很多方式,包括用数据库来集成,用文件来集成,用web api来集成等等,都是可以的

接口包括子系统内部的接口,和子系统之间的接口。凡是涉及到2个模块之间交互的,都可以称为接口,是一个比较宽泛的概念。又可以划分成粗粒度的接口和细粒度的接口,也可以划分成定制化接口和泛化接口

这次项目中用到比较多的是定制化的接口,这其实是有缺点的,比较冗余。比如一个流程里面,对流程的每一步骤都设计了接口,这个其实没有必要。可以通过更好的设计,定义一些允许为空的参数,来把流程中的每一个步骤统一到一个接口调用中

集成和接口,其实没有绝对的划分。比如子系统A和子系统B,通过共用的数据库来实现集成,我们也可以说,定义了一个数据库的接口

关于静态语言

静态语言可以理解成数据类型在编译器就确定的语言,相对的,动态语言指的是数据类型在编译期不能确定的语言,比如ruby和javascript

java由于数据类型在编译期就必须确定下来,所以很是不灵活。比如父类有一个字段,需要在运行期有不同的类型,那我就只好定义多个子类,每个子类都提供一个不同类型的字段。当然是可以通过泛型Class来实现这个需求的,但是毕竟是绕了一个弯,不是那么方便

而在动态语言中,由于在编译期没有强制指定类型,就大可在运行期再指定类型,比用泛型方便很多

关于继承

继承实际上有规格的继承,和实现的继承2种。在java中,规格的继承是用接口来实现的,即implements,而实现的继承是用父类来实现的,即extends。而规格的继承是允许多重继承的,但是实现的继承不允许多重继承。这就造成如果一个类需要多重的实现继承,就只能通过复制代码,或者用委托的方式来实现,因此不够灵活

在ruby中,通过mix-in的方式来支持实现的继承的多重继承,就方便很多。其实本质的概念就是单根继承和多重继承。mix-in只是用来支持多重继承的众多方法之一

关于字符集

字符、字符集、字符编码的概念是不同的

字符就是指的单个字符,包括中文、日文、英文、emoji等,都是字符

字符集是字符的集合,比如ascii、unicode这种都叫字符集

字符编码是字符集中字符的编码方式,比如unicode这种字符集,就有多种字符编码,包括UTF8,UTF16,UTF32等。编码会将字符转换成一串0和1,解码则相反

关于面向对象

面向对象编程,是结构化编程的延伸。结构化编程对操作进行了封装,类似于面向对象编程中的方法。但结构化编程没有对数据进行封装,面向对象编程中则以字段的方式对数据也进行了封装