Java面向对象程序设计(第2版)第17章课件_第1页
Java面向对象程序设计(第2版)第17章课件_第2页
Java面向对象程序设计(第2版)第17章课件_第3页
Java面向对象程序设计(第2版)第17章课件_第4页
Java面向对象程序设计(第2版)第17章课件_第5页
已阅读5页,还剩60页未读 继续免费阅读

下载本文档

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

文档简介

1、统一建模语言UML统一建模语言UMLUML模型系统体系结构 UML: Unified Modeling LanguageUnified:UML模型系统体系结构 UML: Unified MoBoochRumbaughJacobson UML由世界著名的面向对象技术专家G. Booch、J. Rumbaugh、I. Jacobson发起,在Booch方法,OMT方法和OOSE方法基础上,广泛征求意见,汲众家之长,几经修改而完成的。1997年被OMG(Object Management Group)采纳为业界标准。BoochRumbaughJacobson UML由世Modeling: 建模UML

2、用于建模,即表达模型设计,而且自身拥有四层体系结构。 模型是系统一个抽象的概括,强调系统设计特定的重要方面,同时忽略大量底层的编程细节。而建模就是为了捕捉、描述系统的核心。同一研究对象不同人建立的模型可能同样好或同样差。 建模的益处:理解和认识系统的结构和行为,掌握系统的本质特征。在创建系统之间,了解系统的风险并进行化解。是开发团队沟通的重要形式,为使用系统的人提供帮助。Modeling: 建模UML用于建模,即表达模型设计,而且Language: 是一种可视化建模语言,有语法和语义,消除了自然语言的歧义。虽然与具体面向对象语言无关,但学会UML的关键之处是将UML模型与具体代码实现相互结合;

3、UML modelSource codeObject structuresExecuting programUMLProgramming languageAbstract view ofAbstract view ofSpecifiesSpecifies模型与代码之间的关系Language: 是一种可视化建模语言,有语法和语义,消除四层元模型体系结构Run-time Instance运行实例层Model模型层Metamodel元模型层Metametamodel元元模型层Classperson1:PersonPersonToolAssociationInfrastructure Library:

4、Core:Constructs:ClassInfrastructure Library:Core:Abstraction:Relationships规定元模型的语言规定模型的语言定义描述语义域的语言四层元模型体系结构Run-time Instance运行实例 UML的主要特点: 建模设计上的标准化与可视化的结合 建模设计上的语言无关性。建模设计上标准性与扩展性的统一。 使用UML的CASE(Computer-Assisted Software Engineering)工具 Rational Rose PowerDesigner CASE工具的功能构造模型并进行详细说明,可以检查模型语法正确与否

5、。正向工程(生成数据结构、代码、文档)和逆向工程(代码生成模型)便于团队对模型的共享访问、安全管理、交流(共享相同概念) 对模型文档的版本进行识别、存储和管理 UML的主要特点: 建模设计上的标准化与可视化的结合 UML视图(View):描述软件系统的不同方面所关心视图客户用例视图分析者用例视图、逻辑视图设计者用例视图、逻辑视图、构件视图开发者用例视图、逻辑视图、构件视图、进程视图、部署视图测试者用例视图、部署视图系统集成者进程视图、部署视图逻辑视图构件视图进程视图部署视图用例视图结构视域实现视域行为视域环境视域用户视域4+1视图模型不同开发者对视图的关心角度 UML视图(View):描述软件

6、系统的不同方面所关心视图 UML图(Diagram):用于描述模型,是模型元素的一个集合单元。用例图:需求捕获类 图:类及类之间的相互关系对象图:对象以及对象之间的相互关系构件图:构件及其相互依赖关系部署图:构件在各节点上的部署顺序图:强调对象时间顺序的交互协作图:强调对象协作的交互状态图:类所经历的各种状态活动图:对工作流程建模 结 构 行 为敏捷软件原则:需要时再添加UML的主要图类型 UML图(Diagram):用于描述模型,是模型元素的一活动图用例图协作图对象图类图状态图序列图WorkflowScenariosInter-class behaviorInter-class behavi

