(****************************************** ** Bank Model ISL Definition ** ** ** ** by Y. Akamatsu ** ** ** ** $Revision: 1.5 $ ** ** $Author: akamatsu $ ** ** $Date: 1996/10/30 19:00:18 $ ** ******************************************) INTERFACE IBankModel IMPORTS IDLInterchange, IAny END; (****************************************** ** ** ** definition of the basic types ** ** ** ******************************************) TYPE AccountList = SEQUENCE OF Account; TYPE TransactionList = SEQUENCE OF Transaction; TYPE CheckList = SEQUENCE OF Check; TYPE CString = SEQUENCE OF SHORT CHARACTER; TYPE TString = OPTIONAL CString; (****************************************** ** ** ** ilu exceptions ** ** ** ******************************************) EXCEPTION BankError : CString; EXCEPTION AccountError : CString; EXCEPTION CurrencyError : CString; (****************************************** ** ** ** ilu Bank class ** ** ** ** An instance of this class represents ** ** a bank such as Stanford Bucks Bank. ** ** But please note that the instance is ** ** NOT an ATM.So only a single instance ** ** should be generated on the server ** ** side. ** ** ** ******************************************) TYPE Bank = OBJECT METHODS (* Creates a new account and return the instance of the Account *) OpenAccount(pName : CString, pInitBalance : Amount) : Account RAISES BankError END, (* Remove a specified account from the Bank Repository *) CloseAccount(pAccount : Account) RAISES BankError END, (* Get a list of the All Account instances *) GetAllAccounts() : AccountList, (* Get an Account instance by the specified ID *) GetAccountByNumber(pAccountNumber : LONG INTEGER) : Account RAISES BankError END, (* Get a list of Account instances by the specified name *) GetAccountsByName(pName : CString) : AccountList, (* Get a name of the bank *) GetName() : CString, (* Flush the cache. Must be called at the end of the client transaction *) Flush(), (* Get a constrainCollection instance for the Accounts *) GetAccountCollection() : IDLInterchange.CCollection, (* Get a constrainCollection instance for the Transactions *) GetTransactionCollection() : IDLInterchange.CCollection, (* Get a constrainCollection instance for the Checks *) GetCheckCollection() : IDLInterchange.CCollection END; (****************************************** ** ** ** ilu Accoount class ** ** ** ** An instance of this class represents ** ** an account of the Bank. ** ** This class is a subclass of DLColle- ** ** ction.Item actually. But on this ** ** interface, it was encapsulated. ** ** ** ******************************************) TYPE Account = OBJECT METHODS (* Deposit Money to this account *) Deposit(pAmount: Amount, pDescription: TString) RAISES CurrencyError END, (* Withdraw Money from this account *) Withdraw(pAmount: Amount, pDescription: TString) RAISES AccountError, CurrencyError END, (* Get a list of all the instances of the Transaction *) GetAllTransactions() : TransactionList, (* Get a name of the person of this account *) GetName() : CString, (* Get an account number *) GetAccountNumber() : LONG INTEGER, (* Get a current balance for this account Note that the return type is IBankModel.Amount, not BankMode.Amount *) GetBalance() : Amount, (* Get a list of the instances of the USED checks *) GetAllChecks() : CheckList, (* Get a list of the instances of the check which was paid to pName *) GetChecksByPayee(pName : CString) : CheckList, (* Get a list of the instances of the check whose reference string is pReference *) GetChecksByReference(pReference : CString) : CheckList, (* Create a new check for this account *) MakeCheck(pAmount: Amount, pToWhom: TString, pReference: TString) : Check, (* Deposit other person's check into this account *) DepositCheck(pCheck : Check) RAISES AccountError, CurrencyError END, (* a string expression for this account *) Describe() : CString END; (****************************************** ** ** ** ilu Transaction class ** ** ** ** An instance of this class represents ** ** a transaction for the accounts. ** ** This class is a subclass of DLColle- ** ** ction.Item actually. But on this ** ** interface, it was encapsulated. ** ** ** ******************************************) TYPE Transaction = OBJECT METHODS (* Get an account number for this transaction *) GetAccountNumber() : LONG INTEGER, (* Get an transaction number for this transaction *) GetTransactionNumber() : INTEGER, (* Get a date of this transaction. Date is sec. represented *) GetDate() : REAL, (* Get a description of this transaction *) GetDescription() : CString, (* Get an instance of the Amount of this transaction *) GetAmount() : Amount, (* Get a string representation of this transaction *) Describe() : CString END; (****************************************** ** ** ** ilu Check class ** ** ** ** An instance of this class represents ** ** a check of the accounts ** ** Please note that this class will be ** ** stored into the shelve only when ** ** the payment is completed. ** ** This class is a subclass of DLColle- ** ** ction.Item actually. But on this ** ** interface, it was encapsulated. ** ** ** ******************************************) TYPE Check = OBJECT METHODS (* Get a reference ID string of this check *) GetReference() : CString, (* Get a date of this check. Date is sec. represented *) GetDate() : REAL, (* Get a name to whom this check will be paid. *) GetToWhom() : CString, (* Get an account number of the person who issued this check *) GetAccountNumber() : LONG INTEGER, (* Get an instance of the Amount of this check *) GetAmount() : Amount, (* Get a number of this check *) GetCheckNumber() : INTEGER, (* Get a string representation of this check *) Describe() : CString END; (****************************************** ** ** ** ilu Amount record ** ** ** ** This record is an representation of ** ** the digital currency. ** ** In the bank model I have customized ** ** this class to be more feasible. ** ** ** ******************************************) TYPE Amount = RECORD (* Number is a numerical part of the money *) Number : REAL, (* Units is a currency unit. ex. 'USD', 'JPY', etc. *) Units : CString END;