Lớp trong Pascal

Nếu để ý bạn sẽ nhận thấy các đối tượng trong Pascal biểu diễn một số ký tự của hướng đối tượng, triển khai đóng gói, ẩn dữ liệu và thừa kế dữ liệu. Tuy nhiên đối tượng trong Pascal không tham gia trong đa hình, vì vậy các lớp trong Pascal được sử dụng để triển khai các hành vi hướng đối tượng đúng cách trong một chương trình, đặc biệt là phần mềm dựa trên GUI.

Lớp trong Pascal được định nghĩa gần giống như đối tượng trong Pascal, chỉ khác lớp trong Pascal là con trỏ tới đối tượng. Về mặt kỹ thuật, bạn có thể hiểu lớp được phân bổ trên Heap của chương trình, còn đối tượng được phân bổ trên Stack.

Nói cách khác, khi khai báo một biến kiểu đối tượng, nó sẽ chiếm dụng nhiều không gian trống trên Stack như kích thước của đối tượng, nhưng khi khai báo một biến kiểu lớp, nó sẽ lấy kích thước của một con trỏ trên Stack. Các dữ liệu lớp thực tế sẽ được phân bổ trên Heap.

Định nghĩa lớp trong Pascal

Lớp trong Pascal được khai báo giống như khai báo đối tượng , sử dụng khai báo kiểu. Cấu trúc chung của khai báo lớp có dạng như sau:

Một số lưu ý bạn cần nhớ:

- Định nghĩa lớp phải nằm trong khai báo kiểu của chương trình.

- Lớp trong Pascal được định nghĩa bằng cách sử dụng từ khóa class.

- Trường là các mục dữ liệu tồn tại trong mỗi đối tượng của lớp.

- Các phương thức được khai báo trong định nghĩa lớp.

- Constructor được định nghĩa trước trong lớp Root có tên là Create. Mỗi lớp trừu tượng (abstract class) và lớp cụ thể (concrete class) là lớp con của lớp Root, vì vậy tất cả các lớp có ít nhất một constructor.

- Ngoài ra trong lớp Root còn có một destructor được định nghĩa trước có tên là Destroy. Mỗi lớp trừu tượng (abstract class) và lớp cụ thể (concrete class) là lớp con của lớp Root, vì vậy tất cả các lớp có ít nhất một destructor.

Ví dụ dưới đây định nghĩa lớp Rectangle có 2 thành viên dữ liệu kiểu số nguyên: chiều dài và chiều rộng và một số hàm thành viên thao tác các thành viên dữ liệu và một thủ tục để vẽ hình chữ nhật.

Ví dụ tiếp theo viết một chương trình hoàn chỉnh tạo đối tượng của lớp Rectangle và vẽ hình chữ nhật. Ví dụ dưới đây tương tự như ví dụ mà Taimienphi.vn đã đề cập trong phần đối tượng trong Pascal. 2 chương trình khác giống nhau, chỉ khác trong chương trình dưới đây:

- Bạn phải thêm {$mode objfpc} để sử dụng các lớp.

- Thêm {$m+} để sử dụng constructor.

- Thực thể của lớp khác với thực thể của đối tượng. Chỉ khai báo biến không tạo không gian cho thực thể, bạn sẽ phải sử dụng constructor create để phân bổ bộ nhớ.

Dưới đây là ví dụ hoàn chỉnh:

Thuộc tính hiển thị của các lớp thành viên

Thuộc tính hiển thị đề cập đến khả năng tiếp cận của các thành viên, tức là vị trí chính xác mà các thành viên có thể được truy cập. Lớp trong Pascal có 5 cấp độ hiển thị: Public (công khai), Private (riêng tư), Strict Private, Protected (bảo vệ) và Published.

Constructor và Destructor cho lớp trong Pascal

Constructor là phương thức đặc biệt, được gọi tự động bất cứ khi nào có một đối tượng được tạo. Vì vậy người dùng có thể tận dụng các hành vi này bằng cách khởi tạo nhiều thứ thông qua hàm constructor.

Pascal cung cấp hàm đặc biệt có tên là create() để định nghĩa constructor. Bạn có thể thêm nhiều đối số vào hàm constructor nếu muốn.