7、orStructureStructureInteraction equence between objectsUML图在设计过程中的演化关系发现类方法:名词短语;公共类;用例导出;CRC(类、职责、协作)提炼类方法:系统范围内;清晰目的;不能孤立;有属性;类功能单一;Association&GeneralizationStructure活动图用例图协作图对象图类图状态图序列图WorkflowScTypeDiagram用例模型图用例图静态模型图(状态模型)类图、对象图、构件图、配置图、包图动态模型图行为模型交互图顺序图协作图(通信图)活动图状态变化模型状态图UML图的类型划分TypeDiagra

8、m用例模型图用例图静态模型图(状态模型) UML视图与图对应关系图视图主要概念Use case diagramUse case view用例、参与者、关联关系、扩展关系、包含关系、泛化关系Object diagramUse case and logic view对象、链接关系Sequence diagramUse case and logic view对象、消息Collaboration diagramUse case and logic view类元、链接关系、消息Activity diagramUse case and logicview活动、迁移、起始活动、终止活动、分支与合并、分叉与汇

9、合Class diagramlogic view类、关联关系、聚合关系、组合关系、泛化关系、依赖关系、接口、包Package diagramlogic view包、依赖关系、泛化关系State diagramlogic view状态、迁移、起始状态、终止状态、判定Component diagramComponent view构件、接口、依赖关系Deployment diagramDeployment view节点、构件、依赖关系、关联关系 UML视图与图对应关系图视图主要概念Use case dBABAUse caseBA用例图主要模型元素及其含义参与者(角色)用例包含关系扩展关系关联关系泛化

10、关系参与者是针对用例所扮演的角色,可以人也可以是事物。用例是功能,功能是完整的、外部可见的、相互独立的。完整含义:用例的执行逻辑必须完整,即有主要执行的流程,也有各种次要流程和意外处理流程。外部可见的:不是内部功能,是参与者可以感知的。相互独立的:用例开始执行到最终结束不依赖于其他用例是参与者和用例之间的通信渠道,如果没有箭头,则代表通信是双向的。是用例与用例的一种依赖关系:它允许被包含用例中的公共行为从包含用例中分解出来。如B用例包含A用例,则意味着B用例要执行,必须先执行A用例。是用例与用例的关系:B用例扩展A用例,表示A用例在某种条件满足下,可以执行B用例。因而B用例是A用例的额外功能;

11、另外当B用例的执行可以由A用例而来,也可以由其他途径而来时(没有包含那种强制含义),B用例和A用例也是一种扩展关系。是用例与用例、参与者与参与者之间的一种继承关系,表示一个用例(角色)将继承另一用例(角色)的所有功能(语义含义)。BABAUse c用例图是对需求中系统功能的规格说明(不对系统约束进行说明),并被作为验收测试的依据。用例图模型的建立过程:确定参与者和用例;确定参与者与用例之间的关系,确定参与者之间的关系,确定用例之间的关系;确定需求边界,在用例图中用矩形框表示;对用例功能进行描述,形成文档。【例】包含二个角色,四个用例。其中B用例和A用例之间的关系为包含,即B用例执行前必须先执行

12、A用例;C和A的关系为扩展,即A用例在某种条件满足下,可以扩展出C用例;D用例和A用例的关系为继承,表明D将拥有A用例的所有功能。参与者1和参与者2之间的关系为继承,表示参与者2除了可以驱动A、B用例外,还可以驱动参与者1的所有用例,即图中的D用例。用例图是对需求中系统功能的规格说明(不对系统约束进行说明),用例规格说明格式用例说明要素说明简要描述概述参与者涉及的参与者前置条件用例开始所需的条件主事件流对正常事件的流程进行描述备选流定义异常事件后置条件用例结束后的系统状态用例规格说明格式用例说明要素说明简要描述概述参与者涉及的参与表示类及其关联关系的图+ display()- getNumOp

13、enSlots()+ setStatus()+ numCanisters: int - numWafers: int- size: floatCanister类名属性操作+:可见 -:不可见类图长短式;抽象类和具体类表示;类多重性表示;封装表示操作属性:类型类名*University1 Component主要的模型元素:类、关联、泛化、依赖关系、接口、包。表示类及其关联关系的图+ display()+ numCan类中属性和操作的类范围和对象范围+ Canister()+ display()- getNumOpenSlots()+ setStatus()+ numCanisters: int

