微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 硬件工程师文库 > 《程序设计与数据结构》——什么是类?

《程序设计与数据结构》——什么是类?

时间:09-10 来源:周立功单片机 点击:

了一种以图形化方式表示和管理面向对象软件系统的方法。其不仅是系统设计的表示,而且是一种有助于完成系统设计的工具。类图定义了3个不同的部分,即类名、属性和方法,用于解释所构建的类。当用UML创建对象模型时,尽可能不要在类图中包含太多的信息,这样就能集中注意力于整体设计,而不会将重点放在细节上。

如图 4.1所示展示了类建模表示法,显示了一个类(左图)和它所描述的对象(右图),对象ZhangSan和LiMing都是类Person的实例。对象的UML表示法是一个方框,方框里面是对象名后加冒号和类名,对象名和类名都有下划线,并约定用黑体字表示对象名和类名。类的UML表示法也是一个方框,也约定用黑体字表示类名,将名字放在方框的正中央,首字符大写,且用单数名词表示类名。类Person有属性name和birthdate,name是string(字符串),birthdate是date(日期)。类Person中一个对象的名字取值是"Zhang San",生日取值是"21 October 1983";另一个对象的名字取值是"Li Ming",生日取值是"16 March 1950"。

图 4.1 属性和值的UML表示法

UML表示法会在框的第二格里列举属性,每个属性后面都可以有可选项,比如,类型和默认值。在类之前有一个冒号,在默认值之前有一个等号。约定以常规字体显示属性名,方框中的名称左对齐,首字母使用小写。在对象方框的第二格里,也可能会包含属性值,其表示法是列出每个属性名,之后跟着等号和取值,同样属性值也是左对齐,使用常规字体。虽然有些实现要求对象有唯一的标识符,但这些标识符在类模型中是隐含的,即不需要也不应该显式地将它们列举出来,比如,PersonID:ID。因为大多数OO开发语言会自动生成标识符,可以使用这些标识符来引用对象;反之,则可能需要显式地列举出来,否则无法引用对象。但是不要将内部标识符和现实世界的属性混淆了,内部标识符纯粹是一种便于实现的做法,没有应用意义。相反,纳税人编号、汽车牌照号码和电话号码都不是内部标识符,因为它们在实现世界有真实的意义,属于合法的属性。

(2)操作与方法

操作是一个函数或过程,比如,open和close都是Windows类的操作,类中所有的对象都共享相同的操作,因此将对象能够做什么的行为称为操作,通常将相同的操作应用于许多不同的类称为多态。

方法是对操作的实现,其表现为OOP某个类的成员函数。比如,类Validator有一个操作validate,其校验过程是通过validate调用不同的函数实现的。比如,范围值校验和奇偶校验。虽然这些方法在逻辑上都执行相同的任务——数据校验,但是每种方法的实现代码会有所不同。

如图 4.2所示RangeValidator类有min和max属性,以及validate操作,min、max和validate都是RangeValidator的特征。特征是描述属性或操作的类属词汇,类似地OddEvenValidator有isEven属性和validate操作。

图 4.2 操作的UML表示

注意,validate()省略了括号中的输入参数,即"validate(pThis:void *, value:int):bool"。validate的一个参数是pThis,其类型是void *;它的另一个参数value,其类型是int。当一项操作在几个类上都有方法时,这些方法都要有相同的签名,即相同的参数数量和类型,以及返回值的类型。

UML的方框表示类,最多有三格,从上到下每个格里分别包含了类名、属性列表和操作列表。类方框中的属性和操作的框格可以选择显示或隐藏,缺少属性说明没有指定属性,缺少操作框说明没有指定操作。相反,空框格意味着属性是指定的,只是没有显示属性而已。

操作列表约定用常规字体列出操作名,左对齐,首字母小写。比如,参数列表和操作结果的类型,用括号将参数列表括起来,并用逗号分隔参数。结果类型之前有一个冒号,除非括号中空的参数列表明确表示没有参数,否则就不能下结论。

(3)客户和服务器模式

在OOP中,如果一个类公开了一些方法供其它类调用,那么这个类被称为服务器,公开的这些方法被称为服务,而调用这些服务的类就是客户。理论上客户类调用服务器类的服务,即客户向服务器发送了一条消息。而客户和服务器的概念是相对而言的,当A类向B类提供了功能接口时,则类A是服务器,B类是客户;如果类B也同时为类A提供了功能接口,则类B是服务器,类A是客户。

设计良好的服务器应该将其实现细节隐藏起来,客户仅需知道服务器提供的接口即可。接口就是客户所能调用的那些函数,这些函数将消息发给服务器,那么服务器就知道客户需要什么样的服务,服务器会返回一些数据给客户,或执行客户所需的

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top