PDA

Visualizza la versione completa : Interfacce polimorfismo


dobrio
19-01-2003, 22:23
Ho un piccolo problemino dato che sto imparando ad usare c# consultando un libro mi venuto un dubbio...
Le interfacce (come in c++,che non so usare) vengono create in una classe a parte e poi successivamente implementate da un'altra classe che le eredita.
Nell'interfaccia si dichiara il tipo o il metodo senza andarlo ad implementare....
Ma cosa mi serve dichiarare dei metodi o delle variabili in una apposita classe per poi successivamente andarli ad implementare in un'altra?????
Non posso fare tutto in una classe unica senza dovere creare una classe (interfaccia) che li dichiara solamente....
So come si usano...ma non ne capisco il beneficio...aiutatemi
CIAOOOOOO
:confused: :metallica

Tokamak
20-01-2003, 09:53
Quello che tu dici non esatto.
Quando crei una classe l'uso delle interfaccie non obbligatorio in C++ o C# a meno che tu non stia utilizzando un IDE come MS Visual Studio o C++ Borland, che per lo sviluppo di progetti "strutturati" ad hoc richiedono (ma neppure essi obbligano) a dichiarare le interfacce.
In ogni caso le interfacce devono essere dichiarate nella stessa classe dove implementi i metodi e non in un'altra (anche il caso di metodi "astratti" o da implementare in classi derivete ricade infatti indirettamente in questo caso). Ti faccio un esempio: con MS Visual Studio devi implementare prima un file header dlla classe (.h) dove dichiari le interfacce, poi il corpo della classe (.cpp) dove implementi i metodi.

Le interfacce hanno lo scopo di rendere immediatamente visibile e comprensibile a chi utilizza la classe quali parametri passare al metodo,(Immagina come sarebbe difficile a chi usa una classe ogni volta che deve usare un metodo andarselo a ricercare in mezzo a centinaia di altri metodi e nel caso di polimorfismo ci che cambia sono solo i parametri!)

Addirittura nel caso delle dll le interfacce sono l'unica cosa che esporti all'esterno per cui come dice il nome stesso fungono da interfaccia tra classe e utilizzatore.
Puoi vederla anche in questo modo: chi utilizza un oggetto non interessa sapere come fatto dentro ma deve conoscere solo la sua interfaccia, per cui per questioni di comprensibilit meglio (ma non obbligatorio) dichiararla.

dobrio
20-01-2003, 13:22
ti ringrazio sei stato chiarissimo ciauz

Luc@s
20-01-2003, 13:33
allora nn sono l'unico pirla che studia C#:dh:

r0x
20-01-2003, 20:59
allora nn sono l'unico pirla che studia C#


Togli 'allora nn' e 'che studia C#' .. :D

A parte le cretinate .. qui vedo che si fatta parecchia confusione. Tokamak qui si parla di interfacce nel senso di OOP, e in genere un'interfaccia una classe base astratta.

dobrio, un'interfaccia una grande invenzione, perch permette di creare un'intuitivissima struttura gerarchica delle proprie classi, quando esse condividano delle caratteristiche comuni. Che siano necessariamente "astratte" dovuto alla loro natura di concetto, e non di classe come insieme di oggetti in senso stretto.

Esempio:

Hai 4 classi: classe 'Animale', classe 'Uccello', classe 'Quadrupede', classe 'Cane'.

'Animale' classe base di 'Uccello' e 'Quadrupede', e 'Quadrupede' di 'Cane'.

Per vedi, 'Animale' pi ragionevolmente un concetto, un qualcosa di astratto, ed per questo che pi _corretto_ dichiararlo come interfaccia e non come classe di oggetti.

'Uccello' chiaramente un insieme di animali, ma ben definito (escludendo tutte le speci sottostanti..), quindi va implementato con attributi/metodi opportuni. Non so .. 'cinguetta()', 'vola()' etc. :D

Per 'Quadrupede' vale lo stesso discorso di 'Animale'. Deriva da 'Animale' ma generico, quindi un'interfaccia.

'Cane' deriva da 'Quadrupede'. Stesso discorso di 'Uccello'.

A livello prettamente schematico, potresti vedere questa gerarchia come un albero, in cui i nodi procedono dall'astratto al concreto man mano che ci si avvicina alle foglie. Ecco, l'uso delle interfacce facilita moltissimo questa schematizzazione.

E' veramente un piccolo cenno, ma spero di essere stato chiaro. :)

Ciao.

Luc@s
20-01-2003, 21:00
Originariamente inviato da r0x


allora nn sono l'unico pirla che studia C#


Togli 'allora nn' e 'che studia C#' .. :D



:mad:

r0x
20-01-2003, 21:02
Dai lo sai che scherzo .. :tongue:

E poi che mi deridi di l che non ho mai usato XP? :jam:

Luc@s
20-01-2003, 21:03
Originariamente inviato da r0x


E poi che mi deridi di l che non ho mai usato XP? :jam:

nn ti deridevo............skerzavo anche io:tongue:

Tokamak
21-01-2003, 09:56
r0x mi spiace deluderti ma non stata fatta alcuna confusione.
Come tu ben sai una classe astratta in C++ non supportata direttamente (basta per definire come classi astratte quelle che contengono metodi astratti), comunque vero che un'interfaccia porta (all'estremo) al concetto di metodo e classe astratta
Il concetto di interfaccia = classe astratta si addice di pi ad un linguaggio come Java.
Quindi per il C++ rimanga valido il concetto che un'interfaccia un insieme di funzioni di cui viene specificata l'intestazione (nome, parametri, valori di ritorno) senza specificare l'implementazione.
Credo comunque che si chiedesse il perch c'era bisogno di definirle non che cosa erano le interfacce... per quello c' tanta documentazione in internet.
Ciao
:p

evil80
05-02-2003, 00:25
secondo me un'altra cosa importante delle interfaccie che permettono la scrittura di metodi polimorfici.
Infatti qualunque classe erediti da una particolare interfaccia DEVE necessariamente implementarne tutti i metodi,ne consegue che possibile istanziare un riferimento all'interfaccia e passare attraverso tutti gli oggetti che la implementano,richiamandone i metodi (proprio perch questi devono per forza essere definiti).

Ciauz.

Loading