TỔNG QUAN
CẤU TRÚC ĐIỀU KHIỂN
VÒNG LẶP
CHUỖI VÀ MẢNG
COLLECTIONS
THƯ VIỆN QUAN TRỌNG
HƯỚNG ĐỐI TƯỢNG
XỬ LÝ LUỒNG
EXCEPTION
LÀM VIỆC VỚI FILE
THAM KHẢO
CÁC CHỦ ĐỀ
BÀI MỚI NHẤT
MỚI CẬP NHẬT

Tính trừu tượng (Abstraction) trong Java

Trong bài này, tôi sẽ giới thiệu đến các bạn tính chất cuối cùng trong lập trình hướng đối tượng đó là tính trừu tượng (Abstraction) và cách vận dụng tính chất này trong lập trình. Cuối bài này, tôi sẽ đưa ra một số bài tập cho các bạn luyện tập!

1. Khái niệm tính trừu tượng

Tính trừu tượng trong Java là tính chất không thể hiện cụ thể mà chỉ nêu tên vấn đề. Đó là một quá trình che giấu các hoạt động bên trong và chỉ hiển thị những tính năng thiết yếu của đối tượng tới người dùng. Ví dụ: một người sử dụng điện thoại để gửi tin nhắn thì anh ta sẽ nhập nội dung tin nhắn, thông tin người nhận và ấn nút gửi. Khi anh ta bắt đầu gửi tin thì anh ấy không biết những gì diễn ra bên trong quá trình gửi mà chỉ biết được là kết quả của tin nhắn đã được gửi đến người nhận thành công hay chưa. Vì vậy trong ví dụ này, quá trình gửi tin nhắn đã được ẩn đi và chỉ hiển thị những chức năng mà người dùng cần đó là chức năng nhập nội dung tin nhắn, thông tin người nhận, kết quả gửi tin nhắn thành công hay thất bại. Đó chính là tính trừu tượng.

banquyen png
Bài viết này được đăng tại freetuts.net, không được copy dưới mọi hình thức.

Ưu điểm khi sử dụng tính trừu tượng để lập trình:

  • Tính trừu tượng cho phép các lập trình viên loại bỏ tính chất phức tạp của đối tượng bằng cách chỉ đưa ra các thuộc tính và phương thức cần thiết của đối tượng trong lập trình, cải thiện khả năng bảo trì của hệ thống.
  • Tính trừu tượng giúp chúng ta tập trung vào những cốt lõi cần thiết của đối tượng thay vì quan tâm đến cách nó thực hiện.
  • Tính trừu tượng cung cấp nhiều tính năng mở rộng khi sử dụng kết hợp với tính đa hình và kế thừa trong lập trình hướng đối tượng.

Java trừu tượng hóa thông qua các lớp trừu tượng (Abstract class) và các giao diện (Interface). Trong bài này, tôi sẽ hướng dẫn các bạn tìm hiểu về lớp trừu tượng và phương thức trừu tượng, còn Interface tôi sẽ giới thiệu trong các bài sau.

2. Phương thức trừu tượng (Abstract method) và lớp trừu tượng (Abstract class)

Phương thức trừu tượng (Abstract method)

Các phương thức chỉ có phần khai báo mà không có thân phương thức nằm trong cặp dấu {} và có một dấu chấm phẩy để kết thúc được gọi là phương thức trừu tượng. Để định nghĩa một phương thức là phương thức trừu tượng chúng ta sẽ sử dụng từ khóa abstract đứng trước tên phương thức.

Cú pháp khai báo phương thức trừu tượng:

Cú pháp
[access_modifier] abstract [kiểu_trả_về] [tên_phương_thức_trừu_tượng] [<đối_số_truyền_vào>];

, trong đó:

  • [access_modifier] là phạm vi truy cập của phương thức trừu tượng. Phạm vi truy cập của phương thức trừu tượng tương tự như của các phương thức bình thường nhưng không được khai báo phạm vi truy cập là private, nếu để là private thì trình biên dịch sẽ báo lỗi.
  • [kiểu_trả_về] là kiểu dữ liệu của phương thức.
  • [tên_phương_thức_trừu_tượng] phải tuân theo quy tắc đặt tên phương thức (hàm) của Java.
  • Phương thức này có thể có hoặc không có <đối_số_truyền_vào>.

