ABAP Objects Object-Oriented programming in R/3

Slides:



Advertisements
Presentazioni simili
Programmazione ad oggetti
Advertisements

Ereditarietà e Polimorfismo
Enumerazioni e Classi 1. Enumerazioni Permettono di definire nuovi tipi che consistono in un insieme di valori costanti (ognuno con un nome) – Migliorano.
Table View. Problemi ricorrenti Una situazione ricorrente è quella in cui il controller potrebbe avere un’altezza superiore a quella dello schermo. In.
Damb Il funzionamento interno e le idee che stanno dietro Damb dalla Traduzione del File in Istruzioni, alle Analisi e le Soluzioni 14/09/2004.
Le funzioni in C++. Introduzione  Spesso alcuni gruppi di operazioni vengono ripetute in diverse parti all’interno del medesimo programma  Si pensi.
IL PROCESSORE I MICROPROCESSORI INTEL Il microprocessore è un circuito integrato dotato di una struttura circuitale in grado di effettuare un determinato.
Unità di apprendimento 6 Dal problema al programma.
Fondamenti di Informatica - D. Talia - UNICAL 1 Fondamenti di Informatica FONDAMENTI DI INFORMATICA Domenico Talia
1 Elementi DI INFORMATICA Università degli Studi di Cagliari Corso di Laurea in Ingegneria Elettronica Linguaggio C A.A. 2011/2012
Fondamenti di Informatica A - Massimo Bertozzi LE FUNZIONI.
Programmazione in Java Parte II Lezione 5 Dott. Marco Faella.
1 Simulazione Numerica dei Fenomeni di Trasporto Necessità di introduzione dei tensori  11  12  13  23  21  22 Vogliamo descrivere in un modo che.
.  I tipi di dati non primitivi sono gli array, le struct e le union.  Gli array sono degli aggregati di variabili dello stesso tipo.  La dichiarazione.
Table View. Problemi ricorrenti Una situazione ricorrente è quella in cui il controller potrebbe avere un’altezza superiore a quella dello schermo. In.
Basi di dati - Fondamenti
Ereditarietà Uno dei principi della programmazione orientata agli oggetti (OOP) è il riuso Le classi dovrebbero essere progettate come componenti riutilizzabili.
IL SOFTWARE (FPwin 6.0).
© 2007 SEI-Società Editrice Internazionale, Apogeo
ODMG.
Universita’ di Milano Bicocca Corso di Basi di dati 1 in eLearning
VISUAL BASIC.
Commissione Calcolo e Reti
Dal problema al processo risolutivo
Universita’ di Milano Bicocca Corso di Basi di dati 1 in eLearning C
Terza Lezione → Navigare nel file System → parte 2
Raccolta ed Analisi dei Requisiti nella Progettazione
Dal problema al processo risolutivo
Il Binding Nicolò Sordoni.
Universita’ di Milano Bicocca Corso di Basi di dati 1 in eLearning C
Unità di apprendimento 7
Programmazione a oggetti
I vincoli di integrità Alcuni aspetti della realtà NON possono essere modellati solamente con entità, attributi e relazioni, per esempio i vincoli di integrità.
Programmazione a oggetti
I BUS È un insieme di fili conduttori che permette il passaggio di dati tra le varie periferiche del pc.
UML Creato da: Enrico Tarantino Alessandro Vilucchi Roberta Barcella.
Tipo di dato: array Un array è un tipo di dato usato per memorizzare una collezione di variabili dello stesso tipo. Per memorizzare una collezione di 7.
Asynchronous JavaScript and XML
Informatica per l’Ingegneria
Programmazione ad Oggetti per la Fisica
Gli oggetti: concetti avanzati
Corso di Laurea Ingegneria Informatica Fondamenti di Informatica
ABAP Objects BAdI per User Enhancement
FONDAMENTI DI INFORMATICA II Ingegneria Gestionale a. a
Processi e Thread Meccanismi di IPC (1).
OBJECT ORIENTED DATABASE
Basi di dati - Fondamenti
Programmare.
Progettazione concettuale
ABAP Objects ALV Grid Mantova, 30 dicembre 2018.
Esercitazioni di C++ 31 dicembre 2018 Claudio Rocchini IGMI.
Oggetti Java.
Copia di oggetti il costruttore di copia ha le stesse particolarità della signature di un costruttore ordinario; il primo parametro è una reference ad.
Sistemi informativi statistici
© 2007 SEI-Società Editrice Internazionale, Apogeo
Ricorsione 16/01/2019 package.
Corso di Laurea Ingegneria Informatica Fondamenti di Informatica
© 2007 SEI-Società Editrice Internazionale, Apogeo
LINUX: struttura generale
OpenLayers Client di mappe “non solo” WMS
Processi decisionali e funzioni di controllo
Interfacce in Java Superare il meccanismo dell’ereditarietà singola
Unità 1 Programmi base.
UML Diagramma statico di una classe
A-to-Z Consente di Localizzare e Accedere a tutte le risorse della biblioteca: riviste online riviste cartacee riviste nelle banche dati in full text riviste.
Il nuovo scratch desktop
Array e Stringhe Linguaggio C.
Il questionario: progettazione e redazione II Modulo
Corso di programmazione, Simulazione, ROOT, code, ecc. ecc.
Transcript della presentazione:

