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

[Object-Oriented + Ada] Bài 6 - Shared Class Members

0 0 11

Người đăng: Semi Dev

Theo Viblo Asia

Nhân tiện khi nói về chủ đề liên quan tới package, thì mình mới nhớ ra một yếu tố nữa mà các ngôn ngữ phổ biến khác hỗ trợ OOP có sử dụng. Đó là các thành phần static bao gồm các biến lưu trữ và các phương thức không cần phải phát động bởi các object thực thể mà có thể sử dụng trực tiếp từ tên định kiểu. Ví dụ như trong JavaScript thì chúng ta có thể tạo ra một biến và một phương thức sử dụng chung trong nội bộ các object của một class như thế này.

class Person { static #counter; static { counter = 0; } static #increaseCounter ( ) { Person.#counter += 1; }
} //. Person

Ở đây biến #counter được sử dụng để đếm số lượng các object tạo ra từ class Person trong suốt thời gian vận hành chương trình, và thường được gọi là thuộc tính static. Còn phương thức #increaseCounter được sử dụng để tăng biến đếm. Các yếu tố static như thế này này có thể được định nghĩa private và chỉ khả dụng trong nội bộ class Person hoặc để mở public cho code bên ngoài sử dụng nếu cần thiết.

Package Constant

Trong Ada thì chúng ta có code định nghĩa của package có thể được xem là tương đương với code định nghĩa class trong Java, JavaScript, v.v... Tuy nhiên, ở khía cạnh khác thì package của Ada cũng có thể được nhìn nhận là thư viện library giống với C. Và vì vậy nên trong tệp cấu hình package.ads thì chúng ta còn có thể định nghĩa các hằng constant để lưu các giá trị tĩnh, không thay đổi, và có thể để mở public hoặc ẩn private.

package Person is MAX_AGE : constant Integer := 1001; -- ... private -- ... end Person;

Và như vậy là chúng ta đã có static constant nếu theo cách gọi của các ngôn ngữ OOP phổ biến.

with Ada.Text_IO; use Ada.Text_IO;
with Person; use Person; procedure Main is --
begin Put_Line (Integer'Image (Person.MAX_AGE));
end Main;

Variable & Method

Các biến static variable thì cần được định nghĩa ở nơi có thể nhận tương tác là các phương thức static method và vì vậy nên Ada yêu cầu định nghĩa trong tệp package-body.adb. Và các phương thức static method thực ra vẫn được định nghĩa như bình thường bởi điểm quan trọng là ở thao tác phát động phương thức, chúng ta không tham chiếu từ object mà là từ tên package.

with Ada.Text_IO; use Ada.Text_IO; package body Person is Id : Integer := -1; procedure IncreaseId is -- local begin Id := Id + 1; Put_Line ("Person Id: " & Integer'Image (Id)); end IncreaseId; -- ... end Person;

Và như vậy hiển nhiên là chúng ta đang có các static variable được xem như mặc định là private và nếu muốn code bên ngoài có thể đọc được giá trị thì chúng ta sẽ phải cung cấp một static method để hỗ trợ truy xuất.

with Ada.Text_IO; use Ada.Text_IO;
with Person; use Person; procedure Main is -- local
begin Person.IncreaseId; -- Person Id: 0 Person.IncreaseId; -- Person Id: 1 Person.IncreaseId; -- Person Id: 2 Person.IncreaseId; -- Person Id: 3 Person.IncreaseId; -- Person Id: 4 Person.IncreaseId; -- Person Id: 5 Person.IncreaseId; -- Person Id: 6 Person.IncreaseId; -- Person Id: 7 Person.IncreaseId; -- Person Id: 8 Person.IncreaseId; -- Person Id: 9
end Main;

Suspend Sub-Series

Như vậy là chúng ta đã điểm qua đầy đủ các khía cạnh của OOP được hỗ trợ bởi Ada và đã có rất đầy đủ kiến thức về mặt cú pháp của ngôn ngữ để tự tìm hiểu thêm về các công cụ khác của Ada ở cấp độ thư viện library level. Trước đó thì mình cũng đã giới thiệu sơ lược và trích dẫn các liên kết tham khảo tới các package trong thư viện tiêu chuẩn standard library của Ada, và cũng đã giới thiệu nhóm công cụ hỗ trợ lập trình đa nhiệm multi-tasking.

Tuy nhiên, sau khi duyệt lại các bài viết trong Sub-Series Procedural ở lượt tổng kết và điều chỉnh lại nội dung thì mình đã lược bỏ bớt phần giới thiệu sơ lược về các công cụ hỗ trợ lập trình đa nhiệm. Lý do là bởi vì các công cụ này được xây dựng và cung cấp với cú pháp bắt buộc ở dạng OOP và không phù hợp với trọng tâm của Sub-Series Procedural. Vì vậy nên ở đây mình xin tạm trích dẫn lại liên kết tham khảo nhóm công cụ multi-tasking từ tài liệu hướng dẫn của GNAT tại learn.adacore.com.

Sub-Series OOP + Ada này sẽ được dừng lại ở đây bởi đã bổ sung đủ kiến thức căn bản về cú pháp của Ada, còn về việc áp dụng OOP và thực hiện một mini project thì chúng ta sẽ để dành cho Sub-Series tiếp theo.

(chưa đăng tải) [Object-Oriented + Java] Bài 1 - Hello, Java !

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