Ví dụ
// khai báo 1 phương thức trừu tượng có tên là khaiBaoPhuongThucTruuTuong()
// phương thức này có phạm vi truy cập là public
// và không có đối số truyền vào
public abstract khaiBaoPhuongThucTruuTuong();

Lưu ý: Để sử dụng phương thức trừu tượng này, chúng ta cần phải ghi đè (override) nó trong lớp con kế thừa trực tiếp lớp khai báo phương thức này.

Lớp trừu tượng (Abstract class)

  • Lớp trừu tượng là lớp được khai báo với từ khóa abstract đứng trước tên của lớp.
  • Nếu 1 lớp được khai báo là 1 lớp trừu tượng thì chúng ta không thể dùng trực tiếp nó để tạo ra đối tượng mà phải viết một lớp kế thừa của lớp trừu tượng đó.
  • Lớp trừu tượng có thể có hoặc không có phương thức trừu tượng. Nếu một lớp có ít nhất 1 phương thức trừu tượng thì lớp đó phải được khai báo là lớp trừu tượng.
  • Những lớp là lớp trừu tượng cũng không cần có phương thức khởi tạo.
  • Một khi có một lớp nào đó kế thừa lớp trừu tượng thì lớp con đó bắt buộc phải override lại nội dung tất cả các phương thức trừu tượng có trong lớp đó.

Tóm lại, lớp trừu tượng là 1 lớp không thể khởi tạo đối tượng từ nó, nhưng nó lại ràng buộc các lớp con kế thừa trực tiếp nó phải có các phương thức trừu tượng của nó thông qua sự ghi đè (override) phương thức.

Để khai báo lớp trừu tượng, chúng ta sẽ sử dụng cú pháp sau:

Cú pháp
[access_modifier] abstract class TenClass {

}

AbstractClassDemo
package vidu;

public abstract class AbstractClassDemo {
	public void hienThi() {
		System.out.println("Đây là lớp trừu tượng");
	}

	// khai báo 1 phương thức abstract có tên là hienThi()
	// phương thức này không có thân phương thức
	// và có kiểu trả về là void
	public abstract void show();
}

3. Ví dụ

Ví dụ dưới đây sẽ minh họa cách sử dụng tính trừu tượng trong Java.

Animal.java
package vidu;

public abstract class Animal {
	private String tiengKeu;
	
	public abstract void hienThiTiengKeu();
}

Dog.java
package vidu;

public class Dog extends Animal {

	@Override
	public void hienThiTiengKeu() {
		System.out.println("Gâu");
	}

}

Cat.java
package vidu;

public class Cat extends Animal {

	@Override
	public void hienThiTiengKeu() {
		System.out.println("Meo");
	}
	
}

Main.java
package vidu;

public class Main {

	public static void main(String[] args) {
		Dog dog = new Dog();
		dog.hienThiTiengKeu();
		
		Cat cat = new Cat();
		cat.hienThiTiengKeu();
	}

}

Kết quả sau khi biên dịch chương trình:

ketqua vi du tinh truu tuong PNG

Giải thích hoạt động của chương trình trên:

Trong ví dụ trên, tôi tạo ra 3 lớp đối tượng là Animal, DogCat, trong đó lớp Animal là lớp trừu tượng. Lớp Animal có một phương thức trừu tượng tên là hienThiTiengKeu() dùng để hiển thị tiếng kêu của từng loài động vật tương ứng. Lớp DogCat là 2 lớp kế thừa của lớp Animal, 2 lớp này khi mới tạo ra sẽ có nội dung lớp như sau:

Dog.java
package vidu;

public class Dog extends Animal {

	@Override
	public void hienThiTiengKeu() {
		// TODO Auto-generated method stub

	}

}

Các bạn thấy đoạn code trên khi lớp Dog kế thừa lớp Animal mới được tạo ra nó sẽ kế thừa lại phương thức trừu tượng của lớp cha thông qua sự ghi đè phương thức đó, cụ thể ở đây là phương thức hienThiTiengKeu(). Nếu chúng ta xóa bỏ phương thức này trong lớp Dog thì hệ thống sẽ báo lỗi, vì vậy chúng ta có thể rút ra kết luận: lớp cha có những phương thức trừu tượng nào thì lớp con cũng phải có phương thức trừu tượng đó (override) - đây chính là ý tưởng chính của tính trừu tượng.

