- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
OOP技术: 理解面向对象
在本章中,你将学习如下内容:
( 如何理解面向对象思维方式。
( 对象如何通信。
( 对象如何与其他对象关联。
( 对象如何组合。
面向对象技术已经席卷了整个软件界,事实也确实如此。作为一种程序设计方法,它具有很多优点。基于构件的软件开发方法就是面向对象技术孕育出来的。采用这种方法建立一个系统时,首先建立一组类,然后通过增加已有构件的功能或者添加新的构件来逐步扩充系统,最后在建立一个新系统时,你还可以重用已经创建好的类。这样做可以大大削减系统开发时间。
使用UML可以建立起易于使用和易于理解的对象模型。程序员能够创建出这些模型所对应的软件。因此,UML对基于类开发的全过程都有益处。
面向对象是一种思维方法——它是依赖于几个基本原则的思维方法。在这一章中,你将学习到这些基本原则。你将搞清楚对象是什么,在分析和设计中如何利用对象。从下一章开始介绍如何根据这些基本原则运用UML。
2.1 无处不在的对象
对象,不论是具体的还是抽象的,遍布于我们的周围。它们组成了整个世界。正如前一章所指出的,典型的现代软件都要模拟现实世界(至少是模拟现实世界的一个片段),因此程序通常也要模拟现实世界中的对象。如果体会了对象的实质,那么你就能够理解如何用软件来表达对象,以及软件是否是面向对象的。传统的程序员能够从面向对象概念中受益,因为面向对象概念提供了他们所工作的领域的建模。
首先也是最重要的,对象是一个类(种类)的实例。例如,你和我都是Person这个类的实例。对象具有自身的结构(structure)。也就是说,它具有属性(特性)和行为。对象的行为包括它所能执行的操作。属性和操作合起来被称为特征(feature)。
你和我作为Person这个类的对象,都具有一些共同的属性:身高、体重和年龄等(不难想象,还有许多其他的属性)。我们每个人之所以独一无二,是因为我们每个人的这些属性都有一个特定的值。我们都能执行一些共同的操作:吃饭、睡觉、读书、写字、说话、工作等(或者用对象语言来描述,就是eat()、sleep()、read()、write()、talk()和goToWork())。如果要创建一个处理人事信息的系统(例如工资发放系统或者人力资源部门的信息管理系统),那么在软件中很可能要包括上面提到的一些属性和操作。
在面向对象世界里,类除了起到分类的作用外,还有其他用途。类是用来创建对象的模板。可以把类看成是加工小甜饼的模子,你可以用来压出新的小甜饼对象(有些人可能认为这个模子起的作用仍然是分类,此处不做评论)。
让我们再回到洗衣机的例子。如果指定洗衣机类具有brandName、modelName、serialNumber和capacity等属性,还有acceptClothes()、acceptDetergent()、turnOn()和turnOff()等操作的话,你就有了制造WashingMachina类新实例的机制。也就是说,可以基于洗衣机这个类创建新的对象(参见图2.1)。
这在面向对象的软件开发中尤其重要。尽管本书的重点不是讨论程序设计,但是如果你了解面向对象程序设计语言中的类可以创建新实例的话,会有助于你理解面向对象的基本概念。
图2.1 WashingMachine类是创建新的洗衣机实例的模板
还有其他一些要了解的内容。记住,面向对象的目标是开发出能够反映现实世界某个特定片段的软件(或者说是“建模”)。你考虑到的属性和行为越多,你所建立的模型就越符合实际。在洗衣机的例子中,如果你在洗衣机类中包括drumVolume(洗涤缸容量)、trap(水阀)、motor(马达)和motorSpeed(马达转速)等属性的话,洗衣机模型就更精确。同样,如果洗衣机类中增加了acceptBleach()和controlWaterLevel()等操作的话,也会增加模型的精确性(参见图2.2)。
图2.2 模型中的属性和操作越多,模型就越接近实际
2.2 一些面向对象的概念
面向对象并不只局限于对象的属性和行为建模,它还包含对象的其他方面。这些方面包括抽象(abstraction)、继承(inheritance)、多态(polymorphism)和封装(encapsulation)。其他3种重要的面向对象概念是消息传递(message sending)、关联(association)和聚集(aggregation)。下面让我们逐个学习这些概念。
2.2.1 抽象
简单地讲,抽象(abstraction)的意思就是过滤掉对象的一部分特性和操作直到只剩下你所需要的属性和操作。那么“只剩下你所需要的”是什么含义呢?
不同类型的问题需要不同数量的信息,即使这些问题都属于同一个领域也是如此。与第一次所设计出的洗衣机类相比,第二次所设计的
文档评论(0)