2011-11-19 25 views
3

在我學習Java的下一個步驟,我現在對類和繼承。Java類和小類

我有一個功課,但解決我有點卡住,所以我在這裏不要求代碼,但就看你與我在想,如果沒有辦法達成一致,幫助我做一些指導。請理解,不幸的是,我不明白所有的Java,我正在採取這種語言的嬰兒步驟。

所以,現在的問題是:

它的目的是創建一個支持會議的orgazation的程序。會議有一個名稱,一個地點和一個日期。另外,每個會議都有一個組委會和一個計劃委員會。兩個委員會的成員都由姓名,電子郵件地址和機構標識。組織委員會成員在會議中的角色(財務,空間或膳食)也具有特點。程序委員會成員 特徵,反映他們在會議(差,一般,良好,優秀)的前一版的性能參數。此外,計劃委員會成員還與需要審查的文章列表相關聯。

每篇文章的特點是它的標題,作者名單和評價結果(1至5注,其中5是最好的)。每篇文章的最終評估是通過計劃委員會兩名成員進行評估的平均值得出的。作者的特點是姓名,電子郵件地址,機構和註冊費用。這種費用可以有兩種類型:高級(教師或研究人員)和學生。學生應考慮學位(學士,碩士或博士學位)。

會議註冊費爲$ 400老年人和200 $的學生。訂閱授權您提交一篇文章。誰希望提交比文章 高級作者必須支付50 $每增加文章。據認爲,每篇文章的第一作者將負責其在會議上的發言。

有了這個,我必須實現一些功能,但這不是我來這裏的原因。

讀的問題,我可以看到,

name 
email 
institution 

用於識別委員會和作者的成員。

所以我想創造一個

public class Identification{ 
    --------------- 
    name 
    email 
    institutionName 
    --------------- 
} 

,然後一切都變得複雜了,因爲我知道我要創建一些繼承了該類。

我可以創建

public class Conference{ 
    --------------- 
    name 
    location 
    date[] 
    --------------- 
} 

然後

public class Organization extends Conference{ 
    --------------- 
    role[] // 0 for finance, 1 for spaces and 2 for meals 
    --------------- 
} 

public class Program extends Conference{ 
    --------------- 
    performance[] //0 poor, 1 fair, 2 good and 3 excellence 
    articlesList[] // probably an id of and article 
    --------------- 
} 

但兩個類組織和計劃有成員和該成員是由相同的事情確定上課鑑定。就像我現在,Java只能擴展一個類,所以現在我堅持這些東西之間的關係。

讀剩下的問題我確定

public class Article{ 
    --------------- 
    title 
    listOfAuthors[] //probably an id 
    evaluation //this is done by two members on program committee but I can't figure out how they relationship between themselves. 
    --------------- 
} 

public class Authors{ 
    --------------- 
    type[][] // 0 for seniors and 1 for students on first column and 0 teachers, 1 researchers, 2 bachelor, 3 master and 4 doctorate on second column. 
    numberOfArticles //how many articles author wants to submit 
    conferenceFee[] // if on type[i][0] is 0 then Fee is 400 + (numberOfArticles * 50) else is 200 
    --------------- 
} 

這是方式還是不行。我無法理解是否必須創建所有這些類,以及哪些類擴展了其他類。任何意見?

favolas

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!! UPDATE !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

感謝您的反饋。讓我們看看我是否理解你的一些建議。

public class Member{ 
    --------------- 
    memberID 
    name 
    email 
    institutionName 
    --------------- 
} 

public class Authors extends Member{ 
    --------------- 
    authorsID 
    conferenceFee 
    --------------- 
} 

public class Seniors extend Authors{ 
    --------------- 
    degree[] // 0 for teachers 1 for researchers 
    numberOfArticles = // Some int 
    fee = 400 

    public int payment(int numberOfArticles){ 
     return numberOfArticles * fee; 
    } 
    --------------- 
} 

public class Students extend Authors{ 
    --------------- 
    degree[] // 0 bachelor, 1 master and 2 doctorate 
    numberOfArticles = // Some int 
    fee = 200 

    public int payment(){ 
     return fee; 
    } 
    --------------- 
} 

public class Article extend Authors{ 
    --------------- 
    articleID 
    title 
    listOfAuthors[] //probably an id 
    --------------- 
} 

public class ProgramCommitteeMember extends Member{ 
    --------------- 
    role[] // 0 for finance, 1 for spaces and 2 for meals 

    --------------- 
} 

public class OrganizationCommitteeMember extends Member{ 
    --------------- 
    lasYearPerformance[] //0 poor, 1 fair, 2 good and 3 excellence 
    articlesList[] // probably an id of and article 
    --------------- 
} 

public class Committee{ 
    --------------- 
    committeeType[] // 0 for Organization Committee and 1 for Program Committee 
    --------------- 
} 

public class OrganizationCommittee extends Committee{ 
    --------------- 
    listOfMembers[] //member id 
    --------------- 
} 

