La relazione has-a in OOP può diventare ambigua o difficile da conoscere?

1

Supponiamo di avere il seguente codice.

class D { static Integer i1 = 42; }

È vero che D ha un intero? O è solo per la variabile di esempio che possiamo avere una relazione has-a?

Mi chiedo anche molto simile, se una variabile primitiva può anche fare una relazione has-a o è strettamente per le classi? per esempio.

class D { int i1 = 42; }

Sembra che D abbia un int ma è un primitivo e non sono sicuro che le primitive siano legali per una relazione has-a.

Per costruire un esempio che potrebbe essere scomodo, presumo che non sia una relazione has-a che String s1 = "s1"; abbia un char perché non è quel tipo di relazione anche se s e 1 sono variabili tipi di char in questo caso.

Allo stesso modo, presumo che sia falso che una classe o un oggetto "abbia" qualcosa che ha solo concettualmente o come implementazione interna piuttosto che il modo semplice di capire come una relazione ha-una.

AFAIK, Java non ha class Digit , non ha class Mantissa , non ha class Coefficient e no class Fraction quando sfoglio i javadocs per Java 8, mentre Java ha molte classi per molti scopi diversi. Suppongo che il motivo dell'omissione di certe classi che sono concetti abbastanza comuni potrebbe essere che l'oggetto non sarebbe utile o che la gerarchia delle classi diventerebbe un complesso non necessario.

Ho compreso l'utilizzo e la definizione della relazione has-a? Ho frainteso qualcosa? Ci sono casi d'angolo a cui non ho pensato?

    
posta Niklas Rosencrantz 11.01.2017 - 10:59
fonte

1 risposta

4

Tipicamente, quando ti introducono i termini di is-a e has-a , per lo più li impari al contrario di un antoher is-ahas-a (ho preso in prestito la notazione dai linguisti).

Entrambi i termini sono usati come gli equivalenti nella lingua di tutti i giorni:

es. »A dog è un animal «

che potrebbe essere tradotto in Java -lingo:

»La classe dog estende la classe animal «

Il punto è qui, che hai due classi che hanno una relazione in qualche modo - di una che estende l'altra tramite is-a -relationship.

Se conosci e comprendi questo, l'altro sarà facile.

Parlare di has-a -relationship è una relazione tra due classi di essere usate e accessibili in modo molto privato:

» dogs ha eyes « è il modo di esprimere, che eyes fa parte di dogs e sono (in questo caso) accessibili solo da questo ("istanza" di a) cane.

In Java -lingo che significa:

»La classe dog ha membri (privati), di cui uno è eyes «. (Nessuno direbbe che dogs sono eyes per rendere il contrasto chiaro).

Se cerchi la parola chiave extends , hai una strong indicazione, se stai guardando una is-a o una has-a relazione.

Questo è non difficile da conoscere e anche non ambiguo.

E i tuoi esempi?

1) i1 sarebbe un tipo speciale di relazione. In linea di principio, è una relazione has-a . Ma ciò che lo rende speciale è che i1 è condiviso tra instances . Sarebbe corretto affermare che ogni istanza di D ha accesso allo stesso i1 condiviso.

opposto a

2) Ogni istanza di D ha il proprio i1 .

(1) è la versione comunista di i1 ( vis comica ).

    
risposta data 11.01.2017 - 17:56
fonte