




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、123类图描述了系统中的类及其相类图描述了系统中的类及其相互之间的各种关系,其本质是反映互之间的各种关系,其本质是反映了系统中包含的各种对象类型以及了系统中包含的各种对象类型以及对象间的各种静态关系。对象间的各种静态关系。4概念层类图概念层类图, , 描述应用领域的概念描述应用领域的概念, ,与实现与实现它的软件没有直接的联系它的软件没有直接的联系. .说明层类图说明层类图, , 描述软件的接口部分描述软件的接口部分, , 不是实现不是实现部分部分. .实现层类图考虑实现问题实现层类图考虑实现问题, , 提提供类的细节供类的细节. .可以使用可以使用UMLUML的版型机制标明类图的版型机制标明
2、类图的抽象层次的抽象层次5类名属性操作6应该来自系统的问题域。应该来自系统的问题域。 应该是一个名词,且不应该有前缀或后缀。应该是一个名词,且不应该有前缀或后缀。 分为简单名称和路径名称。分为简单名称和路径名称。 7可见性可见性属性名属性名:类型类型多重性多重性次序次序=初值初值特性特性+ +public# #protected- -privateRoseUML可见性可见性+size: Area = (100,100)#visibility: Boolean = falsecolors: Color3points: Point2.* orderedname: String0.18可见性可见性操
3、作名操作名(参数列表参数列表): 返回值类型返回值类型特性特性+ +public# #protected- -privateRoseUML可见性可见性+display(): Location+hide()#create()-attachXWindow(xwing: XwindowPtr)9常见的类之间的关系包括常见的类之间的关系包括: 关联、聚集、组合、泛化、依赖等关联、聚集、组合、泛化、依赖等.10关联关联(association)是模型元素间的一种语义联系是模型元素间的一种语义联系, 它是对具有它是对具有共同的结构特性、行为特性、关系和语义的链共同的结构特性、行为特性、关系和语义的链(Li
4、nk)的描述的描述.链是关联的实例链是关联的实例关联表示类与类之间的关系关联表示类与类之间的关系链表示对象与对象之间的关系链表示对象与对象之间的关系11/ 类类A的源码的源码public class A public B theB; public A() / 类类B的源码的源码public class B public B() / 类类A的源码的源码public class A public B theB; public A() / 类类B的源码的源码public class B public A theA; public B() 12单向关联:只在一个方向上存在导航表示单向关联:只在一个方向
5、上存在导航表示双向关联:在两个方向上都有导航表示。双向关联:在两个方向上都有导航表示。双向关联的限制:角色的互逆双向关联的限制:角色的互逆13用来描述关联的作用,在含义十分明显时,名字可以省略。用来描述关联的作用,在含义十分明显时,名字可以省略。14关联的两端可以以某种角色参与关联关联的两端可以以某种角色参与关联, 如果不标注角色则隐含如果不标注角色则隐含用类名作为角色名用类名作为角色名.角色的多重性角色的多重性,表示可以有多少个对象参与该关联表示可以有多少个对象参与该关联.15多重性用非负整数的一个子集来表示多重性用非负整数的一个子集来表示0.1,0.*,1.n,如果多重性的上界大于如果多重
6、性的上界大于1,则称为,则称为多值角色多值角色,通常把这种,通常把这种多值角色看成一个集合。多值角色看成一个集合。由于集合是无序的,因此对于多值角色可使用一些由于集合是无序的,因此对于多值角色可使用一些约束约束。16(1)UML没有为约束定义严格的语法。没有为约束定义严格的语法。(2)约束应写在)约束应写在 括号中括号中(3)约束可用自然语言写,也可用程序语言写。)约束可用自然语言写,也可用程序语言写。1718契约式设计是契约式设计是Bertrand MeyerBertrand Meyer在在EiffelEiffel语言中开发语言中开发的一项技术。的一项技术。契约式设计的核心是断言。断言应是一
7、个永真的逻契约式设计的核心是断言。断言应是一个永真的逻辑公式。一旦为假即表示存在错误。辑公式。一旦为假即表示存在错误。断言有三种断言有三种前置条件:描述在操作前应满足的条件。前置条件:描述在操作前应满足的条件。后置条件:描述在操作后应满足的条件。后置条件:描述在操作后应满足的条件。不变式:关于类的断言。对于类的所有实例,无论在不变式:关于类的断言。对于类的所有实例,无论在操作执行前,还是执行后,不变式恒为真。操作执行前,还是执行后,不变式恒为真。19契约式设计方法要求:契约式设计方法要求:类的不变式和后置条件必须适用于所有的子类。类的不变式和后置条件必须适用于所有的子类。子类只可以减弱前置条件
8、。子类只可以减弱前置条件。子类只可以加强后置条件。子类只可以加强后置条件。在在UMLUML中可以使用断言技术。类图中关于类的约束实中可以使用断言技术。类图中关于类的约束实质上就是类的一种不变式。质上就是类的一种不变式。属性约束和操作约束:描述限制或合法返回值属性约束和操作约束:描述限制或合法返回值角色约束:角色约束:order表示目标对象有顺序,表示目标对象有顺序,bag表示目标对表示目标对象可以多次出现。象可以多次出现。2021有时需要为关联设置一些属性、操作及其它特性。有时需要为关联设置一些属性、操作及其它特性。UMLUML用建模元素用建模元素“关联类关联类”来表示。来表示。UMLUML规
9、定:在任何两个相关的对象之间,只能存在规定:在任何两个相关的对象之间,只能存在关联类的一个实例。关联类的一个实例。22/Company.javapublic class Company private String companyName; public Person employee;/Person.javapublic class Person private int personName; public Company employer;/Contract.javapublic class Employ private dataRange Period;23关联类也可以用普通(正式)的类
10、来表示。关联类也可以用普通(正式)的类来表示。 这种表示在描述一个对象与另一个对象之间,需要有这种表示在描述一个对象与另一个对象之间,需要有多于一个的关联类实例时,是可行的。(此时使用关联类多于一个的关联类实例时,是可行的。(此时使用关联类是不行的,因为那样就违反了是不行的,因为那样就违反了UMLUML的规定)的规定)24限定关联是一对多或多对多关联的另一种表达形式。它限定关联是一对多或多对多关联的另一种表达形式。它通过在关联的一方添加限定符,明确地标识在关联的另一通过在关联的一方添加限定符,明确地标识在关联的另一方出现的多个对象中的每一个对象。方出现的多个对象中的每一个对象。25关于一份订单
11、,对于产品中的每一个实例,最多只有一关于一份订单,对于产品中的每一个实例,最多只有一个订单项。个订单项。 限定关联是为了显示关联的查找接口。限定关联是为了显示关联的查找接口。 限定关联的重数是在限定关联的重数是在限定符方面限定符方面的重数。的重数。 引入限定符的一个目的就是降低另一端的多重性。引入限定符的一个目的就是降低另一端的多重性。public class Order public OrderLine getLineItem(Product aProduct)public void addLineItem(Number amount, Product forProduct) 26(1) 自
12、反关联自反关联public class EnginePart public EnginePart theEnginePart;(2) 二元关联二元关联(3) N元关联元关联27聚集聚集(aggregation)是一种特殊的关联是一种特殊的关联, 表示类之间的整体与部表示类之间的整体与部分关系分关系.28组合组合(composition)是一种特殊的聚集是一种特殊的聚集, 强调整体和部分具有相强调整体和部分具有相同的生命期同的生命期.29在概念层,泛化表示类与子类的关系。在概念层,泛化表示类与子类的关系。在说明层,泛化意味着子类的接口必须包括父类型在说明层,泛化意味着子类的接口必须包括父类型接口
13、中的每个元素。接口中的每个元素。在实现层,泛化可以用在实现层,泛化可以用类继承技术类继承技术和和授权技术授权技术来实来实现。现。泛化涉及可替代性,凡适用于父类的代码也同样适用泛化涉及可替代性,凡适用于父类的代码也同样适用于子类。于子类。泛化关系指一般元素和特殊元素之间的分类关系泛化关系指一般元素和特殊元素之间的分类关系.3031操作操作类的包类的包继承继承抽象类抽象类package MyPackage; abstract class MyAbstractClass . . . . package MyPackage; class MyDerivedClass extends MyAbstrac
14、tClass int att; . . . . . void myFunction( ReferencedClass r ) . . MyDerivedClassatt: intmyFunction()MyPackageMyAbstractClass属性属性32用继承机制实现泛化关系的条件用继承机制实现泛化关系的条件一个父类的任何子类都必须具有其父类的所有行为。这种一个父类的任何子类都必须具有其父类的所有行为。这种行为的一致性要求类中的操作不仅在语法上一致,而且在行为的一致性要求类中的操作不仅在语法上一致,而且在语义上语义上也要一致。也要一致。语义上语义上的一致意味着每个对象都应该是其父类的一
15、个对象,的一致意味着每个对象都应该是其父类的一个对象,父类中的所有属性和操作都完全适用于子类对象。父类中的所有属性和操作都完全适用于子类对象。即便子类重载父类中的操作,必须保证这个操作提供与父即便子类重载父类中的操作,必须保证这个操作提供与父类操作类操作同样的服务同样的服务。只不过服务的内容可以更多更具体。只不过服务的内容可以更多更具体。33但是程序员在很多时候,没有严格确保子类与父类在语义但是程序员在很多时候,没有严格确保子类与父类在语义上的一致性。往往违背语义的一致性,采用继承机制借用上的一致性。往往违背语义的一致性,采用继承机制借用一个类的部分行为一个类的部分行为,导致行为继承的错误。导
16、致行为继承的错误。34授权就是把原来属于类授权就是把原来属于类A A的职责或任务转交给类的职责或任务转交给类B B来来完成。类完成。类B B成为类成为类A A不可分割的一个组成部分。不可分割的一个组成部分。35如果修改元素如果修改元素X X会导致另一个元素会导致另一个元素Y Y的修改,则的修改,则Y Y依赖于依赖于X X一个类是另一个类的数据成员类型一个类是另一个类的数据成员类型一个类的方法使用另一个类作为形式参数一个类的方法使用另一个类作为形式参数消息的发送者与接收者之间的关系消息的发送者与接收者之间的关系一个类的方法创建了另一个类的实例一个类的方法创建了另一个类的实例36class MyD
17、ependentClass private MyReferencedClass RC . . . . . void myFunction1( MyReferencedClass r ) . . MyReferencedClass myFunction2( ) . . void myFunction3( ) MyReferencedClass m MyDependentClassatt: intmyFunction()MyReferencedClass依赖依赖(引用一个类引用一个类)or参数参数or 返回类型返回类型or 局部变量局部变量数据成员数据成员37派生属性(关联)指可以由其他属性(关联
18、)计算得到的属性,名字前加”/”.38抽象类抽象类一种不能够被直接实例化的类,也就是说不能够创建一一种不能够被直接实例化的类,也就是说不能够创建一个属于抽象类的对象。个属于抽象类的对象。抽象类可以含有属性和某些方法的具体实现。抽象类可以含有属性和某些方法的具体实现。接口接口一个接口是一个不带实现的类,它只规定类的外部特性。一个接口是一个不带实现的类,它只规定类的外部特性。接口可通过抽象类来描述。抽象类可提供一些实现,但接口可通过抽象类来描述。抽象类可提供一些实现,但主要用于声明接口。主要用于声明接口。39抽象类抽象类接口接口UML用斜体表示抽象元素(包括类、属性、方法等)的名称。用斜体表示抽象
19、元素(包括类、属性、方法等)的名称。40定义独立于平台的抽象窗口类定义独立于平台的抽象窗口类41interface MyAbstractClass . . . . class MyClass implements MyInterface . . . . . 42版型版型(stereotype)是是UML的的3种扩展机制之一。种扩展机制之一。版型是建模人员在已有的构造块上派生出新的构造块,这些新版型是建模人员在已有的构造块上派生出新的构造块,这些新的构造块扩展已有的构造块的语义,与特定问题相关。的构造块扩展已有的构造块的语义,与特定问题相关。版型可以应用于所有类型的模型元素。版型可以应用于所有类
20、型的模型元素。系统预定义的版型系统预定义的版型用户自义的版型用户自义的版型43 定义一种新版型元素的步骤:定义一种新版型元素的步骤: 在基元素的模型符号的基础上,附加一个在基元素的模型符号的基础上,附加一个版型名称版型名称或者指定一个图符。或者指定一个图符。 定义版型元素的语义,其语义必须与基元素的语义一定义版型元素的语义,其语义必须与基元素的语义一致。语义定义可采用形式语言和自然语言进行定义。致。语义定义可采用形式语言和自然语言进行定义。 版型与约束版型与约束 都可用于为模型元素增加语义都可用于为模型元素增加语义 约束侧重于施加某种限制约束侧重于施加某种限制 版型则有分类的意味版型则有分类的
21、意味44 在大多数在大多数OOOO程序设计语言中程序设计语言中, ,都假定对象的分类是单值的和都假定对象的分类是单值的和静态的。静态的。单值:一个对象只能属于一个类。单值:一个对象只能属于一个类。 UML UML允许在概念模型中使用多值的、动态的分类。允许在概念模型中使用多值的、动态的分类。 多值:一个类可以根据多个不同的分类标准,分成多多值:一个类可以根据多个不同的分类标准,分成多个子类族。这样一个对象可以用几个类来描述,而且这些个子类族。这样一个对象可以用几个类来描述,而且这些类之间不必有继承关系。类之间不必有继承关系。 多重继承:一个类可以有多个父类,但一个对象仍然多重继承:一个类可以有
22、多个父类,但一个对象仍然只属于一个类。只属于一个类。 多值与多重继承是不同的。多值与多重继承是不同的。4546在图中在图中“人人”可以按多种标准分成多个类。可以按多种标准分成多个类。多值分类允许将这些按不同标准定义的类进行任意组合,多值分类允许将这些按不同标准定义的类进行任意组合,然后指派一个对象。然后指派一个对象。按同一种标准划分的子类,彼此之间是互斥的。按同一种标准划分的子类,彼此之间是互斥的。completecomplete表示分类后得到的子类是一个全集。这意味着表示分类后得到的子类是一个全集。这意味着父类的任何实例都必须是这个(全集)分类中某个子类的父类的任何实例都必须是这个(全集)分
23、类中某个子类的一个实例。一个实例。47合法的类组合合法的类组合(A A)(男人,理疗师)(男人,理疗师)(B B)(女人,病人)(女人,病人)(C C)(女人,病人,护士)(女人,病人,护士)(D D)(女人,医生,外科医生)(女人,医生,外科医生)不合法的类组合不合法的类组合(A A)(病人,医生)(病人,医生) 注:缺全集类注:缺全集类(B B)(男人,医生,护士)注:含两个互斥的类)(男人,医生,护士)注:含两个互斥的类多值对象就是指这些类组合的实例对象多值对象就是指这些类组合的实例对象48动态分类动态分类(1 1)动态分类允许在同类的子类集中,动态地改变对象所属)动态分类允许在同类的子
24、类集中,动态地改变对象所属的类。的类。(2 2)静态分类不允许对象改变类型。)静态分类不允许对象改变类型。49UML中三种主要的类版型中三种主要的类版型边界类边界类, boundary class控制类控制类, control class实体类实体类, entity class引入多种类版型帮助分析和设计人员确定系统中的类引入多种类版型帮助分析和设计人员确定系统中的类. .50边界类位于系统与外界的交界处边界类位于系统与外界的交界处,包括包括:用户界面类用户界面类, , 如如: : 窗口、对话框、报表类等窗口、对话框、报表类等通讯协议类通讯协议类, , 如如: TCP/IP: TCP/IP的类
25、的类直接与外部设备交互的类直接与外部设备交互的类直接与外部系统交互的类直接与外部系统交互的类边界类的边界类的UML表示方法表示方法:51通过用例图可以确定需要的边界类通过用例图可以确定需要的边界类, 每个每个Actor/User case对至少需要一个边界类对至少需要一个边界类.但并不是每个但并不是每个Actor/Use case都都需要生成惟一边界需要生成惟一边界类类, 多个多个actor启动启动同一同一use case可以可以使用同一边界类使用同一边界类.52实体类保存要放进持久存储体实体类保存要放进持久存储体( (数据库数据库/ /文件等文件等) )的信息的信息. .实体类通过事件流和交
26、互图发现实体类通过事件流和交互图发现, , 采用目标领域术语命名采用目标领域术语命名. .通常实体类对应数据库中的表通常实体类对应数据库中的表, , 其属性对应表的字段其属性对应表的字段, , 但实体但实体类与数据库中的表不一定是一一对应关系类与数据库中的表不一定是一一对应关系. .53控制类是负责管理或控制其他类工作的类控制类是负责管理或控制其他类工作的类. .每个用例通常有一个控制类每个用例通常有一个控制类, , 控制用例中的事件顺序控制用例中的事件顺序, , 控制类控制类也可以在多个用例间共用也可以在多个用例间共用. . 控制较少接收消息控制较少接收消息, , 发出较多消息发出较多消息.
27、 .54根据用例描述中的名词确定候选类根据用例描述中的名词确定候选类.使用使用CRC分析法寻找类分析法寻找类, CRC指指: 类类(class)、职责、职责(responsibility)、协作、协作(collaboration).根据边界类、控制类和实体类的划分来帮助发现类根据边界类、控制类和实体类的划分来帮助发现类.参考设计模式来确定类参考设计模式来确定类.根据软件开发过程的指导寻找类根据软件开发过程的指导寻找类, 如如:RUP等等.寻找类的方法寻找类的方法构造类图时注意构造类图时注意不要试图使用所有的符号不要试图使用所有的符号.不要过早陷入细节不要过早陷入细节, 根据阶段、层次逐步细化根
28、据阶段、层次逐步细化.构造完成要将模型与目标问题对照验证其是否合理构造完成要将模型与目标问题对照验证其是否合理.55研究分析问题领域研究分析问题领域, 确定系统需求确定系统需求.确定类确定类, 明确类的含义和职责明确类的含义和职责, 确定属性和操作确定属性和操作.确定类之间的关系确定类之间的关系.调整和细化类及类之间的关系调整和细化类及类之间的关系.绘制类图并增加相应的说明绘制类图并增加相应的说明.建立类图的步骤建立类图的步骤56建立类图的过程就是对领域及其解决方案的分析与设建立类图的过程就是对领域及其解决方案的分析与设计过程计过程.领域分析包括领域分析包括:通过对某一领域中的已有应用系统、理
29、论、技术、通过对某一领域中的已有应用系统、理论、技术、开发历史等的研究开发历史等的研究, 来标识、收集、组织、分析和来标识、收集、组织、分析和表示领域模型及软件体系结构的过程表示领域模型及软件体系结构的过程;根据这一过程得到的结果根据这一过程得到的结果.57开闭原则开闭原则(Open/Closed Principle, OCP)Liskov替换原则替换原则(Liskov Substitution Principle, LSP)依赖倒置原则依赖倒置原则(Dependency Inversion Principle, DSP)接口分离原则接口分离原则(Interface Segregation P
30、rinciple, ISP)58开闭原则指的是一个模块在开闭原则指的是一个模块在扩展性扩展性方面应该是开放的方面应该是开放的, 而在更而在更改性方面应该是改性方面应该是封闭封闭的的.其目的是在写模块时其目的是在写模块时,应该尽量使得模块可以扩展应该尽量使得模块可以扩展, 并且在扩展并且在扩展时不需要对模块的源代码进行修改时不需要对模块的源代码进行修改.为达到开闭原则为达到开闭原则, 设计时就尽量使用接口进行封闭设计时就尽量使用接口进行封闭, 采用抽象采用抽象机制机制, 并利用并利用OO中的多态性技术中的多态性技术.59OCP的关键在于抽象的关键在于抽象抽象技术:抽象技术:abstract cl
31、ass, Interface抽象预见了可能的所有扩展(闭)抽象预见了可能的所有扩展(闭)由抽象可以随时导出新的类(开)由抽象可以随时导出新的类(开)60例例: 某输出类某输出类Output中包含一个中包含一个output方法方法, 该方法可能使用多种该方法可能使用多种不同的打印机不同的打印机, 如如: HP、EPSON、Canon,每种打印机都有不同,每种打印机都有不同的的print方法。方法。设计方案设计方案1 1void output(int printType) if(printType=1) Hp prt = new Hp(); prt.print(args); else if(pri
32、ntType=2) Epson prt = new Epson(); prt.print(args); else 61设计方案设计方案2 2void output(Printer printer) printer.print(args); 如何增加打印机类型如何增加打印机类型? ?62LSP(The Liskov Substitution Principle, Liskov替换原替换原则)则) “若对于类型若对于类型S的任一对象的任一对象o1,均有类型,均有类型T的对象的对象o2存在,使得在存在,使得在T定义的所有程序定义的所有程序P中,用中,用o1替换替换o2之之后,程序的行为不变,则后,程
33、序的行为不变,则S是是T的子类型的子类型”如果在任何情况下,子类(或子类型)或实现类与如果在任何情况下,子类(或子类型)或实现类与基类都是可以互换的,那么继承的使用就是合适的。基类都是可以互换的,那么继承的使用就是合适的。为了达到这一目标,为了达到这一目标,“”6364ABABC6566DIP(依赖倒置原则,(依赖倒置原则,The Dependency Inversion Principle)高层模块不应该依赖于低层模块。二者都应该依赖高层模块不应该依赖于低层模块。二者都应该依赖于抽象于抽象抽象不应该依赖于细节。细节应该依赖于抽象抽象不应该依赖于细节。细节应该依赖于抽象针对接口编程,不要针对实
34、现编程针对接口编程,不要针对实现编程67依依赖赖的的方方向向高级商业逻辑中层模块中层模块中层模块底层模块底层模块底层模块底层模块底层模块68依依赖赖的的方方向向依依赖赖的的方方向向高级商业逻辑抽象层抽象层抽象层实现层实现层实现层实现层实现层6970ISP( The Interface Segregation Principle,接口隔离,接口隔离原则)原则)客户不应该依赖他们不用到的方法,只给每个客户客户不应该依赖他们不用到的方法,只给每个客户它所需要的接口它所需要的接口为了避免为了避免“肥接口肥接口(fat interface)”,应当以一个类实,应当以一个类实现多个接口,而各客户仅仅获知必
35、须的接口现多个接口,而各客户仅仅获知必须的接口7172一个真实的例子一个真实的例子: 某全文查找引擎的系统设计某全文查找引擎的系统设计.违反接口分离原则违反接口分离原则73探索器接口探索器接口索引生成器接口索引生成器接口搜索结果集接口搜索结果集接口功能接口的划分:功能接口的划分:74遵守遵守OO设计原则设计原则.不同类中相似方法的名称应该相同不同类中相似方法的名称应该相同.遵守已有的约定俗成的习惯遵守已有的约定俗成的习惯.尽量减少消息模式的数目尽量减少消息模式的数目. 只要可能只要可能,使消息具有一致使消息具有一致的模式的模式, 以利于理解以利于理解.设计简单的类设计简单的类. 类的职责要明确
36、类的职责要明确, 不要在类中提供太多不要在类中提供太多的服务的服务, 应该从类名可以比较容易推断出用途应该从类名可以比较容易推断出用途.泛化结构的深度要适当泛化结构的深度要适当.定义简单的方法定义简单的方法. 一个方法内不要包含过多的功能一个方法内不要包含过多的功能.75好的设计的变动轨迹好的设计的变动轨迹: :76对象图表示地组对象及它们之间的关系对象图表示地组对象及它们之间的关系. 是系统详细状态在是系统详细状态在某一时刻的快照某一时刻的快照, 表示复杂的类图的一个实例表示复杂的类图的一个实例.对象图的建模元素对象图的建模元素: 对象和链对象和链对象图在对象图在UML建模中使用有限建模中使
37、用有限, 用于表达数据结构的示例用于表达数据结构的示例, 了解了解系统在某个特定时刻的具体情况系统在某个特定时刻的具体情况.77对象名:由于对象是一个类的实例,因此其名称的格式对象名:由于对象是一个类的实例,因此其名称的格式是是“对象名:类名对象名:类名”,这两个部分是可选的,但如果是,这两个部分是可选的,但如果是包含了类名,则必须加上包含了类名,则必须加上“:”,另外为了和类名区分,另外为了和类名区分,还必须加上下划线。还必须加上下划线。属性:由于对象是一个具体的事物,因此所有的属性值属性:由于对象是一个具体的事物,因此所有的属性值都已经确定,因此通常会在属性的后面列出其值。都已经确定,因此
38、通常会在属性的后面列出其值。78类图类图对象图对象图小王小王是一个爱书之是一个爱书之人人,家里家里各类各类书籍书籍已过千册,而平时已过千册,而平时又时常有又时常有朋友朋友外借,因此需要一个外借,因此需要一个个人图书管理系统个人图书管理系统。该系统应该能够将书籍的该系统应该能够将书籍的基本信息基本信息按按计算机类计算机类、非计算非计算机类机类分别建档,实现按分别建档,实现按书名书名、作者作者、类别类别、出版社出版社等等关关键字键字的组合查询的组合查询功能功能。在使用该系统录入。在使用该系统录入新书籍新书籍时时系统系统会自动按会自动按规则规则生成生成书号书号,可以修改,可以修改信息信息,但一经创建
39、就,但一经创建就不允许删除。该系统还应该能够对书籍的外借情况进行不允许删除。该系统还应该能够对书籍的外借情况进行记录记录,可对,可对外借情况列表外借情况列表打印。另外,还希望能够对书打印。另外,还希望能够对书籍的籍的购买金额购买金额、册数册数按按特定时间周期特定时间周期进行统计进行统计 “小王小王”、“人人”、“家里家里”很明显是系统外很明显是系统外的概念,无须对其建模;的概念,无须对其建模;而而“个人图书管理系统个人图书管理系统”、“系统系统”指的就是指的就是将要开发的系统,即系统本身,也无须对其进将要开发的系统,即系统本身,也无须对其进行建模;行建模;很明显很明显“书籍书籍”是一个很重要的
40、类,而是一个很重要的类,而“书名书名”、“作者作者”、“类别类别”、“出版社出版社”、“书书号号”则都是用来描述书籍的基本信息的,因此则都是用来描述书籍的基本信息的,因此应该作为应该作为“书籍书籍”类的属性处理,而类的属性处理,而“规则规则”是指书号的生成规则,而书号则是书籍的一个是指书号的生成规则,而书号则是书籍的一个属性,因此属性,因此“规则规则”可以作为编写可以作为编写“书籍书籍”类类构造函数的指南。构造函数的指南。“基本信息基本信息”则是书名、作者、类别等则是书名、作者、类别等描述书籍的基本信息统称,描述书籍的基本信息统称,“关键字关键字”则是代表其中之一,因此无需对其建模则是代表其中
41、之一,因此无需对其建模“功能功能”、“新书籍新书籍”、“信息信息”、“记录记录”都是在描述需求时使用到的一些都是在描述需求时使用到的一些相关词语,并不是问题域的本质,因此相关词语,并不是问题域的本质,因此先可以将其淘汰掉;先可以将其淘汰掉;“计算机类计算机类”、“非计算机类非计算机类”是该系是该系统中图书的两大分类,因此应该对其建统中图书的两大分类,因此应该对其建模,并改名为模,并改名为“计算机类书籍计算机类书籍”和和“非非计算机类书籍计算机类书籍”,以减少歧义;,以减少歧义;“外借情况外借情况”则是用来表示一次借阅行为,应则是用来表示一次借阅行为,应该成为一个候选类,多个外借情况将组成该成为
42、一个候选类,多个外借情况将组成“外外借情况列表借情况列表”,而外借情况中一个很重要的角,而外借情况中一个很重要的角色是色是“朋友朋友”借阅主体。虽然到本系统中并借阅主体。虽然到本系统中并不需要建立不需要建立“朋友朋友”的资料库,但考虑到可能的资料库,但考虑到可能会需要列出某个朋友的借阅情况,因此还是将会需要列出某个朋友的借阅情况,因此还是将其列为候选类。为了能够更好地表述,将其列为候选类。为了能够更好地表述,将“外外借情况借情况”改名为改名为“借阅记录借阅记录”,而将,而将“外借情外借情况列表况列表”改名为改名为“借阅记录列表借阅记录列表”;“购买金额购买金额”、“册数册数”都是统计的结果,都都是统计的结果,都是一个数字,因此不用将其建模,而是一个数字,因此不用将其建模,而“特定时特定时限限”则是统计的范围,也无需将其建模;不过则是统计的范围,也无需将其建模;不过从这里的分析中,我们可以发现,在该需求描从这里的分析中,我们可以发现,在该需求描述中隐藏着一个关键类述中隐藏着一个关键类书籍列表,也就是执书籍列表,也就是执行统计的主体。行统计的主体。在使用在使用“名词动词法名词动词法”寻找类的时候,很多团
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 山师宪法学试题及答案
- 腰痛病的护理试题及答案
- 电商物流“最后一公里”配送无人机配送法规与政策研究报告
- 江西省赣州市寻乌县重点名校2024-2025学年初三年级第二学期期末语文试题试卷含解析
- 基于大数据的2025年人工智能医疗影像诊断质量控制研究报告
- 山东省枣庄台儿庄区四校联考2024-2025学年中考预测密卷(1)(英语试题)试卷含答案
- 电动汽车电池热管理技术余热回收利用与2025年产业趋势报告
- 微机原理测试题及答案
- 江南大学《电子商务综合》2023-2024学年第二学期期末试卷
- 江苏旅游职业学院《合唱与指挥I》2023-2024学年第一学期期末试卷
- 【浅谈温州万豪酒店餐饮食品安全管理的问题与措施(论文)11000字】
- 2022年中国石油大学《化工原理二》完整答案详解
- 形势与政策电气 个人答案
- PHOTOSHOP图形图像处理课程标准
- 国开电大《Java语言程序设计》形考任务三答案
- 2022年全国大学生英语竞赛C类试题
- 装饰、装修施工方案
- 远盛水工重力坝辅助设计系统用户使用手册
- 矿井瓦斯抽采
- 立法学完整版教学课件全套ppt教程
- 五年级下册科学说课课件 -1.2 沉浮与什么因素有关 |教科版 (共28张PPT)
评论
0/150
提交评论