Technopedia Center
PMB University Brochure
Faculty of Engineering and Computer Science
S1 Informatics S1 Information Systems S1 Information Technology S1 Computer Engineering S1 Electrical Engineering S1 Civil Engineering

faculty of Economics and Business
S1 Management S1 Accountancy

Faculty of Letters and Educational Sciences
S1 English literature S1 English language education S1 Mathematics education S1 Sports Education
teknopedia

teknopedia

teknopedia

teknopedia

teknopedia
  • Registerasi
  • Brosur UTI
  • Kip Scholarship Information
  • Performance
  1. Weltenzyklopädie
  2. Dependency-Inversion-Prinzip – Wikipedia
Dependency-Inversion-Prinzip – Wikipedia
aus Wikipedia, der freien Enzyklopädie
Strukturierung von Modulen nach DIP

Das Dependency Inversion Principle (DIP, englisch für Abhängigkeits-Umkehr-Prinzip) ist ein Prinzip beim objektorientierten Entwurf von Software. Es beschäftigt sich mit der Abhängigkeit von Modulen.

Im Allgemeinen wird das DIP beschrieben durch:

Module höherer Ebenen sollten nicht von Modulen niedrigerer Ebenen abhängen.
Beide sollten von Abstraktionen abhängen.
Abstraktionen sollten nicht von Details abhängen.
Details sollten von Abstraktionen abhängen.

Problemstellung und Lösung

[Bearbeiten | Quelltext bearbeiten]

Objektorientierte Entwürfe werden in Module strukturiert, die unterschiedliche Verantwortlichkeiten umsetzen. Eine gängige Praxis ist das Anordnen der Module in Ebenen. Je niedriger die Ebene eines Moduls, desto spezieller sind die Vorgänge, die es definiert. In Modulen niedrigerer Ebenen werden Abläufe definiert, welche von allgemeineren Abläufen in höheren Ebenen benutzt werden.

Falls diese Anordnung falsch umgesetzt wird, also Module höherer Ebenen von Modulen niedrigerer Ebenen abhängen, entsteht ein Problem. Änderungen in Modulen niedrigerer Ebenen führen unweigerlich zu Änderungen in Modulen höherer Ebenen. Dies widerspricht aber einerseits dem eigentlichen Ansatz der Hierarchie, andererseits führt es zu zyklischen Abhängigkeiten. Dadurch kommt es zu einer erhöhten Kopplung der Module, welche Änderungen in Architektur und Design unnötig verkomplizieren.

Der Lösungsansatz ist die Invertierung der Abhängigkeit. Das Modul der höheren Ebene definiert die Schnittstelle, mit der es arbeitet. Module niedrigerer Ebene realisieren die Schnittstelle.

Beispiel

[Bearbeiten | Quelltext bearbeiten]

Wir betrachten ein einfaches Schalter-Lampe-Modell. Das Drücken des Schalters soll die Lampe an- oder ausschalten.

Eine einfache Implementierung in Java:

public class Lampe {
   private boolean leuchtet;

   public void anschalten() {
      leuchtet = true;
   }

   public void ausschalten() {
      leuchtet = false;
   }
}

public class Schalter {
   private Lampe lampe;
   private boolean gedrueckt;

   public Schalter(Lampe lampe) {
      this.lampe = lampe;
   }

   public void drueckeSchalter() {
      gedrueckt = !gedrueckt;
      if(gedrueckt) {
         lampe.anschalten();
      } else {
         lampe.ausschalten();
      }
   }
}

Schalter steuert den Ablauf des Verhaltens und benutzt dazu Lampe. Demnach sollte es einem Modul höherer Ebene angehören. Jedoch verletzt das beschriebene Modell das DIP, da Schalter abhängig von Lampe ist. Wird entschieden, dass die Methoden von Lampe umbenannt werden, muss auch Schalter geändert werden.

Das grundlegende Problem ist, dass Schalter direkt mit Lampe arbeitet, welches zu einem niedrigeren Modul gehört. Schalter sollte selbst definieren, wie das Objekt aussehen sollte, mit dem es arbeitet.

Die Lösung in Java:

public interface Geraet{
   public void anschalten();
   public void ausschalten();
}

public class Lampe implements Geraet{
   private boolean leuchtet = false;

   public void anschalten() {
      leuchtet = true;
   }

   public void ausschalten() {
      leuchtet = false;
   }
}

public class Schalter {
   private Geraet lampe;
   private boolean gedrueckt;

   public Schalter(Geraet lampe) {
      this.lampe= lampe;
   }

   public void drueckeSchalter() {
      gedrueckt = !gedrueckt;
      if(gedrueckt) {
         this.lampe.anschalten();
      } else {
         this.lampe.ausschalten();
      }
   }
}

Siehe auch

[Bearbeiten | Quelltext bearbeiten]
  • Service Provider Interface
  • Plug-in
  • Inversion of Control

Literatur

[Bearbeiten | Quelltext bearbeiten]
  • Robert C. Martin: The Dependency Inversion Principle. Mai 1996 (PDF (Memento vom 14. Juli 2011 im Internet Archive)). 
Prinzipien objektorientierten Designs
V
SOLID-Prinzipien

Single Responsibility • Open Closed • Liskovsches Substitutionsprinzip • Interface Segregation • Dependency Inversion

Weitere Prinzipien

Gesetz von Demeter • Design by Contract • Datenkapselung • Linguistic Modular Units • Self-Documentation • Uniform Access • Single Choice • Persistence Closure • Command-Query-Separation

Packaging-Prinzipien

Reuse Release Equivalence • Common Closure • Common Reuse • Acyclic Dependencies • Stable Dependencies • Stable Abstractions

Abgerufen von „https://de.teknopedia.teknokrat.ac.id/w/index.php?title=Dependency-Inversion-Prinzip&oldid=256423578“
Kategorie:
  • Objektorientierte Programmierung

  • indonesia
  • Polski
  • العربية
  • Deutsch
  • English
  • Español
  • Français
  • Italiano
  • مصرى
  • Nederlands
  • 日本語
  • Português
  • Sinugboanong Binisaya
  • Svenska
  • Українська
  • Tiếng Việt
  • Winaray
  • 中文
  • Русский
Sunting pranala
Pusat Layanan

UNIVERSITAS TEKNOKRAT INDONESIA | ASEAN's Best Private University
Jl. ZA. Pagar Alam No.9 -11, Labuhan Ratu, Kec. Kedaton, Kota Bandar Lampung, Lampung 35132
Phone: (0721) 702022
Email: pmb@teknokrat.ac.id