成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

使用UML類圖進(jìn)行Java應(yīng)用程序設(shè)計(jì)

開發(fā) 架構(gòu)
利用UML類圖設(shè)計(jì)Java應(yīng)用程序可以使我們的開發(fā)過(guò)程標(biāo)準(zhǔn)化、可視化,代碼編程簡(jiǎn)單化,本文通過(guò)一個(gè)具體的UML類圖實(shí)現(xiàn)Java應(yīng)用程序的設(shè)計(jì)與實(shí)現(xiàn)過(guò)程。

UML已成為面向?qū)ο笤O(shè)計(jì)的標(biāo)準(zhǔn)圖形化工具,在UML定義的各種圖中,本文只涉及類圖。Java應(yīng)用程序由許多類所構(gòu)成,類圖的設(shè)計(jì)與實(shí)現(xiàn),是Java實(shí)現(xiàn)面向?qū)ο髴?yīng)用程序的核心。

在UML類圖中,類被描述為帶有三層的盒子。

UML類圖的三層盒子

頂層為類名,一般用加粗字體表示。如果類是抽象的,其名稱用斜體表示;如果類是接口,則在類名上方標(biāo)注<>。

中間層包含類的屬性(或變量),底層包含類的方法。與類名相似,如果方法是抽象的,那么它的名稱也用斜體表示。

我們要設(shè)計(jì)的應(yīng)用程序CDrawApp應(yīng)用程序在基于字符的網(wǎng)格上畫點(diǎn)、框和文本串,該應(yīng)用程序涉及到Java面向?qū)ο蟮脑S多概念與應(yīng)用方法,非常系統(tǒng)、全面,在您仔細(xì)研讀后,定能迅速掌握UML類圖,并將其應(yīng)用到實(shí)際的Java應(yīng)用程序開發(fā)過(guò)程中。為減少代碼長(zhǎng)度,讓程序簡(jiǎn)單易懂,這里使用Java控制臺(tái)窗口顯示程序運(yùn)行結(jié)果。該程序總共由10個(gè)大類組成,以下分別介紹。

一、Point類

在CDrawApp程序中定義的***個(gè)類是Point類,該類用于通過(guò)x和y坐標(biāo)在網(wǎng)格上標(biāo)識(shí)一點(diǎn)。其類圖設(shè)計(jì)為:

Point類的設(shè)計(jì)圖

在該類中,有2個(gè)成員變量x和y,類圖中,“-”表示變量或方法為private,“+”表示public,“#”則表示protected。該類定義了三個(gè)不同的構(gòu)造函數(shù),這是重載(overload)的例子。

接著該類設(shè)計(jì)了7個(gè)訪問(wèn)方法。getX()和getY()方法分別返回一點(diǎn)的x和y坐標(biāo)。SetX()和setY()方法根據(jù)參數(shù)xValue和yValue的值設(shè)置這些坐標(biāo)的值。兩個(gè)add()方法通過(guò)被訪問(wèn)點(diǎn)的坐標(biāo)加上一個(gè)值來(lái)建立一個(gè)新的Point對(duì)象。New運(yùn)算符建立類的新實(shí)例。它后面緊跟著初始化新生成實(shí)例的構(gòu)造函數(shù)。toString()

方法返回類String的一個(gè)對(duì)象,該對(duì)象用一個(gè)有序?qū)?lái)描述一個(gè)點(diǎn)。

依據(jù)設(shè)計(jì)的類圖,其Java實(shí)現(xiàn)代碼為:

Point類的代碼

二、CGrid類

    CGrid類用于定義指定大小的字符網(wǎng)格。它提供基本方法集,通過(guò)加入到這些方法中的其它類來(lái)得到擴(kuò)展。該類的UML類圖為:

