《编程的逻辑》读后感(第2、3章)面向对象理论与分析

类是一组相似事物的统称,类设计两个基本原则:属性不可再分;一个方法只做一件事。对象就是一个具体的类,一个真实存在的类。接口是一组相关的交互功能点定义的集合。抽象类只能用于继承,不能被实例化为具体的对象。抽象类就是基于类而抽象出来的,抽象即”抽取比较像的部分出来“。抽象的主要目的是”隔离关注点,降低复杂度“。

封装、继承、多态是面向对象的三大核心特征。继承类似生物学上的”遗传“,抽象和继承是前后衔接的关系,先有抽象,通过抽象得出类,后通过继承来表达抽象结果。多态的真正含义是:使用指向父类的指针或者引用,能够调用子类的对象。封装的主要原因是”保护隐私“和”隔离复杂度“。

谈到流程,很多人立刻就会想到熟悉的瀑布模型、螺旋模型、迭代开发、敏捷、RUP等一堆软件工程相关的软件开发流程,但对于大部分人来说,这些流程仅仅是项目管理上的概念,只有项目经理开例会时那红红绿绿的甘特图、燃尽图、路径图等、或者只有在评估工作量和是否要加班的时候,我们才会意识到这些流程的存在。通俗地讲,项目管理上的流程主要是指导项目经理如何管理项目用的,但对于指导开发人员如何开发项目,并无多大用处,一种典型的情况就是刚毕业的大学生,对软件工程很熟悉,各个开发阶段应该做什么,瀑布流程有什么优缺点等,谈起来都头头是道,但真的参加开发项目后,就会发现有一种无从下手的感觉。

为了区别起见,我们将瀑布模型、敏捷开发等称为”管理流程“,而将面向对象开发流程称为”技术流程“。面对对象的技术流程可以概括如下:

需求模型—->领域模型—->设计模型—->实现模型

需求模型:通过和客户沟通,结合行业经验和知识,明确客户的需求。

领域模型:基于需求模型,提炼出领域相关的概念,为后面的面向对象设计打下基础。

设计模型:以领域模型为基础,综合面向对象的各种设计技巧,完成类的设计。

实现模型:以设计模型为基础,将设计模型翻译为具体的语言实现,完成编码。

以上流程环环相扣,上一步流程的输出就是下一步流程的输入,后面我们可以看到,通过这种一步一个脚印的方式,即使是经验并不丰富的”菜鸟“,也能完成从需求到最后实现的相关工作,而不再需求仰望和崇拜其他”大牛“,或者自己摸着石头过河!