Visualizzazione dei risultati da 1 a 9 su 9
  1. #1

    [C#]Polimorfismo

    Il polimorfismo è una delle tre caratteristiche della programmazione
    ad oggetti (OOP).
    Il polimorfismo è la funzionalità che permette di utilizzare un'unica interfaccia per un'intera classe di azioni.
    Insieme all'ereditarietà è uno dei punti di forza del framework.NET.

    Ecco come implementarlo in C# con una classe astratta:
    codice:
    using System;
    
    /// <summary>
    /// Prova di virtual e override
    /// </summary>
    
    public abstract class Animale  {/* ecco la superclasse */
    	public virtual void saluta(){
    		Console.WriteLine("Ciao, sono un animale\n");
    	}
    }
    
    public class Cane:Animale {/* ecco la derivata */
    	public override void saluta() {
    		Console.WriteLine("Ciao, sono un cane\n");
    	}
    	
    }
    
    public class Gatto:Animale {/* ecco la derivata */
    	public override void saluta() {
    		Console.WriteLine("Ciao, sono un gatto\n");
    	}
    	
    }
    
    public class Test {
    	public static void Main() {
        	Cane bau = new Cane();
    	Gatto miao = new Gatto();
    	bau.saluta();
    	miao.saluta();	
    	}
    	
    }
    Analizzando le classi abiamo:

    * la classe Animale , contrassegnata da abstract che è la nostra superclasse base
    * la classe Cane derivata da Animnale
    * la classe Gatto derivata da Animale

    Analizzando le funzioni abbiamo:
    * la funzione saluta() di Animale contrassegnata da virtual
    * la funzione saluta() di Cane contrassegnata da override
    * la funzione saluta() di Gatto contrassegnata da override


    Conclusione:

    Le funzioni che noi dichiariamo dentro una classe astrata con la parola riservata virtual,
    sono soggette a polimorfismo.
    Questo è ottenuto reimplementando la stessa funzione della classe di base in una classe derivata e sostituendo virtual con override.

    N.B-->La funzione ereditata e contrassegnata con override nn dovra combiare ne il tipo restituito ne gli argomentii
    La stupidità umana e l'universo sono infinite.
    Della seconda non sono certo(Einstein)

    Gnu/Linux User

  2. #2
    Utente di HTML.it L'avatar di Alendar
    Registrato dal
    May 2002
    Messaggi
    169
    molto buono , adesso implementa il polimorfismo tramite l'interfaccia IAnimale...

  3. #3
    ti piace davvero?
    La stupidità umana e l'universo sono infinite.
    Della seconda non sono certo(Einstein)

    Gnu/Linux User

  4. #4
    codice:
    using System;
    
    public interface IAnimale  {/* ecco l' interfaccia */
    	public virtual void saluta();
    }
    
    public class Cane:IAnimale {/* ecco la derivata */
    	public override void saluta() {
    		Console.WriteLine("Ciao, sono un cane\n");
    	}
    	
    }
    
    public class Gatto:IAnimale {/* ecco la derivata */
    	public override void saluta() {
    		Console.WriteLine("Ciao, sono un gatto\n");
    	}
    	
    }
    
    public class Test {
    	public static void Main() {
        	Cane bau = new Cane();
    	Gatto miao = new Gatto();
    	bau.saluta();
    	miao.saluta();	
    	}
    	
    }
    Analizzando le classi abiamo:

    * la interfaccia IAnimale ,che è la nostra base
    * la classe Cane derivata da Animale
    * la classe Gatto derivata da Animale

    Analizzando le funzioni abbiamo:
    * la funzione saluta() di Animale contrassegnata da virtual e nn implementata
    perche facente parte di interfaccia
    * la funzione saluta() di Cane contrassegnata da override
    * la funzione saluta() di Gatto contrassegnata da override

    Conclusione:

    La differenza tra classi astratte e interfaccie e che le interfaccie nn contengono implementazioni e nn possono essere istanziate.
    La stupidità umana e l'universo sono infinite.
    Della seconda non sono certo(Einstein)

    Gnu/Linux User

  5. #5
    La differenza tra classi astratte e interfaccie e che le interfaccie nn contengono implementazioni e nn possono essere istanziate.
    Premessa: neanche una classe astratta è istanziabile (in realtà lo è, ma non direttamente).. :quipy: Tuttavia, i motivi per cui da entrambi i concetti non si possano istanziare oggetti .. sono molto, molto diversi.

    E infatti qui c'è da fare una bella e grossa rettifica.. che forse avrei dovuto fare a me stesso in un altro thread, che poi è rimasto sommerso.

    Un'interfaccia e una classe astratta, sebbene simili a livello di definizioni sintattiche, non sono assolutamente la stessa cosa.

    Fondamentalmente per il fatto che una classe (concreta o astratta che sia) è un modello sul quale istanziare degli oggetti, cioè delle entità che hanno vita propria; un'interfaccia è invece solo un insieme di funzioni, di operazioni (qualcuno potrebbe addirittura ardire "un'algebra"). Pertanto un'interfaccia non ha ragione di esistere se non esiste almeno una classe che la implementi (anche astratta).

    Ora non so come il C# consideri le interfacce, ma questa è la visione di Java, e direi che è la più adeguata.

    Partendo dalla prima osservazione si può inoltre sfatare una convinzione sbagliatissima, e cioè che "Java supporta una sorta di ereditarietà multipla tramite le interfacce". Nulla di più errato! Proprio perché un'interfaccia non è una classe, ed è più che ragionevole che una classe implementi più di un insieme di operazioni.

    Lo scopo di un'interfaccia è quello di raggruppare sotto un certo punto di vista insiemi di oggetti anche assolutamente non correlati, ma che condividano le stesse operazioni. Questo per la genericità.

    Basti pensare ad un algoritmo di ordinamento. Che senso avrebbe definirne di diversi per animali, numeri .. o qualunque altra cosa? L'algoritmo è lo stesso, è il concetto di ordine su quell'insieme che varia. Quindi quest'ultimo può essere condiviso sotto una stessa interfaccia, che ad es. potrebbe chiamarsi 'Confrontabile', e che andrebbe implementata (a livello di codice) con un operatore '<=' che definisca un ordine totale sull'insieme.

    Questo è il vero significato di un'interfaccia.

    Ciao.

  6. #6
    Utente di HTML.it L'avatar di kuarl
    Registrato dal
    Oct 2001
    Messaggi
    1,093
    io continuo a ribadire una cosa, questo C# mi sa' tanto di java reimpastato praticamente è identica anche la terminologia e definirlo "uno dei punti di forza del framework.NET" mi sembra una fesseria dato ke la microzoz ha fatto sua una tecnologia di sun, la microsoft ke ora sta cercando di eliminare java da windows con costose azioni legali contro sun.... bella roba

    C# == Java

  7. #7
    Utente di HTML.it L'avatar di biste
    Registrato dal
    Apr 2001
    Messaggi
    877
    Originariamente inviato da kuarl
    io continuo a ribadire una cosa, questo C# mi sa' tanto di java reimpastato praticamente è identica anche la terminologia e definirlo "uno dei punti di forza del framework.NET" mi sembra una fesseria dato ke la microzoz ha fatto sua una tecnologia di sun, la microsoft ke ora sta cercando di eliminare java da windows con costose azioni legali contro sun.... bella roba

    C# == Java
    Certo se guardi solo la struttura e la sintassi del linguaggio... La piattaforma su cui si appoggia mi pare abbastanza diversa.
    UGIdotNET
    Microsoft .NET MCAD
    C++, C#, VB6, VB.NET, ASP, ASP.NET
    SQL Server 2000

  8. #8
    Utente di HTML.it L'avatar di kuarl
    Registrato dal
    Oct 2001
    Messaggi
    1,093
    io ho due manuali, uno è della mondadori ed è sul C#, l'altro e della apogeo (java), per la serie tutto & oltre.... conosco bene la roba IL di microzoz.... e mi viene in mente il bytecode di java, i famosi file class multipiattaforma, conosco bene il sistema di documentazione di C#, e li mi viene in mente javadoc di sun.... posso andare avanti... quello non è C, quello è un C in cui volevano aumentare le potenzialità della programmazione ad oggetti, e hanno adottato le stesse soluzioni di java.... le interfacce, sapete xke java le implementa e il c++ no?? xke java non permette l'ereditarietà multipla, ma non poteva eliminare una qualità così importante di un linguaggio, e alla sun si sono invetate le interfacce, beh alla microzoz hanno fatto lo stesso?? è identica anche la sintassi....

    io non contesto la sintassi.... xke tutti i linguaggi di questo mondo sono copiati dal C... io contesto le idee, le soluzioni che microsoft ha dato ai problemi di sempre....

    PS Garbage Collection.......................................

  9. #9
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,463
    "BUMP!"

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 © 2025 vBulletin Solutions, Inc. All rights reserved.