programmierung
und datenbanken

Joern Ploennigs

Softwareentwurf

Midjourney: Waterfall in chinese mountain range

Wiederholung: Hörsaalfrage¶

Welche Datentypen gibt es in Python?

No description has been provided for this image
Midjourney: A python programming a robot

Wiederholung: Datentyp - Python¶

Python vereinfacht einige Datentypen.

No description has been provided for this image

Wiederholung: Hörsaalfrage¶

Was sind Objekte? ng, Generalisierung, Kapselung, Polymorphismus?

No description has been provided for this image
Midjourney: Object oriented man

Wiederholung: Objektorientierte Programmierung¶

📘 Definition: Objektorientierte Programmierung

Objektorientierte Programmierung (OOP) ist ein Programmierparadigma das annimmt, dass ein Programm ausschließlich aus Objekten besteht, die miteinander kooperativ interagieren.

Jedes Objekt verfügt über:

  • Attribute (Eigenschaften): Definiert den Wert über den Zustand eines Objektes.
  • Methoden definieren die möglichen Zustandsänderungen (Handlungen) eines Objektes.

Wiederholung: Hörsaalfrage¶

Was sind die vier Grundelemente eines Programms?

No description has been provided for this image
Midjourney: Fundamentals of a Programming Language

Wiederholung: Programmelemente¶

  • Wir kennen alle grundlegenden Grundelemente eines Programms:

    • Statements
    • Funktionen
    • Verzweigungen
    • Schleifen & Rekursion
  • Wir wissen wie man Algorithmen plant und diese Elemente kombinieren kann.

Ablauf¶

Modellierung mit Objekten¶

  • Unsere Wahrnehmung und unser Denken besteht darauf Objekte zu erkennen. Das setzt voraus, dass wir das Objekt von anderen Objekten trennen können (z.B. Stuhl und Tisch)
  • Das Nachbilden dieser Wahrnehmung und dieses Weltverständnisses im Computer, nennt man Modellierung.
  • Da unsere Wahrnehmung auf Objekten basiert, ist es naheliegend für die Modellierung auch Objekte zu nutzen.
  • Die Objekte in der Welt interagieren, dieses Verhalten müssen wir auch modellieren.
📘 Definition: Modell

Ein Modell ist eine abstrakte, vereinfachte Abbildung eines Systems (meist aus der Realität).

Hörsaalfrage¶

Was haben diese Elemente gemein?

No description has been provided for this image

Hörsaalfrage¶

  • Das sind alles geometrische Objekte

  • Sie bestehen alle aus Punkten, die mit Linien verbunden sind

  • Das können wir bei der Modellierung ausnutzen und Klassen so definieren, dass sie die Gemeinsamkeit ausnutzen

No description has been provided for this image

Objektorientierter Softwareentwurf¶

📘 Definition: Objektorientierten Softwareentwurf

Objektorientierten Softwareentwurf, wird ein Programm so entworfen, dass es nur aus Objekten besteht.

  • Der Softwareentwurf gleicht dabei stark dem Vorgehen von Ingenieuren beim Entwurf von Plänen
  • Die übliche Modellierungssprache sind UML Diagramme.
  • Man modelliert im Entwurf wie:
    • wie Objekte in Form von Klassen definiert sind,
    • welche Attribute und Methoden sie besitzen,
    • wie diese Klassen aufeinander aufbauen (Vererbung),
    • als auch wie sie miteinander in statischer Beziehung stehen (Referenzen)
    • und wie sie dynamisch interagieren (Verhalten)

Referenzen¶

  • In Programmen stehen Objekte meist im Zusammenhang. z.B. besteht eine Linie aus zwei Punkten.
  • Diesen Zusammenhang zweier Objekt-Klassen bezeichnet man als Referenz.
  • Referenzen in Python erstellt man als Attribut vom Datentyp des anderen Objektes.
class Line:
    def __init__(self, start, end):
        self.start = start
        self.end = end

    def length(self):
        return self.start.distance(self.end)

Vererbung¶

  • Gleiche Objekte teilen oft auch ähnliche Eigenschaften und Methoden. z.B. bestehen alle geometrischen Elemente aus Punkten die mit Linien verbunden sind
  • Um diese Attribute und Methoden nicht jedes mal neu definieren zu müssen dabei ggf. Fehler zu machen, gibt es die Vererbung in der OOP
  • OOP erlaubt das Definieren von spezialisierten Unterklassen, bzw. von generalisierten Oberklassen.
  • Die Unterklasse (Spezialklasse) besitzt die Methoden und Attribute der generalisierten Oberklasse (Basisklasse).
  • Angelehnt an die Genetik auch „Vererbung" genannt

Beispiel Vererbung¶

No description has been provided for this image

