<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>https://wiki-de.moshellshocker.dns64.de/index.php?action=history&amp;feed=atom&amp;title=Interface-Segregation-Prinzip</id>
	<title>Interface-Segregation-Prinzip - Versionsgeschichte</title>
	<link rel="self" type="application/atom+xml" href="https://wiki-de.moshellshocker.dns64.de/index.php?action=history&amp;feed=atom&amp;title=Interface-Segregation-Prinzip"/>
	<link rel="alternate" type="text/html" href="https://wiki-de.moshellshocker.dns64.de/index.php?title=Interface-Segregation-Prinzip&amp;action=history"/>
	<updated>2026-05-18T10:34:07Z</updated>
	<subtitle>Versionsgeschichte dieser Seite in Wikipedia (Deutsch) – Lokale Kopie</subtitle>
	<generator>MediaWiki 1.43.8</generator>
	<entry>
		<id>https://wiki-de.moshellshocker.dns64.de/index.php?title=Interface-Segregation-Prinzip&amp;diff=2673685&amp;oldid=prev</id>
		<title>imported&gt;OnyxSard: /* Beispiele */ Schlechte Beispiele durch sinnvolleres Beispiel ersetzt. Siehe Diskussion. Das neue Beispiel zeigt die Vorzüge vom ISP: Keine unnötigen Dummy- oder Not-Implemented-implementierungen, wenn eine Klasse eine bestimmte Methode nicht braucht &amp; IDE-/Compiler-Fehler bei falscher Verwendung</title>
		<link rel="alternate" type="text/html" href="https://wiki-de.moshellshocker.dns64.de/index.php?title=Interface-Segregation-Prinzip&amp;diff=2673685&amp;oldid=prev"/>
		<updated>2026-01-02T11:48:06Z</updated>

		<summary type="html">&lt;p&gt;&lt;span class=&quot;autocomment&quot;&gt;Beispiele: &lt;/span&gt; Schlechte Beispiele durch sinnvolleres Beispiel ersetzt. Siehe Diskussion. Das neue Beispiel zeigt die Vorzüge vom ISP: Keine unnötigen Dummy- oder Not-Implemented-implementierungen, wenn eine Klasse eine bestimmte Methode nicht braucht &amp;amp; IDE-/Compiler-Fehler bei falscher Verwendung&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Neue Seite&lt;/b&gt;&lt;/p&gt;&lt;div&gt;Das &amp;#039;&amp;#039;&amp;#039;Interface-Segregation-Prinzip&amp;#039;&amp;#039;&amp;#039; oder &amp;#039;&amp;#039;&amp;#039;Schnittstellenaufteilungsprinzip&amp;#039;&amp;#039;&amp;#039; ist ein Begriff aus der [[Informatik]]. Es handelt sich um ein [[Prinzipien objektorientierten Designs|Prinzip des objektorientierten Entwurfs]]. Demnach sollen zu große [[Schnittstelle (Programmierung)|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.&lt;br /&gt;
&lt;br /&gt;
== Zweck ==&lt;br /&gt;
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.&amp;lt;ref&amp;gt;{{Internetquelle&lt;br /&gt;
 | autor=Wolfgang Kowarschick&lt;br /&gt;
 | hrsg=GlossarWiki der Hochschule Augsburg (HSA)&lt;br /&gt;
 | url=https://glossar.hs-augsburg.de/Hauptseite&lt;br /&gt;
 | sprache=de&lt;br /&gt;
 | titel=Programmierprinzipien: Interface-Segregation-Prinzip, Interface segregation principle&lt;br /&gt;
 | datum=2012-02-23&lt;br /&gt;
 | archiv-url=https://web.archive.org/web/20120627051939/http://glossar.hs-augsburg.de/Hauptseite#Interface-Segregation-Prinzip.5B8.5D.2C_Interface_segregation_principle&lt;br /&gt;
 | archiv-datum=2012-06-27&lt;br /&gt;
 | zugriff=2012-06-26&lt;br /&gt;
 | offline=&lt;br /&gt;
 | archiv-bot=2025-07-21 06:41:41 InternetArchiveBot&lt;br /&gt;
 }}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Beispiele ===&lt;br /&gt;
