Utilizzo di entrambe le relazioni is-a e has-a?

1

Quindi se ho una classe chiamata Object , una classe, bench , che deriva da Object , e infine una classe chiamata Park che deriva da Object che ha-a bench - è questa brutta "pratica", avere due oggetti che tecnicamente entrambi sono-a Object ma ancora l'uno usa l'altro? Il motivo per cui lo chiedo è che posso sembrare divertente avere due classi della stessa classe base che si usano l'una con l'altra.

    
posta so stack 16.10.2018 - 22:22
fonte

3 risposte

5

Non sono sicuro di quale lingua sia, ma ad es. Java, tutte le classi estendono Object, quindi questa non è davvero una scelta da fare.

Ma in generale, non c'è nulla di sbagliato nel fatto che qualcosa sia un tipo e sia composto da un tipo. Ad esempio, una nave da crociera è un tipo di imbarcazione e le scialuppe di salvataggio che devono essere operative sono le barche. Una nazione è un gruppo di persone composto da gruppi di persone.

    
risposta data 16.10.2018 - 22:39
fonte
2

Niente di sbagliato nell'avere una classe base comune. Questo è in realtà un modello molto comune.

In molte lingue (Java e tutte le derivate, JavaScript, nuove classi Python e innumerevoli altre) le classi sono progettate in modo tale che tutti gli oggetti derivino da una base comune (di solito chiamata Object).

È anche comune per framework e librerie definire le classi base da cui molti o molti altri derivano, come ad esempio QObject in Qt, o model.Model in Django ORM (dove i modelli sono destinati ad avere ha-una relazione tra loro ).

    
risposta data 16.10.2018 - 22:41
fonte
2

The reason I ask is because I can seem funny to have two classes of the same base class that use each other.

Solo alcuni controesempi che dovrebbero dimostrare il punto:

  • Un Boss è un Person . Un Employee è un Person . Un Employee ha un Boss .
  • Un bambino ha un padre e una madre, anche se sono tutti solo Person oggetti.
  • Un Rifle è un Weapon . Un GrenadeLauncher è un Weapon . A Rifle può avere un GrenadeLauncher collegato ad esso.

Non c'è niente di sbagliato in questo.

Penso che questo sia divertente perché nelle applicazioni LOB, un insieme di classi è spesso progettato per controbilanciare a vicenda, il che spesso porta a classi che rappresentano ruoli che si escludono a vicenda e raramente hanno ereditarietà relative alla funzionalità.

Ma non è questo il caso. E se approfondisci le implementazioni tecniche, che non sono progettate per implementare funzionalità ma piuttosto per migliorare lo standard del codice, vedrai che le ereditarietà condivise diventano molto più comuni.

    
risposta data 17.10.2018 - 08:38
fonte

Leggi altre domande sui tag