Ví dụ dưới đây tạo một constructor cho lớp có tên là Books và nó sẽ khởi tạo giá và tên cho sách tại thời điểm tạo đối tượng.

Khi đoạn mã trên được biên dịch và thực thi, nó sẽ trả về kết quả dưới đây:

Phương pháp của destructor phá hủy đối tượng bằng cách giải phóng tất cả các tài nguyên được sử dụng trong lớp.

Tính kế thừa trong lớp Pascal

Các định nghĩa Pasal có thể tùy chọn kế thừa từ định nghĩa lớp cha, sử dụng cú pháp dưới đây:

type

childClas-identifier = class(baseClass-identifier)

< members="">

end;

Ví dụ dưới đây cung cấp lớp Novels, kế thừa từ lớp Books và bổ sung thêm một số hàm dựa trên yêu cầu.

Khi đoạn mã trên được biên dịch và thực thi, nó sẽ trả về kết quả dưới đây:

Một số lưu ý quan trọng:

- Các thành viên của lớp Books phải có thuộc tính hiển thị Protected.

- Lớp Novels có 2 constructor, vì vậy toán tử overload được sử dụng cho các hàm chồng.

- Thủ tục Books.Display được khai báo ảo, vì vậy phương thức từ lớp Novels có thể ghi đè nó.

- Constructor Novels.Create gọi lớp construtor sử dụng từ khóa inherited.

Interface trong Pascal

Interface trong Pascal được định nghĩa để cung cấp tên hàm chung cho người thực hiện. Người thực hiện có thể triển khai các interface theo yêu cầu. Có thể nói interfae là bộ xương, được triển khai bởi các nhà phát triển. Dưới đây là ví dụ về interface trong Pascal:

Lưu ý, khi một lớp triển khai interface, lớp đó phải triển khai tất cả các phương thức của interface. Nếu phương thức của interface không được triển khai, trình biên dịch sẽ trả về thông báo lỗi .

Lớp trừu tượng trong Pascal

Lớp trừu tượng (abstract class) trong Pasal là lớp không thể khởi tạo, mà chỉ kế thừa. Lớp trừu tượng được định nghĩa bằng cách thêm từ khóa abstract trong định nghĩa lớp như dưới đây:

Khi kế thừa từ lớp trừu tượng, tất cả các phương thức được đánh dấu trừu tượng trong khai báo lớp của lớp cha phải được định nghĩa bằng lớp con, ngoài ra phương thức này phải được định nghĩa với cùng thuộc tính hiển thị.

Từ khóa Static trong Pascal

Khi báo các lớp thành viên hoặc các phương thức là tĩnh để có thể truy cập mà không cần phải khởi tạo lớp. Một thành viên được khai báo là tĩnh không thể được truy cập với thực thể của đối tượng lớp.

Tham khảo ví dụ dưới đây để hiểu rõ hơn về khái niệm này:

Khi đoạn mã trên được biên dịch và thực thi, nó sẽ trả về kết quả dưới đây:

Bạn phải sử dụng {$static on} cho các thành viên tĩnh.

Bài viết trên đây bạn đọc đã cùng Taimienphi.vn tìm hiểu về lớp trong Pascal. Bạn đọc có thể tìm hiểu thêm rất nhiều bài viết khác về Pascal trên Taimienphi.vn như mảng trong Pascal để nắm rõ hơn về ngôn ngữ này. Nếu có thắc mắc hoặc câu hỏi nào cần giải đáp, vui lòng để lại ý kiến đánh giá của bạn trong phần bình luận bên dưới bài viết nhé.

Về cơ bản lớp trong Pascal được định nghĩa gần giống như đối tượng trong Pascal. Để tìm hiểu sâu hơn về lớp trong Pascal, bạn đọc cùng tham khảo bài viết dưới đây của Taimienphi.vn nhé.
Mảng trong Pascal
Thủ tục trong Pascal
Biến kiểu Variant trong Pascal
Unit, đơn vị trong Pascal
Phạm vi của biến trong Pascal
Kiểu bản ghi trong Pascal

ĐỌC NHIỀU