meillo@11: % @file meillo@11: % @brief Referat DesignPatterns `Anti-Patterns' meillo@11: % @author Julian Haug meillo@11: % @since 2007-06-21 meillo@11: meillo@11: meillo@11: \documentclass{beamer} meillo@11: meillo@11: \usepackage[utf8]{inputenc} meillo@11: \usepackage{ngerman} meillo@11: \usepackage{graphicx} meillo@11: \usepackage[automark]{scrpage2} meillo@11: \input{Style01} meillo@11: meillo@25: \title{Andere Patterns} meillo@25: \author{Julian Haug} meillo@25: \date{} meillo@11: meillo@11: \begin{document} meillo@11: meillo@11: \frame{ meillo@11: \titlepage meillo@11: } meillo@11: meillo@11: meillo@11: \section[Outline]{} meillo@11: \frame{ meillo@11: \tableofcontents meillo@11: } meillo@11: meillo@11: meillo@11: meillo@19: \section{Andere Arten von Mustern} meillo@19: meillo@19: meillo@19: \frame{ \frametitle{Andere Arten von Mustern} meillo@19: meillo@19: \begin{block}{Andere Arten von Mustern} meillo@19: \begin{itemize} meillo@19: \item Gang of Four motivieren viele Autoren zu weiteren Veröffentlichungen meillo@19: \item Problematik: ein Muster lässt sich nicht mehr ohne weiteres als Entwurfsmuster klassifizieren meillo@19: \item Es entstanden mehrere Arten von Mustern meillo@19: \end{itemize} meillo@19: \end{block} meillo@19: meillo@19: } meillo@19: meillo@19: meillo@25: \subsection{Beispiele anderer Muster} meillo@19: meillo@25: \frame{ \frametitle{Architekturmuster} meillo@19: meillo@25: \begin{block}{} meillo@19: \begin{itemize} meillo@19: \item beschreiben typische Software-Architekturen meillo@19: \item bestimmen nicht ein konkretes Teilproblem, sondern den Grundaufbau der Anwendung meillo@19: \item Lässt sich in 4 verschiedene Kategorien einteilen meillo@19: \begin{itemize} meillo@19: \item Mud-to-structure: hilft die Unmengen von Komponenten und Objekten eines Softwaresystems zu organisieren. meillo@19: \item Verteilte Systeme: unterstützten die Verwendung verteilter Ressourcen und Dienste in Netzwerken meillo@19: \item Interaktive Systeme: helfen Mensch-Computer-Interaktionen zu strukturieren meillo@19: \item Adaptive Systeme: unterstützen besonders die Erweiterungs- und Anpassungsfähigkeit von Softwaresystemen. meillo@19: \end{itemize} meillo@19: \end{itemize} meillo@19: \end{block} meillo@19: meillo@19: } meillo@19: meillo@19: meillo@25: \subsection{Idom} meillo@19: meillo@19: \frame{ \frametitle{Idom} meillo@19: meillo@19: \begin{block}{Definition} meillo@19: \begin{itemize} meillo@19: \item Beschreibt konkrete Implementierung eines Entwurfsmusters meillo@19: \item ist programmiersprachenspezifisch meillo@19: \end{itemize} meillo@19: \end{block} meillo@19: meillo@25: \pause meillo@25: meillo@19: \begin{block}{Anwendung} meillo@19: \begin{itemize} meillo@19: \item Konkrete Implementierung eines Entwurfsmusters. meillo@19: \item Programmierkonventionen (Codeformatierung, Namenskonventionen, Kommentar Formatierung, usw.) meillo@19: \item Typische Lösungsansätze für Probleme die durch die Programmiersprache nicht direkt unterstützt werden (Speicherverwaltung) meillo@19: \end{itemize} meillo@19: \end{block} meillo@19: meillo@19: } meillo@19: meillo@19: meillo@25: \subsection{Weitere Beispiele} meillo@19: meillo@19: \frame{ \frametitle{Weitere Beispiele} meillo@19: meillo@19: \begin{block}{Weitere Beispiele} meillo@19: \begin{itemize} meillo@19: \item Analysemuster \\ (beschreiben typische Fälle der Anforderungsanalyse) meillo@19: \item Kommunikationsmuster \\ (beschreiben Kommunikationswege zwischen Personen einer Organisation) meillo@19: \item Organisationsmuster \\ (beschreiben Elemente der Strukturen von Organisationen) meillo@19: \end{itemize} meillo@19: \end{block} meillo@19: meillo@19: } meillo@19: meillo@19: meillo@19: meillo@19: meillo@19: meillo@11: meillo@11: \section{Anti-Patterns} meillo@11: meillo@11: meillo@11: \frame{ \frametitle{Anti-Patterns} meillo@11: meillo@11: \begin{block}{Dokumentieren wiederkehrende Fehler bei der Software-Entwicklung um} meillo@11: \begin{itemize} meillo@11: \item durch das Wissen ihrer Existenz diese zu vermeiden meillo@11: \item bereits manifestierte Anti-Pattern durch geschickte Maßnahmen zu beheben meillo@11: \end{itemize} meillo@11: \end{block} meillo@11: meillo@11: \pause meillo@11: meillo@11: \begin{block}{Analog zu positiven Mustern gibt es auch hier eine weitere Unterscheidung} meillo@11: \begin{itemize} meillo@11: \item Projektmanagement-Anti-Patterns meillo@11: \item Architektur- bzw. Design-Anti- Patterns meillo@11: \item Meta-Patterns meillo@11: \item Organisations-, Prozess- Anti-Patterns meillo@11: \item \textbf{Programmierungs-Anti-Patterns} meillo@11: \end{itemize} meillo@11: \end{block} meillo@11: meillo@11: } meillo@11: meillo@11: meillo@25: \subsection{Programmier-Anti-Patterns} meillo@11: \frame{ \frametitle{Programmierungs-Anti-Patterns} meillo@11: meillo@25: \begin{block}{Zwiebel} meillo@11: \begin{itemize} meillo@25: \item Neue Funktionalität wird um (oder über) die alte gelegt meillo@25: \item Häufig bei Erweiterungen meillo@25: \item Führt zu vielschichtigem Programmcode (Zwiebel) meillo@25: \end{itemize} meillo@25: \end{block} meillo@25: meillo@25: \pause meillo@25: meillo@25: \begin{block}{Lavafluss} meillo@25: \begin{itemize} meillo@25: \item in Anwendung häuft sich ``toter Quelltext'' meillo@25: \item Statt zu löschen wird um ihn ``herum'' programmiert meillo@11: \end{itemize} meillo@11: \end{block} meillo@11: meillo@11: } meillo@11: meillo@11: meillo@25: \section{Tipps zur Anwendung} meillo@25: meillo@25: \frame{ \frametitle{Tipps zur Anwendung} meillo@25: meillo@25: \begin{block}{Auswahl eines Entwurfmusters} meillo@25: Problem: Viele (ähnliche) Muster kommen in Frage meillo@25: \begin{itemize} meillo@25: \item Musterkatalog meillo@25: \item Genaue Analyse des Problems meillo@25: \end{itemize} meillo@25: \end{block} meillo@25: meillo@25: \pause meillo@25: meillo@25: \begin{block}{Verwendung des Musters} meillo@25: Problem: Verstehen wie das Muster unser Problem löst meillo@25: \begin{itemize} meillo@25: \item Strukturdiagramm (UML) meillo@25: \item Objekt/Klassenliste meillo@25: \item Implementierungsbeispiele meillo@25: \end{itemize} meillo@25: \end{block} meillo@25: meillo@25: \pause meillo@25: meillo@25: \begin{block}{Wann sollte KEIN Entwurfsmuster benutzt werden} meillo@25: \begin{itemize} meillo@25: \item Muster dürfen den Code nicht verkomplizieren meillo@25: \item Oft reicht eine Lösung die zwar weniger flexibel aber simpler ist meillo@25: \end{itemize} meillo@25: \end{block} meillo@25: meillo@25: } meillo@25: meillo@25: meillo@11: meillo@11: \section{Zusammenfassung} meillo@25: \frame{ meillo@11: \begin{block}{Zusammenfassung} meillo@11: \begin{itemize} meillo@25: \item Es gibt verschiedene Arten von Mustern – für uns von direkter Bedeutung sind Entwurfs-, Architekturmuster und Idome meillo@25: \item Anti-Pattern zeigen welche Fehler man vermeiden sollte meillo@25: \item Bei Anwendung von Mustern das Problem genau analysieren, passendes Muster suchen und gegebenenfalls anwenden meillo@11: \end{itemize} meillo@11: \end{block} meillo@11: } meillo@11: meillo@11: meillo@11: meillo@11: \end{document} meillo@11: meillo@11: