● 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.
15 trang |
Chia sẻ: candy98 | Lượt xem: 574 | Lượt tải: 0
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() {
// ...
}
}