Concetti OO per sviluppatori 4GL - polimorfismo
POLIMORFISMO
"- nel contesto della programmazione orientata agli oggetti, si riferisce al fatto che una espressione il cui tipo sia descritto da una classe A può assumere valori di un qualunque tipo descritto da una classe B sottoclasse di A (polimorfismo per inclusione).
- nel contesto della programmazione generica, si riferisce al fatto che il codice del programma può ricevere un tipo come parametro invece che conoscerlo a priori (polimorfismo parametrico)."
.... tratto da wikipedia.
In altre parole, lo stesso metodo può essere chiamato utilizzando parametri di diverso tipo.
ProductionOrder:CreateUsing(sales-order-number).
ProductionOrder:CreateUsing(oSalesOrder).
/* Polymorphism.cls */
CLASS PolymorphismClass:
DEFINE VARIABLE chVar AS CHARACTER NO-UNDO.
METHOD VOID SetVariable(ip-numeric-value AS INTEGER):
SetVariable(STRING(ip-numeric-value)).
END METHOD.
METHOD VOID SetVariable(ipValue AS CHARACTER):
chVar = ipValue.
END METHOD.
METHOD CHARACTER GetVariable():
RETURN(chVar).
END METHOD.
END CLASS.
/* Polymorphism.p */
USING PolymorphismClass.*.
DEFINE VARIABLE oPolyClass1 AS PolymorphismClass NO-UNDO.
DEFINE VARIABLE oPolyClass2 AS PolymorphismClass NO-UNDO.
oPolyClass1 = NEW PolymorphismClass().
oPolyClass2 = NEW PolymorphismClass().
oPolyClass1:SetVariable("string").
oPolyClass2:SetVariable(1234).
MESSAGE oPolyClass1:GetVariable() SKIP
oPolyClass2:GetVariable()
VIEW-AS ALERT-BOX.
Attenzione: il polimorfismo si applica solamente ai parametri e non al return type.
Corretto – due metodi nella stessa classe
• stesso method name,
• stesso data return type,
• differenti parameter signatures.
METHOD PUBLIC VOID SetVariable(ch-var as CHARACTER):
METHOD PUBLIC VOID SetVariable(de-var as DECIMAL):
Errato – due metodi nella stessa classe
• stesso method name,
• stessa parameter signature,
• differenti data return types.
METHOD PUBLIC CHARACTER GetVariable():
METHOD PUBLIC DECIMAL GetVariable():
La compilazione ritorna un errore.
0 commenti:
Posta un commento