利用UML类图设计Java应用程序可以使我们的开发过程标准化、可视化,代码编程简单化,本文通过一个具体的UML类图实现Java应用程序的设计与实现过程。

UML已成为面向目标规划的规范图形化东西,在UML界说的各种图中,本文只触及类图。Java运用程序由许多类所构成,类图的规划与完成,是Java完成面向目标运用程序的中心。

在UML类图中,类被描绘为带有三层的盒子。

运用UML类图进行Java使用程序设计(uml类图java实现)  UML类图 Java 第1张

顶层为类名,一般用加粗字体表明。假如类是笼统的,其称号用斜体表明;假如类是接口,则在类名上方标示<>。

中间层包括类的特点(或变量),底层包括类的办法。与类名类似,假如办法是笼统的,那么它的称号也用斜体表明。

咱们要规划的运用程序CDrawApp运用程序在依据字符的网格上画点、框和文本串,该运用程序触及到Java面向目标的许多概念与运用办法,十分体系、全面,在您细心研读后,定能敏捷把握UML类图,并将其运用到实践的Java运用程序开发过程中。为削减代码长度,让程序简略易懂,这儿运用Java控制台窗口显现程序运转成果。该程序一共由10个大类组成,以下别离介绍。

一、Point类

在CDrawApp程序中界说的***个类是Point类,该类用于经过x和y坐标在网格上标识一点。其类图规划为:

运用UML类图进行Java使用程序设计(uml类图java实现)  UML类图 Java 第2张

在该类中,有2个成员变量x和y,类图中,“-”表明变量或办法为private,“+”表明public,“#”则表明protected。该类界说了三个不同的结构函数,这是重载(overload)的比如。

接着该类规划了7个拜访办法。getX()和getY()办法别离回来一点的x和y坐标。SetX()和setY()办法依据参数xValue和yValue的值设置这些坐标的值。两个add()办法经过被拜访点的坐标加上一个值来树立一个新的Point目标。New运算符树立类的新实例。它后边紧跟着初始化新生成实例的结构函数。toString()

办法回来类String的一个目标,该目标用一个有序对来描绘一个点。

依据规划的类图,其Java完成代码为:

运用UML类图进行Java使用程序设计(uml类图java实现)  UML类图 Java 第3张

二、CGrid类

CGrid类用于界说指定巨细的字符网格。它供给根本办法集,经过加入到这些办法中的其它类来得到扩展。该类的UML类图为:

运用UML类图进行Java使用程序设计(uml类图java实现)  UML类图 Java 第4张

CGrid类声明3个变量:width、depth和grid[][]。width和depth 变量用于指定grid[][]的水平缓笔直尺度,grid[][]是保存网格字符的字符数组的数组。

CGrid中的变量声明为protected,这就规则了它们只能在声明它们的包中和CGrid的任何子类中拜访。

CGrid类只要一个单一结构函数,它设置width和depth的值,分配grid[][]数组,然后调用blankGrid()以空格为grid[][]赋值。

CGrid有4种拜访办法。blankGrid()办法仅仅简略地用空格字符来调用

fillGrid()。fillGrid()办法把grid[][]的每个元素都设置为ch参数。GetCharFrom()办法用于找出网格中给定方位的字符。SetCharAt()用于把网格中一点设置成特定字符。

在GetCharFrom()和SetCharAt()办法中运用Point类来界说它们的参数,这是类与类之间相关的比如,咱们稍候评论。

依据以上类图,CGrid类的原代码为:

运用UML类图进行Java使用程序设计(uml类图java实现)  UML类图 Java 第5张

#p#

三、CGObject类

CGObject类是笼统类的比如,它经过abstract办法来约束其子类的行为。Abstract办法有必要由非abstract子类完成。其类图规划如下:

运用UML类图进行Java使用程序设计(uml类图java实现)  UML类图 Java 第6张

CGObject类用于界说在网格上显现的目标的一般行为。它有两个变量:location和drawCharacter。Location变量的类型是Point,用于在网格上指定一个目标地点的点。DrawCharacter变量用于画目标的字符。

CGObject有三个办法,而没有结构函数。因为abstract类没有完好界说,所以它没有结构函数,也没有目标实例。

***个办法addToGrid()不是abstract类型的。它以类PrintCGrid的目标作为参数,调用PrintCGrid类的addCGObject()办法,把this目标加到网格中。this关键字指当时目标。用addToGrid()办法调用CGObject类的子类的目标,这些目标加到类PrintCGrid的目标中。

CGObject的其它两个办法都用abstract关键字声明。这意味着,这两个办法在能够由CGObject类的非abstract子类运用前有必要被掩盖。掩盖办法有必要具有与anstract办法相同的姓名、参数和回来值。Display()办法用于再网格上显现类PrintCGrid的一个目标。Describe()办法用于显现网格目标的描绘。

CGObject类的代码为:

运用UML类图进行Java使用程序设计(uml类图java实现)  UML类图 Java 第7张

四、PrintCGrid类

PrintCGrid类是CGrid类的子类,它界说了答应把目标加到网格中的附加变量和办法。它也供给了显现网格的办法。 PrintCGrid类的类图如下图所示:

运用UML类图进行Java使用程序设计(uml类图java实现)  UML类图 Java 第8张

