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
•
•
•
•

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)