UML基础与Rose建模实用教程(第三版)
上QQ阅读APP看书,第一时间看更新

1.1.3 对象与类的确定

面向对象的技术认为客观世界是由各种各样的对象所组成的,每个对象都有自己的数据和操作,不同对象之间的相互联系和作用构成了各种系统。在面向对象的程序设计中,系统被描绘成由一系列完全自治、封装的对象所组成,而且对象与对象之间通过对象暴露在外的接口进行调用的。对象是组成系统的基本单元,是一个具有组织形式的含有信息的实体。比如可以这样表述:有一个名字叫张三的人。人这个实体对象,包含姓名是张三这个信息。而类是创建对象的模板,在整体上可以代表一组对象,比如创建人这个类,它就代表人这个概念,可以使用这个类来表达张三、李四等。设计类而不是设计对象可以避免重复编码,类只需要编码一次就可以实例化属于这个类的任何对象。

对象(Object)是由状态(State)和行为(Behavior)构成的。事实上,属性(Property)、状态(State)还有数据(Data)这些在各种书中提到的概念,意思都相似,都是用于描述一个对象的数据元素,这些概念具体到各种语言便有不同的叫法。对象的状态值用来定义对象的状态。例如,当判断学生是否可以借书的时候,可以对学生的学号(不妨称为第一个状态)和学生的目前借书数量(可以称为第二个状态)来进行判断。行为(Behavior)、操作(Operation)以及方法(Method)这些在各种书中提到的概念,是用于描述访问对象的数据或修改、维护数据值的操作。如上文描述学生的行为,“告诉图书管理员你的学号”和“选择需要借阅的图书”等。对象只有在具有状态和行为的情况下才有意义,状态用来描述对象的静态特征,行为用来描述对象的动态特征。对象是包含客观事物特征的抽象实体,封装了状态和行为,在程序设计领域可以用“对象=数据+数据的操作”来表达这种设计思路。

类(Class)是具有相同属性和操作的一组对象的集合,即抽象模型中的“类”描述了一组相似对象的共同特征,为属于该类的全部对象提供了统一的抽象描述。例如名为“学生”的类被用于描述能够到图书馆借阅图书的学生对象的集合。

类的定义要包含以下的要素:

  • 定义该类对象的数据结构(属性的名称和类型)。
  • 对象所要执行的操作,也就是类的对象要被调用执行哪些操作,以及这些操作进行时对象要执行哪些操作,比如数据库操作等。

类是对象集合的再抽象,类与对象的关系如同一个模具和使用这个模具浇注出来的铸件一样,类是创建软件对象的模板。类给出了属于该类的全部对象的抽象定义,而对象是符合这种定义的一个实体。类具有以下两个作用:

  • 在内存中申请并获得一个数据区,用于存储新对象的属性。
  • 把一系列行为和对象关联起来。

一个对象又被称作类的一个实例,也称为实体化(Instantiation)。术语“实体化(Instantiation)”是指对象在类声明的基础上被创建出来的过程。比如声明了一个“学生”类,可以在这个基础上创建一个“姓名叫张三的学生”对象。

类的确定和划分没有一个统一的标准和方法,基本上依赖于设计人员的经验、技巧以及对实际项目中问题的把握。通常的标准是“寻求共性、抓住特性”,即在一个大的系统环境中,寻求事物的共性,将具有共性的事物用一个类进行表述,在具体的程序设计时,具体到某一个对象,要抓住对象的特性。确定一个类的步骤通常包含以下方面:

  • 确定系统的范围,如图书管理系统,需要确定一下和图书管理相关的内容。
  • 在系统范围内寻找对象,该对象通常具有一个和多个类似的事物。比如在图书管理中,某院系有一个名叫张三的学生,某院系一个名叫李四的学生,都是学生。
  • 将对象抽象成为一个类,再按照上面有关类的定义,确定类的数据和操作。

在面向对象的程序设计中,类和对象的确定是非常的重要,是软件开发的第一步,软件开发中类和对象的确定直接影响到软件的质量。如果划分得当,对于软件的维护与扩充以及软件的重用性方面都有很大的帮助。