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

[Object-Oriented + Ada] Bài 2 - Inheritance & Tagged Record

0 0 17

Người đăng: Semi Dev

Theo Viblo Asia

Phần tiếp theo của câu chuyện OOP trong Ada là chúng ta đang cần định nghĩa cho các kiểu object khác để mô phỏng các nhóm ngành nghề ví dụ như Coder, Teacher, Crafter, v.v... thì về căn bản là chúng ta sẽ muốn mở rộng từ nhóm Person để không phải định nghĩa lại những thông tin chung như Name, Age, Gender, v.v... và các sub-program chỉ làm việc với các trường dữ liệu này. Và chúng ta có tính năng kế thừa Inheritance được Ada 95 hỗ trợ với khái niệm Tagged Record.

Tagged Record

Vẫn là record nhưng có thêm từ khóa tagged được sử dụng để trình biên dịch sẽ gắn một nhãn định danh cho mỗi object được tạo ra khi vận hành phần mềm. Như vậy ở giai đoạn runtime thì trình biên dịch sẽ có thể xác định được object này thuộc cây phả hệ nào.

Và khi một phương thức method được phát động thì trình biên dịch sẽ có thể tìm được primitive trực tiếp của kiểu đó hoặc được kế thừa từ kiểu được định nghĩa trước trong cây phả hệ. Nhờ vậy thì bây giờ chúng ta còn có thể sử dụng thêm cú pháp định nghĩa mở rộng các record đã được định nghĩa trước đó.

package Person is type Entity is tagged; -- type definition & sub-program declarations type Entity is tagged record Name : String (1 .. 12); end record; procedure Greet ... -- ... end Person;
with Person; use Person; package Person.Coder is type Entity is tagged; type Class is access all Entity'Class; -- type definition & sub-program declarations subtype Bit is Integer range 0 .. 1; type Entity is new Person.Entity with record Intellect : Bit; end record; private -- nothing here end Person.Coder;

Việc định nghĩa Coderchild package của Person là không bắt buộc để thực hiện cú pháp định nghĩa mở rộng record Person. Tuy nhiên, nếu như chúng ta có định nghĩa thêm các primitive hỗ trợ ở phần private của Person và muốn kế thừa lại để không phải định nghĩa lặp ở Coder thì việc sử dụng child package sẽ là cần thiết.

with Ada.Text_IO; use Ada.Text_IO;
with Person; use Person;
with Person.Coder; use Person.Coder; procedure Main is Me : Coder.Class; Lucy : Person.Class;
begin Me := new Coder.Entity' ( Name => "Semi Dev_ " , Intellect => 0 ); Lucy := new Person.Entity' (Name => "Lucy Bella "); Me.Greet (Lucy.all);
end Main;
Hi, Lucy
I'm Semi Dev_

[Object-Oriented + Ada] Bài 3 - Polymorphism & Type'Class

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