第8章 面向对象的软件工程 8.1 软件工程的新途径 8.2 面向对象建模 8.3 对象模型 8.4 动态模型 8.5 功能模型.

Slides:



Advertisements
Similar presentations
定 格 入 格 破 格 —— 新诗仿写复习训练 仿照下列句子,再把 “ 人生 ” 比喻成 “ 大海 ”“ 天空 ” , 造两个句子。 如果说人生是一首优美的乐曲,那么痛苦则 是其中一个不可或缺的音符。 参考答案: 1 、如果说人生是一望无际的大海,那么挫折则 是其中一个骤然翻起的浪花。 2 、如果说人生是一片湛蓝的天空,那么失意则.
Advertisements

六大類食物 五穀根莖類 六大類食物 油脂類 蛋魚肉豆類 奶類 蔬菜類 水果類. 五穀根莖類 : 提供熱量 : 部份蛋白質,維生素,礦物質,及膳食纖維 包含麵 ( 及麵包饅頭 ) ,飯類,蕃薯等食物 也就是一般所稱的 " 主食 " ( 蘿蔔不是這一類,是屬於蔬菜類喔! ) 飲食建議吃三到六碗 並推薦攝取全穀類食品.
正確睡午睡精神更好 正確睡午睡 精神更好 可降血壓 增加思考能力 懶懶的冬天加 上星期一又是假日後上班,如果能夠在 中午補個眠,稍微休息一下,對於精神 的提振及下午工作效率都有幫助。但冬 天睡午覺要注意保暖以及水分的補充, 避免受涼或是血液循環不好,造成手或 腿麻痛,注意這些小地方可以讓睡午睡 更健康!
揮別電腦族疲勞症候群 主講人 : 陳潮宗 中醫師. 常有症狀一 起因&症狀: 起因&症狀: 坐姿不正最易引起腰酸背痛、 過度看螢幕則眼睛疲勞酸痛。 治療重點: 治療重點:補固腰腎、明目保睛。
引言 高血壓自我健康管理包含飲食、 運動、 及健康生活型態三大方向。 飲食 是改善高血壓的重要部分, 並提 供飲食方式來改善高血壓。
人事室專題計畫業務報告 人事室 謝明峯 轉 一、專任助理注意事項 計畫案如有聘任專任助理者, 請依據「南 華大學專案助理報到程序單」內容, 將資 料繳交至人事室 ( 請於聘任到職日前繳交, 以免影響到本身權利 ) 。 離職儲金或勞工退休金 依勞工退休金條例相關規定,
山伯與英台在健康書院修業完 成後,一行人逗陣開開心心的 回自己的家鄉 …… 於是開啟了另一段 ~ 新梁祝的故事 ~ 在下 梁山伯 小女子 祝英台 我是 阿成 我是 阿香.
糖尿病的饮食控制 厦门长庚医院张翼翔. 糖尿病 糖尿病的发病率逐年增高 糖尿病的发病率逐年增高 糖尿病对健康和生命的危害 糖尿病对健康和生命的危害 心、脑、肾、神经等 心、脑、肾、神经等 糖尿病的表现和诊断 糖尿病的表现和诊断 糖尿病的治疗 — 终身治疗 糖尿病的治疗 — 终身治疗.
第八章 膳食與營養 第一節 均衡營養與膳食 年 7 月公布新版「每日飲食指南」, 依食物營養特性,分為六大類: 全榖根莖類 蔬菜類水果類 低脂乳品類 油脂與堅果種子類 豆魚肉蛋類 食全十美.
中醫臨床常見養生藥膳 臺 北 市 立 聯 合 醫 院中醫院區 院長 鄭振鴻. 壹、前言 在臺灣地處亞熱帶的氣候,冬季溫暖,夏 季炎熱,雨量多的特性。吃補的概念源自 中國大陸,但生活習性與食物亦有其地域 性,因此針對臺灣常用藥膳的食物與藥物 的性能作用,解析其效用、功能,了解食 物與人的關係,利用食物特性,藥物的效.
青春期 女生可以早在八、九歲, 或晚到十三、四歲才進入 青春期。 男生早的在十、十一歲, 晚到十四、五歲,甚至更 遲才進入青春期。
高職生的早餐飲食習慣之研究 以市立士林高商為例 二年九班 李婷葦 二年九班 卓佳惠 二年九班 郭胤彣 關鍵字:早餐. 飲食習慣. 士林高商.
第八課 路 *課前預習 一 二 三 *題解 *作者介紹 *課文內容 一 、 、 、 *修辭回顧
請愛惜自己 衛生署日前公佈了去年國人的十大 死因統計,惡性腫瘤(癌症)又第 二十度蟬聯冠軍,而且是每四名死 亡人口中,就有一人「因癌而」,
E時代盛宴 健康123年菜發表會 新春新氣象,處於資訊蓬勃E時代的您,是否已構思好如何為自己及家人準備一桌健康、豐盛的年菜?隨著國人健康意識的提升,對年菜訴求也有別於傳統年菜四大特點-高油、高鹽、高糖、低纖,加上其繁瑣的製備過程,對講求速度及效率的E時代族群而言,已不符現今年菜簡單製備、健康需求性。在這距離農曆春節只剩短短二個星期,豐原醫院營養室關心您的健康、滿足您的胃蕾,推出「E時代盛宴-健康123-年菜發表會」,以「一高、二少、三低」的健康原則,利用家中減少烹調油量的鍋具,如:烤箱、電鍋、不沾鍋等,製
生活常規.
<<會計資訊系統課程講義>> 統一塑模語言(UML)語法精要 -- 物件導向概念、需求分析及系統分析
雅樂舞基本動作與身體探索 陳玉秀老師主授 【本著作除另有註明外,採取創用CC「姓名標示-非商業性-相同方式分享」台灣3.0版授權釋出】
嘴破怎麼辦? 嘴角或嘴唇內常常破一小傷口的人, 吃東西時真是痛苦萬分; 有的人試著補充維他命C及B群,
肺臟的藥膳介紹 台中慈濟醫院 中醫部 陳建仲.
第一章 绪论.
位置的表示方法.
說明完後將會有一個小測驗歐! 要認真聽歐!
合理水價之探討 台灣省自來水公司前財務處經理 王禮忠 台灣省自來水公司財務處組長 賴祐.
Ch02物件導向程式設計 物件導向系統分析與設計.
口腔衛生保健 主講者:興中國小 護理師:莊靜華.
花孃心語.
水 生命之源 威海文登中心医院 王倩倩.
認識大腸直腸癌 大腸直腸外科 李元魁醫師.
芳香小物.
健康飲食觀 主講人:蘇麗棗.
兔 子.
請愛惜自己 衛生署日前公佈了去年國人的十大 死因統計,惡性腫瘤(癌症)又第 二十度蟬聯冠軍,而且是每四名死 亡人口中,就有一人「因癌而」,
節能減碳—兒童廢物利用 遊戲闖關活動 設計者—賴姿良 陳俐諭 陳松吉.
301——隆重登场.
牙齒保健常識 胖福2050/12.
第1课 欧洲的君主专制 香山中学 聂渭清.
農委會及其他計畫 執行應注意事項 第四組 涂怡禎 日期:104年10月5、6日.
膀胱過動症 & 間質性膀胱炎 台中榮總/埔里分院 蔡青倍.
嘴破怎麼辦? 嘴角或嘴唇內常常破一小傷口的人, 吃東西時真是痛苦萬分; 有的人試著補充維他命C及B群, 有的人塗抹進口藥膏,
小組成員:洪偉凱 簡子昀 李佳旻 陳泓憲.
延伸課程(專題研習)科美好生活之成長的我
微笑的天空 2008.12.1(星期一)農曆戌子年十一月四日的傍晚天上的金星、木星在上弦月左右相互輝映,形成「微笑的天空 」天文奇景。 「金星、木星伴月」,在空軍官校停機坪的上空微笑著面對著校園裡所有仰望天空的筧橋學子,真是令人難忘!因此,決定將網路詩集的初刊定名為「微笑的天空 」。
別忘了,每天都要…… 實踐8大自然養生法 保持3次排便 至少喝3杯蔬果汁 曬太陽30分鐘
泰式料理食譜 137實餐 謝宏德.
奶 麻.
【本著作除另有註明外,採取創用CC「姓名標示-非商業性-相同方式分享」台灣2.5版授權釋出】
8-5 特別口腔清潔法 (一)目的 1. 為病情較嚴重而無法自行刷牙的案主保持口腔清潔、潮溼與舒適。 2. 避免口腔發生感染情況。
【本著作除另有註明外,採取創用CC「姓名標示-非商業性-相同方式分享」台灣2.5版授權釋出】
第四章 内战与危机 第一节 南京国民政府统治的确立与加强 第二节 中共的武装反抗和土地革命 第三节 日本入侵与局部抗战
軟體工程 -物件導向程式設計與UML系統分析實作
第9章 面向对象方法学引论 9.1 面向对象方法学概述 9.2 面向对象的概念 9.3 面向对象建模 9.4 对象模型 9.5 动态模型
一年三班 我 愛 早 讀 102/11/11.
狗狗宝典 (全新版) 汪汪出版社.
西餐烹調 香蒜白酒海瓜子麵 焦糖布丁.
第16章 VB.NET物件導向與.NET Framework
物件導向系統分析與設計與UML.
Java软件设计基础 5. 继承与多态.
C++ 與 物件導向 程式設計概念簡介 魏天君 2018/12/3.
两种不同类别的软件: 功能预定义软件;用户驱动的软件。他们对软件工程方法有不同的需求
排列组合 1. 两个基本原理 分类加法计数原理 分步乘法计数原理.
第 5 單元:法規的種類與位階關係(二) 1 【本著作除另有註明外,採取創用CC「姓名標示-非商業性-相同方式分享」台灣3.0版授權釋出】
第三节 常见天气系统.
國立勤益科技大學 105學年度新進教師輔導講習 總務處業務簡報 報告人:鄭文達總務長 105年9月6日.
第一讲 面向对象方法学与信息系统建模.
臺灣當代小說與電影 授課教師:宋千儀 老師 【本著作除另有註明外,採取創用CC「姓名標示-非商業性-相同方式分享」台灣2.5版授權釋出】
网校温州中学 关于显性基因与隐性基因 ——
面向对象建模 对象(object) 对象具有的含义: 现实世界中某个具体的物理实体或概念在计算机逻辑中的映射和体现。 在现实世界中:
面向对象程序设计 C++教程 西安工业大学 于帆.
黴飛色舞 組別:應用科學 組員:李悅慈、戴敬芳、楊佳琳 指導老師 :盧惠鶴老師 繳交報告日期:93/8/27 研究日期:93年8月9日.
Presentation transcript:

