C++ Nâng Cao. Data Hiding – Cơ chế dữ liệu ẩn
Chào mừng các bạn đến với chủ đề học lập trình c++ mở rộng – nâng cao tại blog phát triển phần mềm 123az
Bài viết này chúng ta cùng tìm hiểu về cơ chế:
data hiding trong c++
1. Phân tích vấn đề.
Data Hiding là cơ chế ẩn dữ liệu, nó thể hiện cho tính chất đóng gói dự liệu trong lập trình c++.
Khi xây dựng một lớp đối tượng dữ liệu, các bạn sẽ thấy lớp dữ liệu luôn gồm 2 thành phần đó là:
+ Phương Thức.
+ Thuộc Tính.
Và 3 quyền truy nhập: Private, protected, public.
Về nguyên tắc, lập trình hướng đối tượng là sự kết hợp bởi tư tưởng trừu tượng hóa dữ liệu và phương pháp lập trình cấu trúc.
Tư tưởng trừu tượng hóa dữ liệu hiểu đơn giản đó là: Chỉ quan tâm đến đầu vào là cái gì, và kết quả đầu ra là cái gì.
Do đó người ta thường thiết kế.
+ Quyền truy nhập public cho các function của lớp,
vì đối tượng lớp được sẽ được khai báo và sử dụng rộng rãi trong rất nhiều các hàm của các lớp đối tượng khác.
+ Nhưng với các thuộc tính, thì hạn chế tối đa việc sử dụng nó tự do ở mọi nơi, do đó với các thuộc tính,
người ta thường sử dụng quyền private và protected.
Vậy thì vấn đề đặt ra đó là.
Khi cần lấy giá trị của thuộc tính thì làm thế nào
Khi cần thay đổi giá trị thuộc tính của đối tượng thì làm sao.
Vậy thì để giải quyết bài toán này. Người ta sử dụng một cặp hàm luôn đi kèm với nhau đó là : Set và Get.
Như vậy cơ chế Data Hiding là cơ chế sử dụng hai phương thức của lớp để có thể truy cập được vào thuộc tính của lớp ở các hàm bất kỳ.
2. Thực hành data hiding trong c++
Hay cùng xem đoạn code sau đây.
class Person { private: char name_[20]; int age_; int sex_; public: Person() {;} ~Person() {;} const char* GetName() const { return name_;}; void SetName(const char* name) {strcpy(name_, name);} int GetAge() const {return age_;}; void SetAge(const int& age) {age_ = age;} };
Trong ví dụ trên tôi các thuộc tính của một lớp con người như là: tên, tuổi, giới tính.
Và để bảo mật dữ liệu, tôi đều sử dụng quyền private.
Để truy cập được nó tôi viết thêm 2 hàm set và get cho từng thuộc tính.
Note:
1. Sử dụng const ở cuối hàm get để làm gì ?
Thông thường khi đi làm dự án các bạn sẽ hay gặp những trường hợp như vậy,
nếu bạn không có const cũng không sao, nhưng const là để chặn việc thay đổi giá trị của thuộc tính của một lớp.
Hàm get với vai trò chỉ là lấy dữ liệu chứ không có thêm một đích gì khác,
thì người ta sẽ sử dụng const ở cuối hàm để hạn chế phạm vi can thiệp của nó với các thuộc tính của lớp.
==> Rất chặt chẽ trong việc bảo mật dữ liệu.
Như vậy một lập trình nào đó muốn thay đổi giá trị thuộc tính của class trong hàm get,
thì lập tức chương trình sẽ báo lỗi như là một nhắc nhở,
và lập trình phiên sẽ phải thảo luận với trưởng nhóm về việc mình muốn thay đổi giá trị của thuộc tính.
2. Const ở biến đầu vào trong hàm set có ý nghĩa gì.
Theo nguyên tắc tối ưu code, và sử dụng hàm, người ta khuyến cáo nên sử dụng biến tham chiếu và biến tham trỏ.
Như vậy biến đầu vào sẽ không xảy ra hiện tượng bị copy sang vùng nhớ tạm.
Toàn bộ hoạt động của nó trong hàm set đều được lưu lại sau khi ra ngoài hàm set.
Tuy nhiên khi mà vai trò của hàm set chỉ đơn giản là copy giá trị của biến đầu vào cho thuộc tính của lớp, mà không hề xảy ra việc can thiệp vào giá trị hiện có của biến đầu vào.
Thì người ta sử dụng từ khóa const để đưa nó thành biến hằng, không cho phép thay đổi giá trị nó đang có.
Điều đó giúp cho việc quản lý biến được chặt chẽ.
Tránh việc giá trị của 1 biến bị thay đổi bất ngờ trong một hàm set nào đó giữa hàng ngàn hàm set trong một project.
Ok. Như vậy kết luận lại.
Cơ chế Data Hiding là cơ chế sử dụng hai hàm set và get trong một lớp
để có thể truy cập vào các biến thành viên của lớp mà chúng đang được bảo mật,
đóng gói theo cơ chế trừu tượng hóa dữ liệu.
_______________________________________________________________
Pass