&lt;br /&gt;
==== Java ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;interface Workable {&lt;br /&gt;
    void work();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
interface Eatable {&lt;br /&gt;
    void eat();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
class Human implements Workable, Eatable {&lt;br /&gt;
    @Override&lt;br /&gt;
    public void work() {&lt;br /&gt;
        System.out.println(&amp;quot;Mensch arbeitet&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    @Override&lt;br /&gt;
    public void eat() {&lt;br /&gt;
        System.out.println(&amp;quot;Mensch isst&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
class Robot implements Workable {&lt;br /&gt;
    /**&lt;br /&gt;
     * Robot implementiert nur Workable, nicht Eatable.&lt;br /&gt;
     * Dies erfüllt das ISP, da Robot nicht gezwungen wird, eine eat()-Methode&lt;br /&gt;
     * zu implementieren, die er nicht benötigt. Dadurch wird vermieden, dass&lt;br /&gt;
     * unnötige Methoden mit Dummy-Implementierungen oder Exceptions gefüllt werden müssen.&lt;br /&gt;
     */&lt;br /&gt;
    @Override&lt;br /&gt;
    public void work() {&lt;br /&gt;
        System.out.println(&amp;quot;Roboter arbeitet&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Anwendung =====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;Workable[] workers = { new Human(), new Robot()};&lt;br /&gt;
&lt;br /&gt;
// Alle Arbeiter können arbeiten&lt;br /&gt;
for (Workable worker: workers) {&lt;br /&gt;
    worker.work(); // Kompiliert erfolgreich&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Mittagspause: Falsche Implementierung wird durch IDE / Compiler erkannt&lt;br /&gt;
for (Workable worker: workers) {&lt;br /&gt;
    // worker.eat();  // COMPILER-FEHLER: eat() existiert nicht in Workable&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Mittagspause, korrekte Lösung: eat() nur auf Eatable-Objekten aufrufen&lt;br /&gt;
for (Workable worker: workers) {&lt;br /&gt;
    if (worker instanceof Eatable) {&lt;br /&gt;
        ((Eatable) worker).eat();&lt;br /&gt;
    }&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Typescript ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;typescript&amp;quot;&amp;gt;interface Workable {&lt;br /&gt;
    work(): void;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
interface Eatable {&lt;br /&gt;
    eat(): void;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
class Human implements Workable, Eatable {&lt;br /&gt;
    work(): void {&lt;br /&gt;
        console.log(&amp;quot;Mensch arbeitet&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    eat(): void {&lt;br /&gt;
        console.log(&amp;quot;Mensch isst&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
class Robot implements Workable {&lt;br /&gt;
    /**&lt;br /&gt;
     * Robot implementiert nur Workable, nicht Eatable.&lt;br /&gt;
     * Dies erfüllt das ISP, da Robot nicht gezwungen wird, eine eat()-Methode&lt;br /&gt;
     * zu implementieren, die er nicht benötigt. Dadurch wird vermieden, dass&lt;br /&gt;
     * unnötige Methoden mit Dummy-Implementierungen oder Exceptions gefüllt werden müssen.&lt;br /&gt;
     */&lt;br /&gt;
    work(): void {&lt;br /&gt;
        console.log(&amp;quot;Roboter arbeitet&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function isEatable(worker: Workable): worker is Eatable {&lt;br /&gt;
    return &amp;#039;eat&amp;#039; in worker;&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Anwendung =====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;typescript&amp;quot;&amp;gt;&lt;br /&gt;
const workers: Workable[] = [new Human(), new Robot()];&lt;br /&gt;
&lt;br /&gt;
// Alle Arbeiter können arbeiten&lt;br /&gt;
for (const worker of workers) {&lt;br /&gt;
    worker.work();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Mittagspause: Falsche Implementierung wird durch IDE / Compiler erkannt&lt;br /&gt;
for (const worker of workers) {&lt;br /&gt;
    // worker.eat();  // COMPILER-FEHLER: eat() existiert nicht in Workable&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Mittagspause, korrekte Lösung: eat() nur auf Eatable-Objekten aufrufen&lt;br /&gt;
for (const worker of workers) {&lt;br /&gt;
    if (isEatable(worker)) {&lt;br /&gt;
        worker.eat();&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Einzelnachweise ==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Navigationsleiste Prinzipien objektorientierten Designs}}&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Softwaretechnik]]&lt;br /&gt;
[[Kategorie:Softwarearchitektur]]&lt;br /&gt;
[[Kategorie:Objektorientierte Programmierung]]&lt;br /&gt;
[[Kategorie:Vorgehensmodell (Software)]]&lt;/div&gt;</summary>
		<author><name>imported&gt;OnyxSard</name></author>
	</entry>
</feed>