2014-11-08 2 views
1

이것은 인터뷰 질문입니다. 그들은 코드를 제공하고 그것을 비판하고보다 OOP 방식으로 재 배열하도록 요청합니다.OOP 원칙을 존중하는 코드 리팩토링

public abstract class Storage{ 
    public static Vector<IStorage> objects = /*...*/; // Create a vector IStorage empty, I do not know how 

    public Storage(String xmlFile){ 
     ReadFromXMLFile(xmlFile); 
     objects.addElement((IStorage)this); 
    } 
    protected abstract ReadFromXMLFile(String xmlFile); 

} 

public interface IStorage{ 
    public String getAuthor(); 
    public String getEditor(); 
    public String getName(); 
    public boolean isBook(); 
    public boolean isFood(); 
} 

// Exemple d'implémentation 
public class Novel implements IStorage extends Storage{ 
    private String author; 
    private String editor; 
    private String name; 
    private boolean historical; 

    public Novel(String xmlFile){ 
     super(xmlFile); 
    } 

    public String getAuthor(){return author;} 
    public String getEditor(){return editor;} 
    public String getName(){return name;} 

    public boolean isHistorical(){return historical;} 
    public void setHistorical(boolean b){historical = b;} 

    public void setAuthor(String a){author = a;} 
    public void setEditor(String e){editor = e;} 
    public void setName(String n){name = n;} 

    public boolean isBook(){return true;} 
    public boolean isFood(){return false;} 

    public boolean needRefrigeration(){return false;} 

    private ReadFromXMLFile(String xmlFile){ 
     // Loads the object from an XML file 
// The implementation of this method is not given 
    } 
} 

잘못된 OOP 프로그래밍을 감지하지 못했습니다. 이 코드에서 무엇이 잘못되었으며 어떻게 변경할 수 있습니까?

감사합니다. 문제가있는 곳입니다

+0

내가 너무 광범위하게 그것을 닫아야 할 많은 잘못이 있습니다. 5 분 동안 문제에 대해 직접 이야기 할 수있었습니다. – Bohemian

+0

당신이 알아야 할 문제 중 하나는 음식과 소설 모두에 공통된 추상 클래스를 사용한다는 것입니다. 어떤 종류의 합리적인 종류의 시스템에서도 완전히 무관합니다. 결국, 당신은 정말로 음식의 저자 또는 편집자를 얻고 싶습니까? 정적 벡터는 또한 약간의 문제입니다. –

+0

@ 보헤미안 - 그렇지 않은 경우 좋은 인터뷰 질문이 아닙니다. –

답변

1
public class Novel implements IStorage extends Storage 

.....

+1

질문에 대한 생각은 코드의 구문 오류를 찾아내는 것이라고 생각하지 않습니다. OP는 이것을 OOP 원칙을 존중하며 Java 구문 규칙을 따르는 것이 아니라고 설명했습니다. –

+0

추상 클래스의 정적 벡터에 문제가 없습니까? – user3242743

1

는 심지어 컴파일되지 않습니다이 코드처럼 보인다.

Novel은 Storage를 확장하고 추상화가 아니기 때문에 ReadFromXMLFile을 구현해야하지만 개인용 메서드로 구현하므로 Storage 생성자는이를 호출 할 수 없습니다. 그 옆에

Storage의 생성자는 IStoragethis을 캐스팅하기 때문에 스토리지의 하위 클래스, IStorage을 구현하는 것으로 가정합니다.

objects.addElement((IStorage)this); 

따라서, StorageIStorage를 구현해야합니다.

+0

그것이 개인용으로 구현되었거나 그렇지 않은 경우 어떤 차이가 있습니까? 문제는 서브 클래스보다 먼저 수퍼 클래스가 작성되므로 public으로 구현 된 경우에도 문제가됩니다. – user3242743