PrintCGrid类与CGrid类的联系是子类与父类的联系。在类图顶用实线与空心箭头从子类指向父类表明。

运用UML类图进行Java使用程序设计(uml类图java实现)  UML类图 Java 第9张

PrintCGrid类的原代码为:

运用UML类图进行Java使用程序设计(uml类图java实现)  UML类图 Java 第10张

在以上代码中,PrintCGrid声明3个变量:displayList[]、maxObjects和numObjects。这些变量都声明为proceted,从而把对它们的拜访约束在一个包中和PrintCGrid的子类中。

DisplayList[]变量是类CGObject(见以下类的介绍)的数组。但这并不意味着该数组包括作为类CGObject实例的目标。这是不可能的,因为CGObject是笼统的。把DisplayList[]声明成类CGObject的数组的意图,是答应该数组包括CGObject类的子类的目标。一般来说,假如一个变量声明成类X,那么能够把该变量赋值为X的子类的目标。

MaxObjects变量声明成static而且final。运用static修饰符声明的变量,它们被作为一个类实例的一切目标共用,不会被每个实例仿制,静态变量又成为类变量。没有被声明成静态的变量是实例变量,对作为一个类的实例的每个目标进行仿制。

Final修饰符用于把变量标识成常量。用final修饰符声明的变量有必要在声明时进行初始化,不能再声明之外的任何地方赋值。MaxObjects常量初始化为100,表明能够加到displayList[]中的目标的***数目。

NumObjects变量用于计算加到网格的displayList[]中的目标实践数目。

PrintCGrid有一个结构函数。该结构函数有两个参数:x和y,它们表明网格的水平缓笔直方向的尺度。结构函数调用super()办法,并把这两个变量当着变元传递曩昔。Super()办法是结构函数调用句子的一个比如。它以x和y作为变元调用PrintCGrid的父类(即CGrid类)的结构函数。CGrid的结构函数初始化其width和depth变量,分配grid[][]数组,并用空格给该数组元素赋值。CGrid的结构函数运转完后,PrintCGrid的结构函数持续把numObjects设置为0,并分配displayList[]数组。

PrintCGrid供给10个拜访办法。AddCGObject()办法把目标加到displayList[]数组中。DeleteCGObject()办法删去坐落指定索引方位的目标。一切的后续目标都向前移动,以填充被删去目标留下的空缺。DeleteLastObject()办法经过简略地把numObjects减1来删去***一个目标。

GetNumObjects办法回来displayList[]中的目标数目。GetObject办法回来displayList[]中指定方位的目标。clearGrid()办法经过把numObjects设置为0去铲除一切目标。

DrawGrid()办法运用从CGrid类承继的办法清空网格,然后调用displayList[]中每个目标的display()办法。

displayGrid[]办法在控制台窗口中显现每一行网格。它是承继的比如。Grid[][]数祖在CGrid类中界说,由PrintCGrid所承继。它由CGObject类的一切子类的drawGrid()办法和display()办法更新。PrintGrid()类用它来在控制台窗口中打印字符。

ValueOf()办法用于displayGrid()办法中,它是String 类的静态办法。它把字符数组转换成String目标。静态办法类似于静态变量,它全体上运用于类,而不是作为类实例的各个目标运用。因为面向目标,静态办法只能拜访静态变量。一切静态办法都是定局的,不能被掩盖。

DisplayRow()办法在控制台窗口上显现一行网格,show()办法把drawGrid()和displayGrid()办法组合成一个办法。

五、BorderPrintCGrid类

BorderPrintCGrid类是PrintCGrid类的子类,它进一步扩展了CGrid类。它增加了生成类PrintCGrid目标的鸿沟的变量和办法。类图见如下所示:

BorderPrintCGrid类有四个私有变量:useBorder、borderCharacter、horizEdge和vertEdge。UseBorder是boolean类型的变量,它决议鸿沟是否应该显现。BorderCharacter为用于显现鸿沟的字符。HorizEdge和vertEdge用于显现鸿沟的水平缓笔直鸿沟的String目标。

BorderPrintCGrid类有两个。***个结构函数没有参数。它调用PrintCGrid类的结构函数结构一个75字符宽20行高的网格,其鸿沟字符为*。SetBorderDefaults()办法用于初始化BorderedPrintCGrid类的变量。第二个结构函数类似于***个结构函数,但它供给了直接指定网格尺度及鸿沟字符的功用。

BorderPrintCGrid类供给4个拜访办法。SetBorderDefaults()办法运用enableBorder()办法和setBorderCharacter()办法初始化BorderedPrintCGrid类的变量。enableBorder()办法把useBorder设置成true或false。setBorderCharacter()办法设置displayGrid()办法所用的borderCharacter、horizEdge和vertEdge变量。

运用UML类图进行Java使用程序设计(uml类图java实现)  UML类图 Java 第11张

BorderedPrintCGrid类是PrintCGrid的子类,其类图联系表明为:

运用UML类图进行Java使用程序设计(uml类图java实现)  UML类图 Java 第12张

displayGrid()办法掩盖 PrintCGrid类的displayGrid()办法。经过从头界说该办法以满意自己的需求。其间的super句子,将调用PrintCGrid.displayGrid()。

该类的完成代码为:

转载请说明出处
知优网 » 运用UML类图进行Java使用程序设计(uml类图java实现)

发表评论

您需要后才能发表评论