cd Blatt 6
Erörtert den Entwurf von Systemarchitekturen, wobei sowohl kreative als auch technische Aspekte einfließen. Betont die Bedeutung von Entscheidungen, die funktionale und nichtfunktionale Anforderungen berücksichtigen.
Stellt eine Übersicht verschiedener Architekturmuster bereit, die in der Softwarearchitektur verwendet werden. Diese Muster illustrieren unterschiedliche Ansätze zur Strukturierung und Organisation von Systemkomponenten, mit einem Fokus auf deren spezifische Stärken und Herausforderungen.
MVC trennt Präsentation und Interaktion von Systemdaten in drei Komponenten: Model, View und Controller. Das Modell verwaltet Daten und Operationen, die Ansicht definiert, wie Daten präsentiert werden, und der Controller steuert Benutzerinteraktionen.
Strukturiert Systeme in Schichten, wobei jede Schicht bestimmte Funktionen bereitstellt. Geeignet für modulare Erweiterungen und mehrstufige Sicherheit.
Zentralisiert Systemdaten in einem Repository, auf das alle Komponenten zugreifen. Ideal für datenintensive Systeme.
Besteht aus Diensten, die von Servern bereitgestellt und von Clients genutzt werden. Geeignet für verteilte Datenzugriffe und flexible Systemauslastung.
Verarbeitet Daten durch eine Reihe von Transformationen. Ideal für sequenzielle oder parallele Datenverarbeitungsprozesse.
Anwendungsarchitekturen sind entscheidend für die Gestaltung effektiver Softwaresysteme. Sie strukturieren die Interaktionen und das Zusammenspiel der Systemkomponenten, um Geschäfts- und Benutzeranforderungen zu erfüllen. Diese Architekturen bieten einen umfassenden Rahmen für die Systementwicklung und -wartung.
Bei Client-Server-Architekturen gibt es zwei grundlegende Varianten: „thick clients“ und „thin clients“. Letzere führen keine eigenen Berechnungen durch und besitzen keine Funktionalität, außer vom Server gesendete Daten anzuzeigen und Benutzereingaben zurückzusenden. Erstere enthalten dagegen eigene Funktionalität und greifen nur für bestimmte Dinge auf den Server zu
Pipes and Filters ist ein Architekturmuster in der Softwareentwicklung, bei dem eine Reihe von Verarbeitungskomponenten (die "Filters") Daten in einer Sequenz bearbeiten, wobei jeder Filter eine bestimmte Operation ausführt und die Daten über Verbindungselemente (die "Pipes") zum nächsten Filter weitergibt.
Die Schichtenarchitektur, auch bekannt als Layered Architecture, ist ein Softwareentwurfsmuster, bei dem die Komponenten in hierarchische Schichten aufgeteilt werden. Jede Schicht hat eine spezifische Aufgabe und bietet Dienste für die darüberliegende Schicht, während sie gleichzeitig Dienste von der darunterliegenden Schicht nutzt. Diese Struktur fördert die Organisation des Codes, macht ihn wartbarer und erleichtert das Austauschen oder Erweitern einzelner Schichten, ohne die anderen zu beeinträchtigen.
Das Repository-Architekturmuster ist ein Strukturierungsansatz in der Softwareentwicklung, bei dem ein zentraler Datenspeicher (das "Repository") verwendet wird, um die gemeinsame Datenbasis mehrerer unterschiedlicher Anwendungskomponenten zu verwalten. Die Komponenten interagieren mit dem Repository, das eine konsistente Schnittstelle zur Datenmanipulation bietet, wodurch Datenkohärenz, Datenwiederverwendung und eine klare Trennung zwischen Datenverarbeitung und -speicherung erreicht wird.
Erweiterung eines Pipes and Filters Programms in der Softwareentwicklung, bei dem zusätzliche Filter-Klassen hinzugefügt werden, um spezifische Funktionen auszuführen und Daten in einer Sequenz zu bearbeiten.
Die Erweiterung des Python-Programms umfasst die Implementierung zweier zusätzlicher Filter-Klassen. Die erste, PrintFilter, ist für die Ausgabe von Daten in der Konsole zuständig, während die zweite, ElimFilter, WHERE-Klauseln aus SQL-Statements entfernt.
import sqlparse class TokenizeFilter: def process(self, input_data): tokens = sqlparse.parse(input_data)[0].tokens return tokens class ParseFilter: def process(self, input_tokens): parsed_statement = sqlparse.sql.Statement(input_tokens) return parsed_statement class PrintFilter: def process(self, data): print(data) return data class ElimFilter: def process(self, input_tokens): return [token for token in input_tokens if not token.ttype is sqlparse.tokens.Where] class SQLParserPipeline: def __init__(self): self.filters = [] def add_filter(self, filter_instance): self.filters.append(filter_instance) def run_pipeline(self, input_data): data = input_data for filter_instance in self.filters: data = filter_instance.process(data) if __name__ == "__main__": sql_statement = "SELECT * FROM my_table WHERE column = 'value';" pipeline = SQLParserPipeline() pipeline.add_filter(TokenizeFilter()) pipeline.add_filter(ElimFilter()) pipeline.add_filter(PrintFilter()) pipeline.add_filter(ParseFilter()) pipeline.run_pipeline(sql_statement)
Das Model-View-Controller (MVC) ist ein Architekturmuster, das häufig in der Softwareentwicklung verwendet wird. Es unterteilt eine Anwendung in drei miteinander verbundene Teile: das "Model", die "View" und den "Controller". - Das "Model" repräsentiert die Daten und die Geschäftslogik der Anwendung. Es verwaltet die Daten und ist verantwortlich für alle Änderungen und Aktualisierungen an diesen Daten. - Die "View" ist die Darstellung der Daten, also das, was der Benutzer sieht und mit dem er interagiert. Sie stellt die Daten dar, die im Model gespeichert sind. - Der "Controller" ist das Bindeglied zwischen Model und View. Er verarbeitet die Benutzereingaben und aktualisiert das Model und die View entsprechend.
Bei P Aufgaben handlet es sich um optionale Praxisaufgaben. Diese Aufgaben sollen ihnen die Vorlesungsinhalte durch Projekte näher bringen und sind nicht Teil der Prüfung.
Weist du was das bedeutet? Genau, du musst sie nicht machen. Aber wenn du sie machst, dann kannst du sie mir gerne zeigen.
Nein Spass, bitte zeig sie mir nicht. Ich kann kein SWT mehr sehen :'(
a) Beschreiben Sie den Kommunikationsablauf zwischen den Komponenten im MVC-Muster, nachdem ein Nutzer Daten in der View geändert hat.
b) In einem Unix ähnlichen System gibt es eine Reihe an Programmen und Tools die alle eine ganz bestimmte Aufgabe erfüllen. Mit dem besonderen | Operator können die Ausgaben von einem Programm an ein anderes in Textform weitergeleitet werden.
c) Beschriften Sie die folgende Skizze so, dass sie die konzeptionelle Sicht der Client-Server Architektur darstellt.