面向对象的思考过程(原书第5版)_【美】马特·魏斯费尔德_AZW3_MOBI_EPUB_PDF_电子书(无页码)_【美】马特·魏斯费尔德
内容节选
第4章类的剖析 在之前的章节中,我们介绍了面向对象的基本概念,并且讲述了接口和实现的区别。不管你对接口与实现的区别理解有多深入,至少你在设计一个类时要思考该类是否好用,以及它如何与其他类交互。决不能凭空设计一个类,我曾经说过任何一个类都不可能是个孤岛。因为当对象被实例化后,始终要与其他对象交互。而且对象也可以作为其他对象的一部分,或者作为继承体系中的一部分。 本章实现了一个简单的类,并逐段查看代码来指导设计类时应该考虑的准则。我们将继续使用第2章中的出租车司机的例子。 以下每个小节都包含了类的某个特定方面。虽然有些部分不会出现在每个类中,但理解类的设计和构造原理很重要。 注意 该示例类只用于演示目的。其中一些方法并不充实(即没有任何实现),只简单地呈现了接口,这样做主要为了强调接口是刚开始进行设计时的重点。 4.1 类名 类名之所以重要,有好几个原因。最明显的原因是类名用来识别类本身。除了简单的识别作用,类名必须是具有描述性的。选择一个合适的名称相当重要,因为类名提供了这个类的用途以及在更大系统中的交互方式等信息。 语言自身的一些限制也造就了类名的重要性。例如,Java中,公共类的类名必须与文件名一致。如果两者不匹配,应用程序不会被编译。 图4.1展示了我们需要详细解释的类。在这个例子中紧跟着关键字class之后的Cabbie就是类名,清晰又简单。public class Cabbie {} 图4.1 示例类 使用Java语法 请记住本书约定使用Java语法。Java语法比较简单,但某些语法与其他语言相比可能有些不同。 当实例化Cabbie类时会使用到类名。 4.2 注释 不管注释采用什么语法,注释能帮助我们理解类的功能。在Java和其他语言中,有两种注释。 Java和C#中特别的注释风格Java 和C#中的注释有三种类型。在Java中,第三种注释类型(/** */)表示Java提供的格式文档。本书不会涉及这种注释。C#中,创建文档注释的语法是:///,与Javadoc文档注释/** */很相似。 第一种注释是传统C语言的风格,使用/*(斜杠和星号)来开始注释,并使用*/(星号和斜杠)来结束注释。这种注释可以从一行扩展到多行,请注意不要忘记为每个注释使用配对的开始注释和结束注释符号。如果忘记了结束注释(*/),一部分代码则会被标记为注释从而被编译器忽略。以下是一段在Cabbie类中使用的这种风格的注释:*/ 本类定义了一个出租车司机并分配了一辆出租车 */ 第二种注释是//(两个斜杠),它会把紧随其后直到行尾的所有代码都作为注释。这种类型的注释能应用到一行代码,所以你无须使用结束注释符号,但请注意每次只能注释一行,并且在注释后面不能跟随任何需要运行的代码。以下是Cabbie类中使用的这种类型的注释:// 司机姓名 4.3 属性 属性代表了对象的状态,因为它们存储了该对象相关信息。在本例中,Cabbie类用属性存储了公司名称、司机姓名以及分配给该司机的出租车。比如,第一个属性存储了公司名称:private static String companyName = "Blue Cab Company"; 请注意这里有两个关键字private和static。关键字private表示方法或变量只能被声明的对象访问。 尽可能隐藏数据 本例中的所有属性都是私有的。这是保持接口设计尽量最小化的设计准则。访问属性的唯一方式是使用类提供的方法接口(本章稍后会讲述)。 static关键字表示从该类实例化的所有对象只存在该属性的一份副本。可以说这是个类属性(请看第3章关于类属性的更多讨论)。所以即使从Cabbie类实例化500个对象,而属性companyName在内存中只存在一个副本(请见图4.2)。 图4.2 对象内存分配 第二个属性name是一个存储了司机姓名的字符串:private String name; 这个属性也是私有的,所以其他对象无法直接访问它。其他对象必须使用接口方法来访问该属性。 myCab属性是对另一个对象的引用。名为Cab的类存储了出租车的相关信息,比如它的车牌号以及维修记录:private Cab myCab; 传递引用Cab 对象可能由其他对象创建。所以该对象引用会传递给Cabbie对象。不过在这个例子中,Cab对象是在Cabbie对象中创建出来的。因此我们实际并不关心Cab对象的内部结构。 请注意此时只是创建了对Cab对象的引用;该定义并不会导致内存分配。 4.4 构造函数 Cabbie类包含两个构造函数。之所以我们能识别某些方法是构造函数是因为方法名与类名是相同的,都是Cabbie。第一个构造函数是默认的构造函数:public Cabbie() { name = null; myCab = null; } 技术上来说这......
- 信息
- 前言
- 致谢
- 关于作者
- 第1章 面向对象的概念简介
- 第2章 如何以对象的方式进行思考
- 第3章 更多面向对象概念
- 第4章 类的剖析
- 第5章 类设计指导
- 第6章 使用对象进行设计
- 第7章 精通继承和组合
- 第8章 框架和重用:使用接口和抽象类进行设计
- 第9章 创建对象及面向对象设计
- 第10章 设计模式
- 第11章 避免依赖和高度耦合的类
- 第12章 面向对象设计的SOLID原则