Alles Flashcards
Typsicherheit
- Es gibt Programmiersprachen mit oder ohne Typsicherheit
- Bei Variablen-, Funktions-, Methoden- oder Prozedurdeklaration wird der (Daten)Typ festgelegt
- Kompiler/Interpreter weiß, ob Anweisungen gültig sind
- Mehr Wartbarkeit bei größeren Programmen
- Jedoch weniger Flexibilität
Syntax
- Jede Programmiersprache benötigt eine Syntax
- Syntax besteht aus
- Wortschatz. (Bsp. Wortschatz für Addition: (1, 2, 3, 4, 5, 6, 7, 8, 9, 0, +, = )
- Grammatik. (Bsp. Syntax für Addition: oder beides syntaktisch korrekt)
- Backus Naur Form (Möglichkeit, Wortschatz und Grammatik zu schreiben)
Objektorientierte Programmierung
Wertemanagement
- Einfache Datentypen, zusammengesetzte Datentypen (Listen, Arrays) und komplexe Datentypen (Klassen)
- Klasse kapselt interne Struktur (Attribute)
- Zugriff nur auf Methoden
- Übergabe mit by reference
Objektorientierte Programmierung
Spezialität
Vererbung
- Hohe Wiederverwendbarkeit durch Vererbung
- Geerbte Methoden lassen sich anpassen/ersetzen [Bsp.: super.getName();]
- Vererbung ist auch mehrstufig erlaubt
- Teilweise auch Multiple Vererbung möglich (je nach Sprache)
Funktionale Programmiersprachen
Modularisierung
- Funktionale Programmiersprachen kennen nur Funktionen zur Modularisierung
- Funktionen besitzen einen Rückgabe Datentyp und eine(n) Eingabeparameter
- <datentyp> <name> (<datentyp> <name>, ...) { }</name></datentyp></name></datentyp>
Bibliotheken
- Jemand anderes schreibt eine Bibliothek
- Man selbst oder jemand anderes nutzt die Bibliothek
- Nebeneffekt: Nebenläufige Ausgaben
- Modulbibliotheken oft wichtiger, als korrekte Programmiersprache
Parallele Programmierung und Objektorientierung
- Was ist parallel?
- Unterscheidung zwischen Programmablauf und Objektstruktur schwierig
- Reentranter Code (Selber Code wird von zwei Threads [nacheinander] durchlaufen)
- Exklusiven Zugriff sichern (Globaler Speicher und Attribute)
- Asynchrone Kommunikation
- Callback
Datenlebenszeit
- Lokale Variablen sind solange gültig, bis Block verlassen wird
- Globale Variablen sind bis Ende der Laufzeit gültig
- Bei automatischer Speicherverwaltung werden Referenzen gezählt, wie oft Variablen auf Speicher zeigen
- Sind keine Referenzen vorhanden, wird Speicher durch Garbage Collector freigegeben
- Bei Laufzeitumgebungen sind mögliche Lebenszeiten: Application, Session, Request, View
Mocks
- Sind primitive Testobjekte für Unit Tests
- Schnittstelle zu Umgebung von Teilsystemen von objektorientierten Softwaresystemen ermittelbar
- Simulation der Schnittstellen durch geeignete Objekte
- Austausch der Schnittstellenobjekte durch Factories oder Injection
- Folgen dem Delegate Pattern, Factory Pattern oder Injection
Datensichtbarkeit
- Legt Sichtbarkeit von Variablen, Funktionen, Methoden oder Prozeduren fest
- Globale Sichtbarkeit = sichtbar von jeder Stelle im Programm
- Lokale Sichtbarkeit = sichtbar nur vom aktuellen Modul
- Bps.: public, private, protected, package private, friend
Von Vererbung hin zu Delegation
- Sicht als modellierte Realität (Vererbung denkbar)
- Sicht als Datentyp (Datenobjekt als Datentyp)
- Sicht als Schnittstellenprovider (Funktionalität in Klasse für saubere Schnittstelle)
- Sicht als Nachrichtennetz (Methodenaufruf ist eine Nachricht)
Funktionale Programmiersprachen
Wertemanagement
- Nur lokale Variablen und Parameter
- Einfache Datentypen
- Referenzen auf Datenwerte (auf Funktionen / Lambda-Ausdruck)
- Felder und Strukturen
Aufbau Klassendiagramm
Klassenname
Attribute (+ Public, #Protected)
Methoden (- Private, ~Package)

Paradigmen der Einbettung in Laufzeitsysteme – Apps
Inversion of control
- Designpattern (Kann für Architektur verwendet werden)
- Hollywood Prinzip: „Don´t call us, we call you“
- Zugriff auf inhaltliche Dinge nicht erlaubt
- Sag mir deine Update-Methode, dann rufe ich diese auf, wenn erforderlich
- Grundprinzip: Observer Pattern
- Pattern muss nicht innerhalb der Programmiersprache gelöst werden
- Gutes Beispiel dafür, dass Design Pattern als Sprache gesehen, neue Möglichkeiten eröffnen
- Bsp.: Nummer einer Dame geben und auf Anruf warten
Datenübergabe zwischen Modulen
- By value
- Übergibt eine Kopie des Übergabeparameters (primitive Datentypen)
- By reference
- Parameterübergabe gibt nicht den Inhalt der Variable, sondern die Adresse im Speicherbereich.
Kompilieren
- Übersetzer/Kompiler erhält Quellcode
- Quellcode wird einmalig in Maschinensprache übersetzt
- Ausführbares Programm entsteht
- Danach kein Kompiler nötig (zur normalen Programmnutzung)
- Crosscompiler unterstützen mehrere Plattformarten
Datentypen
- Definieren erlaubte Wertemengen und Operationen
- Einfache Datentypen (Bsp.: int, char, double, bool)
- Zusammengesetzte Datentypen (Bsp.: Listen, Arrays, struct)
Datenmanagement
- Informatik repräsentiert eine Information in eine andere Repräsentation
- Bestandteil von Information sind Daten, die mit Programmen umgeformt werden
- (weitere) Kategorisierung von Programmiersprachen:
- Datensichtbarkeit
- Datenübergabe
- Datenlebenszeit
Prozedurale Programmiersprachen
Modularisierung
- Prozedur modularisiert Programmcode
- Datenwerte immer global erreichbar
- Keine Übergabeparameter, da alles global
Schema Anwendungsfalldiagramm

Agile Softwareentwicklung
Wieso erst seit ein paar Jahren?
- Es gab keine (Open Source)-Software zum automatischen Testen
- Ständiges Testen war zu teuer, da nur manuell getestet wurde
Schema Aktivitätsdiagramm

Objektorientierte Programmierung
Spezialität
Polymorphismus
- Betrachtet die Benutzung eines Objekts und der Attribute und Methoden der Klasse
- Nimmt, abhängig von der Verwendung, unterschiedliche Datentypen an (Überladung)
- Tritt in Verbindung mit Vererbung und Schnittstellen auf
- Erst bei Laufzeit klar, welche Methode tatsächlich aufgerufen wird
Designpattern
- Stellt dar, wie ein Teilobjekt in einer Software strukturiert wird.
- Ist ein Vorschlag wie Funktionalität umgesetzt werden kann.
Objektorientierte Programmierung
Datensichtbarkeit
- Kapselung der Daten um Sichtbarkeiten zu regeln
- Klassen ohne direkten Bezug können keine Daten sehen
- Bsp.: public, private, packagePrivate
UML (Unified Modelling Language) (allgemein)
- Unified Modelling Language (Vereinheitliche Modellierungs Sprache)
- Sammlung von Diagrammen
- Mehrere Diagramme, kein zwingender Zusammenhang
- Darstellung von Struktur und Verhalten
- Struktur: Definition von Klassen
- Verhalten: Wie soll das Programm reagieren?

Prozedurale Programmiersprachen
Spezialität
- Zustand in globalen Variablen
- Zustandsmaschinen gut umsetzbar
- Bei Ruhezustand wird Speicher auf HDD kopiert. Globale Variablen somit gesichert.
Delegate
- Delegate auf Seiten des Clients
- Kümmert sich um den Ablauf, wie etwas umgesetzt wird
- Übernimmt die Kommunikation zu dem richtigen Server
Interpretieren
- Programmcode wird auf der jeweiligen Maschine interpretiert
- Interpreter arbeitet Anweisung für Anweisung ab und interpretiert diese
- Sich selbst modifizierende Programme möglich
- Programmcode direkt wiederverwendbar
Lambdaausdrücke in Java
?
Singelton
- Idee: es gibt nur eine Instanz von einem Objekt. Von überall sichtbar.
- Hohe Effizienz
- Wie eine globale Variable
- Gefährlich: Nebenläufigkeit

Objektorientierte Programmierung
Destruktor
- Spezielle Methode einer Klasse
- Wird vom System (Garbage Collector) aufgerufen, wenn Objekt nicht mehr benötigt wird
- Gibt Speicher wieder frei
Paradigmen der Einbettung in Laufzeitsysteme – Apps
Bibliotheken
- Ablaufkontrolle liegt vollständig im nutzenden Programmcode
- Programmcode in Bibliothek kann im laufenden Betrieb das Programm nicht verändern
Schema Sequenzdiagramm

Facade
- Facade auf Seiten des Servers
- Nimmt Anfragen entgegen und leitet diese an richtigen Adressaten weiter
Maschinenplattform / Virtuelle Maschine / Emulator
Virtuelle Maschine
- Unterstützen beliebige Betriebssysteme/Maschinen
- Abstrahiert darunterliegende konkrete Maschine
- Quellcode wird für virtuelle Maschine entwickelt
- Bsp.: Java
Unit Tests
- Programmierte Tests für „kleine“ Einheiten
- Benötigt umliegende Klassen/Objekte für Tests
- Im Bereich der Fachlogik
- Bsp.: Objekt wird getestet, Versucht setter und getter auszuführen
Schema MVC (Model View Controller)

Kontrollstrukturen
- Dienen der Steuerung des Ablaufs in einem Programm
- Bsp.: if - then- else, goto, for, while
Objektorientierte Programmierung
Konstruktor
- Baut die interne Struktur beim initialisieren auf
- Konstruktor ist eine spezielle Methode, die nicht explizit aufgerufen werden kann
- Bsp.: Notwendigkeit, wenn Klasse dauerhaft Zugriff auf Datei haben muss.
Objektorientierte Programmierung (Allgemein)
- Vermischt Prinzipien von funktionaler und prozeduraler Programmierung
- Für Objekt: definierte Menge an Speicherwerten und Methoden werden festgelegt
- Kein Aufruf aus zentralem Ablauf, sondern durch Delegation in gegenseitiger Verschachtelung
Maschinenplattform / Virtuelle Maschine / Emulator
Maschinenplattform
- Maschinencode wird direkt auf einer Maschine ausgeführt, für die entwickelt wurde
- Meist, wenn auf derselben (Maschinen-)Plattform entwickelt wurde
- Bsp.: Windows 64 Bit Programm wurde unter Windows 64 Bit entwickelt
Interfaces
- Unterschied Klasse – Interface
- Interface stellt keinen Speicherplatz zur Verfügung
- Kennt keine Attribute
- Unterschied Abstrakte Klasse – Interface
- Abstrakte Klasse ist eine Klasse, kann aber nicht instanziiert werden
- Methoden sind zulässig, auch abstrakte Methoden (ohne Implementierung)
Refactoring
- Bestehenden Quellcode jeden Tag verbessern
- Objektorientierung dient der Kapselung von Einheiten Reichweite von Änderungen überschaubar
- Geringe Auswirkungen auf das gesamte System, da Reichweite nur in direkter Nachbarschaft
- Weitere Codeteile durch Unit Tests abgesichert
Funktionale Programmiersprachen
Ableitungen
- Eignet sich sehr gut für rekursive Datentypen
- Gefahr von Speicherüberlauf (Stack overflow)
- Kaum Bibliotheken für Benutzeroberflächen
- Heutige Verwendung: Funktionale Programmteile in prozeduralen oder objektorientierten Programmiersprachen, wo sinnvoll. Bsp.: Lambda in Java)
Charakterisierung von Programmiersprachen
Kompiliert / Interpretiert
Kompiliert
Vorteile
- Liegt nach Kompilierung in maschinenlesbarem Format vor. -> schneller, benötigt weniger Speicher
- Kunde hat keinen Zugriff auf Code (Copyright)
Nachteile
- benötigt Kompiler
- Maschinencode kann nur Maschine lesen
- Nur für die kompilierte Zielplattform
Interpretiert
Vorteile
- Durch minifier wird Code kleiner
- Durch Obfusikation wird Code unleserlich gemacht
- Man kann zur Laufzeit Quelltext verändern
Nachteile
- Benötigt Interpreter
- Wird zur Laufzeit interpretiert
- In der Regel langsamer
- Quellcode liegt dem Kunden vor
Prozedurale Programmiersprachen
Wertemanagement
- Alle Datenwerte sind global erreichbar
- Trennung in Bereich Daten und operierende Prozeduren
- Datenübergabe by reference nicht notwendig
- Einfache Datentypen
- Zusammengesetzte Datentypen
Schema Observer (Klassendiagramm)

Semantik
- Bezieht sich auf den Sinngehalt
- Ist nicht immer eindeutig (Bsp.: 4711 oder 0815, Zahlen oder andere Bedeutung?)
- Man sollte sich auf eine Sinnhaftigkeit einigen (Bsp.: Maurer interpretiert Plan von Architekten)
MVVM (Model View ViewModel)
- Nutzt funktionale Trennung des MVC und Datenbindung, um lose Kollung zu erreichen
- Model: Datenzugriffsschicht für Inhalte (Anzeige/Manipulation)
- View: GUI Elemente, leitet Eingaben an ViewModel weiter
- ViewModel: UI-Logik und Bindeglied zwischen View und Model. Darf keine Kenntnis der View besitzen.
Annotationen
- PO(J)O
- Technik -> Domain
- Aspektorientierung
Objektorientierte Programmierung
Modularisierung
- Klassen besitzen Attribute und Methoden
- Eine Instanz des Datentyps wird als Objekt bezeichnet
- Nach Aufruf des Konstruktors wird ein neues Objekt im Speicher angelegt
- Objekte delegieren gegenseitig
Dreischichtarchitektur
Präsentationsschicht
- Bsp.: Windows Fenster in Windowssystemumgebung
- Kennt Persistenzschicht nicht
Businesslogik
- Beschreibt mein Geschäft
- Fachlogik
Persistenzschicht
- Kommuniziert mit Datenbank
Paradigmen der Einbettung in Laufzeitsysteme – Apps
Unterschied Application / App
- Application ist eine Standalone Anwendung, nahe am Rechner mit eigener Methode
- App ist eine Anwendung in einer Laufzeitumgebung. Kleinere Anwendungen nutzen Funktionen von Ökosystem
Paradigmen der Einbettung in Laufzeitsysteme – Apps
Frameworks
- Komplexe Strukturen werden durch den Programmcode genutzt
- Ablaufkontrolle weitreichend beim Programmcode
- Beinhaltet Objekte und Klassen
- Holt Bibliothek von Klassen, die miteinander etwas zu tun haben
- Baut Speicher und Funktion auf
Paradigmen der Einbettung in Laufzeitsysteme – Apps
Laufzeitsysteme
- Programmcode klinkt sich als Gastsystem in laufendes LZS ein
- Ablaufkontrolle weitreichend beim LZS (LZS kann auf meine App Einfluss nehmen)
- Lifecycle für Gastsystem ist zu beachten (Wo/wann steige ich in mein Programm ein? main Methode)
- Bsp.: Lifecycle „Servlet“ (Java Umfeld für WebServices Anfragen)

Paradigmen der Einbettung in Laufzeitsysteme – Apps
Context and Dependency Injection
- Designpattern
- CDI bietet Möglichkeit, zur Laufzeit von einer Klasse aus, abhängige Klassen in eine nutzende Klasse von außen zu injizieren
- Vorteil: Entkopplung
- Constructor Injektion
- Setter Injection
- Interface Injection (Über Annotation. Biete Möglichkeit um zu schauen, was verwendet werden soll. Bsp.: Interface, welcher Logger benutzt werden soll)
- Problem: Codenavigation in IDE´s (Wegen Rückverfolgbarkeit nicht zurückspringen)
Prozedurale Programmiersprachen
Ableitungen
- Hoher Abstimmungsaufwand bei verteilten Teams
- Hohe Komplexität und wenig Klarheit für den Einzelnen
- Never change a running system –> Seiteneffekte unbekannt
- Wird genutzt für arbeiten „am System“ (direkt in den Speicher)
Maschinenplattform / Virtuelle Maschine / Emulator
Emulator
- Zielmaschine wird auf Entwicklungsmaschine emuliert
- Ähnlich zu Virtuellen Maschine
- existiert jedoch in tatsächlicher Hardwareform
- Maschinencode wird langsamer abgearbeitet als bei virtuellen Maschinen
Domain Driven Design
- Schwerpunkt des Softwaredesigns liegt auf Fachlichkeit und Fachlogik
- Entwurf komplexer fachlicher Zusammenhänge sollte auf Modell dem Fachmodell basieren
- Bsp.: Designpattern „ActiveRecord“
Programmieren
- Einzelne Bereiche werden in Module/Prozeduren/Funktionen/Methoden zerteilt
- Schritte: Programmieren, Definieren eines Moduls, Benutzen des Moduls, (Deklarieren [beschreibt Datentyp])
- (Programm-)Einstiegspunkte sind zu klären
Closures in JavaScript
- Eine Closure (oder Funktionsabschluss) ist eine anonyme Funktion, die Zugriffe auf ihren Erstellungskontext enthält. Beim Aufruf greift die Funktion dann auf diesen Erstellungskontext zu. Dieser Kontext (Speicherbereich, Zustand) ist außerhalb der Funktion nicht referenzierbar, d. h. nicht sichtbar.
- Eine Closure beinhaltet zugleich Referenz auf die Funktion und den von ihr verwendeten Teil des Erstellungskontexts – die Funktion und die zugehörige Speicherstruktur sind in einer Referenz untrennbar abgeschlossen (closed term). Es ist vergleichbar mit einem Objekt mit „private“-Attributen und „public“- Methode(n): es enthält eine (implizite) Identität, einen Zustand und ein Verhalten.
- In der Programmiersprachen-Syntax wird dies oft durch zwei verschachtelte Funktionen erreicht – die Hauptfunktion wird von einer weiteren Funktion eingeschlossen („abgeschlossen“). Diese „Abschluss“-Funktion enthält die benötigte Speicherstruktur (siehe Beispiele unten) und liefert die Referenz – die Closure.
Verteile Objekte
- Stub (Zigarrenstummel)
- Skeleton (hat sich nicht durchgesetzt)
- Best practise
- Trennung von Datenverteilung & Methodenverteilung
Funktionale Programmiersprachen
Spezialität
- Vorteile
- Explizite Datenweitergabe seltenes Auftreten von unerwarteten Seiteneffekten. Kapselung der Daten ist stark.
- Rekursion erlaubt natürlichen Umgang mit rekursiven Datenstrukturen
- Mit Rekursion wird Gedanke der Delegation gelebt
- Prüfen ob Funktion etwas erledigen kann
- Wenn ja, dann wird Funktion ausgeführt
- Wenn nicht, dann wird mit anderen Startbedingungen delegiert
Objektorientierte Programmierung
Ableitungen
- Sichtweise entspricht unserer menschlichen Erlebniswelt
- OOA (Objekt orientierte Analyse) / OOD (Objekt orientiertes Design)[als Ergänzung zur OOA]