Bài giảng môn Lập trình hướng đối tượng - Bài 5: Lớp trừu tượng - Lê Hồng Phương

● Lớp trừu tượng ● So sánh giao diện và lớp trừu tượng ● Sử dụng lớp trừu tượng ● Lớp trừu tượng là lớp được khai báo là abstract. ● Phương thức trừu tượng là phương thức được khai báo abstract và không có thân.

pdf15 trang | Chia sẻ: candy98 | Lượt xem: 470 | Lượt tải: 0download
Bạn đang xem nội dung tài liệu Bài giảng môn Lập trình hướng đối tượng - Bài 5: Lớp trừu tượng - Lê Hồng Phương, để tải tài liệu về máy bạn click vào nút DOWNLOAD ở trên
Bài 5: Lớp trừu tượ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 2012-2013 Lập trình hướng đối tượng: Lớp trừu tượng 2 Nội dung ● Lớp trừu tượng ● So sánh giao diện và lớp trừu tượng ● Sử dụng lớp trừu tượng 2012-2013 Lập trình hướng đối tượng: Lớp trừu tượng 3 Lớp trừu tượng ● Lớp trừu tượng là lớp được khai báo là abstract. ● Phương thức trừu tượng là phương thức được khai báo abstract và không có thân. ● Ví dụ: public abstract class GraphicObject { // fields and methods } abstract void moveTo(double deltaX, double deltaY); 2012-2013 Lập trình hướng đối tượng: Lớp trừu tượng 4 Lớp trừu tượng ● Lớp trừu tượng không nhất thiết chứa phương thức trừu tượng. ● Nếu một lớp có chứa một phương thức trừu tượng thì lớp đó là lớp trừu tượng và phải được khai báo là abstract. public abstract class GraphicObject { // declare fields // declare non-abstract methods abstract void moveTo(double deltaX, double deltaY); abstract void draw(); } 2012-2013 Lập trình hướng đối tượng: Lớp trừu tượng 5 Lớp trừu tượng ● Nếu A là một lớp trừu tượng, B là lớp con của A và B không không cung cấp cài đặt cụ thể cho mọi phương thức trừu tượng của A thì B cũng phải là lớp trừu tượng. ● Tương tự như đối với giao diện, ta không thể tạo đối tượng của một lớp trừu tượng: – GraphicObject go = new GraphicObject(); 2012-2013 Lập trình hướng đối tượng: Lớp trừu tượng 6 Lớp trừu tượng ● Vì sao sử dụng lớp trừu tượng? – Để cung cấp một cài đặt chung (dữ liệu, phương thức) cho các lớp con. – Các lớp con cung cấp cài đặt riêng phù hợp với chúng, không phải cài đặt lại những phần chung. 2012-2013 Lập trình hướng đối tượng: Lớp trừu tượng 7 So sánh giao diện và lớp trừu tượng ● Giống nhau: – Cả giao diện và lớp trừu tượng đều là các kiểu trừu tượng. – Đều không thể tạo đối tượng từ các kiểu giao diện và lớp trừu tượng. ● Khác nhau: – Giao diện chỉ có thể chứa các hằng số (static, final) và các phương thức trừu tượng. Lớp trừu tượng có thể chứa mọi trường dữ liệu và các phương thức trừu tượng hoặc không trừu tượng. 2012-2013 Lập trình hướng đối tượng: Lớp trừu tượng 8 So sánh giao diện và lớp trừu tượng ● Khác nhau: – Mức trừu tượng khác nhau: giao diện trừu tượng hoàn toàn; lớp trừu tượng thường chỉ trừu tượng một phần. – Giao diện được sử dụng để mô phỏng sự giống nhau giữa các đối tượng cài đặt nó. Lớp trừu tượng được sử dụng để cung cấp cài đặt chung cho mọi lớp con của nó. 2012-2013 Lập trình hướng đối tượng: Lớp trừu tượng 9 Sử dụng lớp trừu tượng ● Trong một phần mềm đồ họa, ta cần vẽ nhiều đối tượng đồ họa khác nhau. ● Mỗi đối tượng đối tượng có trạng thái (vị trí, hướng, màu đường kẻ, màu tô...) và hành xử (di chuyển, quay, thay đổi kích thước, vẽ...) GraphicObject RectangleLine Circle 2012-2013 Lập trình hướng đối tượng: Lớp trừu tượng 10 Sử dụng lớp trừu tượng ● Một số trạng thái và hành xử của các đối tượng này là giống nhau. Ví dụ: – Trạng thái: vị trí, màu tô – Hành xử: di chuyển ● Một số trạng thái và hành xử cần có cài đặt khác nhau: Ví dụ: – thay đổi kích thước, vẽ. 2012-2013 Lập trình hướng đối tượng: Lớp trừu tượng 11 Sử dụng lớp trừu tượng public abstract class GraphicObject { protected int x; protected int y; void moveTo(int newX, int newY) { x = newX; y = newY; } abstract void draw(); abstract void resize(); } ● Các hình 2-D đều có thông tin tọa độ của gốc (x, y). Thao tác di chuyển hình có cài đặt chung. 2012-2013 Lập trình hướng đối tượng: Lớp trừu tượng 12 Sử dụng lớp trừu tượng ● Hình tròn và hình chữ nhật có cách vẽ và thay đổi kích thước khác nhau. public class Rectangle extends GraphicObject { @Override void draw() { // ... } @Override void resize() { // ... } } public class Circle extends GraphicObject { @Override void draw() { // ... } @Override void resize() { // ... } } 2012-2013 Lập trình hướng đối tượng: Lớp trừu tượng 13 Sử dụng lớp trừu tượng ● Cơ chế đa hình cho phép gọi các phương thức thích hợp trên mỗi đối tượng đồ họa. public class GraphicObjectTester { public static void main(String[] args) { GraphicObject go; go = new Circle(); go.moveTo(5, 10); go.draw(); go = new Rectangle(); go.moveTo(20, 30); go.draw(); } } 2012-2013 Lập trình hướng đối tượng: Lớp trừu tượng 14 Sử dụng lớp trừu tượng ● Trong thực tế, lớp trừu tượng thường cung cấp một cài đặt bộ phận cho một hoặc nhiều giao diện. public interface Runnable { public void run(); } public abstract class Vehicle implements Runnable { protected String engineType; protected Color color; // constructors and non-abstract methods... abstract public void run(); } 2012-2013 Lập trình hướng đối tượng: Lớp trừu tượng 15 Sử dụng lớp trừu tượng public class Car extends Vehicle { // constructors and methods @Override public void run() { // ... } } public class Bike extends Vehicle { // constructors and methods @Override public void run() { // ... } }