第8章 面向对象的软件工程 8.1 软件工程的新途径 8.2 面向对象建模 8.3 对象模型 8.4 动态模型 8.5 功能模型

8.1 软件工程的新途径 8.1.1 面向对象的思想 在前面,我们介绍了传统的软件工程方法,这部分我们将要介绍一种新方法。20世纪70年代末,面向对象方法学的一些基本概念已在系统工程领域内萌发了出来,如对于系统中的某个模块或构件,可表示为问题空间的一个对象或一类对象。到了20世纪80年代,面向对象的程序设计方法得到了很快的发展,并显示出其强大的生命力,因此使面向对象技术在系统工程、计算机、人工智能等领域得到了广泛的应用。在更高的层次上、更广泛的领域内开展面向对象技术的热点研究是在20世纪90年代,到目前,这种技术已得到了广泛的应用,面向对象方法已成为软件工程的一种新途径。面向对象可以表示为 面向对象(OO,Object Oriented)= 对象+类+继承+通信

面向对象的基本思想是将一个实际问题看成是一个对象或几个对象的集合。面向对象分析过程是在系统所要求解的问题中找出对象(属性和行为)以及它所属的类,并定义对象与类;面向对象设计是把系统所要求解的问题分解为一些对象及对象间传递消息的过程;面向对象实现是把数据和出路数据的过程结合为一个对象。对象既可以像数据一样被处理,又可以像过程一样被描述处理的流程和细节。总之,面向对象分析到面向对象设计再到面向对象实现(即OOA→OOD→OOI)不用转换。

