Classi astratte nella struttura del pacchetto

6

Ho una classe astratta che avrà molti implementatori. Ci sono, naturalmente, molti posti in cui inserire classi astratte in una struttura di pacchetti Java. La classe astratta dovrebbe essere nello stesso pacchetto degli implementatori o dovrebbe essere in un pacchetto "pacchetto astratto" o altrove? Spiega perché lo inseriresti lì - Sto cercando una discussione sul design, non solo quello che dovrei fare in questo caso particolare.

    
posta Michael K 20.12.2010 - 19:42
fonte

2 risposte

9

Lo metterei (come qualsiasi altra classe) nel pacchetto che appartiene di più al suo contenuto. Questo, per lo più - ma non sempre - significa che lo metti nello stesso pacchetto delle classi di implementazione. A volte si inserisce una classe astratta nello stesso pacchetto di un'altra classe usando questa classe astratta - fa parte dell'API dell'altra classe. Le classi di implementazione potrebbero essere da qualche altra parte in quel caso. Non uso mai pacchetti extra per classi astratte o altre cose come le classi di eccezione o così.

Perché così? Preferisco usare la struttura del pacchetto come costruzione di un sistema per classificare il contenuto del software, invece di utilizzarlo per i dettagli di implementazione. La classe astratta può diventare in seguito una valida classe non astratta senza rompere l'API. Ma se dovessi spostare il suo pacchetto, si spezzerebbe di nuovo il vecchio codice. Unnessecary, penso.

    
risposta data 20.12.2010 - 19:51
fonte
0

Mi stavo solo chiedendo la stessa cosa (ma per le classi di interfaccia). Quindi, consente di aggiungere un post a questa discussione.

Ho un pacchetto com.cie.devices dove metto i dispositivi che controllo usando il software Java. Ora arriva il momento in cui ci sono abbastanza dispositivi per iniziare a costruire una gerarchia di dispositivi. Mi chiedevo se avrei dovuto inserire la mia interfaccia TypeA per i dispositivi di tipo A in com.cie.devices.typea , insieme con le classi di implementazione. Il mio argomento principale per non farlo era che mettere le interfacce in com.cie.devices ha reso facile identificare rapidamente tutti i tipi di dispositivi guardando le interfacce in quel pacchetto. Il mio argomento principale per farlo è che riunisce tutte le classi correlate di tipo A.

Alla fine, immagino che digiterò tutti i dispositivi correlati nello stesso pacchetto (cioè tutto il tipo A in com.cie.devices.typea ) perché 1) vedi già tutti i tipi di dispositivi che guardano i sotto-pacchetti di com.cie.devices , e 2) disimpegna i pacchetti com.cie.devices che conterranno probabilmente alcune classi solitarie che non hanno abbastanza amici per essere spinte di un livello inferiore nella gerarchia delle classi.

Quindi è così. Questo è un altro caso con un altro ragionamento dietro.

    
risposta data 05.01.2012 - 23:38
fonte

Leggi altre domande sui tag