SAP ABAP - Lớp học

Một lớp được sử dụng để chỉ định dạng của một đối tượng và nó kết hợp biểu diễn dữ liệu và các phương thức để thao tác dữ liệu đó thành một gói gọn gàng. Dữ liệu và các hàm trong một lớp được gọi làmembers of the class.

Định nghĩa và triển khai lớp

Khi bạn xác định một lớp, bạn xác định một bản thiết kế cho một kiểu dữ liệu. Điều này không thực sự xác định bất kỳ dữ liệu nào, nhưng nó xác định tên lớp có nghĩa là gì, một đối tượng của lớp sẽ bao gồm những gì và những thao tác nào có thể được thực hiện trên một đối tượng như vậy. Nghĩa là, nó xác định các đặc điểm trừu tượng của một đối tượng, chẳng hạn như các thuộc tính, trường và thuộc tính.

Cú pháp sau đây cho thấy cách xác định một lớp:

CLASS <class_name> DEFINITION. 
.......... 
.......... 
ENDCLASS.

Định nghĩa lớp bắt đầu bằng từ khóa CLASS theo sau là tên lớp, DEFINITION và nội dung lớp. Định nghĩa của một lớp có thể chứa các thành phần khác nhau của lớp như thuộc tính, phương thức và sự kiện. Khi chúng ta khai báo một phương thức trong khai báo lớp, thì việc triển khai phương thức phải được đưa vào trong việc thực thi lớp. Cú pháp sau đây cho thấy cách triển khai một lớp:

CLASS <class_name> IMPLEMENTATION. 
........... 
.......... 
ENDCLASS.

Note- Việc thực thi một lớp chứa việc thực hiện tất cả các phương thức của nó. Trong Đối tượng ABAP, cấu trúc của một lớp chứa các thành phần như thuộc tính, phương thức, sự kiện, kiểu và hằng số.

Thuộc tính

Thuộc tính là các trường dữ liệu của một lớp có thể có bất kỳ kiểu dữ liệu nào như C, I, F và N. Chúng được khai báo trong khai báo lớp. Các thuộc tính này có thể được chia thành 2 loại: thuộc tính instance và static. Aninstance attributexác định trạng thái cụ thể của đối tượng. Các trạng thái khác nhau đối với các đối tượng khác nhau. Một thuộc tính instance được khai báo bằng cách sử dụng câu lệnh DATA.

Static attributesxác định trạng thái chung của một lớp được chia sẻ bởi tất cả các cá thể của lớp. Nghĩa là, nếu bạn thay đổi một thuộc tính static trong một đối tượng của một lớp, thì thay đổi đó cũng hiển thị cho tất cả các đối tượng khác của lớp. Một thuộc tính tĩnh được khai báo bằng cách sử dụng câu lệnh CLASS-DATA.

Phương pháp

Phương thức là một hàm hoặc thủ tục đại diện cho hành vi của một đối tượng trong lớp. Các phương thức của lớp có thể truy cập bất kỳ thuộc tính nào của lớp. Định nghĩa của một phương thức cũng có thể chứa các tham số để bạn có thể cung cấp các giá trị cho các tham số này khi các phương thức được gọi. Định nghĩa của một phương thức được khai báo trong phần khai báo lớp và được thực hiện trong phần thực thi của một lớp. Câu lệnh METHOD và ENDMETHOD được sử dụng để xác định phần thực thi của một phương thức. Cú pháp sau đây cho thấy cách triển khai một phương thức:

METHOD <m_name>. 
.......... 
.......... 
ENDMETHOD.

Trong cú pháp này, <m_name> đại diện cho tên của một phương thức. Note - Bạn có thể gọi một phương thức bằng cách sử dụng câu lệnh CALL METHOD.

Truy cập các thuộc tính và phương thức

Các thành phần lớp có thể được xác định trong các phần hiển thị công khai, riêng tư hoặc được bảo vệ để kiểm soát cách các thành phần này có thể được truy cập. Phần khả năng hiển thị riêng tư được sử dụng để từ chối quyền truy cập vào các thành phần từ bên ngoài của lớp. Các thành phần như vậy chỉ có thể được truy cập từ bên trong lớp chẳng hạn như một phương thức.

Các thành phần được xác định trong phần hiển thị công khai có thể được truy cập từ bất kỳ ngữ cảnh nào. Theo mặc định, tất cả các thành viên của một lớp sẽ là riêng tư. Trên thực tế, chúng ta định nghĩa dữ liệu trong phần private và các phương thức liên quan trong phần public để chúng có thể được gọi từ bên ngoài lớp như được hiển thị trong chương trình sau.

  • Các thuộc tính và phương thức được khai báo trong phần Public trong một lớp có thể được truy cập bởi lớp đó và bất kỳ lớp, lớp con nào khác của chương trình.

  • Khi các thuộc tính và phương thức được khai báo trong phần Protected trong một lớp, chúng chỉ có thể được truy cập bởi lớp đó và các lớp con (lớp dẫn xuất).

  • Khi các thuộc tính và phương thức được khai báo trong phần Riêng tư trong một lớp, chúng chỉ có thể được truy cập bởi lớp đó chứ không phải bởi bất kỳ lớp nào khác.

Thí dụ

