Derivante da una classe solo per fornire un costruttore speciale

1

Nel nostro codebase, ho incontrato il seguente costrutto: C'è una classe base B, e poi c'è una classe D che deriva da B, ma non sovrascrive o aggiunge alcun membro. Di fatto, D è completamente vuoto - eccetto per un costruttore che inizializza alcune proprietà (ereditate) in un modo speciale.

Considera questo esempio di C #:

public class Angle
{
  public Angle(float degrees)
  {
    Degrees = degrees;
  }

  public float Degrees { get; set; }
}

public class RightAngle : Angle
{
  public RightAngle() : base(90)
  {
  }
}

Per me, questa sembra una grave violazione dei principi OOP, ma non riesco a individuare il problema. È un uso corretto dell'eredità o una cattiva idea? Devo sostituire la classe derivata con -per esempio- una fabbrica statica?

    
posta Sebastian Negraszus 09.10.2014 - 14:12
fonte

2 risposte

9

Anche se leggermente spiacevole, questo genere di cose non è la cosa peggiore del mondo. Non viola esplicitamente alcun principio OO.

La mia lamentela principale è che con solo il codice sopra, non tutti gli angoli retti sono RightAngle s, anche se l'uso della semantica del valore lo risolverebbe.

Personalmente, vorrei lavorare per rendere la classe immutabile e quindi semplicemente avere un'istanza readonly statica di Angle.RightAngle o simile.

    
risposta data 09.10.2014 - 14:48
fonte
1

Credo che l'approccio di ereditarietà preso qui nella tua domanda sia solo per garantire che la creazione dell'oggetto avvenga nel suo insieme impostando opportunamente gli attributi obbligatori della classe, se la creazione dell'oggetto corretta è l'unico scopo quindi suggerirei l'oggetto < a href="https://en.wikipedia.org/wiki/Builder_pattern"> Modelli di builder anziché utilizzare l'approccio dell'ereditarietà.

    
risposta data 09.10.2014 - 14:55
fonte