Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Open/Closed für Einsteiger

Open/Closed für Einsteiger

Nach hinten für alles offen. Open/Closed für Einsteiger.In der Ausgabe 3/2011 hat die dotnetpro bereits über das Open/Closed Principle berichtet. Der Artikel war sehr technisch, das Beispiel sehr abstrakt und die Verwendung entsprechender Basisklassen des .NET Frameworks interessant, aber in Summe wenig transparent für den Einsteiger in dieses Thema.Typischerweise krankt es bei diesem Pattern am Grundverständnis. Obwohl der Schmerz, der durch Nichteinhaltung entsteht da ist, wird er diffus umschrieben und von den wenigsten genau identifiziert.Diese Session zeigt anhand eines für jeden nachvollziehbaren Beispiels das Open Closed Principle auf Basis des sog. Strategy Pattern und baut dabei pädagogisch sinnvoll auf folgende Lerneinheiten auf: Die übliche Herausforderung Die übliche Lösung (inkl. Schmerztabletten, denn DAS TUT WEH) Die Erkenntnis und das Refactoring (Step by Step... uh Baby.... <- Sorry, ich konnte nicht widerstehen) Die Lösung II (Erleuchtung garantiert!) Die Session macht Spaß und hinterläßt einen bleibenden Eindruck.

Avatar for Christian Jacob

Christian Jacob

June 25, 2013
Tweet

More Decks by Christian Jacob

Other Decks in Programming

Transcript

  1. Software entities (classes, modules, functions, etc.) should be open for

    extension, but closed for modification. Bertrand Meyer Object Oriented Software Construction 1988, Seite 23
  2. BEISPIEL public double Preis() { const double StammkundenRabatt = 0.90d;

    switch (kundenart) { case Kundenart.Einmalkunde: return menge * einzelpreis; case Kundenart.Stammkunde: return menge * einzelpreis * StammkundenRabatt; default: throw new ArgumentOutOfRangeException(); } } } KÄSE
  3. OCP MITTELS STRATEGY PATTERN • Einmalkunde, Stammkunde – Konkrete Strategien,

    die die Berechnungen auf Basis der Strategie-Schnittstelle implementieren • IPreisRechner – Strategie, die die Schnittstelle für alle unterstützten Berechnungen bereitstellt • Preisrechner – Kontext, der mit einer konkreten Strategie initialisiert wird und dazu eine Referenz über die Schnittstelle verwaltet
  4. BEISPIEL private IPreisRechner preisRechner; public double Preis() { return preisRechner.Preis(menge,

    einzelpreis); } public interface IPreisRechner { double Preis(int menge, double einzelpreis); } public class Einmalkunde : IPreisRechner { public double Preis(int menge, double einzelpreis) { return menge * einzelpreis; } } KONTEXT STRATEGIE KONKRETE IMPL.