8.1.2 面向对象的基本概念 1. 对象(Object) 我们把客观世界的实体称之为问题空间(问题域)的对象。 例如, 一个人可以是一个对象,一条信息可以是一个对象,一本书可以是一个对象,一家图书馆也可以是一个对象。可见,对象是以初始的对象为基本元素,经过层层组合而成的。因此,整个客观世界可认为是一个最复杂的对象。

对象是一个由信息及有关对它进行处理的描述所组成的包。在面向对象的程序设计中,“对象”是系统中的基本运行实体,也就是说,“对象”是具有特殊属性(数据)和行为方式(方法)的实体。对象的特殊属性就确定了给定时刻对象的状态,用数据值来描述它的状态,例如,用学号、姓名、性别、年龄和专业等数据值描述一个学生对象的状态。与每一个对象相关的方法定义了该对象上的操作,例如,学生信息登记、学生专业查询等方法定义了学生对象的操作。因此,对象是数据和操作的封装体,如图8.1所示。

图8.1 对象

2. 类(Class) 1) 类的概念 类是对一个或几个相似对象的描述。类是具有相同(或相似)属性和操作的对象的集合,类是对象的抽象,而对象是类的具体化。换句话说,类是对象的模板,而对象是类的实例(Instance)。

类是一个抽象数据类型的实现,它定义的是一种对象类型,它描述了属于该类型的所有对象的性质。例如,Integer是一个类,它描述了所有整数的性质(包括整数的算术运算和大小比较的实现),“2”、“3”和“5”等这些具体整数都是Integer这个类的对象,都具备算术运算和大小比较的处理能力。所以说,类具有属性,它是对象的状态的抽象,用数据结构来描述类的属性;类具有操作,它是对象的行为的抽象,用操作名和实现该操作的方法来描述类的操作。 对象是在执行过程中由其所属的类动态创建的,一个类可以创建多个不同的对象。类中的所有数据是私有的,该数据必须通过类的公共接口(成员函数)来访问。

2) 类的层次 一个类的上层可以有超类(Superclass),下层可以有子类(Subclass),形成一种层次结构。超类也称基类,子类也称派生类。这种类之间的结构关系主要有两种:一般与特殊结构关系和整体与部分结构关系。 一般与特殊结构关系又称为分类结构关系,也就是“is a”关系。例如,飞机和交通工具都是类,它们之间的关系是“is a”关系,飞机是一种特殊的交通工具。通常,越上层的类越具有一般性和共性,越下层的类越特殊、越具体。现实世界中的一般化的抽象关系用类的这种结构关系来描述。

整体与部分结构关系称为组装结构关系,也就是“has a”关系。例如,飞机和发动机都是类,它们之间的关系是“has a”关系,发动机是飞机的一部分。通常,上层的类具有整体性,下层的类具有部分性、成员性。现实世界中的组成的抽象关系用类的这种结构关系来描述。

