《第07讲-类与类图(软件工程)ppt课件.ppt》由会员分享,可在线阅读,更多相关《第07讲-类与类图(软件工程)ppt课件.ppt(37页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、&用例规约:用例的文字描述,用例的核心进行用例阐述o成功场景(正常事件流的描述)o扩展场景(备选事件流)o约束等o需要解决的问题类图以反映类的结构(属性、操作)以及类之间的关系为主要目的,描述了软件系统的结构,是一种静态建模方法类图中的“类”与面向对象语言中的“类”的概念是对应的,是对现实世界中的事物的抽象从上到下分为三部分,分别是类名、属性和操作。类名是必须有的类如果有属性,则每一个属性都必须有一个名字,另外还可以有其它的描述信息,如可见性、数据类型、缺省值等类如果有操作,则每一个操作也都有一个名字,其它可选的信息包括可见性、参数的名字、参数类型、参数缺省值和操作的返回值的类型等Accoun
2、t- balance : double = 1+ Deposit(amount : double) : int+ ComputeInterest() : double可见性-代表private+代表public#代表protected也可以使用图形表示返回值类型操作名称斜体为抽象操作缺省值类名斜体为抽象类属性名称参数列表Washing MachineBrand nameModel nameSerial numberCapacityAdd clothes( )Add detergent( )Remove clothes( )Take dirty clothes as input and prod
3、uce clean clothes as output接口:一组操作的集合,只有操作的声明而没有实现抽象类:不能被实例化的类,一般至少包含一个抽象操作模版类:一种参数化的类,在编译时把模版参数绑定到不同的数据类型,从而产生不同的类Shape(标准图形)Shape+ Draw ()(变体图形)接口Vehicle- fMaxSpeed : float+ Start() : int+ Stop() : int抽象类模版参数模版类(1)关联关系描述了类的结构之间的关系。具有方向、名字、角色和多重性等信息。一般的关 联关系语义较弱。也有两种语义较强,分别是聚合与组合UML表示法角色类的角色是“事物“多重
4、性(用数字和*表示)1*:1个或多个1个类图有1个或多个类1个类属于1个或多个类图ClassDiagramClass+thing+diagram1.*1.*use1.*1.*方向双向关联(省略箭头)名字关系的名字是“使用”实例不带箭头也可以ManagerManagerCompanyCompanyWorks ForManagerManagerCompanyCompanyEmployeeEmployerFourWheeledVehicleFourWheeledVehicleDoorDoor14聚合关系:特殊关联关系,指明一个聚集(整体)和组成部分之间的关系组合关系:语义更强的聚合,部分和整体具有相
5、同的生命周期UML表示法UML表示法ThingClassDiagramRelation(空心菱形)实例类图包含有事物和关系,类图不存在了,事物和关系还可用于其它的类图ClassAssociation(实心菱形)实例类与关联关系之间有组合关系,类不存在了,则相应的关联关系也不存在FourWheeledVehicleFourWheeledVehicleDoorDoor14SeatSeatWheelWheel42. 5(2)泛化关系在面向对象中一般称为继承关系,存在于父类与子类、父接口与子接口之间UML表示法RelationAssociationGeneralizationRealizationDe
6、pendency关联、泛化、实现、依赖都是一种关系ThingClassInterface类、接口都是一种事物(3)实现关系对应于类和接口之间的关系UML表示法类Circle、Rectangle实现了接口Shape的操作Shape+ Draw ()Circle+ Draw ()Rectangle+ Drarw ()(4)依赖关系描述了一个类的变化对依赖于它的类产生影响的情况。有多种表现形式,例如绑定(bind)、友元(friend)等UML表示法模板类Stack定义了栈相关的操作;IntStack将参数T与实际类型int绑定,使得所有操作都针对int类型的数据类Memento和类Originat
7、or建立了友元依赖关系,以便Originator使用Memento的私有变量stateC+C+代码c class lass VehicleVehicle public:public: virtual int virtual int Start() Start() = 0;= 0; virtual int virtual int Stop() Stop() = 0;= 0; virtual int virtual int Run(float Run(float fSpeed) fSpeed) = 0;= 0;private:private: float float fMaxSpeedfMaxSp
8、eed; ; ;JavaJava代码public abstract public abstract class class VehicleVehicle public abstract public abstract int int Start();Start(); public abstract public abstract int int Stop();Stop(); public abstract public abstract int int Run(float Run(float fSpeed);fSpeed); private float private float fMaxSp
9、eedfMaxSpeed; ; Vehicleabstract - fMaxSpeed : float+Start ()Stop ()Run (float fSpeed): int: int: intC+代码class Dialog private: Button btnOK; Button btnCancel; TextBox txtInfo;class Button;class TextBox;组合关系,代码表现为Dialog的属性有Button和TextBox的对象TextBoxButtonDialog- btnOK : Button- btnCancel : Button- txtIn
10、fo : TextBoxJava代码public class SavingsAccount extends Account C+代码class SavingsAccount : public Account ;C+代码class Shape public: virtual void Draw() = 0;class Circle : public Shapepublic: void Draw();private; Point ptCenter; int nRadius;Java代码public interface Shape public abstract void Draw();public
11、 class Circle implements Shapepublic void Draw();private Point ptCenter;private int nRadius;Shape+ Draw ()Circle-ptCenternRadius: Point: int+ Draw ()Rectangle-ptUpperLeftnWidthnHeight: Point: int: int+ Drarw ()在C+语言里面,使用抽象类代替接口,使用泛化关系代替实现关系在Java语言里面,有相应的关键字interface、implements绑定依赖TStack- size : int+
12、 Push(elem : T) : int+ Pop() : int+ GetTop() : const T&IntStackFloatStackC+代码templateclass Stack private: int size;public: int Push(T elem); int Pop(); const T& GetTop();typedef Stack FloatStack;C+代码(编译器生成)class FloatStack private: int size;public: int Push(float elem); int Pop(); const float& GetTo
13、p();1)分析问题域,确定需求;2)寻找类,确定类的含义和职责;3)定义类的属性和操作;4)确定类之间的关系;5)精化类和类间的关系;6)绘制类图。1)收集相关信息n补充的需求规格说明n用例n项目说明文档n其他文档2)分析信息n名词、名词短语 类或属性n动词、动词短语 操作nC-class(类)nR-responsibility(职责)nC-collaboration(协作)nCRC分析法是根据类所要扮演的职责来确定类。1)脑力风暴收集信息。2)关键业务用类表示,其它卡片作为属性。李小平是一个爱书之人,家里各类书籍已过千册,而平时又时常有朋友外借,因此需要一个个人图书管理系统。该系统应该能够
14、将书籍的基本信息按计算机类、非计算机类分别建档,实现按书名、作者、类别、出版社等关键字的组合查询功能。在使用该系统录入新书籍时系统会自动按规则生成书号,可以修改信息,但一经创建就不允许删除。该系统还应该能够对书籍的外借情况进行记录,可对外借情况列表打印。另外,还希望能够对书籍的购买金额、册数按特定时间周期进行统计。 李小平是一个爱书之人,家里各类书籍已过千册,而平时又时常有朋友外借,因此需要一个个人图书管理系统。该系统应该能够将书籍的基本信息按计算机类、非计算机类分别建档,实现按书名、作者、类别、出版社等关键字的组合查询功能。在使用该系统录入新书籍时系统会自动按规则生成书号,可以修改信息,但一
15、经创建就不允许删除。该系统还应该能够对书籍的外借情况进行记录,可对外借情况列表打印。另外,还希望能够对书籍的购买金额、册数按特定时间周期进行统计。 “李小平”、“人”、“家里”很明显是系统外的概念,无须对其建模;而“个人图书管理系统”、“系统”指的就是将要开发的系统,即系统本身,也无须对其进行建模;很明显“书籍”是一个很重要的类,而“书名”、“作者”、“类别”、“出版社”、“书号”则都是用来描述书籍的基本信息的,因此应该作为“书籍”类的属性处理,而“规则”是指书号的生成规则,而书号则是书籍的一个属性,因此“规则”可以作为编写“书籍”类构造函数的指南。“基本信息”则是书名、作者、类别等描述书籍的
16、基本信息统称,“关键字”则是代表其中之一,因此无需对其建模;“功能”、“新书籍”、“信息”、“记录”都是在描述需求时使用到的一些相关词语,并不是问题域的本质,因此先可以将其淘汰掉;“计算机类”、“非计算机类”是该系统中图书的两大分类,因此应该对其建模,并改名为“计算机类书籍”和“非计算机类书籍”,以减少歧义;“外借情况”则是用来表示一次借阅行为,应该成为一个候选类,多个外借情况将组成“外借情况列表”,而外借情况中一个很重要的角色是“朋友”借阅主体。虽然到本系统中并不需要建立“朋友”的资料库,但考虑到可能会需要列出某个朋友的借阅情况,因此还是将其列为候选类。为了能够更好地表述,将“外借情况”改名
17、为“借阅记录”,而将“外借情况列表”改名为“借阅记录列表”;“购买金额”、“册数”都是统计的结果,都是一个数字,因此不用将其建模,而“特定时限”则是统计的范围,也无需将其建模;不过从这里的分析中,我们可以发现,在该需求描述中隐藏着一个关键类书籍列表,也就是执行统计的主体。在使用“名词动词法”寻找类的时候,很多团队会在此耗费大量的时间,特别是对于中大型项目,这样很容易迷失方向。其实在此主要的目的是对问题领域建立概要的了解,无需太过咬文嚼字 书籍 计算机类书籍 非计算机类书籍借阅记录 借阅记录列表 书籍列表书籍类:从需求描述中,可找到书名、类别、作者、出版社;同时从统计的需要中,可得知“定价”也是一个关键的成员变量。书籍列表类:书籍列表就是全部的藏书列表,其主要的成员方法是新增、修改、查询(按关键字查询)、统计(按特定时限统计册数与金额)。借阅记录类:借阅人(朋友)、借阅时间。借阅记录列表类:主要职责就是添加记录(借出)、删除记录(归还)以及打印借阅记录 类设计类类的关系1.1.主要用例的2.2.设计类(属性和方法)3.3.设计类图(类之间的关系)
限制150内