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

简介: 对象是面向对象程序中的基础材料。使用面向对象技术的程序本质上是对象的集合。举例来说,一个公司系统包含了代表公司雇员的对象。接下来的小节描述了这些对象的数据和行为。

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

1.5 究竟什么是对象

对象是面向对象程序中的基础材料。使用面向对象技术的程序本质上是对象的集合。举例来说,一个公司系统包含了代表公司雇员的对象。接下来的小节描述了这些对象的数据和行为。

1.5.1 对象数据

存放在对象中的数据代表了该对象的状态。在面向对象术语中,数据被称为属性。在图1-6的例子中,雇员的属性可以是社会安全号码、生日、性别、电话号码等。属性包含的信息将不同对象区分开来,在本例中是把不同的雇员区分出来。本章中讨论类时会讲述属性的细节。


b29303c4081d37cb2c4c7ebca49e3f4c6e1564bd


1.5.2 对象行为

对象的行为表示对象可以做什么。在过程式语言中,可以通过过程、函数及子程序定义行为。在面向对象程序设计术语中,这些行为包含在方法中,你可以通过发送消息的方式来调用方法。在雇员例子中,考虑到雇员对象需要的行为之一是对属性值进行存取,所以每个属性会有相应的方法,比如setGender()和getGender()。当另一个对象需要该信息时,可以给雇员对象发送一个消息来询问其性别。
毫不奇怪,在本书第1版发布时,应用程序中已经出现了取值方法(getter)和赋值方法(setter),当然还有很多其他的面向对象技术。而且很多技术都与数据相关。通过第11章及第12章,我们可以看到如何使用面向对象的方式组织数据。使用对象最强大、最有趣的一点在于,数据与行为是一个整体,而不是与行为代码割裂。
XML的出现并不全为了以可移植的方式表示数据。它也有一种替代方式来让代码轻松访问数据。在.NET技术中,取值方法和赋值方法都被认为是数据自身的属性。
例如,Java中定义一个名为Name的属性如下所示:
_1
对应的取值方法和赋值方法如下所示:
_2
现在,使用C#.NET定义一个名为Name的XML属性,代码如下所示:
_3
在这种方式中,取值方法和赋值方法实际上是属性Name的属性。
不论采用什么方式,目的都是一致的,即控制对属性的访问。本章中,我想先聚焦于取值方法和赋值方法的概念本质。而在第11章及以后的章节中讲述面向对象数据时会有更多关于属性的知识。
取值方法和赋值方法
取值方法和赋值方法的理念就是数据隐藏。因为其他对象不应该直接操作另一个对象中的数据,而取值方法和赋值方法提供了对对象数据的访问控制。取值方法和赋值方法有时分别被称为访问方法(accessor method)和设值方法(mutator method)。
注意,我们只展示了这些方法的接口,而不是实现。以下几点列出了用户需要知道如何实际使用这些方法:
方法名
传给方法的参数
方法的返回值
请看图1-7演示的行为。
图1-7中,Payroll对象包含了一个名为CalculatePay()的方法,用于计算具体雇员的薪水。Payroll对象需要获取该雇员的社会安全号码。为了获取该信息,Payroll对象需要给Employee对象发送一个消息(本例中即调用getSocialSecurityNumber()方法)。基本上,这意味着Payroll对象调用Employee对象的getSocialSecurityNumber()方法。Employee对象接收到该消息并返回请求的信息。


689df0f10dd3b848fcc09996ae3a1134c4ae2c65



UML类图
由于这是我们看到的第一个类图,所以进行了一些简化,缺乏一些类应该具有的结构(例如构造函数)。不过没关系,第3章中我们会详细讨论类图及构造函数。
每个类图由三部分组成:类名、数据(属性)、行为(方法)。图1-8中,Employee类图的属性区域包含SocialSecurityNumber、Gender和DateofBirth。方法区域包含了操作这些属性的方法。你可以使用UML建模工具来创建和维护类图以对应真实的代码。
建模工具

