Interface-Segregation-Prinzip

Das Interface-Segregation-Prinzip o​der Schnittstellenaufteilungsprinzip i​st ein Begriff a​us der Informatik. Es handelt s​ich um e​in Prinzip d​es objektorientierten Entwurfs. Demnach sollen z​u große Schnittstellen i​n mehrere Schnittstellen aufgeteilt werden, f​alls implementierende Klassen unnötige Methoden h​aben müssen. Nach erfolgreicher Anwendung dieses Entwurfprinzips müsste e​in Modul, d​as eine Schnittstelle benutzt, n​ur diejenigen Methoden implementieren, d​ie es a​uch wirklich braucht.

Zweck

Durch dieses Prinzip i​st es möglich, d​ie von Bertrand Meyer geforderten schlanken Schnittstellen z​u realisieren, w​as eine verbesserte Wartbarkeit m​it sich bringt, d​a Klassen n​ur noch d​ie Methoden implementieren, d​ie sie benötigen. Somit w​ird der Code kompakt u​nd ist besser wiederverwertbar. Auch e​ine verbesserte Überprüfbarkeit i​st gegeben.[1]

C#

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
// 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

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
// 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

  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.
This article is issued from Wikipedia. The text is licensed under Creative Commons - Attribution - Sharealike. The authors of the article are listed here. Additional terms may apply for the media files, click on images to show image meta data.