类与对象的关系

本次所介绍的内容主要目的是为了帮助大家更好的理解面向对象的思想。主要的观点包括:万物皆为对象;对象具有属性、状态、行为、标识等特性;对象之间具有包含关系和关联关系等;类是对对象的划分;类是对对象的抽象;对多个对象进行抽象可以得到类;对类的每个属性赋值可以得到对象。

1对象观
1.1 万物皆为对象
    不管处于什么样的环境,不可否认的是,您会面对诸多的对象。如果您在学习,书本、电脑、您的同学和您的老师都是对象。如果您在踢足球,足球、场地和球门都是对象。如果您正在吃饭,饭碗、筷子和餐桌都是对象。对象可能是非常小的,例如分子,对象可能非常大,例如太阳系。
1.2对象的属性
对象的属性用于描述对象的状态、特征以及组成部分。
    如果对一辆公交汽车进行描述,可能会涉及到如下一些内容:车的车牌号是多少,车的高度是多少,车的长度是多少,车的宽度是多少,车的颜色,车的最高时速,车的额定载客量,车行使的里程数,是否在加速,是否在减速,是否在上客,是否在下客,是否在运行,运行的方向,运行的速度,车有几个轮胎,车有多少座位,车的发动机,车的投币箱,等等。
这些描述中有用于描述车的特征的,包括:车牌号、高度、长度、宽度、颜色、最高时速等。
有用于描述车的状态的,包括:里程数、是否加速、是否减速、是否上客、是否下客、是否在运行、运行的方向、运行的速度等。
有用于描述车的组成部分的,包括:车的座位,车的发动机和车的投币箱等。
1.3 对象的行为
对象的行为也就是对象能够完成的功能,每个对象都会有自己的行为,行为用于改变对象自身的状态,或者向其他对象发送消息,有时候一个行为会同时包含这两者。现在只讨论改变自身状态的行为,关于向其他对象发送消息的行为后面进行讨论。下面以司机为对象来研究对象的行为。
每个对象都存在大量的行为。
有些行为是可以看到的。 司机在整个10 路公交系统中的主要作用是开车,所以司机最基本的行为就是:发动汽车、启动汽车、加速、拐弯、减速、停止、开车门、关车门、放广播等等。
另外还有一些行为是作为司机所必需的,却不被注意的。 这些行为包括:能够走路、手能动、脚能动、眼睛能够看到外界信息、能够从大脑中查询线路信息(10 路车的车站在什么地方)。能够走路这样的行为保证司机能够到达汽车所在位置,并上车。手能动,是司机转弯、换档、开关车门、播放广播这些行为所必需的。脚能动,是司机加速、减速、启动、停止这些行为所必需的。眼睛能够看到外界信息是所有这些动作的基础,如果不能从外界获取信息,司机就不知道什么时候停车,什么时候开车,什么时候转弯等。
1.4 对象的标识
系统中的每个对象都有自己的编号,这个编号对于系统中的每个对象来说是惟一的,用于标识这个对象。
    这些标识有些对大家熟悉的,例如车站,有些是不熟悉的,例如车牌号。但是车牌号对于司机来说肯定熟悉。因为属于系统的不同的用户,所以关注的对象也不一样。
但是如果你是一个系统分析员,要完成这样一个系统,系统中所有的用户关注的信息你都需要关注。
标识也是一个属性。 通常标识也是用于描述对象的,这和前面的属性是相同的。
    标识本身可能有意义,例如车站的站名。标识本身也可能没有意义,仅仅作为标识,例如身份证号用于标识一个人,但是本身没有意义。
1.5 对象之间的关系
    对象之间的关系包括:
n         整体与部分的关系,例如轮胎和汽车的关系。
n         关联关系,例如张三乘坐某一辆公交汽车。
1.5.1 整体与部分的关系
    具有这种关系的两个对象之间有比较强的依赖关系,就像上面说的某一辆汽车有几个轮胎,如果没有轮胎,这个汽车就不能正常运行,也就是说只要有一辆汽车,就有属于它的轮胎。
    这种关系的对象一旦创建完之后,都是作为一个整体来使用,通常情况下不会单独考虑组成部分,如果要考虑组成部分也是先考虑整体。例如,要修理某个轮胎,通常都会说修车,然后会说车的轮胎,即使直接说轮胎,也会有一个前提,就是某辆车的轮胎。