ABAP Objects Object-Oriented programming in R/3 Mantova, 21 novembre 2018

Introduzione La programmazione orientata agli oggetti è un paradigma di programmazione. Per “paradigma di programmazione” s’intende l’ insieme di strumenti forniti da un linguaggio di programmazione per la stesura di programmi, e definisce/determina il modo in cui il programmatore concepisce il programma.

Introduzione Prevede di raggruppare in un'unica entità (la classe) sia le strutture dati che le procedure che operano su di esse, creando un "oggetto" (istanza della classe) software dotato di proprietà (dati) e metodi (procedure) che operano sui dati dell'oggetto stesso. Vantaggi Consistenza nel ciclo di vita Incapsulamento Polimorfismo Ereditarietà Riuso del codice

Introduzione ABAP supporta sia la programmazione classica (basata su function module, subroutines etc. etc.) che la programmazione ad oggetti. I due modelli possono essere usati in parallelo. In ABAP Objects è stata implementata una pulizia del liguaggio. In particolare: Proibite alcune istruzioni (FORM…ENDFORM) dichiarazione e sintassi implicite diventano esplicite (vedi ‘occurs 0’) eventuali errori nella gestione dei dati sono controllati e prevenuti

Introduzione Utilizzare, appena possibile, la programmazione ad oggetti. Mettere tutto il codice in classi globali o locali, utilizzare interfacce quando serve. Eccezioni solo quando s’intende riutlizzare servizi di f.m. oppure realizzarne di nuovi quando tecnicamente necessario (vedi RFC) Abituarsi alla tipizzazione di variabili, strutture o tabelle Abituarsi all’utilizzo della programmazione ad oggetti aiuta all’accesso alle nuove tecnologie ABAP (Web Dynpro).

Gli Oggetti Un oggetto è composto da due strati: PUBBLICO. Sono visibili attributi (dati), metodi (funzioni) ed eventi. Tutti gli utenti possono accedere a questi elementi. PRIVATO. Composto da attributi (dati), metodi(funzioni) ed eventi che sono visibili solo all’oggetto stesso. Agli attributi privati si accede solo attraverso i metodi dell’oggetto stesso. Perché gli oggetti privati sono “nascosti” ? E’ l’”incapsulamento”. Il meccanismo per cui si assume che gli oggetti privati possono essere modificati mentre l’interfaccia verso l’esterno rimane immutata. Ogni utente (reale o virtuale) che accede all’oggetto può rimanere all’oscuro delle modifiche all’interno e può continuare a lavorare come prima.

Gli Oggetti Pubblico Privato A disposizione di tutti Incapsulamento Attributi Metodi Eventi Privato Incapsulamento Pubblico A disposizione di tutti