3. 消息和方法(Message and Method) 消息用来请求对象执行某一处理或回答某些信息的要求。对象间的通信是通过消息传递来实现的。消息传递是对象间的一种通信机制。某一对象在执行相应的处理时,如果需要,它可以通过传递消息请求其他对象完成某些处理工作或回答某些信息;其他对象在执行所要求的处理活动时,同样可以通过消息传递与别的对象通信。因此,在面向对象程序设计中,程序的执行是靠在对象间传递消息来完成的,如图8.2所示。

图8.2 消息传递

发送消息的对象称为发送者,接收消息的对象称为接收者。消息中只包含发送者的要求,它告诉接收者需要完成哪些处理,但并不指示接收者应该怎样完成这些处理。消息完全由接收者解释,接收者独立决定采用什么方式完成所需的处理。发送一条消息必须包含接收者的对象名、发送给该对象的消息名(即对象名.方法名)以及传递消息的参数说明等。参数可以是接收者的局部变量或所有对象都使用的全局变量。 方法是类中操作的实现过程。一个方法包含方法名、参数和方法体。当一个对象接收到一条消息后,它所包含的方法决定对象该做怎样的处理。对象的内部信息是隐蔽的(私有的),对象间只能通过消息来连接,而对象私有的数据是用它的方法访问的。

4. 继承性(Inheritance) 继承性是共享类、子类和对象中的方法和数据的机制。当类A不但具有类B的属性,而且还具有自己的独特属性时,这时称类A继承了类B,继承关系常称“即是”(is a)关系。 当类A继承类B时(如图8.3所示),就表明类A是类B的子类,而类B是类A的超类。子类A由两部分组成:继承部分和增加部分。继承部分是从B继承来的,增加部分是专为A编写的新代码。

继承具有传递性。类的层次结构的一个重要特点是继承性。一个类(直接)继承其超类的全部描述。这种继承具有传递性,即如果C1继承C2,C2继承C3,则C1(间接)继承C3。所以,一个类实际上继承了层次结构中在其上面的所有类的全部描述。因此,属于某个类的对象除具有该类所描述的特性外,还具有层次结构中该类上面所有类描述的全部特性。 继承分为单重继承和多重继承两类。在类的层次结构中,一个类可以有多个子类,也可以有多个超类。如果一个类至多只能有一个超类,则一个类至多只能直接继承一个类,这种继承方式称为单重或简单继承(Single Inheritance),如图8.3所示。简单继承是树型结构。如果一个类可以直接继承多个类,这种继承方式称为多重继承(Multiple Inheritance),如图8.4所示。多重继承是网状结构。

图8.3 简单继承

图8.4 多重继承

5. 封装性(Encapsulation) 封装是面向对象的一个重要概念。封装是一种信息隐蔽技术,用户只能见到对象封装界面上的信息,对象内部对用户是隐蔽的。也就是说,用户只知道某对象是“做什么”的,不知道“怎么做”。封装将外部接口与内部实现分离开来,用户不必知道行为实现的细节,只须用消息来访问该对象。 封装体现了良好的模块性,它将定义模块和实现模块分开。封装使对象的内部软件的范围有清楚边界,有一个描述该对象和其他的对象之间通信的接口;使得模快内部的数据受到很好的保护,避免外部的干扰。封装大大增强了软件的维护性、修改性,这也是软件技术追求的目标。

6. 多态性(Polymorphism) 当同样的消息可以被送到一个父类的对象和它的子类的对象上时,被称作多态性。也就是说,在类等级的不同层次中可以共享(公用)一个行为(方法)的名字,然而,不同层次中的每个类却各自按自己的需要来实现这个行为,并得到不同的结果。同一个操作(方法)、函数或过程可以用不同类型的参数调用实现不同的结果。多态即一个名字可具有多种语义。在面向对象的语言中,都有实现多态性的机制,可允许每个对象以自己的解释方式来响应共同的消息。多态性机制不仅增加了面向对象软件系统的灵活性、可理解性和可维护性,进一步减少了信息冗余,而且显著提高了软件的可重用性和可扩充性。

在面向对象系统中,对象封装了方法,恰好要利用如重名、重定义让各对象以自己的解释方式去执行,而且这种多义性决不会带来混乱,这就是对象的多态性。因为,这些工作不需要涉及具体的数据结构和类型,只是着重于揭示系统的逻辑合理性。这对于需求分析、模型设计极为有利。

8.2 面向对象建模 1. 建模与模型 建模是问题域中定义软件解的一种方法。系统开发中,要解决一个实际问题,也就是求该问题的软件解。在解决问题之前,必须首先理解所要解决的问题,其次才是求解。只有对问题理解透彻了,才能解决它。这时我们可以借助于建模的方法来理解问题并解决问题。建模将问题域的解定义成一种模型,以帮助系统分析人员更好地理解问题。

模型是为了理解问题而对问题作出的一种抽象,而且是对问题的一种无歧义的描述。模型由一组图示符号和组织这些符号的规则组成,利用它们来定义和描述问题域中的术语和概念。或者说,模型是一种思考工具,利用它可以把问题的解规范地表示出来,帮助我们思考问题、定义术语和选择术语以理解问题。