这种关系一旦建立,通常不再改变。或者说生命周期基本相同。
1.5.2 关联关系
这种关系的两个对象之间通常没有依赖关系。就像汽车在整个运行过程中,会不停地上客、下客,这样它所搭载的乘客也就在不停地变化。乘客上车了,建立汽车和乘客之间的关联关系。关联关系建立之后,汽车运动,车上的乘客就会跟着运动。乘客下车了,这种关联关系就解除了,汽车的运动不再会对下车的乘客产生影响。
    另外不像整体与部分的关系,一旦创建基本不再变化,关联关系可以根据需要随时创建,随时解除。
1.5.3 关系中的量
       1 辆汽车有4 个轮胎,1 辆汽车上有20 个乘客,这里面的数字就是关系中的量,1 辆汽车对应4 个轮胎,1 辆汽车对应20 个乘客。不管是整体与部分的关系,还是关联关系都存在着量。
根据关系中的量可以把关系分为4 种:
n         一对一
n         一对多
n         多对一
n         多对多
2 类型
2.1 类型是对对象的分类
    人们总是喜欢分类,通过分类可以更好地理解对象。每个对象都属于特定的类型。
例如,提到10 路车并不是某辆10 路车,乘客也不是某个特定乘客,车站也不是某个特定的车站。10 路车通常是所有10 路车组成的一个集合,乘客是所有乘坐10 路车的人组成的集合,车站是所有10 路车所经过的车站组成的集合。这里的10 路车、乘客、车站就是不同的类型,而具体的某辆车应该是10 路车这个集合中的一个元素,某个具体的人是乘客这个集合中的一个元素,某个车站是车站这个集合中的一个元素。
    从上面的描述可以得出这样一个结论,类型就是一个集合。但是集合是不是类型呢?车和人可以组成一个集合,但是二者不是一个类型。所以集合不一定是类型。那么什么样的集合才是类型呢?
    考察上面的几个集合中的元素具有什么特点。10 路车这样一个集合是由所有的10 路车组成的,它们都是汽车,并且样子都很像,更重要的是运营的线路是相同的,功能也相同,也就是说它们具有很多相同的特征,尤其是在主要特征方面,在这里对于10 路车来说,最主要的特征就是运行的线路。
所以类型应该是由多个具有相同特征的对象组成的集合。 提到这个类型就会知道属于这个类型的对象的特征。前面介绍,对象的要素包括对象的属性、行为和标识,同一种类型的对象都应该具有这些相同的属性、行为,使用相同的标识(指的是都使用车牌号或者身份证号),但是对于具体的某个对象来说,可能这些属性和标识的值不同,行为可能会有不同的实现。例如,都使用车牌号作为10 路车的标识,但是不同的车具有不同的车牌号。都具有加速这样的功能,但是不同的车加速的过程可能不一样。
2.2 类型的层次
    类型是由多个对象组成的集合,那么公交车是由很多公交车组成的集合,同样汽车也是一个类型,是由所有的汽车组成的集合,这个集合也包括了公交车。一辆具体的公交车既属于公交车这个集合,又属于汽车这个集合,所以它的类型可以是公交车,也可以是汽车。那么这两个类型之间有什么关系呢?
    很明显,所有的公交车都是汽车,也就是说公交车这个集合属于汽车这个集合的子集。这两个类型之间的关系通常称为子类和父类的关系。公交车是子类,汽车是父类。
    父类所具有的特征子类都有,汽车具有的特征公交车都应该有。但是公交车具有自己的比较特殊的一些特征,例如它有具体的线路、它的始末车时间、有发车间隔等。
    在由对象组成的现实世界中,这种类的分层到处可见。
3 类和对象之间的关系
    对象是具体的,类型是抽象的
类型是对一组对象的抽象,提取了这一组对象的共同特点。 这些对象本身是客观存在的,是具体的,而类型则是一个抽象的概念,不是一个客观存在。所以如果说到了某个类型,您不由自主地会去想一个具体的对象会是什么样子。类型是抽象的。你可以说人类具有姓名、身高、体重等属性,但是你不能说人类的人高是多少,而只能说某个人(具体的对象)的身高是多少,因为一个具体的人才会有具体的身高。
如果为某个类型的所有属性赋值,将会得到一个具体的对象,对象是类型的实例。
    认识类型和对象之间的关系,先是根据这些具有相同特征的对象抽象出一个类型,然后需要的时候,根据类型的特征去描述这个对象。
    例如,学校里的每个学生都有学号、姓名、生日、教室、课程、班级等属性,所以就会根据这些学生抽象出来一个类型——学生类,这样如果要描述一个学生的时候,也会从这些方面进行描述,这个学生的学号是多少,叫什么名字,在哪个教室上课,是哪个班级的,有哪些课程等等。通过这样的描述,就知道这个学生了。
------------------------
     切勿留下您宝贵的意见 !!!
             --Wangmx
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值