软件模型设计基础(3)
作者不祥 来源不祥 http://www.csai.cn 2005年1月2日
重要声明:
对此系列文章,error.cao仅授权www.51CMM.COM.com独家刊登,任何个人或团体不得转载作商业用途。
四.UML的内容详述
基本概念与其他面向对象技术中的基本概念大多相同,因而,UML必然成为这些方法以及其他方法的使用者乐于采用的一种简单一致的建模语言(我已经强调了这个不同于程序设计语言);其次,UML不仅仅是上述方法(BOOCH91,OMT1和OOSE等)的简单汇合,而是在这些方法的基础上广泛征求意见,集众家之长,几经修改而成,UML扩展了现有方法的应用范围;第三,UML是标准的建模语言,而不是标准的开发过程(关于开发过程UML应用迭代过程,由三鼻祖力荐)。尽管UML的应用必然以系统的开发过程为背景,但由于不同的组织和不同的应用领域,需要采取不同的开发过程(但主要适用于迭代式开发,UML三鼻祖在统一开发过程中推荐的)。
下面我们来详细地说明关于UML的结构:
1.UML的事物
1.1结构事物
1.1.1类(Class)
我们学习过C++或者Java(面向对象的语言好象都有,但称谓是否是"类"我还不清楚)的人都知道,该语言中有类的概念。
类的定义是一组具有相同属性、操作、关系和语义的对象描述。
UML的图形表示上,类是一个矩形。
重要说明:UML图形是采用Rose工具画出,然后剪切下来的,对于以后的本书中的一切图形,都是如此而来的。
① 类的名称(Name)
类当然有名称,但也必须有一个名称;名称是一个标记,我们应该记起我们在数学一章中介绍的关于名称如何的标记的,可以是一个字符串也可以是一个数字串或者其他什么标记符号。
一般类有两种表示,一是直接表示,就是类名;一是路径表示,就是类名加路径名。就好象国外人起名字,喜欢加上父亲或爷爷的名字来表示他产生的"路径"。比如用TOMClass来表示一个类,也可以用TOMGranddadClass::TOMFatherClass::TOMClass来表示这个类。
以图示之:
② 类属性(Attribute)
光有类的名称是不完全的,徒其是个空类。
何谓属性?是以被冠名的类(事物的抽象)特性。我们仍然以农场主和羊的例子来说明:
羊的特性:有毛(叫羊毛),有皮(羊皮),有肉(羊肉)…
以此,我们画一个羊的类图:
同样我们也可以在表示属性的同时,给属性加上一些标记或属性的属性。比如说Wool是白色的,Mutton是鲜的,Sheepskin是一种皮革…等,我们可以在属性后附加如此说明。
说一句简单道理,何谓属性?属性就是文章中形容词(如果你老兄文章不识词性?),如果我们要说明一只羊,我们写了一篇文章,该文章有说明文字和被说明的对象,该说明文字就是属性,而被说明的对象有两层东西:操作和关系。
我们先来谈谈操作。
③ 类操作(operation)
何谓操作?操作是一个服务的实现,深了!操作是一个对象的动作行为。若对象的行为被对象实施或实施过或可能实施,该行为就是对象的一项操作。
比如羊的吃草就是一项操作(当然在没有吃草的时候不能算操作,但吃草就是羊操作的一种);羊的产崽也是一项操作(当然公羊不可能实施了,但若为母羊呢?),对于操作,只要群体的部分有其行为,该行为也可以算该对象的一项操作。
以图示之:
我们看见了一个清晰的类,该类由三部分组成:类名、属性和操作。
那么,我们是否理解一个类了?先别问,我们还有一个问题没有解决-关系。我先问一个简单的问题,一个羊它产崽了,那么老羊和小羊有什么关系。从属性和操作上看是"继承"关系。
在羊的产崽的过程,这个继承过程是完全的(在这里我所指的是母羊产了母羊),我们现在讨论的关系是不是老羊和小羊间的母子关系,不是的。具体的关系会被表达成:该类(羊)被销售、让其产崽,被替换(可能养羊不值钱该养牛),被屠杀等,而不是一个羊是一个另一个羊的老妈,但老妈的关系是存在,这个存在关系并不需要我们关心。
如何正确地分析类与类的关系,我们将会在"关联"一段具体分析。
关于类的属性和操作,若完全分析
④ 类职责(Responsibility)
当创建一个类时就声明该类的所有对象具有相同种类的状态和行为。在理解上类的属性和操作正是完成该类的职责的说明或特征。
举例示之:
该WoolClass类负责说明羊毛的颜色、长度、质量和加工方法。
如此就很清楚了,类属性和类操作是负责该类的特性的描述和行为的执行(此时程序编写者就可以拿程序设计中的类和此比较,观察一下细微的区别)。如何说明该类(该问题)就是语义问题。
一般情况是如何表述类的职责的,在类图的矩形框中再加一栏来说明类的职责:
如果想了解更多相关内容请访问:
http://51cmm.csai.cn/OO/No035.htm
posted on 2006-03-14 15:56
it110 阅读(197)
评论(0) 编辑 收藏 引用 所属分类:
面向对象