2011-11-19 9 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 
    --------------- 
} 

하지만 두 클래스 조직 및 프로그램 회원이이 멤버가있는 같은 일에 의해 식별됩니다를 만들 수 있습니다

클래스 식별에. 지금, 자바는 단 하나의 클래스 만 확장 할 수 있으므로, 이제는이 것들이 어떻게 서로 관련되어 있는지 막혔습니다.문제의 나머지 부분을 읽기

나는

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

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!최신 정보!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

모든 의견을 보내 주셔서 감사합니다. 내가 너의 제안 중 적어도 일부를 이해했는지 보자.

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 
    --------------- 
} 

His this way?

답변

0

난 네가 레일을 벗어났다 고 생각하는 몇 가지 점을 본다.

  1. 회의에서 날짜를 배열로 표시합니다. 회의의 각 인스턴스에는 단 하나의 날짜 만 있습니다.

  2. 조직 및 프로그램을 모두 Conference의 하위 클래스로 표시합니다. 그들은해서는 안됩니다. 대신 Committee라는 상위 클래스가 있어야하며 두 개의 하위 클래스 인 OrganizationCommittee와 ProgramCommittee가 있어야합니다. 그런 다음 컨퍼런스 클래스에는 OrganizationCommittee 및 ProgramCommittee 유형의 두 가지 내부 변수가 있습니다. 즉, "위원회"는 일종의 "회의"가 아니며 "회의"의 구성원입니다. (여기서 회원은 "회의에 참석하는 사람"이라는 뜻이 아닙니다. 즉, "다른 물건이 소유 한 물건"을 의미합니다.)

  3. 각위원회에 회원이 있습니다. 따라서 두 개의 하위 클래스 인 OrganizationCommitteeMember와 ProgramCommitteeMember가있는 Member Superclass가 필요합니다. 귀하의 프로그램위원회는 ProgramCommittee 회원들의 목록 (예시를위한 배열)을 포함하게 될 것이고 귀하의 OrganizationCommittee는 OrganizationCommittee 회원들의 목록을 포함하게 될 것입니다.

  4. 다른 하나는 조직에서 role []을 배열로 표시하는 것입니다. 첫째, 역할은 조직이 아닌위원회 구성원에게 적용됩니다. 둘째, 각 구성원은 하나의 역할 만 갖고 있습니다. 필요한 것은 몇 가지 유효한 값 중 하나만 할당 할 수 있도록 규정 된 역할 목록을 정의하는 방법입니다. 그러나 각 회원은 단 하나의 역할을합니다. 당신의 지침 문구를 사용하는 위치에

키 "가있는"(한 클래스가 다른 클래스의 인스턴스를 포함하고 있음을 의미하는) 대가 "입니다"(하나 개의 클래스가 상위 클래스의 유형을 의미하는).

희망 트랙을 통해 도움을 받으십시오.

+0

고마워요. 1 - 나쁘다. 인덱스 0에는 연도, 1 개월 및 2 일이 있으므로 날짜는 배열입니다. 2 - 고마워. 나는 그것을 이해했다. 3 - 처음에는 그 일을 생각했지만 길을 따라 어딘가에 멤버 수퍼 클래스를 삭제했습니다. 4 - 좋아. 그 역할은 OrganizationCommitte 회원의 변수 여야합니다. – Favolas

2

나는 당신이 상속과 구성을 혼란스럽게 생각합니다.

조직은 어떤 종류의 회의입니까? 그렇지 않은 경우에는 상속하지 마십시오. 그 중 하나는 다른 하나를 포함해야합니다 - 첫 번째가 사라지면 두 번째는 사라져야합니다. 다른 어린이가 첫 번째로 돌아가는 것, 즉 자녀가 부모를 알아야한다는 것도 사실 일 수 있습니다. 괜찮아.

프로그램과 같은 종류의 프로그램입니까? 똑같은 것도 여기에 간다.

Liskov Substitution Principle을 살펴보십시오.

+0

