Introduzione alla OOP – Le Interfacce

help

Continua il mio articolo sulla programmazione orientata agli oggetti. Ieri ho posto un problema e ho spiegato in sintesi cosa è l’ereditarietà. Oggi voglio cercare di chiarire qual’è il concetto di interfaccia ed introdurre il concetto di estensione di una classe che chiarirò poi nei prossimi articoli.

Vi ho lasciato cercando di introdurre il concetto di interfaccia. Ciò che voglio arrivare a spiegare è questo: supponiamo di avere una vettura generica che avrà per forza la funzionalità di:

  1. accelerare
  2. frenare
  3. curvare a destra
  4. curvare a sinistra

Ogni vettura esistente al mondo è anche una vettura generica. E’ logico affermare che una Ferrari è diversa da una Cinquecento, ma è vero anche che entrambe sono in grado di compiere (far compiere all’autista) queste 4 azioni, altrimenti non sarebbero autovetture (un treno ad esempio, che può solo accelerare in avanti o indietro e frenare, non è un autovettura per chiarirci). Ciò che quindi a noi interessa e che implicitamente facciamo quando andiamo a scuola guida, è imparare a districarci con questi comandi, indipendentemente dal modello di automobile che stiamo guidando. Impariamo cioè a governare un’interfaccia (volante, cambio, freno, acceleratore ecc.) a noi familiare in qualsiasi occasione, qualsiasi vettura ci venga data sotto mano.

Questo concetto è estremamente importante, perchè in questo modo noi generalizziamo il concetto di autovettura e ne astraiamo soltanto le proprietà comuni a tutte le macchine: che la porsche di James Bond abbia i retro-razzi è solo una condizione particolare della sua automobile, non vuol dire che tutte le auto abbiano i retro-razzi (magari!) smile emoticon

Ecco quindi che abbiamo dato un significato alla parola interfaccia, che possiamo definire come astrazione concettuale di una o più entità contenente metodi e proprietà comuni ad esse e che vogliono essere mostrati alle altre entità esterne.

Nel nostro caso particolare, volendo disegnare un diagramma potremmo definire qualcosa tipo questo:

ereditarietà macchine

Come si può vedere, in alto a sinistra ho posizionato l’interfaccia IMacchina che generalizza il concetto di macchina. Ho poi creato la classe MacchinaGenerica che altro non è che un oggetto di tipo IMacchina (si può vedere dal fatto che implementa l’interfaccia tramite il pallino sopra alla classe) e poi la gerarchia dei vari tipi di vetture definite dal problema, 4 in tutto: Fiat500, SeatLeon, FerrariF399 e PorscheBoxter, che estendono la classe MacchinaGenerica.

Vediamo qui sotto il codice di creazione dell’interfaccia IMacchina:

interface IMacchina
{
void Accelera();
void Frena();
void CurvaDestra();
void CurvaSinistra();
String GetNome();
}

Per il concetto di estensione di una classe, vi rimando al prossimo articolo. Per quanto riguarda invece l’implementazione di una interfaccia, la questione è abbastanza semplice. In pratica essendo che l’interfaccia è soltanto una bozza, qualcosa che noi mostriamo al mondo (vedi sopra) ma che in realtà non esiste, una classe che implenta una interfaccia deve contenere lo sviluppo codificato dei metodi abbozzati. In pratica è necessario dare un senso ai metodi e alle proprietà dell’interfaccia, tant’è che l’editor di C#, Visual Studio, dal momento che una classe implementa una interfaccia obbliga a definire tutti i metodi che vengono dichiarati.Qui sotto vi mostro il primo abbozzo della classe MacchinaGenerica:

public class MacchinaGenerica : IMacchina
{
#region IMacchina Members

public void Accelera()
{
//qui la macchina accelera
}

public void Frena()
{
//qui la macchina frena
}

public void CurvaDestra()
{
//qui curva a destra
}

public void CurvaSinistra()
{
//qui curva a sinistra
}

public string GetNome()
{
//qui dovremo ritornare il nome della macchina
}

#endregion
}

Nel prossimo articolo vedremo di dare più senso e responsabilità a questa classe, definendo inoltre il concetto di estensione di una classe. A presto!

This entry was posted in Linguaggi .Net, OOP, Programmazione and tagged , , , , , . Bookmark the permalink.

3 Responses to Introduzione alla OOP – Le Interfacce

  1. emardesign says:

    Sei bravo a esplicitare concetti tanto difficili! Stai scrivendo un’ottima guida! ti faccio i miei complimenti. Magari potremo fare scambio link! Fammi sapere!

    Auguri di buon anno!

    Emar

  2. Denis says:

    Sei bravo a esplicitare concetti tanto difficili! Stai scrivendo un’ottima guida! ti faccio i miei complimenti

    Grazie mille!! E’ bello sapere che questa guida serve a qualcuno, a maggior ragione se deve imparare è ancora più bello sapere che è espressa in maniera semplice, tutti ci siamo passati!

    Magari potremo fare scambio link!

    Certo volentieri! Ti mando una mail.

    Ciao!

  3. emardesign says:


    Grazie mille!! E’ bello sapere che questa guida serve a qualcuno, a maggior ragione se deve imparare è ancora più bello sapere che è espressa in maniera semplice, tutti ci siamo passati!

    Anche se ci sono già passato un anno fa, imprecando contro Bjarne Stroustrup (ho iniziato con il c++) e poi contro la microsoft (con il C#) perchè ho dovuto leggere e rileggere migliaia di volte per assodare il concetto, leggo volentieri i tuoi posts, che nella loro semplicità sono diretti e chiari!

    Attendo la tua mail!

    Saluti

    Emar

Lascia un Commento

L'indirizzo email non verrà pubblicato. I campi obbligatori sono contrassegnati *

*

È possibile utilizzare questi tag ed attributi XHTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>