Problema della sirena (OOP) [chiuso]

0

Una sirena è metà pesce e metà uomo. Ha un corpo umano superiore e un corpo di pesce più basso. Quando è sott'acqua, la sua parte superiore nuota come un essere umano mentre la sua parte inferiore nuota come un pesce. Per favore, spiega come può nuotare come un umano e un pesce allo stesso tempo? Crea un programma C ++ usando le classi e il paradigma OOP per risolvere questo problema.

Nota: non voglio il codice vero ma voglio conoscere i concetti OOP che possono essere usati per risolvere questo problema (come ereditarietà, composizione e aggregazione, sovrascrittura ecc ...) e perché?

La domanda è: come possiamo creare una "sirena" di classe che dipinga sia la funzionalità umana che quella del pesce sulle parti superiore e inferiore del suo corpo (come Eredita delle proprietà dell'uomo e del pesce rispettivamente nella parte superiore e inferiore del corpo ). Non ho bisogno di sapere come verrebbe eseguita la funzionalità ... Invece i concetti richiesti per soddisfare tali proprietà (come nuotare come umani e pesci allo stesso tempo). Quindi dimentica la parte fisica. E per quanto riguarda il contenuto, ho appena copiato la domanda dal documento OOP.

Un esempio "Potrebbe essere la risposta in realtà" Solo un esempio di prova:

Class Human{ 
/*some data members go here */ 
public:
 void swim()
{ /*functionality */ }
 }; 

Class Fish{
/*some data members go here */ 
public:
 void swim()
{ /*functionality */ }
 };

Class Mermaid:public Human, public Fish{ 
/*some data members go here */
public:
 void someFunction()
{ /*functionality */ }
 }; –  
    
posta ar27111994 25.04.2015 - 18:20
fonte

2 risposte

4

Una sirena non è né un umano né un pesce, quindi non proverei a calzare queste classi in una gerarchia ereditaria:

Class Mermaid{
/*some data members go here */ 
public:
 void swim()
 { /*functionality */ }
 };

Implementa "nuota" come preferisci. Se vuoi riutilizzare del codice in tutte e 3 le implementazioni di nuoto, puoi farlo facilmente creando una quarta classe come SwimTools in cui puoi inserire quel codice.

Naturalmente, potresti prendere in considerazione la creazione di una classe di interfaccia ISwimmer con un metodo swim astratto e derivare Human , Fish e Mermaid da quella classe. Se lo fai, dovresti avere un requisito pratico per trattare queste tre classi in modo uniforme.

In C ++, puoi anche combinare "l'ereditarietà dell'interfaccia" con "l'ereditarietà dell'implementazione", dare un nome alla classe base "Swimmer" e inserire le parti riutilizzabili invece di usare una classe SwimTools separata (tuttavia, è discutibile se è un design migliore o peggiore).

    
risposta data 26.04.2015 - 00:13
fonte
0

Non confondere le classi OO e le classificazioni ontologiche. Si potrebbe ingenuamente voler classificare una sirena come sia umana che pesce, ma la descrizione del problema suggerisce che il suo comportamento di nuoto si traduce nella composizione delle sue due parti. Le classi OO sono un mezzo per combinare variabili e comportamenti di stato che operano su quelle variabili, impacchettano ciò che qualcosa non descrive cosa sia.

Creerei una classe nuotatore, che ha due componenti di nuoto per il nuoto: superiore (parte superiore del corpo nell'uomo e tritone, fine testa di pesce) e inferiore (zampe nell'uomo, coda nel pesce e tritone). Ci sarebbero sottotipi di comportamenti di nuoto che rappresentano la parte superiore del corpo umano, le gambe umane, il corpo del pesce, la coda di pesce, ei tre tipi di nuotatori potrebbero crearli con composizioni diverse.

    
risposta data 26.04.2015 - 13:22
fonte

Leggi altre domande sui tag