您所在的位置: 首页>>读书频道>>设计开发>>软件工程>>

11.5.1 详细设计

http://book.51cto.com  2008-06-22 11:35  余金山  电子工业出版社  我要评论(0)

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()

表11-23  CardReader

   

   

- 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