14、- numWafers: int- size: floatCanister静态属性构造方法静态方法此三者专属于类,其他属性和方法虽然在类中定义,实际为对象而服务。类中属性和操作的类范围和对象范围+ Canister()+ 对象图为类图实例,是类图的一个快照对象图长式属性=值对象名:类名对象名:类名短式类图对象图类具有3个分栏:名称、属性和操作对象只有两个分栏:名称和属性类的名称栏只有类名对象名称栏为:“对项目:类名”或“:类名”类的属性分栏定义了所有属性的特征定义了属性的当前值类中列出了操作不包含操作,因为对象所有操作相同类图是对象图的抽象,类有关联,关联是对象图中链接的抽象,类图中的关联有名

15、称、角色、多重性以及约束等。对象图是类图的一个实例,对象有链接,链接是关联的实例,链接有名称、角色,但没有多重性。类图和对象图的比较对象图为类图实例,是类图的一个快照对象图长式属性=值对象名:类是数据类型,UML在表示所有语言数据类型上不够;用构造型(stereotype)进行数据类型(模型元素)的扩展。Integer基本int数据类型MyInterfaceJava语言的接口Colorredgreenblue用户自定义枚举类型类是数据类型,UML在表示所有语言数据类型上不够;typ泛化:抽象类与继承关系的UML表示 泛化构造型:、 抽象类在编程上的可替换(Interchageable)与多态性

