Zum Inhalt springen

Markierungsschnittstelle

aus Wikipedia, der freien Enzyklopädie

Eine Markierungsschnittstelle (englisch Marker Interface oder Tag Interface<ref name="ppr">{{#if:|{{#iferror: {{#iferror:{{#invoke:Vorlage:FormatDate|Execute}}|}}| |}}}}{{#if:|{{{autor}}}: }}{{#if:|{{#if:Marker Interface|[{{#invoke:Vorlage:Internetquelle|archivURL|1={{#invoke:URLutil|getNormalized|1={{{archiv-url}}}}}}} {{#invoke:Vorlage:Internetquelle|TitelFormat|titel=Marker Interface}}]{{#if:| ({{{format}}})}}{{#if:| {{{titelerg}}}{{#invoke:Vorlage:Internetquelle|Endpunkt|titel={{{titelerg}}}}}}}}}|{{#if:http://c2.com/cgi-bin/wiki?MarkerInterface%7C{{#if:{{#invoke:TemplUtl%7Cfaculty%7C}}%7C{{#invoke:Vorlage:Internetquelle%7CTitelFormat%7Ctitel={{#invoke:WLink%7CgetEscapedTitle%7C1=Marker Interface}}}}|[{{#invoke:URLutil|getNormalized|1=http://c2.com/cgi-bin/wiki?MarkerInterface}} {{#invoke:Vorlage:Internetquelle|TitelFormat|titel={{#invoke:WLink|getEscapedTitle|1=Marker Interface}}}}]}}{{#if:| ({{{format}}}{{#if:Portland Pattern RepositoryWard Cunningham2002-07-09{{#if: 2009-02-19 | {{#if:{{#invoke:TemplUtl|faculty|}}||1}}}}

          | )
          | {{#if:{{#ifeq:en|de||{{#if:en|1}}}}| ; 
              | )}}}}}}{{#if:| {{{titelerg}}}{{#invoke:Vorlage:Internetquelle|Endpunkt|titel={{{titelerg}}}}}}}}}}}{{#if:http://c2.com/cgi-bin/wiki?MarkerInterface%7C{{#if:{{#invoke:URLutil%7CisResourceURL%7C1=http://c2.com/cgi-bin/wiki?MarkerInterface}}%7C%7C}}}}{{#if:Marker Interface|{{#if:{{#invoke:WLink|isValidLinktext|1=Marker Interface|lines=0}}||}}}}{{#if: Portland Pattern Repository| In: {{#invoke:Vorlage:Internetquelle|TitelFormat|titel=Portland Pattern Repository}}}}{{#if: Ward Cunningham| Ward Cunningham{{#if: 2002-07-09|,|{{#if: 2009-02-19 | {{#if:{{#invoke:TemplUtl|faculty|}}|;|,}}}}}}}}{{#if: 2002-07-09| {{#if:{{#invoke:DateTime|format|2002-07-09|noerror=1}}
            |{{#invoke:DateTime|format|2002-07-09|T._Monat JJJJ}}
            |{{#invoke:TemplUtl|failure|1=Fehler bei Vorlage:Internetquelle, datum=2002-07-09|class=Zitationswartung}} }}{{#if: |,|{{#if: 2009-02-19 | {{#if:{{#invoke:TemplUtl|faculty|}}|;|,}}}}}}}}{{#if: | S. {{{seiten}}}{{#if: |,|{{#if: 2009-02-19 | {{#if:{{#invoke:TemplUtl|faculty|}}|;|,}}}}}}}}{{#if: {{#invoke:TemplUtl|faculty|}}| {{#if:2002-07-09Ward Cunningham|{{#if:|archiviert|ehemals}}|{{#if:|Archiviert|Ehemals}}}} {{#if:|vom|im}} Vorlage:Referrer{{#if:{{#invoke:TemplUtl|faculty|}}| (nicht mehr online verfügbar)}}{{#if: | am {{#iferror: {{#iferror:{{#invoke:Vorlage:FormatDate|Execute}}|}}|{{{archiv-datum}}}{{#if:1581783||(?)}}}}}}{{#if: 2009-02-19|;}}}}{{#if: 2009-02-19| {{#if:2002-07-09Ward Cunningham{{#invoke:TemplUtl|faculty|}}|abgerufen|Abgerufen}} {{#switch: {{#invoke:Str|len| {{#invoke:DateTime|format| 2009-02-19 |ISO|noerror=1}} }}
       |4=im Jahr
       |7=im
       |10=am
       |#default={{#invoke:TemplUtl|failure|1=Fehler bei Vorlage:Internetquelle, abruf=2009-02-19|class=Zitationswartung}} }} {{#invoke:DateTime|format|2009-02-19|T._Monat JJJJ}}
    | {{#invoke:TemplUtl|failure|1=Vorlage:Internetquelle | abruf=2026-MM-TT ist Pflichtparameter}} }}{{#if:{{#ifeq:en|de||{{#if:en|1}}}}|{{#if:Portland Pattern RepositoryWard Cunningham2002-07-09{{#if: 2009-02-19 | {{#if:{{#invoke:TemplUtl|faculty|}}||1}}}}
       |  (
       | {{#if: | |  (}}
       }}{{#ifeq:{{#if:en|en|de}}|de||
          {{#invoke:Multilingual|format|en|slang=!|split=[%s,]+|shift=m|separator=, }}}}{{#if: |{{#ifeq:{{#if:en|en|de}}|de||, }}{{{kommentar}}}}})}}{{#if: 2002-07-09{{#if: 2009-02-19 | {{#if:{{#invoke:TemplUtl|faculty|}}||1}} }}en|{{#if: |: {{
 #if: 
 | {{
     #ifeq: {{#if:{{#if: {{#invoke:templutl|faculty|}}|de-ch|de}}|{{#if: {{#invoke:templutl|faculty|}}|de-ch|de}}|de}} | de
     | Vorlage:Str trim
     | {{#invoke:Vorlage:lang|flat}}
     }}
 | {{#ifeq: {{#if:{{#if: {{#invoke:templutl|faculty|}}|de-ch|de}}|{{#if: {{#invoke:templutl|faculty|}}|de-ch|de}}|de}} | de
     | „Vorlage:Str trim“
     | {{#invoke:Text|quote
         |1={{#if: 
              | {{#invoke:Vorlage:lang|flat}}
              | {{#invoke:Vorlage:lang|flat}} }}
         |2={{#if: {{#invoke:TemplUtl|faculty|}}|de-CH|de}}
         |3=1}} }}

}}{{#if:

   |  (<templatestyles src="Person/styles.css" />{{#if:  | :  }}{{#if:  | , deutsch: „“ }})
   | {{#if: 
       |  ({{#if:  | , deutsch: „“ }})
       | {{#if:  |  (deutsch: „“) }}
 }}

}}{{#if: {{{zitat}}}

   | {{#if: 
       | {{#if: {{{zitat}}}
           | Vorlage:": Text= und 1= gleichzeitig, bzw. Pipe zu viel }} }}
   | Vorlage:": Text= fehlt }}{{#if:  | {{#if: {{#invoke:Text|unstrip|{{{ref}}}}}
             | Vorlage:": Ungültiger Wert: ref=
             | {{{ref}}} }}

}}|.{{#if:{{#invoke:TemplUtl|faculty|}}|{{#if:||{{#ifeq: | JaKeinHinweis |{{#switch:

   |0|=Vorlage:Toter Link/Core{{#if: http://c2.com/cgi-bin/wiki?MarkerInterface
       | {{#if:  | [1] }} (Seite {{#switch:|no|0|=|dauerhaft }}nicht mehr abrufbar{{#if:  | , festgestellt im {{#invoke:DateTime|format||F Y}} }}. Suche im Internet Archive ){{#if: 
           | {{#if: deadurlausgeblendet | | Vorlage:Toter Link/archivebot }}
         }}
       |   (Seite {{#switch:|no|0|=|#default=dauerhaft }}nicht mehr abrufbar{{#if:  | , festgestellt im {{#invoke:DateTime|format||F Y}} }}.)
     }}{{#switch: 
         |no|0|=
         |#default={{#if:  ||  }}
    }}{{#invoke:TemplatePar|check
         |opt      = inline= url= text= datum= date= archivebot= bot= botlauf= fix-attempted= checked=
         |cat      = Wikipedia:Vorlagenfehler/Vorlage:Toter Link
         |errNS    = 0
         |template = Vorlage:Toter Link
         |format   = 
         |preview  = 1
    }}{{#if: http://c2.com/cgi-bin/wiki?MarkerInterface
      | {{#if:{{#invoke:URLutil|isWebURL|http://c2.com/cgi-bin/wiki?MarkerInterface}}
          || {{#if:  ||  }} 
        }}
      | {{#if: 
           | {{#if:  ||  }}
           | {{#if:  ||  }}
        }}
    }}{{#if: 
       | {{#if:{{#invoke:DateTime|format||F Y|noerror=1}}
             || {{#if:  ||  }} 
         }}
    }}{{#switch: deadurl
         |checked|deadurl|= 
         |#default=  {{#if:  ||  }}
    }}|#default= https://wiki-de.moshellshocker.dns64.de/index.php?title=Wikipedia:Defekte_Weblinks&dwl=http://c2.com/cgi-bin/wiki?MarkerInterface Die nachstehende Seite ist {{#switch:|no|0|=|dauerhaft }}nicht mehr abrufbar]{{#if:  | , festgestellt im {{#invoke:DateTime|format||F Y}} }}. (Suche im Internet Archive. )  {{#if: 
            | {{#if: deadurlausgeblendet | | Vorlage:Toter Link/archivebot }}
         }}Vorlage:Toter Link/Core{{#switch: 
          |no|0|=
          |#default= {{#if:  ||  }}
        }}{{#invoke:TemplatePar|check
         |all      = inline= url=
         |opt      = datum= date= archivebot= bot= botlauf= fix-attempted= checked=
         |cat      = Wikipedia:Vorlagenfehler/Vorlage:Toter Link
         |errNS    = 0
         |template = Vorlage:Toter Link
         |format   = 
         |preview  = 1
       }}{{#if: http://c2.com/cgi-bin/wiki?MarkerInterface
       | {{#if:{{#invoke:URLutil|isWebURL|http://c2.com/cgi-bin/wiki?MarkerInterface}}
          || {{#if:  ||  }} 
        }}
    }}{{#if: 
         | {{#if:{{#invoke:DateTime|format||F Y|noerror=1}}
             || {{#if:  ||  }} 
           }}
    }}{{#switch: deadurl
         |checked|deadurl|= 
         |#default=  {{#if:  ||  }}
    }}[http://c2.com/cgi-bin/wiki?MarkerInterface }}|{{#switch: 
   |0|=Vorlage:Toter Link/Core{{#if: http://c2.com/cgi-bin/wiki?MarkerInterface
       | {{#if:  | [2] }} (Seite {{#switch:|no|0|=|dauerhaft }}nicht mehr abrufbar{{#if:  | , festgestellt im {{#invoke:DateTime|format||F Y}} }}. Suche im Internet Archive ){{#if: 
           | {{#if:  | | Vorlage:Toter Link/archivebot }}
         }}
       |   (Seite {{#switch:|no|0|=|#default=dauerhaft }}nicht mehr abrufbar{{#if:  | , festgestellt im {{#invoke:DateTime|format||F Y}} }}.)
     }}{{#switch: 
         |no|0|=
         |#default={{#if:  ||  }}
    }}{{#invoke:TemplatePar|check
         |opt      = inline= url= text= datum= date= archivebot= bot= botlauf= fix-attempted= checked=
         |cat      = Wikipedia:Vorlagenfehler/Vorlage:Toter Link
         |errNS    = 0
         |template = Vorlage:Toter Link
         |format   = 
         |preview  = 1
    }}{{#if: http://c2.com/cgi-bin/wiki?MarkerInterface
      | {{#if:{{#invoke:URLutil|isWebURL|http://c2.com/cgi-bin/wiki?MarkerInterface}}
          || {{#if:  ||  }} 
        }}
      | {{#if: 
           | {{#if:  ||  }}
           | {{#if:  ||  }}
        }}
    }}{{#if: 
       | {{#if:{{#invoke:DateTime|format||F Y|noerror=1}}
             || {{#if:  ||  }} 
         }}
    }}{{#switch: 
         |checked|deadurl|= 
         |#default=  {{#if:  ||  }}
    }}|#default= https://wiki-de.moshellshocker.dns64.de/index.php?title=Wikipedia:Defekte_Weblinks&dwl=http://c2.com/cgi-bin/wiki?MarkerInterface Die nachstehende Seite ist {{#switch:|no|0|=|dauerhaft }}nicht mehr abrufbar]{{#if:  | , festgestellt im {{#invoke:DateTime|format||F Y}} }}. (Suche im Internet Archive. )  {{#if: 
            | {{#if:  | | Vorlage:Toter Link/archivebot }}
         }}Vorlage:Toter Link/Core{{#switch: 
          |no|0|=
          |#default= {{#if:  ||  }}
        }}{{#invoke:TemplatePar|check
         |all      = inline= url=
         |opt      = datum= date= archivebot= bot= botlauf= fix-attempted= checked=
         |cat      = Wikipedia:Vorlagenfehler/Vorlage:Toter Link
         |errNS    = 0
         |template = Vorlage:Toter Link
         |format   = 
         |preview  = 1
       }}{{#if: http://c2.com/cgi-bin/wiki?MarkerInterface
       | {{#if:{{#invoke:URLutil|isWebURL|http://c2.com/cgi-bin/wiki?MarkerInterface}}
          || {{#if:  ||  }} 
        }}
    }}{{#if: 
         | {{#if:{{#invoke:DateTime|format||F Y|noerror=1}}
             || {{#if:  ||  }} 
           }}
    }}{{#switch: 
         |checked|deadurl|= 
         |#default=  {{#if:  ||  }}
    }}[http://c2.com/cgi-bin/wiki?MarkerInterface }} }}}}}}}}}}{{#if:|
        {{#invoke:Vorlage:Internetquelle|archivBot|stamp={{{archiv-bot}}}|text={{#if:|Vorlage:Webarchiv/archiv-bot}}

}}}}{{#invoke:TemplatePar|check |all= url= titel= |opt= autor= hrsg= format= sprache= titelerg= werk= seiten= datum= abruf= zugriff= abruf-verborgen= archiv-url= archiv-datum= archiv-bot= kommentar= zitat= AT= CH= offline= |cat= {{#ifeq: 0 | 0 | Wikipedia:Vorlagenfehler/Vorlage:Internetquelle}} |template= Vorlage:Internetquelle |format=0 |preview=1 }}</ref>) ist ein Entwurfsmuster, das einem Programm zur Laufzeit Informationen über ein Objekt liefert. Dies bietet die Möglichkeit einer Klasse Metadaten hinzuzufügen, obwohl die Programmiersprache dies nicht explizit unterstützt.

In diesem Muster implementiert eine Klasse eine Schnittstelle, welche meistens keine Funktionalität in der Form von Methodendeklarationen definiert. Andere (klassenfremde) Methoden testen bei einer Interaktion mit der Klasse, ob die Markierungsschnittstelle für die (instanzierte) Klasse existiert. Die Anwesenheit einer solchen Schnittstelle definiert ein bestimmtes Verhalten für die implementierende Klasse. Hybridschnittstellen, welche sowohl als Markierung fungieren als auch Methoden deklarieren, sind grundsätzlich möglich, aber können bei falscher Verwendung verwirrend sein.

Ein Beispiel für die Verwendung von Markierungsinterfaces in der Programmiersprache Java ist die Serializable-Schnittstelle, welche signalisiert, dass die persistenten Attribute der implementierenden Klasse in einen ObjectOutputStream geschrieben werden können. Die Methode ObjectOutputStream.writeObject() enthält einige instanceof-Tests, welche prüfen, ob das übergebene Objekt die Schnittstelle Serializable enthält. Falls dies nicht der Fall ist, wird eine NotSerializableException geworfen.

Kritik

Vorlage:Hinweisbaustein

„Schweres Erbe“
In der Objektorientierten Programmierung wird die Implementierung auch der schmalsten Schnittstelle an erbende Klassen weitergegeben. Dies bedeutet, dass eine Klasse, die von einer serialisierbaren Klasse erbt, nicht als „nicht serialisierbar“ definiert werden kann. Deshalb wird teils auf die Laufzeit ausgewichen, um logische Fehler überhaupt offenzulegen: In der Java-Dokumentation wird so beispielsweise empfohlen, explizit eine NotSerializableException zu werfen.
„Smell“
Ein anderes Problem ist die Tatsache, dass zum Erkennen einer Markierungsschnittstelle der Operator instanceof („Instanz von“) verwendet werden muss, was als Smell („schlechter Geruch“, d. h. fragwürdige Programmiertechnik) betrachtet werden kann und somit auch das Muster als Smell charakterisiert.<ref name="ppr" />
Verschleierung
Die Programm-Logik wird aus dem regulären Quelltext in Frameworks verlagert, die auf der Analyse von Metadaten aufbauen. Das macht sie für Menschen schwer nachvollziehbar. Markierungsschnittstellen selbst zu definieren, ist für alltägliche Programmieraufgaben meist völlig überzogen. Da jedoch das Markieren („Tagging“) als Technik vertraut erscheint, neigen OO-Anfänger leicht zu diesem Mittel (um die Aufgabe letztlich nur aufzuschieben). Durch den Einsatz von Markierungsschnittstellen entzieht man dem Compiler Möglichkeiten zur statischen Prüfung.

Literatur

  • {{#invoke:Vorlage:Literatur|f}}

Einzelnachweise

<references />