Clasificare clase
În contextul SAP ABAP, clasele pot fi definite
- fie ca: clase locale (local classes),
- fie ca clase globale (global classes)
Iată diferențele dintre cele două:
1. Clase Locale (Local Classes):
- Definire în interiorul unui program
- Clasele locale sunt definite în interiorul unui program ABAP
- Ele sunt vizibile numai în interiorul programului în care au fost definite.
- Limitate la contextul programului
- Aceste clase sunt folosite pentru a organiza și împărți logica programului
- Metodele și atributele clasei locale sunt accesibile doar în cadrul programului
2. Clase Globale (Global Classes):
- Definire în afara unui program
- Clasele globale sunt definite în afara programelor, într-o bază de date centrală a dicționarului de date SAP.
- Ele pot fi accesate și utilizate în întreaga aplicație SAP și în diferite programe și funcții.
- Accesibile la nivel global:
- Clasele globale pot fi utilizate în mai multe programe și funcții în cadrul aceluiași sistem SAP.
- Acestea oferă o modalitate de a organiza logica și funcționalitatea care trebuie să fie distribuită și reutilizată pe scară largă în întreaga aplicație.
În SAP ABAP orientat pe obiect (OOP), când definești o clasă, aceasta este împărțită în două părți principale: partea de definire (DEFINITION) și partea de implementare (IMPLEMENTATION). Aceste două părți sunt utilizate pentru a separa detaliile despre structura și comportamentul clasei.
Partea de Definire (DEFINITION):
- Partea de definire a clasei conține declarațiile publice, protejate sau private ale clasei, cum ar fi metodele, atributele și evenimentele clasei.
- Aceste elemente sunt definite folosind cuvinte cheie precum
PUBLIC SECTION
șiPROTECTED SECTION
sauPRIVATE SECTION
.
Exemplu parte de definire:
CLASS lcl_employee IMPLEMENTATION. METHOD constructor. name = ''. age = 0. ENDMETHOD. METHOD set_details. name = iv_name. age = iv_age. ENDMETHOD. METHOD display_details. WRITE: / 'Name:', name, / 'Age:', age. ENDMETHOD. ENDCLASS.
În acest exemplu:
- Clasa
lcl_employee
este definită în interiorul aceleiași unități de programare (de exemplu, în interiorul unui program sau funcției ABAP). - Partea de definire (
PUBLIC SECTION
) conține metodele publice (constructor
,set_details
,display_details
), care pot fi apelate din exteriorul clasei, și atributele publice (name
șiage
), care pot fi accesate și modificate din exteriorul clasei. - Partea privată (
PRIVATE SECTION
) conține atributele private (name
șiage
), care sunt vizibile doar în interiorul clasei și nu pot fi accesate din exterior.
Partea de Implementare (IMPLEMENTATION):
- Partea de implementare a clasei conține logica efectivă a metodelor definite în partea de definire. Aici sunt implementate instrucțiunile specifice fiecărei metode.
- Este în această parte a clasei unde se definește comportamentul fiecărei metode definită în partea de definire.
- Partea de implementare este accesibilă doar în interiorul clasei respective și este definită folosind cuvântul cheie
IMPLEMENTATION
.
CLASS lcl_employee IMPLEMENTATION.
METHOD constructor.
name = ''.
age = 0.
ENDMETHOD.
METHOD set_details.
name = iv_name.
age = iv_age.
ENDMETHOD.
METHOD display_details.
WRITE: / 'Name:', name,
/ 'Age:', age.
ENDMETHOD.
ENDCLASS.
În această parte de implementare, am definit logica pentru metodele constructor
, set_details
și display_details
. Metoda constructor
este apelată atunci când se creează un obiect al clasei și inițializează atributele cu valori implicite. Metoda set_details
primește parametri și setează atributele clasei, iar metoda display_details
afișează detaliile angajatului.
Programul complet de mai sus:
ZEXAMPLE_LOCAL_CLASS.
CLASS lcl_employee DEFINITION.
PUBLIC SECTION.
METHODS: constructor,
set_details IMPORTING iv_name TYPE string
iv_age TYPE i,
display_details.
PRIVATE SECTION.
DATA: name TYPE string,
age TYPE i.
ENDCLASS.
CLASS lcl_employee IMPLEMENTATION.
METHOD constructor.
name = ''.
age = 0.
ENDMETHOD.
METHOD set_details.
name = iv_name.
age = iv_age.
ENDMETHOD.
METHOD display_details.
WRITE: / 'Name:', name,
/ 'Age:', age.
ENDMETHOD.
ENDCLASS.
DATA: employee_instance TYPE REF TO lcl_employee.
START-OF-SELECTION.
CREATE OBJECT employee_instance.
employee_instance->set_details( 'John Doe', 30 ).
employee_instance->display_details().