Tái cấu trúc khi nâng cao
Tái cấu trúc (refactoring) là quá trình thay đổi cấu trúc của mã lệnh hiện có mà không làm biến đổi chức năng của nó. Ứng dụng của bạn phải sản sinh cùng một kết quả đầu ra như cũ sau quá trình tái cấu trúc, nhưng mã lệnh của bạn sẽ trở nên rõ ràng hơn, sáng sủa hơn, và ít trùng lặp. Thường thuận lợi hơn để làm tái cấu trúc mã lệnh trước khi thêm một đặc tính (để bổ sung vào dễ hơn hoặc làm rõ hơn cần bổ sung thêm vào đâu), và sau khi thêm một đặc tính (để làm sạch sẽ những gì đã làm khi bổ sung vào). Trong trường hợp này, chúng ta đã thêm vào một phương thức mới và ta thấy một số mã lệnh trùng lặp. Chính là lúc để tái cấu trúc!Đầu tiên, chúng ta cần tạo ra một phương thức nắm giữ hai dòng mã lệnh trùng lặp. Chúng ta gọi phương thức đó là addToWallet():
PHP:
protected void addToWallet(int bill) {Integer boxedBill = new Integer(bill);wallet.add(boxedBill);
}
PHP:
public void addMoney(int bill) {addToWallet(bill);
}
PHP:
public void addMoney(int[] bills) {
for (int i = 0; i < bills.length; i++) {int bill = bills[i];addToWallet(bill);
}
}
Các thành phần của lớp
Các biến và phương thức mà chúng ta có trong Adult là các biến cá thể và phương thức cá thể. Mỗi đối tượng sẽ có các biến và phương thức cá thể như thế.Bản thân các lớp cũng có các biến và phương thức. Chúng được gọi chung là các thành phần của lớp, và bạn khai báo chúng bằng từ khóa static. Sự khác nhau giữa các thành phần của lớp và các biến cá thể là:
* Tất cả các cá thể của một lớp sẽ chia sẻ chung một bản sao đơn lẻ của biến lớp (class variable).
* Bạn có thể gọi các phương thức lớp (class method) ngay trên bản thân lớp đó mà không cần có một cá thể của lớp.
* Các phương thức của cá thể có thể truy cập các biến lớp, nhưng các phương thức lớp không thể truy cập vào biến cá thể
* Các phương thức lớp chỉ có thể truy cập biến lớp.
Khi nào thì việc thêm các biến lớp hay phương thức lớp trở nên có ý nghĩa? Quy tắc xuyên suốt là hiếm khi làm điều đó, để bạn không lạm dụng chúng. Một số cách dùng thông thường là:
* Để khai báo các hằng số mà bất cứ cá thể nào của lớp cũng có thể sử dụng được
* Để theo vết “bộ đếm” các cá thể của lớp.
* Trên một lớp với các phương thức tiện ích mà không bao giờ cần đến một cá thể, vẫn giúp ích được (như là phương thức Collections.sort())
0 nhận xét:
Đăng nhận xét