Deklarative Programmierung mit Attributen MSDN TechTalk – <<Monat JJJJ>> <<Thema>> 1 Deklarative Programmierung mit Attributen Ralf Westphal ralfw@ralfw.de
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 Anwendung 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 AttributeUsage-Attribut 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 Übergabe von Parametern Aufruf erst bei Zugriff mit Reflection Zuweisung von Werten an öffentliche Felder in Konstruktor-Parameterliste [DllImport("Kernel32", CharSet=CharSet.Auto)] Mehrere Attribute können dasselbe Konstrukt annotieren 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 Aktive 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
MSDN TechTalk – <<Monat JJJJ>> <<Thema>> 12 Fragen!? MSDN TechTalk – <<Monat JJJJ>> <<Thema>> 12 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
MSDN TechTalk – <<Monat JJJJ>> <<Thema>> 15 Bücher des Referenten MSDN TechTalk – <<Monat JJJJ>> <<Thema>> 15 .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 .NET- Framework 400 Seiten, Markt+Technik, 2002, ISBN 3827262291 (erscheint 2003)