감사합니다. 두위원회의 회의. 하나는 조직위원회 (그러므로 조직기구)이고 다른 하나는 프로그램위원회 (따라서 클래스 프로그램)입니다. – Favolas

0

표현해야하는 "엔터티"를 자세히 살펴보십시오. 엔티티는 아마도 프로그램에서 객체가 될 것입니다. 어떤 개체/개체가 필요합니까? 예를 들어, "commitee"및 "committeee"엔티티에서 시작하십시오. 귀하의 모든 관련 요소를 발견하면

, 당신이 그들을보고 비교하기 시작할 수 있습니다 공통점 (특성)가이 서로 다른 개체들은

있습니까? 이들은 해당 단체의 공통 수퍼 클래스 후보자입니다. 귀하가 제안한 Identification 클래스가 올바른 방법입니다. 이제 한걸음 더 나아가십시오 : 어떤 단체가 "식별 가능한"자산을 공유합니까? 그들은 Identification에서 상속해야합니다.

또한 "클래스는 클래스 A에서이 B상속"보통 의미 "B가 특별한 종류 (A)의이다"고 기억한다. 조직회의의 특별 종류입니까입니까?

+0

감사합니다. Hanno. 나는 저자, 조직위원회 위원 및 프로그램 위원 모두가 공통점을 가지고 있음을 확인 했으므로 식별은 부모 클래스 여야한다고 생각했지만 조직위원회와 프로그램위원회의 회의가되어야하므로 회의의 어린이라고 생각했습니다. 그래서 뭔가 잘못되었습니다 – Favolas

0

자바가 다중 상속을 허용하지 않는다는 말은 맞습니다 (즉, 각 클래스는 하나의 다른 클래스 만 확장 할 수 있습니다).

일반적으로 클래스, 하위 클래스 및 상속과 관련된 아이디어는 특정 하위 클래스의 개체가 해당 수퍼 클래스의 특정 종류라는 것입니다. 예를 들어, 클래스 Animal을 가진 다음 Animal을 확장하는 Horse 클래스를 만드는 것이 합리적입니다.

또는 소개 한 프레임 워크를 사용하여 작성자 클래스와 작성자를 확장 할 수있는 Senior 클래스와 Student 클래스를 가질 수 있습니다. 이 구조를 활용하는 좋은 방법은 int를 반환하는 세 클래스 각각에 pay() 메서드를 포함시키는 것입니다. 학생 작성자는 $ 200 만 지불하면되므로 Senior 클래스의 pay() 메소드가 400을 리턴하는 동안 Student 클래스의 pay() 메소드는 200을 리턴합니다. 여기서 주요 관찰은 pay() 메소드를 호출 할 수 있다는 것입니다 작성자 인 모든 개체에 대한 정보를 제공하므로 저자가 수석인지 학생인지 미리 확인할 필요가 없습니다. 문제의 다른 영역을 다루는 비슷한 방법을 생각할 수 있어야합니다.

+0

감사. 처음에 나는 그 수업을 만들려고 생각했지만 실수가 두 개나되는 것을 생각했다. – Favolas

0

거기에 상속이별로 없지만 모든 방법을 통해 집계 및 인터페이스를 사용하고 있다고 생각합니다.

회원 그런 다음 CommitteeMember는 회원 확장 X는 Y

기구 정말 이해가되지 않습니다 회의입니다으로 ProgramCommitteeMember가 회원에게 상속에서

봐를 확장 (이 식별라고도 함). 회의에서 커미션을 이행하는 역할입니다. 그래서 회의 및 회의 그때 역할은 회원과 회의를 설명합니다.

프로그램위원회 구성원은 회의에 대한 성능을 다시 수행하므로 회의, 회의 및 성능에서 memebr 및 회의에 대해 설명합니다.

기본 클래스 conferencemember를 정의한 다음 역할과 성능을 위해 확장 할 수 있습니다.

모든 것이 a이고 a는 입니다. 책에 작가가 있습니다. 작성자는 작가입니다.