Diskussion:Annotation (Programmierung)

aus Wikipedia, der freien Enzyklopädie
Dies ist die aktuelle Version dieser Seite, zuletzt bearbeitet am 17. April 2020 um 11:14 Uhr durch imported>Xqbot(627628) (Bot: Ersetze veraltetes <source> tag).
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)

Java-Lastigkeit

Der Artikel ist zu Java-lasting. Java mag eine der ersten Programmiersprachen sein, bei der Annotations konsequent eingesetzt wurden, aber das berechtigt nicht, hier fast ausschließlich Java zu nennen -- Nichtich 01:11, 5. Sep 2004 (CEST)

Dann schreib' doch 'was über andere attributorientierte Programmiersprachen. Hindert Dich doch niemand daran, oder? ;-) Klar habe ich nur über Java geschrieben, weil ich keine anderen attributorientierten Programmiersprachen beherrsche. Ich weiß zwar, dass C# attributorientiert sein soll, aber ich kann C# nicht und deshalb auch nichts dadrüber schreiben. --ChristianHujer 16:12, 12. Sep 2004 (CEST)

Habe unten etwas über Python-Dekoratoren geschrieben, die entweder als Spielart der Annotationen oder als Querverweis berücksichtigt werden könnten. Es scheint mal einen Artikel Dekorator gegeben zu haben; ich weiß daber nicht, was da drinstand. --Tobias 15:24, 20. Jan. 2011 (CET)

Zweifel an der Bedeutung von "attributorientierte Programmierung"

Ich habe nach "attributorientierte Programmierung" gegugelt und gerade mal 91 Einträge gefunden, davon ein Großteil Doubletten aus diesem Artikel. Zum Vergleich:

attributorientierte Programmierung: 91
aspektorientierte Programmierung:   997
objektorientierte Programmierung:   96800

Gemäß der Definition von "Programmierparadigma" ist "attributorientierte Programmierung" auch kein Paradigma. Ich nehme deshalb diese Formulierung heraus. Leinemann 13:02, 5. Dez 2004 (CET)