Report ZAccess1. 
CLASS class1 Definition.
   PUBLIC Section.
      Data: text1 Type char25 Value 'Public Data'.
      Methods meth1.
		
   PROTECTED Section.
      Data: text2 Type char25 Value 'Protected Data'.
		
   PRIVATE Section.     
      Data: text3 Type char25 Value 'Private Data'. 
ENDCLASS.
 
CLASS class1 Implementation.   
   Method meth1.     
      Write: / 'Public Method:',   
             / text1,
             / text2,
             / text3.
      Skip.
   EndMethod.
ENDCLASS. 

Start-Of-Selection.   
   Data: Objectx Type Ref To class1.
   Create Object: Objectx.
   CALL Method: Objectx→meth1.
   Write: / Objectx→text1.

Đoạn mã trên tạo ra kết quả sau:

Public Method: 
Public Data 
Protected Data 
Private Data
  
Public Data

Thuộc tính tĩnh

Thuộc tính Static được khai báo với câu lệnh CLASS-DATA. Tất cả các đối tượng hoặc cá thể có thể sử dụng thuộc tính static của lớp. Các thuộc tính static được truy cập trực tiếp với sự trợ giúp của tên lớp như class_name⇒name_1 = 'Some Text'.

Thí dụ

Sau đây là một chương trình mà chúng ta muốn in một văn bản có dòng số 4 đến 8 lần. Chúng tôi định nghĩa một lớp class1 và trong phần công khai, chúng tôi khai báo CLASS-DATA (thuộc tính tĩnh) và một phương thức. Sau khi thực hiện lớp và phương thức, chúng ta truy cập trực tiếp vào thuộc tính static trong sự kiện Start-Of-Selection. Sau đó, chúng ta chỉ cần tạo thể hiện của lớp và gọi phương thức.

Report ZStatic1. 
CLASS class1 Definition.   
   PUBLIC Section.
      CLASS-DATA: name1 Type char45,
                  data1 Type I.
   Methods: meth1. 
ENDCLASS. 

CLASS class1 Implementation.   
   Method meth1.
      Do 4 Times.
         data1 = 1 + data1.
         Write: / data1, name1.
      EndDo.
      Skip.
   EndMethod. 
ENDCLASS. 

Start-Of-Selection. 
   class1⇒name1 = 'ABAP Object Oriented Programming'.
   class1⇒data1 = 0.
   Data: Object1 Type Ref To class1,
         Object2 Type Ref To class1.
			
   Create Object: Object1, Object2.
   CALL Method: Object1→meth1, 
                Object2→meth1.

Đoạn mã trên tạo ra kết quả sau:

Người xây dựng

Các hàm tạo là các phương thức đặc biệt được gọi tự động, trong khi tạo một đối tượng hoặc truy cập các thành phần của một lớp. Hàm tạo được kích hoạt bất cứ khi nào một đối tượng được tạo, nhưng chúng ta cần gọi một phương thức để kích hoạt phương thức chung. Trong ví dụ sau, chúng ta đã khai báo hai phương thức public là method1 và constructor. Cả hai phương pháp này đều có các hoạt động khác nhau. Trong khi tạo một đối tượng của lớp, phương thức khởi tạo sẽ kích hoạt hoạt động của nó.

Thí dụ

Report ZConstructor1. 
CLASS class1 Definition.
   PUBLIC Section.
      Methods: method1, constructor.
ENDCLASS. 

CLASS class1 Implementation.
   Method method1.
      Write: / 'This is Method1'.
   EndMethod.
	
   Method constructor.
      Write: / 'Constructor Triggered'.
   EndMethod. 
ENDCLASS. 

Start-Of-Selection.
   Data Object1 Type Ref To class1.
   Create Object Object1.

Đoạn mã trên tạo ra kết quả sau:

Constructor Triggered

Toán tử ME trong các phương pháp

Khi bạn khai báo một biến thuộc bất kỳ kiểu nào trong phần công khai của một lớp, bạn có thể sử dụng nó trong bất kỳ triển khai nào khác. Một biến có thể được khai báo với giá trị ban đầu trong phần công khai. Chúng ta có thể khai báo lại biến bên trong một phương thức với giá trị khác. Khi chúng ta viết biến bên trong phương thức, hệ thống sẽ in ra giá trị đã thay đổi. Để phản ánh giá trị trước đó của biến, chúng ta phải sử dụng toán tử 'ME'.

Trong chương trình này, chúng tôi đã khai báo một biến công khai text1 và bắt đầu bằng một giá trị. Chúng tôi đã khai báo lại cùng một biến, nhưng được khởi tạo với giá trị khác. Bên trong phương thức, chúng ta đang viết biến đó bằng toán tử 'ME' để nhận giá trị được khởi tạo trước đó. Chúng tôi nhận được giá trị đã thay đổi bằng cách khai báo trực tiếp.

Thí dụ

Report ZMEOperator1. 
CLASS class1 Definition.
   PUBLIC Section. 
	
Data text1 Type char25 Value 'This is CLASS Attribute'.
   Methods method1. 
ENDCLASS. 

CLASS class1 Implementation.
   Method method1. 
	
Data text1 Type char25 Value 'This is METHOD Attribute'.
   Write: / ME→text1,
          / text1.
   ENDMethod.
ENDCLASS. 

Start-Of-Selection.
   Data objectx Type Ref To class1.
   Create Object objectx.
   CALL Method objectx→method1.

Đoạn mã trên tạo ra kết quả sau:

This is CLASS Attribute 
This is METHOD Attribute