Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1
    Utente di HTML.it
    Registrato dal
    Mar 2000
    Messaggi
    176

    Interfacce polimorfismo

    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
    :metallica

  2. #2
    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.

  3. #3
    Utente di HTML.it
    Registrato dal
    Mar 2000
    Messaggi
    176
    ti ringrazio sei stato chiarissimo ciauz

  4. #4
    allora nn sono l'unico pirla che studia C#
    La stupidità umana e l'universo sono infinite.
    Della seconda non sono certo(Einstein)

    Gnu/Linux User

  5. #5
    codice:
    allora nn sono l'unico pirla che studia C#
    Togli 'allora nn' e 'che studia C#' ..

    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.

    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.

  6. #6
    Originariamente inviato da r0x
    codice:
    allora nn sono l'unico pirla che studia C#
    Togli 'allora nn' e 'che studia C#' ..
    La stupidità umana e l'universo sono infinite.
    Della seconda non sono certo(Einstein)

    Gnu/Linux User

  7. #7
    Dai lo sai che scherzo .. :tongue:

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

  8. #8
    Originariamente inviato da r0x


    E poi che mi deridi di là che non ho mai usato XP?
    nn ti deridevo............skerzavo anche io:tongue:
    La stupidità umana e l'universo sono infinite.
    Della seconda non sono certo(Einstein)

    Gnu/Linux User

  9. #9
    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

  10. #10
    Utente di HTML.it L'avatar di evil80
    Registrato dal
    May 2001
    Messaggi
    323
    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.
    Secondo alcuni autorevoli testi di tecnica di aeronautica, il calabrone non può volare, a causa della forma e del peso del proprio corpo in rapporto alla superficie alare.
    Ma il calabrone non lo sa e perciò continua a volare.
    Igor Sikorsky

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.