2014-11-03 85 views
0

我從java開始,如果一個大組織,就像我想要的那樣,它可以做。 我有許多參數要包括在一個類中,我想訪問類似的東西: 例如,我有班級學生誰實現類人。但他班學生有很多參數,我想分類它是這樣的:Java大類組織

Student John = new Student(); 

John.physical.setHeight(178); 
John.physical.setWeight(70); 
John.academic.setQualification(7.5); 
John.academic.setSubject(Maths); 
John.administrative.setAccountNumber(XXXXX); 
John.administrative.setPassport(123456789); 
... 

我可以這樣做嗎?

+1

是的,你可以嘗試使用嵌套類。我希望我指出正確的方向。 – WannaBeCoder 2014-11-03 08:56:38

+1

是的,班學生 - 而不僅僅是原始字段 - 可以包含其他類的字段,如「BodyData」或「AdministrativeDetails」。 – reto 2014-11-03 08:58:07

+1

是啊創建額外的類,如物理,學術和行政!然後使用這些類作爲學生類 – Michael 2014-11-03 08:58:30

回答

1

有幾點: 1),你應該將所有嵌套的邏輯單元,如「物理」,「學術研究」,「行政」到專用的實體, 2),你應該介紹的將接收所有的每個實體適當的構造初始化參數,例如3)您應該使用福勒先生和埃文斯先生介紹的'Fluent interface'。「物理」的構造函數將是下一個物理(短高度,短重量)(「物理」是實體名稱), 3) 所以,你的代碼將在明年重組方式:

Student john = new Student(); 
john.setPhysical(new Physical(178, 70)) 
    .setAcademic(new Academic(7.5, Maths)) 
    .setAdministrative(new Administrative(/*account number*/, /*passport number*/)); 

更新。

每個新班級都應放在「學生」班之外。他們將負責「學生」班的具體方面,並且滿足'SOLID'原則中的'S'規則,「學生」班的實例將擁有該班級的實例。這將使得這些類更少耦合,因爲例如如果應該改變「學術」類而不是「學生」類將被修改,那麼也可以引入幾種類型的「學術」實體等。

+0

好主意的領域!我該如何製作學生課程?是物理的,學術的還是行政的不同的班級,還是他們在同一個班級? – Charlio 2014-11-03 09:15:13

+0

請看我的更新。 – nndru 2014-11-03 12:08:35

0

你可以通過爲類別類型創建單獨的類來實現此目的。例如,您可以擁有包含身高和體重屬性的「PhysicalCharacteristics」類,包含accountNumber和Passport屬性等的「AdministrativeDetails」類。然後,您可以將這些類的實例作爲屬性放入Student類中。因此,您可以通過從這些類屬性中獲取它們來訪問/編輯屬性。例如,設置高度,你會做John.getPhysicalCharacteristics()。setHeight(178);

不要忘記在學生的構造函數初始化這些類,以避免空引用異常:

例如,如果你的學生類包含一個「PhysicalCharacteristics physicalCharacteristics;」變量你應該在構造這樣的初始化:

public Student(){ 
    physicalCharacteristics = new PhysicalCharacteristics(); 
} 
2

像別人已經在評論中指出的,你可以使用嵌套類:
例子:

public class Student { 

    class Physical { 
     int height; 
     int weight; 

     void setHeight(int height) { 
      this.height = height; 
     } 

     void setWeight(int weight) { 
      this.weight = weight; 
     } 
    } 

    class Academic { 
     // ... 
    } 

    class Administrative { 
     // ... 
    } 

    Physical physical = new Physical(); 
    // .. 
} 

現在你可以訪問:

John.physical.setHeight(178); 
+0

儘管如此,不需要使用嵌套類。例如,如果您想要爲非學生人員使用Physical,常規班級可以更好地工作。 – Thilo 2014-11-03 09:07:33

+0

肯定他可以使用常規課程。如果他以相似的偏好使用非學生,那是有道理的。但是,如果他只是針對該特定對象學生而具有這些偏好,則會在項目管理中更清晰地查看。 (我的想法) – huidube 2014-11-03 09:13:26