建模的目的主要是为了减少复杂性。在开发复杂的软件系统时,系统分析员应该从不同角度抽象出目标系统的特性。使用精确的表示方法构造系统的模型,验证模型是否满足用户对目标系统的需求,并在设计过程中逐渐把和实现有关的细节加进模型中,直至最终用程序实现模型。对于那些特别复杂而不能直接理解的系统,更需要建立模型,把复杂的系统分解成若干个子系统、子部分,从而降低系统的复杂程度。

当系统分析员面对复杂的系统束手无策时,建模是一种有效的方法,模型是一种有效的机制。 建立模型后,需要经受用户和各个领域专家的严格评审。审查是为了发现错误和找出目标系统中冗余的需求。然后,清除错误,剔除冗余的需求,挖掘潜在的需求,通过多次修改逐步优化模型,促使软件开发人员透彻地理解问题,从而为软件设计奠定坚实的基础。

2. 面向对象模型 面向对象建模是用面向对象技术和方法来定义、描述问题域中的软件解的。对问题域的理解,同样也是面向对象方法开发软件的关键。面向对象方法最基本的原则,是按照人们习惯的思维方式,用面向对象观点建立问题域的模型,开发出尽可能自然地表现求解方法的软件。

用面向对象方法开发软件,通常需要建立对象模型、动态模型和功能模型三种模型。对象模型是描述系统数据结构的,它始终都是目标系统中最关键、最基本、最核心的;动态模型是描述系统控制结构的;功能模型是描述系统功能的。数据、控制和操作等是这三种模型都涉及到的共同概念,只不过是各自描述的侧重点不同罢了。一个典型的软件系统应包含数据结构(对象模型)、执行操作(动态模型)和完成数据值的变化(功能模型)。这三种模型从不同但又密切相关的角度模拟目标系统,它们各自从不同侧面反映了系统的实质性内容,综合起来则全面地反映了对目标系统的要求。

用面向对象方法开发软件,在整个开发过程中,三种模型逐步发展、完善。在面向对象分析过程中,构造出完全独立于实现的应用域模型;在面向对象设计过程中,把求解域的结构逐渐加入到模型中;在实现阶段,把应用域和求解域的结构都编成程序代码并进行严格的测试验证。对于大系统来说,建立上述三种模型有助于全面地理解问题域。这三种模型的相对重要程度在不同的应用问题中会有所不同。

8.3 对 象 模 型 对象模型描述了系统的数据结构,它是三个模型的最关键的一个模型。对象模型的作用是描述系统的静态结构,包括构成系统的类和对象、它们的属性和操作,以及它们之间的联系。面向对象方法是以对象为基础来构造系统,而不是以功能为基础来构造系统的。对象模型为建立动态模型和功能模型提供了实质性的框架。对象模型是基础,动态模型和功能模型在此基础上创建。也就是说,一个系统只有创建了对象模型,才能创建动态模型和功能模型。

在建立对象模型时,我们的目标是从问题域中提炼出对目标系统有价值的概念。 用面向对象方法开发软件时,与结构化分析和结构化设计方法不同,各个开发阶段使用的表示方法都是相同的,从前一个阶段到后一个阶段只是做些检查、细化和充实。 对象模型的图形符号表示法以及规定组织这些符号的语义规则,即类、对象(类实例)、继承关系、类和(或)对象间其他关系等符号,目前的表示法不统一。面向对象方法学的著名专家,如Grady Booch,Peter Coad&Ed Yourhon,James Rurnbaugh,Sally Shlaer等人,都提出了自己的表示方法。这些表示方法虽然形式各异,但是,它们有一个共同的特点,那就是独立于具体的开发模式。本书使用Peter Coad&Ed Yourhon的表示方法。

8.3.1 类-&-对象的表示符号 1. 类-&-对象 “类-&-对象”是一个专用术语,它代表一个类和该类的对象。表示类-&-对象的图形符号见图8.5(a),类-&-对象符号的变种是类符号,表示类的图形符号见图8.5(b)。 图8.5 类-&-对象和类的图形符号

类符号用一个矩形框表示,由三部分组成,上部分是类的名字,中间部分是该类内定义的属性,下面部分是该类提供的服务,即方法。类-&-对象符号用类符号外面再加一个虚线框表示,虚线框代表属于该类的对象。 一般情况下,类内定义的属性和服务不需写出来,只需在一个矩形框内写上类名代表该类。

2. 命名 类名是一类对象的名字。命名是否恰当直接影响系统的可理解性。应该使用名词或名词短语命名,例如,图书、课程、公司职员等;尽可能使用专业术语,例如,外部设备、服务台、信号灯等。一般地,应该使用在应用领域中人们习惯的专业术语作为类名,而且含义明确。不要太随便,或刻意创造;名字应该是无歧义性的、简洁的、而且具有描述性的。

8.3.2 结构的表示符号 结构是一种思维组织的方式,但在面向对象分析与面向对象设计中,结构是问题域复杂关系的表示,它与系统的任务直接相关,目标系统的任务决定了系统的结构。通常,结构分为一般-特殊结构和整体-部分结构两类。这两种类型的结构均是面向对象分析与面向对象设计方法的重要组成部分。

