第6讲 面向对象设计课件

上传人:我*** 文档编号:143952319 上传时间:2020-09-03 格式:PPT 页数:32 大小:1.94MB
返回 下载 相关 举报
第6讲 面向对象设计课件_第1页
第1页 / 共32页
第6讲 面向对象设计课件_第2页
第2页 / 共32页
第6讲 面向对象设计课件_第3页
第3页 / 共32页
第6讲 面向对象设计课件_第4页
第4页 / 共32页
第6讲 面向对象设计课件_第5页
第5页 / 共32页
点击查看更多>>
资源描述

《第6讲 面向对象设计课件》由会员分享,可在线阅读,更多相关《第6讲 面向对象设计课件(32页珍藏版)》请在金锄头文库上搜索。

1、第6讲 面向对象设计,【内容提要】,1. 认识面向对象设计方法学在信息系统开发中的重要作用,2. 大战需求分析,产生需求文档,3. 根据需求文档确定类、类的实例变量,4. 根据需求文档确定对象的状态、活动、操作,5. 确定系统中对象间的协作,6. 利用UML中最常用的用例图、类图、状态图、活动图、通信图、序列图等,建模面向对象的信息系统。,7. 在设计中融入继承、多态,8. UML面向对象设计的Java语言实现,如何设计类?,如何识别类?,对需求文档进行名词/名词短语分析、筛选,去掉与系统无关的、或物理的、或适合做实例变量的名词/名词短语。,如何命名类?,反映设计意图的名词,见名知意,接口名常

2、以able、ible结尾。,如何定义类?,遵循类的内聚原则:对一个概念建模,类中所有方法都与该概念相关。类应易于扩展。类间应避免重复。,如何设计变量?,变量应见名知意。类的实例变量设置为私有的(信息隐藏原则)。boolean变量名表示其代表的值,不应使用双重否定。,如何设计构造函数?,考虑需要初始化的实例变量。,如何设计方法?,如何识别方法?,对需求文档进行动词/动词短语分析。类的实例变量对应有getter方法,最好有setter方法。,如何命名方法?,反映方法实现了什么功能,不应该反映方法如何实现这一功能。方法名不应该模棱两可。有返回值的方法,方法名应反映返回值,有时是get后面加上要返回的

3、值。没有返回值的方法(返回类型为void),方法名应是动词/动词短语。,如何定义方法?,遵循方法的内聚原则:一个方法只做一件事,这件事可能由多个内聚的操作组成。,一个方法可以只修改现有对象的状态(对象实例变量的值),也可以只返回一个值,但是不能同时做这两件事(返回boolean值的方法除外)。,6.1 需求分析,6.1.1 需求文档,描述系统必须实现的功能,定义需要解决的问题。在面向对象设计的过程中,需要频繁参照需求文档。,(1)屏幕提示用户输入账号,(2)用户通过键盘输入19位的账号,(3)屏幕提示用户输入密码,(4)用户通过键盘输入6位的密码,(5)若用户输入了有效的账号和正确的密码,屏幕

4、显示主菜单:,Main menu,1. View my balance,2. Withdraw cash,3. Deposit funds,4. Exit,Enter a choice:,ATM操作步骤,若用户输入了无效的账号或错误的密码,屏幕显示错误提示信息,然后返回步骤(1),重新开始验证过程,验证用户之后,显示以上主菜单。,若用户输入1选择余额查询,则屏幕显示用户账户余额。,若用户输入2选择取款,则发生以下步骤:,查询操作步骤,取款操作步骤,(1)屏幕显示 取款菜单如下:,Withdrawal menu,1 - 100,2 - 500,3 - 1000,4 - 2000,5 - 5000

5、,6 - Cancel transaction,(2)用户通过键盘输入一个菜单选项。,(3)若取款额大于账户余额,则屏幕提示用户重新选择一个较小的金额,然后返回步骤(1);若取款额小于,或等于账户余额,前进到步骤(4);若用户输入6取消取款,则屏幕显示主菜单,等待用户输入。,(4)若出钞机中有足够现金,则前进到步骤(5),否则,屏幕显示消息,说明本机现金不足,提示用户选择较小的取款额,然后返回步骤(1)。,(5)账户余额减去取款额。,(6)出钞机向用户送出所取金额对等的现金。,(7)屏幕提示用户将现金取走。,存款操作步骤,若用户输入3选择存款,则发生以下步骤:,(1)屏幕提示用户输入存款额,或

