Hai công cụ này thuộc về giai đoạn thiết kế tổng quan kiến trúc code trước khi bắt tay vào viết code triển khai chi tiết cho các class
thông thường mà chúng ta đã biết trước đó.
Abstract Class
Được sử dụng cho hai mục đích:
1.
Giảm thiểu lượng code lặp khi chúng ta có nhiều class
khá giống nhau về lượng thuộc tính đặc tả và chức năng tương tác.
Ví dụ như trước đó chúng ta có các class
mở rộng là Worker
và Teacher
cùng kế thừa lại các đặc tính của class Person
. Trong trường hợp logic của chương trình không cần tạo object
trực tiếp từ thao tác new Person()
thì chúng ta có thể gắn từ khóa abstract
vào phía trước từ khóa class
trong định nghĩa của class Person
.
Ví dụ:
package app.data; abstract class Person { // ...
}
2.
Thiết lập thiết kế trừu tượng ở giai đoạn lên kế hoạch xây dựng phần mềm để làm cấu hình yêu cầu triển khai tính năng cho các class
cụ thể sẽ được viết code ở giai đoạn sau đó.
Trong trường hợp này thì chúng ta có thể gắn thêm các từ khóa abstract
cho các yếu tố class member
bên trong abstract class
, nhờ vậy thì ở giai đoạn thiết kế tổng quan này các phương thức sẽ có thể được khai báo tên ngắn gọn mà không cần viết code thể hiện logic hoạt động chi tiết. Sau đó, ở giai đoạn viết code triển khai, trình biên dịch sẽ đảm bảo rằng các tất cả yếu tố abstract
sẽ phải được Override
đầy đủ trong code định nghĩa của các class
mở rộng.
Ví dụ:
package app.data; abstract class Person { abstract protected String name; abstract protected int age; Person (String $name, int $age) { this.setName ($name); this.setAge ($age); }; abstract protected void setName (String $name); abstract protected String getName (); abstract protected void setAge (int $age); abstract protected int getAge ();
}
Interface
Chỉ được sử dụng với mục đích thiết lập thiết kế trừu tượng ở giai đoạn lên kế hoạch xây dựng phần mềm, để làm cấu hình yêu cầu triển khai tính năng cho các class
cụ thể. Thêm vào đó, từ inteface
được Java
sử dụng ở đây có ý nghĩa là giao diện tương tác, hay giao diện lập trình; Vì vậy nên các interface members
sẽ chỉ có thể bao gồm các giá trị hằng và các phương thức abstract
với từ khóa public
luôn được ngầm định.
Ví dụ:
package app.delegate; public interface Greeter { final String VNmsg = "Xin chào"; final String ENmsg = "Hello"; greet (String $name);
}
package app.delegate; interface Seeker { meditate (int $time);
}
Và khi sử dụng các interface
này cho một class
không phải là abstract
thì trình biên dịch sẽ đảm bảm bảo rằng class
đó phải viết code Override
đầy đủ cho tất cả các phương thức có mặt trong định nghĩa của các interface
.
package app.delegate; class Worker
extends Person
implements Greeter, Seeker { // ...
}
(chưa đăng tải) [Object-Oriented + Java] Bài viết #5 - Generic Programming