1. 一般 - 特殊结构 1) 一般 - 特殊结构的概念 一般 - 特殊结构也称分类结构(或归纳结构),它是一个类与它的子类之间的分类关系。高层类(即基类)说明一般性的属性,低层类(即派生类)说明特殊属性。低层类对象“即是(is a)”高层类对象的某种特殊情况,它继承了在高层类中定义的属性和服务。换句话说,一般-特殊关系具有继承性,一般类和对象的属性和方法被定义后,即可在特殊类和对象中使用。

2) 一般 - 特殊关系表示法 一般 - 特殊关系表示法为:顶部是一个一般类,下部是若干个特殊类,它们之间用线和半圆型标记连接;半圆型的标记表明图形是一般 - 特殊关系,这种表示法是有向的,从半圆中心画一条线所指到的是特殊类。一般来说,一般类总是放在上部,而特殊类放在下部,这种表示法便于理解模型。一般类与特殊类之间的连线端点应连接到类(而不是对象),这个端点位置表明是类之间的关系,如图8.6所示。

图8.6 一般 - 特殊关系表示法

3) 实例 图8.7是一般 - 特殊关系的例子。在有关于人员的管理系统中,可以将人员定义成一般类,将教师和学生定义成人员的特殊类。它们之间构成一般 - 特殊关系,这种表示法构成了一般 - 特殊结构。

图8.7 一般 - 特殊关系实例

2. 整体 - 部分结构 1) 整体 - 部分结构的概念 整体 - 部分结构也称组装结构(聚集结构),它反映了对象之间的构成关系。整体 - 部分关系是人类思维的基本方法之一。在面向对象分析中,它还能将具有特殊的整体 - 部分关系的类-&-对象组织到一起。它对于在问题域和系统任务的边界区域中识别类-&-对象是非常有用的。

2) 整体 - 部分关系表示法 整体 - 部分关系表示法为:在顶部是一个整体对象(用类-&-对象符号表示的对象),下部是组成该整体的若干个部分对象(用类-&-对象符号表示的对象),它们之间用线与三角标记(结构线)连接。三角标记表明这是整体 - 部分关系,而且是有向的。通常,把整体对象画在图的上部而把部分对象放在下部,这样布置有助于使模型容易理解。整体可有多个不同种类的部分。整体 - 部分关系线的终点位置是外框上,反映了对象之间(而不是类之间)的映射关系。整体 - 部分结构线的每一端都标有一个数量或数量的区域,它表示该整体可以拥有的部分数,反之,表示该部分可以拥有的整体数(当数量为1时可省略),详见图8.8。

图8.8 整体 - 部分关系表示法

3) 约束 我们把反映对象之间映射关系中,相互拥有的数量叫约束,即约束是整体与部分相互拥有的数。整体约束部分叫多重性,部分约束整体叫参与性。

4) 实例 图8.9是整体 - 部分关系的例子。一台微机由主机、显示器组成,主机又由主板、CPU、显卡、硬盘等组成。该图描绘一台微机结构的聚集树,聚集树是多级整体 - 部分结构的一种简化表示形式。也就是说,如果A是B的一部分,B是C的一部分,则A也是C的一部分,这种性质称传递性。传递性是整体 - 部分关系的一个最重要的性质。

图8.9 整体 - 部分关系实例

8.3.3 主题 1. 主题的概念 主题是一种指导开发者或用户研究大型复杂模型的一种机制。主题又是一种手段,主题有助于分解大型项目以便分组承担任务。它还可以给出面向对象分析和设计的模型总体概貌。 主题所依据的原理是整体 - 部分关系的扩充。一个系统模型可以包含多个主题,也就是说,主题是整个问题域和系统任务的一部分,是用来同整个问题域和系统任务(总体)进行通信的部分。

2. 主题的表示法 主题的表示形式有两种:简单表示形式和扩展表示形式。简单表示形式如图8.10所示,只标出主题名和编号;扩展表示形式如图8.11所示,除了标出主题名和编号外,还要标出主题所包含的类。

图8.10 主题简单表示法

图8.11 主题扩展表示法

8.3.4 关联与链属性 1. 属性 属性是用来描述类-&-对象的特性的。一个属性是一个数据项(状态信息),类中对象都有相应的值(状态)。每个类-&-对象都由属性描述,而属性则按照类-&-对象的规范来描述。属性放在类-&-对象表示符号的中间部位。

2. 关联关系 1) 关联的概念 关联关系反映对象之间相互依赖、相互作用的关系。一个关联关系就是一个问题域映射模型,该模型反映了某个对象对其他对象的需求。关联关系反映了对象之间的静态关系,是二元关系。

2) 关联的表示 关联用两个对象之间的实线来表示。该线的端点位置表明该关联是对象而不是实例之间的映射关系。关联关系分为一对一(1:1)、一对多(1:m)和多对多(m:n)等三种基本类型,类型的划分主要依据参与关联的对象的数目。例如,一个学校有一个校长,学校与校长是一对一的关系;一个教师教许多学生,教师与学生是一对多的关系(关联的表示如图8.12所示);一个学生可选修多门课程,一门课程可被多个学生选修,学生与课程是多对多的关系。

