Các bài viết trước Taimienphi.vn đã đề cập đến đơn vị, ngày và giờ trong Pascal, vì vậy trong bài viết tiếp theo trong chuỗi chủ đề về Pascal dưới đây, Taimienphi.vn sẽ cung cấp cho bạn các thông tin về hướng đối tượng trong Pascal bao gồm khái niệm và ví dụ minh họa.
Bạn có thể tưởng tượng vũ trụ của chúng ta được tạo nên từ các vật thể, đối tượng khác nhau như mặt trời, mặc trăng, trái đất, ... . Tương tự như vậy, bạn có thể tưởng tượng xe hơi được tạo nên từ các đối tượng như bánh xe, tay lái, bánh răng cưa,...Tương tự, hướng đối tượng trong Pascal là để bạn định hình, định hướng để có thể tạo ra một phần mềm hoàn chỉnh.
Khái niệm lập trình hướng đối tượng (object-oriented programming) giả định tất cả mọi thứ là đối tượng và triển khai phần mềm bằng cách sử dụng các đối tượng khác nhau. Trong Pascal có 2 loại cấu trúc dữ liệu được sử dụng để triển khai một đối tượng thực:
- Kiểu đối tượng
- Kiểu lớp
Khái niệm hướng đối tượng trong Pascal
Trước khi đi vào tìm hiểu chi tiết, trước hết cần tìm hiểu các khái niệm quan trọng liên quan đến hướng đối tượng (Object-Oriented) trong Pascal.
- Đối tượng (Object): Đối tượng trong Pascal là kiểu bản ghi đặc biệt có chứa các trường như một bản ghi. Tuy nhiên không giống như các bản ghi, đối tượng trong Pascal còn chứa cả các hàm và thủ tục. Các hàm và thủ tục này được giữ như các con trỏ tới các phương thức kết hợp với kiểu của đối tượng.
- Lớp (class): Lớp trong Pascal được định nghĩa gần giống với đối tượng, chỉ khác ở chỗ cách mà lớp và đối tượng được tạo ra như thế nào. 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. Lớp trong Pascal là con trỏ tới đối tượng chứ không phải đối tượng.
- Tạo đối tượng của lớp: Tạo đối tượng của lớp là tạo một biến của kiểu lớp đó. Vì lớp chỉ là con trỏ, khi biến của một kiểu lớp được khai báo, bộ nhớ chỉ phân bổ cho con trỏ chứ không phải toàn bộ đối tượng. Chỉ khi nó tạo đối tượng của lớp sử dụng một trong số các constructor, bộ nhớ sẽ được phân bổ cho đối tượng. Các đối tượng của lớp cũng được gọi là "đối tượng", nhưng đừng nhầm lẫn các đối tượng này với đối tượng trong Pascal.
Trong bài viết này Taimienphi.vn sẽ viết "Đối tượng" cho đối tượng trong Pascal và "đối tượng" cho khái niệm đối tượng hoặc đối tượng lớp để bạn đọc nhận biết rõ hơn.
- Các biến thành viên (member variable): Là các biến được định nghĩa trong một lớp hoặc Đối tượng trong Pascal.
- Các hàm thành viên (member function): Là các hàm hoặc thủ tục được định nghĩa trong 1 lớp hoặc Đối tượng trong Pascal và được sử dụng để truy cập dữ liệu đối tượng.
- Thuộc tính hiển thị của các thành viên: Các thành viên của Đối tượng hoặc lớp trong Pascal còn được gọi là các trường. Các trường này có các thuộc tính hiển thị khác nhau.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. Đối tượng trong Pascal có 3 cấp độ hiển thị: Public (công khai), Private (riêng tư) và Protected (bảo vệ).
- Tính kế thừa (Inheritance): Khi một lớp được định nghĩa bằng cách thừa kế các hàm hiện tại của lớp cha, nó được gọi là kế thừa. Ở đây lớp con sẽ kế thừa tất cả hoặc một số hàm thành viên và các biến của lớp cha. Đối tượng cũng có thể được kế thừa.
- Lớp cha (parent class): Lớp được kế thừa bởi lớp khác được gọi là lớp cơ sở hoặc lớp cha.
- Lớp con (child class): Lớp kế thừa từ lớp khác được gọi là lớp con.
- Đa hình (Polymorphism): Khái niệm hướng đối tượng trong Pascal này có thể hiểu tương tự như hàm được sử dụng cho các mục đích khác nhau. Chẳng hạn tên hàm giống nhau nhưng hàm lấy đối số và thực hiện các nhiệm vụ khác nhau. Các lớp trong Pascal thực hiện đa hình. Đối tượng không thực hiện đa hình.
- Chồng các hàm (Overloading): Nó là một kiểu đa hình, trong đó một số hoặc tất cả các toán tử được triển khai theo cách khác nhau, tùy thuộc vào kiểu và đối số. Tương tự chồng các hàm để thực hiện các nhiệm vụ khác nhau. Các lớp Pascal triển khai chồng các hàm, nhưng Đối tượng trong Pascal thì không.
- Kiểu dữ liệu trừu tượng (Data Abstraction): Bất kỳ đại diện của dữ liệu, trong đó các triển khi chi tiết bị ẩn.
- Tính đóng gói (Encapsulation): Đề cập đến khái niệm mà người dùng đóng gói tất cả dữ liệu và các hàm thành viên với nhau để tạo một đối tượng.
- Constructor: Là loại hàm đặc biệt, được gọi tự động bất cứ khi nào hình thành đối tượng từ một lớp hoặc đối tượng trong Pascal.
- Destructor: Đề cập đến loại hàm đặc biệt được gọi tự động bất cứ khi nào Đối tượng hoặc lớp bị xóa hoặc ra khỏi phạm vi.
Định nghĩa đối tượng trong Pascal
Đối tượng trong Pascal được sử dụng để khai báo kiểu. Cấu trúc chung của một khai báo đối tượng có dạng như sau:
Định nghĩa Rectangle Object gồm 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à thủ tục để vẽ hình chữ nhật.
Sau khi tạo đối tượng, bạn có thể gọi các hàm thành viên liên quan đến đối tượng đó. Một hàm thành viên chỉ có thể xử lý một biến thành viên của đối tượng liên quan.
Dưới đây là ví dụ về cách thiết lập chiều dài và chiều rộng cho 2 đối tượng hình chữ nhật và vẽ bằng cách gọi các hàm thành viên.
Ví dụ khác về cách sử dụng đối tượng trong Pascal:
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:
Thuộc tính hiển thị của các thành viên đối tượng
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 đối tượng. Thành viên đối tượng trong Pascal bao gồm 3 mức độ hiển thị:
Mặc định, các trường và phương thức của một đối tượng được hiển thị công khai và được xuất ra bên ngoài đơn vị hiện tại.
Constructor và Destructor cho đối tượng trong Pascal
Constructor là loại phương thức đặc biệt, được gọi tự động bất cứ khi nào một đối tượng được tạo. Bạn có thể tạo một constructor trong Pascal bằng cách khai báo một phương thức bằng từ khóa constructor. Thông thường, tên phương thức là Init, tuy nhiên bạn có thể cung cấp định dạng hợp lệ bất kỳ của riêng mình. Bạn cũng có thể truyền nhiều đối số vào hàm constructor nếu muốn.
Destructor trong Pascal là các phương thức được gọi trong quá trình phá hủy đối tượng. Phương thức destructor phá hủy phân bổ bộ nhớ bất kỳ được tạo bởi constructor.
Ví dụ dưới đây cung cấp một constructor và một destructor cho lớp Rectangle, sẽ khởi tạo chiều dài và chiều rộng hình chữ nhật tại thời điểm tạo đối tượng và phá hủy khi nó vượt khỏi phạm vi.
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:
Tính kế thừa của đối tượng trong Pascal
Các đối tượng trong Pascal có thể tùy ý thừa kế từ một đối tượng cha. Chương trình dưới đây sẽ minh họa tính kế thừa của đối tượng trong Pascal, bằng cách tạo một đối tượng khác có tên TableTop, được kế thừa từ đối tượng Rectangle.
Dưới đây là một số lưu ý quan trọng bạn cần biết:
- Đối tượng Tabletop đã thừa hưởng tất cả các thành viên của đối tượng Rectangle.
- Ngoài ra có 1 phương thức vẽ trong TableTop. Khi phương thức vẽ được gọi bằng cách sử dụng đối tượng TableTop, phương thức vẽ TableTop cũng được gọi.
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:
https://thuthuat.taimienphi.vn/huong-doi-tuong-trong-pascal-34008n.aspx
Bài viết trên Taimienphi.vn vừa cung cấp cho bạn các thông tin liên quan đến hướng đối tượng trong Pascal. Ngoài ra, bạn có thể tìm hiểu thêm về lệnh vòng lặp trong Pascal. Bài viết tiếp theo Taimienphi.vn sẽ giới thiệu tiếp cho bạn về lớp trong Pascal. Đừng quên chia sẽ các thông tin hữu ích cho bạn bè, người thân của bạn nhé.