16、CurrentAccountDepositAccountOnlineAccountAccountgetBalance()Account ac;ac = new CurrentAccount();System.out.println(ac.getBalance();ac = new DepositAccount();System.out.println(ac.getBalance();可替换性多态性泛化:抽象类与继承关系的UML表示CurrentAccoun关联(一): 关联名、关联方向、关联角色、关联多重性class Person Compony employer; . . . . . cla

17、ss Company Person employee; . . . . . 类A类B角色a 角色b 关联名 关联多重性 关联多重性 PersonCompanyemployee employer WorksFor 0.* 0.1 关联(一): 关联名、关联方向、关联角色、关联多重性类A类关联(二)实现:类图为关联,对象图为链接,代码实现为引用;类图中的关联关系将决定对象图、序列图中对象的交互关系PersonCompanyemployee employer WorksFor 0.* 1 john:PersonICI:CompanyWorksFor tom:PersonWorksFor 关联(二)实

18、现:类图为关联,对象图为链接,代码实现为引用;类用代码表示类图多重性含义 (一) class A B b; . . . . . class B A a; . . . . . A、B两个类对象可以引用对方也可以不引用,总之可自由选择;用代码表示类图多重性含义 (一) 用代码表示类图多重性含义 (二) A类对象必须引用B类对象,B类对象则可以引用也可以不引用A对象class A B b; A(B _b) if(_b=null)/throw NullLinkError b=_b; class B A a; . . . . . 用代码表示类图多重性含义 (二) 用代码表示类图多重性含义 (三) cla

19、ss A B b; A(B _b) if(_b=null)/throw NullLinkError b=_b;b.setA(this); class B A a; void setA(A _a) if(_a=null)/throw NullLinkError a=_a; 先产生B类对象,再产生A类对象,只要A类对象产生时,二者就构成了相互引用;如果产生对象的方式反过来,如法炮制。用代码表示类图多重性含义 (三) 关联(三):关联的元数(一元关联或自关联或递归关联、二元关联、三元关联)?对象存在一元链接和三元链接吗Servantheader clerk Manage 0.* 1 header:S

20、ervantClerk_n:ServantClerk_1:Servant关联(三):关联的元数?对象存在一元链接和三元链接吗ServMailMessageAttachment*composition*ComputerProcessor*1aggregation关联(四):聚合(部分是整体的一部分) 组合(整体拥有部分)主要概念聚和传递性、非对称性组合传递性、非对称性、依赖性、固定性特征一般关联聚合组合标记实线空心菱形实心菱形拥有无弱强多重性任意任意整体为1传递性无有传方向无整体与部分MailMessageAttachment*composit关联(五):关联约束约束关键词含义subset一个关

21、联是另一个关联的子集ordered表示有序对象changeable关联可变addonly关联可以动态添加,但不能修改frozen关联不能修改xor两个关联之间是互斥关系委员会人subset*1成员主席主席是成员中的一员:委员会有一个成员的引用集合,有一个“主席引用”,主席对象被“主席引用”引用外,在成员引用集合中也存在一个引用指向主席对象。多边形线段*ordered多边形中存在一个线段的引用集合,多个线段对象的引用是以有序的方式加入集合当中。购房合同人公司xor购房合同的主体只能有一个,要么是人,要么是公司。关联(五):关联约束约束关键词含义subset一个关联是人公司雇主0.1*工人*0.1

22、老板人.雇主=人.老板.雇主用标记值来表示约束老板:人工人1:人工人2:人A:公司老板:人工人1:人工人2:人A:公司B:公司约束条件下的对象链接图没有约束条件下的可能存在的对象链接关系图人公司雇主0.1*工人*0.1老板人.雇主=人.老板.雇关联(六):关联类;产生条件(多重性中的多对多;将对应关系进行存储 ) ModuleStudent* RegistrationMark:Integer1class Registration private int mark; private Student student; Registration(Student st) student = st;ma

23、rk = 0; class Module private Vector registrations=new Vector(); public void enroll(Student st) registrations.addElement(new Registration(st); 关联(六):关联类;产生条件(多重性中的多对多;将对应关系进CustomerAccountCurrentAccountDepositAccountOnlineAccountHolds0.11关联(七):关联与类的泛化CustomerCurrentAccountDepositAccountOnlineAccountC

24、ustomerAccountCurrentAccountD Directory Filename0.1class Directory private Hashtable theFiles; . . . . . 关联(八):受限(qualified)关联的表示及实现;name是theFiles中的Key DirectoryFile* Directory Filename0.1关联(八):受interfaceMyClassMyInterfaceinterface MyInterface . . . . class MyClass implements MyInterface . . . . . M

25、yClassMyInterface接口表示及实现interfaceMyClassimplementaticlass MyDependentClass . . . . . void myFunction1( MyReferencedClass r ) . . MyReferencedClass myFunction2( ) . . void myFunction3( ) MyReferencedClass m dependence(reference to a class)parameteror return typeor local variable typeMyDependentClassM

26、yReferencedClass依赖的表示和实现class MyDependentClassdependen依赖的表示和实现MyClassMyInterfaceUseClass class UseClass void myFunction(MyInterface mi) Studentjack:Student依赖的表示和实现MyClassMyInterfaceUseC包及包图包是UML的模型元素之一,是一种分组机制,把一些模型元素组织成语义上相关的组。包可以包含类、接口、组件、结点和其他包,包之间有引入、依赖、继承的关系。包图用来描述系统模型的体系结构层次, 一个包就是一个子系统,包图是设计中

27、的概念,在建模时起到归类的作用,对于实际系统没有意义,不需要转化成可执行的系统。包图中涉及到的注解到包名边的构造型主要有: 系统模型 子系统模型是其他包的一个访问接口视图包另一个包的代理由模式组成的包Package包名,可含有包路径包层次ABDC A包在类定义层次使用了B包继承了D包,在对象层次调用了C包中的对象。包及包图包是UML的模型元素之一,是一种分组机制,把一些模型顺序图(序列)图顺序图又称为序列图,描述对象之间动态的消息交互关系,体现对象间消息传递的时间顺序。图顶层的水平轴为交互的对象,对象下的虚线代表对象生命线,虚线上的矩形框表示对象接受消息后被激活期,代表方法的执行,对象间消息交

28、互从图的最顶端开始,自上向下体现的是消息交互的时间顺序。myObject:MyClassmyObject1:MyClass11.1Operation1()Client1Operation()Client端是消息的发送端,拥有myObject的引用Operation()是MyClass的方法,该方法中有myClass1对象的引用Operation1()是MyClass1的方法a是MyClass的声明 a.Operation()b是MyClass1声明 b.Operation1()顺序图(序列)图顺序图又称为序列图,描述对象之间动态的消息交交互图中的消息1)消息格式:序号条件重复次数回送值:=操作

29、名(参数表)2)消息四种类型:简单消息、同步消息、异步消息和返回消息简单消息同步消息异步消息返回消息消息的类型内部消息的表示方法:A:B消息中的构造型3)内部消息和循环消息表示方法4)消息中的构造型:创建消亡用同步消息,、交互图中的消息1)消息格式:序号条件重复次数回建立顺序图步骤1.确定交互的类对象2.在序列图左上角画一个矩形框代表该对象,使用 UML标记方法: object:Class3. 画一个延长矩形框在该对象下面表示一个操作的执行。4. 画一个箭头指向右边。myObject:MyClassmyObject1:MyClass1operation1()5.确定那个对象处理该消息。6. 用