图8.12 教师与学生之间关联关系

3) 阶数 对象的每条关联关系上均标有数字(m)或者范围(m,n),它说明了该对象对其他对象的约束。该数字或范围表明可能发生的映射数目或范围。如:“○”表示零个或一个,“●”表示零个或多个,“1+”表示一个或多个,“1,3”(1~3)表示该范围的上下限。固定数目的连接可使用单个数字来表示,图8.12与图8.13是两个实例。

图8.13 一个商场有零个或多个职员关联

4) 链属性 链属性就是关联链的性质。例如,学生与课程之间存在着多对多的关系,但是,每个学生对不同课程拥有不同的选课方式,学生与课程之间的关联链的属性就是选课方式(链属性)。链属性的表示方法如图8.14所示。

图8.14 链属性的表示方法

5) 受限关联 两个对象加上一个限定词称为受限关联。限定词是一种特殊的链属性。利用限定词通常能有效地减少关联的阶数。 例如,某一个学校内的一个系(院)有许多教职工,一个教职工仅属于一个系(院),在一个系(院)内,职工号确定了惟一一个教职工。利用限定词“职工号”表示了系(院)与教职工之间的关系,可见,利用限定词把一对多关系可以简化成一对一关系,如图8.15所示。

由于系(院)加职工号可惟一地确定一个教职工,因此,限定词“职工号”应该放在靠近系(院)对象的那一端。限定提高了语义精确性,增强了查询能力。在图8.15中,限定的语法表明,职工号在其系(院)内是惟一的。因此,查找一个教职工的方法就是,首先查找所需系(院),然后在该系(院)内查找指定的教职工。

图8.15 受限关联表示方法

8.3.5 服务与消息连接 1. 服务 服务是指某个对象所具有的特定的行为,一个服务就是收到一条消息之后所执行的处理。服务放在类-&-对象表示符号的下部。

2. 消息连接的概念 消息是对象之间传送的信息,消息连接是指一个对象到另一个对象的映射。消息的连接,反映了一个对象对另一个对象的处理依赖关系。该关系表明,一个对象为了完成自己的任务,需要借助于另一个对象提供的服务时,发送(发送者)一个消息给另一个对象(接收者),接收者接收到消息,经过处理后,将结果反馈给发送者。消息连接反映了对象之间的动态关系。

3. 消息连接的表示 消息连接可以用一个带有箭头的实线来表示。箭头从发送者指向接收者。箭头的每一端通常都连接到一个对象(或偶尔到一个类),以表明实际的参加者,如图8.16所示。 图8.16 消息连接的表示

8.3.6 对象模型举例 对象模型把面向对象的概念(对象、类、继承等)与传统方法中常用的数据建模概念结合了起来,从而改进和拓展了普通的数据模型,增强了模型的可理解性和表达能力。 图8.17是一个图书借阅管理的对象模型,它表明该公司有许多名职员为之工作,职员又进一步划分为馆长和管理员两类;馆长可对图书借阅工作进行管理,每名管理员可管理多本图书,每本图书可由多名管理员管理;图书拥有许多读者,借书证号惟一地确定一个读者;读者又可分为教师和学生两类,每名教师或学生可以借阅数本图书,每一种图书可供多名教师或学生借阅。这个对象模型描述了类-&-对象所具有的属性,以及类-&-对象提供的服务。

图8.17 图书借阅管理的对象模型

8.4 动 态 模 型 动态模型表示瞬时的、行为化的系统的控制性质,它描述了系统的控制结构。动态模型考察在任何时刻对象及其联系的改变,从对象的事件和状态的角度出发,表现对象的相互行为,规定对象模型中对象的合法变化序列。

动态模型侧重于系统的控制逻辑,它包括状态图和事件追踪图。状态图用来描绘对象的状态、触发状态转换的事件以及对象的行为(对事件的响应);事件追踪图侧重于说明发生于系统执行过程中的一个事件序列。 动态模型由多个状态图组成。每个类的动态行为用一张状态图来描绘,各个类的状态图通过共享事件组合起来,从而构成系统的动态模型。也就是说,动态模型是基于事件共享而互相关联的一组状态图的集合。

1. 事件 1) 事件的概念 事件是某个特定时刻所发生的事情,是某事物发生的信息,它使对象从一种状态转换到另一种状态。事件没有持续时间,是瞬间完成的。 事件就是引起对象状态转换的控制信息。模型中,各对象之间相互触发,一个触发行为称作一个事件。对象对事件的响应,取决于接收该触发的对象当时所处的状态,响应包括改变自己的状态或者又形成一个新的触发行为。

事件从一个对象向另一个对象传送信息。这种信息传送可视为单向传送。发送事件的对象可能期望对方答复,被此事件触发的对象,可以发送答复事件也可以不发送答复事件。如果发送答复事件,该答复事件也是受被触发对象所控制的一个独立事件。