Gli Oggetti Un oggetto è caratterizzato da: IDENTITA’ Identifica univocamente ogni oggetto da un altro (istanza). Da non confondere con avere lo stesso nome o gli stessi attributi. STATO Identificato degli attributi COMPORTAMENTO Identificato dai metodi e dagli eventi Oggetti simili tra loro sono raggruppati in classi. Ciascuna classe ne descrive uno e ciascun oggetto è creato in accordo con la sua classe. Una classe è la descrizione di una serie d’oggetti con caratteristiche e comportamenti simili.

Classe Descrizione di un oggetto La classe è la descrizione di un numero di oggetti che hanno stessa struttura e comportamento simile Parte di definizione I componenti di una classe sono definiti nella parte di definizione e sono: Attributi (dati) Tipi dati Costanti Interfacce (come la classe comunica con l’esterno) Metodi (routines) Eventi (triggers) Per ogni componente viene inoltre stabilito il livello di visibilità (pubblica, protetto o privato). Parte di implementazione Nella parte d’implementazione viene sviluppato il codice dei metodi definiti per la classe ed il loro comportamento.

Gli attributi di una classe Gli attributi descrivono i dati che possono essere utilizzati in un oggetto e in una classe. Gli attributi di una classe possono essere di ogni tipo: Types, data, riferimento ad oggetti e interfacce Definizione di tipi propri. Attributi di una classe “aeroplani” possono essere Nome Posti a sedere Peso Lunghezza Tipo di ala (normale/pala...) Capienza del serbatoio

Definizione attributi Class <nomeclasse> definition. TYPES: <definizione tipi> CONSTANTS: <definizione costanti> DATA: variable1 type <type/ddic_type> variable2 TYPE <variable1> variable4 TYPE <type> READ-ONLY variable5 TYPE REF <nomeclasse> variable6 TYPE REF <interfaccia> Endclass. READ-ONLY significa che l’attributo può essere letto dall’esterno ma solo modificato dall’interno

Visibilità degli attributi Class <nomeclasse> definition. PUBLIC SECTION. DATA: name type string. PRIVATE SECTION. DATA: address type string. CLASS-DATA: count type i. Endclass.

Visibilità degli attributi Se definito nella public section può essere letto/modificato da chiunque (se non specificato con l’opzione READ-ONLY) Se definito nella private section può essere letto/modificato solo dai metodi interni. Un attributo è definito per ogni istanza della classe e può assumere un valore diverso per ogni istanza di detta classe Un attributo statico (CLASS-DATA) vale per tutte le istanze della classe definite a runtime

Attributi Count : 2 Nome: Air1 Peso: 30,000 kg Nome: Air2

I metodi Sono procedure interne alle classi che determinano il comportamento di un oggetto. Possono accedere a tutti gli attributi della classe d’appartenenza e possono cambiarne il contenuto Hanno un’interfaccia di parametri che li abilitano a ricevere valori e ritornarli alla procedura chiamante.

Dichiarazione di metodi La codifica è la stessa dell’ABAP. Stesso significato e stesso funzionamento. Attraverso il parametro RETURNING si ritorna solo un valore altrimenti si usa CHANGING. Tutti i parametri possono essere definiti opzionali e con un “DEFAULT value” come valore d’inizializzazione. CLASS <classname> DEFINITION. METHODS: <method_name> [ IMPORTING <im_var> TYPE <type> (OPTIONAL) EXPORTING <ex_var> TYPE <type> CHANGING <ch_var> TYPE <type> RETURNING VALUE(<ret_value>) TYPE <type> EXCEPTIONS <exceptions> ] ENDCLASS.

Visibilità di metodi Come per gli attributi possono essere definiti come pubblici o privati. Questo determina se possono essere chiamati dall’esterno della classe oppure solo al suo interno. CLASS <classname> DEFINITION. PUBLIC SECTION. METHODS: <method_name> [ IMPORTING <im_var> TYPE <type> EXPORTING <ex_var> TYPE <type> CHANGING <ch_var> TYPE <type> RETURNING VALUE(<ret_value>) TYPE <type> EXCEPTIONS <exceptions> ] PRIVATE SECTION. METHODS: <method_name> …. ENDCLASS.