30、操作的名称给该箭头命名。7. 系统使用一个拉长的矩形框表示一个过程的开始。8.如果是同步消息(方法调用),则接受消息对象被激活的矩形框不要超过发消息对象的矩形框。myObject:MyClass建立顺序图步骤1.确定交互的类对象myObjectmyObj合作图(协作)图用于描述相互合作的对象间的交互关系,模型元素由类元或对象、链接、消息构成。类元角色:描述对象在交互中扮演的角色winner:Account链接:用实线表示两个类元(对象)之间的链接,用构造型表明链接的种类类型含义全局性(global)表明该链接是由类中关联的实例化局部性(local)表明该链接是操作中的一个局部变量。参数性(pa

31、rameter)表明该链接是操作中的传入变量自我性(self)表明该链接是自身发送的消息合作图(协作)图用于描述相互合作的对象间的交互关系,模型元素消息:格式同顺序图:Component*Client:Assembly1:cost()1.1*:cost():ComponentClient:Assembly1:cost()1.1*:cost()合作图中的循环消息表示法对象的创建与撤销new:合作中新产生的对象或链接destroy:合作中销毁的对象或链接transient:合作中产生又销毁的对象或链接Client:Orderline:OrderLinedestroy1:remove(line)1.

32、1:destroy消息构造型链接撤销对象撤销消息:格式同顺序图:Component*Client:Ass顺序图和合作图的相互转化顺序图和合作图的相互转化活动图活动图用于描述系统需求各用例内活动的执行顺序或类方法中主要活动的执行流程。活动:活动由子活动或动作构成,动作是不可再分的活动,其执行不能被打断,动作不能象活动那样拥有入口动作、出口动作和内部迁移,活动和动作都拥有相同的UML表示符号。模型元素活动迁移分支与合并开始活动结束活动分叉汇合迁移:由带箭头的实线表示,表示动作状态的转移,当迁移上无条件时,称为无条件动作流,当有条件时,条件满足迁移发生。分支与合并:一个入迁移,多个具有互斥条件的出迁

33、移,迁移沿判定条件为真的分支迁移;合并:将多个具有互斥条件的入迁移合并成一个出迁移,即当有一个入迁移发生时,就会引起出迁移。迁移也可以分叉和汇合,分叉形成并发迁移,汇合则对迁移进行同步。开始活动与结束活动:开始活动是活动图的开始,只能有一个,结束活动是活动图的结束,一个活动图可以存在多个结束活动。活动图活动图用于描述系统需求各用例内活动的执行顺序或类方法中状态图描述系统或类可能有的不同状态及其引起状态迁移的事件,对象的状态决定了对象的行为。模型元素迁移开始状态结束状态状态状态:由状态名和活动组成。在状态图中,状态名唯一;活动是在该状态下执行的事件和动作,是可选项。每个状态有有入口、执行和出口三

34、个标准事件,每个事件对应一个动作。如果在状态的活动区还画有一个或多个状态图,则称为嵌套状态。迁移:由带箭头的实线表示,表示状态的转移,迁移的完整描述为“事件(参数)条件/动作” ,迁移可以接判断,判断一入多出,且出迁条件互斥。条件判断开始状态与结束状态:开始状态是状态图的开始,对于同一层次状态图而言只能有一个(嵌套的状态图可以有自己的开始状态和结束状态),结束状态是状态图的结束,一个状态图可以有多个结束状态。状态图描述系统或类可能有的不同状态及其引起状态迁移的事件,模状态图与活动图的相同点和不同点相同点: 1)图中的建模元素有相似之处。 2)对系统或对象在生存周期的状态和行为进行描述。 不同点

35、: 1)状态图中迁移发生时,必须有事件发生或条件满足,而活动图的迁移可以无条件或没有事件发生。 2)状态图对于系统状态的描述可以横跨多个用例,而活动图则是针对同一用例内部的动作执行给出描述。 状态图与活动图的相同点和不同点相同点:不同点:构件图构件图描述构件及其相互依赖关系,用于将系统逻辑设计与物理模块进行对应。模型元素构件接口依赖构件:相对逻辑设计上的类和对象,构件是和物理系统相关的一个概念,不同的语言对构件的定义有所不同,UML中的构件含义包括代码文件,也指数据库、动态链接库、web页面等。依赖:构件中的关系以依赖的形式表达,可分为编译依赖和调用依赖两类。接口:构件和接口存在实现和调用两种

