Cerca nel blog

venerdì 12 giugno 2015

PROGRAMMAZIONE AD OGGETTI IN ABAP - LEZIONE NR. 1

Programmazione ad Oggetti ABAP

La programmazione orientata agli Oggetti si basa sul fatto che esistono una serie di oggetti che interagiscono tra di loro, scambiandosi messaggi , ma mantenendo ognuno il proprio stato ed i propri dati.

Nella programmazione ad oggetti detta anche OOP, si basa sul concetto di Oggetto.
Per capire cos’è un oggetto prendiamo spunto dalla vita reale: un oggetto è una moto, una televisione, e così via.
Ogni oggetto ha determinate caratteristiche, ad esempio la moto: colore, cilindrata, velocità massima, modello, etc; inoltre la moto può svolgere anche alcune azioni, come: svoltare a destra o a sinistra, accelerare, frenare, etc.
Nella terminologia OOP le caratteristiche di un oggetto vengono chiamate ATTRIBUTI, mentre le azioni (operazioni) che un oggetto è in grado di compiere sono detti METODI.
ATTRIBUTI
Gli attributi costituiscono lo STATO di un oggetto, cioè lo caratterizzano e lo distinguono da un altro.
METODI
I metodi, o funzioni, o messaggi, definiscono il COMPORTAMENTO di un oggetto, cioè come modifica i propri dati o come interagisce con altri oggetti.

ISTANZIARE UN OGGETTO

               
Un oggetto può essere instanziato più volte, ma con nomi diversi, ad esempio:
Ad un oggetto di classe moto assegniamo il nome Moto1 così descritto:
  •    Marca = Kavasaki
  •   Colore = Rosso
  •  Velocità = 100

Ad un altro oggetto di classe moto assegniamo il nome Moto2 così descritto
  • Marca = Honda
  • Colore = Giallo
  • Velocità = 130
Come si può vedere, gli oggetti sono diversi perché hanno caratteristiche diverse, ma condividono la stessa struttura.

CLASSE

Una classe rappresenta l’astrazione di un Oggetto.
Una classe specifica gli attributi, senza indicarne il valore, e i metodi che devono avere gli oggetti che appartengono alla classe.
Gli oggetti creati a partire  da una classe vengono chiamati istanze della classe.
Partendo da una classe, si possono creare più oggetti con gli stessi attributi e metodi ma con   valori diversi.
In SAP, esistono due diversi tipi di classi:
  • Classi Globali
  • Classi Locali
CLASSI GLOBALI
Sono oggetti storicizzati nel repository SAP, accessibili da qualsiasi programma e devono rispettare la seguente nomenclatura: devono iniziare per Z o Y
CLASSI LOCALI
Sono oggetti definiti all’interno di un report ABAP, accessibili solo dal programma in cui sono definite e non hanno regole di nomenclatura.
La dichiarazione di una Classe Locale si compone di due parti: Definizione e Implementazione.

Definizione:
La definizione di una classe deve essere fatta nei dati globali all’inizio del programma.
Nella dichiarazione di una classe devono essere  dichiarati i componenti della classe stessa:
Attributi, Metodi ed Eventi.
Ogni componente può essere definito come:
  • Instance – ne esistono n copie una per ogni istanza della classe
  • Static – ne esiste solo uno per classe ed è valido per tutte le istanze della classe
I componenti dichiarati STATIC devono essere dichiarati come CLASS-keyword. Essi possono essere usati anche se la classe non è stata istanziata.
I metodi dichiarati INSTANCE possono accedere sia ad attributi INSTANCE che STATIC; mentre quelli dichiarati STATIC possono accedere solo ad attributi STATIC.
Per accedere ad un componente dichiarato INSTANCE si usa il selettore ->
Per accedere ad un componente dichiarato STATIC si usa il selettore =>

I componenti di una classe inoltre devono avere attribuito un livello di accessibilità:
  • Public – sono visibili a tutti
  • Protected – sono visibili solo dalla classe e dalle sue sottoclassi
  • Private – sono visibili solo all’interno della loro classe.
                        CLASS <nomeclasse> DEFINITION.
                                               PUBLIC SECTION.
                                                               [Attributi; Metodi; Eventi]
                                               ……………
                                               PROTECTED SECTION.
                                                               [Attributi; Metodi; Eventi]
                                               ……………
                                               PRIVATE SECTION.
                                                               [Attributi; Metodi; Eventi]
                                               ……………
ENDCLASS.

Implementazione:
Nell’implementazione della classe devono essere descritti i comportamenti e le azioni di tutti i metodi della classe.
                       CLASS <nomeclasse> IMPLEMENTATION.
                                               ……………
ENDCLASS.

ESEMPIO DI UNA CLASSE LOCALE