Metodi statici e dinamici Metodi statici sono definiti a livello di classe. Possono usare solo attributi definiti statici a loro volta. Questo significa che l’oggetto della classe a cui appartengono può non essere creato e possono essere richiamati in qualsiasi momento. Vengono utilizzati per elaborazioni che prescindono dal contesto in cui una classe viene utilizzata (una conversione, ritornare un valore specifico etc. etc.) CLASS <classname> DEFINITION. PUBLIC SECTION. CLASS-METHODS: get_count RETURNING VALUE(re_count) TYPE i. PRIVATE SECTION. CLASS-DATA: count TYPE i. ENDCLASS.

Implementazione di metodi La codifica è la stessa dell’ABAP. Stesso significato e stesso funzionamento. CLASS <classname> IMPLEMENTATION. METHOD <method name>. <ABAP Code> ENDMETHOD. ENDCLASS.

Istanziare un oggetto Una classe contiene la generica descrizione di un oggetto. Descrive tutte le caratteristiche comuni all’oggetto in quella classe. Durante l’esecuzione del programma la classe è usata per creare lo specifico oggetto (istanza). Questo processo si chiama istanziamento. Oggetti sono istanziati usando l’istruzione CREATE OBJECT. Durante l’elaborazione viene allocato spazio di memoria per assegnarla all’oggetto.

Istanziare un oggetto CREATE OBJECT Classe Oggetto Cl_airplane Nome Nome: Air2 Peso: 15,000 kg Cl_airplane Nome Peso CREATE OBJECT

Referenziare un oggetto Un’oggetto viene definito con una operazione di “type reference”. L’operazione definisce un puntatore ad un oggetto. Data: airplane1 type ref to cl_airplane. Le sezioni di “definition” e “implementation” relative alla classe cl_airplane vanno definite prima dell’istruzione “type ref”. O successivamente con un istruzione del tipo: class: cl_airplane definition deferred.

Creare un oggetto data : airplane1 TYPE REF TO cl_airplane, airplane2 TYPE REF TO cl_airplane. CREATE OBJECT airplane1. CREATE OBJECT airplane2. Vengono create, in memoria, due oggetti distinti: ciascuno con le sue variabili. Se invece aggiungiamo un’istruzione del tipo airplane1 = airplane2 allora abbiamo due oggetti uguali con le stesse variabili per ciascuno dei due

Creare un oggetto con variabili CREATE OBJECT airplane1 EXPORTING nome = “Air1” peso = 15000. CREATE OBJECT airplane2 EXPORTING nome = “Air2” peso = 25000. Nome: Air2 Peso: 25,000 kg Nome: Air1 Peso: 15,000 kg airplane2 airplane1

Utilizzo di oggetti in tabelle DATA: airplane_table TYPE TABLE OF cl_airplane CREATE OBJECT airplane EXPORTING nome = “Air1” peso = 15000. APPEND airplane TO airplane_table. CREATE OBJECT airplane EXPORTING nome = “Air2” peso = 25000. Il risultato è due record nella tabella airplane_table e l’oggetto airplane con i valori dell’ultima istruzione “create object”. Con un istruzione del tipo read table airplane_table into airplane index 1. l’oggetto airplane contiene i valori “nome = Air1” e “peso = 15000”.

Chiamare i metodi Ciascun oggetto si comporta in un certo modo, determinato dai suoi metodi. Ci sono tre tipi di metodi: Metodi che operano e non passano valori Metodi che passano valori Metodi che passano o cambiano diversi valori Un oggetto che richiede un servizio ad un altro oggetto invia un messaggio per ottenere il servizio. Il messaggio nomina l’operazione da eseguire e l’implementazione di questa operazione è conosciuta come metodo.

