La mia attuale comprensione dell'implementazione dell'ereditarietà è che si dovrebbe estendere una classe solo se è presente una relazione IS-A . Se la classe genitore può ulteriormente avere tipi di figlio più specifici con funzionalità diverse, ma condividerà elementi comuni astratti nel genitore.
Sto mettendo in dubbio questa comprensione a causa di ciò che il mio professore di Java ci sta raccomandando di fare. Ha raccomandato che per un'applicazione JSwing
stiamo costruendo in classe
Si dovrebbero estendere tutte le classi JSwing
( JFrame
, JButton
, JTextBox
, ecc.) in classi personalizzate separate e specificare la personalizzazione relativa alla GUI (come la dimensione del componente, l'etichetta del componente, ecc.)
Fin qui tutto bene, ma continua a consigliare che ogni JButton dovrebbe avere una propria classe estesa personalizzata anche se l'unico fattore distintivo è la loro etichetta.
Ad es. Se la GUI ha due pulsanti Ok e Annulla . Raccomanda che dovrebbero essere estesi come segue:
class OkayButton extends JButton{
MainUI mui;
public OkayButton(MainUI mui) {
setSize(80,60);
setText("Okay");
this.mui = mui;
mui.add(this);
}
}
class CancelButton extends JButton{
MainUI mui;
public CancelButton(MainUI mui) {
setSize(80,60);
setText("Cancel");
this.mui = mui;
mui.add(this);
}
}
Come puoi vedere l'unica differenza è nella funzione setText
.
Quindi questa pratica standard?
Btw, il corso in cui è stato discusso si chiama Le migliori pratiche di programmazione in Java
[Risposta dal Prof]
Quindi ho discusso il problema con il professore e sollevato tutti i punti menzionati nelle risposte.
La sua giustificazione è che la sottoclasse fornisce codice riusabile mentre segue gli standard di progettazione della GUI. Ad esempio, se lo sviluppatore ha utilizzato i pulsanti Okay
e Cancel
personalizzati in una finestra, sarà più semplice posizionare gli stessi pulsanti anche in altri Windows.
Ho il motivo per cui suppongo, ma comunque si tratta solo di sfruttare l'ereditarietà e di rendere il codice fragile.
In seguito, qualsiasi sviluppatore potrebbe chiamare accidently il setText
su un pulsante Okay
e modificarlo. In questo caso la sottoclasse diventa semplicemente fastidiosa.