6、者输入0取消。,(2)用户通过键盘输入存款额或0。,(3)若用户输入了存款额,则前进到步骤(4);若用户输入0,则显示主菜单,等待用户输入。,(4)屏幕提示用户放入现金。,(4)屏幕提示用户放入现金。,(5)存款槽接收存款,用户余额加上存款额。,(6)返回主菜单,等待用户输入。,为明确系统应当做什么,常采用用例建模技术。,用例:参与者使用系统实现的目标,如查询余额、取款。,查询账户余额,取款,存款,从“用户”角色看ATM系统的用例框图,用户,6.1.2 用例框图,6.1.3 设计ATM系统概述,系统:部件的集合,通过部件的交互解决问题。,系统结构:系统的对象及其对象间的相互关系。,系统行为:对

7、象交互时系统如何变化。,UML 2.5标准中定义了13种图,其中6种图与系统结构相关,另外7种图与系统行为相关。下面结合设计过程,逐步引入所需的常见图。,6.2 确定需求文档中的类,6.2.1 明确系统中的类,分析需求文档中对的名词和名词短语,明确系统所需要的类。某些名词与本系统无关,某些名词是系统中类的实例变量,这些都无需建模。,银行 用户 现金 账号 密码 余额 交易 ATM 屏幕 键盘 出钞机 存款槽 账户 银行数据库 余额查询 取款 存款,本系统中的类:,ATM Screen Keypad CashDispenser DepositSolt Account BankDatabase B

8、alanceInquiry Withdrawal Deposit,6.2.2 建模类,表示类的类图,ATM,1,0.1,Executes,Withdrawal,CurrentTransaction,表示类间关联的类图,关联:连接2个类的实线。关联有名称、方向性、重数。 ATM类的一个实例执行Withdrawal类的0个或1个实例。,若ATM对象未执行事务,或已请求了不同类型的事务,则为0个Withdrawal对象。若ATM对象执行取款,则为1个Withdrawal对象。,关联的重数:参与关联的每个类的实例有多少。重数类型见下图:,关联的角色:Withdrawal对象在与ATM关联上下文中扮演的

9、角色。作为当前ATM对象处理的交易,Withdrawal对象参与了ATM对象的一个Executes关联。,类间的组合关系:一个类的实例可由另外的类的实例组合而成。组合关系隐含了整体-部分关系。(1)只有关系中的一个类能代表整体。(2)组合关系中的部分只能与整体存在同样长的时间,并由整体负责创建和销毁。(3)一个部分一次只能属于一个整体,但这个部分可去掉并连接到另外一个整体。,ATM,Screen,Keypad,DepositSlot,CashDispener,1,1,1,1,1,1,1,1,表示组合关联的类图,6.3 确定类的实例变量,注1:这里仅设计类,并未设计类间关联,注2:这里仅建模了基

10、本类型的实例变量,并未建模引用类型的实例变量。,引用类型的实例变量建模 容纳 引用的类 与 引用指向对象所属的类 之间的关联。,ATM类的1个实例参与了Screen类的1个实例之间的组合关系,由此可确定ATM类的引用类型的实例变量:,private Screen screen; / ATMs screen,同理,ATM类的引用类型的实例变量还应有:,private Keypad keypad; / ATMs keypad,private CashDispenser cashDispenser; / ATMs cashDispenser,private DepositSlot depositSl

