分享
 
 
 

利用UML类图设计Java应用程序详解(二)

王朝java/jsp·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

在第一部分中,我们实现了5个类。在本部分中,我们接着说明如何利用UML类图来设计余下的各个类。为减少篇幅,本部分着重讲解UML类图及应用,对Java实现代码不再详细描述。

六、CGPoint类

CGPoint类说明了如何利用非抽象类扩展抽象类。CGPoint类是CGObject的子类,CGPoint类扩展了CGObject类,CGPoint类没有再它所继承的变量中增加变量,它所声明的方法只有构造函数和要求它实现的抽象方法。其类图如下:

Java实现代码为:

// CGPoint.java

public class CGPoint extends CGObject {

// Method declarations

public CGPoint(int x, int y,char ch) {

location = new Point(x,y);

drawCharacter = ch;

}

public CGPoint(int x, int y) {

this(x,y,'+');

}

public CGPoint(Point p) {

this(p.getX(),p.getY(),'+');

}

public CGPoint(Point p,char ch) {

this(p.getX(),p.getY(),ch);

}

public void display(PrintCGrid grid) {

grid.setCharAt(drawCharacter,location);

}

public void describe() {

System.out.print("CGPoint "+String.valueOf(drawCharacter)+" ");

System.out.println(location.toString());

}

}

七、CGBox类

CGBox类也扩展了CGObject类。CGBox类提供了在网格上显示矩形的附加变量。CGBox类的类图如下:

相应的代码为:

// CGBox.java

public class CGBox extends CGObject {

// Variable declarations

protected Point lr; // Lower right corner of a box

// Method declarations

public CGBox(Point ulCorner, Point lrCorner,char ch) {

location = ulCorner;

lr = lrCorner;

drawCharacter = ch;

}

public CGBox(Point ulCorner, Point lrCorner) {

this(ulCorner,lrCorner,'#');

}

public void display(PrintCGrid grid) {

int width = lr.getX() - location.getX() + 1;

int height = lr.getY() - location.getY() + 1;

Point topRow = new Point(location);

Point bottomRow = new Point(location.getX(),lr.getY());

for(int i=0; i<width; ++i) {

grid.setCharAt(drawCharacter,topRow);

grid.setCharAt(drawCharacter,bottomRow);

topRow = topRow.add(1,0);

bottomRow = bottomRow.add(1,0);

}

Point leftCol = new Point(location);

Point rightCol = new Point(lr.getX(),location.getY());

for(int i=0;i>height;++i){

grid.setCharAt(drawCharacter,leftCol);

grid.setCharAt(drawCharacter,rightCol);

leftCol = leftCol.add(0,1);

rightCol = rightCol.add(0,1);

}

}

public void describe() {

System.out.print("CGBox "+String.valueOf(drawCharacter)+" ");

System.out.println(location.toString()+" "+lr.toString());

}

}

八、CGText类

CGText类是CGObject中的第三个子类。其类图与代码分别如下:

// CGText.java

public class CGText extends CGObject {

// Variable declarations

String text;

// Method declarations

public CGText(Point p,String s) {

location = p;

drawCharacter = ' ';

text = s;

}

public void display(PrintCGrid grid) {

Point p = new Point(location);

for(int i=0;i<text.length();++i){

grid.setCharAt(text.charAt(i),p);

p = p.add(1,0);

}

}

public void describe() {

System.out.println("CGText "+location.toString()+" "+text);

}

}>

以下是CGObject类、CGPoint类、CGBox类、CGText类及Point类之间的相互关系。注意CGObject类是抽象类,其类名用斜体表示。

九、KeyboardInput类

KeyboardInput类扩展了Java API的DataInputStream类,用来提供获取用户键盘输入的一系列常用的简单方法。其类图设计为:

代码为:

import java.lang.System;

import java.io.DataInputStream;

import java.io.InputStream;

import java.io.IOException;

//KeyboardInput.java

