在第一部分中,我们实现了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应用程序开发的方向。
分享到:
相关推荐
UML类图在Java应用程序设计中的应用 UML(Unified Modeling Language)是一种标准的建模语言,用于描述软件系统的结构、行为和架构。UML类图是UML中的一种静态结构图,用于描述系统中的类、接口和它们之间的关系。...
要利用UML设计Java应用程序,仅仅使用类图来描述这些静态关系,利用可视化工具,要实现Java应用程序的代码自动生成,是远远不够的。我们还必须描述各种类相互之间的协作关系、动态关系,如时间序列上的交互行为。...
总之,UML序列图在Java应用程序设计中扮演着关键角色,它将复杂的动态行为转化为直观的图形表示,使得开发过程更加标准化和可视化。通过深入理解和应用序列图,开发者能够更有效地规划、设计和实现Java程序,提高...
总结来说,这个“带UML类图的jdk6文档”资源是一个非常有价值的工具,它结合了文字描述与图形表示,使得开发者能够深入学习和掌握JDK 6 API,从而更好地利用Java进行软件开发。无论你是初学者还是经验丰富的开发者,...
使用StartUML绘制类图可以帮助开发者更好地设计和实现软件系统。StartUML提供了功能强大且易用的界面,适合用于绘制类图和其他UML图表。 知识点: 1. StartUML是UML建模工具,可以用于绘制类图。 2. StartUML提供...
《IBM ETP Java培训12:UML类图详解》 在软件开发过程中,UML(统一建模语言)作为一种标准化的图形表示法,被广泛应用于系统分析与设计。IBM ETP(Enterprise Training Program)的Java培训课程中,第12部分专门...
java设计模式 抽象工厂模式详解 一张图让你彻底明白抽象工厂模式
本文将深入探讨UML类图中的各个元素,并详细介绍它们在Java编程中的具体应用。 #### UML类图元素详解 ### 1. 类(Class) **定义:** - 类是对象的蓝图,定义了对象的属性和行为。 - 在UML类图中,类由三个部分...
### UML类图关系详解 #### 一、引言 统一建模语言(Unified Modeling Language,简称UML)是软件工程领域中广泛使用的一种标准化图形化语言,用于系统建模和文档描述。其中,UML类图作为一种重要的建模工具,主要...
【UML类图详解】 UML(Unified Modeling Language)是一种标准化的、通用的建模语言,由OMG(Object ...通过学习和熟练应用UML类图,开发者可以更有效地设计和文档化软件系统,促进团队协作,提高开发效率和软件质量。
- `ApplicationContext`非常适合于复杂的Java应用程序,尤其是那些需要高级功能(如事件管理和国际化)的应用。 - 通常用于企业级应用,如Web应用和服务端应用。 #### 二、ApplicationContext系列类图详解 #####...
《社团管理系统-UML课设详解》 在信息技术领域,UML(统一建模语言)是一种标准的建模语言,用于软件工程中的系统分析和设计。本篇将详细探讨如何运用UML来设计一个社团管理系统,以此作为课程设计的实例。 首先,...
《学生管理系统UML图详解》 学生管理系统是一个广泛应用于高校、培训机构等教育机构的信息管理系统,其目的是为了方便地管理学生信息、课程安排、成绩记录、考勤情况等。本篇文章将详细探讨基于Reational Software...
在开发Java企业级应用程序时,J2EE(Java 2 Platform, Enterprise Edition)和UML(Unified Modeling Language)是两个至关重要的工具。J2EE是一个由Oracle公司维护的平台,用于构建可扩展、多层、分布式的企业应用...
通过程序范例和UML图示来一一解说,书中代码的重要部分加了标注以使读者更加容易理解,再加上图文并茂,对于初学者还是程序设计高手来说,这都是一本学习和认识JAVA设计模式的一本好书。(注意,本资源附带书中源...
《UML在Java中的应用详解》 UML(Unified Modeling Language),统一建模语言,是软件工程领域一种广泛...通过阅读"使用UML编写Java应用程序.pdf"这份资料,你将能够更深入地理解和运用UML在Java开发中的各种技巧。
**Jude Java建模工具软件详解** Jude是一款专门用于Java建模的工具,它为开发者提供了一种可视化的方式来设计和理解复杂的系统架构。这款软件以其直观易用的界面和强大的建模功能,在IT行业中备受青睐。在本文中,...
### UML基础:类图详解 #### 一、引言 在《UML基础》系列文章的第三部分中,我们将深入探讨类图(Class Diagram)。类图是UML(统一建模语言)中最常用且最重要的图形之一,它主要用于描述系统的静态结构。尽管很多...