CALL METHOD <instance>-><instance_method> Chiamare i metodi Se il metodo fa riferimento ad un’istanza della classe la chiamata avviene con CALL METHOD <instance>-><instance_method> Se il metodo è statico si fa riferimento al nome della classe con CALL METHOD <classname>=><class_method>

Chiamare i metodi Ogni metodo può essere chiamato conformemente alla sua definizione: Senza parametri : ref_obj->method() Con un parametro : ref_obj->method( par1 ) Più parametri: ref_obj->method( par1 = val1 par2 = val2)

Chiamare i metodi (Ogni metodo può essere chiamato conformemente alla sua definizione): Ritornano un solo parametro (Returning) ret_value = ref_obj->method( .. ) Ritornano diversi parametri call method ref_obj->method exporting parX = valX importing parY = valY changing parZ = valZ

Il metodo CONSTRUCTOR Il CONSTRUCTOR (costruttore) è un metodo speciale in una classe. Ciascuna classe ha uno ed un solo metodo costruttore. E’ automaticamente chiamato durante il runtime dall’istruzione CREATE OBJECT Se non è necessario implementarlo, non è obbligatorio definirlo come metodo Se si deve implementare, va definito nella parte PUBLIC. Se durante il runtime si verificano errori l’oggetto non viene creato e lo spazio in memoria non viene occupato.

Incapsulamento Il principio dell’incapsulamento è nascondere l’implementazione di una classe ad un altro componente del sistema. L’incapsulamento dell’implementazione riduce la dipendenza del codice da eventi esterni e permette di effettuare modifiche limitandone gli effetti sul altri oggetti.

Incapsulamento Nell’esempio ogni modifica nel modo di calcolo del carburante rimasto è trasparente alla classe lcl_client Lcl_client Cl_airplane Tank : lcl_tank Get_fuel_level() : re_level Lcl_tank fuel : i fuel_max : i Re_level = tank->get_fuel_level() Re_level = fuel / fuel_max * 100

Ereditarietà Ereditarietà è una relazione dove un classe (sottoclasse) eredità tutte le caratteristiche di un altra classe (superclasse). La sottoclasse può aggiungere nuovi componenti e rimpiazzare metodi ereditati con proprie implementazioni. Nell’esempio le similitudini tra aereo passeggero e cargo sono estratte dalla superclasse aeroplano. Questo significa che i componenti comuni sono definiti/implementati nella superclasse e sono automaticamente presenti nella sottoclasse.

Ereditarietà aeroplano -nome -peso -get_fuel_level -get_owner Aereo passeggeri -posti -uscita emergenza -get_nr_seats Aereo cargo -massimo peso carico -get_cargo

Ereditarietà Ereditarietà dovrebbe essere usata per implementare relazioni tra oggetti generici e relative specializzazioni. Vedi ad esempio la classe cl_gui_object e tutte lo sottoclassi derivate , tra cui cl_gui_alv_grid e cl_gui_alv_tree. Ogni superclasse può essere a sua volta sottoclasse di una superclasse. Ereditarietà è una relazione a un solo livello: le sottoclassi sanno quali sono le superclassi dalle quali derivano ma le superclassi non sanno quali sottoclassi hanno derivato

Ereditarietà Nella definizione di una sottoclasse si indicano solo le differenze rispetto alla superclasse. Per definizione tutti i metodi e gli attributi della superclasse vengono resi disponibili nella sottoclasse. Componenti comuni sono presenti solo una volta nella superclasse Nuovi componenti nella superclasse sono automaticamente disponibili alla sottoclasse Si riduce la dimensione del codice (“programmare per differenza”)

Ereditarietà Sottoclassi sono dipendenti dalle superclassi Deve possedere dettagliata conoscenza della superclasse per quanto riguarda la ri-definizione ma anche per l’utilizzo dei componenti ereditati (metodi e attributi).

Ereditarietà Class cl_airplane definition. public section. methods: get_fuel_level returning value(re_level) type i. private section. data: name type string, peso type i. endclass. Class cl_cargo_airplane definition inheriting from cl_airplane. methods: get_cargo returning value(re_cargo) type string. data: cargo type string.

