2015-02-14 5 views
0

Я пытаюсь понять, как придумать хороший дизайн, используя наследование.Наследование: Что должен содержать базовый класс?

Я не совсем уверен в том, что следует хранить в базовом классе и что мне нужно перевести в производные классы.

1.Should the base class have methods that are independently used in derived 
classes. 
2.Can we have methods which the derived classes make use of inside of their 
own methods. 

The second case would have high coupling and would make the code difficult to test. 

Например, следующим образом: Правильно?

class BaseParser { 
    parseFile(columns, headings, ..); 
    storeFailedRecords(); 
    /* other utility functions */ 
} 

class ParseFile1 extends BaseParser { 
    parseThisFile() { 
     ... 
     parseFile(...); /* calls the base class methods with agruments specific to this file */ 
     ... 
     /* does further processing */ 
} 

class ParseFile2 extends BaseParser { 
    parseThisFile() { 
     ... 
     parseFile(...); /* again, calls the Base class method */ 
     ... 
     /* Does its own processing */ 
} 

Этот подход хорошо? Единственная проблема, которую я вижу здесь, это то, что derived class' parseThisFile(); method can't be tested without a call going to base class' parseFile();

Надеюсь, вы, ребята, поняли мою точку зрения.

ответ

2

Нет ничего плохого в вашем фрагменте кода. Если все классы (или даже некоторые из классов), которые расширяют базовый класс, разделяют некоторую логику, имеет смысл, чтобы эта логика была реализована в базовом классе.

В этом случае подклассы должны вызывать методы базового класса.

Смежные вопросы