UML 建模-3-Hell,World
C编程语言的发明者Brian Kernighan 和 Dennis Ritchie 指出,学习一门新的语言的唯一方法是用它编写程序。对于UML也是如此,学习UML的唯一方法是用它绘制模型。
当开始学习一门新的编程语言时很多开发者写的第一个程序是简单的,只是包含一些打印“Hello World”字符之类的语句。这是一个合理的出发点,因为掌握这种小应用可以立见成效。同时,它也涵盖啦使某些东西运行所需要的全部基础设施。
在web浏览器中,打印"Hello,World”的Java是很简单的:
import java.awt.Graphics;
class HellowWorld extends java.applet.Applent
{
public void paint(Graphics g)
{
g.drawString("Hello,World!",10,10);
}
}
第一行代码
import java.awt.Graphics;
使得后面的代码可以直接使用Graphics。前缀java.awt 表明啦类Graphics所在的java包。
第二行代码
class HelloWorld extends java.applet.Applet
{
介绍啦一个名为HelloWorld的新类,并说明它是一个像Applet那样的类,Applet位于包java.applet中。
其余的三行代码
public void paint(Graphics g){
g.drawString("Hello,World",10,10);
}
声明啦一个名为paint的操作,它的实现调用名为drawString的另一个操作,drawString操作负责在指定的位置打印"Hello,World"。在通常的面向对象的方式下,drawString是一个名称为g的参数上的一个操作,g的类型是累Graphics。
在UML中,对这种应用的建模是简单的。如果3-1所示,把类HelloWorld用一个矩形图标标识,类HelloWorld的paint操作也展示在这里,在一个附属的注解中详述啦该操作的实现。

这个图反映啦"Hello,World" 这个应用的基本部分,但是还遗漏啦一些东西。按照上面的代码描述这个应用还涉及到其他的两个类,即Applent和Graphics,而且面对每个类的使用方式各不相同,类Applet被用作类HelloWorld的父类,类Graphics则用于类HelloWorld的一个操作paint的特征标记和实现中。可以在类图中表示这些类及它们与类HelloWorld的不同关系。

用矩形图标表示类Applet和类Graphics。因为不显示他们的任何操作,所以对它们的图标进行啦省略。从HelloWorld到Applet到带有空心箭头的有向线段表示的是泛化关系,在这里意味着HelloWorld是Applet的子类。从HelloWorld到Graphics到有向虚线表示的是依赖关系,它意味着HelloWorld使用Graphics。
至此HelloWorld建造于其上的框架还没有完工。如果研究Applnet和Graphics这两个Java库,将会发现这个类是一个更大的类层次的一部分。跟踪被类Applet扩展和实现那些类,能够产生另一个类,
HelloWorld仅是这个较大类层次的一个叶子。HelloWorld是Applet的子类,Applet是Panel的子类,Panel是Container的子类,Container是Component的子类,Component是Object的子类,Object是Java中所有的子类的父类。因而,这个模型与Java库匹配,每个子类都扩展啦某个父类。
,
如下图所示,可以使用顺序图对事件的次序建模。这里序列从运行对象Thread开始,它调用Tookit的一个操作run。对象Toolkit调用自己的操作(callbackLoop),然后它调用ComponentPeer的操作handleExpose。对象ComponentPeer调用它的目标操作paint。对象ComponentPeer假设它的目标是Commponent,但在这种情况下,目标实际是Component的子类,因此,HelloWorld的操作paint被多态地的处理。


浙公网安备 33010602011771号