2) 事件类 事件类由各个独立事件的共同结构和行为抽象组成。有些事件类可能传送的是简单的“要发生某事件”的信息,而其他事件类则可能传送的是数据值。由事件传送的数据值叫属性。属性可以在事件类名之后用括号列出,如表8.1所示。 表8.1 事件类的属性描述 事 件 类 属 性 描 述 列车出发 按下鼠标按钮 数字拨号 线路、班次、城市 按钮、位置 数字 列车出发(线路、班次、城市) 按下鼠标按钮(按钮、位置) 数字拨号(数字)

2. 状态 1) 状态的概念 状态是对对象属性值的一种抽象。也就是说,对象所具有的属性值称为对象的状态。状态是影响对象的重要行为的体现,状态表明了对象对输入事件的响应。各对象之间相互触发(即作用),就形成了一系列的状态变化。

2) 状态的特性 状态具有时间性。事件表示时刻,状态代表时间间隔。一个对象在接收事件前后是两个不同的状态,换句话说,同一个对象,在接收两个事件之间是一个状态。状态依赖于接收的事件序列。 状态具有持续性,需要一段时间间隔表示一个状态。状态与连续的活动有关,这些活动需要一定的时间才能完成。状态与事件相互依赖,一个事件可将两个状态分开,一个状态可将两个事件隔开。

3. 行为 行为是指被事件触发的对象达到某种状态时,所做的一系列处理操作。这些操作是需要耗费一定时间的。

4. 脚本 脚本也叫场景(Scenarios)。脚本是指系统在某一执行期间内出现的一系列事件。脚本通常起始于一个系统外部的输入事件,结束于一个系统外部的输出事件。脚本可以包括系统中所有事件,也可以只包括某些对象触发或产生的事件。 表8.2给出使用电话的脚本,该脚本包括影响电话线的事件:

表8.2 使用电话的脚本 编号 事 件 1 呼叫者拿起电话 10 呼叫者拨号(4) 2 响拨号声 11 电话鸣响声 3 呼叫者拨电话号码(2) 12 接收者拿起电话 4 拨号声停 13 停鸣响声 5 呼叫者拨号(3) 14 电话接通 6 15 通电话 7 呼叫者拨号(6) 16 接收者挂断电话 8 17 电话中断 9 呼叫者拨号(5) 18 呼叫者挂断电话

5. 事件追踪图 1) 事件追踪图的概念 事件追踪图侧重于描述发生于系统执行过程中的一个特定“场景”(脚本),是完成系统某个功能的一个事件序列。 写好脚本后,需要确定事件追踪,即确定在对象之间传送信息的各个事件。即首先标识每个事件的发送者对象和接收者对象,然后,用事件追踪图按事件序列顺序,来表示事件、事件的发送者对象和事件的接收者对象。

2) 事件追踪图的画法 事件追踪图中,用竖线表示对象,带箭头的横线表示事件,箭头从发送者对象指向接收者对象。时间自上向下延续,与间隔的空间无关,没有精确的时序,请参见图8.18。

图8.18 打电话事件追踪图

6. 状态图 1) 状态图的概念 状态图是一个状态与事件的网络,它侧重于描述每一类对象的动态行为。状态是某一时刻中属性特征的概括,而状态转换则表示这一类对象在何时,对系统内外发生的哪些事件作出何种响应。

2) 状态图的画法 用圆形框或椭圆框表示状态,框内可标上状态名也可以不给状态命名,行为在框内用关键字do(后接冒号)标明。用箭头线表示从一个状态到另一个状态的转换,附加在箭头线上的短语标明触发此状态转换的事件名,如图8.19所示。有些事件是简单事件(如图中“事件A”),而有些事件则是条件事件(如“事件B[条件]”),此时,必须在事件名后面加一个方括号内写上状态转换的条件。条件事件当条件满足时,该事件的发生才能引起状态的转换。用实心圆表示初始状态,用一对同心圆表示最终状态。 状态图描述一个对象的个体行为,而事件追踪图则描述多个对象所表现出来的集体行为。它们从不同的角度说明同一系统行为,因此,必然存在着密切的内在联系。

图8.19 状态图

8.5 功 能 模 型 1. 功能模型概念 功能模型由多个数据流图组成。它表明了从外部输入,通过操作和内部存储,直到外部输出的整个的数据流情况,它还包括了对象模型内部数据间的限制。但数据流图不指出控制或对象的结构信息,它们在动态模型和对象模型中已描述。在面向对象方法学中,数据流图不像在结构化方法中那样重要。但是,建立功能模型有助于软件开发人员更深入地理解问题域,改进和完善自己的设计。

2. 三种模型之间的关系 面向对象建模技术的三种模型,分别从三个不同侧面描述了所要开发的系统。这三种模型相互补充、相互配合,使得我们对系统的认识更加全面。功能模型定义了系统应该“做什么”;动态模型明确定义了“何时做”(即在何种状态下接受了什么事件的触发);对象模型则定义了“对谁做”。 对象模型是最基本、最重要的,动态模型和功能模型的建立是以对象模型为基础的。对象模型侧重于描述系统数据结构;动态模型侧重于描述系统控制结构,它由多个状态图组成;功能模型侧重于描述系统功能(系统内部数据的传送和处理),它由多个数据流图组成。三种模型都包含了数据、控制和操作等共同概念,只是各自描述的侧重程度不同。