Terminologia HAS-A, IS-A in linguaggio orientato agli oggetti

Stavo solo leggendo il libro e conteneva i termini “HAS-A” e “IS-A”. Qualcuno sa cosa significano in particolare? Ho provato a cercare nel libro, ma il libro è lungo 600 pagine.

Questa è una programmazione orientata agli oggetti e una terminologia UML, non specifica di Java. Ci sono in realtà tre casi di cui dovresti essere a conoscenza:

  1. Una casa è un edificio (eredità);
  2. Una casa ha una stanza (composizione);
  3. Una casa ha un occupante (aggregazione).

La differenza tra (2) e (3) è sottile ma importante da differenziare. Insieme sono forms di associazione . Qual è la differenza? La composizione implica che l’object figlio non può vivere fuori dal contesto del genitore (distrugge la casa e le stanze scompaiono) mentre l’aggregazione implica che il bambino può esistere da solo (distruggere la casa e l’occupante va altrove).

Una Car ha una Wheel .

Un Sparrow è un Bird .

Accademicamente, i termini sono usati per decidere tra composizione ed eredità.

Ha-a significa che la Classe in questione ‘ha un’ campo di un tipo.

Is-a significa che la class si estende da una superclass o implementa un’interfaccia. L’operatore instanceof restituirebbe true se testato su una class in questo caso.

Questo non è java specifico, è OO specifico.

IS-A significa che puoi avere una class che “è un” qualcosa. Come una studentessa “IS-A”. Questo è usato per descrivere un object che è una sottoclass di un altro.

A volte non esiste una relazione IS-A tra due classi, ma una “HAS-A” è più appropriata. Esempio, una sedia “HAS-A” gamba. o più. questo è chiamato aggregazione, al contrario dell’ereditarietà.

Non entrerò nei dettagli di quando usarli, perché dipende da come vengono utilizzate le classi e anche se è noto che c’è così tanto da considerare, una nuova domanda per un caso specifico sarebbe più appropriata.

È a = Tipo speciale di auto, ad esempio, è un tipo speciale di veicolo.

Ha a = Fisicamente ha qualcosa, ad esempio la macchina ha un motore.

IS A “: stabilisce la relazione tra gli oggetti correlati. Puoi usare l’ ereditarietà per stabilire la relazione.

“HA UN” : Definisce una capacità per oggetti eventualmente non correlati. È ansible utilizzare l’ interfaccia per definire la capacità.

Esempio:

Il cane è un animale. Ha una capacità di apprendimento.

L’uomo non è un animale. Ha una capacità di imparare, pensare, arrampicarsi e candidarsi.

IS-A, HAS-A ecc. Non sono veramente molto OO. Invece, il principio di sostituzione di Liskov è OO.

Lo zio Bob fa luce sulla storia di IS-A a http://www.hanselminutes.com/default.aspx?showID=163

Robert C. Martin: La parola “ISA” si insinuò nel nostro vocabolario e dal modo in cui è una parola ISA, si insinuò nel nostro vocabolario attraverso un percorso tortuoso e divenne molto importante in ambienti orientati agli oggetti, ma non iniziò in quel modo . Si è insinuato negli anni ’80 attraverso la folla di intelligenza artificiale che aveva creato queste meravigliose reti di conoscenza, si potrebbe ricordare questo, tutto il clamore sull’Intelligenza Artificiale alla fine degli anni ’80, primi anni ’90, e poi ha creato queste strutture che avrebbero guidato le reti di conoscenza di questi motori di inferenza, e le relazioni tra le entity framework e le reti della conoscenza con cose del genere, è come un, ha un sapore come un, odora di un ISA, tutte queste – Una relazione è una, come una, ha una e quando la folla di IA ha perso il suo finanziamento, e tutte quelle unità di finanziamento, hanno guardato in giro e hanno detto: “Oh, c’è quest’altra roba, è un po ‘fico. Guarda, ci sono queste relazioni come ha e continua, è molto simile, dovremmo solo trasferirci. ” E hanno fatto e il vocabolario è passato. È interessante, è anche un po ‘sfortunato perché l’eredità non è ISA. L’ereditarietà, se la si guarda con occhio molto stanco, l’ereditarietà è la dichiarazione di metodi e variabili in un subscope e non ha nulla a che fare con ISA, e la nozione di ISA può essere molto confusa. Semplice esempio, un numero intero è un numero reale e un numero reale è un numero complesso. Potresti disegnarlo nel tuo UML, sarebbe molto semplice con tutta l’eredità lì e così via, ma pensa di provare a compilarlo. Un intero che speriamo sarebbe 16 o forse 64 bit ma se dovesse derivare dal numero reale, un numero reale ha due interi, una mantissa e una caratteristica, l’esponente e hanno usato, hanno implicato punti binari al loro interno per rendere questo numero in virgola mobile. Il numero in virgola mobile, il numero reale, deriva dal complesso ma il complesso ha due numeri reali, l’immaginario e la parte reale. Se pensassi di scrivere in C ++ o in Java, dovresti scrivere una struttura che non può essere compilata perché ha un pensiero infinito. Ha perfettamente senso in inglese non ha alcun senso nel software.

I nomi praticamente implicano tutto.

Una class IS-A può essere considerata come riferimento specializzato a un’istanza di un’altra class che eredita tutti i suoi attributi.

Se esiste una class chiamata Veicolo . Quindi qualsiasi tipo di veicolo può ereditare gli attributi di questa super class. Ad esempio , la macchina della polizia erediterà tutti gli attributi del veicolo perché è una specializzazione di quest’ultimo.

inserisci la descrizione dell'immagine qui

D’altra parte, una class HAS-A ha un riferimento a un’altra class o un’istanza di un’altra class. In altre parole, condivide un’associazione con un’altra class. Esistono due tipi di classi HAS-A, un’aggregazione che indica che la class può esistere indipendentemente e la composizione , il che significa che la class può esistere solo accanto a quella con cui condivide un’associazione.

È importante sapere quando classificare un object come una class di composizione o semplicemente come attributo di un’altra class.

Riprendendo la Vehicle Class, una class di Driver sarebbe considerata un’aggregazione perché la class Driver può esistere come quadro indipendente anche se la class Vehicle cessa di esistere.

Considerando che una class di motore non può esistere se una class di veicolo è inesistente, perché il motore non può esistere al di fuori della portata del veicolo .

inserisci la descrizione dell'immagine qui

come sottolinea il cleto, is-a è diverso. ma fai attenzione con has-a. questo può significare composizione (responsabilità di vita), aggregazione (parte di qualcosa), o semplicemente usi-a (ha un riferimento a, sa come costruirne uno o trovarne uno). quest’ultimo è solo un’associazione.

Se sviluppi una class di raccolta chiamata “Scuola”. Avresti “insegnanti” e “studenti” nella scuola. Sviluppate una class “persona” e sia “studente” che “insegnante” erediterebbero dalla class “Persona” poiché entrambi sono – “è una” persona. Sia lo studente che l’insegnante hanno entrambi un compleanno. Dovresti creare una “Data Class” poiché sia ​​l’insegnante che lo studente “hanno” o “hanno un compleanno” all’interno della “Persona”. Questa è “portacontainer” In sintesi “è una persona” usa l’ereditarietà “ha un” usa portacontainer ”