• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
    • 軟件測試技術
    • 軟件測試博客
    • 軟件測試視頻
    • 開源軟件測試技術
    • 軟件測試論壇
    • 軟件測試沙龍
    • 軟件測試資料下載
    • 軟件測試雜志
    • 軟件測試人才招聘
      暫時沒有公告

    字號: | 推薦給好友 上一篇 | 下一篇

    第七章 類圖

    發布: 2007-5-25 11:35 | 作者: 21newtimes@163.net | 來源: 互連網 | 查看: 46次 | 進入軟件測試論壇討論

    領測軟件測試網

    前言

        類圖是在面向對象的系統模型中使用得最普遍的圖。類圖包含了一組類、接口和協作以及他們之間的關系。

        你使用類圖來為系統的靜態視圖建模。通常這包括模型化系統的詞匯(從系統的詞匯表中發現類),模型化協作,或則模型化模式。類圖還是一些相關的圖的基礎,包括組件圖、分布圖。

        類圖的重要性不僅僅體現在為系統建立可視化的、文檔化的結構模型,同樣重要的是構建通過正向和反向工程建立執行系統。

     

    術語和概念

    類圖:類圖是一組類、接口和協作以及他們之間的關系構成的。

    類圖通常包含如下的內容:

    MILY: Wingdings">l        

    l         接口

    l         協作

    l         依賴關系、繼承關系、關聯關系

    同其他的圖一樣,類圖也可以包含注解和限制。

    類圖中也可以包含包和子系統,這兩者用來將元素分組。有時后你也可以將類的實例放到類圖中。

     注:組件圖和分布圖和類圖類似,雖然他們不包含類而是分別包含組件和節點。

     

    你通常通過下面三種方式使用類圖:

    1,為系統詞匯建模型

    為系統的詞匯建模實際上是從詞匯表中發現類,發現它的責任。

    2,模型化簡單的協作

    協作是指一些類、接口和其他的元素一起工作提供一些合作的行為,這些行為不是簡單地將元素加能得到的。例如:當你為一個分布式的系統中的事務處理過程建模型時,你不可能只通過一個類來明白事務是怎樣進行的,事實上這個過程的執行涉及到一系列的類的協同工作。使用類圖來可視化這些類和他們的關系。

    3,模型化一個邏輯數據庫模式

    想象模式是概念上設計數據庫的藍圖。在很多領域,你將想保存持久性數據到關系數據庫活面向對象的數據庫。你可以用類圖為這些數據庫模式建立模型。

     

    通用建模技術

        沒有類是單獨存在的,他們通常和別的類協作,創造比單獨工作更大的語義。因此,除了捕獲系統的詞匯以外,還要將注意力集中到這些類是如何在一起工作的。使用類圖來表達這種協作。

    l         確定你建模的機制。機制代表了部分你建模的系統的一些功能和行為,這些功能和行為是一組類、接口和其他事物相互作用的結果。

    l         對于每個機制,確定類、接口和其他的參與這個協作的協作。同時確定這些事物之間的關系。

    l         用場景來預排這些事物,沿著這條路你將發現模型中忽略的部分和定義錯誤的部分。

    l         確定用這些事物的內容來填充它們。對于類,開始于獲得一個責任(類的職責),然后,將它轉化為具體的屬性和方法。

    7-1 模型化簡單的協作

     

    7-1是一個自治機器人的類圖。這張的圖焦點聚集那些讓機器人在路上行走的機制對應的類上。你可以發現一個虛類Motor和兩個從它派生出來的類:SteeringMotorMainMotor。這兩個類都從它的父親Motor繼承了五個方法。這兩個類又是另一個類Driver的一部分。類PathAgentDriver有一個11的關系,和CollisionSensor1n的關系。

        在這個系統中其實還有很多其他的類,但這張圖的重點是放在那些將機器人移動的類上的。在其他的圖中你可能也會看到這些類。通過將焦點放在不通的功能上,可以獲得從不通的角度對整個系統的認識,最終達到認識整個系統。

     

        很多系統都是有持久性數據的,也就是說要將這些數據保存到數據庫中以便下一次使用。通常你會使用關系型數據庫或面向對象的數據庫,或其它類型的數據庫來保存數據。UML很適合為邏輯數據庫模式建模。

     

        UML的類圖是E-R圖(為邏輯數據庫建模的通用工具)的超集,盡管E-R圖的重點是數據,類圖的擴展允許模型化行為。在物理數據庫中這些邏輯操作一半轉化為觸發器或存儲過程。

     

             確定那些狀態比其生命周期要長的類。

             創建一張包含這些類的圖,標記它們為持久性的。

             詳細定義它們的屬性。

             對于使得物理數據庫設計復雜的模式如:循環關系、11關系、N元關系,考慮創建中間抽象來使得邏輯結構復雜。

             詳細定義這些類的操作,特別是那些訪問數據和涉及數據完整性的方法。

             如果可能的話使用工具來將你的邏輯設計轉化為物理設計。

     

    7-2 模式建模

     

        建模是重要的,但要記住的是對于開發組來說軟件才是主要的產品,而不是圖。當然,畫圖的主要目的是為了更好地理解系統,預測什么時候可以提供什么樣的軟件來滿足用戶的需要;谶@個理由,讓你畫的圖對開發有指導意義是很重要的。

     

        某些時候,使用UML。你的模型并不能直接映射成為代碼。例如,如果你在使用活動圖為一個商業過程建模,很多活動實際上涉及人而不是計算機。

     

        很多時候,你創建的圖形可以被映射成為代碼。UML并不是專門為面向對象的語言設計的,它支持多種語言,但使用面向對象的語言會更直觀些,特別是類圖的映射,它的內容可以直接映射成為面向對象語言的內容。如:C++,SMALLTALK、ADA、ObjectPascal、EiffelForte。UML還支持如Visual Basic這樣的面向對象的語言。

     

        正向工程:是從圖到代碼的過程。通過對某中特定語言的映射可以從UML的圖得到該語言的代碼。正向工程會丟失信息,這是因為UML比任何一種程序語言的語義都豐富。這也正是為什么你需要UML模型的原因。結構特性、協作、交互等可以通過UML直觀地表達出來,使用代碼就不是那么明顯了。

     

    對類圖的正向工程:

             選擇將圖形映射到哪一種程序語言。

             根據你選擇的語言的語義,你可能要對使用某寫UML的特性加以限制。例如:UML允許你使用多重繼承,而SmallTalk只允許一重繼承。

             使用標記值來指定比的目的語言。你可以在類級進行也可以在協作或包的層次上進行。

             使用工具來對你的模型進行正向工程。

     

        反向工程:反向工程是從代碼到模型的過程。

    進行反向工程:

             確定將你的程序語言的代碼反向成模型的規則。

             使用工具(Rose C++ Analyzer)進行反向工程。

     

    提示和技巧

    一個結構化好的類圖:

             焦點放在系統靜態設計視圖的一個方面

             只包含為了理解該方面而應該存在的元素

             提供足夠的信息來理解該圖

             不讓讀者產生錯誤的信息

    當你畫類圖的時候:

             給它起一個名字,這個名字能表達類圖的用途

    用最少的交叉線來組織它的元素。

    延伸閱讀

    文章來源于領測軟件測試網 http://www.kjueaiud.com/


    關于領測軟件測試網 | 領測軟件測試網合作伙伴 | 廣告服務 | 投稿指南 | 聯系我們 | 網站地圖 | 友情鏈接
    版權所有(C) 2003-2010 TestAge(領測軟件測試網)|領測國際科技(北京)有限公司|軟件測試工程師培訓網 All Rights Reserved
    北京市海淀區中關村南大街9號北京理工科技大廈1402室 京ICP備10010545號-5
    技術支持和業務聯系:info@testage.com.cn 電話:010-51297073

    軟件測試 | 領測國際ISTQBISTQB官網TMMiTMMi認證國際軟件測試工程師認證領測軟件測試網

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>