public class ProgramCommittee extends Committee{ 
    --------------- 
    listOfMembers[] //member id 
    --------------- 
} 

他這樣嗎?

回答

0

我看到了幾點我認爲你已經脫軌的地方。

  1. 您在會議中將數據顯示爲數組。每個會議實例只有一個日期。

  2. 您將Organization和Program都顯示爲Conference的子類。他們不應該。相反,應該有一個叫做委員會的超級類別,有兩個子類,即組織委員會和程序委員會。然後你的會議班有兩個內部變量,每個類型爲OrganizationCommittee和ProgramCommittee。換句話說,「委員會」不是「會議」類型,而是「會議」的成員。 (這裏的成員,我不是指「一個人參加會議」,我的意思是「一個物體是另一個物體所擁有的。」)

  3. 每個委員會都有成員。所以你需要一個成員超類,有兩個子類,OrganizationCommitteeMember和ProgramCommitteeMember。然後,您的ProgramCommittee將包含ProgramCommitteeMembers的一個清單(例如一個數組),並且您的OrganizationCommittee將包含OrganizationCommitteeMembers的清單。

  4. 另一件事,你在Organization中顯示role []作爲數組。首先,角色適用於委員會成員,而不是組織。其次,每個成員只有一個角色。您需要的是一種定義角色列表的方法,以便只能分配幾個有效值中的一個。但是每個成員只有一個角色。在這裏您的指示使用短語

密鑰「有」(這意味着一個類包含另一個類的一個實例)與「是」(這意味着一類是一類父類的)。

希望這有助於讓您走上正確的軌道。

+0

謝謝dnuttle。 1 - 我的不好。日期是一個數組,因爲索引0將具有年,1個月和2天。 2 - 謝謝。我明白。 3 - 一開始我以爲這樣做,但是我已經放棄了成員超類的道路。 4 - 好的。該角色應該是OrganizationCommitteMember中的變量 – Favolas

2

我認爲你混淆了繼承和組成。

組織是一種會議嗎?如果不是,不要繼承它。其中一個需要包含另一個 - 當第一個消失時,第二個必須。也可能是另一個人需要回頭查看 - 孩子需要了解他們的父母。沒關係。

程序是一種會議嗎?同樣的事情也發生在這裏。

看一看Liskov Substitution Principle

+0

謝謝。作爲兩個委員會的會議。一個是組織委員會(因此是班級組織),另一個是計劃委員會(因此班級計劃)。 – Favolas

0

仔細看看您需要表示的「實體」。實體可能會成爲您程序中的對象。你需要什麼實體/對象? - 例如,開始與實體「委託人」和「委員會成員」。

一旦你找到你的所有涉及的實體,您可以先來了解一下並加以比較:

是具有共性的東西(屬性)有不同的實體?這些是這些實體共同超級類別的候選人。您提出的Identification課程只是正確的做法。現在更進一步:哪些實體擁有「可識別」的屬性?那些應該從Identification繼承。

還記得 「類B繼承A類」 通常是指 「B是特殊類型A的」。您的組織特殊會議

+0

謝謝Hanno。我發現作者,組織委員會成員和計劃委員會成員都有共同的標識,所以我認爲標識應該是他們的父級,但作爲組織委員會和計劃委員會的會議,所以我也認爲他們是會議的子女所以出了點問題 – Favolas

0

你是對的,Java不允許多重繼承(也就是說,每個類只能擴展一個其他類)。

一般來說,帶有類,子類和繼承的思想是特定子類的對象是它們超類的特定種類。例如,創建一個類Animal,然後創建一個擴展動物的子類Horse是有意義的。或者,使用你已經介紹的框架,你可以有一個作者類,然後是一個高級類和一個學生類,兩者都可以擴展作者。利用這種結構的好方法可能是在返回int的三個類中的每一箇中都包含一個pay()方法。由於學生作者只需支付200美元,因此Student類中的pay()方法將返回200,而Senior類中的pay()方法將返回400.關鍵的觀察點是,現在您可以調用pay()方法在作者的任何對象上,所以您不需要事先檢查作者是高級還是學生。你應該能夠想到類似的方式來處理問題的其他方面。

+0

謝謝。起初我曾想過製作這些課程,但犯了一個錯誤,認爲他們在哪裏兩個。 – Favolas

0

那裏沒有太多的繼承,我想我會一直使用聚合和接口。

會員(你叫這個識別) 然後 CommitteeMember延伸會員 和 ProgramCommitteeMember延伸會員

看看繼承作爲X是Y

組織是大會並沒有真正意義。這是委員會在會議上履行的角色。所以 會議和會議 然後角色描述會員和會議。

計劃委員會成員hasa對會議的表現再次你有 會議,會議 和性能描述memebr和會議。

所以你可以定義一個基類會員,然後擴展角色和性能。

這是關於有一個和是一個 一本書有一個作者。 作者是一位作家。