页数:75页文件大小:718.4 KB来源: 面向对象软件工程ppt课件
本课件以模拟自动柜员机系统为完整案例,演示用UML开发一个软件系统的全过程:先给出ATM的硬件组成与取款存款转账查询四类需求,再以用例图、系统启动与关闭、会话、交易四类顺序图和四类交易的合作图建立交互模型,随后用CRC卡逐一说明边界类、控制类与实体类的职责与协作者,给出完整类图、三个控制对象的状态图与包图,最后落到各类的详细设计与部分Java代码实现。
第八章 Developing ATM Example with UML(用 UML 开发 ATM 实例):本章以模拟自动柜员机(ATM)系统为完整案例,演示从需求、用例、交互模型、分析类、类图、状态图到详细设计与代码实现的全过程。
ATM Requirements (1)(ATM 需求一):待设计的软件将控制一台模拟的自动柜员机(ATM),该机具有:
ATM Requirements (2)(ATM 需求二):ATM 必须能向客户提供以下服务:
ATM Requirements (3)(ATM 需求三):
Use Case(用例):本页以用例图给出 ATM 系统的执行者与用例,展示客户与系统之间的功能边界。客户可执行取款、存款、转账与查询四类交易,操作员负责系统的启动与停机。
System Startup Sequence Diagram(系统启动顺序图):本页以顺序图展示 ATM 开机启动过程,包括自检、向操作员索取初始现金、与银行建立连接等消息序列。
System Shutdown Sequence Diagram(系统关闭顺序图):本页以顺序图展示 ATM 关机过程,包括终止与银行的连接、进入停机状态等消息序列。
Session Sequence Diagram(会话顺序图):本页以顺序图展示一次完整会话:插卡、读卡、输入 PIN、校验、选择交易类型、执行交易、退卡等消息序列。
Transaction Sequence Diagram(交易顺序图):本页以顺序图展示一笔交易的执行过程:向客户获取交易细节、组装消息发往银行、等待银行响应、完成交易并打印凭条。
Withdrawal Transaction Collaboration(取款交易合作图):本页以合作图展示取款交易中客户控制台、取款对象、出钞器、消息与凭条等对象之间的链接与消息传递。
Deposit Transaction Collaboration(存款交易合作图):本页以合作图展示存款交易中客户控制台、存款对象、信封接收器、消息与凭条等对象之间的链接与消息传递。
Transfer Transaction Collaboration(转账交易合作图):本页以合作图展示转账交易中客户控制台、转账对象、消息与凭条等对象之间的链接与消息传递。
Inquiry Transaction Collaboration(查询交易合作图):本页以合作图展示查询交易中客户控制台、查询对象、消息与凭条等对象之间的链接与消息传递。
Invalid PIN Extension Collaboration(无效 PIN 扩展合作图):本页以合作图展示 PIN 校验失败时的扩展处理:提示客户重新输入 PIN,超过限定次数后吞卡的交互过程。
Analysis Classes(分析类):本页以图示方式列出 ATM 系统识别出的全部分析类,并按边界类、控制类与实体类三类组织,包括 ATM、CardReader、CashDispenser、CustomerConsole、EnvelopeAcceptor、Log、NetworkToBank、OperatorPanel、ReceiptPrinter、Session、Transaction 及其子类 Withdrawal、Deposit、Transfer、Inquiry,以及 Balances、Card、Message、Receipt、Status 等。
CRC 卡 —— Class ATM(Boundary/entity objects):
CRC 卡 —— Class CardReader(Boundary/entity objects):
CRC 卡 —— Class CashDispenser(Boundary/entity objects):
CRC 卡 —— Class CustomerConsole(Boundary/entity objects):
CRC 卡 —— Class EnvelopeAcceptor(Boundary/entity objects):
CRC 卡 —— Class Log(Boundary/entity objects):
CRC 卡 —— Class NetworkToBank(Boundary/entity objects):
CRC 卡 —— Class OperatorPanel(Boundary/entity objects):
CRC 卡 —— Class ReceiptPrinter(Boundary/entity objects):
CRC 卡 —— Class Session(Control objects):
CRC 卡 —— Abstract Class Transaction(Control objects):
CRC 卡 —— Class Withdrawal(Control objects):
CRC 卡 —— Class Deposit(Control objects):
CRC 卡 —— Class Transfer(Control objects):
CRC 卡 —— Class Inquiry(Control objects):
CRC 卡 —— Class Balances(entity objects):职责为 Represent account balance information returned by bank(表示银行返回的账户余额信息),含总余额与可用余额两部分。
CRC 卡 —— Class Card(entity objects):职责为 Represent information encoded on customer's ATM card(表示客户 ATM 卡上编码的信息),主要是卡号。
CRC 卡 —— Class Message(entity objects):职责为 Represent information to be sent over network to bank(表示通过网络发往银行的信息),包括消息码、卡号、PIN、流水号、转入转出账户与金额。
CRC 卡 —— Class Receipt(entity objects):职责为 Represent information to be printed on a receipt(表示打印在凭条上的信息),含抬头部分、明细部分与余额部分。
CRC 卡 —— Class Status(entity objects):职责为 Represent transaction status information returned by bank(表示银行返回的事务状态信息),可判断是否成功、是否为无效 PIN。
Class Diagram(类图):本页给出 ATM 系统的完整类图,展示 ATM、Session、Transaction 及其四个子类 Withdrawal、Deposit、Transfer、Inquiry,以及各边界类 CardReader、CashDispenser、CustomerConsole、EnvelopeAcceptor、NetworkToBank、OperatorPanel、ReceiptPrinter、Log 与实体类 Card、Message、Balances、Status、Receipt 之间的关联、聚集与继承关系。
Statecharts for Control Objects: ATM(ATM 类的状态图):本页给出 ATM 控制对象的状态图,包含关闭、空闲、服务于客户等状态,以及由开关状态与插卡事件触发的状态转移。
Statecharts for control objects: Session(会话类的状态图):本页给出会话对象的状态图,包含读卡、读 PIN、选择交易、执行交易、退卡与终止等状态及其转移条件。
Statecharts for control objects: Transaction(交易类的状态图):本页给出交易对象的状态图,包含获取交易细节、发往银行、无效 PIN、完成交易、打印凭条、询问是否再做一笔等状态及其转移。
Package Diagram(包图):本页给出 ATM 系统的包结构,按物理设备层、ATM 控制层、事务层与银行业务层等划分包,并展示包之间的依赖关系。
Detail Design of Classes —— ATM 类的属性:
Detail Design of Classes —— ATM 类的操作:
Detail Design of Classes —— CardReader:属性 - atm: ATM;操作 + CardReader(atm: ATM)、+ readCard(): Card、+ ejectCard()、+ retainCard()。
Detail Design of Classes —— CashDispenser:属性 - log: Log、- cashOnHand: Money;操作 + CashDispenser(log: Log)、+ setInitialCash(initialCash: Money)、+ checkCashOnHand(amount: Money): boolean、+ dispenseCash(amount: Money)。
Detail Design of Classes —— CustomerConsole:操作 + CustomerConsole()、+ display(message: String)、+ readPIN(prompt: String): int throws Cancelled、+ readMenuChoice(prompt: String, menu: String[]): int throws Cancelled、+ readAmount(prompt: String): Money throws Cancelled。
Detail Design of Classes —— EnvelopeAcceptor:属性 - log: Log;操作 + EnvelopeAcceptor(log: Log)、+ acceptEnvelope() throws Cancelled。
Detail Design of Classes —— Log:操作 + Log()、+ logSend(message: Message)、+ logResponse(status: Status)、+ logCashDispensed(amount: Money)、+ logEnvelopeAccepted()。
Detail Design of Classes —— NetworkToBank:属性 - log: Log、- bankAddress: InetAddress;操作 + NetworkToBank(log: Log, bankAddress: InetAddress)、+ openConnection()、+ closeConnection()、+ sendMessage(message: Message, out balances: Balances): Status。
Detail Design of Classes —— OperatorPanel:属性 - atm: ATM;操作 + OperatorPanel(atm: ATM)、+ getInitialCash(): Money。
Detail Design of Classes —— ReceiptPrinter:操作 + ReceiptPrinter()、+ printReceipt(receipt: Receipt)。
Detail Design of Classes —— Session:属性 - atm: ATM、- pin: int、- state: int,以及 READING_CARD_STATE、READING_PIN_STATE、CHOOSING_TRANSACTION_STATE、PERFORMING_TRANSACTION_STATE、EJECTING_CARD_STATE、FINAL_STATE 六个 final int 状态常量;操作 + Session(atm: ATM)、+ performSession()、+ setPIN(int pin)。
Detail Design of Classes —— Transaction 类的属性:
Detail Design of Classes —— Transaction 类的操作:
Detail Design of Classes —— Withdrawal:属性 - from: int、- amount: Money;操作 + Withdrawal(atm: ATM, session: Session, card: Card, pin: int)、# getSpecificsFromCustomer(): Message throws Cancelled、# completeTransaction(): Receipt。
Detail Design of Classes —— Deposit:属性 - to: int、- amount: Money;操作 + Deposit(atm: ATM, session: Session, card: Card, pin: int)、# getSpecificsFromCustomer(): Message throws Cancelled、# completeTransaction(): Receipt throws Cancelled。
Detail Design of Classes —— Transfer:属性 - from: int、- to: int、- amount: Money;操作 + Transfer(atm: ATM, session: Session, card: Card, pin: int)、# getSpecificsFromCustomer(): Message throws Cancelled、# completeTransaction(): Receipt。
Detail Design of Classes —— Inquiry:属性 - from: int;操作 + Inquiry(atm: ATM, session: Session, card: Card, pin: int)、# getSpecificsFromCustomer(): Message throws Cancelled、# completeTransaction(): Receipt。
Detail Design of Classes —— AccountInformation:+ ACCOUNT_NAMES: final String[]、+ ACCOUNT_ABBREVIATIONS: final String[],分别给出菜单中显示的账户名称与凭条上打印的账户缩写。
Detail Design of Classes —— Balances:属性 - total: Money、- available: Money;操作 + Balances()、+ setBalances(total: Money, available: Money)、+ getTotal(): Money、+ getAvailable(): Money。
Detail Design of Classes —— Card:属性 - number: int;操作 + Card(number: int)、+ getNumber(): int。
Detail Design of Classes —— Message 类:消息码常量 + WITHDRAWAL、+ INITIATE_DEPOSIT、+ COMPLETE_DEPOSIT、+ TRANSFER、+ INQUIRY: final int;属性 - messageCode: int、- card: Card、- pin: String、- serialNumber: int、- fromAccount: int、- toAccount: int、- amount: int。
Detail Design of Classes —— Message 类的操作:+ Message(messageCode: int, cardNumber: Card, pin: int, serialNumber: int, fromAccount: int, toAccount: int, amount: Money)、+ toString(): String、+ setPIN(pin: int)、+ getMessageCode(): int、+ getCard(): Card、+ getPIN(): String、+ getSerialNumber(): int、+ getFromAccount(): int、+ getToAccount(): int、+ getAmount(): Money。
Detail Design of Classes —— Money:属性 - cents: long;操作 + Money(dollars: int)、+ Money(dollars: int, cents: int)、+ Money(toCopy: Money)、+ toString(): String、+ add(amountToAdd: Money)、+ subtract(amountToSubtract: Money)、+ lessEqual(compareTo: Money): boolean。
Detail Design of Classes —— Receipt:属性 - headingPortion: String[]、# detailsPortion(): String[]、- balancesPortion: String[];操作 # Receipt(atm: ATM, card: Card, transaction: Transaction, balances: Balances)、+ getLines(): Enumeration。
Detail Design of Classes —— Status:操作 + toString(): String、+ isSuccess(): boolean、+ isInvalidPIN(): boolean、+ getMessage(): String。
Code(代码)—— 包 banking 中的 Card 类:
Code —— 包 banking 中的 AccountInformation 类:该类的静态成员包含银行所提供账户的信息,实际与银行通信使用账户类型编号(例如 0 表示列出的第一类账户)。
Code —— 包 banking 中的 Balances 类:public class Balances { public Balances() {} public void setBalances(Money total, Money available) { this.total = total; this.available = available; } public Money getTotal() { return total; } public Money getAvailable() { return available; } private Money total; private Money available; }
Code —— 包 atm.physical 中的 CashDispenser 类:构造方法中将 cashOnHand 初始化为 new Money(0);setInitialCash 设置初始现金;checkCashOnHand 用 amount.lessEqual(cashOnHand) 判断现金是否充足;dispenseCash 先扣减现金,再调用 Simulation.getInstance().dispenseCash(amount) 出钞,并调用 log.logCashDispensed(amount) 记录日志。
Code —— 包 atm.physical 中的 CardReader 类:readCard() 返回 Simulation.getInstance().readCard();ejectCard() 调用 Simulation.getInstance().ejectCard();retainCard() 调用 Simulation.getInstance().retainCard();私有成员 private ATM atm; 由构造方法注入。
Code —— 包 atm.transaction 中的 Inquiry 类:public class Inquiry extends Transaction,构造方法调用 super(atm, session, card, pin)。
Executable(可执行系统):本页展示 ATM 仿真程序可执行版本的运行结果界面,用于验证前面分析与设计模型的正确性。
Executable(可执行系统):本页继续展示 ATM 仿真程序可执行版本的运行画面。
Executable(可执行系统):本页继续展示 ATM 仿真程序可执行版本的运行画面。
Summary(本章小结):Analysis and Design Process with UML(使用 UML 的分析与设计过程):
下载地址:{{downurl}}
{{{a}}}
{{#b}}{{{b}}}
{{/b}} {{/title}} {{#nolog}}登陆注册
{{/nolog}} {{#djsx}}点我刷新
{{/djsx}} {{#gocz}} {{/gocz}} {{#ffqr}} {{/ffqr}}