1、类图与对象图,,讲授内容,类和对象 类的属性及表示 类的操作及表示 类的发现 小结,类和对象,在需求分析阶段,分析员分析具体的对象,对具体对象经过自己的思维抽象,在软件的分析设计阶段,创建了类。 但在软件的实现编码阶段,类是生成对象的模板,必须生成具体对象,才能实现代码的功能。,类的定义,Rumbaugh:类是具有相似结构,行为和关系的一组对象的描述. 类是人类思维的方式. 具体到抽象. 类是生成对象的模板,对象的定义,对象是类的实例.Wangxiao是学生类的实例 对象名: Wangxiao 对象的状态:性别:男身高:180cm体重:68kg 对象的功能:回答身高回答体重打篮球,UML表示类
2、的符号,类的组成-属性,属性:描述了类的实例(对象)所具有的一系列特征值。可以有0到多个属性。 属性的代码表现:类中的成员变量。,class Student string name; string no;int age; student s1 = new student(); s1.name = “wangxiao”; s1.no = “200901101”; s1.age = 21;,student s2 = new student(); s2.name = “liyan”; s2.no = “200901102”; s2.age = 22;,在学生信息管理系统中,我们根据现实中具体的对象,
3、经过了“抽象”,设计了“学生类”。“学生类”是个模板,在程序中创造了两个对象分别是s1 和s2 。s1和s2 的属性值不同,属性的要素,属性可见性: public(+), private(-), protected(#); 属性的类型:基本数据类型 int,float,char; 属性的名称:名字; 属性的多重性:2 . . *表示该属性值有2个或多个。,属性声明的例子,+size:area=(100,100) #visibility:boolean=false -fillcolor:color points:point2* ordered /多重性 name:string01,代码中属性-类
4、成员变量,class Student string name; string no;int age; ,类的属性有多少,思考:我们将现实世界的事物抽象为“类”后,究竟用多少个属性来描述呢? 思考:设计类时属性应该如何“收敛”?,类属性的UML表示,类的组成-操作,操作(Operation):类能做的事情,或者其它的类能对该类做的事情。 例如:1微波炉类 “开机”、“关机”操作,属于什么? “加热” 操作,属于什么? 2洗衣机类 “打开”操作,是属于什么? “洗衣服” 操作,属于什么? “添加衣服”,“取走衣服”,属于什么?,代码中类的操作的实现,Class student private st
5、ring name;.public string getname() return name;public void setname(string ss) name = ss ; ,类的操作的UML表示,可见性,Java中为了保证类的封装性,成员变量访问控制一般是设计为private 为了便于其他类的对象访问某些成员变量,必须提供相应的“接口”,这些“接口”就是public 的成员方法。,寻找类,查看事件流中的名词 交互图中的对象,确定类的属性,需求中的名词,用户名、密码 事件流中的名词部分为属性,确定类的操作,创建交互图时已完成操作的寻找 作用于属性的操作实现:实现业务功能管理:管理对象的创
6、建和构造访问:查询或修改某个类的属性,分析事件流,通过ATM机,用户插入银行卡; ATM系统从卡上读出帐号、加密密码、并用主银行系统验证帐号; 用户输入密码,ATM系统根据读出的卡上加密密码,对密码进行验证; 用户按“取款”按钮,并输入取款数量; ATM系统通知主银行系统,传递用户帐号和取款数量,并接收返回的确认信息和用户帐户余额; ATM系统输出现金、银行卡和显示帐户余额的收据; ATM系统记录事务到日志文件,事件流中的名词,用户(customer)、银行卡(Account)、ATM机(ATM) 帐号(ID)、密码(password)、取款数量(drawmoneycount)、余额(left
7、),事件流中的动词,读(get)、验证(verify)、显示(show)、输入密码(inputpassword)、输入取款数目(inputcount)、记录(record),UML对类的表示,识别类,冗余的同义词(同一概念,不同表达) 在系统责任以外的名词(要界定本系统的责任而不是外部系统的责任) 重新落实模糊名词(要么消除,要么重新界定) 实质上是操作或是属性的名词(问一问:有没有结构,有没有行为),识别属性,属性是否描述的类对象的特征; 属性是否存在冗余; 是否有复杂属性; 是否有一对多的属性; 属性是否对类的对象都有意义,识别属性,是否有复杂属性,如果属性address内容包括:省、城市
8、、 街道、邮编等,放在类中还是拿出来取决于是1:1的关系还是1:N的关系。1:1可以放在原类内展开; 1:N独立出去形成关联。,是否对所有的对象都有意义,识别属性,关系-关联,类与类之间的关系 一个事物的对象与另一个事物的对象间的关系,关联的代码形式,public class A public B theB;/* roseuid 45465ABE00BB*/public A() ,public class B public A theA;/* roseuid 45465ABE0109*/public B() ,代码中为代码标识号,作用是标识代码中的类、操作和其它模型元素,单向关联和双向关联,关联名,描述关联的作用 通常是动词或者动词短语 简洁,关联的角色,关联两端的类以某种角色参与关联 “公司”类与“普通人”类之间存在关联后,表示“普通人”类是在该公司工作。,关联角色的多重性,多重性:指明当另一端的对象取定后,这一端可以有的对象个数的范围。 0 01 0* 1 1* *,作业,作业:从选课系统中的事件流中发现类及类的属性和操作。 实验:将作业中所有的类用ROSE画出,掌握ROSE基本使用方法。,