CLASS lcl_clienti DEFINITION.
PUBLIC SECTION.
                TYPES: BEGIN OF Ty_clienti,
                                               Kunnr TYPE I,
                                               Name TYPE string,
                END OF Ty_clienti.
                METHODS: constructor IMPORTING p_kunnr TYPE I p_name TYPE string,
                                     Display_clienti.
                CLASS-METHODS: display_num_clienti.
PROTECTED SECTION.
                CLASS-DATA: num_clienti TYPE i.
PRIVATE SECTION.
                DATA: s_clienti TYPE ty_clienti.
ENDCLASS.

OGGETTI E METODI

I metodi possono essere di due tipi:
  • STANDARD: METHODS: nome_metodo
  • EVENTO: METHODS: nome_metodo FOR EVENT evento OF classe.
Un metodo può avere varie estensioni:
  • IMPORTING: parametri di input
  • EXPORTING: parametri di output
  • RETURNING VALUE(P): indica un valore di ritorno
  • CHANGING: parametri che modificano il loro valore
  • EXCEPTIONS: ritorna il valore di un’eccezione
  • ABSTRACT: indica un metodo astratto
  • FINAL: indica che non può essere esteso
  • REDEFINITION: indica un metodo che è stato ridefinito


Metodo Constructor:
Ogni classe ha un metodo costruttore predefinito che è PUBLIC ed INSTANCE. Esso definisce lo stato iniziale di un oggetto, e viene eseguito in automatico ogni volta che una classe viene istanziata.
E’ possibile ridefinire un metodo costruttore all’interno di una propria classe
Se si vuole definire un metodo instance, questo dovrà chiamarsi: CONSTRUCTOR
Se si vuole definire un metodo static questo dovrà chiamarsi: CLASS_CONSTRUCTOR
Il metodo costruttore viene richiamato in automatico dall’istruzione:  CREATE OBJECT e no può essere richiamato con l’istruzione CALL METHOD.
Ridefinire il metodo costruttore è necessario quando si deve inizializzare un oggetto con valori dinamici.
Un metodo costruttore non ha parametri di EXPORTING.

REFERENZIARE UN OGGETTO:
Un oggetto per poter essere creato deve essere referenziato ad una classe, e questo avviene per mezzo dell’istruzione:
DATA:  oggetto TYPE REF TO classe.
Una volta referenziato un oggetto, lo si deve creare:
CREATE OBJECT  oggetto.
Ed infine lo si può utilizzare usando la seguente istruzione
CALL METHOD  oggetto->metodo.

AUTO REFERENZIAZIONE DI UN OGGETTO:
Se un oggetto ha bisogno di fare riferimento a se stesso, si usa l’auto referenziazione, quindi per fare ciò si usa la variabile di referenziazione ME.
Esempio:
DATA:  oggetto TYPE REF TO classe.
CREATE OBJECT  oggetto.
CALL METHOD  me->metodo.

ISTANZE MULTIPLE  DI UN OGGETTO:
DATA:  oggetto1 TYPE REF TO classe.
DATA:  oggetto2 TYPE REF TO classe.
Le tabelle di puntamento possono essere usate per storicizzare istanze/oggetti  multipli di una classe, anziché definire ogni oggetto singolarmente.
Esempio:
DATA:  oggetto TYPE REF TO classe.
DATA:  tab_oggetto TYPE TABLE OF REF TO classe.

CANCELLAZIONE DI UN OGGETTO:
Per cancellare un oggetto istanziato, si usa l’istruzione:
CLEAR  oggetto.
Questa istruzione inizializza il contenuto di OGGETTO con l’effetto di cancellare l’oggetto.

UTILIZZO DEI METODI COME FUNZIONI
Oltre che con l’istruzione CALL METHOD, un metodo può essere richiamato all’interno di una funzione:

  • Possono essere utilizzati come funzioni sia metodi STATIC:
                risultato = classe=>metodo(parametri)
  • Che INSTANCE:
                risultato = oggetto->metodo(parametri)

CHIAMATE DINAMICHE A OGGETTI E METODI
Oggetti e metodi possono essere richiamati dinamicamente:

  • oggetto->(metodo)
  • me->(metodo)
  • classe=>(metodo)
  • (classe)=>metodo
  • (classe)=>(metodo)
Anche i parametri di un metodo possono essere passati in modo dinamico:
  • CALLMETHOD oggetto->metodo
PARAMETER-TABLE tabella_parametri
EXCEPTION-TABLE tabella_eccezioni

Le due tabelle: tabella_parametri e tabella_eccezioni, devono essere dichiarate come:
  • TYPE TABLE OF ABAP_PARMBIND_TAB
 

Nessun commento:

Posta un commento