36、关系。ComponentA.javaB.java 构件构造型:、 、构件依赖中使用的含义构件图构件图描述构件及其相互依赖关系,用于将系统逻辑设计与物部署图部署图描述了构件在物理硬件上的分布情况。模型元素构件Component结点关联结点:表示某种计算资源的物理对象,包括计算机、外部设备(打印机、读卡器、通信设备等),结点内部放置构件,表示构件部署在该结点上,同一个结点内部的构件关系用依赖表达。关联:结点之间的关联表示结点之间物理连接以及其上用的通信协议。依赖 部署图中的构造型:用来表达结点通讯使用的协议等。部署图部署图描述了构件在物理硬件上的分布情况。模型元素构件C经典案例经典案例案例1 工厂

37、仓库管理信息管理需求1)对仓库每种零件进行编号(数字)2)对仓库每种零件类型进行命名(字符)3)记录每种零件的价格(浮点)4)零件可以构成组件,组件和零件可进一步构成层 次更高的组件5)需要查询任一组件的价格。案例1 工厂仓库管理信息管理需求1)对仓库每种零件进行编public class Part private String name; private long number; private Double cost; public Part(String _name,long _numbr,double _cost) name =_name; number=_number; cost=_

38、cost; public String getName() return name; public long getNumber() return number; public double getCost() return cost; 问题潜在需求:仓库零件非常多,这样设计的问题有:1、对象属性冗余,造成内存浪费以及维护上的困难。2、仓库中没有零件无法记录零件类型。针对需求NO1-3的设计问题潜在需求:仓库零件非常多,这样设计的问题有:针对需求NOpublic class Part private CatalogueEntry entry; public Part(CatalogueEntr

39、y e) entry = e; ScrewsBolts上述问题的解决方案public class Part private CatalogueEntry entry; public Part(CatalogueEntry e) entry = e; public double cost() return entry.getcost(); Part成本查询的相应调整public class Part ScrewsBolts针对需求NO4的设计:组合表示场景描述:p3和p2组成a2,a2和p1组成a1潜在需求:一个assembly可以对应多个part或assembly。设计要求:引用上存在多样性现

40、象。Vector链表中的每个单元可引用任何对象,因而Assembly或Part的引用都可以放入。但组合物中加入构件时有两种方案,很明显方案2较好。public class Assembly private Vector components=new Vector(); public void addAssemble(Assembly c) components.add(c); public void addPart(Part c) components.add(c); public void add(Object c) components.add(c); 方案1方案2多样性针对需求NO4的设

41、计:组合表示场景描述:p3和p2组成a2,上图中的组合关系又可以表示如下:为解决“黑洞”问题,同时也为了Vector中组成对象能用一致的接口进行调用,Assembly以及Part必须具有后天的“血缘”关系(而不是天然的Object的“血缘”关系)。因而Object的角色最好由自定义的抽象类Component充当,它有一个抽象接口方法cost()。类图语义:凡是Object的子类都可加入Assembly当中。但这样设计后,加入Assembly当中的对象都失去原来的特征,只剩Object的特征,且因为集合结构Vector中对象引用多样性,无法进行准确还原, 好似“黑洞”。针对需求NO5的设计:组合

42、物成本查询上图中的组合关系又可以表示如下:为解决“黑洞”问题,同时也为最终的类图和对应的代码public abstract class Component public abstract Double cost();public class Part extends Component private CatalogueEntry entry; public Part(CatalogueEntry e) entry = e; public double cost() return entry.getcost(); public class Assembly extends Component

43、private Vector components=new Vector(); public void add(Component c) components.add(c); public Double cost() double total = 0.0; Enumeration enum = components.elements(); while(enum.hasMoreElements() total += (Component)enum.nextElement().cost(); return total; 遍历动态绑定,发统一消息抽象类的定义保证了cost()接口在子类定义和对象调用中的一致性强制类型转化用统一的Component的视角看待所有子类对象最终的类图和对应的代码public abstract cla案例1 总结1)当对象数量

温馨提示

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

评论

0/150

提交评论