Ob attributorientierte Programmierung wirklich ein Paradigma ist oder nicht, ist schwer zu sagen. Man muss wohl erst noch abwarten, was mit Java 6.0 / 7.0, neueren Versionen von C# oder anderen Programmiersprachen kommt. Derzeit ist attributorientierte Programmierung wohl eher ein Hilfsmittel als ein Paradigma. Nachdem aber für die attributorientierte Programmierung mehrere Programme und eine Erweiterung der Programmiersprache Java entwickelt wurden, dürfte es an ihrer Bedeutung keinen Zweifel geben ;) --ChristianHujer 18:20, 30. Mär 2005 (CEST)
Wenn attributorientierte Programmierung ein Paradigma ist, dann sicher auch stringorientierte Programmierung, oder integerorientierte Programmierung. Wollen wir dafür eigene Artikel anlegen? ;-) Ich habe die Kategorie "Programmierparadigma" entfernt. --Hades 12:38, 3. Apr 2005 (CEST)
Die Entfernung von Programmierparadigma und Kategorie ist in Ordnung. Das Ausmerzen jeglichen Vorkommnisses von "Attributorientierte Programmierung" ist jedoch ziemlich unsinnige Kahlschlagtaktik. Wie eine Suche bei Google [1] zeigt, wird der Begriff tatsächlich verwendet. Ich stelle das nicht wieder her, ich bin nicht der Typ für Edit-Wars. Ich find's jedoch total unsinnig, den Begriff "Attributorientierte Programmierung" zu entfernen. Insbesondere, da die Attributorientierte Programmierung sich auf mehr als nur Annotationen erstreckt. In der Java-Programmierung ist sowohl die Verwendung von JavaDoc-Tags als auch die Verwendung von Annotationen attributorientierte Programmierung. Jedoch sind lediglich die Syntax-Elemente wie @Deprecated oder @Overrides Annotationen, während die JavaDoc-Tags @deprecated, @param, @return, @throws etc. eben keine Annotationen sind. Nicht zu vergessen externe Meta-Informationen, die ebenfalls unter die Kategorie "attributorientierte Programmierung", nicht jedoch unter "Annotation" fallen. Die Änderung ist also nicht nur ignorant gegenüber dem Begriff "attributorientierte Programmierung", sondern auch noch sachlich falsch, da Annotationen nur einen Teilbereich der attributorientierten Programmierung darstellen. Ich hab echt nix gegen Änderungen, wenn sie denn richtig sind. Die Änderung hier ist aber sachlich falsch, und das frisst mich echt an, sorry. --ChristianHujer 20:20, 3. Apr 2005 (CEST)
Hallo Christian! Erst mal keine Panik. Man kann ja alles besprechen.
Nach den bisherigen Recherche-Ergebnissen scheint aber "attributorienterte Programmierung" kein verbreiteter Begriff zu sein. Vielleicht beruht deine offensichtlich etwas andere Einschätzung aber auf einem Irrtum. Ich bin nämlich deinem Google-Suchlink nachgegangen und habe festgestellt, dass du "attribute oriented programming" nicht als Wortgruppe gesucht hast. Damit kommst du dann natürlich fast auf den tausendfachen Wert!
Ich habe dann "attribute oriented programming" auf dem Microsoft-Server gesucht. Ergebnis: kein Eintrag! Wie kann es dann ein Begriff sein, der auch für C# verwendet wird?
Ich meine, wir sollten so einem Thema nicht mehr Gewicht geben, als es in Wirklichkeit hat. Natürlich darf der Begriff auftauchen, und vielleicht war ich an der einen oder anderen Stelle etwas zu forsch mit den Änderungen, aber wenn ein eigener Artikel dafür angelegt werden soll, stellt sich immer die Frage nach der Relevanz, und die scheint mir nach dem bisherigen Informationsstand nicht gegeben. Aber schreib erst mal, was du meinst. --Hades 20:09, 4. Apr 2005 (CEST)
Hallo. Prima, dass Du darauf reagiert hast. Klar, die Google-Suche liefert 480000 oder so Treffer, von denen nur ein winziger Bruchteil mit attributorientierter Programmierung zu tun hat. Der Begriff attributorientierte Programmierung ist noch ziemlich neu. Er setzt sich gerade erst durch. Die Firma Hilf! GmbH (keinerlei Beziehung zwischen mir und der Firma, lediglich einer der Suchtreffer bei Google) bei München bietet z.B. eine Schulung zu C#/.Net und Attributorientierter Programmierung an. Von diese Firma weiß ich, dass sie sich auch im Java-Umfeld auskennt. Ich habe auch schon eine (1) Diplomarbeit gesehen, in der die Programmierung mit Metadaten als attributorientierte Programmierung bezeichnet wird (im Zusammenhang XDoclet und andere Code-Generatoren zu J2EE). Vor einem Jahr habe ich mit einem ehemaligen Kommilitonen gesprochen und darüber diskutiert, ob attributorientierte Programmierung denn ein Paradigma sei oder nicht. Einige der essentiellen Punkte waren, dass, um ein Programmierparadigma zu sein, eine entsprechende Arbeitsersparnis und signifikante Änderung in der Quelltextstruktur erkenntlich sein muss. Die Arbeitsersparnis ist offensichtlich, die signifikante Änderung an der Quelltextstruktur jedoch nicht. Da aber die aspektorientierte Programmierung eindeutig als Paradigma gilt und im Vergleich mit der objektorientierten Programmierung kaum Änderungen an der Quelltextstruktur mit sich bringt, waren wir uns der Bedeutung in Bezug auf die Änderung der Quelltextstruktur nicht so sicher. Auf der Suche nach weiteren Anzeichen stießen wir auf die mit Paradigmenwechseln / -erweiterungen einhergehende Aufnahme eines Paradigmas in mehrere Sprachen oder die Neuschaffung von Sprachen sowie Zusatzwerkzeuge zur Überbrückung der Zeit dazwischen. Auch wenn die attributorientierte Programmierung bezüglich des strukturellen Quelltextentwurfs derzeit absolut nicht mit OOP vergleichbar ist, lassen sich alle diese Zeichen finden. Denkt man an die Anfänge der objektorientierten Programmierung zurück, muss man aber wiederum auch zugestehen, dass es von Simula-67 über die Zwischenstationen wie SmallTalk, Oberon, Objective C, C++ bis Java 5.0 / C# ein langer Weg war.
Warum auf dem Microsoft-Server (noch?) nicht von attributorientierter Programmierung die Rede ist, kann verschiedene Gründe haben. Eine Beurteilung ob welche(r) der Gründe ist mir nicht möglich. Kann sein, dass der Begriff attributorientierte Programmierung (kenne ich seit ca. 1,5 Jahren) erst nachträglich aufgetaucht ist. Kann sein, dass Microsoft ihn aufgrund seiner häufigen Nennung im Zusammenhang mit XDoclet (Java = Erzfeind) vermeiden möchte. Kann natürlich auch sein, dass ich durch meine häufige Verwendung von XDoclet und jetzt Annotations einem esoterischen Kreis von Programmierern angehöre, die diesen Begriff verwendet, und der Begriff außerhalb dieser Gruppe tatsächlich keine Bedeutung besitzt. Oder ich bin über das Ziel hinausgeschossen und habe unbewusst die Wikipedia zur Begriffsbildung statt -erklärung misbraucht, was natürlich dann die Änderung rechtfertigt.
Allerdings fällt mir eine Abgrenzung zwischen Annotation, Metadaten und Attributorientierter Programmierung ziemlich leicht. Annotation = Vom Compiler verstandenes Syntax-Element zur Attributorientierten Programmierung. Metadaten = Informationen über Informationen, zentrales Element der Attributorientierten Programmierung, wobei Metadaten allerdings auch in gänzlich anderen Kontexten auftauchen (RSS / RDF, Dublin Core etc.). Attributorientierte Programmierung = (nicht nur) Software-Entwicklung mit Hilfe von Metadaten-auswertenden Code-Generatoren. Attribut im Sinne der Attributorientierten Programmierung = spezifische Metdaten. Die häufigsten Formen von Attributen in Java sind JavaDoc-Tags und Annotationen. Nach meinem Verständnis ist eine Annotation lediglich das mit Java 5.0 eingeführte Syntaxelement (@interface zur Deklaration / @Name zur Verwendung - Nicht im Kommentar, vom Compiler geprüft und je nach Retention-Policy gelöscht, ins Class-File geschrieben oder sogar zur Laufzeit verfügbar), während Attribut der Oberbegriff ist.
Vielleicht müssen wir auch einfach abwarten, welcher Begriff sich durchsetzt, wenn das so ist, sollten wir das aber im Artikel auch entsprechend schreiben, z.B. dass im Zusammenhang mit XDoclet von attributorientierter Programmierung die Rede ist und es abzuwarten bleibt, welcher Begriff sich als Oberbegriff für die Code-Generierung mit Metadaten im Quelltext durchsetzt.
So, genug getippt, jetzt bist Du dran ;)--ChristianHujer 00:29, 5. Apr 2005 (CEST)
Ich bin gerade in Eile. Nur so viel: auf dem Server java.com: 1 Google-Treffer, und zwar ein Forenbeitrag aus dem Jahr 2003. Wie du schreibst: im Artikel auch entsprechend schreiben und im Zusammenhang mit XDoclet von attributorientierter Programmierung die Rede . So ähnlich könnte man es machen.
Noch ein Unterschied: JavaDoc-Tags erzeugen keine Laufzeitinformationen. Bis bald. --Hades 22:37, 5. Apr 2005 (CEST)

