Le interfacce devono fare un'astrazione (un archetipo) dell'astrazione (le classi) della realtà (gli oggetti).
Le interfacce devono specificare i termini del contratto senza fornire l'implementazione fornita dalle classi.
Le interfacce sono specifiche:
Le interfacce sono artefatti della fase di progettazione per specificare il comportamento immobile del concetto in quanto è solo e statico.
Le classi sono artefatti del tempo di implementazione per specificare la struttura mobile della realtà mentre interagisce e si muove.
Cos'è un'interfaccia?
Quando osservi un gatto puoi dire che è un animale che ha quattro zampe, una testa, un tronco, una coda e un pelo. Puoi vedere che può camminare, correre, mangiare e miagolare. E così via.
Hai appena definito un'interfaccia con le sue proprietà e le sue operazioni. In quanto tale non hai definito alcun modus operandi, ma solo caratteristiche e capacità senza sapere come funzionano le cose: hai definito abilità e distinzioni.
In quanto tale, non è ancora una vera classe, anche se in UML la chiamiamo classe in un diagramma delle classi perché possiamo definire membri privati e protetti per iniziare ad avere una visione approfondita del manufatto. Non essere confuso qui perché in UML un'interfaccia è una cosa leggermente diversa da un'interfaccia in C #: è come un punto di accesso parziale all'atomo di astrazione. Come tale abbiamo detto che una classe può implementare più interfacce. In quanto tale è la stessa cosa, ma non, perché le interfacce in C # vengono utilizzate sia per astrarre l'astrazione che per limitare questa astrazione come punto di accesso. Sono due usi diversi. Quindi una classe in UML rappresenta un'interfaccia di accoppiamento completo a una classe di programmazione, mentre un'interfaccia UML rappresenta un'interfaccia di disaccoppiamento di una sezione di una classe di programmazione. Infatti, il diagramma delle classi in UML non si occupa dell'implementazione e tutti i suoi artefatti sono a livello di interfaccia di programmazione. Sebbene associamo le classi UML alle classi di programmazione, si tratta di una trasposizione dell'astrazione astratta in astrazione concreta. C'è una sottigliezza che spiega la dicotomia tra il campo del design e il campo della programmazione. Quindi una classe in UML è una classe di programmazione dal punto di vista di un'interfaccia di programmazione considerando le cose nascoste interne.
Le interfacce consentono anche di simulare l'ereditarietà multipla quando non sono disponibili in modo scomodo. Ad esempio, la classe cat implementerà l'interfaccia cat che deriva dall'interfaccia animale. Questa classe di gatti implementerà anche queste interfacce: cammina, corri, mangia e fai un suono. Questo compensa l'assenza di eredità multipla a livello di classe, ma ogni volta è necessario reimplementare tutto e non è possibile fattorizzare la realtà al meglio come la realtà stessa fa.
Per capirlo si può fare riferimento alla codifica Pascal Object dove si definiscono in un'unità l'interfaccia e le sezioni di implementazione. Nell'interfaccia si definiscono i tipi e nell'implementazione si implementa il tipo:
unit UnitName;
interface
type
TheClass = class
public
procedure TheMethod;
end;
implementation
class procedure TheClass.TheMethod;
begin
end;
Qui, la sezione dell'interfaccia corrisponde al design della classe UML mentre i tipi di interfacce sono quindi altre cose.
Quindi nella nostra attività abbiamo una parola, interfaccia , per nominare due cose distinte ma simili, ed è fonte di confusione.
Anche in C #, ad esempio, le interfacce di programmazione permettono di compensare l'assenza di un vero polimorfismo generico sui tipi aperti senza riuscire veramente a raggiungere l'obiettivo perché si perde la capacità fortemente tipizzata.
Dopotutto, le interfacce sono necessarie per consentire a sistemi incompatibili di comunicare senza preoccuparsi dell'implementazione e della gestione degli oggetti in memoria come introdotto con il Common Object Model (Distribuito).
Cos'è una classe?
Dopo aver definito una riduzione della realtà da un punto di vista esterno, puoi quindi descriverla da una prospettiva interna: questa è la classe in cui definisci l'elaborazione dei dati e la gestione dei messaggi per permettere alla realtà che hai incapsulato di prendere vita e interagire grazie agli oggetti utilizzando le istanze.
Quindi in UML realizzi un'immersione frattale nelle ruote della macchina e descrivi gli stati, le interazioni e così via per poter implementare l'astrazione del frammento della realtà che vuoi gestire.
In quanto tale, una classe astratta è in qualche modo l'equivalente di un'interfaccia dal punto di vista del compilatore.
Maggiori informazioni
Protocollo (programmazione orientata agli oggetti)
C # - Interfacce
C # - Classi