2017-02-14 10 views
0

최근에 저는 컴퓨터 과학 과정에서이 수업에서 만들어진 두 가지 객체로 수업을 작성하는 과제를 가졌습니다.getters/setter가 Java의 main 메소드에 있어야합니까?

이메일을 통한 교수의 비판은 다음과 같습니다. "생성자, getter 및 setter의 sysouts가 주 방법에 있어야합니다."

그는 영어를 잘 못해서별로 도움이되지 않습니다. 아무도 내 코드를 참조하여 정확히 무슨 말을 하는지를 알고 있습니까? 이 코드는 내가 제출 한 코드입니다.

public class Book { 

int currentPage; 
int nextPage; 
int lastPage; 

public Book(int pageNumber) { 
    currentPage = pageNumber; 
    System.out.println("You've opened the book to page " + currentPage + "."); 
} 

public void turnForward(int numTurned) { 
    nextPage = numTurned + currentPage; 
    System.out.println("You've turned forward to page " + nextPage + "."); 
} 

public void turnBack(int numTurned) { 
    lastPage = nextPage - numTurned; 
    if (lastPage <= 1) { 
     lastPage = 1; 
     System.out.println("You've turned back to the first page."); 
    }else { 
     System.out.println("You've turned back to page " + lastPage + "."); 
    } 
} 

public static void main(String[] args) { 

    Book bigJava = new Book(5); 
    bigJava.turnForward(2); 
    bigJava.turnBack(8); 

    Book earlyObjects = new Book(22); 
    earlyObjects.turnForward(12); 
    earlyObjects.turnBack(17); 
} 

} 

getters/setters를 기본 메소드에 두어야합니까? 코드가 실제로 실행되지 않습니다.

+4

다시 읽어 보시기 바랍니다. 그는 sysouts가 생성자, getter 또는 setter에 있지 않아야하지만 주요 방법이라고 말했습니다. 주된 방법에 게터와 세터를 두어야한다고 말하는 것은 아닙니다. –

+4

교수님은 당신이 수업의 주요 방법에있는 모든 진술을 갖고 싶어합니다. setters/getters/constructors에는 없습니다. –

답변

5

그는 수업의 재사용 가능성을 언급하고 있습니다. 그는 getter를 노출하여 main 문에 print 문을 넣을 수 있기를 바랍니다.

왜?

다른 사람이 수업을 사용하고 싶거나 다른 프로젝트에서 다시 사용하고 싶다면 물건을 콘솔에 인쇄해서는 안됩니다. Book을 사용할 수있는 모든 상황이 콘솔에 내용을 인쇄해야하는 것은 아닙니다.

메인 메서드에서 로깅을 유지하는 것이 가장 좋습니다. 따라서 Book을 다른 작업에 다시 사용할 수 있습니다.

Getters

들이 수정 될 수있는 유일한 방법을 보장, 여전히 필드 private을 유지하면서 값을 액세스 할 수 있도록하면 노출 된 행동을 통해 :

는 코드를 개선 .. turnForward, turnBack

페이지를 전환하면 현재 페이지가 변경됩니다. 그것은 동일하게 머물러있는 것이 의미가 없습니다.

당신의 행동 방법 대신 currentPage 변수를 돌연변이해야합니다

public void turnForward(int pages) { 
    currentPage += numOfPages; 
} 

public void turnBack(int numOfPages) { 
    currentPage -= numOfPages; 
} 

public int getCurrentPage() { 
    return currentPage; 
} 

귀하의 주요 방법은 다음을 수행 할 때마다 로그인, 페이지를 돌 수 있었다 :

public static void main(String[] args) { 
    Book book = new Book(25); 

    int startPage = book.getCurrentPage(); 
    book.turnForward(5); 
    int endPage = book.getCurrentPage(); 

    System.out.println("The book was turned " + endPage - startPage + " pages forward."); 
}