Deklarative Programmierung mit Attributen Ralf Westphal [email protected] Deklarative Programmierung? Beschreiben, was ein Ergebnis sein soll • Weniger fehlerträchtig, da kein Prozess implementiert werden muss Nicht das Wie nennen, um zu dem Ergebnis zu kommen Gegensatz: Imperative Programmierung Beispiel: SQL select vs low-level DB API Attribute Typsichere erweiterbare Metadaten • • • • Typsicher: Attribute sind Klassen Erweiterbar: Eigene Attributklassen möglich Metainformation: Annotation von Sprachkonstrukten • • z.B. Assembly, Klasse, Eigenschaft, Methode, Parameter Sprachübergreifend „Attribute“ sind nicht neu • Sichtbarkeitsangaben, COM+ Tx-Einstellungen, XML-Attribute, COM Typlibs Anwendung • • Sprachabhängige Notation Attributdefinitionen sind Konstruktoraufrufe • Attributobjekt wird erst bei Zugriff via Reflection erzeugt Beispiele <WebService()> _ Public Class MyService <WebMethod()>_ Public Function Add(...) ... End Class [Serializable()] Public class MyClass { public string name; ... } <DBTable("Customers")> _ Public Class Customer <DBField("CustomerID")>_ Public id As String Public companyname As String ... End Class Attribute im .NET Framework XML-Serialisierung XML Web Services Code Access Security Serviced Components COM-Interop, P/Invoke Assemblyannotation Attributdefinition etc. Definition Ableitung einer Klasse von System.Attribute Klassennamepostfix: „Attribute“ Einschränkung der Nutzung über AttributeUsageAttribut Konstruktor-Parameter, Felder, Eigenschaften • • • Als Typen sind nur vordefinierte erlaubt, z.B. Boolean, Char, Integer, String, Object Eindim. Arrays dieser Typen Zuweisung im Quelltext durch konstanten Ausdruck Mehrfachbenutzung eines Attributes nur erlaubt, wenn AllowMultiple = true Attributvererbung nur, wenn Inherited = true • Gilt nur für Klassen, Methoden, Eigenschaften, Ereignisse, Parameter Anwendung Sprachabhängige Syntax für die Annotation Attributangaben sind Konstruktoraufrufe • • Zuweisung von Werten an öffentliche Felder in Konstruktor-Parameterliste • [DllImport("Kernel32", CharSet=CharSet.Auto)] Mehrere Attribute können dasselbe Konstrukt annotieren • • Übergabe von Parametern Aufruf erst bei Zugriff mit Reflection Getrennte Attributangabe Kommaseparierte Liste Explizite Gültigkeitsangabe möglich • • <Assembly: AssemblyVersion("1.0.*")> [type: Serializable()] Zugriff Container implementiert Zugriff auf Attribute • • Ohne Container keine „Wirkung“ Der Wert eines Attributs „entsteht im Auge des Betrachters“ Instanzen über Reflection ermitteln • • • System.Attribute • .IsDefined(), .GetAttribute(), .GetAttributes() Ziel-Typ • .IsDefined(), GetAttributes() Funktioniert nicht für Pseudo-benutzerdefinierte Attribute (PbA) • • • Z.B. System.SerializableAttribute Speicherung als komprimierte Bit-Information in den Assembly-Metadaten Alternative für einige PbA: Eigenschaften auf System.Type wie .IsSerializable Attributaktivität Passive Attribute • Werden durch den Container interpretiert Aktive Attribute • • Container stößt Funktionalität in Attributinstanz an Automatische Aktivität mit Kontextattributen Kontextattribute Automatische Aktivierung bei Objekterzeugung • • • .NET Remoting Infrastruktur ist Container Definieren virtuelle Remoting-Grenzen in einer AppDomain Dienen der Registrierung von Kontexteigenschaften und –sink-Objekten • Sinks ermöglichen das Abfangen von Nachrichten (Methodenaufrufe) in einen Kontext hinein Definition • • Ableitung der Attributklasse von ContextAttribute Zu annotierende Klasse muss von ContextBoundObject abgeleitet sein Deklarative Programmierung! Annotation von Konstrukten mit Funktionalität • Aktive Attribute Kein Eingriff in Konstrukte nötig • Orthogonale Funktionalität Alternative zu • • • „Ausprogrammierung“ (Instrumentierung) Delegation Vererbung Fragen!? Uff... Ressourcen J. Richter: Microsoft .NET Framework Programmierung; ISBN 3860636502, MSPress 2002 I. Rammer: Advanced .NET Remoting; ISBN 1590590252, APress 2002 Über den Referenten Ralf Westphal ist freier Softwaretechnologievermittler. Er arbeitet als Fachautor, Coach/Berater, Softwareentwickler und Sprecher auf Konferenzen im In- und Ausland wie Microsoft Technical Summit, XML-in-Action, BASTA!, COMDEX, Software Development oder XML One. Der Schwerpunkt seiner Arbeit liegt bei der Vermittlung und Anwendung moderner Softwaretechnologien und -konzepte auf der Microsoft Plattform mit Fokus in den Bereichen OOP/komponentenorientierte Entwicklung, Softwarearchitektur und .NET Framework. Darüber hinaus ist Ralf Westphal einer der deutschen Microsoft MSDN Regional Directors, Mitglied verschiedener Fachbeiräte und war von 1998 bis 2001 Chefredakteur der Visual Basic Fachzeitschrift BasicPro. Homepage: www.ralfw.de Bücher des Referenten .NET kompakt 140 Seiten, Spektrum Akademischer Verlag, 2002, ISBN 3827411858 ADO.NET Datenbankprogrammierung 130 Seiten , Addison-Wesley , 2002 , ISBN 3827319978 Jetzt lerne ich ADO.NET Einfache Datenbankprogrammierung im .NETFramework 400 Seiten, Markt+Technik, 2002, ISBN 3827262291 (erscheint 2003)