f7209bf5c2d1<br>195efa796c3a2feee53f8b2f



可视化建模工具提供了一种方式来使用统一建模语言(unified modeling language,UML)创建和操作类图。对于类图的讨论贯穿本书,第10章会指导如何使用该标记语言。UML类图可以作为一个工具来可视化类以及类与类之间的关系。本书中对UML的使用仅限于类图。
本章稍后会介绍类与对象的关系。但现在你可以认为类是创建对象的模板。当对象被创建时,我们看到对象被实例化。因此,如果我们创建三个雇员,实际上是创建了三个Employee类的直接实例。每个对象都包含了属性和方法的副本。例如,图1-9中,一个叫作John的对象(John是该对象的标识)自身拥有Employee类中所有的属性和方法的副本。叫作Mary的雇员类也拥有自己独立的属性和方法的副本。这两个对象各自拥有DataOfBirth属性和getDateOfBrith方法的副本。

9cf4aa89bbba27155988c1d87204232fba789229



图1-9 程序空间
实现问题
请注意没必要为每个对象的每个方法都实现一个物理副本。其实,每个对象指向了同一个实现。不过这个问题可以交由编译器/操作系统平台来解决。从概念上来说,你可以认为对象是完全独立的,各自拥有独立的属性和方法。
相关文章
|
6月前
|
存储 Java 程序员
JavaSE——面向对象基础(1/4)-面向对象编程、程序中的对象、对象的产生、对象的执行原理、类和对象的一些注意事项
JavaSE——面向对象基础(1/4)-面向对象编程、程序中的对象、对象的产生、对象的执行原理、类和对象的一些注意事项
55 7
|
6月前
|
JavaScript 前端开发
深入解析JavaScript中的面向对象编程,包括对象的基本概念、创建对象的方法、继承机制以及面向对象编程的优势
【6月更文挑战第12天】本文探讨JavaScript中的面向对象编程,解释了对象的基本概念,如属性和方法,以及基于原型的结构。介绍了创建对象的四种方法:字面量、构造函数、Object.create()和ES6的class关键字。还阐述了继承机制,包括原型链和ES6的class继承,并强调了面向对象编程的代码复用和模块化优势。
58 0
|
7月前
|
设计模式 算法 中间件
【C++ 可调用对象的应用】C++设计模式与现代编程技巧:深入可调用对象的世界
【C++ 可调用对象的应用】C++设计模式与现代编程技巧:深入可调用对象的世界
221 1
|
存储 算法 编译器
03-📝C++核心语法|面向对象1【 C++编程规范、类和对象、面向对象程序设计案例、对象的构造和析构、C++面向对象模型初探】
复习`C++核心语法`,且适当进行汇编探索底层实现原理,进一步夯实基础,为以后的`底层开发`、`音视频开发`、`跨平台开发`、`算法`等方向的进一步学习埋下伏笔。
03-📝C++核心语法|面向对象1【 C++编程规范、类和对象、面向对象程序设计案例、对象的构造和析构、C++面向对象模型初探】
《面向对象的思考过程(原书第4版)》一3.6 对象操作
当处理复杂的数据结构和对象时,编程中的很多最基本的操作会变得越来越复杂。例如,当你想复制或比较原始数据类型时,过程非常简单。然而,复制和比较对象则并不简单。《Effective C++》第34页中,Scott Meyers专门花了整个小节来讲述复制和分配对象。
1079 0
|
JavaScript Java C#
《面向对象的思考过程(原书第4版)》一1.6 究竟什么是类
简单地说,类是对象的蓝图。当你实例化一个对象时,你基于类来构建这个对象。事实上,尝试解释类和对象实际上是一个先有鸡还是先有蛋的问题。描述类时不使用术语对象是非常困难的,反之亦然。例如,个人自行车是一个对象。
1169 0