Ereditarietà e visibilità Componenti pubblici Visibili a tutti Accesso diretto Componenti protetti Visibili solamente dentro la classe e le sottoclassi Componenti privati Solo visibili nella classe Nessun accesso dall’esteno comprese le sottoclassi L’utilizzo di componnti privati in una superclasse può essere utile per gestire, ad esempio, gli errori. Si possono usare componenti privati senza conoscere o invalidare eventuali sotto classi

Ereditarietà e visibilità Class cl_airplane definition. Public section. methods: Protected section. ….. Private section Endclass.

Ereditarietà del costruttore Il metodo CONSTRUCTOR della superclasse DEVE essere chiamato nel metodo costruttore della sottoclasse. Serve per assicurarsi che l’oggetto sia inizializzato correttamente. La chiamata del tipo: call method super->constructor ….. deve essere fatta all’interno del metodo constructor definito per l’occasione. All’interno del metodo costruttore della sottoclasse potranno essere svolte tutte le ulteriori attività necessarie per la definizione dell’oggetto.

Ereditarietà: CREATE OBJECTS Ci sono due modi per create un oggetto da una sottoclasse con l’istruzione CREATE OBJECTS: Il costruttore è stato definito. In questo caso l’istruzione conterrà i parametri, più o meno obbligatori, definiti per il metodo. Il costruttore non è stato definito. Si risale la gerarchia delle classi fino a trovare la prima superclasse con parametri e si utilizzano con l’istruzione.

Ereditarietà: Ridefinizione dei metodi La ridefinizione dei metodi permette di definire solamente il metodo, con i parametri, nella superclasse. Ogni sottoclasse ereditata dalla superclasse potrà realizzare il codice del metodo proprio specifico. Sviluppa il concetto della superclasse generica e della sottoclasse specifica. Definisco i metodi che servono nella superclasse ed ogni sottoclasse realizzerà il funzionamento del metodo nel modo che ritiene più opportuno.

Ereditarietà: polimorfismo Quando oggetti da differenti classi reagiscono in modo diverso alla stessa chiamata del metodo allora si parla di polimorfismo. Quando un oggetto di una classe riceve un messaggio per eseguire un particolare metodo esso viene eseguito se implementato nella classe di appartenza del metodo. Altrimenti, se ereditato, viene cercato, ed eseguito, il primo metodo nella gerachia delle classi. La chiamata non cambia

Ereditarietà: polimorfismo Utilizzando gli esempi degli aerei se da una classe mezzoditrasporto generica ereditiamo i metodi arrivo() e partenza() nella sottoclasse aereo dovremmo sviluppare maggior complessità rispetto ad una sottoclasse bicicletta. A questo punto, dalla nostra lista di mezzi possiamo prendere qualsiasi mezzo e chiamare arrivo() o partenza() senza doverci più preoccupare di che cos'è l'oggetto che stiamo maneggiando.

Ereditarietà: polimorfismo class cl_mezzo definition. public section. methods: constructor importing nome_mezzo type string, partenza changing mezzo_msg type string, arrivo changing mezzo_msg type string. endclass. class cl_mezzo implementation. Endclass.

Ereditarietà: polimorfismo class cl_bicicletta definition inheriting from cl_mezzo. endclass. class cl_bicicletta implementation. class cl_aereo definition inheriting from cl_mezzo. methods: partenza redefinition. … class cl_aereo implementation. method partenza. endmethod.

Ereditarietà: polimorfismo In una tabella d’oggetti carico tutti gli aerei a disposizione. Quindi richiamo il metodo di ciascun aereo per ottenerne il consumo CREATE OBJECT cargo_plane. APPEND cargo_plane TO plane_list. CREATE OBJECT passenger_plane. APPEND passenger_plane TO plane_list. LOOP AT plane_list INTO plane. tot_fuel = tot_fuel + plane->estimate_fuel_consump(distance). ENDLOOP.