利用UML類圖設(shè)計(jì)Java應(yīng)用程序(一)

    CGrid類聲明3個(gè)變量:width、depth和grid[][]。width和depth 變量用于指定grid[][]的水平和垂直尺寸,grid[][]是保存網(wǎng)格字符的字符數(shù)組的數(shù)組。

    CGrid中的變量聲明為protected,這就規(guī)定了它們只能在聲明它們的包中和CGrid的任何子類中訪問(wèn)。

    CGrid類只有一個(gè)單一構(gòu)造函數(shù),它設(shè)置width和depth的值,分配grid[][]數(shù)組,然后調(diào)用blankGrid()以空格為grid[][]賦值。

    CGrid有4種訪問(wèn)方法。blankGrid()方法只是簡(jiǎn)單地用空格字符來(lái)調(diào)用

    fillGrid()。fillGrid()方法把grid[][]的每個(gè)元素都設(shè)置為ch參數(shù)。GetCharFrom()方法用于找出網(wǎng)格中給定位置的字符。SetCharAt()用于把網(wǎng)格中一點(diǎn)設(shè)置成特定字符。

    在GetCharFrom()和SetCharAt()方法中使用Point類來(lái)定義它們的參數(shù),這是類與類之間關(guān)聯(lián)的例子,我們稍候討論。

    根據(jù)以上類圖,CGrid類的原代碼為:

利用UML類圖設(shè)計(jì)Java應(yīng)用程序(一)

#p#

三、CGObject類

    CGObject類是抽象類的例子,它通過(guò)abstract方法來(lái)限制其子類的行為。Abstract方法必須由非abstract子類實(shí)現(xiàn)。其類圖設(shè)計(jì)如下:

利用UML類圖設(shè)計(jì)Java應(yīng)用程序(一)

    CGObject類用于定義在網(wǎng)格上顯示的對(duì)象的一般行為。它有兩個(gè)變量:location和drawCharacter。Location變量的類型是Point,用于在網(wǎng)格上指定一個(gè)對(duì)象所在的點(diǎn)。DrawCharacter變量用于畫對(duì)象的字符。

    CGObject有三個(gè)方法,而沒有構(gòu)造函數(shù)。因?yàn)閍bstract類沒有完整定義,所以它沒有構(gòu)造函數(shù),也沒有對(duì)象實(shí)例。

    ***個(gè)方法addToGrid()不是abstract類型的。它以類PrintCGrid的對(duì)象作為參數(shù),調(diào)用PrintCGrid類的addCGObject()方法,把this對(duì)象加到網(wǎng)格中。this關(guān)鍵字指當(dāng)前對(duì)象。用addToGrid()方法調(diào)用CGObject類的子類的對(duì)象,這些對(duì)象加到類PrintCGrid的對(duì)象中。

    CGObject的其它兩個(gè)方法都用abstract關(guān)鍵字聲明。這意味著,這兩個(gè)方法在能夠由CGObject類的非abstract子類使用前必須被覆蓋。覆蓋方法必須擁有與anstract方法相同的名字、參數(shù)和返回值。Display()方法用于再網(wǎng)格上顯示類PrintCGrid的一個(gè)對(duì)象。Describe()方法用于顯示網(wǎng)格對(duì)象的描述。

    CGObject類的代碼為:

利用UML類圖設(shè)計(jì)Java應(yīng)用程序(一)

四、PrintCGrid類

    PrintCGrid類是CGrid類的子類,它定義了允許把對(duì)象加到網(wǎng)格中的附加變量和方法。它也提供了顯示網(wǎng)格的方法。 PrintCGrid類的類圖如下圖所示:

利用UML類圖設(shè)計(jì)Java應(yīng)用程序(一)

    PrintCGrid類與CGrid類的關(guān)系是子類與父類的關(guān)系。在類圖中用實(shí)線與空心箭頭從子類指向父類表示。

利用UML類圖設(shè)計(jì)Java應(yīng)用程序(一)

    PrintCGrid類的原代碼為:

