diff options
Diffstat (limited to 'colloq/main.tex')
-rw-r--r-- | colloq/main.tex | 269 |
1 files changed, 269 insertions, 0 deletions
diff --git a/colloq/main.tex b/colloq/main.tex new file mode 100644 index 0000000..212973a --- /dev/null +++ b/colloq/main.tex @@ -0,0 +1,269 @@ +\documentclass[a4paper, 11pt]{article} + +% Packages +\usepackage[a4paper, inner=2.5cm, outer=2.5cm, top=2.5cm, bottom=2.5cm, bindingoffset=0cm]{geometry} +\usepackage{amsmath,amsthm,amssymb,amsfonts} +\usepackage{graphicx} +\usepackage[colorlinks=true, allcolors=blue]{hyperref} +\usepackage{fontspec,xunicode,xltxtra} +\usepackage{biblatex} +\usepackage{csquotes} +\usepackage{svg} + +% GERMAN +\usepackage[ngerman=ngerman-x-latest]{hyphsubst} +\usepackage[ngerman]{babel} + +% ENGLISH +%\usepackage[USenglish]{babel} +%\usepackage{hyphsubst} + +% Figures +\graphicspath{{figures/}} + +% Citations +\addbibresource{bib/main.bib} + +\begin{document} + +\title{\vspace{-2.0cm}CT Präsentationsprüfung\\Zusammenfassung} +\author{Marvin Borner} +\date{\today} + +\maketitle + +%\tableofcontents + +\section{Präsentation} +\subsection{Grober Aufbau} + +\begin{enumerate} + \item Deckblatt + \item Inhalt (Gliederung - Beschreiben) + \item Problemstellung + \item Grundlagen + \item Hauptteil + \item Schluss/Fazit + \item IDE/Demonstration +\end{enumerate} + +\subsection{Hinweise} +\begin{itemize} + \item Keine dunkle IDE nutzen (sieht man nicht gut auf dem Beamer - 2NP Abzug!) + \item Nicht monoton reden (=> Motiviert sein!) + \item max. 12min Vortrag; 8min Kolloquium/Fragen +\end{itemize} + +\section{Kolloquium Themen} + +\subsection{Patterns (Entwurfsmuster)} +Muster für wiederkehrende Entwurfsprobleme in der Softwarearchitektur und -entwicklung => Vorlagen zur Problemlösung. + +Relevante Muster: +\begin{itemize} + \item \textbf{Drei-Schichten-Architektur} + \begin{itemize} + \item Überbegriff für viele verschiedene Architekturen + \item Reduktion von Komplexität (=> bessere Wartung) + \item Teilweise langsamer, da Daten häufig zwischen Schichten transportiert werden müssen + \item Typischerweise Präsentationsschicht (GUI; Presentation), Logikschicht (Steuerung; Logic) und Datenhaltungsschicht (Daten; Data) + \end{itemize} + \includegraphics[width=10cm]{threetier} + \item \textbf{MVC} + \begin{itemize} + \item Steht für \textit{Model-View-Controller} + \item Ziel: Flexibler Programmentwurf; offen für spätere Erweiterungen und Änderungen; Wiederverwendbarkeit einzelner Komponenten + \item Besitzt viele Abwandlungen + \item Aufbau + \begin{itemize} + \item Model: enthält Daten, die von der View dargestellt werden; benachrichtigt die View über Änderungen; unabhängig von View und Controller + \item View: Darstellung aller GUI-Elemente; unabhängig von Controller; Bekanntgabe an Controller mittels Listener; aktualisiert UI mittels Listener zu Controller + \item Controller: Verwaltet View und Model; bekommt UI-Interaktionen von View über Listener; \enquote{schickt} UI-Änderungen an Listener der View; \enquote{schickt} Änderungen von Daten an Listener des Models + \end{itemize} + \includesvg{mvc} + \end{itemize} + \item \textbf{MVVM} + \begin{itemize} + \item Steht für \textit{Model-View-ViewModel} + \item Variante des MVC; nutzt Datenbindungsmechanismen + \item Beispiel: C\# mit WPF (Window Presentation Framework) - \textit{Databindings und Interfaces S.83} + \item Trennt Darstellung und Logik + \item Im Gegensatz zu MVC muss man nicht für alles Controller implementieren => geringerer Implementierungsaufwand => bessere Testbarkeit + \item Durch drei einzelne Instanzen besser testbar (keine extra UI-Tests nötig) + \item Rollentrennung von UI-Designern und Entwicklern möglich (z.B. in Firmen) + \item Aufbau + \begin{itemize} + \item Model: \textit{Datenzugriffsschicht}; benachricht über Datenänderungen; führt Validierungen von Benutzereingaben durch; enthält gesamte \enquote{Geschäftslogik}; ist als einzelnes Element mit Unit-Tests testbar + \item View: Darstellung aller GUI-Elemente; Bindung zu Viewmodel; einfach austauschbar/modifizierbar/erweiterbar ohne alles andere zu zerstören + \item ViewModel: UI-Logik (Model der View); verbindet View und Model; tauscht Informationen mit Model aus; stellt der View Eigenschaften und Befehle zur Verfügung welche von der View and Elemente gebunden werden; hat keine Ahnung von Elementen der View + \end{itemize} + \includegraphics[width=15cm]{mvvm} + \end{itemize} +\end{itemize} + +\subsection{Projektmanagement} +\begin{itemize} + \item \textbf{Scrum} + \begin{itemize} + \item Strikte Rollen: Product Owner (priorisiert Anforderungen), Entwicklungsteam (verantwortlich für die Erreichung der Ziele), Scrum Master (kontrolliert Scrum-Ablauf und Kooperation) + \item User Stories: Anforderungen an das Produkt + \item Entwicklungsprozess ist in Iterationen (=> \textit{Sprints}) organisiert (brauchen max. 4 Wochen) + \begin{enumerate} + \item \textbf{Product Backlog}: Team bekommt priorisierte Liste von Anforderungen + \item \textbf{Sprint Planning}: Team wählt Teil der Anforderungen als Ziel für diesen Sprint aus (=> nutzbare Zwischen-Version nach Sprint: \textit{Inkrement}); Planung der Zeit, die der Sprint benötigen soll; Organisation: Wer macht was? + \item \textbf{Sprint Backlog}: Erstellung des für alle sichtbaren Scrum-Boards (To-Do, In-Progress, Done); Aufteilung der Anforderungen in kleinere Aufgaben (inklusive Tests, Dokumentationen, etc) + \item \textbf{Sprint}: Entwickler des Teams arbeiten an ihren jeweiligen Aufgaben + \item \textbf{Daily Scrum Meeting}: Max. 15min; täglicher Abgleich des Fortschrittes; Kontrolle und Hilfestellungen einzelner Entwickler; wird wiederholt, bis Sprint zuende ist + \item \textbf{Sprint Review}: Am Ende des Sprints; Überprüfung des Inkrements; ggf. Anpassung des Product Backlogs; zurück zum Produkt Backlog wenn alle Anforderungen erfüllt sind + \item \textbf{Sprint Retrospektive}: Am Ende des Sprints; Evaluation von Kritik/Verbesserungsvorschlägen am Ablauf + \item Zurück zum Sprint Planning für den nächsten Sprint - Sprints werden so lange wiederholt, bis alle Anforderungen erfüllt sind + \end{enumerate} + \includegraphics[width=15cm]{scrum} + \end{itemize} + \item \textbf{Wasserfall} + \begin{itemize} + \item Lineares Modell (im Gegensatz zum iterativen Scrum) + \item Sequenziell: Jede Phase muss beendet sein, bevor die nächste anfängt + \item Vorteile + \begin{itemize} + \item Einfach und verständlich + \item Klare Abgrenzung der Phasen + \item Einfache Möglichkeiten der Planung und Kontrolle + \item Bei stabilen Anforderungen: Klare Abschätzung von Kosten und Aufwand + \end{itemize} + \item Nachteile + \begin{itemize} + \item Klar abgegrenzte Phasen in der Praxis unrealistisch - häufig fließender Übergang + \item In der Praxis sind Rückschritte oft unvermeidlich - in Wasserfall nicht erlaubt + \item Unflexibel gegenüber Änderungen + \item Frühes Festschreiben der Anforderungen kann problematisch sein, wenn es Änderungen gibt (alles muss erneut durchgeführt werden) + \item Kein durchgehendes Testen (wie bei Scrum nach jedem Sprint), sondern erst wenn alles fertig ist (=> potentielle Katastrophe bei finaler Implementation) + \end{itemize} + \item Typische Phasen + \begin{enumerate} + \item Anforderungsanalyse (=> Lastenheft) + \item Systemdesign (=> Softwarearchitektur) + \item Programmierung/Unit-Tests (=> Software) + \item Integrations-/Systemtests + \item Auslieferung, Einsatz und Wartung + \end{enumerate} + \end{itemize} + \item \textbf{Test-Driven-Development} (TDD) + \begin{itemize} + \item Phasen bei Implementation neuer Features + \begin{enumerate} + \item Test schreiben, welcher die Spezifikation des Features voll erfüllt + \item Alle Tests durchlaufen lassen: Neuer Test muss fehlschlagen (Prävention eines fehlerhaften Tests, welcher immer besteht) + \item Einfachste Implementation, die den Test bestehen lässt (muss nicht schön sein, soll einzig und allein den Test bestehen lassen) + \item Alle Tests durchlaufen lassen: Alle Tests müssen jetzt bestanden sein + \item Refactor: Die neue Implementation lesbarer und wartbarer überarbeiten mit durchgehender Test-Kontrolle + \item Für jedes neue Feature wiederholen + \end{enumerate} + \item Vorteile + \begin{itemize} + \item Spezifikationen werden schon im Vorraus beachtet (=> weniger Fehleranfällig) + \item Implementations-Code wird automatisch möglichst klein, da dieser nur geschrieben wird, um die Tests zu bestehen + \item Weniger debugging, da mithilfe der Tests und guten VCS genau verfolgt werden kann, was schiefläuft + \item Besser wartbar, weil modularisiert und flexibel + \end{itemize} + \item Nachteile + \begin{itemize} + \item Vollständige Tests können vernachlässigt werden, weil Unit-Tests ein falsches Gefühl der Sicherheit verursachen können + \item Schlecht geschriebene Tests führen zu schwieriger Wartbarkeit und Implementation neuer Features + \item Zeitaufwändig da sehr viele Tests geschrieben werden + \item Großer Code-Overhead + \end{itemize} + \item Beispiele + \begin{itemize} + \item Tic-Tac-Toe: Test zu Korrektheits-Algorithmen (Diagonal, Horizontal, ...) + \item Taschenrechner: Tests für einzelne Funktionalitäten (z.B. Addieren, auch Dinge wie Overflows, etc) + \end{itemize} + \end{itemize} +\end{itemize} + +\subsection{Objektorientierte Programmierung} +\begin{itemize} + \item Klassen sind \textit{Baupläne} (vgl. Haus-Bauplan) + \item Objekte sind \textit{Instanzen} der Klassen (vgl. fertiges Haus) + \item \textbf{Sichtbarkeiten} + \begin{itemize} + \item \textbf{Public (+)}: Jede Klasse/Methode/... kann darauf zugreifen + \item \textbf{Private (-)}: Nur dieselbe Klasse hat Zugriff + \item \textbf{Protected (\#)}: Dieselbe Klasse und abgeleitete Klassen (mittels Vererbung) haben Zugriff + \end{itemize} + \item \textbf{Erzeugung} + \begin{itemize} + \item \textbf{Deklaration}: Primitiv \texttt{int a;} - Komplex \texttt{TolleKlasse b;} + \item \textbf{Initialisierung}: Primitiv \texttt{a = 42;} - Komplex \texttt{b = new TolleKlasse();} + \end{itemize} + \item \textbf{Generalisierung}: Enthält die Attribute, die alle Entitäten gemeinsam haben (z.B. abstrakte Klasse \texttt{Tier}) + \item \textbf{Spezialisierung}: Enthält nur die speziell zutreffenden Attribute und erbt von generalisierter Klasse (z.B. \texttt{Nashorn : Tier}) + \item \textbf{Konstruktor}: Wird bei Initialisierung der Klasse aufgerufen. Mit \texttt{: base(...)} kann der Konstruktor der Basisklasse (von der geerbt wird) aufgerufen werden + \item \textbf{Kapselung}: Nutzung der Sichtbarkeiten, um nur bestimmte Daten zugänglich zu machen. Häufig: Alle Attribute private, Zugriff über public getter/setter Methoden + \item \textbf{Static} + \begin{itemize} + \item Member: Statische Member (Attribute, Methoden) bleiben in jeder Instanz gleich + \item Klasse: Statische Klassen können nicht instanziiert werden (z.B. Console, Math). Alle Member sind ebenfalls static + \end{itemize} + \item \textbf{Virtual}: Virtuelle Methoden haben eine Implementation, welche von abgeleiteten Klassen (Vererbung) mit \texttt{override} überschrieben werden können + \item \textbf{Abstract} + \begin{itemize} + \item Klassen: Können nicht instanziiert werden, nur zum Vererben und für Polymorphie (z.B. \texttt{new List<Tier>();} mit \texttt{Tier} als abstrakte Klasse); kann (muss nicht) abstrakte Methoden enthalten + \item Methoden: Müssen in einer abstrakten Klasse deklariert sein und haben keine Implementation; muss von abgeleiteten Klassen (Vererbung) mit \texttt{override} implementiert werden. + \end{itemize} + \item \textbf{Interface} + \begin{itemize} + \item Enthält nur Signaturen, keine Implementationen + \item Anwendung häufig ähnlich wie abstrakte Klassen + \item Abgeleitete Klassen müssen \textbf{alle} Methoden implementieren (ohne \texttt{override}), die im Interface deklariert sind + \item Unterschied zu abstrakten Klassen: Abgeleitete Klassen von abstrakten Klassen müssen nur diejenigen Methoden implementieren (mit \texttt{override}), die in der Basisklasse abstract sind + \end{itemize} + \item \textbf{Polymorphie} (= \enquote{Mehrere Varianten einer Methode}) + \begin{itemize} + \item Overloading: Methoden können überladen werden, indem eine Methode mit gleichem Namen aber unterschiedlicher Signatur geschrieben wird. Beim Aufruf wird dann automatisch diejenige Implementation gewählt, dessen Signatur mit dem Aufruf übereinstimmt + \item Overriding: Geschieht z.B. bei abgeleiteten \texttt{abstract} Klassen oder überschriebenen \texttt{virtual} Methoden + \item Statisch: Es steht schon bei Compile-Time fest, welche Operation verwendet werden soll (\textbf{Early Binding}) - beispielsweise mit Overloading + \item Dynamisch: Es steht erst bei Run-Time fest, welche Operation verwendet werden soll (\textbf{Late Binding}) - beispielsweise mit Overriding + \end{itemize} + \item \textbf{Properties} + \begin{itemize} + \item \texttt{public Typ TolleProperty \{ get; set; \}} + \item \texttt{public Typ TolleProperty \{ get \{ <getter code> \} set \{ <setter code> \}\}} + \item <getter code> bzw. <setter code> könnte bspw. auf private Attribute zugreifen + \item get/set optional => Zugriff beschränkbar + \item Vorteil zu standard getter/setter: Weniger Code, übersichtlicher, einheitlich + \end{itemize} + \item \textbf{Variablen-Swap} + \begin{verbatim} + int a = 42, b = 69; + + // Langweilig (Dreieckstausch) + int temp = a; + a = b; + b = temp; + + // Besser + (a, b) = (b, a); + + // 10head + a ^= b ^= a ^= b; + + \end{verbatim} +\end{itemize} + +\subsection{Datenbanken} +\begin{itemize} + \item \textbf{Primärschlüssel} (PS): Eindeutige Identifizierung (z.B. id) + \item \textbf{Fremdschlüssel} (FS): Zeigt auf einen PS einer anderen Tabelle; verbindet Tabellen + \item 1. Normalform: Jedes Attribut ist atomar (unteilbar) + \item 2. Normalform: 1. NF \&\& jedes Attribut muss vom ganzen PS abhängig sein + \item 3. Normalform: 2. NF \&\& kein Attribut vom Primärschlüssel transitiv abhängig + \item \textbf{SQL} (Structured Query Language) + \begin{itemize} + \item Mögliche Abfrage: \texttt{SELECT DISTINCT \{<spalten> (AS) <name>\} FROM <tabelle1> INNER JOIN <tabelle2> ON <tabelle1.PS> = <tabelle2.FS> WHERE <bedingung> AND/OR/NOT <bedingung> LIKE '\%teil\%' GORUP BY <spalte> HAVING <bedingung> ORDER BY <spalte> ASC/DESC} + \item \texttt{Funktionen: AVG(), COUNT(), SUM(), MAX(), MIN()} + \end{itemize} + \item Indizierung von Spalten kann Performance-Probleme bei großen Joins beheben +\end{itemize} + +\end{document} |