Polymorphie¶

  • Ein Objekt einer Spezialklasse kann stets auch als Mitglied der Basisklasse betrachtet werden.

  • Die Spezialklasse kann die geerbten Methoden/Attribute der Basisklasse überschreiben und somit umdefinieren.

  • In statisch typisierten Sprachen gilt außerdem: In einer Variablen die ein Objekt der Basisklasse aufnehmen kann, kann auch ein Objekt einer abgeleiteten Klasse gespeichert werden.

Datenkapselung¶

  • Ziel der Datenkapselung ist es Kontrolle darüber zu haben, welche Attribute lesbar oder beschreibbar sind und wie dies geschehen kann
  • Ferner kontrolliert man ob Attribute nur lesbar oder auch schreibbar sind. Dafür werden Attribute als privat deklariert und sind dann nur durch Get-Funktionen lesbar und durch Set-Funktionen veränderbar.
  • Hierfür deklariert man Attribute oder Methoden als:
    • privat – Nur die Instanz der gleichen Klasse kann zugreifen
    • protected – Nur die Instanz der gleichen Klasse oder Unterklasse kann zugreifen
    • public – Alle können zugreifen

Dynamik in Klassen¶

  • In der OOP wird angenommen, dass Klassen statisch sind und es keine anderen als die in der Klasse definierten Attribute und Methoden gibt.

  • Python bietet ein höheres Maß an Dynamik als andere Programmiersprachen:

    • Dynamische Typisierung von Variablen
    • Dynamisches Binden von Methoden und Attributen
    • Wir können sogar Attribute und Methoden selbst hinzufügen, wenn diese nicht in der Klasse definiert sind.
    • So können z.B. zur Laufzeit Referenzen zwischen Objekten schaffen die im vordefinierten Datenmodell keinen Bezug haben.

Objektorientierte Programmierparadigmen¶

Vererbung Generalisierung Polymorphismus Kapzelung
Attribute und Methoden von Elternklassen werden an Kinder vererbt. Das hilft Redundanzen und Fehler zu vermeiden. Gemeinsamkeiten werden in generalisierten Eltern-Klassen implementiert Kinderklassen können Methoden überschreiben und somit umdefinieren. Kapselung von Daten und Methoden in Objekten ist ein Schutzmechanismus, um schadhafte Änderungen einzuschränken.

Unified Modelling Language - Grundlagen¶

  • UML (Unified Modelling Language) ist ein ISO-Standard zur Beschreibung von Softwareentwürfen
  • Er wird genutzt für den Entwurf, Ausschreibung, Implementation und Dokumentation von:
    • Funktionalitäten
    • Strukturen
    • Businessprozessen
    • Nutzerinteraktionen

Der Standard umfasst 13 Diagrammtypen, die typischsten:

  • Klassendiagramme (Für die Klassen- und Datenstruktur)
  • Programmablaufplan (Für allgemeine Abläufe und Algorithmen)
  • Sequenzdiagramme (Für Interaktionen)
  • Use-Case Diagramme (Für Nutzer und Nutzfälle)

UML Klassendiagramm¶

  • Das am häufigsten verwendete Diagramm im objektorientierten Modellieren

  • Im Klassendiagramm modelliert werden:

    • Klassen mit: Attributen, Methoden
    • Beziehungen
    • Hierarchien & Vererbungen

Klassendiagramm – Vererbung¶

  • Vererbung wird in UML durch ein Referenz mit einem gefüllten Dreieck "▲" bei der Oberklasse gezeichnet.

  • Um zum Beispiel auszudrücken, dass Triangle, Tetragon und Pentagon Unterklassen des Polygons sind, können wir zeichnen.

No description has been provided for this image

Klassendiagramm - Referenzen¶

  • Referenzen werden in UML mit Linien zwischen Objekten gekennzeichnet. Die Art der Linie und des Pfeils geben den Typ der Referenz an.

  • Man unterscheidet in UML die Referenzen in der Art der Besitzverhältnisse:

    • Aggregated - ein Objekt ist Teil eines anderen und kann ohne ihn existieren
    • Composition - kann nicht ohne diesen existieren
    • Assoziation - komplett unabhängig
  • Zahlen an den Referenzen geben die Multiplizität an, also wie viele Objekte in dieser Relation im Zusammenhang stehen.

No description has been provided for this image

Klassendiagramm - Gesamtbeispiel¶

  • Klassendiagramme können recht schnell groß werden

  • Sie eignen sich sehr gut um das (Daten-) Modell darzustellen

No description has been provided for this image

Anwendungsbeispiel – BIM (Building Information Models)¶

  • Bauzeichnungen werden heutzutage als IFC (Industry Foundation Class) gespeichert
  • IFC ist ein objektorientiertes Model, mit Vererbung, Spezialisierung, Generalisierung und Polymorphismus
  • Es wird u.a. in UML dokumentiert

