《面向对象的思考过程(原书第4版)》一1.6 究竟什么是类

本节书摘来自华章出版社《面向对象的思考过程(原书第4版)》一书中的第1章,第1.6节,[美] 马特·魏斯费尔德(Matt Weisfeld) 著黄博文 译更多章节内容可以访问“华章计算机”公众号查看。

1.6 究竟什么是类

简单地说,类是对象的蓝图。当你实例化一个对象时,你基于类来构建这个对象。事实上,尝试解释类和对象实际上是一个先有鸡还是先有蛋的问题。描述类时不使用术语对象是非常困难的,反之亦然。例如,个人自行车是一个对象。然而,有人已经创建了蓝图(就是类)来建造这个自行车。在面向对象的软件中,对比先有鸡还是先有蛋的问题的不同之处在于,我们知道对象和类哪个先出现(类先出现)。如果没有类,对象无法被实例化。因此本节很多概念与本章之前的很多内容都很相似,特别是我们讨论属性和方法时。
为了解释类和方法,我们可以拿关系型数据库来举例。在数据表中,表自身的定义(即字段、描述和数据类型)是类(即元数据),而对象则是表中的行(即数据)。
本书关注于面向对象的软件开发,但不局限于具体的语言实现(比如Java、C#、Visual Basic .NET、Objective C或者C++)。但经常使用代码示例可以帮助大家理解,所以必要时我会在本书中使用Java代码来帮助解释一些概念。而且每章的结尾会包含本章代码示例的C#版。在出版社网站可以获取到本书中出现的大部分代码。我们也在网上提供了Java、C# .NET、VB .NET和Objective C版本的示例代码。
接下来的小节会描述类的一些基本概念,以及它们之间的关系。

1.6.1 创建对象

类可以认为是对象的模板或者模具,正如图1-10中的饼干模具一样。类用来创建对象。

类可以认为是一种更高级别的数据类型。例如,你创建了一个整数或浮点数:

 int x;
float y;

你也可以使用预先定义的类创建一个对象:

myClass myObject;

本例中,通过名称可以明显看出myClass是类,而myObject是对象。
请记住每个对象有自己的属性(数据)和行为(函数或惯例)。类定义了使用该类创建的所有对象具有的属性和行为。类是一块代码。可以单独分发使用类实例化的对象,也可以将类作为程序库的一部分进行分发。因为对象从类中创建,所以类必须定义对象的基础材料(即属性、行为和消息)。总之,在创建对象之前必须先设计一个类。
例如,以下是对Person类的定义:

1.6.2 属性

正如你看到的一样,类的数据通过属性来表示。每个类必须定义属性,用来存放该类实例化的每个对象的状态。在上一小节中的Person类的例子中,Person类定义了name和address两个属性。
访问控制
当数据类型或方法被定义为public时,其他对象可以直接访问它。当数据类型或方法被定义为private时,只有自身对象可以访问它。另一个访问修饰符protected只允许相关对象访问,第3章会讲述该点。

1.6.3 方法

正如你本章之前学到的一样,方法实现了一个类需要的行为。从某个类实例化的每个对象都拥有该类中定义的方法。有些方法可以调用其他对象(或信息)的行为,而有些方法则提供该类底层的内部行为。内部行为是私有方法,不允许其他对象访问。在Person类中,行为有getName()、setName()、getAddress()、setAddress()。其他对象可以通过这些方法检查或修改该对象属性值。这是面向对象的系统中常用的技术。在任何情况下,对对象中属性的访问应该由该对象自身控制,任何一个对象都不应该直接修改其他对象的属性。

1.6.4 消息

消息是对象之间的通信机制。例如,当对象A调用了对象B的一个方法,对象A向对象B发送了一个消息。对象B的响应由其返回值定义。其他对象只能调用一个对象的公共方法,而无法调用其私有方法。以下代码验证了该点:

在该例子中(假设Payroll对象已经

时间: 2024-09-15 07:27:06

《面向对象的思考过程(原书第4版)》一1.6 究竟什么是类的相关文章

《Java语言导学(原书第6版)》一一2.2 类

2.2 类 生活中有很多个体对象,它们都属于同一种类型.例如,生活中可能有上千辆自行车,但是它们的制作工艺和模型都一样.它们都基于同样的设计图纸制作而成,因此包含相同的组件.在面向对象术语中,称这些自行车是对象类--自行车类的实例.类是创建个体对象的蓝图. 比如,下述Bicycle类给出了实现自行车的一种方法: 上述Java语言的语法可能有点陌生,但该类的设计完全基于对前面自行车对象的讨论.cadence.speed和gear等字段表示对象的状态,changeCadence.changeGear

《Java语言导学(原书第6版)》一2.2 类

2.2 类 生活中有很多个体对象,它们都属于同一种类型.例如,生活中可能有上千辆自行车,但是它们的制作工艺和模型都一样.它们都基于同样的设计图纸制作而成,因此包含相同的组件.在面向对象术语中,称这些自行车是对象类--自行车类的实例.类是创建个体对象的蓝图.比如,下述Bicycle类给出了实现自行车的一种方法: 上述Java语言的语法可能有点陌生,但该类的设计完全基于对前面自行车对象的讨论.cadence.speed和gear等字段表示对象的状态,changeCadence.changeGear和

《面向对象的思考过程(原书第4版)》一1.1 基本概念

本节书摘来自华章出版社<面向对象的思考过程(原书第4版)>一书中的第1章,第1.1节,[美] 马特·魏斯费尔德(Matt Weisfeld) 著 1.1 基本概念 本书主要目标是让你学会思考如何将面向对象概念应用于面向对象的系统设计中.历史上定义面向对象的语言拥有以下特点:封装(encapsulation).继承(inheritance)和多态(polymorphism).因此,如果设计一门语言时没有完全实现以上特性,那么通常我们认为该语言不是完全面向对象的.即使实现了这三点,我也往往会加入组

《面向对象的思考过程(原书第4版)》一3.5 多重继承

本节书摘来自华章出版社<面向对象的思考过程(原书第4版)>一书中的第3章,第3.5节,[美] 马特·魏斯费尔德(Matt Weisfeld) 著黄博文 译更多章节内容可以访问"华章计算机"公众号查看. 3.5 多重继承 第7章会讲述有关继承的更多细节.然而,这里很适合讨论多重继承.多重继承是类设计中最强大也最具挑战的一个方面. 顾名思义,多重继承允许一个类继承自多个类.实际看起来这是个好主意.对象都应该模拟现实世界,不是吗?现实世界中存在很多多重继承的例子.父母是多重继承的

《面向对象的思考过程(原书第4版)》一 第3章 高级的面向对象概念

本节书摘来自华章出版社<面向对象的思考过程(原书第4版)>一书中的第3章,第3.1节,[美] 马特·魏斯费尔德(Matt Weisfeld) 著黄博文 译更多章节内容可以访问"华章计算机"公众号查看. 第3章 高级的面向对象概念 第1章和第2章讲述了面向对象的基本概念.在开始学习关于构建面向对象系统的一些具体设计问题之前,我们需要更进一步了解面向对象的一些概念,比如构造函数.操作符重载以及多重继承.我们也会讲述错误处理技术以及面向对象的设计中作用域的重要性.其中一些概念可能

《面向对象的思考过程(原书第4版)》一1.3 过程式编程与面向对象编程

本节书摘来自华章出版社<面向对象的思考过程(原书第4版)>一书中的第1章,第1.3节,[美] 马特·魏斯费尔德(Matt Weisfeld) 著黄博文 译更多章节内容可以访问"华章计算机"公众号查看. 1.3 过程式编程与面向对象编程 在我们深入了解面向对象开发的优势之前,先考虑一个更基本的问题:究竟什么是对象?这既是一个复杂的问题,也是一个简单的问题.它复杂是因为学习任何一种软件开发方法论都非易事.它简单是因为人们已经在按对象的方式进行思考.例如,当你看到一个人,你会把他

《面向对象的思考过程(原书第4版)》一1.10 多态

本节书摘来自华章出版社<面向对象的思考过程(原书第4版)>一书中的第1章,第1.10节,[美] 马特·魏斯费尔德(Matt Weisfeld) 著黄博文 译更多章节内容可以访问"华章计算机"公众号查看. 1.10 多态 多态是一个希腊词,字面上理解为许多形状.尽管多态与继承是紧耦合的关系,但它通常单独作为面向对象技术中最强大的优点之一.当向一个对象发送一个消息时,该对象必须定义一个方法来响应这个消息.在继承体系图中,所有的子类从它们的超类中继承接口.然而,由于每个子类是单独

《面向对象的思考过程(原书第4版)》一第1章 面向对象的概念简介

本节书摘来自华章出版社<面向对象的思考过程(原书第4版)>一书中的第1章,[美] 马特·魏斯费尔德(Matt Weisfeld) 著 第1章 面向对象的概念简介 很多程序员其实并不知道在20世纪60年代就已出现面向对象的软件开发方式.尽管受欢迎的面向对象的编程语言(例如Smalltalk和C++)已被广泛使用,但直到90年代中后期面向对象范式才开始快速发展.面向对象方法论的兴起恰逢互联网作为商业及娱乐平台之际.总之,对象借助网络能良好协作.后来显然互联网存活下来,而面向对象的技术已经在开发新的

《面向对象的思考过程(原书第4版)》一1.8.1 接口

本节书摘来自华章出版社<面向对象的思考过程(原书第4版)>一书中的第1章,第1.8节,[美] 马特·魏斯费尔德(Matt Weisfeld) 著黄博文 译更多章节内容可以访问"华章计算机"公众号查看. 1.8.1 接口 我们可以看到接口定义了对象之间通信的基本手段.每个类设计接口规格来保证对象能被正确实例化和操作.必须向对象提供的接口发送消息来使用对象暴露的任何行为.接口需要完整描述类与类之间的交互.在大多数面向对象的语言中,访问修饰符指定为public的方法属于接口.私有