Ereditarietà: polimorfismo Invece di: LOOP AT plane_list INTO plane. CASE plane-category WHEN ‘CARGO’ (codice per ottenere il consumo di carburante) WHEN ‘PASSENGER’ ENDCASE. tot_fuel = tot_fuel + fuel_needed. ENDLOOP.

Interfacce - Definizione Le interfacce consentono di accedere a classe differenti e a metodi differenti, usando gli stessi nomi per tutti. L’interfaccia è una struttura la cui definizione è simile a quella di una classe , ma la cui implementazione viene fatta all’interno delle varie classi a cui viene associata. INTERFACE <nomeinterfaccia>. data: methods: ENDINTERFACE.

Interfacce - Definizione Nella definizione si possono usare tutte le componenti delle classi(metodi,attributi,eventi) ma non si possono usare le varie sezioni di visibiltà (l’interfaccia e’ public per definizione) La parte d’implementazione viene sviluppa nella classe a cui si fa appartenere l’interfaccia.

Interfacce - Implementazione Per implementare un interfaccia questa va prima di tutto dichiarata all’interno della classe a cui si vuole associarla. E va dichiarata nella sezione public. CLASS <nomeclasse> DEFINITION. PUBLIC SECTION. INTERFACES <nomeinterfaccia>. ENDCLASS.

Interfacce - Implementazione I metodi dell’interfaccia vengono definiti nella sezione di implementazione dei metodi della classe. CLASS <nomeclasse> IMPLEMENTATION. METHOD <nomeinterfaccia~nomemetodointerfaccia>. ……. ENDMETHOD. ENDCLASS. Naturalmente se l’interfaccia viene associata anche ad un’altra classe i suoi vari metodi andranno implementati di nuovo all’interno di quest’ultima.

Riferimento alle interfacce All’interno di un programma il riferimento ad un’interfaccia si dichiara in modo simile a quello di una classe. TYPES: <nome_interfaccia> TYPE REF TO <interfaccia>. oppure DATA: <nome_interfaccia> TYPE REF TO <interfaccia>. Similmente per accedere ai metodi si usa: Call method <nomevarinterfaccia>-><nomemetodo>

Riferimento alle interfacce Per collegare una variabile interfaccia ad una classe, in cui in precedenza era stata dichiarata, si deve prima dichiarare una variabile di classe e poi associare le due variabili in questo modo: <nome_var_intefaccia>=<nome_var_classe> In questo modo con l’istruzione Call method <nome_var_interfaccia>-><nome_metodo> si accederà al metodo così come e’ stato implementato dentro quella classe. Per usare lo stesso metodo, ma dichiarato in un’altra classe, sarà sufficiente ripetere l’associazione alla nuova classe.

Eventi Per evento s’intende un’operazione che annuncia un cambio di stato ad un oggetto o una classe. Una classe può innescare (o trigger) un evento e, di conseguenza, altre classi attiveranno i componenti (metodi o interfacce) ad esse collegato Innescare un evento ha il seguente effetto: Il programma è interrotto in quel punto Il metodo registrato con l’istruzione SET HANDLER è richiamato Una volta eseguito il metodo (o eventuali altri) il programma riparte.

Eventi In fase di definizione si stabilisce quali sono gli eventi: Definire eventi nella classe (EVENTS, CLASS-EVENTS) Definire eventi o classi da innescare (RAISE EVENT) In fase d’implementazione si definisce il collegamento tra un evento e il metodo da chiamare al suo manifestarsi e le operazioni da svolgere all’avverarsi dell’evento.

Eventi Definizione ed implementazione nella classe (METHODS … FOR EVENT … FOR … ) handle_dblclick for event double_click of cl_gui_alv_grid importing e_row e_column con questa istruzione si definisce un metodo da eseguire ogni volta che viene eseguito un doppio click. Al metodo vengono passati due parametri. Definizione dell’oggetto di gestione dell’evento (SET HANDLER) set handler me->handle_dblclick for pri_v_grid. con questa istruzione si stabilisce che sull’oggetto pri_v_grid ad ogni doppio click si chiama il metod handle_dblclick (la notazione me-> sostituisce il nome della classe ).