Đóng gói dữ liệu trong C ++

Tất cả các chương trình C ++ đều bao gồm hai yếu tố cơ bản sau:

  • Program statements (code) - Đây là một phần của chương trình thực hiện các hành động và chúng được gọi là các hàm.

  • Program data - Dữ liệu là thông tin của chương trình bị ảnh hưởng bởi các chức năng của chương trình.

Đóng gói là một khái niệm Lập trình hướng đối tượng liên kết dữ liệu và các chức năng thao tác dữ liệu với nhau, đồng thời giữ cho cả hai an toàn khỏi sự can thiệp và lạm dụng từ bên ngoài. Tính năng đóng gói dữ liệu đã dẫn đến khái niệm OOP quan trọng vềdata hiding.

Data encapsulation là một cơ chế gói dữ liệu và các chức năng sử dụng chúng và data abstraction là một cơ chế chỉ để lộ các giao diện và ẩn các chi tiết triển khai với người dùng.

C ++ hỗ trợ các thuộc tính đóng gói và ẩn dữ liệu thông qua việc tạo ra các kiểu do người dùng xác định, được gọi là classes. Chúng tôi đã nghiên cứu rằng một lớp có thể chứaprivate, protected publiccác thành viên. Theo mặc định, tất cả các mục được xác định trong một lớp là riêng tư. Ví dụ -

class Box {
   public:
      double getVolume(void) {
         return length * breadth * height;
      }

   private:
      double length;      // Length of a box
      double breadth;     // Breadth of a box
      double height;      // Height of a box
};

Các biến chiều dài, chiều rộng và chiều cao là private. Điều này có nghĩa là chúng chỉ có thể được truy cập bởi các thành viên khác của lớp Box chứ không phải bất kỳ phần nào khác trong chương trình của bạn. Đây là một cách để đạt được sự đóng gói.

Để tạo ra các phần của một lớp public (tức là, có thể truy cập vào các phần khác của chương trình của bạn), bạn phải khai báo chúng sau publictừ khóa. Tất cả các biến hoặc hàm được xác định sau mã chỉ định công khai đều có thể truy cập được bởi tất cả các hàm khác trong chương trình của bạn.

Việc biến một lớp này trở thành bạn của lớp khác sẽ làm lộ ra các chi tiết triển khai và giảm sự đóng gói. Lý tưởng là giữ càng nhiều chi tiết của mỗi lớp ẩn với tất cả các lớp khác càng tốt.

Ví dụ về đóng gói dữ liệu

Bất kỳ chương trình C ++ nào mà bạn triển khai một lớp với các thành viên công khai và riêng tư là một ví dụ về đóng gói dữ liệu và trừu tượng hóa dữ liệu. Hãy xem xét ví dụ sau:

#include <iostream>
using namespace std;

class Adder {
   public:
      // constructor
      Adder(int i = 0) {
         total = i;
      }
      
      // interface to outside world
      void addNum(int number) {
         total += number;
      }
      
      // interface to outside world
      int getTotal() {
         return total;
      };
   
   private:
      // hidden data from outside world
      int total;
};

int main() {
   Adder a;
   
   a.addNum(10);
   a.addNum(20);
   a.addNum(30);

   cout << "Total " << a.getTotal() <<endl;
   return 0;
}

Khi đoạn mã trên được biên dịch và thực thi, nó tạo ra kết quả sau:

Total 60

Lớp trên cộng các số lại với nhau và trả về tổng. Các thành viên công cộngaddNumgetTotal là các giao diện với thế giới bên ngoài và người dùng cần biết chúng để sử dụng lớp. Thành viên riêngtotal là một cái gì đó ẩn với thế giới bên ngoài, nhưng cần thiết để lớp hoạt động bình thường.

Chiến lược thiết kế

Hầu hết chúng ta đã học cách đặt các thành viên trong lớp ở chế độ riêng tư theo mặc định trừ khi chúng ta thực sự cần để lộ chúng. Điều đó thật tốtencapsulation.

Điều này được áp dụng thường xuyên nhất cho các thành viên dữ liệu, nhưng nó áp dụng như nhau cho tất cả các thành viên, bao gồm cả các hàm ảo.