11、ot; / ATMs depositSlot,6.4 确定对象的状态和活动,在给定时刻,对象的实例变量表达了此刻对象的状态,6.4.1 状态图,展示对象在不同时刻的不同状态,何种事件发生时对象会改变状态。,ATM对象的状态图如下:,状态用圆角矩形表示,里面是状态名称。,初始状态用带单向箭头的实心圆表示。,状态的转换用单向箭头表示。,事件驱动对象从一种状态转换到另一种状态。事件写在单向箭头旁。,6.4.2 活动图,建模程序执行期间对象的工作流(动作及顺序),即事件序列。,BalanceInquiry对象的活动图如下:,动作状态用圆角矩形表示。,动作顺序用连接两个动作状态的单向箭头表示。,初始状态

12、用实心圆表示。,终止状态用空心圆包围的实心圆表示。,Withdrawal对象的活动图如下:,判断点用菱形符号表示的分叉表示。,6.5 确定类的方法,类的方法续表:,确定并建模类的方法的形参:,仅带方法参数及返回值的BankDatabase类:,仅带方法参数及返回值的Account类:,仅带方法参数及返回值的Screen类:,仅带方法参数及返回值的CashDispenser类:,6.6 确定对象间的协作,协作:一个对象向另一个对象通过方法调用,发送消息。,6.6.1 ATM系统中的协作(部分),6.6.2 通信图,对象表示为矩形,名称形式objectName : ClassName,若每种类型只

13、有一个对象,可省略对象名称,通信的对象用实线连接,对象沿箭头方向传递消息,箭头旁的消息名称是接受对象的方法名称,可看成是接收对象向发送对象提供的服务。,执行余额查询的ATM通信图如下:,同步调用用实心箭头表示,异步调用用空心箭头表示,6.6.3 通信图中的消息顺序,显示消息顺序的执行余额查询的ATM通信图如下:,6.6.4 顺序图,Withdrawal执行的顺序图如下:,6.7 编程系统中的类,6.7.1 成员可见性,实例变量 private,构造函数/方法 public,6.7.2 类间导航性,单向导航箭头确定某类可引用哪些类的实例,即该类可调用哪些类的方法。双向导航箭头或都无箭头,则表示双

14、向均可引用/调用。,含 Withdrawal 类 的 ATM 系 统 的 类 图,6.7.3 将UML类图转换为Java代码框架,(1)类图第一栏的名称作为类名,带一个无参构造函数。,(2)类图第二栏即实例变量。,(3)类图中描述的关联声明对其它对象的引用。,(4)类图第三栏即方法的外壳。,6.8 在系统中加入继承和多态(amount为double型),6.8.1 泛化,UML中通过泛化关系建模继承。如:Transaction类是Withdrawal类的泛化;Withdrawal类是Transaction类的特化。,6.8.2 多态,多态使ATM可以用一种巧妙的方式“一致地”执行所有交易(查询

15、 取款 存款 转账 修改密码)。,例如:当用户查询余额时,ATM将Transaction引用到一个新的BalanceInquiry对象。当ATM用它的Transaction引用调用execute( )抽象方法时,调用的却是BalanceInquiry的execute( )具体方法。,多态使系统易于扩展。例如:如果想创建新的交易类型,如转账,则只需创建新的Transaction子类TransferAccounts,TransferAccounts类中必须实现父类Transaction的execute( )抽象方法。,这样系统代码只需做最少的修改,即可让用户从主菜单中选择新的交易类型,让ATM实例

16、化并执行新子类的对象。所有交易都是利用抽象的Transaction引用多态执行的。,反思:为什么必须在Transaction类中定义execute()方法?,(1)概念上,定义了所有交易的行为-执行!,(2)技术上,使ATM可通过Transaction引用多态地调用每个子类对该抽象方法的实现版本。,(3)规则上,强制要求每个子类必须有一个具体的execute( )方法。,6.9 实现ATM系统,创建类:依据 6.2.1 明确系统中的类,建模类:依据最终的 UML类图,编码类:依据6.7编程系统中的类6.8在系统中加入继承多态,编码方法体:依据6.4确定对象的状态和活动 状态图&活动图,6.6确定对象间的协作 通信图&顺序图,ATM系统的类图,引入继承机制后,抽象类Transaction以斜体表示,6.8.3 泛化后的类图,

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > PPT模板库 > PPT素材/模板

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号