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

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

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

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

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

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

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

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

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

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

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

《编程的逻辑》读后感(第1章)面向对象概述

程序员设计思想的发展经历了几个典型的阶段:面向机器—->面向过程—->面向对象。

面向过程是一种“机械的思维”。

面向对象是一种”人类的思维”。

面向对象是一种以“对象”作为中心的编程思想,其中对象的含义可以理解为“存在的东西”。面向对象这种对现实世界的模拟的思想,其本质上就是”人的思想“,这是一个质的飞跃,意味着程序员可以按照人的思想来观察、分析、设计系统。什么叫作”人的思想“?你可以放下书本,关上计算机,站起来,环顾四周,你看到的是什么?可能是你的同事、桌子、墙、计算机、花盘;或者是电话、窗子、书本….这些都是”对象“吧?除了观察目标聚焦于”对象“,当我们观察人类世界各种事情的运作的时候,我们也不知不觉地聚焦于”对象“。例如,一个公司的运作,有董事长、经理、主管、员工等人分工合作,根据不同的任务或者外界竞争而去做各种各样的事情。人大部分的时间都是按照面向对象的方式进行思考的,而且人类世界主要也是按照面向对象的方式进行运转的,所以说,”面向对象”其实更符合人的思维习惯。

在面向过程有”程序=算法+数据结构“的经典总结,面向对象也有类似的总结:”程序=对象+交互“,其中对象就是具体存在的事物,而交互则是事物之间的相互作用、互动等。

面向对象是目前最流行的一种重新设计和实现思想,无论从事企业级开发、互联网应用开发,还是手机软件开发都会用到面向对象的技术。

如果你是一个程序员,但却不懂面向对象,那么真的可能被别人认为是”程序猿“了,因为这样的程序猿既像”猿“一样原始,又像”猿“一样稀少。