Interface-Segregation-Prinzip

Van Wikipedia, de gratis encyclopedie

Das Interface-Segregation-Prinzip oder Schnittstellenaufteilungsprinzip ist ein Begriff aus der Informatik. Es handelt sich um ein Prinzip des objektorientierten Entwurfs. Demnach sollen zu große Schnittstellen in mehrere Schnittstellen aufgeteilt werden, falls implementierende Klassen unnötige Methoden haben müssen. Nach erfolgreicher Anwendung dieses Entwurfprinzips müsste ein Modul, das eine Schnittstelle benutzt, nur diejenigen Methoden implementieren, die es auch wirklich braucht.

Zweck[Bearbeiten | Quelltext bearbeiten]

Durch dieses Prinzip ist es möglich, die von Bertrand Meyer geforderten schlanken Schnittstellen zu realisieren, was eine verbesserte Wartbarkeit mit sich bringt, da Klassen nur noch die Methoden implementieren, die sie benötigen. Somit wird der Code kompakt und ist besser wiederverwertbar. Auch eine verbesserte Überprüfbarkeit ist gegeben.[1]

Beispiele[Bearbeiten | Quelltext bearbeiten]

C#[Bearbeiten | Quelltext bearbeiten]

public interface IPerson {     int Id { get; }     string FirstName { get; }     string LastName { get; }     // Andere Eigenschaften... }  public interface ILoad {     void Load(string path); }  public interface ISave {     void Save(string path); }  public interface IToXmlString() {     string ToXmlString(); }  public class Person : IPerson, ILoad, ISave, IToXmlString {     public int Id { get; set; }     public string FirstName { get; set; }     public string LastName { get; set; }     // Andere Eigenschaften...          public void Load(string path)     {         // Lesen der Daten aus der Datei...     }          public void Save(string path)     {         // Speichern der Daten in die Datei...     }          public string ToXmlString()     {         // Zurückliefern der Daten als XML-Zeichenkette...         string xmlString = "...";         return xmlString;     } } 
Anwendung[Bearbeiten | Quelltext bearbeiten]
// Irgendwo in eine andere Klassen/Code-Datei... IPerson person = GetPersonById(123);  // Die Daten der Person (Eigenschaften) sollen aus einer Datei geladen werden. (person as ILoad).Load(@"C:\dir1\file1.ext");  // Später soll die Daten der Person in einer Datei gespeichert werden. (person as ISave).Save(@"C:\dir2\file2.ext");  // Etwas weiter im Code soll person als XML string bearbeitet werden. string xml = (person as IToXmlString).ToXmlString(); 

Java[Bearbeiten | Quelltext bearbeiten]

interface IPerson {     int getId();     void setId(int id);          String getFirstName();     void setFirstName(String firstName);          String getLastName();     void setLastName(String lastName);     // Andere Eigenschaften... }  interface ILoad {     void load(String path); }  interface ISave {     void save(String path); }  interface IToXmlString {     String toXmlString(); }  class Person implements IPerson, ILoad, ISave, IToXmlString {     private int id;     private String firstName;     private String lastName;     // Andere Eigenschafts-Variablen...          @Override     public int getId() { return id; }     @Override     public void setId(int id) { this.id = id; }          @Override     public String getFirstName() { return firstName; }     @Override     public void setFirstName(String firstName) { this.firstName = firstName; }          @Override     public String getLastName() { return lastName; }     @Override     public void setLastName(String lastName) { this.lastName = lastName; }     // Andere Eigenschaften...          @Override     public void load(String path) {         // Lesen der Daten aus der Datei...     }          @Override     public void save(String path) {         // Speichern der Daten in die Datei...     }          @Override     public String toXmlString() {         // Zurückliefern der Daten als XML-Zeichenkette...         String xmlString = "...";         return xmlString;     } } 
Anwendung[Bearbeiten | Quelltext bearbeiten]
// Irgendwo in eine andere Klassen/Code-Datei... IPerson person = getPersonById(123);  // Die Daten der Person (Eigenschaften) sollen aus einer Datei geladen werden. ((ILoad) person).load("C:\\dir1\\file1.ext");  // Später soll die Daten der Person in einer Datei gespeichert werden. ((ISave) person).save("C:\\dir2\\file2.ext");  // Etwas weiter im Code soll person als XML string bearbeitet werden. String xml = ((IToXmlString)person).toXmlString(); 

Einzelnachweise[Bearbeiten | Quelltext bearbeiten]

  1. Wolfgang Kowarschick: Programmierprinzipien: Interface-Segregation-Prinzip, Interface segregation principle. GlossarWiki der Hochschule Augsburg (HSA), 23. Februar 2012, archiviert vom Original am 23. Februar 2012; abgerufen am 26. Juni 2012.