Tính Đóng Gói (Encapsulation) Trong C++

Tính đóng gói

Tính đóng gói gần như cũng không quá xa lạ với người lập trình, đặc biệt là mảng lập trình hướng đối tượng. Không những vậy, nó còn ràng buộc phương thức hay dữ liệu khi bạn xử lý chúng. Tính đóng gói còn đảm bảo việc bảo vệ chúng an toàn và tránh sự khai thác từ bên ngoài. Sau đây, hãy tìm hiểu và khám phá về nó với những thông tin bổ ích bên dưới.

Tính đóng gói trong C++ là gì?

Đối với ngôn ngữ lập trình C++, tính đóng gói nằm trong số bốn thuộc tính quan trọng đi cùng với tính đa hình, kế thừa, và trừu tượng. Thuộc tính đóng gói sẽ hỗ trợ người dùng phân tách những hành vi hay dữ liệu trên một đối tượng. Sau đó, ẩn chúng ra khỏi những đối tượng khác và từ đó người dùng chỉ có thể truy cập thông qua những phương thức công khai.

Tính đóng gói trong C++
Hình 1. Tính đóng gói trong C++

Bên cạnh đó, mã nguồn sẽ cực kỳ dễ đọc hay bảo trì và có độ an toàn cao khi được thực hiện bởi thuộc tính đóng gói. Nói cách khác, người dùng sẽ thuận tiện trong việc quản lý truy cập những thuộc tính cũng như phương thức trên đối tượng.

Ví dụ:

class Rectangle {

private:

int width;

int height;

public:

void setWidth(int w) {

if (w > 0) {

width = w;

}

}

void setHeight(int h) {

if (h > 0) {

height = h;

}

}

int area() {

return width * height;

}

};

int main() {

Rectangle rect;

rect.setWidth(5);

rect.setHeight(10);

int area = rect.area();

return 0;

}

Có thể thấy được lớp ‘Rectangle’ đóng gói những thuộc tính như ‘width’ hoặc ‘height’ thông qua quá trình đặt chúng ở phần ‘Private’. Nói cách khác, những đối tượng khác sẽ không thể tiếp cận trực tiếp và truy cập chúng.

Lúc này, lớp ‘Rectangle’ sẽ mang đến những phương thức công khai như: ‘setWidth’, ‘setHeight’ và ‘area’ để phục vụ cho việc truy xuất hay gán những giá trị trên ‘width’ và ‘height’. Không những vậy, thông qua việc dùng tính đóng gói trong C++, chúng ta hoàn toàn chắc chắn rằng ‘width’ và ‘height’ trên đối tượng ‘Rectangle’ sẽ hợp lệ vì nó lớn hơn 0.

Người sử dụng sẽ không được phép truy cập trực tiếp đến chúng mà cần sự hỗ trợ từ những phương thức công khai.

Tính đóng gói sẽ giúp mã nguồn dễ đọc hơn
Hình 2. Tính đóng gói sẽ giúp mã nguồn dễ đọc hơn

Chiến lược thiết kế tính đóng gói trong C++

Tính đóng gói gần như là thuộc tính quan trọng nhất trong C++. Nó có nhiệm vụ che dấu những chi tiết nằm ở trong một đối tượng và khai báo giao diện công khai cho người dùng. Sau đây, chúng tôi xin nêu chiến lược thiết kế để giúp bạn đạt được những hiệu quả trong quá trình đóng gói C++.

1. Dùng những phạm vi truy cập: bạn có thể sử dụng public, private, và protected như những từ khóa liên quan đến phạm vi truy cập. Lúc này, bạn cần dùng những phạm vi này để theo dõi và kiểm soát truy cập vào thành phần của lớp. Những thành phần như private thì sẽ không được phép truy cập ở bên ngoài. Thành phần protected thì truy cập ở lớp kế thừa và thành phần public thì truy cập được từ bên ngoài.

2. Có thể dùng getter và setter: hãy dùng getter và setter để truy cập những thành phần như private nhé. Đây là các phương thức công khai có thể dùng để đọc và ghi những giá trị trên thành phần private. Có thể nói, các bạn sẽ dễ dàng truy cập những thành phần của lớp khi dùng getter và setter.

3. Dùng hàm thành viên: Hàm thành viên là những phương thức trên lớp. Khi các bạn dùng nó để thực thi hành động trên những thành phần của lớp, lúc này sẽ thuận tiện hơn trong việc kiểm soát quá trình truy cập những thành phần trên lớp.

4. Dùng lớp kế thừa: nó là giải pháp để thừa kế những tính chất hay phương thức một lớp cha chuyển sang lớp con. Có thể dùng lớp kế thừa để khởi tạo lớp con và dùng những thành phần của lớp cha thoải mái và dễ dàng hơn.

5. Dùng hàm friend: hàm friend được hiểu là hàm bên ngoài và hỗ trợ truy cập những thuộc tính cũng như phương thức private trên lớp. Nói cách khác, dùng hàm này để giữ tính đóng gói trên đối tượng và làm cho những hàm bên ngoài truy cập đến những chi tiết bên trong đối tượng.

Dùng hàm 'Friend' để thiết kế tính đóng gói
Hình 3. Dùng hàm ‘Friend’ để thiết kế tính đóng gói

Tổng Kết

Tính đóng gói là một thuộc tính không thể thiếu và vô cùng quan trọng đối với ngôn ngữ lập trình hướng đối tượng. Như vậy, chúng tôi đã khái quát toàn bộ những thông tin cần thiết liên quan đến thuộc tính này trong C++.

Một lần nữa, xin chân thành cảm ơn sự quan tâm từ phía đọc giả và chúng tôi không ngừng hoàn thiện để tạo ra nhiều bài viết hữu ích khác trong tương lai.

 

1/5 - (5 bình chọn)

Để lại một bình luận

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *