Şu anki miras uygulama anlayışım, birinin sadece bir IS-A ilişkisi mevcutsa bir sınıfı genişletmesi gerektiği yönünde . Ebeveyn sınıfı ayrıca, farklı işlevselliğe sahip daha spesifik alt tipleri içerebilir ancak ebeveynde soyutlanmış ortak unsurları paylaşacaktır.
Java profesörümün bize yapmamızı önerdiği şey yüzünden bu anlayışı sorguluyorum. JSwing
Sınıfta inşa ettiğimiz bir uygulama için tavsiye etti.
Bir bütün uzanmalıdır JSwing
sınıfları ( JFrame
, JButton
, JTextBox
ayrı bir özel sınıfa, vs) ve (bileşen büyüklüğü, bileşen etiket, vb gibi) onları GUI ilgili özelleştirme belirtmek
Şimdiye dek çok iyi, ancak tek ayırt edici faktör onların etiketi olmasına rağmen her JButton'un kendi özel genişletilmiş sınıfına sahip olması gerektiğini tavsiye etmeye devam ediyor.
Örneğin, GUI'de iki düğme varsa Tamam ve İptal . Aşağıdaki şekilde genişletilmelerini önerir:
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);
}
}
Gördüğünüz gibi tek fark setText
fonksiyonda.
Peki bu standart pratik mi?
Btw, bunun tartışıldığı kursa Java'daki En İyi Programlama Uygulamaları denir .
[Prof. Kullanıcısının yanıtı]
Bu yüzden sorunu profesörle tartıştım ve cevaplarda belirtilen bütün noktaları dile getirdim.
Gerekçesi, GUI tasarım standartlarını takip ederken alt sınıflamanın yeniden kullanılabilir kod sağlamasıdır. Örneğin, geliştirici bir pencerede özel Okay
ve Cancel
düğmeler kullandıysa , aynı düğmeleri diğer Windows'a da yerleştirmek daha kolay olacaktır.
Sanırım sebebi anlıyorum, ama yine de sadece mirastan yararlanma ve kodu kırılgan hale getirme.
Daha sonra, herhangi bir geliştirici yanlışlıkla setText
bir Okay
düğmeyi arayabilir ve değiştirebilir. Bu durumda alt sınıf sadece sorun çıkarır.
JButton
yapıcıda ortak yöntemleri genişletip çağırıp, basitçe oluşturabilirJButton
ve aynı ortak yöntemleri sınıf dışında çağırabiliyorsanız?