《面向对象的思考过程(原书第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 程序空间
实现问题
请注意没必要为每个对象的每个方法都实现一个物理副本。其实,每个对象指向了同一个实现。不过这个问题可以交由编译器/操作系统平台来解决。从概念上来说,你可以认为对象是完全独立的,各自拥有独立的属性和方法。
相关文章
|
4月前
|
人工智能 搜索推荐 定位技术
外贸B2B的降维打击:我用“WhatsApp+AI”重构客户开发全流程(附7层漏斗拆解)
传统外贸获客成本高、效率低?本文拆解一套“WhatsApp+AI自动获客”7层漏斗打法:获客→筛选→触达→跟进→转化→管理→成本。
|
传感器 数据采集 物联网
技术经验解读:【物联网】I2C(IIC)通信协议详解与应用
技术经验解读:【物联网】I2C(IIC)通信协议详解与应用
1298 0
|
缓存 负载均衡 监控
Nginx性能调优5招35式不可不知的策略实战
以上 V 哥总结的5个方面关于 Nginx性能调优的策略,实际应用中需要结合实际项目的情况来测试,希望对你有帮助,欢迎关注威哥爱编程,技术路上我们一起成长。
661 0
|
测试技术
po+selenium+unittest自动化测试项目实战
po+selenium+unittest自动化测试项目实战
4062 0
 po+selenium+unittest自动化测试项目实战
|
SQL 数据挖掘 数据库
数据库join类型有哪些?
【8月更文挑战第2天】
1596 17
数据库join类型有哪些?
STM32CubeMX EC11旋转编码器驱动
STM32CubeMX EC11旋转编码器驱动
2489 10
|
JavaScript 前端开发 Java
由dwr不支持重载的方法探究dwr的运行机制
       上篇博文中简单分享了一个dwr的小例子。在做小例子的过程中,发现了一个有趣的现象:dwr不支持重载的方法。        java代码: package com.
1586 0
|
Python
【10月更文挑战第8天】「Mac上学Python 16」小学奥数篇2 - 分糖果问题
本篇将通过 Python 和 Cangjie 双语解决一个经典的数学问题:如何将糖果平分给小朋友。这道题目将帮助初学者通过编程理解循环与条件判断的结合使用。
570 2
|
存储 分布式计算 NoSQL
惊呆了!大数据处理竟然这么牛?挑战与机遇并存,看完这篇,你也能成为数据处理大师!
【8月更文挑战第6天】信息时代中,数据成为关键资源。企业需分析海量数据洞察市场、优化流程、提效决策。面对TB乃至PB级数据量及其多样性与复杂性的挑战,HDFS与NoSQL确保高效存储,而MapReduce和Spark等框架支持分布式计算,大幅提升处理效率。在金融、电商和医疗等领域,大数据正推动风险识别、精准营销与精准医疗等应用的发展,展现广阔前景。
281 1
|
前端开发 JavaScript 定位技术

热门文章

最新文章