Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 18 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
18
Dung lượng
583,82 KB
Nội dung
Tài khoản ngân hàng Lê Hồng Phương phuonglh@gmail.com Khoa Toán-Cơ-Tin học, Trường Đại học Khoa học Tự nhiên, ĐHQG Hà Nội Nội dung ● Giới thiệu ● Đặc tả ● Thiết kế ● Cài đặt 2012-2013 Object-Oriented Programming: Bank Accounts Giới thiệu ● ● Mô số loại tài khoản ngân hàng thường gặp Mục tiêu kiến thức: – Kế thừa (inheritance) – Đa hình (polymorphism) – Đóng gói (encapsulation) 2012-2013 Object-Oriented Programming: Bank Accounts Đặc tả ● Ngân hàng cung cấp cho khách hàng loại tài khoản sau: – Tài khoản vãng lai, gọi tài khoản séc: khơng có lãi suất, tháng miễn phí số lượng nhỏ giao dịch, giao dịch bổ sung phải trả phí – Tài khoản tiết kiệm: có lãi hàng tháng theo lãi suất ấn định trước 2012-2013 Object-Oriented Programming: Bank Accounts Phân tích ● ● ● Mọi loại tài khoản cần hỗ trợ chức sau: – Truy vấn số dư tài khoản – Nạp tiền vào rút tiền khỏi tài khoản – Chuyển tiền hai tài khoản Tài khoản vãng lai cần có chức trừ phí giao dịch Tài khoản tiết kiệm cần có chức tính trả lãi 2012-2013 Object-Oriented Programming: Bank Accounts Thiết kế: Sơ đồ lớp 2012-2013 Object-Oriented Programming: Bank Accounts Thiết kế: BankAccount ● Mỗi BankAccount có số dư (balance) – ● Chú ý: số ngân hàng cho phép số dư âm Các thao tác tài khoản: – Truy vấn số dư: double getBalance() – Nạp tiền: void deposit(double) – Rút tiền: void widthraw(double) – Chuyển tiền tới tài khoản khác: void transfer(double, BankAccount) 2012-2013 Object-Oriented Programming: Bank Accounts Thiết kế: CheckingAccount ● Mỗi CheckingAccount cần có khả theo dõi số lần giao dịch thực tài khoản (rút tiền, nạp tiền) để tính phí – ● ● Có thêm trường liệu int transactionCount Cần sửa đổi hành vi thao tác rút tiền, nạp tiền cho lần tài khoản thực thao tác tăng transactionCount lên thêm Có thêm phương thức trừ phí giao dịch: – 2012-2013 void deductFees() Object-Oriented Programming: Bank Accounts Thiết kế: SavingAccount ● Mỗi SavingAccount cần có thêm thơng tin lãi suất chức cộng thêm tiền lãi cho tài khoản – Có thêm trường liệu double interestRate – Có thêm phương thức void addInterest() 2012-2013 Object-Oriented Programming: Bank Accounts Thiết kế: Sơ đồ lớp 2012-2013 Object-Oriented Programming: Bank Accounts 10 Thiết kế: Sơ đồ lớp ● ● ● Quyền truy cập cho trường/phương thức: – Kí hiệu - private – Kí hiệu + public Các trường liệu đặt private Các lớp muốn truy cập vào trường private lớp cha phải sử dụng phương thức (public) lớp cha – Đảm bảo tính đóng gói an tồn liệu – Cách gọi: super.methodName() 2012-2013 Object-Oriented Programming: Bank Accounts 11 Cài đặt ● Xem tệp – BankAccount.java – CheckingAccount – SavingAccount – IConstants – AccountTester 2012-2013 Object-Oriented Programming: Bank Accounts 12 Cài đặt: BankAccount public class BankAccount { private double balance; public BankAccount() { balance = 0; } public BankAccount(double initialBalance) { balance = initialBalance; } public void deposit(double amount) { balance = balance + amount; } public void withdraw(double amount) { balance = balance - amount; } // more methods go here } 2012-2013 Object-Oriented Programming: Bank Accounts 13 Cài đặt: BankAccount public class BankAccount { // public double getBalance() { return balance; } public void transfer(double amount, BankAccount other) { withdraw(amount); other.deposit(amount); } } 2012-2013 Trong thực tế, phương thức cần phải đồng hóa Object-Oriented Programming: Bank Accounts 14 Cài đặt: CheckingAccount public class CheckingAccount extends BankAccount { private int transactionCount; public CheckingAccount(double initialBalance) { super(initialBalance); transactionCount = 0; } Gọi phương thức nạp tiền lớp cha để nạp tiền public void deposit(double amount) { transactionCount++; super.deposit(amount); } public void withdraw(double amount) { transactionCount++; super.withdraw(amount); } // more methods go here Nếu khơng dùng từ khóa super? } 2012-2013 Object-Oriented Programming: Bank Accounts 15 Cài đặt: CheckingAccount public class CheckingAccount extends BankAccount { // } /** * Deducts the accumulated fees and resets * the transaction count */ public void deductFees() { if (transactionCount > IConstants.FREE_TRANSACTIONS) { double fees = IConstants.TRANSACTION_FEE *(transactionCount - IConstants.FREE_TRANSACTIONS); super.withdraw(fees); } transactionCount = 0; Các số lưu } giao diện IConstants 2012-2013 Object-Oriented Programming: Bank Accounts 16 Cài đặt: SavingAccount public class SavingsAccount extends BankAccount { private double interestRate; public SavingsAccount(double rate) { interestRate = rate; } public void addInterest() { double interest = getBalance() * interestRate / 100; deposit(interest); } } 2012-2013 Object-Oriented Programming: Bank Accounts 17 Cài đặt: AccountTester public class AccountTester { public static void main(String[] args) { SavingsAccount momsSavings = new SavingsAccount(0.5); CheckingAccount myChecking = new CheckingAccount(100); momsSavings.deposit(10000); momsSavings.transfer(2000, myChecking); myChecking.withdraw(1500); myChecking.withdraw(80); momsSavings.transfer(1000, myChecking); myChecking.withdraw(400); momsSavings.addInterest(); myChecking.deductFees(); System.out.println("Mom's savings balance: " + momsSavings.getBalance()); System.out.println("Expected: 7035"); } } System.out.println("My checking balance: " + myChecking.getBalance()); System.out.println("Expected: 1116"); 2012-2013 Object-Oriented Programming: Bank Accounts 18