Zugriffsfunktion
Eine Zugriffsfunktion, auch Zugriffsmethode, Akzessor oder im Programmiererjargon getter und setter genannt, ist in der objektorientierten Programmierung eine spezielle Methode, die eine einzelne Eigenschaft (Attribut) eines Objekts abfragt oder ändert. Zugriffsfunktionen sind Teil der öffentlichen Schnittstelle eines Objekts und verbergen Implementierungsdetails dieses Objekts. Dadurch kann die Implementierung eines Objekts geändert werden, ohne seine öffentliche Schnittstelle zu ändern.
Abfragemethoden (Getter)
Eine Zugriffsmethode, die eine Eigenschaft eines Objekts abfragt, heißt auch Abfragemethode oder Getter (von {{#invoke:Vorlage:lang|full|CODE=en|SCRIPTING=Latn|SERVICE=englisch}} – etwas holen). Die Eigenschaft kann entweder direkt aus einem Objektattribut entnommen, das dann normalerweise eine geringere Sichtbarkeit hat, oder im Moment des Aufrufs berechnet werden. Für den Aufrufer ist das nicht erkennbar, dadurch wird die Kapselung sichergestellt.
In einigen Programmiersprachen ist es üblich, die Namen aller Abfragemethoden mit get beginnen zu lassen. So könnte z. B. eine Methode, die den Namen einer Person abfragt, getName heißen. Alternativ können Methoden, welche Boolesche Werte abfragen, mit is (z. B. isMarried) oder has (z. B. hasChild) beginnen.
In anderen Programmiersprachen ist dies unüblich und die Methode hieße einfach name, da bereits der Funktionsaufruf als solcher ein Holen in sich hat.
Änderungsmethoden (Setter)
Eine Zugriffsmethode, die ein Objektattribut ändert, heißt auch Änderungsmethode oder Setter (von {{#invoke:Vorlage:lang|full|CODE=en|SCRIPTING=Latn|SERVICE=englisch}} – etwas einstellen, setzen). Ein Vorteil der Änderungsmethode besteht darin, dass sie vor der Änderung den Wert auf Gültigkeit prüfen kann. So könnte beispielsweise in einem Objekt, das eine Person darstellt, die Funktion zum Setzen des Namens sicherstellen, dass als Name kein leerer Text übergeben wird. Falls ein ungültiger Wert übergeben wird, besteht eine mögliche Reaktion im Auslösen einer Ausnahmeroutine, wodurch der normale Programmablauf unterbrochen und ein Fehler signalisiert wird.
Ein weiterer Vorteil der Änderungsmethode besteht darin, dass sie eventuelle Beobachter (im Sinne des gleichnamigen Entwurfsmusters) über die Änderung des Objektzustands informieren kann. Dies wird beispielsweise in Model-View-Controller-Architekturen benutzt, um eine Sicht (View, z. B. ein Bildschirmformular) zu aktualisieren, wenn der Inhalt des zugrundeliegenden Modells (Model, z. B. ein Datensatz in einer Datenbanktabelle) geändert wurde.
In einigen Programmiersprachen ist es üblich, die Namen aller Änderungsmethoden mit set beginnen zu lassen. So könnte z. B. eine Methode, die den Namen einer Person ändert, setName heißen. In anderen Programmiersprachen ist dieses Präfix unüblich und die Methode hieße einfach name, da bereits der parametrisierte Funktions-/Prozeduraufruf als solcher eine setzende Methode impliziert.
JavaBeans
JavaBeans, die Komponenten der Programmiersprache Java, erkennen Zugriffsfunktionen zur Laufzeit per Reflection anhand ihrer Präfixe get und set. Die eigens dafür bereitgestellte Klasse java.beans.Introspector leitet daraus dann automatisch den Namen der abgefragten oder geänderten Eigenschaft ab, also beispielsweise saldo aus getSaldo oder geburtstag aus setGeburtstag.<ref>{{#invoke:Vorlage:Literatur|f}}</ref>
Kritik
Martin Fowler weist in seiner Beschreibung des Antimusters Anämisches Objektmodell darauf hin, dass Objektmodelle, deren Objekte praktisch nur aus Zugriffsfunktionen bestehen und kein darüber hinausgehendes Verhalten anbieten, keine Vorteile gegenüber klassischen Datenmodellen haben. Solche Objektmodelle sind daher nicht unbedingt sinnvoll.<ref>{{#if:|{{#iferror: {{#iferror:{{#invoke:Vorlage:FormatDate|Execute}}|}}| |}}}}{{#if:Martin Fowler|Martin Fowler: }}{{#if:|{{#if:AnemicDomainModel|[{{#invoke:Vorlage:Internetquelle|archivURL|1={{#invoke:URLutil|getNormalized|1={{{archiv-url}}}}}}} {{#invoke:Vorlage:Internetquelle|TitelFormat|titel=AnemicDomainModel}}]{{#if:| ({{{format}}})}}{{#if:| {{{titelerg}}}{{#invoke:Vorlage:Internetquelle|Endpunkt|titel={{{titelerg}}}}}}}}}|{{#if:https://martinfowler.com/bliki/AnemicDomainModel.html%7C{{#if:{{#invoke:TemplUtl%7Cfaculty%7C}}%7C{{#invoke:Vorlage:Internetquelle%7CTitelFormat%7Ctitel={{#invoke:WLink%7CgetEscapedTitle%7C1=AnemicDomainModel}}}}%7C[{{#invoke:URLutil|getNormalized|1=https://martinfowler.com/bliki/AnemicDomainModel.html}} {{#invoke:Vorlage:Internetquelle|TitelFormat|titel={{#invoke:WLink|getEscapedTitle|1=AnemicDomainModel}}}}]}}{{#if:| ({{{format}}}{{#if:MF Bliki2003-11-25{{#if: 2009-03-25 | {{#if:{{#invoke:TemplUtl|faculty|}}||1}}}}
| )
| {{#if:{{#ifeq:en|de||{{#if:en|1}}}}| ;
| )}}}}}}{{#if:| {{{titelerg}}}{{#invoke:Vorlage:Internetquelle|Endpunkt|titel={{{titelerg}}}}}}}}}}}{{#if:https://martinfowler.com/bliki/AnemicDomainModel.html%7C{{#if:{{#invoke:URLutil%7CisResourceURL%7C1=https://martinfowler.com/bliki/AnemicDomainModel.html}}%7C%7C}}}}{{#if:AnemicDomainModel|{{#if:{{#invoke:WLink|isValidLinktext|1=AnemicDomainModel|lines=0}}||}}}}{{#if: MF Bliki| In: {{#invoke:Vorlage:Internetquelle|TitelFormat|titel=MF Bliki}}}}{{#if: | {{{hrsg}}}{{#if: 2003-11-25|,|{{#if: 2009-03-25 | {{#if:{{#invoke:TemplUtl|faculty|}}||,}}}}}}}}{{#if: 2003-11-25| {{#if:{{#invoke:DateTime|format|2003-11-25|noerror=1}}
|{{#invoke:DateTime|format|2003-11-25|T._Monat JJJJ}}
|{{#invoke:TemplUtl|failure|1=Fehler bei Vorlage:Internetquelle, datum=2003-11-25|class=Zitationswartung}} }}{{#if: |,|{{#if: 2009-03-25 | {{#if:{{#invoke:TemplUtl|faculty|}}||,}}}}}}}}{{#if: | S. {{{seiten}}}{{#if: |,|{{#if: 2009-03-25 | {{#if:{{#invoke:TemplUtl|faculty|}}||,}}}}}}}}{{#if: {{#invoke:TemplUtl|faculty|}}| {{#if:2003-11-25|{{#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:377514||(?)}}}}}}{{#if: 2009-03-25|;}}}}{{#if: 2009-03-25| {{#if:2003-11-25{{#invoke:TemplUtl|faculty|}}|abgerufen|Abgerufen}} {{#switch: {{#invoke:Str|len| {{#invoke:DateTime|format| 2009-03-25 |ISO|noerror=1}} }}
|4=im Jahr
|7=im
|10=am
|#default={{#invoke:TemplUtl|failure|1=Fehler bei Vorlage:Internetquelle, abruf=2009-03-25|class=Zitationswartung}} }} {{#invoke:DateTime|format|2009-03-25|T._Monat JJJJ}}
| {{#invoke:TemplUtl|failure|1=Vorlage:Internetquelle | abruf=2026-MM-TT ist Pflichtparameter}} }}{{#if:{{#ifeq:en|de||{{#if:en|1}}}}|{{#if:MF Bliki2003-11-25{{#if: 2009-03-25 | {{#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: 2003-11-25{{#if: 2009-03-25 | {{#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: https://martinfowler.com/bliki/AnemicDomainModel.html | {{#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: https://martinfowler.com/bliki/AnemicDomainModel.html | {{#if:{{#invoke:URLutil|isWebURL|https://martinfowler.com/bliki/AnemicDomainModel.html}} || {{#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=https://martinfowler.com/bliki/AnemicDomainModel.html 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: https://martinfowler.com/bliki/AnemicDomainModel.html | {{#if:{{#invoke:URLutil|isWebURL|https://martinfowler.com/bliki/AnemicDomainModel.html}} || {{#if: || }} }} }}{{#if: | {{#if:{{#invoke:DateTime|format||F Y|noerror=1}} || {{#if: || }} }} }}{{#switch: deadurl |checked|deadurl|= |#default= {{#if: || }} }}[https://martinfowler.com/bliki/AnemicDomainModel.html }}|{{#switch: |0|=Vorlage:Toter Link/Core{{#if: https://martinfowler.com/bliki/AnemicDomainModel.html | {{#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: https://martinfowler.com/bliki/AnemicDomainModel.html | {{#if:{{#invoke:URLutil|isWebURL|https://martinfowler.com/bliki/AnemicDomainModel.html}} || {{#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=https://martinfowler.com/bliki/AnemicDomainModel.html 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: https://martinfowler.com/bliki/AnemicDomainModel.html | {{#if:{{#invoke:URLutil|isWebURL|https://martinfowler.com/bliki/AnemicDomainModel.html}} || {{#if: || }} }} }}{{#if: | {{#if:{{#invoke:DateTime|format||F Y|noerror=1}} || {{#if: || }} }} }}{{#switch: |checked|deadurl|= |#default= {{#if: || }} }}[https://martinfowler.com/bliki/AnemicDomainModel.html }} }}}}}}}}}}{{#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>
Einzelnachweise
<references />
- Wikipedia:Vorlagenfehler/Parameter:URL
- Wikipedia:Vorlagenfehler/Parameter:Linktext
- Wikipedia:Vorlagenfehler/Parameter:Datum
- Wikipedia:Vorlagenfehler/Vorlage:"
- Wikipedia:Weblink offline fix-attempted
- Wikipedia:Vorlagenfehler/Vorlage:Toter Link
- Wikipedia:Vorlagenfehler/Vorlage:Toter Link/URL fehlt
- Objektorientierte Programmierung
- Unterprogramm