利用UML類圖設(shè)計(jì)Java應(yīng)用程序(一)

    在以上代碼中,PrintCGrid聲明3個(gè)變量:displayList[]、maxObjects和numObjects。這些變量都聲明為proceted,從而把對(duì)它們的訪問(wèn)限制在一個(gè)包中和PrintCGrid的子類中。

    DisplayList[]變量是類CGObject(見以下類的介紹)的數(shù)組。但這并不意味著該數(shù)組包含作為類CGObject實(shí)例的對(duì)象。這是不可能的,因?yàn)镃GObject是抽象的。把DisplayList[]聲明成類CGObject的數(shù)組的目的,是允許該數(shù)組包含CGObject類的子類的對(duì)象。一般來(lái)說(shuō),如果一個(gè)變量聲明成類X,那么可以把該變量賦值為X的子類的對(duì)象。

    MaxObjects變量聲明成static并且final。使用static修飾符聲明的變量,它們被作為一個(gè)類實(shí)例的所有對(duì)象公用,不會(huì)被每個(gè)實(shí)例復(fù)制,靜態(tài)變量又成為類變量。沒有被聲明成靜態(tài)的變量是實(shí)例變量,對(duì)作為一個(gè)類的實(shí)例的每個(gè)對(duì)象進(jìn)行復(fù)制。

    Final修飾符用于把變量標(biāo)識(shí)成常量。用final修飾符聲明的變量必須在聲明時(shí)進(jìn)行初始化,不能再聲明之外的任何地方賦值。MaxObjects常量初始化為100,表示可以加到displayList[]中的對(duì)象的***數(shù)目。

    NumObjects變量用于統(tǒng)計(jì)加到網(wǎng)格的displayList[]中的對(duì)象實(shí)際數(shù)目。

    PrintCGrid有一個(gè)構(gòu)造函數(shù)。該構(gòu)造函數(shù)有兩個(gè)參數(shù):x和y,它們表示網(wǎng)格的水平和垂直方向的尺寸。構(gòu)造函數(shù)調(diào)用super()方法,并把這兩個(gè)變量當(dāng)著變?cè)獋鬟f過(guò)去。Super()方法是構(gòu)造函數(shù)調(diào)用語(yǔ)句的一個(gè)例子。它以x和y作為變?cè){(diào)用PrintCGrid的父類(即CGrid類)的構(gòu)造函數(shù)。CGrid的構(gòu)造函數(shù)初始化其width和depth變量,分配grid[][]數(shù)組,并用空格給該數(shù)組元素賦值。CGrid的構(gòu)造函數(shù)運(yùn)行完后,PrintCGrid的構(gòu)造函數(shù)繼續(xù)把numObjects設(shè)置為0,并分配displayList[]數(shù)組。

    PrintCGrid提供10個(gè)訪問(wèn)方法。AddCGObject()方法把對(duì)象加到displayList[]數(shù)組中。DeleteCGObject()方法刪除位于指定索引位置的對(duì)象。所有的后續(xù)對(duì)象都向前移動(dòng),以填充被刪除對(duì)象留下的空缺。DeleteLastObject()方法通過(guò)簡(jiǎn)單地把numObjects減1來(lái)刪除***一個(gè)對(duì)象。

    GetNumObjects方法返回displayList[]中的對(duì)象數(shù)目。GetObject方法返回displayList[]中指定位置的對(duì)象。clearGrid()方法通過(guò)把numObjects設(shè)置為0去清除所有對(duì)象。

    DrawGrid()方法使用從CGrid類繼承的方法清空網(wǎng)格,然后調(diào)用displayList[]中每個(gè)對(duì)象的display()方法。

    displayGrid[]方法在控制臺(tái)窗口中顯示每一行網(wǎng)格。它是繼承的例子。Grid[][]數(shù)祖在CGrid類中定義,由PrintCGrid所繼承。它由CGObject類的所有子類的drawGrid()方法和display()方法更新。PrintGrid()類用它來(lái)在控制臺(tái)窗口中打印字符。

    ValueOf()方法用于displayGrid()方法中,它是String 類的靜態(tài)方法。它把字符數(shù)組轉(zhuǎn)換成String對(duì)象。靜態(tài)方法類似于靜態(tài)變量,它整體上應(yīng)用于類,而不是作為類實(shí)例的各個(gè)對(duì)象使用。由于面向?qū)ο螅o態(tài)方法只能訪問(wèn)靜態(tài)變量。所有靜態(tài)方法都是定局的,不能被覆蓋。

    DisplayRow()方法在控制臺(tái)窗口上顯示一行網(wǎng)格,show()方法把drawGrid()和displayGrid()方法組合成一個(gè)方法。

    五、BorderPrintCGrid類

    BorderPrintCGrid類是PrintCGrid類的子類,它進(jìn)一步擴(kuò)展了CGrid類。它增加了生成類PrintCGrid對(duì)象的邊界的變量和方法。類圖見如下所示:

    BorderPrintCGrid類有四個(gè)私有變量:useBorder、borderCharacter、horizEdge和vertEdge。UseBorder是boolean類型的變量,它決定邊界是否應(yīng)該顯示。BorderCharacter為用于顯示邊界的字符。HorizEdge和vertEdge用于顯示邊界的水平和垂直邊界的String對(duì)象。

    BorderPrintCGrid類有兩個(gè)。***個(gè)構(gòu)造函數(shù)沒有參數(shù)。它調(diào)用PrintCGrid類的構(gòu)造函數(shù)構(gòu)造一個(gè)75字符寬20行高的網(wǎng)格,其邊界字符為*。SetBorderDefaults()方法用于初始化BorderedPrintCGrid類的變量。第二個(gè)構(gòu)造函數(shù)類似于***個(gè)構(gòu)造函數(shù),但它提供了直接指定網(wǎng)格尺寸及邊界字符的功能。

    BorderPrintCGrid類提供4個(gè)訪問(wèn)方法。SetBorderDefaults()方法使用enableBorder()方法和setBorderCharacter()方法初始化BorderedPrintCGrid類的變量。enableBorder()方法把useBorder設(shè)置成true或false。setBorderCharacter()方法設(shè)置displayGrid()方法所用的borderCharacter、horizEdge和vertEdge變量。

