Ôn tập: hệ thống thanh toán
Thuộc phần Lập trình hướng đối tượng trong hành trình Java của Coddy. Bài học 40 trên 87.
Thử thách
DễHãy xây dựng một hệ thống xử lý thanh toán hoàn chỉnh, kết hợp mọi điều bạn đã học về giao diện (interface) trong chương này. Bạn sẽ tạo một hệ thống linh hoạt, có thể xử lý thống nhất nhiều phương thức thanh toán khác nhau thông qua một giao diện chung.
Bạn sẽ sắp xếp code trong năm tệp:
Payable.java: Định nghĩa giao diện cốt lõi mà mọi phương thức thanh toán phải triển khai. Giao diện này cần khai báo một phương thức duy nhất làpay(double amount), trả về một String mô tả thao tác thanh toán.CreditCard.java: Tạo một lớp triển khaiPayableđể biểu diễn các khoản thanh toán bằng thẻ tín dụng. CreditCard có trườngcardNumber(String) lưu 4 chữ số cuối. Thêm hàm khởi tạo để khởi tạo trường này. Phương thứcpaycần trả về:Paid [amount] using Credit Card ending in [cardNumber]PayPal.java: Tạo một lớp khác triển khaiPayableđể xử lý các khoản thanh toán bằng PayPal. Tài khoản PayPal có trườngemail(String). Thêm hàm khởi tạo để khởi tạo trường này. Phương thứcpaycần trả về:Paid [amount] via PayPal account [email]PaymentProcessor.java: Tạo một lớp xử lý có thể xử lý mọi đối tượngPayable. Lớp này cần có phương thứcprocessPayment(Payable paymentMethod, double amount), gọi phương thứcpaycủa phương thức thanh toán rồi trả về kết quả. Đây là cách giao diện cho phép hành vi đa hình: bộ xử lý không cần biết loại thanh toán cụ thể!Main.java: Kết hợp mọi thành phần. Bạn sẽ nhận ba đầu vào: số thẻ (4 chữ số cuối), địa chỉ email và số tiền thanh toán. Tạo mộtPaymentProcessor, rồi dùng nó để xử lý khoản thanh toán bằng cả tài khoảnCreditCardlẫnPayPalvới số tiền đã cho. In mỗi kết quả trên một dòng riêng.
Bạn sẽ nhận ba đầu vào: 4 chữ số cuối của số thẻ (String), email PayPal (String) và số tiền thanh toán (double).
Định dạng số tiền với hai chữ số thập phân trong đầu ra. Hãy chú ý cách cùng một PaymentProcessor xử lý các loại thanh toán hoàn toàn khác nhau nhờ sức mạnh của giao diện!
Tự làm thử
import java.util.Scanner;
class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
// Đọc dữ liệu đầu vào
String cardNumber = scanner.nextLine(); // 4 chữ số cuối
String email = scanner.nextLine(); // Email PayPal
double amount = scanner.nextDouble(); // Số tiền thanh toán
// TODO: Tạo một PaymentProcessor
// TODO: Tạo một CreditCard bằng cardNumber
// TODO: Tạo tài khoản PayPal bằng email
// TODO: Xử lý thanh toán bằng CreditCard và in kết quả
// TODO: Xử lý thanh toán bằng PayPal và in kết quả
}
}
Tất cả bài học trong Lập trình hướng đối tượng
1Kiến thức cơ bản về lập trình hướng đối tượng
Tệp bên ngoàiGiới thiệu về lập trình hướng đối tượngLớp và đối tượngTừ khóa thisPhương thứcTrường (thuộc tính)Phương thức khởi tạoNạp chồng phương thức khởi tạoÔn tập: Máy tính đơn giản4Kế thừa
Kế thừa cơ bản (extends)Từ khóa superGhi đè phương thức (@Override)Chuỗi gọi hàm khởi tạoLớp ObjectKế thừa đơn và đa cấpVì sao không hỗ trợ kế thừa nhiều lớpÔn tập: Phân cấp lớp Employee7Phương thức đặc biệt và lớp Object
Phương thức toString()equals() và hashCode()Phương thức clone()compareTo() và ComparableGiao diện ComparatorÔn tập: sắp xếp tùy chỉnh2Bộ điều chỉnh quyền truy cập và đóng gói
Tổng quan về các mức truy cậpPhương thức getter và setterẨn thông tinTừ khóa finalÔn tập: Trình quản lý tài khoản ngân hàng5Tính đa hình
Kiến thức cơ bản về nạp chồng phương thứcGhi đè phương thức (thời gian chạy)Chuyển kiểu lên và chuyển kiểu xuốngToán tử instanceofLớp và phương thức trừu tượngÔn tập: máy tính hình học8Khái niệm OOP nâng cao
Kết hợp và kế thừaKết tập và hợp thànhLớp bên trong, lớp lồng nhau và lớp ẩn danhKiểu enum và phương thức enumBản ghi (Java 16+)Lớp sealed (Java 17+)3Thuộc tính lớp và thành viên tĩnh
Biến của instance và biến tĩnhPhương thức tĩnhKhối tĩnhHằng số (static final)Ôn tập: bộ đếm và tiện ích6Giao diện và lớp trừu tượng
Giới thiệu về giao diệnTriển khai giao diệnTriển khai nhiều giao diệnPhương thức mặc định và tĩnh trong giao diệnLớp trừu tượng và giao diệnGiao diện hàmÔn tập: hệ thống thanh toán9Kiểu tổng quát
Giới thiệu về kiểu tổng quátLớp tổng quátPhương thức tổng quátTham số kiểu có giới hạnKý tự đại diện (?, extends, super)Ôn tập: vùng chứa tổng quát12Mẫu thiết kế, phần 2
Mẫu CommandMẫu AdapterMẫu DecoratorMẫu Template MethodMẫu StateMẫu CompositeMẫu IteratorTự luyện tập: Trình biên dịch Java online