- vừa được xem lúc

[Procedural Programming + Ada] Bài 11 - Package Privacy & Type Encapsulation

0 0 15

Người đăng: Semi Dev

Theo Viblo Asia

Một trong số những nguyên lý quan trọng của lập trình module mà sau này được mô hình lập trình hướng đối tượng OOP kế thừa lại và mở rộng, đó là tính năng đóng gói Encapsulation. Tính năng này được hỗ trợ bởi Ada từ rất sớm và hoạt động ở cấp độ package, giúp chúng ta ẩn đi những yếu tố hỗ trợ không cần cung cấp cho code bên ngoài sử dụng - ví dụ như các sub-program tiện ích hỗ trợ cho các sub-program chính để mở chia sẻ cho code bên ngoài.

Private Area

Để ẩn đi các yếu tố tiện ích hỗ trợ cho các yếu tố chính xuất hiện trong giao diện lập trình API mà một package cung cấp ra bên ngoài, chúng ta sử dụng từ khóa private để chia code định nghĩa của package thành 2 phần riêng biệt:

  • Public - Các thành phần được định nghĩa trước chỉ dẫn private sẽ có thể được tham chiếu bởi code sử dụng package từ bên ngoài.
  • Private - Các thành phần được định nghĩa sau chỉ dẫn private sẽ chỉ có thể được tham chiếu bởi code sử dụng bên trong chính package đó hoặc các child package.
package Encapsulation is procedure Public_Put; private procedure Private_Put; end Encapsulation;

Và với code định nghĩa trong tệp cấu hình Encapsulation.ads như trên thì chúng ta sẽ không thể gọi procedure Private_Put trong tệp khởi chạy main.adb.

Type Encapsulation

Riêng đối với code định nghĩa các kiểu dữ liệu, chúng ta sẽ có thêm lựa chọn khai báo trừu tượng ngắn gọn về các kiểu dữ liệu ở khu vực public và trỏ tới định nghĩa chi tiết được ẩn đi ở khu vực private. Như vậy code sử dụng ở phía bên ngoài package sẽ chỉ có được tên định danh và một số thông tin phụ trợ khác như nhãn tagged hay kế thừa từ kiểu nào new Super_Type, còn các thông tin chi tiết như định kiểu và tên của các trường dữ liệu sẽ được ẩn đi.

package Humanity is type Person is tagged private; procedure Put_Info (Self : in Person); type Craft is new Person with private; overriding procedure Put_Info (Self : in Crafter); private type Person is tagged record Name : String (1 .. 12); Age : Integer; end record; procedure Put_Name (Self : in Person); procedure Put_Age (Self : in Person); type Crafter is new Person with record Level : Integer; end record; procedure Put_Level (Self : in Crafter); end Humanity;

Hiển nhiên, nếu sử dụng tính năng này thì chúng ta sẽ phải cung cấp thêm các sub-program như trình khởi tạo record, hay các trình tiện ích như GetSet để thực hiện các thao tác truy xuất và thiết lập giá trị tương ứng với các trường dữ liệu. Tính năng đóng gói ở cấp độ record level này được bổ sung ở phiên bản Ada 95 cùng với tagged type và theo ý kiến chủ quan của mình thì có phần không hẳn phù hợp với mô thức tư duy đơn giản của Procedural Programming.

Vì vậy nên ở đây mình chỉ thực hiện giới thiệu sơ lược cú pháp mang tính chất tham khảo và sẽ không sử dụng Type Encapsulation trong các bài viết theo của Sub-Series này. Và có lẽ chúng ta không cần phải bổ sung code ví dụ cho các sub-program hỗ trợ cho code ví dụ ở trên, mà thay vào đó thì sẽ để dành sự tập trung cho các tính năng khác.

(chưa đăng tải) [Procedural Programming + Ada] Bài 12 - ...

Bình luận

Bài viết tương tự

- vừa được xem lúc

Closure trong Javascript - Phần 2: Định nghĩa và cách dùng

Các bạn có thể đọc qua phần 1 ở đây. Để mọi người không quên, mình xin tóm tắt gọn lại khái niệm lexical environment:.

0 0 66

- vừa được xem lúc

Var vs let vs const? Các cách khai báo biến và hằng trong Javascript

Dạo này mình tập tành học Javascript, thấy có 2 cách khai báo biến khác nhau nên đã tìm tòi sự khác biệt. Nay xin đăng lên đây để mọi người đọc xong hy vọng phân biệt được giữa let và var, và sau đó là khai báo hằng bằng const.

0 0 47

- vừa được xem lúc

VueJS: Tính năng Mixins

Chào mọi người, hôm nay mình sẽ viết về Mixins và 1 số vấn đề trong sử dụng Mixins hay ho mà mình gặp trong dự án thực. Trích dẫn từ trang chủ của VueJS:.

0 0 41

- vừa được xem lúc

Asset Pipeline là cái chi chi?

Asset Pipeline. Asset pipeline là cái chi chi. . Giải thích:.

0 0 72

- vừa được xem lúc

Tạo data table web app lấy dữ liệu từ Google Sheets sử dụng Apps Script

Google Sheets là công cụ tuyệt vời để lưu trữ bảng tính trực tuyến, bạn có thể truy cập bảng tính bất kỳ lúc nào ở bất kỳ đâu và luôn sẵn sàng để chia sẻ với người khác. Bài này gồm 2 phần.

0 0 280

- vừa được xem lúc

Học Deep Learning trên Coursera miễn phí

Bạn muốn bắt đầu với Deep Learning nhưng không biết bắt đầu từ đâu? Bạn muốn có một công việc ở mức fresher về Deep Learning? Bạn muốn khoe bạn bè về kiến thức Deep Learning của mình. Bắt đầu từ đâu.

0 0 50