3. Lời kết

Trong bài này, chúng ta đã tìm hiểu về tính chất cuối cùng khi lập trình hướng đối tượng đó là tính trừu tượng trong Java. Sang bài sau, chúng ta sẽ tìm hiểu về các khái niệm còn lại trong lập trình hướng đối tượng với Java. Các bạn theo dõi nhé!

Câu hỏi thường gặp liên quan:

Cùng chuyên mục:

Khi nào dùng Default Methods trong Java 8

Khi nào dùng Default Methods trong Java 8

Ở 2 bài trước chúng ta đã tìm hiểu 2 tính năng mới của Java…

Cách chuyển chữ hoa thành chữ thường trong Java

Cách chuyển chữ hoa thành chữ thường trong Java

Trong bài viết này chúng ta sẽ tìm hiểu về cách chuyển đổi chữ in…

Bài tập tính tổng các số tự nhiên trong Java

Bài tập tính tổng các số tự nhiên trong Java

Các số dương 1, 2, 3, 4, ... được gọi là các số tự nhiên,…

Cách chuyển chữ thường thành chữ hoa trong Java

Cách chuyển chữ thường thành chữ hoa trong Java

Trong chuỗi có thể vừa có ký tự thường vừa có ký tự hoa, nhưng…

Cách viết hoa ký tự đầu tiên trong Java

Cách viết hoa ký tự đầu tiên trong Java

Để hiểu được bài này, các bạn cần có kiến thức căn bản về Java…

Hướng dẫn chuyển đổi giờ phút giây trong Java

Hướng dẫn chuyển đổi giờ phút giây trong Java

Để hiểu được chương trình, các bạn cần có kiến thức cơ bản về Java.…

Cách lấy thời gian hiện tại trong Java

Cách lấy thời gian hiện tại trong Java

Để hiểu được bài viết này, các bạn cần có kiến thức cơ bản sau…

Cách làm tròn số trong Java

Cách làm tròn số trong Java

Khi thực hiện tính toán, việc kết quả ra một con số thập phân dài…

Cách tìm ma trận chuyển vị trong Java

Cách tìm ma trận chuyển vị trong Java

Quá trình hoán đổi giữa hàng và cột được gọi là chuyển vị của ma…

Cách chuyển ArrayList thành mảng và ngược lại trong Java

Cách chuyển ArrayList thành mảng và ngược lại trong Java

Để hiểu được bài này, các bạn cần có kiến thức cơ bản về mảng…

Cách nối hai mảng trong Java

Cách nối hai mảng trong Java

Mình sẽ thực hiện hai chương trình nối mảng. Chương trình thứ nhất nối hai…

Cách xóa khoảng trắng của chuỗi trong Java

Cách xóa khoảng trắng của chuỗi trong Java

Mình sẽ thực hiện hai chương trình khác nhau để các bạn có thể hiểu…

In ra tam giác bằng ký tự * và số trong Java

In ra tam giác bằng ký tự * và số trong Java

Mình sẽ giới thiệu cách để in ra các tam giác bằng ký tự *…

Tìm số lớn nhất trong mảng Java

Tìm số lớn nhất trong mảng Java

Các bạn cần tìm hiểu về mảng, cách khởi tạo và in mảng trong Java…

Tìm ước của một số nguyên trong Java

Tìm ước của một số nguyên trong Java

Trong bài viết này chúng ta sẽ tìm hiểu cách tìm tất cả các ước…

Cách kiểm tra số hoàn hảo trong Java

Cách kiểm tra số hoàn hảo trong Java

Cách kiểm tra số đối xứng trong Java

Cách kiểm tra số đối xứng trong Java

Trong bài viết này chúng ta sẽ kiểm tra một số có phải là số…

Đảo ngược một số trong Java

Đảo ngược một số trong Java

Mình sẽ giới thiệu các bạn cách đảo ngược một số sử dụng vòng lặp…

Tìm bội chung nhỏ nhất trong Java

Tìm bội chung nhỏ nhất trong Java

Mình sẽ sử dụng hai cách khác nhau để tìm BCNN. Cách thứ nhất mình…

Cách hoán đổi hai số trong Java

Cách hoán đổi hai số trong Java

Trong phần này mình sẽ sử dụng một biến tạm temp() làm biến trung gian…

Top