SAP ABAP - Klasy
Klasa służy do określania formy obiektu i łączy reprezentację danych i metody manipulowania tymi danymi w jeden zgrabny pakiet. Nazywa się dane i funkcje w klasiemembers of the class.
Definicja i implementacja klasy
Definiując klasę, definiujesz plan dla typu danych. W rzeczywistości nie definiuje to żadnych danych, ale definiuje, co oznacza nazwa klasy, z czego będzie się składał obiekt tej klasy i jakie operacje można wykonać na takim obiekcie. Oznacza to, że definiuje abstrakcyjne cechy obiektu, takie jak atrybuty, pola i właściwości.
Poniższa składnia pokazuje, jak zdefiniować klasę -
CLASS <class_name> DEFINITION.
..........
..........
ENDCLASS.
Definicja klasy zaczyna się od słowa kluczowego CLASS, po którym następuje nazwa klasy, DEFINICJA i treść klasy. Definicja klasy może zawierać różne składniki klasy, takie jak atrybuty, metody i zdarzenia. Kiedy deklarujemy metodę w deklaracji klasy, implementacja metody musi być uwzględniona w implementacji klasy. Poniższa składnia pokazuje, jak zaimplementować klasę -
CLASS <class_name> IMPLEMENTATION.
...........
..........
ENDCLASS.
Note- Implementacja klasy zawiera implementację wszystkich jej metod. W obiektach ABAP struktura klasy zawiera składniki, takie jak atrybuty, metody, zdarzenia, typy i stałe.
Atrybuty
Atrybuty to pola danych klasy, które mogą mieć dowolny typ danych, taki jak C, I, F i N. Są zadeklarowane w deklaracji klasy. Atrybuty te można podzielić na 2 kategorie: atrybuty instancji i atrybuty statyczne. Nainstance attributedefiniuje stan obiektu dla instancji. Stany są różne dla różnych obiektów. Atrybut instancji jest deklarowany za pomocą instrukcji DATA.
Static attributeszdefiniuj wspólny stan klasy, który jest współużytkowany przez wszystkie instancje tej klasy. Oznacza to, że jeśli zmienisz atrybut statyczny w jednym obiekcie klasy, zmiana będzie widoczna również dla wszystkich innych obiektów tej klasy. Atrybut statyczny jest deklarowany za pomocą instrukcji CLASS-DATA.
Metody
Metoda to funkcja lub procedura, która reprezentuje zachowanie obiektu w klasie. Metody klasy mogą uzyskać dostęp do dowolnego atrybutu klasy. Definicja metody może również zawierać parametry, dzięki czemu można podać wartości do tych parametrów podczas wywoływania metod. Definicja metody jest zadeklarowana w deklaracji klasy i zaimplementowana w części implementacyjnej klasy. Instrukcje METHOD i ENDMETHOD służą do definiowania części implementacyjnej metody. Poniższa składnia pokazuje, jak zaimplementować metodę -
METHOD <m_name>.
..........
..........
ENDMETHOD.
W tej składni <m_name> reprezentuje nazwę metody. Note - Możesz wywołać metodę za pomocą instrukcji CALL METHOD.
Dostęp do atrybutów i metod
Komponenty klas można definiować w publicznych, prywatnych lub chronionych sekcjach widoczności, które kontrolują sposób dostępu do tych komponentów. Prywatna sekcja widoczności służy do odmowy dostępu do komponentów spoza klasy. Dostęp do takich składników można uzyskać tylko z wnętrza klasy, na przykład metody.
Dostęp do komponentów zdefiniowanych w sekcji widoczności publicznej można uzyskać z dowolnego kontekstu. Domyślnie wszyscy członkowie klasy będą prywatni. W praktyce definiujemy dane w sekcji prywatnej i pokrewne metody w sekcji publicznej, aby można je było wywołać spoza klasy, jak pokazano w poniższym programie.
Dostęp do atrybutów i metod zadeklarowanych w sekcji Public w klasie może mieć ta klasa i każda inna klasa, podklasa programu.
Gdy atrybuty i metody są zadeklarowane w sekcji Chronione w klasie, dostęp do nich może uzyskać tylko ta klasa i podklasy (klasy pochodne).
Gdy atrybuty i metody są zadeklarowane w sekcji Private w klasie, dostęp do nich może uzyskać tylko ta klasa, a nie żadna inna klasa.
Przykład
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.
Powyższy kod daje następujące dane wyjściowe -
Public Method:
Public Data
Protected Data
Private Data
Public Data
Atrybuty statyczne
Atrybut statyczny jest deklarowany za pomocą instrukcji CLASS-DATA. Wszystkie obiekty lub instancje mogą używać statycznego atrybutu klasy. Atrybuty statyczne są dostępne bezpośrednio za pomocą nazwy klasy, takiej jak nazwa_klasy⇒nazwa_1 = 'Jakiś tekst'.
Przykład
Poniżej znajduje się program, w którym chcemy wydrukować tekst z liniami o numerze od 4 do 8 razy. Definiujemy klasę class1, aw sekcji public deklarujemy CLASS-DATA (atrybut statyczny) oraz metodę. Po zaimplementowaniu klasy i metody uzyskujemy bezpośredni dostęp do statycznego atrybutu w zdarzeniu Start-Of-Selection. Następnie po prostu tworzymy instancję klasy i wywołujemy metodę.
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.
Powyższy kod daje następujące dane wyjściowe -
Konstruktorzy
Konstruktory to specjalne metody wywoływane automatycznie podczas tworzenia obiektu lub uzyskiwania dostępu do składników klasy. Konstruktor jest wyzwalany za każdym razem, gdy tworzony jest obiekt, ale musimy wywołać metodę, aby wyzwolić metodę ogólną. W poniższym przykładzie zadeklarowaliśmy dwie metody publiczne method1 i konstruktor. Obie te metody mają różne operacje. Podczas tworzenia obiektu klasy metoda konstruktora wyzwala swoją operację.
Przykład
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.
Powyższy kod daje następujące dane wyjściowe -
Constructor Triggered
Operator ME w metodach
Gdy deklarujesz zmienną dowolnego typu w publicznej sekcji klasy, możesz jej użyć w dowolnej innej implementacji. Zmienną można zadeklarować z wartością początkową w sekcji publicznej. Możemy ponownie zadeklarować zmienną wewnątrz metody o innej wartości. Kiedy napiszemy zmienną wewnątrz metody, system wypisze zmienioną wartość. Aby odzwierciedlić poprzednią wartość zmiennej, musimy użyć operatora „ME”.
W tym programie zadeklarowaliśmy publiczną zmienną text1 i zainicjowaliśmy wartością. Ponownie zadeklarowaliśmy tę samą zmienną, ale utworzyliśmy instancję z inną wartością. Wewnątrz metody piszemy tę zmienną z operatorem „ME”, aby uzyskać wcześniej zainicjowaną wartość. Zmienioną wartość otrzymujemy, deklarując bezpośrednio.
Przykład
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.
Powyższy kod daje następujące dane wyjściowe -
This is CLASS Attribute
This is METHOD Attribute