利用UML類圖設(shè)計(jì)Java應(yīng)用程序(一)

    BorderedPrintCGrid類是PrintCGrid的子類,其類圖關(guān)系表示為:

利用UML類圖設(shè)計(jì)Java應(yīng)用程序(一)

    displayGrid()方法覆蓋 PrintCGrid類的displayGrid()方法。通過(guò)重新定義該方法以滿足自己的需要。其中的super語(yǔ)句,將調(diào)用PrintCGrid.displayGrid()。

    該類的實(shí)現(xiàn)代碼為:

利用UML類圖設(shè)計(jì)Java應(yīng)用程序(一)

    到這里,我們的程序設(shè)計(jì)與實(shí)現(xiàn)已完成將近一半。我們用UML類圖分析了5個(gè)類,但這些類之間是如何相互作用而構(gòu)成我們的應(yīng)用程序呢?現(xiàn)在我們回過(guò)頭來(lái)分析前面5個(gè)類之間的相互關(guān)聯(lián)。首先我們分析繼承概念在UML類圖中的表示。

利用UML類圖設(shè)計(jì)Java應(yīng)用程序(一)

    通過(guò)UML類圖中的各類之間的繼承關(guān)系表示法,我們清楚地知道,CGrid是超類,PrintCGrid是CGrid的子類,BorderedPrintCGrid是PrintCGrid以及CGrid的子類。

    在Java類的代碼實(shí)現(xiàn)中,一定要用相應(yīng)的extends語(yǔ)句來(lái)表示實(shí)際的繼承關(guān)系。

    一般類與類之間的關(guān)系我們可以用關(guān)聯(lián)來(lái)表達(dá)。如在類CGrid中,在GetCharFrom()和SetCharAt()方法中我們使用了Point類來(lái)定義它們的參數(shù),這是類CGrid對(duì)Point類的引用。類CGrid可以引用多個(gè)Point對(duì)象,因此,在多重性的概念中,表示該類CGrid可以與多個(gè)Point對(duì)象關(guān)系。

