Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Corso ABAP OO 03

1,493 views

Published on

Terza parte di un corso sulla programmazione ABAP ad Oggetti tenuto da me

  • Be the first to comment

  • Be the first to like this

Corso ABAP OO 03

  1. 1. ABAP OBJECTSTerza parte
  2. 2. 2Agenda del corso• Dai function module agli oggetti• Definizione di una classe• Oggetti e metodi• Incapsulamento, ereditarietà, polimorfismo• Interfacce• Eventi
  3. 3. 3Agenda del corso• Dai function module agli oggetti• Definizione di una classe• Oggetti e metodi• Incapsulamento, ereditarietà, polimorfismo• Interfacce• Eventi
  4. 4. Incapsulamento• Con il termine incapsulamento si indica la proprietàdegli oggetti di incorporare al loro interno sia gliattributi che i metodi, cioè le caratteristiche e icomportamenti dell’oggetto.• Gli attributi e i metodi sono incapsulati nell’oggetto.In questo modo tutte le informazioni utili cheriguardano un oggetto sono al suo interno.4
  5. 5. IncapsulamentoSemplificazione• Un oggetto viene utilizzato attraverso i metodi cheesso mette a disposizione• Per ogni metodo vengono indicati anche il numeroe il tipo dei parametri di input e di output• In questo modo chi utilizza l’oggetto può saperequali metodi possono essere invocati, quali sono iparametri da passare e che cosa ricaverà comevalore di ritorno5
  6. 6. IncapsulamentoSicurezza• Per poter leggere o modificare il valore di unattributo, si dovrebbe utilizzare un metodo cheesegue l’operazione richiesta• Questo garantisce l’information hiding, macomporta che per ogni attributo dell’oggetto sianodefiniti il metodo per leggere e il metodo permodificare il suo valore6
  7. 7. IncapsulamentoSicurezza• Nell’ABAP come in altri linguaggi è comunquepossibile accedere e manipolare gli attributi inmaniera diretta• Questa modalità di accesso agli attributi viola laregola dell’information hiding, perché gli attributinon restano più nascosti all’interno dell’oggetto, maoffre la facilitazione di poter manipolare gli attributisenza usare i metodi7
  8. 8. Ereditarietà• L’ereditarietà è una delle più importanticaratteristiche della programmazione ad oggetti• Essa è lo strumento che permette di costruirenuove classi utilizzando quelle già sviluppate8
  9. 9. Ereditarietà• Quando una classe viene creata attraverso ilmeccanismo di ereditarietà a partire da un’altraclasse, essa riceve in eredità tutti gli attributi e imetodi della classe generatrice• Questo incrementa notevolmente le possibilità diriutilizzo del codice9
  10. 10. Ereditarietà• La classe che è stata derivata da un’altra usandol’ereditarietà prende il nome di sottoclasse. Laclasse generatrice di una sottoclasse si chiamasuperclasse• Queste relazioni tra le classi individuano unagerarchia che nasce da un processo dispecializzazione10
  11. 11. EreditarietàMezzi di trasportoVeicoli a motore Mezzi non a motoreAuto Moto Autobus Bicicletta Cavallo11• Le classi che si trovano in cima alla gerarchia sonole più generali e man mano che si scende sitrovano classi più specializzate
  12. 12. Ereditarietà• Nell’ ABAP tutte le classi possono essererappresentate in un albero di discendenza• Il nodo più alto di questo albero è rappresentatodalla superclasse OBJECT• Se per una classe non viene specificata nessunaereditarietà allora questa erediterà in manieraimplicita direttamente dalla superclasse OBJECT12
  13. 13. EreditarietàEsistono due tipi di ereditarietà• Ereditarietà singola:una sottoclasse eredita da una sola superclasse13
  14. 14. Ereditarietà• Ereditarietà multipla:una sottoclasse eredita da due o più superclassi• L’ABAP Object (cosi come il Java) supporta solol’ereditarietà singola14
  15. 15. Ereditarietà• L’ereditarietà serve a definire nuove classi,derivate da altre, che ereditano gli attributi e imetodi, con la possibilità di ridefinirli o diaggiungerne di nuovi• La sottoclasse eredita dalla sopraclasse tutti gliattributi e tutti i metodi con la possibilità di inserirele differenze15
  16. 16. Ereditarietà• In ABAP per definire una sottoclasse che ereditada una superclasse scriveremo• CLASS <sottoclasse> DEFINITION INHERITINGFROM <superclasse>16
  17. 17. Ereditarietà• I componenti public e protected della superclassesaranno visibili nella sottoclasse• I componenti private resteranno visibili solo nellasuperclasse• E’ possibile assegnare ai componenti private dellasottoclasse gli stessi nomi di quelli dellasuperclasse17
  18. 18. Ereditarietà• I componenti STATIC (public e protected) di unasuperclasse sono visibili dalla sottoclasse• Si può accedere ad un componente STATICutilizzando entrambe le classi…super_classe=>attributo_staticoo …sotto_classe=>attributo_statico18
  19. 19. Ereditarietà• La nuova classe si differenzia dalla sopraclasse indue modi• per estensione, quando la sottoclasse aggiungenuovi attributi e metodi che si sommano a quelliereditati• per ridefinizione, quando la sottoclasseridefinisce i metodi ereditati19
  20. 20. Ereditarietà• Una classe definita ABSTRACT non può essereistanziata• Una classe astratta per essere utilizzata deveessere ereditata da una sottoclasse• Si può accedere comunque ai componenti static diuna classe astratta20
  21. 21. Ereditarietà• Se un metodo viene definito ABSTRACT alloratutta la classe diventa ABSTRACT…METHODS <metodo> ABSTRACT.• Un metodo astratto deve essere ridefinito all’internodella sottoclasse…METHODS <metodo> REDEFINITION.21
  22. 22. Ereditarietà• Una classe astratta può dichiarare e implementaremetodi non astratti• Questo permette di utilizzare questi metodi in unasottoclasse senza doverli ridefinire22
  23. 23. Ereditarietà• Una classe definita FINAL non può essereereditata• Tutti i metodi di una classe FINAL sono daconsiderarsi FINAL a loro volta e non devonoessere dichiarati come FINAL23
  24. 24. Ereditarietà• Un metodo definito FINAL non può essere ridefinitoin una sottoclasse…METHODS <metodo> FINAL.• Se in una classe c’è un metodo FINAL la classepuò essere ereditata ma quel metodo non puòessere ridefinito24
  25. 25. Ereditarietà• Un qualsiasi metodo non final può essere ridefinitonella sottoclasse utilizzando la key-wordREDEFINITION• I parametri del metodo tuttavia restano gli stessidefiniti nella superclasse25
  26. 26. EreditarietàRidefinire un metodo costruttore• Il metodo CONSTRUCTOR non segue le regole diridefinizione normali• Il CONSTRUCTOR è un metodo speciale in quantoviene richiamato in automatico dalla CREATEOBJECT e serve ad instanziare un oggetto26
  27. 27. EreditarietàRidefinire un metodo costruttore• Il CONSTRUCTOR viene ereditato automatica-mente dalla superclasse OBJECT e quindi può nonessere definito nella CLASS … DEFINITION• Se si desidera ri-definirlo esso è l’unico metodo chepuò avere indicati dei parametri di import perchédeve essere dichiarato nella CLASS …DEFINITION27
  28. 28. EreditarietàRidefinire un metodo costruttore• Quando una sottoclasse eredita da unasuperclasse in cui è stato ri-definito il metodoCONSTRUCTOR essa può a sua volta ri-definrlo• Per ridefinire il CONSTRUCTOR in una sottoclassesi seguono le stesse regole utilizzate per ri-definirlonella superclasse28
  29. 29. EreditarietàRidefinire un metodo costruttore• Il CONSTRUCTOR deve essere definito nellaCLASS … DEFINITION• I parametri del CONSTRUCTOR della sottoclassepossono essere differenti da quelli della definitinella superclasse• Nella CLASS … IMPLEMENTATION non si deveusare RIDEFINITION29
  30. 30. EreditarietàRidefinire un metodo costruttore• L’unica regola quando si ri-definisce un metodoCONSTRUCTOR in una sottoclasse è cheall’interno dell’implementazione deve essererichiamato il CONSTRUCTOR della superclasseCALL METHOD SUPER->constructorEXPORTING param1 = param30
  31. 31. EreditarietàRidefinire un metodo costruttore• I costruttori static funzionano in maniera moltosimile a quelli instance• Ci sono però due differenze fondamentali• I costruttori static non possono mai avereparametri• Se un costruttore static viene ri-definitoall’interno di una sottoclasse non è necessariorichiamare il CONSTRUCTOR della superclasseperché questo avviene in automatico31
  32. 32. EreditarietàReferenziazione e utilizzo degli oggetti• Ad un oggetto referenziato ad una superclassepossono essere attribuiti i valori di un oggetto diuna sua sottoclasse• Tuttavia esso potrà utilizzare solo i componentipresenti nella superclasse32
  33. 33. EreditarietàDATA: obj1 TYPE REF TO class1,obj2 TYPE REF TO class2.CREATE OBJECT obj2.obj1 = obj2.obj1->component_obj1. Correttoobj1->component_obj2. Errore33
  34. 34. EreditarietàReferenziazione e utilizzo degli oggetti• Durante la CREATE OBJECT può esserespecificata la referenziazione alla classe con cuil’oggetto viene istanziato.• Questo modifica solo i componenti instance mentrequelli static restano referenziati alla classepresente nella dichiarazione34
  35. 35. EreditarietàDATA: obj1 TYPE REF TO class1,obj2 TYPE REF TO class2.CREATE OBJECT obj1 TYPE class2.CREATE OBJECT obj2.obj1 = obj2.obj1->component_obj1. Correttoobj1->component_obj2. Corretto35
  36. 36. Ereditarietà• In generale una sottoclasse sarà sempre piùspecializzata della sua superclasse• L’attribuzione dei valori di una sottoclasse alla suasuperclasse viene definito “narrowing cast”• Il narrowing cast è permesso e non genera errori diconsistenza36
  37. 37. Ereditarietà• L’attribuzione dei valori di una superclasse ad unasottoclasse viene definito “widening cast”• Il widening cast generalmente non è permesso epuò generare errori di consistenza37
  38. 38. Ereditarietà• Per realizzare un widening cast bisogna usarel’operatore di assegnazione ?=obj2 = obj1. Errorobj2 ?= obj1. ok38
  39. 39. Ereditarietà• Inoltre bisogna definire il controllo della condizionedi erroreCATCH SYSTEM-EXCEPTIONS.MOVE_CAST_ERROR = 4.obj2 = obj1.ENDCATCH.39
  40. 40. Polimorfismo• Il polimorfismo indica la possibilità per i metodi diassumere forme, cioè implementazioni, diverseall’interno della gerarchia delle classi40
  41. 41. Polimorfismo• Utilizzando le proprietà del narrowing cast unite alpolimorfismo potremo richiamare un metodo da unoggetto utilizzando a seconda delle necessitàimplementazioni differenti41
  42. 42. Polimorfismo42
  43. 43. ESSENTIA.COM srlVia Druento, 290 - 10078 Venaria Reale (TO)Tel.: 011 – 4560.511 fax: 011 – 4560.577Via Nizza, 56 – 00198 RomaTel.: 06 – 85305570 fax: 06 – 85800504Mail: inforoma@e-ssentia.itWeb: www.e-ssentia.comPowerd byBossù Piergiorgio

×