11.5 ATM自动取款机系统的详细设计与实现
11.5.1 详细设计
详细设计的一个主要任务是为类图中的类添加属性和方法。在ATM自动取款机系统中,需要明确以下内容。
ATM类是一个活动类,也就是说,ATM对象具有自己的线程。
使用特定的信号初始化计算。
Transaction类层次包含抽象类Transaction和4个具体的子类(Withdrawal,Deposit,Transfer和Inquiry)。
Receipt类是一个抽象类,每种事务类型的completeTransaction()方法创建一个实例,包含相关的事务信息。
Status类是一个抽象类。NetworkToBank类的Send()方法构造一个具体的实例,包含发送到银行的相关信息。
表11-22至表11-43是ATM自动取款机系统的相关类的详细设计方法。
表11-22 ATM
|
属 性 |
方 法 |
|
- id: int |
+ ATM(id: int, place: String, bankName: String, bankAddress: InetAddress) |
|
属 性 |
方 法 |
|
- place: String - bankName: String - bankAddress: InetAddress - cardReader: CardReader - cashDispenser: CashDispenser - customerConsole: CustomerConsole - envelopeAcceptor: EnvelopeAcceptor - log: Log - networkToBank: NetworkToBank - operatorPanel: OperatorPanel - receiptPrinter: ReceiptPrinter - state: int - switchOn: boolean - cardInserted: boolean - OFF_STATE: final int - IDLE_STATE: final int - SERVING_CUSTOMER_STATE: final int |
+ run() + switchOn() + switchOff + cardInserted() + getID(): int + getPlace(): String + getBankName(): String + getCardReader(): CardReader + getCashDispenser(): CashDispenser + getCustomerConsole(): CustomerConsole + getEnvelopeAcceptor(): EnvelopeAcceptor + getLog(): Log + getNetworkToBank(): NetworkToBank + getOperatorPanel(): OperatorPanel + getReceiptPrinter(): ReceiptPrinter - performStartup() - performShutdown() |
|
属 性 |
方 法 |
|
- atm: ATM |
+ CardReader(atm: ATM) + readCard(): Card + ejectCard() + retainCard() |
表11-24 CashDispenser
|
属 性 |
方 法 |
|
- atm: ATM - log: Log - cashOnHand: Money |
+ CashDispenser(log: Log) + setInitialCash(initialCash: Money) + checkCashOnHand(amount: Money): boolean + dispenseCash(amount: Money) |
表11-25 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 |
表11-26 EnvelopeAcceptor
|
属 性 |
方 法 |
|
- log: Log |
+ EnvelopeAcceptor(log: Log) + acceptEnvelope() throws Cancelled |
表11-27 Log
|
属 性 |
方 法 |
|
|
+ Log() + logSend(message: Message) + logResponse(status: Status) + logCashDispensed(amount: Money) + logEnvelopeAccepted() |
表11-28 NetworkToBank
|
属 性 |
方 法 |
|
- log: Log - bankAddress: InetAddress |
+ NetworkToBank(log: Log, bankAddress: InetAddress) + openConnection() + closeConnection() + sendMessage(message: Message, out balances: Balances): Status |
表11-29 OperatorPanel
|
属 性 |
方 法 |
|
- atm: ATM |
+ OperatorPanel(atm: ATM) + getInitialCash(): Money |
表11-30 ReceiptPrinter
|
属 性 |
方 法 |
|
|
+ ReceiptPrinter() + printReceipt(receipt: Receipt) |
表11-31 Session
|
属 性 |
方 法 |
|
- atm: ATM - atm: ATM - pin: int - state: int - READING_CARD_STATE: final int - READING_PIN_STATE: final int - CHOOSING_TRANSACTION_STATE: final int -PERFORMING_TRANSACTION_STATE: final int - EJECTING_CARD_STATE: final int - FINAL_STATE: final int |
+ Session(atm: ATM)> + performSession() + setPIN(int pin) |
表11-32 Transaction
|
属 性 |
方 法 |
|
# atm: ATM # session: Session # card: Card # pin: int # serialNumber: int # message: Message # balances: Balances - TRANSACTION_TYPES_MENU: final String [] - nextSerialNumber: int - state: int - GETTING_SPECIFICS_STATE: final int - SENDING_TO_BANK_STATE: final int - INVALID_PIN_STATE: final int - COMPLETING_TRANSACTION_STATE: final int - PRINTING_RECEIPT_STATE: final int - ASKING_DO_ANOTHER_STATE: final int |
# Transaction(atm: ATM, session: Session, card: Card, pin: int) + makeTransaction(atm: ATM, session: Session, card: Card, pin: int): Transaction throws Cancelled + performTransaction(): boolean throws CardRetained + performInvalidPinExtension(): Status throws Cancelled, CardRetained + getSerialNumber(): int # getSpecificsFromCustomer(): Message throws Cancelled # completeTransaction(): Receipt throws Cancelled |
表11-33 Withdrawal
|
属 性 |
方 法 |
|
- from: int - amount: Money |
+ Withdrawal(atm: ATM, session: Session, card: Card, pin: int) # getSpecificsFromCustomer(): Message throws Cancelled # completeTransaction(): Receipt |
表11-34 Deposit
|
属 性 |
方 法 |
|
- to: int - amount: Money |
+ Deposit(atm: ATM, session: Session, card: Card, pin: int) # getSpecificsFromCustomer(): Message throws Cancelled # completeTransaction(): Receipt throws Cancelled |
表11-35 Transfer
|
属 性 |
方 法 |
|
- from: int - to: int - amount: Money |
+ Transfer(atm: ATM, session: Session, card: Card, pin: int) # getSpecificsFromCustomer(): Message throws Cancelled # completeTransaction(): Receipt |
表11-36 Inquiry
|
属 性 |
方 法 |
|
- from: int |
+ Inquiry(atm: ATM, session: Session, card: Card, pin: int) # getSpecificsFromCustomer(): Message throws Cancelled # completeTransaction(): Receipt |
表11-37 AccountInformation
|
属 性 |
方 法 |
|
|
+ ACCOUNT_NAMES: final String[] + ACCOUNT_ABBREVIATIONS: final String [] |
表11-38 Balances
|
属 性 |
方 法 |
|
- total: Money - available: Money |
+ Balances() + setBalances(total: Money, available: Money) + getTotal(): Money + getAvailable(): Money |
表11-39 Card
|
属 性 |
方 法 |
|
- number: int |
+ Card(number: int) + getNumber(): int |
表11-40 Message
|
属 性 |
方 法 |
|
+ WITHDRAWAL: final int + INITIATE_DEPOSIT: final int + COMPLETE_DEPOSIT: final int + TRANSFER: final int + INQUIRY: final int - messageCode: int - card: Card - pin: int - serialNumber: int - fromAccount: int - toAccount: int - amount: int |
+ 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(): int + getSerialNumber(): int + getFromAccount(): int + getToAccount(): int + getAmount(): Money |
表11-41 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 |
表11-42 Receipt
|
属 性 |
方 |