• 第1章 对象导言


      实现的重用

      代码重用是面向对象程序设计语言的最大优点之一。

      重用这个类最简单的方法就是直接使用这个类的对象,并且还可以将这个类的对象放到一个新类的里面。因为这是由已经存在的类组成新类,所以称为组合(或者聚合)。组合常常被称为“has-a(有)”关系,比如“汽车有发动机”一样。组合具有很大的灵活性。

      实际上,当创建新类时,程序员应当首先考虑组合,因为它更简单和更灵活。

     

      继承:重用接口

      两个类可以有共同的特性和行为,但是一个类可以包括另一个类更多的特性,也可以处理更多的消息。

      有两种方法能使新派生类区别于原始基类。

      第一种是向派生类添加全新的函数,这些新函数不是基类接口的一部分,这意味着,这个基类不能做我们希望它做的事情,所以必须添加新函数。

      第二种是改变已经存在的基类函数的行为,重载。

     

      is-a关系和is-like-a关系

      对继承的一种测试方法就是看我们是否可以说这些类有“is-a”关系,而且还有意义。

     

      具有多态性的可互换对象

       当处理类型层次结构时,程序员希望不把对象看作是某一具体类的成员,而是想把它看作是其基类的成员,这样就允许程序员编写不依赖与具体类的程序代码。在形体的例子中,函数可以对基本形体进行操作,而不关心它们是圆形、正方形还是三角形。所有的形体都能被绘制、擦除和移动。

      这样,程序代码不受增添新类的影响。例如,可以派生出形体的一个新的子类,五边形,而不必修改那些处理基本形体的函数。这样既扩展了程序功能,有降低软件维护费。

      然而,如果试图把派生类的对象看作是比它们自身更一般的基本类(三角形看作形体,自行车看作车辆等),这里就有一个问题:如果一个函数告诉一个基本形体类去绘制它自己,则编译器在编译时就不能确切地知道应当执行那段代码。绘图函数能等同地应用于圆形、正方形或三角形,对象根据它的特殊类型来执行合适的代码。编译器不能确切地知道执行哪段代码,怎么办?

      在面向对象的程序设计中,编译器并不做传统意义上的函数调用。由非OOP编译器产生的函数调用会导致与被调用代码的早捆绑。早捆绑的意思是,编译器会对特定的函数名产生调用,而连接器将这个调用解析为要执行代码的绝对地址。在OOP中,直到程序运行时,编译器才能确定执行代码的地址,早捆绑方案不能实现。

       面向对象语言采用晚捆绑。当给对象发送消息时,程序运行时才去确定被调用的代码。

       用关键字virtual声明你希望某个函数有晚捆绑的灵活性。

     

      创建和销毁对象

      栈是内存中的一个区域,可以直接由微处理器在程序执行期间存放数据。在栈中的变量一般有自动变量和局部变量。

      静态存储区简单说是内存的一个固定块,在程序开始执行以前分配。

      使用栈和静态存储区可以快速分配和释放,但是缺乏灵活性,因为程序员必须在写程序时知道对象的准确数量、生命期和类型。

      堆可以用来动态创建对象。运行时可以不知道需要多少个对象,生命期是什么和它们准确的数据类型是什么。如果需要新的对象,用new让它在堆中生成,使用结束时,用delete释放。

     

      分析和设计

      第一阶段:我们在做什么

      这一阶段中我们有必要把注意力始终放在核心问题上:确定这个系统要做什么。

      ①谁将使用这个系统。

      ②执行者用这个系统做什么。

      ③执行者如何用这个系统工作。

      ④如果其他人也做这件事,或者同一个执行者有不同的目标,该怎么办?(揭示变化)

      ⑤当使用这个系统时,会发生什么问题?(揭示异常)

     

      第二阶段:我们将如何建立对象

      ①类的名字。

      ②类的职责。

      ③类的协同:它与其他类有哪些交互?

      

      对象开发准则

      下列步骤提出了考虑开发类时要用到的一些准则:

      ①让特定问题生成一个类,然后在解决其他问题期间让这个类生长和成熟。

      ②记住,发现所需要的类(和它们的接口),是设计系统的主要内容。如果已经有了那些类,这个项目就不困难了。

      ③不要强迫自己在一开始就知道每一件事情,应当不断地学习。

      ④开始编程,让一些部分能够运行,这样就可以证明或否定已生成的设计。

      ⑤尽量保持简单。

     

      其他略。

  • 相关阅读:
    Activiti(三)流程变量和流程实例
    vue(生命周期,钩子方法,组件)
    Vue(指令篇)
    Activiti(二)
    使用MyBatis_Plus生成代码
    activiti
    多线程常见面试题总结
    Dubbo集群-负载均衡
    dubbox入门
    事务的传播行为,隔离级别以及锁机制
  • 原文地址:https://www.cnblogs.com/sheshiji/p/3427245.html
Copyright © 2020-2023  润新知