public class KeyboardInput extends DataInputStream {

public KeyboardInput(InputStream inStream) {

super(inStream);

}

public char getChar() throws IOException {

String line = readLine();

if(line.length()==0) return ' ';

return line.charAt(0);

}

public String getText() throws IOException {

String line = readLine();

return line;

}

public int getInt() throws IOException {

String line = readLine();

Integer i = new Integer(line);

return i.intValue();

}

public Point getPoint() throws IOException {

System.out.print(" x-coordinate: ");

System.out.flush();

int x = getInt();

System.out.print(" y-coordinate: ");

System.out.flush();

int y = getInt();

return new Point(x,y);

}

}

十、CDrawApp类

主程序由CDrawApp类所构成。它包含main()方法,main()方法建立类CDraw的对象,然后调用该对象的run()方法。其中CDraw类属于内部类,当然你也可以将它单独作为一个类文件编辑、编译,其效果是一样的。

其中类与内部类之间的关系,用关联关系来表达,外部类用一个十字交叉圆圈表示,箭头指向内部类。如下图所示:

其代码实现为:

import java.lang.System;

import java.io.DataInputStream;

import java.io.IOException;

//CDrawApp.java

class CDrawApp {

public static void main(String args[]) throws IOException {

CDraw program = new CDraw();

program.run();

}

}

class CDraw {

// Variable declarations

static KeyboardInput kbd = new KeyboardInput(System.in);

BorderedPrintCGrid grid;

// Method declarations

CDraw() {

grid = new BorderedPrintCGrid();

}

void run() throws IOException {

boolean finished = false;

do {

char command = getCommand();

switch(command){

case 'P':

addPoint();

System.out.println();

break;

case 'B':

addBox();

System.out.println();

break;

case 'T':

addText();

System.out.println();

break;

case 'U':

grid.deleteLastObject();

System.out.println();

break;

case 'C':

grid.clearGrid();

System.out.println();

break;

case 'S':

grid.show();

break;

case 'X':

finished = true;

default:

System.out.println();

}

} while (!finished);

}

char getCommand() throws IOException {

System.out.println("CDrawApp P - Add a Point U - Undo Last Add");

System.out.print ("Main Menu B - Add a Box C - Clear Grid");

System.out.println(" X - Exit CDrawApp");

System.out.print (" T - Add Text S - Show Grid ");

System.out.print (" Enter command: ");

System.out.flush();

return Character.toUpperCase(kbd.getChar());

}

void addPoint() throws IOException {

System.out.println("Add Point Menu");

System.out.println(" Location:");

Point p = kbd.getPoint();

System.out.print(" Character: ");

System.out.flush();

char ch = kbd.getChar();

if(ch==' ') ch = '+';

CGPoint cgp = new CGPoint(p,ch);

cgp.addToGrid(grid);

}

void addBox() throws IOException {

System.out.println("Add Box Menu");

System.out.println(" Upper Left Corner:");

Point ul = kbd.getPoint();

System.out.println(" Lower Right Corner:");

Point lr = kbd.getPoint();

System.out.print(" Character: ");

System.out.flush();

char ch = kbd.getChar();

if(ch==' ') ch = '#';

CGBox box = new CGBox(ul,lr,ch);

box.addToGrid(grid);

}

void addText() throws IOException {

System.out.println("Add Text Menu");

System.out.println(" Location:");

Point p = kbd.getPoint();

System.out.print(" Text: ");

System.out.flush();

String text = kbd.getText();

CGText cgt = new CGText(p,text);

cgt.addToGrid(grid);

}

}

主程序CDrawApp类与相应类之间的关系为:

按照本文次序分别编译以上的10个大类,然后运行主程序CdrawApp即可。在程序运行时请注意:当选择增加点、框或者文本串后,选择Show Grid才能出现网格,并显示结果。

本文通过一个具体的程序开发过程,详细说明了如何使用UML类图来设计Java应用程序,使得程序开发可视化,文档标准化,便于相互协作与管理,是Java应用程序开发的方向。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有