• 《面向对象》读书笔记1


    第一章 面向对象:让软件开发变轻松的技术

    1.1面向对象是软件开发的综合技术

    用一句话来概括面向对象,那就是“能够轻松地进行较难地软件开发地综合技术”。

    1.2以对象为中心编写软件地方法

    面向对象地英文是Object Oriented(orient的过去分词和过去式,adj.以…为方向的;对…感兴趣的;重视…的),直译为“以对象为中心”。
    在面向对象普及之前,,主流地开发方法是“面向功能”,具体地说,就是把我目标系统整体地功能,将其按照阶段进行细化,分解为更小地部分。如果采用面向功能的开发方法来编写软件,当规格发生改变或者增加功能时,修改的范围就会变得很广,软件页很难重用。
    面向对象技术的目的是使软件的维护和宠用变得更容易,其基本思想是关注各个构件,提高构件的独立性,将构件组合起来,实现系统整体的功能。提高构件的独立性,当发生修改时,能够使影响范围最小,在其他系统中也可以重用。

    1.3从编程语言演化为综合技术

    面向对象最初是以编程语言的身份出现的。起源于1967年在挪威设计的Simula 67编程语言。该语言拥有类、多态和继承等以往的编程语言中没有的优良结构,被称为最早的面向对象编程语言(Object Oriented Programming Language,OOP)。后来,艾伦·凯率领团队开发的Smalltalk沿用了该结构,确立了“面向对象”的概念。此后,具有相同结构的C++、Objective-C、Java、C#和Ruby等诸多编程语言相继被开发出来,并沿用至今。
    OOP使得大规模软件的可重用构件群的创建称为了可能,这些被称为类库或者框架。另外,创建可重用构件群是使用的固定的设计思想被提炼为设计模式

    1.4在混乱的状态下去理解就会觉得很难

    作者认为,不擅长抽象思考的人在学习面向对象时就会感觉很难,然而相较于技术本身的复杂性,面向对象让人感觉很难的主要原因在于混乱的现状。造成混乱的主要原因大致有三点:术语洪流、比喻滥用和“万物皆对象”综合征。

    1.5混乱之一:术语洪流

    相比很多人最开始接触面向对象都是被灌输大量的陌生属于吧。举个栗子:
    系统时由汇总了数据和过程的“对象”组成的。在面向对象中,软件被定义为“类”,然后创建“实例”并运行。系统是通过“实例”之间相互交换“消息”而运行的,但由于进行了“封装”,所以无法查看内部的详细内容,这被称为“信息隐藏”。当发送“消息”时,并不会在一对方“实例”是哪一个“类”,这被称为多态......
    其实人们被灌输的术语远不止这些:
    继承、泛化、特化、超类、子类、接口、多重继承、属性、关联、集合、委托、重写、重载、访问控制、构造函数、包、异常、垃圾回收机制、框架、类库、组件、设计模式、用例、建模、UML、重构、敏捷开发流程、RUP、XP.....
    存在如此大量的术语的原因如下。
    首先是面向对象所涉及的范围很广。如今面向对象几乎涵盖了软件开发的所有领域,在这些领域中,之前没有的新结构和新思想层出不穷。这些术语中也有不少英文词汇,可以说这是以欧美为中心迅速发展卡里的技术的宿命,此外,还有一些词被作为业界的宣传语而被过度解释。像这样,术语多少本身原子该技术的广度,从一定意义上来说,也是没有办法的事情。
    而本质的问题是基本术语的定义混乱。

    1.6混乱之二:比喻滥用

    这与其说是技术本身的问题,倒不如说是说明方法的问题。一般来说,比喻并不一定就是不好的。恰当的比喻能够直截了当、形象地说明内容;反之,如果比喻不恰当或者使用过度,就有可能造成混乱。尤其施在仅通过比喻来说明编程语言等的具体结构的情况下,由于每个人的理解不相同,所以特别容易造成误解。
    举例:
    “动物是超类,哺乳类和鱼类是子类。既产卵又用乳汁哺育幼仔的鸭嘴兽也就相当于爬虫类和哺乳类的多重继承”
    “人具有‘出生年月日’的属性。如果给张三这样具体的一个人发出‘请告诉我你的年龄’的消息,就会得到‘18’岁的回答”
    “正如医院里的医生、护士、药剂师互相联系、协同工作一样,对象也是通过在计算机中互相发消息来进行工作的”

    从直观理解OOP的结构来说,这样的讲解也不一定就是不好的做法。不过,如果只强调比喻而不详细介绍编程语言的结构和目的,那么就只有比喻能给人留下深刻的印象,而却听众很有可能会根据自己的理解,对实际的结构产生错误的认识。特别是在不考虑系统化范围,即计算机的作业范围的情况下乱用比喻,再加上随后介绍的“一切皆对象”综合征的影响,我们学习就有可能会产生“当使用面向对象时,可以直接将现实世界表示为程序”的重大误解(关于该误解我们将在第二章深入讨论)。

    1.7混乱之三:“一切都是对象”综合征(造成混乱的最大原因)

    面向对象的含义时“以对象为中心”。如果按照自卖你意思进行解释,那么现实世界的人、组织、事件、计算机系统的功能、系统管理的信息和程序的构成元素等一切事务都可以说成是对象。这里,我们将这一极端的抽象称为“一切都是对象综合征”。
    这种极端看法大概源自于“万物都是变化的”这一点。立足于这种观点很难说明和理解编程语言的结构,以及现实世界中业务流程的整理方法等具体技术的。尽管如此,但就像“现实世界是由对象(物)组成的,在面向对象中,程序也是以对象为中心创建的”这句话所说的那样,我们经常会见到实际上不同的对象都被解释为“对象”这一个词语的情况。这样的解释的确会对直观理解面向对象的结构会有所帮助,但反过来也有可能引起“只要使用面向对象,就可以直接将现实世界表示为程序”的误解。
    不过这种混乱并不只是说明方法的问题,也是面向对象本省的问题。这是因为面向对象的技术范围很广,比如对象和类等词语有时指编程语言的结构,但在其他情况下也可以指管理的信息、现实世界的人和物。

  • 相关阅读:
    【python-leetcode142-快慢指针】环形链表2
    SpringMvc 拦截器
    什么是RESTful?RESTfule风格
    Http协议
    SpringMVC Mock测试
    Oracle 创建用户,赋予指定表名/视图只读权限
    添加junit和spring-test还是用不了@Test和@RunWith(SpringJUnit4ClassRunner.class)注解
    SpringMVC 数据交互
    SpringMvc commons-fileupload图片/文件上传
    SpringMvc 异常处理器
  • 原文地址:https://www.cnblogs.com/ldbstart/p/14430561.html
Copyright © 2020-2023  润新知