Polygon Klassen

Entwurfsvorgehen¶

No description has been provided for this image
Midjourney: Software Waterfall

Softwareentwurf¶

  • Software wird selten allein entwickelt, sondern oft im Team über einen längeren Zeitraum.
  • Dafür wird ein Projektplan benötigt, der beschreibt wie die Software arbeitsteilig entwickelt werden soll
  • Das Erstellen dieses Projektplans nennt man Softwareentwurf
  • Der Ablauf ähnelt stark dem Entwurfsvorgehen im Umwelt- und Bauingenieurwesen
  • Der Projektplan umfasst:
    • den Klassenentwurf (Bauplan)
    • die Programmiervorgehen (Bauablaufplanung)

Softwareentwurf - Phasen¶

  • Anforderungsdefinition – Definition welche Funktionen und Randbedingungen realisiert werden

  • Entwurf

    • Klassenentwurf der Software
    • Ausführungsplanung – Was wird wann, durch wen, und wie implementiert
  • Ausführung

    • Implementation – Programmieren der einzelnen Klassen & Module
    • Integration – Zusammenführen der Module zur fertigen Lösung
  • Abnahme – Test des fertigen Softwareprogramms

    • Modultest – Unit-Test von Modulen
    • Integrationstest – Kombination von Module testen
    • Systemtest – Gesamtheit der Module testen

Vergleich: Software- vs. Bauingenieurwesen¶

Softwareentwurf

  • Anforderungsdefinition: Definition welche Funktionen und Randbedingungen realisiert werden

Bauingeneurwesen

  • Ausschreibung: Dokumentieren welche Funktionen und Randbedingungen das Bauwerk erfüllen
  • Entwurf
    • Modulentwurf – Definition welche Teile die Software hat
    • Klassenentwurf – Definition in welche Klassen die Software strukturiert ist
    • Ausführungsplanung – Was wird wann, durch wen, und wie implementiert
  • Entwurf
    • Architektur und Grobentwurf – Definition wir das Bauwerk grob strukturiert ist
    • Fein- und Gewerkplanung - Definition wie Teile und die Gewerke umgesetzt werden
    • Ausführungsplanung – Was wird wann, durch wen, und wie gebaut

Vergleich: Software- vs. Bauingenieurwesen (Fortsetzung)¶

Softwareentwurf (Fortsetzung)

  • Ausführung
    • Implementation – Programmieren der einzelnen Klassen & Module
    • Integration – Zusammenführen der Module zur fertigen Lösung

Bauingenieurwesen (Fortsetzung)

  • Ausführung
    • Einzelne Gewerke werden umgesetzt
    • Gewerke im Bau integrieren, wie Energie und Wasser mit Klima integrieren
  • Abnahme
    • Modultest – Unit-Test von Modulen
    • Integrationstest – Kombination von Module testen
    • Systemtest – Gesamtheit der Module testen
  • Abnahme
    • Abnahme einzelner Gewerke
    • Test mehrerer Gewerke gemeinsam
    • Gesamtbauwerk abnehmen

Lineare Methode - Wasserfallmethode¶

  • Traditionelles Modell das häufig noch in der Ausschreibung großer Systeme gefordert wird

  • Entwicklung ist in mehrere sequenzielle Schritte aufgeteilt und jeder Schritt muss vor dem nächsten beendet werden

  • Benutzerbeteiligung nur in der Anforderungsdefinition

  • Jeder Aktivität wird dokumentiert → Gut geeignet für Ausschreibungen (nach der Anforderungsdefinition oder dem Entwurf, ISO 9000)

No description has been provided for this image

V-Methode¶

  • Primär verwendet bei der Entwicklung sicherheitskritischer Software (Auto, Flugzeug, etc.)

  • Separiert Entwicklungs- (linke Seite) und Testaktivitäten (rechte Seite)

  • Tests werden schon im Entwicklungsarm definiert

  • Ziel einer hohen Testabdeckung

  • Benutzerbeteiligung in der Anforderungsdefinition und im Abnahmetest

No description has been provided for this image

Agile Methode¶

  • Moderne Methode um mit sich an ständig ändernden Anforderungen anpassen

  • Ziel der schrittweisen Entwicklung der Lösung, um Aufwand und Komplexität einzelner Schritte in Grenzen zu halten

  • Startet mit einer einfachen und ausbaufähigen Implementierung (MVP – Minimal Viable Produkt)

  • Schrittweise Erweiterung und Verbesserung des Produktes mit regelmäßigen Releases (meist alle 3 Monate)

  • Entwurfsfehler der ersten Iterationen können zu kompletten Neuentwurf führen

No description has been provided for this image

fragen?

programmierung
und datenbanken