Rexx - Hướng đối tượng
Khi bạn cài đặt ooRexx theo chương môi trường, bạn cũng sẽ có khả năng làm việc với các lớp và đối tượng. Xin lưu ý rằng tất cả mã sau cần được chạy trong trình thông dịch ooRexx. Trình thông dịch Rexx thông thường sẽ không thể chạy mã hướng đối tượng này.
Khai báo lớp và phương thức
Một lớp được định nghĩa với khai báo Cú pháp sau.
Cú pháp
::class classname
Ở đâu classname là tên được đặt cho lớp.
Một phương thức trong một lớp được định nghĩa với khai báo Cú pháp sau.
Cú pháp
::method methodname
Ở đâu methodname là tên được đặt cho phương thức.
Một thuộc tính trong một lớp được định nghĩa với khai báo Cú pháp bên dưới.
Cú pháp
::attribute propertyname
Ở đâu propertyname là tên được đặt cho tài sản.
Thí dụ
Sau đây là một ví dụ về một lớp trong Rexx.
::class student
::attribute StudentID
::attribute StudentName
Những điểm sau đây cần lưu ý về chương trình trên.
- Tên của lớp là học sinh.
- Lớp có 2 thuộc tính là StudentID và StudentName.
Phương pháp Getter và Setter
Phương thức Getter và Setter được sử dụng để tự động đặt và lấy các giá trị của các thuộc tính. Trong Rexx, khi bạn khai báo một thuộc tính với từ khóa thuộc tính, các phương thức getter và setter đã được đặt sẵn.
Thí dụ
::class student
::attribute StudentID
::attribute StudentName
Trong ví dụ trên, sẽ có các phương thức Getter và Setter cho StudentId và StudentName.
Một ví dụ về cách chúng có thể được sử dụng được hiển thị trong chương trình sau.
/* Main program */
value = .student~new
value~StudentID = 1
value~StudentName = 'Joe'
say value~StudentID
say value~StudentName
exit 0
::class student
::attribute StudentID
::attribute StudentName
Kết quả của chương trình trên sẽ như hình dưới đây.
1
Joe
Phương pháp phiên bản
Các đối tượng có thể được tạo từ lớp thông qua ~new operator. Một phương thức từ lớp có thể được gọi theo cách sau.
Object~methodname
Ở đâu methodname là phương thức cần được gọi từ lớp.
Thí dụ
Ví dụ sau cho thấy cách một đối tượng có thể được tạo từ một lớp và phương thức tương ứng được gọi.
/* Main program */
value = .student~new
value~StudentID = 1
value~StudentName = 'Joe'
value~Marks1 = 10
value~Marks2 = 20
value~Marks3 = 30
total = value~Total(value~Marks1,value~Marks2,value~Marks3)
say total
exit 0
::class student
::attribute StudentID
::attribute StudentName
::attribute Marks1
::attribute Marks2
::attribute Marks3
::method 'Total'
use arg a,b,c
return (ABS(a) + ABS(b) + ABS(c))
Kết quả của chương trình trên sẽ như hình dưới đây.
60
Tạo nhiều đối tượng
Người ta cũng có thể tạo nhiều đối tượng của một lớp. Ví dụ sau đây sẽ cho thấy điều này có thể đạt được như thế nào.
Ở đây, chúng ta đang tạo 3 đối tượng (st, st1 và st2) và gọi các thành viên thể hiện và phương thức thể hiện của chúng tương ứng.
Hãy xem một ví dụ về cách nhiều đối tượng có thể được tạo.
Thí dụ
/* Main program */
st = .student~new
st~StudentID = 1
st~StudentName = 'Joe'
st~Marks1 = 10
st~Marks2 = 20
st~Marks3 = 30
total = st~Total(st~Marks1,st~Marks2,st~Marks3)
say total
st1 = .student~new
st1~StudentID = 2
st1~StudentName = 'John'
st1~Marks1 = 10
st1~Marks2 = 20
st1~Marks3 = 40
total = st1~Total(st1~Marks1,st1~Marks2,st1~Marks3)
say total
st2 = .student~new
st2~StudentID = 3
st2~StudentName = 'Mark'
st2~Marks1 = 10
st2~Marks2 = 20
st2~Marks3 = 30
total = st2~Total(st2~Marks1,st2~Marks2,st2~Marks3)
say total
exit 0
::class student
::attribute StudentID
::attribute StudentName
::attribute Marks1
::attribute Marks2
::attribute Marks3
::method 'Total'
use arg a,b,c
return (ABS(a) + ABS(b) + ABS(c))
Kết quả của chương trình trên sẽ như hình dưới đây.
60
70
60
Di sản
Kế thừa có thể được định nghĩa là quá trình mà một lớp có được các thuộc tính (phương thức và trường) của lớp khác. Với việc sử dụng kế thừa, thông tin được quản lý theo thứ tự phân cấp.
Lớp kế thừa các thuộc tính của lớp khác được gọi là subclass (lớp dẫn xuất, lớp con) và lớp có các thuộc tính được kế thừa được gọi là superclass (lớp cơ sở, lớp cha).
Hãy xem một ví dụ về kế thừa trong Rexx. Trong ví dụ sau, chúng tôi đang tạo một lớp có tên làPerson. Từ đó, chúng tôi sử dụng từ khóa lớp con để tạoStudent class như một sub-class of Person.
Thí dụ
/* Main program */
st = .student~new
st~StudentID = 1
st~StudentName = 'Joe'
st~Marks1 = 10
st~Marks2 = 20
st~Marks3 = 30
say st~Total(st~Marks1,st~Marks2,st~Marks3)
exit 0
::class Person
::class student subclass Person
::attribute StudentID
::attribute StudentName
::attribute Marks1
::attribute Marks2
::attribute Marks3
::method 'Total'
use arg a,b,c
return (ABS(a) + ABS(b) + ABS(c))
Kết quả của chương trình trên sẽ như hình dưới đây.
60