II. Lập trình hướng đối tượng trong ABAP 1 Lớp trong ABAP:
b. Định nghĩa lớp và các thuộc tính (attribute) của nó:
Một lớp chứa: + phần định nghĩa + phần cài đặt
Định nghĩa các thành phần: thuộc tính, sự kiện, phương thức trong phần định nghĩa. Phần cài đặt chứa code cho các sự kiện và các phương thức được định nghĩa trong phần định nghĩa.
Phần định nghĩa của một lớp là: + public
+ protected + private
Khi định nghĩa lớp, bạn xác định từ khóa class theo sau bởi tên lớp. Đồng thời chỉ định từ khóa definition hoặc implementation để chỉ phần lớp mà bạn đang định nghĩa.
*---* * class name definition *
*---* class name definition.
public section. protected section. private section. endclass.
*---* * class name implementation *
*---* class name implementation.
end class.
Giả sử bạn định nghĩa lớp employee, bạn chỉ muốn lớp employee và các lớp con của nó có thể truy cập vào biến "first_name" và phương thức "display_attributes".
*---* * class name definition *
*---* class employee definition.
protected section.
data first_name(10) type c. data last_name(10) type c.
"code to define the method comes here endclass.
*---* * class name implementation * *---* class employee definition.
"code to implement the method comes here endclass.
Thuộc tính là thành phần của lớp. Nó quan trọng vì thuộc tính lưu dữ liệu trong chương trình. Bạn có thể thao tác dữ liệu và thực hiện các thao tác logical thể tạo ra kết qủa như mong muốn.
Phương thức nhận dữ liệu từ chương trình, xử lý dữ liệu và trả về kết xuất. Sử dụng câu lệnh methods để định nghĩa phương thức trong một lớp. Bạn cần xác định tên phương thức trong câu lệnh methods.
methods : method name.
Giả sử bạn định nghĩa một phương thức "display_attributes" trong lớp "employees". Chỉ có các đối tượng của lớp "employees" mới có thể truy cập các phương thức đó.
class employees definition. private section.
methods : display_attributes. endclass.
Khi bạn cần định nghĩa một phương thức nhận dữ liệu từ chương trình, bạn sử dụng từ khóa importing. Xác định tên của đối tượng dữ liệu trong câu lệnh methods.
methods method name importing variable type data type. Ví dụ:
methods get_name importing name(15) type c.
Khi muốn trả kết xuất của phương thức cho chương trình, bạn sử dụng từ khóa exporting:
methods method name exporting variable type data type. Ví dụ:
Định nghĩa phương thức "display_info" chỉ có lớp "employee" có thể truy cập: class employee definition.
private section.
methods display_info exporting code type c. endclass.
Sau khi định nghĩa phương thức trong lớp, bạn cần viết code để cài đặt phương thức trong phần cài đặt của lớp.
method method name. statements.
endmethod. Ví dụ:
method employee.
write : / 'Name of the employee is:', name. endmethod.
Sau khi định nghĩa và cài đặt phương thức trong lớp, bạn có thể gọi phương thức trong chương trình. Bạn sử dụng đối tượng để gọi phương thức trong chương trình.
object name->method name(variable name = value). emp_name->display_attributes().
Ví dụ:
class airplane definition. private section.
methods get_attributes importing flight_num type c. data name type string.
endclass.
class airplane implementation. method get_attributes.
name = flight_num. endmethod.
endclass.
data flight_list type ref to airplane. create object flight_list.
flight_list->get_attributes(flight_num(5) = 'JJ25').
Event là một loại phương thức được rút trích dựa vào điều kiện mà bạn chỉ định. Chỉ định một event thực thi khối chương trình gọi là event handlers.
Định nghĩa event bằng câu lệnh events: events event name.
Xác định tham số kết xuất cho sự kiện, sử dụng từ khóa exporting với các tham số. events event name exporting variable name type data type.
Ví dụ:
events increment exporting counter(3) type n.
Định nghĩa một event handler để xác định code cần được thực thi khi một sự kiện được rút trích. Sử dụng câu lệnh set handler để định nghĩa event handler.
set handler object name->method name for variable. Ví dụ:
set handler emp_name->display_name for name.
=> sử dụng đối tượng "emp_name" để gọi phương thức "display_name" khi sự kiện rút trích event handler. Biến "name" là tham số đầu vào cho phương thức.
Khi bạn định nghĩa một event trong lớp, bạn có thể rút trích sự kiện trong chương trình bằng câu lệnh raise event.
raise event event name. if emp_code = 12455.
raise event display_name. else.
continue. endif.
Giả sử bạn kiểm tra giá trị "counter" và rút trích event "display_value" khi giá trị là "10". Khi được rút trích, sự kiện gọi phương thức "display" để hiển thị message "The
value of counter equals 10". Bạn cần định nghĩa event handler cho event. class numbers definition.
private section.
events display_value exporting value type n. methods display.
endclass.
class numbers implementation.
"code to implement the method comes here endclass.
start-of-selection.
data counter type n value 0. counter = counter + 1. if counter = 12445.
raise event display_value. else
continue. endif.
set handler emp_name->display for counter.
Bạn muốn định nghĩa event "display_info" trong lớp "products". Bạn muốn rút trích event nếu giá trị của product code là "pp0023". Khi event handler được rút trích, bạn muốn gọi phương thức "define" để hiển thị product code.
class products definition. public section.
methods : display exporting code c. methods : m1.
events display_info. endclass.
class products implementation. method display.
"code for method comes here endmethod.
if code= 'pp0023'.
raise event display_info. endif.
endmethod. endclass.
start-of-selection.
"code to create an object comes here set handler r_dis->display for code.
Trước khi gọi phương thức, cần định nghĩa một biến của lớp. data variable name type ref to class name.
Ví dụ:
dat flight_num type ref to airplane.
Sau khi định nghĩa một biến lớp, bạn sử dụng câu lệnh create để tạo đối tượng. Sau đó gọi phương thức của lớp bằng cách sử dụng đối tượng này.
create object object name.
object name-> method name(). Ví dụ:
start-of-selection.
data flight_num type ref to airplane. create object flight_num.
flight_num->display_details().
Giả sử bạn định nghĩa phương thức "display_name" trong lớp "employee". Bạn muốn gọi phương thức trong chương trình bằng cách sử dụng đối tượng "r_dis" của lớp "employee". Để định nghĩa biến sử dụng data r_dis type ref to employee, để tạo đối tượng sử dụng create object r_dis, và gọi phương thức sử dụng r_dis->display_name(). class employee definition.
public section.
methods display_name. data name type c. endclass.
method display_name.
"code for the method comes here endmethod.
endclass.
start_of_selection.
data r_dis type ref to employee. create object r_dis.
r_dis->display_name().
Note:
ABAP hỗ trợ hai mô hình lập trình: thủ tục và hướng đối tượng. Lập trình HĐT dựa vào khái niệm lớp. Dữ liệu và phương thức trong chương trình HĐT được liên kết với nhau và phụ thuộc vào lớp mà bạn định nghĩa chúng.
Bạn định nghĩa thành phần: thuộc tính, sự kiện, phương thức của lớp trong các vùng: public, protected, private.
Phương thức nhận dữ liệu từ chương trình, xử lý dữ liệu và trả về kết xuất cho chương trình.
Sự kiện được rút trích dựa vào điều kiện. Khi một sự kiện được rút trích, khối chương trình gọi event handers sẽ được thực thi.
Khi bạn định nghĩa hoặc cài đặt một lớp, bạn có thể gọi các phương thức của lớp bằng cách khởi tạo lớp.