第1章 对象导言

  实现的重用

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

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

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

 

  继承:重用接口

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

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

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

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

 

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

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

 

  具有多态性的可互换对象

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

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

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

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

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

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

 

  创建和销毁对象

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

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

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

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

 

  分析和设计

  第一阶段:我们在做什么

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

  ①谁将使用这个系统。

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

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

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

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

 

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

  ①类的名字。

  ②类的职责。

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

  

  对象开发准则

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

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

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

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

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

  ⑤尽量保持简单。

 

  其他略。

转载于:https://www.cnblogs.com/sheshiji/p/3427245.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值