Generalizzazione di Java

-1

Ho una domanda riguardante la generalizzazione. So quando è necessario, ma vale la pena avere una classe extra per 1 campo?

per esempio:.

StatisticsCustomer ha campi: Customer customer e int projectCount StatisticsCountry ha campi: Country country e int projectCount

Cosa c'è di meglio in questa situazione? Creare una classe extra solo per projectCount o tenerla due volte nelle due classi?

    
posta Nikola 06.06.2013 - 13:37
fonte

2 risposte

4

Perché non una classe generica che funziona per qualsiasi tipo di statistica? In modo da avere sempre una singola classe.

public class Statistics<E>
{ 
   private E element;
   private int projectCount;

   ...
}

Statistic<Customer> myStCustomer = new Statistic<Customer>(...)
Statistic<Country> myStCountry = new Statistic<Country>(...)
    
risposta data 06.06.2013 - 14:55
fonte
4

Stai dando troppo poco contesto per prendere questa decisione.

Detto questo, se modellare le cose in quanto classi diverse della stessa classe ha poco a che vedere con quanti campi diversi hanno, e molto con come ci si aspetta di usarle nel tuo programma. L'esempio canonico è una classe Point con coordinate cartesiane rispetto a coordinate polari; entrambi avranno probabilmente due campi numerici privati, ma quelle due coppie di numeri non significano lo stesso, quindi sarebbe terribile usare solo una classe e cercare di tenere traccia di cosa significano i campi - due classi strutturalmente identiche che sono diverse in base al tipo di sistema sono chiaramente la cosa giusta da fare.

Nel tuo esempio, tutto quello che posso dire è che non vedo nessuna circostanza in cui tu voglia trattare un cliente e un paese in modo intercambiabile, eccetto forse se tutto ciò che vuoi fare è creare dei grafici di dati distribuiti dove il tipo di i dati non contano affatto (forse lavori nell'ufficio delle statistiche delle Nazioni Unite?). In quasi tutti i programmi che posso immaginare, i clienti e i paesi devono essere tenuti separati e utilizzare il sistema dei tipi per fare in modo che questa distinzione sia praticamente sempre una buona idea.

    
risposta data 06.06.2013 - 13:59
fonte

Leggi altre domande sui tag