java课件chapter 7 面向对象的几个基本原则_第1页
java课件chapter 7 面向对象的几个基本原则_第2页
java课件chapter 7 面向对象的几个基本原则_第3页
java课件chapter 7 面向对象的几个基本原则_第4页
java课件chapter 7 面向对象的几个基本原则_第5页
已阅读5页,还剩58页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Java语言程序设计shelly200607@126.comUML类图简介面向抽象原则开-闭原则多用组合少用继承原则高内聚-低耦合原则主要内容7.1UML类图简介UML(UnifiedModelingLanguage)类图(ClassDiagram)属于结构图,常被用于描述一个系统的静态结构。类图是由若干类关联在一起,反映系统或者子系统组成结构的静态图。类图的建模贯穿工程的分析和设计阶段的始终,通常从用户能够理解的类开始建模,最终往往成为只有开发小组才能够完全理解的类。类图由如下元素组成:类(Class):是具有共同结构特征、行为特征、联系和语义的对象集合的抽象形式。关联(Association):它表示类与类之间的关系。在类的UML图中,使用一个长方形描述一个类的主要构成,将长方形垂直地分为三层。◆第1层是名字层◆第2层是变量层,也称属性层,列出类的成员变量及类型,格式是“变量名字:类型”。◆第3层是方法层,也称操作层,列出类的方法及返回类型,格式是“方法名字(参数列表):类型”。7.1.1类的UML图在类图中,根据建模的不同景象,类图标中不一定列出全部的内容。如在建立分析模型或设计模型时,甚至可以只列出类名,在图中着重表达的是类与类之间的联系;在建立实现模型时,则应当在类图标中详细给出类的属性和方法等细节。1.属性

属性(Attribute)在UML类图标的矩形框中用文字串说明,如下图所示。

可视性(Visibility)标记表示:

+ 公共# 保护-私用可视性也可以用以下关键字表示:public(公共)、protected(保护)、private(私用)。若可视性标记为“+”或“public”,则为公共属性,可以被外部对象访问。若可视性标记为“#’或“protected”,则为保护属性,可以被本类或子类的对象访问。若可视性标记为“-”或“private”,则为私用属性,不可以被外部对象访问,只能为本类的对象使用。可视性可以缺省,表示该属性不可视。Student类

属性类型表示:冒号“:”后跟属性值的数据类型。数据类型的表示依赖于实现语言,如有的程序设计语言规定浮点数用保留字“Float”表示,有的则规定用保留字“Real”表示。Student类数据类型可以是任何用户需要的内容,包括:来自程序设计语言如VisualBasic、C++、C#和Java的任何标准数据类型。一个已经定义的类。接口定义语言(InterfaceDefinitionLanguage,IDL)中的数据类型列表中的数据类型。读者在自己的系统建模中能够使用的其他类型。属性初始值设置:可以通过在属性名称和数据类型之后添加等于号(=)来为属性指定默认值,如下图所示。属性多重性:多重性为可选项,它表达该类的每个实例的属性值的个数。可以像应用于类之间的关系中那样把多重性应用于属性。例如,Student类具有属性Grades。不希望该属性只包含单个值,而是希望它包含该学生的所有成绩,可以是任意多个。派生的属性:另一种可以为属性提供的信息是派生值,它可以使用数学函数、字符串函数或者将要在应用程序中实现的其他商务逻辑。要想指出一个属性是派生的,需要在属性名之前添加一个前斜线(/),并且要附加一个注释,其中包含了派生属性值的指令,如下图所示。2.操作(方法)

操作(Operation)表示类能够提供的功能服务。它在UML类矩形框中用文字串说明,如下图所示。操作名指示类可提供的功能服务,它后跟圆括号中的参数列表是可选项,即一个操作可以有参数,也可以没有参数。参数列表由逗号分隔的操作的形式参数组成,其格式为:

参数名:类型=缺省值,…Student类返回列表是返回给调用者的单个变量值,它可以表示该操作程序运行的一个成功标志或者计算的值。7.1.2接口(Interface)表示接口的UML图使用一个长方形描述一个接口的主要构成,将长方形垂直地分为三层。◆顶部第1层是名字层,用<<interface>>修饰名字。◆第2层是常量层,列出接口中的常量及类型,格式是“常量名字:类型”。

◆第3层是方法层,也称操作层,列出接口中的方法及返回类型,格式是“方法名字(参数列表):类型”。

类的关系类之间可以建立四种关系:泛化、关联、依赖和实现。其标记如下图所示。如果一个类是另一个类的子类,那么UML通过使用一个实线连接两个类的UML图来表示二者之间的继承关系。如果A类中成员变量是用B类(接口)来声明的变量,那么A和B的关系是关联关系,称A关联于B。实现关系如果A类中某个方法的参数用B类(接口)来声明的变量或某个方法返回的数据类型是B类型的,那么A和B的关系是依赖关系,称A依赖于B。如果一个类实现了一个接口,那么类和接口的关系是实现关系,称类实现接口7.1.7注释(Annotation)UML使用注释为类图提供附加的说明。UML在一个带卷角的长方形中显示给出的注释,并使用虚线将这个带卷角的长方形和所它所注释的实体连接起来。

1)关联关系关联关系是指类之间的语义联系。关联可以具有如下特性:关联名称角色名称多重性导航性多个类可以关联到同一个类多重性:

多重性(mutiplicity)用来指示一个类的多少对象与另一个类的一个对象相关。可以在类关系的任何一端添加多重性,来指示出多重性,如下图所示。多重性是一个数值或者数值范围,用来指示一个类的几个对象与另一个类的一个对象相关。如下图所示。关联的多重性角色

