2017-11-14 1 views
-1

Ist es korrekt aus Begriffen von OOP, um gemeinsame Methode abgeleiteter Klassen in der Basisklasse, wo Basis nicht (!) Es verwenden. Wie im Beispiel:Putting der gemeinsamen Methode der abgeleiteten Klassen in der Basis, wo die Basis es nicht verwendet

class Base { 
    virtual void CalculateTotal() 
    { 
     //calculate without taxes (no need in base) 
    } 

    void CalculateTaxes() 
    { 
     //do something 
    } 
} 

class A : Base { 
    override void CalculateTotal() { 
     //... 
     CalculateTaxes(); 
     //... 
    } 
} 

class B : Base { 
    override void CalculateTotal() { 
     //... 
     CalculateTaxes(); 
     //... 
    } 
} 
+1

ändern Sie 'CalculateTaxes()' nur so, dass sie "protected" ist. Abgesehen davon gibt es hier kein Problem - die Klasse muss nicht ihre eigenen Methoden aufrufen. – zaitsman

+0

Ja, das ist in Ordnung, aber es sollte geschützt werden. –

Antwort

0

Ich denke nicht. Ich würde lieber die CalculateTaxes in einer Gebrauchsklasse von A und B verwendet. Es Steuern.Calculate()

oder so ähnlich.

+0

Das hängt davon ab, wie eifrig Sie folgen DDD – zaitsman

+0

Ja, wahr :) Ich tendiere normalerweise dazu, Klasse nur eine einzige Sorge zu haben. So scheint mir, dass Steuern eine ziemlich komplexe Klasse und eine ganze Reihe von privaten Methoden erfordern (denken Sie, dass nicht jeder Code zur Berechnung der Steuern in eine einzige gigantische Methode passt). Also würde ich vorschlagen, die Dinge in diesem Fall nicht zu verwechseln (wenn nicht für einen Übungscode) –

0

Wenn es keine Standardfunktionalität ist Gesamtwert für die Berechnung und jede Klasse, von den Base abgeleitet sollte es schaffen, besser zu machen, die Base Klasse und die CalculateTotal Methode abstrakt.

Verwandte Themen