`
isiqi
  • 浏览: 16353296 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

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

阅读更多
在第一部分中,我们实现了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应用程序详解.doc

    UML类图在Java应用程序设计中的应用 UML(Unified Modeling Language)是一种标准的建模语言,用于描述软件系统的结构、行为和架构。UML类图是UML中的一种静态结构图,用于描述系统中的类、接口和它们之间的关系。...

    利用UML序列图设计Java应用程序详解 

    要利用UML设计Java应用程序,仅仅使用类图来描述这些静态关系,利用可视化工具,要实现Java应用程序的代码自动生成,是远远不够的。我们还必须描述各种类相互之间的协作关系、动态关系,如时间序列上的交互行为。...

    利用UML序列图设计Java应用程序详解

    总之,UML序列图在Java应用程序设计中扮演着关键角色,它将复杂的动态行为转化为直观的图形表示,使得开发过程更加标准化和可视化。通过深入理解和应用序列图,开发者能够更有效地规划、设计和实现Java程序,提高...

    带UML类图的jdk6文档

    总结来说,这个“带UML类图的jdk6文档”资源是一个非常有价值的工具,它结合了文字描述与图形表示,使得开发者能够深入学习和掌握JDK 6 API,从而更好地利用Java进行软件开发。无论你是初学者还是经验丰富的开发者,...

    使用StartUML绘制类图

    使用StartUML绘制类图可以帮助开发者更好地设计和实现软件系统。StartUML提供了功能强大且易用的界面,适合用于绘制类图和其他UML图表。 知识点: 1. StartUML是UML建模工具,可以用于绘制类图。 2. StartUML提供...

    IBM-ETP-java培训12.UML 类图.ppt

    《IBM ETP Java培训12:UML类图详解》 在软件开发过程中,UML(统一建模语言)作为一种标准化的图形表示法,被广泛应用于系统分析与设计。IBM ETP(Enterprise Training Program)的Java培训课程中,第12部分专门...

    抽象工厂模式uml类图

    java设计模式 抽象工厂模式详解 一张图让你彻底明白抽象工厂模式

    面向对象-全面认识UML类图元素

    本文将深入探讨UML类图中的各个元素,并详细介绍它们在Java编程中的具体应用。 #### UML类图元素详解 ### 1. 类(Class) **定义:** - 类是对象的蓝图,定义了对象的属性和行为。 - 在UML类图中,类由三个部分...

    UML类图关系大全.

    ### UML类图关系详解 #### 一、引言 统一建模语言(Unified Modeling Language,简称UML)是软件工程领域中广泛使用的一种标准化图形化语言,用于系统建模和文档描述。其中,UML类图作为一种重要的建模工具,主要...

    UML类图画法简介word文档

    【UML类图详解】 UML(Unified Modeling Language)是一种标准化的、通用的建模语言,由OMG(Object ...通过学习和熟练应用UML类图,开发者可以更有效地设计和文档化软件系统,促进团队协作,提高开发效率和软件质量。

    ApplicationContext容器的uml类图

    - `ApplicationContext`非常适合于复杂的Java应用程序,尤其是那些需要高级功能(如事件管理和国际化)的应用。 - 通常用于企业级应用,如Web应用和服务端应用。 #### 二、ApplicationContext系列类图详解 #####...

    社团管理系统-uml课设

    《社团管理系统-UML课设详解》 在信息技术领域,UML(统一建模语言)是一种标准的建模语言,用于软件工程中的系统分析和设计。本篇将详细探讨如何运用UML来设计一个社团管理系统,以此作为课程设计的实例。 首先,...

    学生管理系统UML图

    《学生管理系统UML图详解》 学生管理系统是一个广泛应用于高校、培训机构等教育机构的信息管理系统,其目的是为了方便地管理学生信息、课程安排、成绩记录、考勤情况等。本篇文章将详细探讨基于Reational Software...

    用J2EE和UML开发Java企业级应用程序

    在开发Java企业级应用程序时,J2EE(Java 2 Platform, Enterprise Edition)和UML(Unified Modeling Language)是两个至关重要的工具。J2EE是一个由Oracle公司维护的平台,用于构建可扩展、多层、分布式的企业应用...

    java多线程设计模式详解(PDF及源码)

    通过程序范例和UML图示来一一解说,书中代码的重要部分加了标注以使读者更加容易理解,再加上图文并茂,对于初学者还是程序设计高手来说,这都是一本学习和认识JAVA设计模式的一本好书。(注意,本资源附带书中源...

    uml-java.tar.gz_uml pdf

    《UML在Java中的应用详解》 UML(Unified Modeling Language),统一建模语言,是软件工程领域一种广泛...通过阅读"使用UML编写Java应用程序.pdf"这份资料,你将能够更深入地理解和运用UML在Java开发中的各种技巧。

    jude java建模工具软件

    **Jude Java建模工具软件详解** Jude是一款专门用于Java建模的工具,它为开发者提供了一种可视化的方式来设计和理解复杂的系统架构。这款软件以其直观易用的界面和强大的建模功能,在IT行业中备受青睐。在本文中,...

    UML introduction3-类图

    ### UML基础:类图详解 #### 一、引言 在《UML基础》系列文章的第三部分中,我们将深入探讨类图(Class Diagram)。类图是UML(统一建模语言)中最常用且最重要的图形之一,它主要用于描述系统的静态结构。尽管很多...

Global site tag (gtag.js) - Google Analytics