类关系还可以通过添加角色来进一步丰富。在类图中使用角色可以帮助读者理解第一个类对于第二个类的作用。角色与多重性显示在相同的位置,在指示类之间关系线的上面或者下面,如下图所示。下图显示了player类和Team类在关联中分别扮演两个角色。关联的限定关联的限定

类的关联还可以通过限定条件来明确类之间的关系。如下图所示。类的自反关联自反关联:

类具有到自身的关联,称为自反关联。2聚集聚集也称为聚合,是关联的特例。聚集表示一类对象与另一类对象之间的关系,是整体与部分的关系。在陈述需求时使用的“包含”、“组成”、“分为……部分”等字句,往往意味着存在聚集关系。除了一般的聚集关系之外,还有两种特殊的聚集关系,分别称为共享聚集和复合聚集。图9.10共享聚集示例①共享聚集如果在聚集关系中处于部分方的对象可以同时参与多个处于整体方对象的构成,则该聚集称为共享聚集。①共享聚集②组合聚集如果部分类对象完全隶属于整体类对象,部分与整体共存,整体不存在了部分也会随之消失(或失去存在价值了),则该聚集称为组合聚集。②组合聚集练习:建模聚合关联和组合关联在这个练习中,将会使用目前为止学习到的所有类型的关系来创建一个类图,这些关系包括普通关联、泛化、聚合和组合。读者将会综合运用自己的知识从需求构造一个类图。下面是一个制造商和维修店使用的存货清单系统的需求列表,从这些信息构造一个类图:存货由两个部分组成(零件和产品)。产品由两个或者更多零件组成,系统可以拥有无限多个零件和产品。存货中的部分零件包括调速轮、轮齿和加力燃烧室。一名仓库保管员维护货存。一名装配工组装产品,一名维修员维修产品。完成的产品包括1-3个标签:Manufacturer标签指示产品已经完成;Repair标签指示产品已经检修过;FCC标签指示产品中包含加力燃烧室。练习设计一组几何对象类图。组中父类为“几何单项”,由之衍生“线”、“圆”、“方”,“椭圆”、“多边形”、“点”等类。几何单项多边形圆矩形椭圆线点几何单项多边形圆矩形椭圆线点11..*{有序}7.2面向抽象原则7.2.1抽象类和接口抽象(abstract)类具有如下特点:◆抽象类中可以有abstract方法,也可以有非abstract方法。◆抽象类不能用new运算符创建对象。◆如果一个非抽象类是某个抽象类的子类,那么它必须重写父类的abstract方法。◆抽象类声明的对象做上转型对象。A.java,B.java,Application.java

publicabstractclassA{publicabstractintadd(intx,inty);}publicclassBextendsA{publicintadd(intx,inty){returnx+y;}}publicclassApplication{publicstaticvoidmain(Stringargs[]){Aa;a=newB();//a是B类对象的上转型对象intm=a.add(3,2);//a调用子类B重写的add()方法System.out.println(m);//输出结果为5}}接口(interface)具有如下特点:◆接口中只可以有public权限的abstract方法,不能有非abstract方法。◆接口由类去实现,即一个类如果实现一个接口,那么它必须重写接口中的abstract方法。◆接口回调。Com.java,ComImp.java,Application.java

publicinterfaceCom{publicabstractintsub(intx,inty);}classComImpimplementsCom{publicintsub(intx,inty){returnx-y;}}publicclassApplication{publicstaticvoidmain(Stringargs[]){Comcom;com=newComImp();//com变量存放ComImp类的对象的引用

intm=com.sub(8,2);//com回调ComImp类实现的接口方法System.out.println(m);//输出结果为6}}7.2.2面向抽象所谓面向抽象编程,是指当设计一个类时,不让该类面向具体的类,而是面向抽象类或接口,即所设计类中的重要数据是抽象类或接口声明的变量,而不是具体类声明的变量。

Circle.java,Pillar.java

publicclassCircle{doubler;Circle(doubler){this.r=r;}publicdoublegetArea(){return(3.14*r*r);}}publicclassPillar{

Circlebottom;doubleheight;Pillar(Circlebottom,doubleheight){this.bottom=bottom;this.height=height;}publicdoublegetVolume(){returnbottom.getArea()*height;//bottom可以调用子类重写的getArea方法}}面向抽象重新设计Pillar类。首先编写一个抽象类Geometry(或接口),其中定义两个一个抽象的getAre()方法。publicabstractclassGeometry{//如果使用接口需用interface来定义Geometry。publicabstractdoublegetArea();}接着重新设计Pillar类以及Circle和Rectangle类。publicclassPillar{

Geometrybottom;//bottom是抽象类Geometry声明的变量doubleheight;Pillar(Geometrybottom,doubleheight){this.bottom=bottom;this.height=height;}publicdoublegetVolume(){returnbottom.getArea()*height;//bottom可以调用子类重写的getArea方法}}publicclassCircleextendsGeometry{doubler;Circle(doubler){this.r=r;}publicdoublegetArea(){return(3.14*r*r);}}publicclassRectangleextendsGeometry{doublea,b;Lader(doublea,doubleb){this.a=a;this.b=b;}publicdoublegetArea(){returna*b;}}publicclassApplication{publicstaticvoidmain(Stringargs[]){Pillarpillar;Geometrybottom;bottom=newRectangle(12,22,100);pillar=newPillar(bottom,58);

//pillar是具有矩形底的柱体System.out.println("矩形底的柱体

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论