欢迎来到天天文库
浏览记录
ID:38696334
大小:53.00 KB
页数:6页
时间:2019-06-17
《UML中的继承关系》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、我们引入了UML类图的概念,比较了在Java编程语言和UML类图中表示类、属性、操作和关联关系的不同之处。下面我们来看看如何在UML中表示两个重要的Java概念——继承,接口。 继承 在Java中,我们可以声明一个类扩展(extends)另一个类,还可以声明一个类实现(implements)一个或者多个接口。下面我们来看看如何在UML中表达这些概念。 下面是三个Java类的基本骨架。第一个类是代表某种支付方式的Payment抽象类,另外两个类分别扩展Payment类,描述两种不同的支付方式: /**描述支付方式的抽象类*/ abstractpublicclassPayme
2、nt{ publicPayment(){} publicPayment(BigDecimalamount){ this.amount=amount; } publicBigDecimalgetAmount(){ returnamount; } publicvoidsetAmount(BigDecimalamount){ this.amount=amount; } privateBigDecimalamount; } /**一个扩展了Payment类的子类,描述信用卡支付方式*/ publicclassCreditCardPay
3、mentextendsPayment{ publicCreditCardPayment(){ } publicCreditCardPayment(BigDecimalamount){ super(amount); } publicStringgetCardNumber(){ returncardNumber; } publicvoidsetCardNumber(StringcardNumber){ this.cardNumber=cardNumber; } publicbooleanauthorize(){ returnfalse
4、;//暂不实现 } privateStringcardNumber; } /**一个扩展了Payment类的子类,描述现金支付方式*/ publicclassCashPaymentextendsPayment{ publicCashPayment(){ super(); } publicCashPayment(BigDecimalamount){ super(amount); } publicBigDecimalgetAmountTendered(){ returnamountTendered; } publicvoids
5、etAmountTendered(BigDecimalamountTendered){ this.amountTendered=amountTendered; } privateBigDecimalamountTendered; publicBigDecimalcalcChange(){ returnamountTendered.suBTract(super.getAmount()); } } 图一用UML显示了同样的三个类。在操作和属性声明中,类型和参数之类的细节都没有显示出来,这是为了更清楚地显示出类的整体结构以及各个类之间的关系。 图一:UM
6、L一般化关系 Java中的extends关键词声明了继承关系,相当于UML中的“一般化”(Generalization,也译为“泛化”)关系,在UML图形中用子类向超类的实线空心封闭箭头表示。图一额外增加了一个Sale类,这是为了更清楚地说明UML一般化关系与UML定向关联关系所用箭头的不同。关联关系与一般化关系的另一个不同之处在于,一般化关系的两端不需要说明多重性或角色名称。 显然,UML类图比三个Java源代码文件更清楚直观地显示出了三个类之间的继承关系。如果你要与别人探讨设计思路,绘制UML草图也要比直接使用代码简单快捷得多。 也许有人会说,系统的类结构图就在他们的头脑中,
7、他们只需要直接使用Java代码。实际上,对于规模较大的系统,这种说法显然是不成立的;即使对于规模较小的系统,如果一定的时间之后要由其他程序员修改,没有UML图也会寸步难行——很难保证每一个人都了解你头脑中的类结构图。 在UML中,抽象类的标志是类的名字以斜体显示。在白板或纸张上手工画UML草图时,很难区分字体是否是斜体。为此,一些人建议这些场合可以在类名称的右下角加上{abstract}标记以示区别。 另一些
此文档下载收益归作者所有