[Phần 2] OOP: Tìm Hiểu "Đóng Gói" và "Trừu Tượng" trong Lập Trình Hướng Đối Tượng
Chuyên mụcJava
Ngày đăng

[Phần 2] OOP: Tìm Hiểu "Đóng Gói" và "Trừu Tượng" trong Lập Trình Hướng Đối Tượng

Bài viết này sẽ giúp bạn hiểu rõ hơn về hai tính chất quan trọng trong lập trình hướng đối tượng (OOP): "Đóng gói" và "Trừu tượng". Chúng ta sẽ đi sâu vào khái niệm đóng gói, cách nó hoạt động thông qua các mức truy cập (Public, Protected, Private) và tại sao nó lại cần thiết để bảo vệ dữ liệu và tránh lỗi trong quá trình lập trình. Hãy cùng khám phá nhé!
Hải Đăng

Hải Đăng

Tác giả tại CLB Lập Trình PTIT

Như đã đề cập ở bài trước, lập trình hướng đối tượng là một mô hình lập trình dựa trên khái niệm “đối tượng”, có thể chứa dữ liệu và mã. Hôm nay, chúng ta sẽ cùng nhau tìm hiểu về hai tính chất quan trọng trong lập trình hướng đối tượng: "Đóng gói""Trừu tượng".


Tính Đóng Gói (Encapsulation)

Tính đóng gói là một trong những tính chất cơ bản của lập trình hướng đối tượng. Nó cho phép chúng ta "đóng gói" các thuộc tính và phương thức của một đối tượng vào một đơn vị duy nhất.

Tính đóng gói
Để đảm bảo tính đóng gói, các thuộc tính và phương thức của đối tượng được định nghĩa với các mức truy cập khác nhau. Các mức truy cập bao gồm:
🌏 Public: Các phương thức và thuộc tính có thể truy cập từ bất kỳ đối tượng nào.
🔒 Protected: Các phương thức và thuộc tính chỉ có thể truy cập từ các lớp con của lớp đó.
👤 Private: Các phương thức và thuộc tính chỉ có thể truy cập từ bên trong lớp đó.

Việc định nghĩa các mức truy cập giúp đảm bảo tính đóng gói và tránh các lỗi truy cập không đúng từ bên ngoài.

java
1class Student { 2 private String name; 3 private int age; 4 private float score; 5 6 // Constructor 7 public Student(String name, int age, float score) { 8 this.name = name; 9 this.age = age; 10 this.score = score; 11 } 12 13 // Setter cho thuộc tính score 14 public void setScore(float score) { 15 this.score = score; 16 } 17 18 // Getter cho thuộc tính score 19 public float getScore() { 20 return this.score; 21 } 22} 23 24public class Main { 25 public static void main(String[] args) { 26 Student s = new Student("John", 20, 8.5f); 27 s.setScore(9.0f); 28 System.out.println(s.getScore()); 29 } 30} 31

Với ví dụ này, tính đóng gói được thể hiện trong việc khai báo các thuộc tính name, age, score của lớp Student dưới nhãn phạm vi private.

Các thuộc tính này được ẩn đi và không thể truy cập trực tiếp bởi người dùng. Thay vào đó, người dùng phải truy cập thông qua các phương thức GetterSetter. Điều này giúp bảo vệ dữ liệu và đảm bảo tính toàn vẹn của đối tượng.


Tính Trừu Tượng (Abstraction)

Tính trừu tượng
Trừu tượng hóa là việc ẩn đi các chi tiết triển khai bên trong, chỉ hiển thị những gì cần thiết ra bên ngoài.

Nói cách khác, người dùng chỉ cần biết có thể thực hiện những gì (what), còn việc thực hiện ra sao (how) thì không cần quan tâm.

java
1abstract class Shape { 2 abstract float getArea(); // Phương thức trừu tượng 3} 4 5class Circle extends Shape { 6 private float radius; 7 8 public Circle(float radius) { 9 this.radius = radius; 10 } 11 12 @Override 13 public float getArea() { 14 return 3.14f * radius * radius; 15 } 16} 17 18class Square extends Shape { 19 private float side; 20 21 public Square(float side) { 22 this.side = side; 23 } 24 25 @Override 26 public float getArea() { 27 return side * side; 28 } 29} 30 31public class Main { 32 public static void main(String[] args) { 33 Circle c = new Circle(5); 34 Square s = new Square(6); 35 36 System.out.println("Circle Area: " + c.getArea()); 37 System.out.println("Square Area: " + s.getArea()); 38 } 39}

Như trong đoạn mã này, người dùng biết và có thể sử dụng phương thức getArea() của lớp Shape để tính diện tích của hình tròn và vuông, mà không cần biết công thức cũng như cách hoạt động của phương thức này.

Tính trừu tượng giúp đơn giản hóa việc tương tác với các đối tượng và làm cho mã nguồn trở nên dễ hiểu và bảo trì hơn.


Kết Luận

Trên đây là phần 2 trong series "Lập trình hướng đối tượng", nơi chúng ta đã cùng nhau tìm hiểu về tính "Đóng gói""Trừu tượng". Hy vọng qua bài viết này, các bạn đã có cái nhìn rõ ràng hơn về hai tính chất quan trọng này.

Đừng quên theo dõi chúng tôi để cập nhật thêm nhiều kiến thức lập trình hữu ích nhé!

💻 Fanpage: https://www.facebook.com/clubproptit/
🌐 Website: https://proptit.com/
📺 Youtube: https://www.youtube.com/channel/UCdOcZv16XwUi7bhawqPjV9g
💌 Email: clblaptrinhptit@gmail.com

Các bài viết trong số

Lập trình hướng đối tượng

Serie tìm hiểu về Lập trình hướng đối tượng và Java