Rechtschreibfehler im ersten Satz? Ein -r zuviel.

Ich habe Probleme mit dem ersten Satz: "... ein Mittel zur Strukturierung von Programmquelltexten, bei der die Erzeugung von Programmtexten und mit der Programmierung verbundener Hilfsdateien teilweise automatisiert wird." Sollte das heißen: "... und mit der Programmierung verbundene Hilfsdateien ..." ?

Imho nicht, weil: „ein Mittel zur Strukturierung … bei der die Erzeugung … verbundener Hilfsdateien … automatisiert wird“. --jpp ?! 21:06, 16. Sep 2006 (CEST)

Python: Dekoratoren

In Python (Programmiersprache) gibt es in neueren Versionen die sog. Dekoratoren, die auf Funktionen/Methoden (seit Python 2.4 [2]) und Klassen (seit Python 2.6 [3]) angewendet werden können; dabei ist

@deko
def funk():
    ...

eine Abkürzung für:

def funk():
    ...
funk = deko(funk)

Die Dekoratorfunktion gibt also eine Funktion zurück, die anstelle der Originalfunktion verwendet wird; das funktioniert, weil Funktionen in Python „first-class citizens“ sind. Funktionsfähiges Beispiel:

def arginfo(*args, **kwargs):
    "Helper für tell_call und tell_result"
    res = list()
    res.extend(map(repr, args))
    for key, val in kwargs.items():
        res.append('%s=%r' % (key, val))
    return ', '.join(res)