利用UML類圖設(shè)計(jì)Java應(yīng)用程序(一)

    在UML類圖中,我們用一條實(shí)線表示這種關(guān)聯(lián)為依賴關(guān)系,通過(guò)開叉的箭頭表示是CGrid類引用Point類。箭頭上方的0..*表示可以與多個(gè)對(duì)象關(guān)聯(lián)。如果是0..1表示可以與1個(gè)對(duì)象關(guān)聯(lián);如果是1表示必須與1個(gè)對(duì)象關(guān)聯(lián);如果是1..*表示必須與至少1個(gè)對(duì)象關(guān)聯(lián)。

    同樣,在PrintCGrid類中,在其變量申明中,有對(duì)CGObject的引用,并且也是多重引用。其UML類圖關(guān)系可以表示為:

利用UML類圖設(shè)計(jì)Java應(yīng)用程序(一)

    因此,以上5個(gè)類之間的相互關(guān)系,用UML類圖關(guān)系可以清楚地表示為:

利用UML類圖設(shè)計(jì)Java應(yīng)用程序(一)

    本部分說(shuō)明了5個(gè)類的UML類圖表示、UML類圖關(guān)系以及相應(yīng)的Java實(shí)現(xiàn)代碼。

【編輯推薦】

  1. 五個(gè)免費(fèi)UML建模工具推薦
  2. UML對(duì)象關(guān)系學(xué)習(xí)總結(jié)
  3. UML面向?qū)ο蠼VR(shí)簡(jiǎn)介
  4. 基于UML的面向?qū)ο蠓治雠c設(shè)計(jì)方法
  5. UML面向?qū)ο笾R(shí)入門
責(zé)任編輯:佚名 來(lái)源: ddvip.com
相關(guān)推薦

2010-06-09 10:53:28

UML類圖

2010-06-28 18:21:36

UML類圖設(shè)計(jì)

2010-06-09 10:38:07

UML類圖

2010-06-12 16:59:45

UML設(shè)計(jì)

2012-02-15 14:39:55

GNOME 3

2010-03-04 10:11:17

Android手機(jī)系統(tǒng)

2022-05-04 23:08:36

標(biāo)準(zhǔn)Go應(yīng)用程序

2010-07-05 16:23:39

UML類圖

2012-03-30 15:47:50

ibmdw

2010-08-12 15:59:23

Flex應(yīng)用程序

2024-01-15 06:05:05

DockerGol ang應(yīng)用程序

2009-02-25 14:51:05

應(yīng)用程序設(shè)計(jì)ASP.NET.NET

2010-08-04 09:34:51

Flex設(shè)計(jì)

2010-06-30 14:37:20

UML類圖

2012-03-06 10:40:58

singleantJava

2010-07-20 11:35:41

避免SQL Serve

2017-10-27 13:30:59

大數(shù)據(jù)MongoDBeBay

2012-06-14 09:32:13

微軟Windows 8

2010-12-13 09:20:00

2010-07-12 10:25:44

UML類圖
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 久久久久九九九九 | 国产亚洲成av人在线观看导航 | 激情五月激情综合网 | 成人精品一区二区三区中文字幕 | 在线视频一区二区 | 91精品国产综合久久久久 | 国产在线一区观看 | av性色全交蜜桃成熟时 | 国产精品1区 | 亚洲狠狠 | 怡红院成人在线视频 | 九色视频网站 | 色视频网站 | 久久久资源 | 精品入口麻豆88视频 | 亚洲a视频 | 成人在线电影网站 | 久久综合99 | 亚洲一区在线免费观看 | 国产一区二区精品在线 | 国产成人精品免费 | 雨宫琴音一区二区在线 | 日韩在线视频网址 | 久久精品99 | 日本高清不卡视频 | 欧美一区日韩一区 | 福利视频一区二区三区 | 99久久日韩精品免费热麻豆美女 | 国产精品成人久久久久a级 久久蜜桃av一区二区天堂 | 免费在线视频精品 | 日本欧美国产在线 | 亚洲精品久久久9婷婷中文字幕 | 麻豆精品久久 | 免费一区 | 国产区高清 | 69电影网| 日韩成人在线视频 | 日本黄色短片 | 伊人在线| 欧美久久一级 | 久草久 |