面向对象分析与设计(二)

上一节介绍了为什么要对象,什么是对象,怎么用对象。本节将继续介绍对象的基本结构·······

封装
封装是指对象在其操作中将属性隐藏。对象是一个盒子,把属性放在盒子里,把行为放在盒子边缘。隐藏的属性称为私有属性。
封装的本地性和简单性。当前有对象和属性,如果程序员在使用对象时都是直接访问,在以后的工作中,如果要更改这个属性,那么就要找到所有直接使用属性的代码,这是非常可怕的。

关联和聚合
对象不是孤立使用的,所有的对象都和其他对象有关系,只是关系的强弱而已。
在使用对象建立模型时,有关联和聚合两种连接对象的方式:
  • 关联是一种弱连接。对象可以是这个团体的一部分,但并不相互依赖。例如一辆汽车这个团体,乘客和司机对于汽车的关系是关联的,是松散的关系。
关联的UML图如下:

  • 聚合是一种强连接。它是把几个对象放在一起组成更大的对象,从而形成了部分--整体的结构关系,这种依赖性很强,至少整体对于部分的依赖性是很强的。例如汽车的轴承和外壳模型,模型是汽车的主题框架,轴承是汽车有动力的必要条件。
聚合的UML图如下:

图和树
除了关联和聚合外,还有图和树关系。
图是对象连接的一个任意集合。如果关联的对象多一点的话就常常会形成图,例如北京地铁系统图,人们可以从一个站到另一个站,通常会经过更多的站。
多关联形成图:
树是图的一种特殊情况。如果结聚合的UML图多画几层就会发现是一个倒的树形结构。树的每一个节点都只有一个父节点,和若干子节点。
多层次的聚合图:
连接对象的任意组合会形成关联,图;而只有那些相互关联,有正确结构的组合才会次形成聚合,树。

链接和可导航性
对象图中对象之间的连接称为链接。如果想要说明一个对象知道另一个对象在哪,就可以用箭头。如图,Customer链接了Address和String。
导航链接图
每个链接都可以看做一个属性,然后链接的名字就是属性名。因此可以说,aCustomer的属性address把它链接到Address对象上,属性name把它链接到表示其名称的String对象上。箭头表示可导航性,即知道另一个对象在哪里。因为Customer 端没有箭头,这表示String不知道它与aCustomer的关联。可导航的链接在面向对象的程序中常常称为指针(指针是对象在内存中的地址,以便在需要时能找到它)。
简单的值显示为属性,重要的对象显示为链接的盒子,中间值根据需要显示为属性或链接的盒子。

消息
每个对象都至少与另一个对象建立联系,孤立的对象毫无意义。对象一旦建立连接,就可以协作完成任务,在协作是要相互发送消息。如图所示,消息在实线箭头上方表示发送的方向,回应在蝌蚪符号的下发表示数据的移动方向。
使用消息协作图
对象是谦恭的,在接收到消息后会立刻处理请求并回应。但实际上,接收对象有时也是有心无力的,下面是一些请求失败情况:


启动操作
在软件对象收到消息时,就会执行一些代码。 每段代码都是个操作。换言之,消息启动了操作。在UML中,可以显示发送者给接收者发送的消息,或者接收者执行的操作,也可以显示两者。
除了回应之外,消息还可以带参数(parameter,也称为变元argument)。 参数是一个对象或简单的值,接收者用它来满足请求。例如,可以给Person对象发送消息“你的身高是多少米?”,一分钟后再发送另一 一个消息“你的身高是多少英寸?”。在这个例子中,“你的身高是多少”就是消息,而“米”和“英寸”就是参数。
有时,不知道自己设计的消息是应让对象执行操作,还是从对象那里提取一些信息, 或者两者均有。消息样式的一个规则是“消息应是一个问题,或者一一个命令,但不能两者都是”,这可以避免许多问题。
提出问题的消息要求对象提供一些信息, 所以总是有回应。如果发出了合理的命令,对象只需执行它,则不需要反馈任何信息。


面向对象程序的工作原理
面向对象的程序在工作时首先要创建对象,然后进行一些列的操作。那么问题来了,谁创建第一个对象?答案是入口点,程序必须有一个入口点。
在java中,main函数就是入口点。在启动程序时,要在用户指定的对象上找到main操作,执行main操作。mian中的每一个指令都可以创建对象,把对线连接在一起,发送消息等。对象接收到消息后,也可以创建对象,连接对象,发送消息。这样,在main执行结束后程序停止,我们的业务也完成了。

垃圾收集
程序中的每个新对象都要占用计算机内存的,在程序运行时,可能会创建越来越多的对象,这样,运行其他程序的可用内存就会减少。如果在对象使用完后不重新声明,计算机就可能用尽内存。
传统上,程序员必须确定何时去除与对象的最后连接,以便显式地删除或释放对象的内存。(结构化的语言没有对象,但有记录、结构和数组,它们也需要释放)。跟踪对象的生命周期是很复杂的,程序员很容易忘记些已没有用的对象,使问题更严重,这种错误称为内存泄漏。
像Java 这样的语言规定,程序会自动重新声明对象,程序员不需要做任何事。其理念是每个程序都有一一个助手, 称为垃圾收集器。它四处巡视,查找未连接的对象,并清理它们。不能访问的对象就不能发送消息,如果对象不能发送消息,就不能回应问题或执行命令,因此必须通过垃圾收集来清除。现在,每个程序都有一个运行时系统(run-time system),这个软件总是在我们编写的代码后面执行,它执行内务操作,例如垃圾收集。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值