def tell_call(f):
    "Dekorator-Funktion: Information über Aufruf"
    def ff(*args, **kwargs):
        print 'Aufruf: %s(%s)' % (f.__name__, arginfo(*args, **kwargs))
        return f(*args, **kwargs)
    return ff

def tell_result(f):
    "Dekorator-Funktion: Information über Rückgabewert"
    def ff(*args, **kwargs):
        res = f(*args, **kwargs)
        print '%s(%s) -> %r' % (f.__name__, arginfo(*args, **kwargs), res)
        return res
    return ff

@tell_call
@tell_result
def fak(i):
    assert isinstance(i, int)
    assert i >= 0
    if i > 1:
        return i * fak(i-1)
    else:
        return 1

print fak(3)

(Das Beispiel läßt sich noch verbessern, weil der Name der Ursprungsfunktion nur beim letzten Dekorator vor der Ursprungsfunktion erhaltenbleibt. Die simpelste Lösung wäre natürlich, beide Funktionalitäten in denselben Dekorator zu stecken; auch die Asserts ließen sich unterbringen.)

Sind solche Dekoratoren dasselbe wie Annotations, oder in welcher Weise gehen wir damit um? --Tobias 15:24, 20. Jan. 2011 (CET)

Relevante Belege fehlen

Dem Artikel sollten Belege hinzugefügt werden.--Boshomi 12:06, 22. Okt. 2011 (CEST)

Zwei Belege wurden bereits hinzugefügt, diese stellen jedoch auf den ersten Blick keine direkte Verbindung zwischen den Wörtern „Annotation“ und „Anmerkung“ her. Wenn jedoch die aktuelle Einleitung hier gelesen wird, scheint es aber so zu sein, daß Microsoft lediglich ein anderes Wort (das „Attribut“) für den Begriff verwendet. Vom Sinn her scheinen jedenfalls die beiden (hier und bei der MSDN beschriebenen) Begriffe (zumindest annähernd) gleich zu sein. --92.226.61.231 11:11, 29. Nov. 2011 (CET)

== kein Mittel der Strukturierung

aus meiner Sicht sind Annotationen kein Mittel der Strukturierung, sondern lediglich ein Mittel der Auszeichnung oder Kommentierung. Die Struktur des Programmes bleibt nämlich unverändert. Für mich ist eine Annotation entsprechend kein Strukturelement, wie es z.B. im Duden definiert ist.