14.06.1996 0+ LUISAuskunftsebene 0+ 0+ Dokument Dokmappe 0+ 1+ Raumbezug 0+ hat 1+ 1+ Fachobjekt = 0+ Umweltobjekt hat Kontext 1+ Zeitbezug Kontext 0+ Verlauf 2+ LUIS. Situation 0+ 1 Zeitpunkt hat Das Tycoon-System 1+ 0+ hat Kontext FIS Luft. Situation 0+ 1 Zeitpunkt zum 0+ 0+ 0+ betrifft betrifft betrifft … 0+ FISEbene Immission 0+ Schadstoff 0+ 1+ 1+ 0+ Meßstelle mißt FVEbene Susanne Busse 4. Zusammenfassung; Ausblick 0,1 Raumbezug Fachverfahren Immissionskataster Brandenburg ! 3. Software-Architektur-Komponenten heterogener, verteilter Informationssysteme Darstellung ! 2. Transformation struktureller objektorientierter Informationsmodelle in TL-Komponenten beschreibt erlaubt LUIS-Objekt 1+ 0+ 1 1+ ! 1. Ziele der Arbeit Diplomarbeit Metainformation ! "Modellbasiertes Prototyping objektorientierter, heterogener, verteilter Informationssysteme auf der Basis des Tycoon-Systems" Das RAUS-Modell . Fachverfahren Luftgütemeßnetz Ziel der Arbeit: Tycoon = Typed Communicating Objects in Open Environments Beschreibung der typischen Architekturkomponenten heterogener, verteilter Informationssysteme zur Transformation objektorientierter Informationsmodelle : 1. Transformation struktureller objektorientierter Informationsmodelle in TL-Komponenten Objekte der Applikation • Ausnutzung vorhandener Spracheigenschaften Generische Tycoon Bibliotheken SQL C NeWS … • Entwicklung der Bibliothek ’OO’ weitere externe Dienste Charakteristika: • Objektmanagement • Persistenz- und Mobilitätsunterstützung • TL als sprachlichen Rahmen Typsicherheit; Interoperabilität • Anbindung und Integration externer Datenbestände • Beispiel-Szenario: LUIS • Offenheit; Add-On-Ansatz Susanne Busse 2. Entwurf typischer SoftwareArchitektur-Komponenten 14.06.1996 Susanne Busse 14.06.1996 … ApplClassObject Class 0+ 0+ Subklasse … • Gliederung von Interfaces in Benutzergruppen Susanne Busse 1 1 Object • Mehrfachvererbung auf intensionaler Ebene Susanne Busse • Redefinitionen besitzt • Spezialisierung kovarianter Methoden Extension Problembereiche: 1+ • Spezialisierung → Subtypisierung 0+ • Assoziation → objektwertige Attribute Die Bibliothek ’OO’ • Extensionsverwaltung → Mengenverwaltung (Klassenobjekt zur Instanzverwaltung) verwaltet ApplicationClass 0+ 1 • Objektspezifikation → Recordtyp ApplicationObject • Klasse classManager verwaltet von ClassManager 1 0+ OO • Objekt → Recordwert 14.06.96 Objektmodell → TL-Komponenten 14.06.1996 interface Class import :Object :Iter export Let ObjAdm(ObjT <:Object.T InitT <:Ok) <:Object.T = Record new(:InitT) :ObjT clone(:ObjT) :ObjT fromObject(:Object.T :InitT) :ObjT equal(:ObjT :ObjT) :Bool equalCurry(:ObjT)(:ObjT) :Bool elements() :Iter.T(ObjT) lookupObject(:Object.T) :ObjT remove(:Object.T) :Ok end interface Object export Let T = Record end new() :T idEqual(:T :T) :Bool idEqualCurry(:T)(:T) :Bool end classMgr :Record new(ObjT <:Object.T InitT <:Ok name :String art :Abstrakt superclasses :Array(Generalisierung) fromfun :Fun(:Object.T :InitT) :ObjT clonefun :Fun(:Object.T :ObjT) :ObjT equalfun :Fun(:ObjT :ObjT) :Bool removefun :Fun(:ObjT) :Ok ) :ObjAdm(ObjT InitT) remove(name :String) :Ok display() :Ok end Susanne Busse 14.06.1996 Susanne Busse 14.06.1996 Beispiel Object.T LUIS-Objekt Name: string Objekttyp $search: string → set of Class LUIS-Objekt Class(LUISObjekt.T) verwaltet LUIS-Objekt.T LUIS-Objekt.Klasse 0+ 1 Name search Dokmappe Thema: string LUIS-Objekt.klasse Dokmappe.T verwaltet 0+ 1 Class(Dokmappe.T) Thema Dokmappe.klasse Susanne Busse Susanne Busse • Verteilungstransparenz Registrierung Adressverwaltung Let ObjAdresse = Tuple host :Host portNumber :Int end • Servertransparenz Semantische Metainformation Diensterbringerauswahl Typmanagement Dienstrealisierung • Abstraktion von den Diensttypen Syntaktische Metainformation Dynamische Formulierung der Dienstanfrage Susanne Busse Dienstanbieter Kommunikationskomponente Verzeichnisdienst Ziel: Unterstützung von Transparenz für eine mögliche Abstraktion von der Verteiltheit seitens der Anwendung Kommunikationskomponente Kommunikationskomponente Anfrage Dienstvermittler Dienstnachfrager Anwendung Dienstebeschreibung Offene verteilte Systeme 14.06.1996 Objektmanagement 14.06.96 14.06.1996 Susanne Busse 14.06.1996 Anfragenbearbeitung Objektmanager Client Diensterbringer Meta-Anfrage Diensterb.adr. a) Metainformationsverwaltung Anfrage Anfrage-Ergebnis Objektmanager Client Diensterbringer Meta-Anfrage b) Remote Execution Engine Anfrage Ergebnis Ergebnis Client Objektmanager Meta-Anfrage c) Diensterbringerverwaltung Diensterb.objekt Anfr.bearbeitung Susanne Busse 14.06.1996 Let Trader <:Object.T = Record registrate(Dyn Diensttyp <:Object.T adr :ObjAdresse) :Ok get(Dyn Diensstyp <:Object.T) :Iter.T(ObjAdresse) end let new() :Trader = begin Let Entry = Tuple dienstT :DynType server :set.T(ObjAdresse) end let diensteMarkt = dictionary.new(:Entry …) record let registrate(Dyn Diensttyp <:Object.T adr :ObjAdresse) = begin let dTyp = typeRep_new(:Diensttyp) try let entry = dictionary.get(diensteMarkt dTyp) set.insert(entry.server adr) else dictionary.insert(diensteMarkt tuple dTyp set.create(… adr …) end) end end let get(Dyn Diensstyp <:Object.T) = begin let entry = dictionary.get(diensteMarkt typeRep_new(:Diensttyp)) set.elements(entry.server) end end end Susanne Busse Anbindung und Integration externer Datenbestände 14.06.1996 Integrationsklassen ObjT KeyT ObjT InitT Integrator Anbindung: Class … … • "Wrapperobjekte" • allgemeine Spezifikationssprache für die generische Formulierung von Anfragen Integration: Integrator(ObjT KeyT) equal equalCurry lookupObject lookupKey elements keyElements remove • "Integrationsobjekte" bzw. "-klassen" 1 equal equalCurry lookupObject remove Class(ObjT KeyT) new clone fromObject equal equalCurry elements lookupObject remove • Bsp.: Objektklassen des FIS Luft let new(ObjT <:Object.T KeyT <:Ok name :String newObject :Fun(:Object.T :KeyT) :ObjT newAll :Fun() :Iter.T(KeyT) keyEqual :Fun(:KeyT :KeyT) :Bool getKey :Fun(:ObjT) :KeyT removefun :Fun(:ObjT) :Ok ) :IntegratorT(ObjT KeyT) • Objektidentität • Extensionsverwaltung • Objekterzeugung Susanne Busse 14.06.1996 Susanne Busse 14.06.1996 Zusammenfassung let new(…) = begin let clonefun(newid :Object.T from :ObjT) :ObjT = raise class.userError with … end let equalfun(o1 :ObjT o2 :ObjT) :Bool = keyEqual(getKey(o1) getKey(o2)) let classobj = class.classMgr.new(:ObjT :KeyT name tuple_case konkret of Class.Abstrakt end array end newObject clonefun equalfun removefun) extend object.new() with let equal = class.equal let equalCurry = class.equalCurry let lookupObject = class.lookupObject let lookupKey(k :KeyT) = try iter.any(classobj.elements() fun(o :ObjT) :Bool keyEqual(getKey(o) k) else classobj.new(k) end let elements() = iter.map(newAll() fun(k :KeyT) :ObjT lookupKey(k)) let keyElements = newAll let remove = class.remove end end Susanne Busse • objektorientierte Konzepte unter Ausnutzung der TLSpracheigenschaften integrierbar • Bibliothek ’OO’ zur Unterstützung des Transformationsprozesses Typische Software-Architekur-Komponenten heterogener, verteilter Informationssysteme Dienstnutzung Diensterbringung Objektmanagement NamensTypDiensteTrading management verwaltung verwaltung Kommunikationsdienst • Anbindung und Integration externer Informationsbestände mit generischen Objektklassen • zur Behandlung der Verteiltheit: Anpassung des Objektmodells; Verwendung zusätzlicher Sprach- und Systemeigenschaften 14.06.1996 Ausblick • Einbeziehen dynamischer Aspekte • weitere Architekturkomponenten und ihre Beziehungen • Benutzerinteraktion • Sicherheitsaspekte • … • Frameworks • weitergehende Validierung anhand einer prototypischen Realisierung • Erweiterung des Szenarios • plattformübergreifende Betrachtungen • Kopplung mit anderen Plattformen • Vergleich anderer Software-Architekturen Susanne Busse Objektmodell → TL-Komponente 14.06.1996 Susanne Busse 14.06.1996