Antipatternsblog.marc-seeger.de/assets/2007/05/antipatterns_ss07.pdf© HdM Stuttgart, Name,...

89
Antipatterns Dirk Wendling dw027 hdm-stuttgart.de Marc Seeger ms155 hdm-stuttgart.de Stephan Helten sh094 hdm-stuttgart.de

Transcript of Antipatternsblog.marc-seeger.de/assets/2007/05/antipatterns_ss07.pdf© HdM Stuttgart, Name,...

Page 1: Antipatternsblog.marc-seeger.de/assets/2007/05/antipatterns_ss07.pdf© HdM Stuttgart, Name, Studiengang, Datum Agenda Begri!serklärung Anti-Patterns im Projektmanagement Code-Design-Antipatterns

AntipatternsDirk Wendling dw027 hdm-stuttgart.deMarc Seeger ms155 hdm-stuttgart.deStephan Helten sh094 hdm-stuttgart.de

Page 2: Antipatternsblog.marc-seeger.de/assets/2007/05/antipatterns_ss07.pdf© HdM Stuttgart, Name, Studiengang, Datum Agenda Begri!serklärung Anti-Patterns im Projektmanagement Code-Design-Antipatterns

Antipatterns

Dirk Wendling – DW027Marc Seeger – MS155

Stephan Helten – SH094

(MIB 4)

Page 3: Antipatternsblog.marc-seeger.de/assets/2007/05/antipatterns_ss07.pdf© HdM Stuttgart, Name, Studiengang, Datum Agenda Begri!serklärung Anti-Patterns im Projektmanagement Code-Design-Antipatterns

© HdM Stuttgart, Name, Studiengang, Datum© HdM Stuttgart, Name, Studiengang, Datum

Agenda

Begriffserklärung Anti-Patterns im Projektmanagement Code-Design-Antipatterns Java Antipatterns Evolution und AntiPatterns how to write unmaintainable code

HdM Stuttgart SS07, Design Patterns – Antipatterns | Dirk Wendling | Marc Seeger | Stephan Helten

Page 4: Antipatternsblog.marc-seeger.de/assets/2007/05/antipatterns_ss07.pdf© HdM Stuttgart, Name, Studiengang, Datum Agenda Begri!serklärung Anti-Patterns im Projektmanagement Code-Design-Antipatterns

© HdM Stuttgart, Name, Studiengang, Datum© HdM Stuttgart, Name, Studiengang, Datum

Begriffserklärung: Antipatterns Negativ-Beispiele von bereits durchgeführten Lösungen Analyse gibt Hinweise darauf, wie das Problem besser gelöst

werden könnte

Kategorisierung Architektur- bzw. Design-Anti-Patterns Projektmanagement-Anti-Patterns Organisations-, Management- bzw. Prozess-Anti-Patterns Programmierungs-Anti-Patterns Meta-Patterns

HdM Stuttgart SS07, Design Patterns – Antipatterns | Dirk Wendling | Marc Seeger | Stephan Helten

Page 5: Antipatternsblog.marc-seeger.de/assets/2007/05/antipatterns_ss07.pdf© HdM Stuttgart, Name, Studiengang, Datum Agenda Begri!serklärung Anti-Patterns im Projektmanagement Code-Design-Antipatterns

© HdM Stuttgart, Name, Studiengang, Datum© HdM Stuttgart, Name, Studiengang, Datum

Ausblick: Evolution und AntiPatterns

Welches dieser beiden Tiere ist mittlerweile zum Antipattern geworden?

Nacktmull Kakapo

HdM Stuttgart SS07, Design Patterns – Antipatterns | Dirk Wendling | Marc Seeger | Stephan Helten

Page 6: Antipatternsblog.marc-seeger.de/assets/2007/05/antipatterns_ss07.pdf© HdM Stuttgart, Name, Studiengang, Datum Agenda Begri!serklärung Anti-Patterns im Projektmanagement Code-Design-Antipatterns

© HdM Stuttgart, Name, Studiengang, Datum© HdM Stuttgart, Name, Studiengang, Datum

Die Auflösung gibt es am Ende des Vortrags

HdM Stuttgart SS07, Design Patterns – Antipatterns | Dirk Wendling | Marc Seeger | Stephan Helten

Page 7: Antipatternsblog.marc-seeger.de/assets/2007/05/antipatterns_ss07.pdf© HdM Stuttgart, Name, Studiengang, Datum Agenda Begri!serklärung Anti-Patterns im Projektmanagement Code-Design-Antipatterns

Anti-Pattern im Projektmanagement

Dirk Wendling – DW027(MIB 4)

Page 8: Antipatternsblog.marc-seeger.de/assets/2007/05/antipatterns_ss07.pdf© HdM Stuttgart, Name, Studiengang, Datum Agenda Begri!serklärung Anti-Patterns im Projektmanagement Code-Design-Antipatterns

© HdM Stuttgart, Name, Studiengang, Datum© HdM Stuttgart, Name, Studiengang, Datum

Brooksches Gesetz

Adding manpower to a late software project makes it later!Die Einarbeitung des neuen Mitarbeiterskostet wichtige Kapazitäten desproduktiv arbeitenden Teams.

Projekt verzögert sich weiter

Fred Brooks, Mythical Man Month:

HdM Stuttgart SS07, Design Patterns – Antipatterns | Dirk Wendling | Marc Seeger | Stephan Helten

Page 9: Antipatternsblog.marc-seeger.de/assets/2007/05/antipatterns_ss07.pdf© HdM Stuttgart, Name, Studiengang, Datum Agenda Begri!serklärung Anti-Patterns im Projektmanagement Code-Design-Antipatterns

© HdM Stuttgart, Name, Studiengang, Datum© HdM Stuttgart, Name, Studiengang, Datum

Warme Leiche / Warm bodyFrühe Entwicklungsphase: z.B. System entwerfen wenige Spezialisten

Spätere Entwicklungsphase: z.B. System umsetzen weitere Spezialisten

„Wenn zwei im Raum einer Meinung sind, ist mindestens einer davon überflüssig.“ Churchill

HdM Stuttgart SS07, Design Patterns – Antipatterns | Dirk Wendling | Marc Seeger | Stephan Helten

Page 10: Antipatternsblog.marc-seeger.de/assets/2007/05/antipatterns_ss07.pdf© HdM Stuttgart, Name, Studiengang, Datum Agenda Begri!serklärung Anti-Patterns im Projektmanagement Code-Design-Antipatterns

© HdM Stuttgart, Name, Studiengang, Datum© HdM Stuttgart, Name, Studiengang, Datum

Single Head Of Knowledge Einzelner Mitarbeiter ist alleiniger Wissensträger.

Wenn dieser Mitarbeiter weg ist, ist auch das Know-How weg!

HdM Stuttgart SS07, Design Patterns – Antipatterns | Dirk Wendling | Marc Seeger | Stephan Helten

Page 11: Antipatternsblog.marc-seeger.de/assets/2007/05/antipatterns_ss07.pdf© HdM Stuttgart, Name, Studiengang, Datum Agenda Begri!serklärung Anti-Patterns im Projektmanagement Code-Design-Antipatterns

© HdM Stuttgart, Name, Studiengang, Datum© HdM Stuttgart, Name, Studiengang, Datum

Reinventing the wheel Software wird immer komplett neu erstellt.

Es wird keine Rücksicht auf bereits bestehende, ähnliche Software genommen, welche sich bereits bewährt hat.

Aufwendig, Teuer, Instabil

HdM Stuttgart SS07, Design Patterns – Antipatterns | Dirk Wendling | Marc Seeger | Stephan Helten

Page 12: Antipatternsblog.marc-seeger.de/assets/2007/05/antipatterns_ss07.pdf© HdM Stuttgart, Name, Studiengang, Datum Agenda Begri!serklärung Anti-Patterns im Projektmanagement Code-Design-Antipatterns

© HdM Stuttgart, Name, Studiengang, Datum© HdM Stuttgart, Name, Studiengang, Datum

Yet Another Meeting Will Solve It Ein Meeting in einem verspäteten Projekt einzuberufen,

bedeutet nur, dass sich dieses noch weiter verzögert.

„Noch ein Meeting mehr wird es lösen.“ NICHT!

HdM Stuttgart SS07, Design Patterns – Antipatterns | Dirk Wendling | Marc Seeger | Stephan Helten

Page 13: Antipatternsblog.marc-seeger.de/assets/2007/05/antipatterns_ss07.pdf© HdM Stuttgart, Name, Studiengang, Datum Agenda Begri!serklärung Anti-Patterns im Projektmanagement Code-Design-Antipatterns

© HdM Stuttgart, Name, Studiengang, Datum© HdM Stuttgart, Name, Studiengang, Datum

Negative Producing Programmer Einen unproduktiven Entwickler aus einem Team zu entfernen

kann die Produktivität mehr erhöhen, als einen guten Entwickler hinzuzufügen.

HdM Stuttgart SS07, Design Patterns – Antipatterns | Dirk Wendling | Marc Seeger | Stephan Helten

Page 14: Antipatternsblog.marc-seeger.de/assets/2007/05/antipatterns_ss07.pdf© HdM Stuttgart, Name, Studiengang, Datum Agenda Begri!serklärung Anti-Patterns im Projektmanagement Code-Design-Antipatterns

© HdM Stuttgart, Name, Studiengang, Datum© HdM Stuttgart, Name, Studiengang, Datum

Corncob / Quertreiber (1/2) Ein Quertreiber denkt an erster Stelle an sich. Er strebt nach Anerkennung und finanziellen Vorteilen.

Motive des Quertreibers: Habgier Stolz Engstirnigkeit

Symptome: Mangelnder Fortschritt im Projekt

HdM Stuttgart SS07, Design Patterns – Antipatterns | Dirk Wendling | Marc Seeger | Stephan Helten

Page 15: Antipatternsblog.marc-seeger.de/assets/2007/05/antipatterns_ss07.pdf© HdM Stuttgart, Name, Studiengang, Datum Agenda Begri!serklärung Anti-Patterns im Projektmanagement Code-Design-Antipatterns

© HdM Stuttgart, Name, Studiengang, Datum© HdM Stuttgart, Name, Studiengang, Datum

Corncob / Quertreiber (2/2) Gründe für das Entstehen von Quertreibern:

Management geht nicht auf das Verhalten des Querkopfes ein Quertreiber verfolgt eigene Ziele oft ungleich Projektziel

Refactoring:

Ihn zur Verantwortung ziehen: „You raissed the issue, you own/fix the problem“

Klärendes Gespräch mit dem Management Pizza Party

„There is no problem so serious that a pizza party can‘t resolve“ (Randall Oakes)

HdM Stuttgart SS07, Design Patterns – Antipatterns | Dirk Wendling | Marc Seeger | Stephan Helten

Page 16: Antipatternsblog.marc-seeger.de/assets/2007/05/antipatterns_ss07.pdf© HdM Stuttgart, Name, Studiengang, Datum Agenda Begri!serklärung Anti-Patterns im Projektmanagement Code-Design-Antipatterns

© HdM Stuttgart, Name, Studiengang, Datum© HdM Stuttgart, Name, Studiengang, Datum

Feature creep Erschleichung von immer weiteren Funktionalitäten durch den

Kunden.

Budget wird überschrittenProjekt verzögert sich immer weiter

Abhilfe: Genau definierte Anforderungsliste bzw. Pflichtenheft.

HdM Stuttgart SS07, Design Patterns – Antipatterns | Dirk Wendling | Marc Seeger | Stephan Helten

Page 17: Antipatternsblog.marc-seeger.de/assets/2007/05/antipatterns_ss07.pdf© HdM Stuttgart, Name, Studiengang, Datum Agenda Begri!serklärung Anti-Patterns im Projektmanagement Code-Design-Antipatterns

© HdM Stuttgart, Name, Studiengang, Datum© HdM Stuttgart, Name, Studiengang, Datum

Death Sprint „Anstrengung bis zum letzten Atemzug“

Bei der Einhaltung eines überhitzten Zeitplanes beginnen die Entwickler zu schlampen.

Äußerlich macht sich dies zu Beginn kaum bemerkbar doch die Qualität der Software leidet maßgeblich. Es wird nur noch versucht die Funktionen fertig zu stellen, ohne

nach einer schlankeren/besseren Lösung derer zu arbeiten. Keine Dokumentation od. Qualitätssicherung

führt früher oder später zu Unwartbarkeit

Beispiel: Browser War

HdM Stuttgart SS07, Design Patterns – Antipatterns | Dirk Wendling | Marc Seeger | Stephan Helten

Page 18: Antipatternsblog.marc-seeger.de/assets/2007/05/antipatterns_ss07.pdf© HdM Stuttgart, Name, Studiengang, Datum Agenda Begri!serklärung Anti-Patterns im Projektmanagement Code-Design-Antipatterns

© HdM Stuttgart, Name, Studiengang, Datum© HdM Stuttgart, Name, Studiengang, Datum

Golden Hammer Ein bevorzugter Lösungsweg wird fälschlicherweise

als universell anwendbar angesehen.

Problem: Der Lösungsweg passt nur scheinbar zur Aufgabenstellung.

„Wenn mein einziges Werkzeug ein Hammer ist, sieht jedes Problem wie ein Nagel aus.“ (Abraham Maslow)

HdM Stuttgart SS07, Design Patterns – Antipatterns | Dirk Wendling | Marc Seeger | Stephan Helten

Page 19: Antipatternsblog.marc-seeger.de/assets/2007/05/antipatterns_ss07.pdf© HdM Stuttgart, Name, Studiengang, Datum Agenda Begri!serklärung Anti-Patterns im Projektmanagement Code-Design-Antipatterns

© HdM Stuttgart, Name, Studiengang, Datum© HdM Stuttgart, Name, Studiengang, Datum

Design/Architektur-Antipatterns

Marc Seeger – MS155(MIB 4)

Page 20: Antipatternsblog.marc-seeger.de/assets/2007/05/antipatterns_ss07.pdf© HdM Stuttgart, Name, Studiengang, Datum Agenda Begri!serklärung Anti-Patterns im Projektmanagement Code-Design-Antipatterns

© HdM Stuttgart, Name, Studiengang, Datum© HdM Stuttgart, Name, Studiengang, Datum

Alien Spiders! Problem: Kommunikation läuft nicht über definierte

Nachrichtenkanäle Unnötige Vernetzungen zwischen Modulen „Law of Demeter“ Jedes Modul sollte stets nur sehr begrenztes Wissen über

andere Module haben, also nur mit seinen direkten Nachbarn kommunizieren.

Lösung: Fernverbindungen müssen beim Refactoring entfernt werden

HdM Stuttgart, SS07, Design PatternsHdM Stuttgart SS07, Design Patterns – Antipatterns | Dirk Wendling | Marc Seeger | Stephan Helten

Page 21: Antipatternsblog.marc-seeger.de/assets/2007/05/antipatterns_ss07.pdf© HdM Stuttgart, Name, Studiengang, Datum Agenda Begri!serklärung Anti-Patterns im Projektmanagement Code-Design-Antipatterns

© HdM Stuttgart, Name, Studiengang, Datum© HdM Stuttgart, Name, Studiengang, Datum

Alien Spiders! Gut:

Schlecht:

HdM Stuttgart, SS07, Design PatternsHdM Stuttgart SS07, Design Patterns – Antipatterns | Dirk Wendling | Marc Seeger | Stephan Helten

Page 22: Antipatternsblog.marc-seeger.de/assets/2007/05/antipatterns_ss07.pdf© HdM Stuttgart, Name, Studiengang, Datum Agenda Begri!serklärung Anti-Patterns im Projektmanagement Code-Design-Antipatterns

© HdM Stuttgart, Name, Studiengang, Datum© HdM Stuttgart, Name, Studiengang, Datum

Alien Spiders!

Gut:

Schlecht:

Ich muss ausgewechselt werden

Ich auch

HdM Stuttgart, SS07, Design PatternsHdM Stuttgart SS07, Design Patterns – Antipatterns | Dirk Wendling | Marc Seeger | Stephan Helten

Page 23: Antipatternsblog.marc-seeger.de/assets/2007/05/antipatterns_ss07.pdf© HdM Stuttgart, Name, Studiengang, Datum Agenda Begri!serklärung Anti-Patterns im Projektmanagement Code-Design-Antipatterns

© HdM Stuttgart, Name, Studiengang, Datum© HdM Stuttgart, Name, Studiengang, Datum

Gas Factory

„Mit Kanonen auf Spatzen schießen“

HdM Stuttgart, SS07, Design PatternsHdM Stuttgart SS07, Design Patterns – Antipatterns | Dirk Wendling | Marc Seeger | Stephan Helten

Page 24: Antipatternsblog.marc-seeger.de/assets/2007/05/antipatterns_ss07.pdf© HdM Stuttgart, Name, Studiengang, Datum Agenda Begri!serklärung Anti-Patterns im Projektmanagement Code-Design-Antipatterns

© HdM Stuttgart, Name, Studiengang, Datum© HdM Stuttgart, Name, Studiengang, Datum

Gas Factory Unnötig Komplexes Design Grund:

mangelnde Abstraktion mangelnder Überblick über

Gesamtproblem

HdM Stuttgart, SS07, Design PatternsHdM Stuttgart SS07, Design Patterns – Antipatterns | Dirk Wendling | Marc Seeger | Stephan Helten

Page 25: Antipatternsblog.marc-seeger.de/assets/2007/05/antipatterns_ss07.pdf© HdM Stuttgart, Name, Studiengang, Datum Agenda Begri!serklärung Anti-Patterns im Projektmanagement Code-Design-Antipatterns

© HdM Stuttgart, Name, Studiengang, Datum© HdM Stuttgart, Name, Studiengang, Datum

Page 26: Antipatternsblog.marc-seeger.de/assets/2007/05/antipatterns_ss07.pdf© HdM Stuttgart, Name, Studiengang, Datum Agenda Begri!serklärung Anti-Patterns im Projektmanagement Code-Design-Antipatterns

© HdM Stuttgart, Name, Studiengang, Datum© HdM Stuttgart, Name, Studiengang, Datum

Gas Factory - Hallo Welt!

(alert "Hallo Welt!") #include <windows.h> LRESULT CALLBACK WindowProcedure(HWND, UINT, WPARAM, LPARAM); char szClassName[] = "MainWnd"; HINSTANCE hInstance; int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { HWND hwnd; MSG msg; WNDCLASSEX wincl; hInstance = hInst; wincl.cbSize = sizeof(WNDCLASSEX); wincl.cbClsExtra = 0; wincl.cbWndExtra = 0; wincl.style = 0; wincl.hInstance = hInstance; wincl.lpszClassName = szClassName; wincl.lpszMenuName = NULL; //No menu wincl.lpfnWndProc = WindowProcedure; wincl.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1); //Color of the window wincl.hIcon = LoadIcon(NULL, IDI_APPLICATION); //EXE icon wincl.hIconSm = LoadIcon(NULL, IDI_APPLICATION); //Small program icon wincl.hCursor = LoadCursor(NULL, IDC_ARROW); //Cursor if (!RegisterClassEx(&wincl)) return 0; hwnd = CreateWindowEx(0, //No extended window styles szClassName, //Class name "", //Window caption WS_OVERLAPPEDWINDOW & ~WS_MAXIMIZEBOX, CW_USEDEFAULT, CW_USEDEFAULT, //Let Windows decide the left and top positions of the window 120, 50, //Width and height of the window, NULL, NULL, hInstance, NULL); //Make the window visible on the screen ShowWindow(hwnd, nCmdShow); //Run the message loop while (GetMessage(&msg, NULL, 0, 0)) { TranslateMessage(&msg); DispatchMessage(&msg); } return msg.wParam; } LRESULT CALLBACK WindowProcedure(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) { PAINTSTRUCT ps; HDC hdc; switch (message) { case WM_PAINT: hdc = BeginPaint(hwnd, &ps); TextOut(hdc, 15, 3, "Hallo Welt!", 13); EndPaint(hwnd, &ps); break; case WM_DESTROY: PostQuitMessage(0); break; default: return DefWindowProc(hwnd, message, wParam, lParam); } return 0; }

Lisp: Windows C API:

HdM Stuttgart, SS07, Design PatternsHdM Stuttgart SS07, Design Patterns – Antipatterns | Dirk Wendling | Marc Seeger | Stephan Helten

Page 27: Antipatternsblog.marc-seeger.de/assets/2007/05/antipatterns_ss07.pdf© HdM Stuttgart, Name, Studiengang, Datum Agenda Begri!serklärung Anti-Patterns im Projektmanagement Code-Design-Antipatterns

© HdM Stuttgart, Name, Studiengang, Datum© HdM Stuttgart, Name, Studiengang, Datum

Big Ball of mud "A Big Ball of Mud is a haphazardly structured, sprawling,

sloppy, duct-tape-and-baling-wire, spaghetti-code jungle“

HdM Stuttgart, SS07, Design PatternsHdM Stuttgart SS07, Design Patterns – Antipatterns | Dirk Wendling | Marc Seeger | Stephan Helten

Page 28: Antipatternsblog.marc-seeger.de/assets/2007/05/antipatterns_ss07.pdf© HdM Stuttgart, Name, Studiengang, Datum Agenda Begri!serklärung Anti-Patterns im Projektmanagement Code-Design-Antipatterns

© HdM Stuttgart, Name, Studiengang, Datum© HdM Stuttgart, Name, Studiengang, Datum

Überschrift

Page 29: Antipatternsblog.marc-seeger.de/assets/2007/05/antipatterns_ss07.pdf© HdM Stuttgart, Name, Studiengang, Datum Agenda Begri!serklärung Anti-Patterns im Projektmanagement Code-Design-Antipatterns

© HdM Stuttgart, Name, Studiengang, Datum© HdM Stuttgart, Name, Studiengang, Datum

Poltergeist „pop in to make something happen“

HdM Stuttgart, SS07, Design PatternsHdM Stuttgart SS07, Design Patterns – Antipatterns | Dirk Wendling | Marc Seeger | Stephan Helten

Page 30: Antipatternsblog.marc-seeger.de/assets/2007/05/antipatterns_ss07.pdf© HdM Stuttgart, Name, Studiengang, Datum Agenda Begri!serklärung Anti-Patterns im Projektmanagement Code-Design-Antipatterns

© HdM Stuttgart, Name, Studiengang, Datum© HdM Stuttgart, Name, Studiengang, Datum

Poltergeist

Ein Poltergeist hat geringe Verantwortung kurze Lebensdauer keinen Zustand keine Aufgabe außer Aktionen in anderen Klassen zu

initialisieren

HdM Stuttgart, SS07, Design PatternsHdM Stuttgart SS07, Design Patterns – Antipatterns | Dirk Wendling | Marc Seeger | Stephan Helten

Page 31: Antipatternsblog.marc-seeger.de/assets/2007/05/antipatterns_ss07.pdf© HdM Stuttgart, Name, Studiengang, Datum Agenda Begri!serklärung Anti-Patterns im Projektmanagement Code-Design-Antipatterns

© HdM Stuttgart, Name, Studiengang, Datum© HdM Stuttgart, Name, Studiengang, Datum

Poltergeist

Folgen: Wartung sehr schwer möglich Bläht mein Design unnötig auf Unnötige Redundanz zwischen Klassen Vernichtet Ressourcen

HdM Stuttgart, SS07, Design PatternsHdM Stuttgart SS07, Design Patterns – Antipatterns | Dirk Wendling | Marc Seeger | Stephan Helten

Page 32: Antipatternsblog.marc-seeger.de/assets/2007/05/antipatterns_ss07.pdf© HdM Stuttgart, Name, Studiengang, Datum Agenda Begri!serklärung Anti-Patterns im Projektmanagement Code-Design-Antipatterns

© HdM Stuttgart, Name, Studiengang, Datum© HdM Stuttgart, Name, Studiengang, Datum

Poltergeist

Gründe: Entwickler ohne OO Kenntnisse OO ergibt keinen Sinn für die Aufgabe

„There is no right way to do the wrong thing.“

Architekturfestlegung in Requirement-Analyse

HdM Stuttgart, SS07, Design PatternsHdM Stuttgart SS07, Design Patterns – Antipatterns | Dirk Wendling | Marc Seeger | Stephan Helten

Page 33: Antipatternsblog.marc-seeger.de/assets/2007/05/antipatterns_ss07.pdf© HdM Stuttgart, Name, Studiengang, Datum Agenda Begri!serklärung Anti-Patterns im Projektmanagement Code-Design-Antipatterns

© HdM Stuttgart, Name, Studiengang, Datum© HdM Stuttgart, Name, Studiengang, Datum

Poltergeist

Lösungsansatz: Polgergeistklasse entfernen Funktionalität in beteiligte

Klasse verschieben

HdM Stuttgart, SS07, Design PatternsHdM Stuttgart SS07, Design Patterns – Antipatterns | Dirk Wendling | Marc Seeger | Stephan Helten

Page 34: Antipatternsblog.marc-seeger.de/assets/2007/05/antipatterns_ss07.pdf© HdM Stuttgart, Name, Studiengang, Datum Agenda Begri!serklärung Anti-Patterns im Projektmanagement Code-Design-Antipatterns

© HdM Stuttgart, Name, Studiengang, Datum© HdM Stuttgart, Name, Studiengang, Datum

Race Condition

Problem: Ergebnis einer Operation ist abhängig vom zeitlichen

Ablauf ihrer Einzelschritte

HdM Stuttgart, SS07, Design PatternsHdM Stuttgart SS07, Design Patterns – Antipatterns | Dirk Wendling | Marc Seeger | Stephan Helten

Page 35: Antipatternsblog.marc-seeger.de/assets/2007/05/antipatterns_ss07.pdf© HdM Stuttgart, Name, Studiengang, Datum Agenda Begri!serklärung Anti-Patterns im Projektmanagement Code-Design-Antipatterns

© HdM Stuttgart, Name, Studiengang, Datum© HdM Stuttgart, Name, Studiengang, Datum

Race Condition

HdM Stuttgart, SS07, Design PatternsHdM Stuttgart SS07, Design Patterns – Antipatterns | Dirk Wendling | Marc Seeger | Stephan Helten

Page 36: Antipatternsblog.marc-seeger.de/assets/2007/05/antipatterns_ss07.pdf© HdM Stuttgart, Name, Studiengang, Datum Agenda Begri!serklärung Anti-Patterns im Projektmanagement Code-Design-Antipatterns

© HdM Stuttgart, Name, Studiengang, Datum© HdM Stuttgart, Name, Studiengang, Datum

Race Condition

111

2+1 1 12

+122 schreiben

schreiben

lesenlesen

22

Thread A Thread BVariable

1+1+1=2?

HdM Stuttgart, SS07, Design PatternsHdM Stuttgart SS07, Design Patterns – Antipatterns | Dirk Wendling | Marc Seeger | Stephan Helten

Page 37: Antipatternsblog.marc-seeger.de/assets/2007/05/antipatterns_ss07.pdf© HdM Stuttgart, Name, Studiengang, Datum Agenda Begri!serklärung Anti-Patterns im Projektmanagement Code-Design-Antipatterns

© HdM Stuttgart, Name, Studiengang, Datum© HdM Stuttgart, Name, Studiengang, Datum

Race Condition

Lösung: Vorlesung 21801: Verteilte Systeme Ring-Puffer, Spinlocks, …

HdM Stuttgart, SS07, Design PatternsHdM Stuttgart SS07, Design Patterns – Antipatterns | Dirk Wendling | Marc Seeger | Stephan Helten

Page 38: Antipatternsblog.marc-seeger.de/assets/2007/05/antipatterns_ss07.pdf© HdM Stuttgart, Name, Studiengang, Datum Agenda Begri!serklärung Anti-Patterns im Projektmanagement Code-Design-Antipatterns

© HdM Stuttgart, Name, Studiengang, Datum© HdM Stuttgart, Name, Studiengang, Datum

Design by Commitee

„ a camel is a horse designed by committee “

HdM Stuttgart, SS07, Design PatternsHdM Stuttgart SS07, Design Patterns – Antipatterns | Dirk Wendling | Marc Seeger | Stephan Helten

Page 39: Antipatternsblog.marc-seeger.de/assets/2007/05/antipatterns_ss07.pdf© HdM Stuttgart, Name, Studiengang, Datum Agenda Begri!serklärung Anti-Patterns im Projektmanagement Code-Design-Antipatterns

© HdM Stuttgart, Name, Studiengang, Datum© HdM Stuttgart, Name, Studiengang, Datum

Design by Commitee

Grundlage für „Design by Commitee“ in der IT Branche: Meeting von Leuten die keine Ahnung haben von:

Code Implementierung Design

Aber: Einige (veraltete) Entwicklungsmodelle kennen

HdM Stuttgart, SS07, Design PatternsHdM Stuttgart SS07, Design Patterns – Antipatterns | Dirk Wendling | Marc Seeger | Stephan Helten

Page 40: Antipatternsblog.marc-seeger.de/assets/2007/05/antipatterns_ss07.pdf© HdM Stuttgart, Name, Studiengang, Datum Agenda Begri!serklärung Anti-Patterns im Projektmanagement Code-Design-Antipatterns

© HdM Stuttgart, Name, Studiengang, Datum© HdM Stuttgart, Name, Studiengang, Datum

Design by Commitee

Ergebnis: Ein Design welches folgende Punkte hat:

Unnötige Komplexität interne Unstimmigkeiten Logische Fehler Banale Inhalte Keine gemeinsame Vision

HdM Stuttgart, SS07, Design PatternsHdM Stuttgart SS07, Design Patterns – Antipatterns | Dirk Wendling | Marc Seeger | Stephan Helten

Page 41: Antipatternsblog.marc-seeger.de/assets/2007/05/antipatterns_ss07.pdf© HdM Stuttgart, Name, Studiengang, Datum Agenda Begri!serklärung Anti-Patterns im Projektmanagement Code-Design-Antipatterns

© HdM Stuttgart, Name, Studiengang, Datum© HdM Stuttgart, Name, Studiengang, Datum

Design by Commitee

HdM Stuttgart, SS07, Design PatternsHdM Stuttgart SS07, Design Patterns – Antipatterns | Dirk Wendling | Marc Seeger | Stephan Helten

Page 42: Antipatternsblog.marc-seeger.de/assets/2007/05/antipatterns_ss07.pdf© HdM Stuttgart, Name, Studiengang, Datum Agenda Begri!serklärung Anti-Patterns im Projektmanagement Code-Design-Antipatterns

© HdM Stuttgart, Name, Studiengang, Datum© HdM Stuttgart, Name, Studiengang, Datum

Design by Commitee

Minivan

HdM Stuttgart SS07, Design Patterns – Antipatterns | Dirk Wendling | Marc Seeger | Stephan Helten

Page 43: Antipatternsblog.marc-seeger.de/assets/2007/05/antipatterns_ss07.pdf© HdM Stuttgart, Name, Studiengang, Datum Agenda Begri!serklärung Anti-Patterns im Projektmanagement Code-Design-Antipatterns

Java-Antipatterns

Stephan Helten - SH094(MIB 4)

Page 44: Antipatternsblog.marc-seeger.de/assets/2007/05/antipatterns_ss07.pdf© HdM Stuttgart, Name, Studiengang, Datum Agenda Begri!serklärung Anti-Patterns im Projektmanagement Code-Design-Antipatterns

© HdM Stuttgart, Name, Studiengang, Datum© HdM Stuttgart, Name, Studiengang, Datum

Quiz: Frage 1So bitte nicht:

InputStream in = new FileInputStream(file);int b;while ((b = in.read()) != -1) { ...

}

Aber warum?

HdM Stuttgart SS07, Design Patterns – Antipatterns | Dirk Wendling | Marc Seeger | Stephan Helten

Page 45: Antipatternsblog.marc-seeger.de/assets/2007/05/antipatterns_ss07.pdf© HdM Stuttgart, Name, Studiengang, Datum Agenda Begri!serklärung Anti-Patterns im Projektmanagement Code-Design-Antipatterns

© HdM Stuttgart, Name, Studiengang, Datum© HdM Stuttgart, Name, Studiengang, Datum

unbuffered streamsInputStream in = new FileInputStream(file);int b;while ((b = in.read()) != -1) { ...

}

Code liest File byteweise ein Jeder read()-Call verursacht Zugriff aufs Filesystem über das

Java Native Interfae JNI-Calls sind TEUER! Dauer für 1 MB-File von Festplatte lesen: 1 Sekunde

HdM Stuttgart SS07, Design Patterns – Antipatterns | Dirk Wendling | Marc Seeger | Stephan Helten

Page 46: Antipatternsblog.marc-seeger.de/assets/2007/05/antipatterns_ss07.pdf© HdM Stuttgart, Name, Studiengang, Datum Agenda Begri!serklärung Anti-Patterns im Projektmanagement Code-Design-Antipatterns

© HdM Stuttgart, Name, Studiengang, Datum© HdM Stuttgart, Name, Studiengang, Datum

buffered streams merke: BUFFER ist BESSER!

InputStream in = new BufferedInputStream(new FileInputStream(file));

BufferedInputStream() reduziert JNI-calls Dauer für 1 MB-File von Festplatte lesen:

60 Mikrosekunden Ersparnis von 94% zu vorher

auch für OutputStreams und Sockets, etc. …

HdM Stuttgart SS07, Design Patterns – Antipatterns | Dirk Wendling | Marc Seeger | Stephan Helten

Page 47: Antipatternsblog.marc-seeger.de/assets/2007/05/antipatterns_ss07.pdf© HdM Stuttgart, Name, Studiengang, Datum Agenda Begri!serklärung Anti-Patterns im Projektmanagement Code-Design-Antipatterns

© HdM Stuttgart, Name, Studiengang, Datum© HdM Stuttgart, Name, Studiengang, Datum

Quiz: Frage 2So bitte nicht:

public class B { private int count = 0; private String name = null; private boolean important = false;}

Aber warum?

HdM Stuttgart SS07, Design Patterns – Antipatterns | Dirk Wendling | Marc Seeger | Stephan Helten

Page 48: Antipatternsblog.marc-seeger.de/assets/2007/05/antipatterns_ss07.pdf© HdM Stuttgart, Name, Studiengang, Datum Agenda Begri!serklärung Anti-Patterns im Projektmanagement Code-Design-Antipatterns

© HdM Stuttgart, Name, Studiengang, Datum© HdM Stuttgart, Name, Studiengang, Datum

overkill initializationpublic class B { private int count = 0; private String name = null; private boolean important = false;}

Class initializer wird vorm Konstruktor aufgerufen um Werte zu setzen:

unnötiger overhead

HdM Stuttgart SS07, Design Patterns – Antipatterns | Dirk Wendling | Marc Seeger | Stephan Helten

Page 49: Antipatternsblog.marc-seeger.de/assets/2007/05/antipatterns_ss07.pdf© HdM Stuttgart, Name, Studiengang, Datum Agenda Begri!serklärung Anti-Patterns im Projektmanagement Code-Design-Antipatterns

© HdM Stuttgart, Name, Studiengang, Datum© HdM Stuttgart, Name, Studiengang, Datum

faster initializationpublic class B { private int count; private String name; private boolean important;}

Class initializer wird nicht aufgerufen möglich, da Java Initialisierungswerte immer

gleich setzt, wenn sie nicht angegeben sind: int: 0 String: null boolean: false

HdM Stuttgart SS07, Design Patterns – Antipatterns | Dirk Wendling | Marc Seeger | Stephan Helten

Page 50: Antipatternsblog.marc-seeger.de/assets/2007/05/antipatterns_ss07.pdf© HdM Stuttgart, Name, Studiengang, Datum Agenda Begri!serklärung Anti-Patterns im Projektmanagement Code-Design-Antipatterns

© HdM Stuttgart, Name, Studiengang, Datum© HdM Stuttgart, Name, Studiengang, Datum

Quiz: Frage 3So bitte nicht:

Query q = ...

Person p;

try { p = (Person) q.getSingleResult();

} catch(Exception e) { p = null;}

Aber warum?

HdM Stuttgart SS07, Design Patterns – Antipatterns | Dirk Wendling | Marc Seeger | Stephan Helten

Page 51: Antipatternsblog.marc-seeger.de/assets/2007/05/antipatterns_ss07.pdf© HdM Stuttgart, Name, Studiengang, Datum Agenda Begri!serklärung Anti-Patterns im Projektmanagement Code-Design-Antipatterns

© HdM Stuttgart, Name, Studiengang, Datum© HdM Stuttgart, Name, Studiengang, Datum

catch all: I don't know the right runtime exception

Query q = ...Person p;try { p = (Person) q.getSingleResult();} catch(Exception e) { p = null;}

Drei Exceptions können auftreten:1. Ergebnis nicht eindeutig2. Kein Ergebnis vorhanden3. Fehler beim Absetzen des queries

Alle werden gleich behandelt (p=null)

Ich weiß nicht was ich essen soll, ich nehme einfach alles!

HdM Stuttgart SS07, Design Patterns – Antipatterns | Dirk Wendling | Marc Seeger | Stephan Helten

Page 52: Antipatternsblog.marc-seeger.de/assets/2007/05/antipatterns_ss07.pdf© HdM Stuttgart, Name, Studiengang, Datum Agenda Begri!serklärung Anti-Patterns im Projektmanagement Code-Design-Antipatterns

© HdM Stuttgart, Name, Studiengang, Datum© HdM Stuttgart, Name, Studiengang, Datum

only catch the right runtime exception

Query q = ...

Person p;

try { p = (Person) q.getSingleResult();

} catch(NoResultException e) { p = null;}

Nur im Fall, dass kein Ergebnis gefunden wurde macht die Fehlerbehandlung (p=null) Sinn

Bei mehreren Ergebnissen oder dem fehlerhaften query wird p nicht gleich null gesetzt

Meine Mädels und ich, wir essen nur „SCHICKE CHICKEN“

HdM Stuttgart SS07, Design Patterns – Antipatterns | Dirk Wendling | Marc Seeger | Stephan Helten

Page 53: Antipatternsblog.marc-seeger.de/assets/2007/05/antipatterns_ss07.pdf© HdM Stuttgart, Name, Studiengang, Datum Agenda Begri!serklärung Anti-Patterns im Projektmanagement Code-Design-Antipatterns

© HdM Stuttgart, Name, Studiengang, Datum© HdM Stuttgart, Name, Studiengang, Datum

Quiz: Frage 4So bitte nicht:

try { ... do risky stuff ...} catch(SomeException e) { // never happens

}

... do some more ...

Aber warum?

HdM Stuttgart SS07, Design Patterns – Antipatterns | Dirk Wendling | Marc Seeger | Stephan Helten

Page 54: Antipatternsblog.marc-seeger.de/assets/2007/05/antipatterns_ss07.pdf© HdM Stuttgart, Name, Studiengang, Datum Agenda Begri!serklärung Anti-Patterns im Projektmanagement Code-Design-Antipatterns

© HdM Stuttgart, Name, Studiengang, Datum© HdM Stuttgart, Name, Studiengang, Datum

the exception that never happenstry { ... do risky stuff ...} catch(SomeException e) { // never happens

}

... do some more ...

Programmierer glaubt, dass in seiner speziellen Situation diese Exception nicht auftreten kann.

Falls sie irgendwann doch auftritt, merkt er das nicht

Und was ist wenn der Fallschirm nicht auf geht?

Kann nicht sein!

HdM Stuttgart SS07, Design Patterns – Antipatterns | Dirk Wendling | Marc Seeger | Stephan Helten

Page 55: Antipatternsblog.marc-seeger.de/assets/2007/05/antipatterns_ss07.pdf© HdM Stuttgart, Name, Studiengang, Datum Agenda Begri!serklärung Anti-Patterns im Projektmanagement Code-Design-Antipatterns

© HdM Stuttgart, Name, Studiengang, Datum© HdM Stuttgart, Name, Studiengang, Datum

the exception that never happens hopefullytry { ... do risky stuff ...} catch(SomeException e) { // never happens hopefully throw new IllegalStateException(e.getMessage(),

e); // crash early, passing all information}... do some more ...

Wenn diese Exception irgendwann doch einmal auftritt, dann wird die Fehlerursache detailliert ausgegeben

Wartbarkeit und Fehlersuche erleichtert Falls Sie wirklich nie auftritt:

Kein Nachteil

Zur Not mache ich

einfach den Heli!

HdM Stuttgart SS07, Design Patterns – Antipatterns | Dirk Wendling | Marc Seeger | Stephan Helten

Page 56: Antipatternsblog.marc-seeger.de/assets/2007/05/antipatterns_ss07.pdf© HdM Stuttgart, Name, Studiengang, Datum Agenda Begri!serklärung Anti-Patterns im Projektmanagement Code-Design-Antipatterns

© HdM Stuttgart, Name, Studiengang, Datum© HdM Stuttgart, Name, Studiengang, Datum

Quiz: Frage 5Class beanClass = ...

//Ist TestBean eine SuperKlasse?

if (beanClass.newInstance() instanceof TestBean)

Warum so nicht?

HdM Stuttgart SS07, Design Patterns – Antipatterns | Dirk Wendling | Marc Seeger | Stephan Helten

Page 57: Antipatternsblog.marc-seeger.de/assets/2007/05/antipatterns_ss07.pdf© HdM Stuttgart, Name, Studiengang, Datum Agenda Begri!serklärung Anti-Patterns im Projektmanagement Code-Design-Antipatterns

© HdM Stuttgart, Name, Studiengang, Datum© HdM Stuttgart, Name, Studiengang, Datum

poor use of reflectionClass beanClass = ...

//Ist TestBean eine SuperKlasse?

if (beanClass.newInstance() instanceof TestBean)

Eine Instanz von einer unbekannten Klasse zu erstellen ist gefährlich, denn:

Man weiss nicht was der Konstruktor tut Erstellen der Instanz kann teuer sein Der Default-Konstruktor könnte fehlen

Exception tritt auf

HdM Stuttgart SS07, Design Patterns – Antipatterns | Dirk Wendling | Marc Seeger | Stephan Helten

Page 58: Antipatternsblog.marc-seeger.de/assets/2007/05/antipatterns_ss07.pdf© HdM Stuttgart, Name, Studiengang, Datum Agenda Begri!serklärung Anti-Patterns im Projektmanagement Code-Design-Antipatterns

© HdM Stuttgart, Name, Studiengang, Datum© HdM Stuttgart, Name, Studiengang, Datum

smart use of reflectionClass beanClass = ...

if (TestBean.class.isAssignableFrom(beanClass)) ...

Instanz wird nicht erzeugt Semantik mit instanceof identisch

HdM Stuttgart SS07, Design Patterns – Antipatterns | Dirk Wendling | Marc Seeger | Stephan Helten

Page 59: Antipatternsblog.marc-seeger.de/assets/2007/05/antipatterns_ss07.pdf© HdM Stuttgart, Name, Studiengang, Datum Agenda Begri!serklärung Anti-Patterns im Projektmanagement Code-Design-Antipatterns

© HdM Stuttgart, Name, Studiengang, Datum© HdM Stuttgart, Name, Studiengang, Datum

Quiz: Frage 6Collection l = new Vector();for (...) { l.add(object);

}

Warum ist das ein Antipattern?

HdM Stuttgart SS07, Design Patterns – Antipatterns | Dirk Wendling | Marc Seeger | Stephan Helten

Page 60: Antipatternsblog.marc-seeger.de/assets/2007/05/antipatterns_ss07.pdf© HdM Stuttgart, Name, Studiengang, Datum Agenda Begri!serklärung Anti-Patterns im Projektmanagement Code-Design-Antipatterns

© HdM Stuttgart, Name, Studiengang, Datum© HdM Stuttgart, Name, Studiengang, Datum

synchronization overkillCollection l = new Vector();for (...) { l.add(object);

}

Vector = synchronized ArrayList Hashtable = synchronized HashMap Wenn sowieso nur ein Thread zugreift,

dann ist Vector zu verwenden ein SYNCHRONIZATION OVERKILL

HdM Stuttgart SS07, Design Patterns – Antipatterns | Dirk Wendling | Marc Seeger | Stephan Helten

Page 61: Antipatternsblog.marc-seeger.de/assets/2007/05/antipatterns_ss07.pdf© HdM Stuttgart, Name, Studiengang, Datum Agenda Begri!serklärung Anti-Patterns im Projektmanagement Code-Design-Antipatterns

© HdM Stuttgart, Name, Studiengang, Datum© HdM Stuttgart, Name, Studiengang, Datum

avoiding synchronization overkillCollection l = new ArrayList();for (...) { l.add(object);

}

ArrayList hat gleichen Funktionsumfang wie Vector Zugriff muss nicht synchronized sein, da single-

threaded Deutlicher Performance-Vorteil gegenüber der ersten

Lösung

HdM Stuttgart SS07, Design Patterns – Antipatterns | Dirk Wendling | Marc Seeger | Stephan Helten

Page 62: Antipatternsblog.marc-seeger.de/assets/2007/05/antipatterns_ss07.pdf© HdM Stuttgart, Name, Studiengang, Datum Agenda Begri!serklärung Anti-Patterns im Projektmanagement Code-Design-Antipatterns

© HdM Stuttgart, Name, Studiengang, Datum© HdM Stuttgart, Name, Studiengang, Datum

Quiz: Frage 7//Auszug aus einer Entity Bean

private String name;

public void setName(String name) { this.name = name.trim();}

public void String getName() { return this.name;}

Warum ist der Einsatz von trim()hier ein Antipattern?

HdM Stuttgart SS07, Design Patterns – Antipatterns | Dirk Wendling | Marc Seeger | Stephan Helten

Page 63: Antipatternsblog.marc-seeger.de/assets/2007/05/antipatterns_ss07.pdf© HdM Stuttgart, Name, Studiengang, Datum Agenda Begri!serklärung Anti-Patterns im Projektmanagement Code-Design-Antipatterns

© HdM Stuttgart, Name, Studiengang, Datum© HdM Stuttgart, Name, Studiengang, Datum

modifying setterspublic void setName(String name) { this.name = name.trim();}

Es werden andere Daten gespeichert als dem Setter übergeben werden Getter liefert andere Daten als Setter setzt

Entity Beans sind nicht für die Geschäftslogik, sondern nur für die Datenhaltung zuständig

Kann unvorhersehbare Nebeneffekte hervorrufen, dessen Ursache nur schwer zu finden ist

HdM Stuttgart SS07, Design Patterns – Antipatterns | Dirk Wendling | Marc Seeger | Stephan Helten

Page 64: Antipatternsblog.marc-seeger.de/assets/2007/05/antipatterns_ss07.pdf© HdM Stuttgart, Name, Studiengang, Datum Agenda Begri!serklärung Anti-Patterns im Projektmanagement Code-Design-Antipatterns

© HdM Stuttgart, Name, Studiengang, Datum© HdM Stuttgart, Name, Studiengang, Datum

modify before setperson.setName(textInput.getText().trim());

Geschäftslogik von Datenhaltung getrennt Keine unerwünschten Nebeneffekte Transparenz auch für andere Programmierer

HdM Stuttgart SS07, Design Patterns – Antipatterns | Dirk Wendling | Marc Seeger | Stephan Helten

Page 65: Antipatternsblog.marc-seeger.de/assets/2007/05/antipatterns_ss07.pdf© HdM Stuttgart, Name, Studiengang, Datum Agenda Begri!serklärung Anti-Patterns im Projektmanagement Code-Design-Antipatterns

© HdM Stuttgart, Name, Studiengang, Datum© HdM Stuttgart, Name, Studiengang, Datum

Quiz: Letzte Frage//Methode soll für Files bis 2 GB die Größe zurückgebenpublic int getFileSize(File f) { long l = f.length(); return (int) l;}

Sieht doch gut aus – Ist es das wirklich?

HdM Stuttgart SS07, Design Patterns – Antipatterns | Dirk Wendling | Marc Seeger | Stephan Helten

Page 66: Antipatternsblog.marc-seeger.de/assets/2007/05/antipatterns_ss07.pdf© HdM Stuttgart, Name, Studiengang, Datum Agenda Begri!serklärung Anti-Patterns im Projektmanagement Code-Design-Antipatterns

© HdM Stuttgart, Name, Studiengang, Datum© HdM Stuttgart, Name, Studiengang, Datum

not noticing overflowspublic int getFileSize(File f) { long l = f.length(); return (int) l;}

Bei Files, die größer als 2 GB sind, wird durch das Casten ein falscher Wert zurückgeliefert

HdM Stuttgart SS07, Design Patterns – Antipatterns | Dirk Wendling | Marc Seeger | Stephan Helten

Page 67: Antipatternsblog.marc-seeger.de/assets/2007/05/antipatterns_ss07.pdf© HdM Stuttgart, Name, Studiengang, Datum Agenda Begri!serklärung Anti-Patterns im Projektmanagement Code-Design-Antipatterns

© HdM Stuttgart, Name, Studiengang, Datum© HdM Stuttgart, Name, Studiengang, Datum

check for a possible overflowpublic int getFileSize(File f) { long l = f.length(); if (l > Integer.MAX_VALUE) throw new IllegalStateException("int overflow"); return (int) l;}

Methode überprüft auf möglichen Overflow undwirft bei Bedarf eine Exception

Keine falschen Ergebnisse!

HdM Stuttgart SS07, Design Patterns – Antipatterns | Dirk Wendling | Marc Seeger | Stephan Helten

Page 68: Antipatternsblog.marc-seeger.de/assets/2007/05/antipatterns_ss07.pdf© HdM Stuttgart, Name, Studiengang, Datum Agenda Begri!serklärung Anti-Patterns im Projektmanagement Code-Design-Antipatterns

Evolution und Antipatterns

Stephan Helten - SH094(MIB 4)

Page 69: Antipatternsblog.marc-seeger.de/assets/2007/05/antipatterns_ss07.pdf© HdM Stuttgart, Name, Studiengang, Datum Agenda Begri!serklärung Anti-Patterns im Projektmanagement Code-Design-Antipatterns

© HdM Stuttgart, Name, Studiengang, Datum© HdM Stuttgart, Name, Studiengang, Datum

Evolution und AntiPatterns

Welches dieser beiden Tiere ist mittlerweile zum Antipattern geworden?

Nacktmull Kakapo

HdM Stuttgart SS07, Design Patterns – Antipatterns | Dirk Wendling | Marc Seeger | Stephan Helten

Page 70: Antipatternsblog.marc-seeger.de/assets/2007/05/antipatterns_ss07.pdf© HdM Stuttgart, Name, Studiengang, Datum Agenda Begri!serklärung Anti-Patterns im Projektmanagement Code-Design-Antipatterns

© HdM Stuttgart, Name, Studiengang, Datum© HdM Stuttgart, Name, Studiengang, Datum

Evolution und AntiPatterns

Welches dieser beiden Tiere ist mittlerweile zum Antipattern geworden?

Nacktmull Kakapo

HdM Stuttgart SS07, Design Patterns – Antipatterns | Dirk Wendling | Marc Seeger | Stephan Helten

Page 71: Antipatternsblog.marc-seeger.de/assets/2007/05/antipatterns_ss07.pdf© HdM Stuttgart, Name, Studiengang, Datum Agenda Begri!serklärung Anti-Patterns im Projektmanagement Code-Design-Antipatterns

© HdM Stuttgart, Name, Studiengang, Datum© HdM Stuttgart, Name, Studiengang, Datum

Der Kakapo Ist ein Papagei, der vom Aussterben bedroht ist (es gibt 85 Stück) Besiedelt die drei neuseeländischen Hauptinseln Seine Anpassungen an Neuseelands Inseln wurden ihm zum

Verhängnis, als der Mensch kam

HdM Stuttgart SS07, Design Patterns – Antipatterns | Dirk Wendling | Marc Seeger | Stephan Helten

Page 72: Antipatternsblog.marc-seeger.de/assets/2007/05/antipatterns_ss07.pdf© HdM Stuttgart, Name, Studiengang, Datum Agenda Begri!serklärung Anti-Patterns im Projektmanagement Code-Design-Antipatterns

© HdM Stuttgart, Name, Studiengang, Datum© HdM Stuttgart, Name, Studiengang, Datum

Der Kakapo und das FliegenDer Kakapo…

hat das Fliegen verlernt, er kann nurnoch gleiten

kann aber gut laufen kugelrund und gut genährt kann gut klettern

HdM Stuttgart SS07, Design Patterns – Antipatterns | Dirk Wendling | Marc Seeger | Stephan Helten

Page 73: Antipatternsblog.marc-seeger.de/assets/2007/05/antipatterns_ss07.pdf© HdM Stuttgart, Name, Studiengang, Datum Agenda Begri!serklärung Anti-Patterns im Projektmanagement Code-Design-Antipatterns

© HdM Stuttgart, Name, Studiengang, Datum© HdM Stuttgart, Name, Studiengang, Datum

Der Kakapo und seine FeindeDer Kakapo…

ist sehr neugierig Hat kein Feindverhalten gegen Bodenprädatoren erstarrt bei Gefahr und verlässt sich auf seine

Tarnung das ist gut gegen Adler das ist schlecht gegen Raubtiere und Menschen

HdM Stuttgart SS07, Design Patterns – Antipatterns | Dirk Wendling | Marc Seeger | Stephan Helten

Page 74: Antipatternsblog.marc-seeger.de/assets/2007/05/antipatterns_ss07.pdf© HdM Stuttgart, Name, Studiengang, Datum Agenda Begri!serklärung Anti-Patterns im Projektmanagement Code-Design-Antipatterns

© HdM Stuttgart, Name, Studiengang, Datum© HdM Stuttgart, Name, Studiengang, Datum

Die Kakapo-MännchenDie Kakapo-Männchen…

rufen bis zu 8 Stunden pro Nacht drei bis vier Monate lang Ihre Balzrufe und verlieren in dieser Zeit ca. die Hälfte ihres Körpergewichts

fangen erst ab dem 5. Lebensjahr mit Balzrufen an

paaren sich auch gerne mit Ästen und zusammengerollten Pullovern

HdM Stuttgart SS07, Design Patterns – Antipatterns | Dirk Wendling | Marc Seeger | Stephan Helten

Page 75: Antipatternsblog.marc-seeger.de/assets/2007/05/antipatterns_ss07.pdf© HdM Stuttgart, Name, Studiengang, Datum Agenda Begri!serklärung Anti-Patterns im Projektmanagement Code-Design-Antipatterns

© HdM Stuttgart, Name, Studiengang, Datum© HdM Stuttgart, Name, Studiengang, Datum

Die Kakapo-WeibchenDie Kakapo-Weibchen…

lassen jede Nacht für die Nahrungssuche ihre Eier alleine zurück

die Eier unterkühlen die Eier werden leichte Beute

für andere Tiere Weibchen brüten nur, wenn der

Rimu-Baum besonders intensiv blüht

das geschieht nur alle drei bis fünf Jahre

Weibchen sind erst ab dem 10. Lebensjahr zur Paarung bereit

HdM Stuttgart SS07, Design Patterns – Antipatterns | Dirk Wendling | Marc Seeger | Stephan Helten

Page 76: Antipatternsblog.marc-seeger.de/assets/2007/05/antipatterns_ss07.pdf© HdM Stuttgart, Name, Studiengang, Datum Agenda Begri!serklärung Anti-Patterns im Projektmanagement Code-Design-Antipatterns

© HdM Stuttgart, Name, Studiengang, Datum© HdM Stuttgart, Name, Studiengang, Datum

Fazit Der Kakapo ist gut an seine Umwelt angepasst gewesen, bevor

der Mensch und mit ihm seine Haustiere und andere Prädatoren auf die Inseln kamen

Durch die neuen Umweltbedingungen hat sich sein, durch die Evolution entstandenes, Verhaltensmuster zum Antipattern umgewandelt

auf die Software-Entwicklung übertragen: Design-Patterns können sich durch verschiedene Umstände

zu Antipatterns wandeln Design-Patterns sind nicht für alle Zeiten gültig:

Was gestern noch üblich und gut war kann morgen schon ein Antipattern sein

HdM Stuttgart SS07, Design Patterns – Antipatterns | Dirk Wendling | Marc Seeger | Stephan Helten

Page 77: Antipatternsblog.marc-seeger.de/assets/2007/05/antipatterns_ss07.pdf© HdM Stuttgart, Name, Studiengang, Datum Agenda Begri!serklärung Anti-Patterns im Projektmanagement Code-Design-Antipatterns

© HdM Stuttgart, Name, Studiengang, Datum© HdM Stuttgart, Name, Studiengang, Datum

How to write unmaintainable code

Marc Seeger – MS155(MIB 4)

Page 78: Antipatternsblog.marc-seeger.de/assets/2007/05/antipatterns_ss07.pdf© HdM Stuttgart, Name, Studiengang, Datum Agenda Begri!serklärung Anti-Patterns im Projektmanagement Code-Design-Antipatterns

© HdM Stuttgart, Name, Studiengang, Datum© HdM Stuttgart, Name, Studiengang, Datum

Namensgebung

"When I use a word," Humpty Dumpty said, in a rather scornful tone, "it means just what I choose it to mean - neither more nor less."

Lewis Carroll - Through the Looking Glass, Chapter 6

HdM Stuttgart SS07, Design Patterns – Antipatterns | Dirk Wendling | Marc Seeger | Stephan Helten

Page 79: Antipatternsblog.marc-seeger.de/assets/2007/05/antipatterns_ss07.pdf© HdM Stuttgart, Name, Studiengang, Datum Agenda Begri!serklärung Anti-Patterns im Projektmanagement Code-Design-Antipatterns

© HdM Stuttgart, Name, Studiengang, Datum© HdM Stuttgart, Name, Studiengang, Datum

Namensgebung Kreative Schreibfehler!

getNumber <--> setNubmer() Abstraktionsvermögen!

PerformDataFunction(), DoSomething(), HandleStuff() GrossBuchStaben ASCII ist euer Freund

Ð, ñ, ¥, µ Emotionen!

marypoppins = (superman + starship) / god;

HdM Stuttgart SS07, Design Patterns – Antipatterns | Dirk Wendling | Marc Seeger | Stephan Helten

Page 80: Antipatternsblog.marc-seeger.de/assets/2007/05/antipatterns_ss07.pdf© HdM Stuttgart, Name, Studiengang, Datum Agenda Begri!serklärung Anti-Patterns im Projektmanagement Code-Design-Antipatterns

© HdM Stuttgart, Name, Studiengang, Datum© HdM Stuttgart, Name, Studiengang, Datum

Tarnung

The longer it takes for a bug to surface, the harder it is to find.- Roedy Green

HdM Stuttgart SS07, Design Patterns – Antipatterns | Dirk Wendling | Marc Seeger | Stephan Helten

Page 81: Antipatternsblog.marc-seeger.de/assets/2007/05/antipatterns_ss07.pdf© HdM Stuttgart, Name, Studiengang, Datum Agenda Begri!serklärung Anti-Patterns im Projektmanagement Code-Design-Antipatterns

© HdM Stuttgart, Name, Studiengang, Datum© HdM Stuttgart, Name, Studiengang, Datum

Tarnung

HdM Stuttgart SS07, Design Patterns – Antipatterns | Dirk Wendling | Marc Seeger | Stephan Helten

Page 82: Antipatternsblog.marc-seeger.de/assets/2007/05/antipatterns_ss07.pdf© HdM Stuttgart, Name, Studiengang, Datum Agenda Begri!serklärung Anti-Patterns im Projektmanagement Code-Design-Antipatterns

© HdM Stuttgart, Name, Studiengang, Datum© HdM Stuttgart, Name, Studiengang, Datum

Dokumentation

Incorrect documentation is often worse than no documentation.- Bertrand Meyer

HdM Stuttgart SS07, Design Patterns – Antipatterns | Dirk Wendling | Marc Seeger | Stephan Helten

Page 83: Antipatternsblog.marc-seeger.de/assets/2007/05/antipatterns_ss07.pdf© HdM Stuttgart, Name, Studiengang, Datum Agenda Begri!serklärung Anti-Patterns im Projektmanagement Code-Design-Antipatterns

© HdM Stuttgart, Name, Studiengang, Datum© HdM Stuttgart, Name, Studiengang, Datum

Dokumentation Lügt in euren Kommentaren (Man muss ja nicht immer „up-

to-date“ sein) Dokumentiert nur das „wie“, nicht das „warum“ „makeSnafucated()“ --> /* make snafucated */

HdM Stuttgart SS07, Design Patterns – Antipatterns | Dirk Wendling | Marc Seeger | Stephan Helten

Page 84: Antipatternsblog.marc-seeger.de/assets/2007/05/antipatterns_ss07.pdf© HdM Stuttgart, Name, Studiengang, Datum Agenda Begri!serklärung Anti-Patterns im Projektmanagement Code-Design-Antipatterns

© HdM Stuttgart, Name, Studiengang, Datum© HdM Stuttgart, Name, Studiengang, Datum

Programm Design

The cardinal rule of writing unmaintainable code is to specify each fact in as many places as possible and in as many ways as possible.

- Roedy Green

HdM Stuttgart SS07, Design Patterns – Antipatterns | Dirk Wendling | Marc Seeger | Stephan Helten

Page 85: Antipatternsblog.marc-seeger.de/assets/2007/05/antipatterns_ss07.pdf© HdM Stuttgart, Name, Studiengang, Datum Agenda Begri!serklärung Anti-Patterns im Projektmanagement Code-Design-Antipatterns

© HdM Stuttgart, Name, Studiengang, Datum© HdM Stuttgart, Name, Studiengang, Datum

Programm Design Java Casts

Datentyp ändern --> alle Casts müssen geändert werden Riesen Listener

Warum für jeden Button einen Listener wenn die sich auch alle einen teilen können :)

Public deklarieren und setter-Methoden Es gibt nur ein wahres Layout - kein Layout (absolute Werte) „Too Much Of A Good Thing“

HdM Stuttgart SS07, Design Patterns – Antipatterns | Dirk Wendling | Marc Seeger | Stephan Helten

Page 86: Antipatternsblog.marc-seeger.de/assets/2007/05/antipatterns_ss07.pdf© HdM Stuttgart, Name, Studiengang, Datum Agenda Begri!serklärung Anti-Patterns im Projektmanagement Code-Design-Antipatterns

© HdM Stuttgart, Name, Studiengang, Datum© HdM Stuttgart, Name, Studiengang, Datum

Programmiersprachennutzt LISP:(lambda (*<8-]= *<8-[= ) (or *<8-]= *<8-[= )) (defun :-] (<) (= < 2)) (defun !(!)(if(and(funcall(lambda(!)(if(and '(< 0)(< ! 2))1 nil))(1+ !)) (not(null '(lambda(!)(if(< 1 !)t nil)))))1(* !(!(1- !)))))

HdM Stuttgart SS07, Design Patterns – Antipatterns | Dirk Wendling | Marc Seeger | Stephan Helten

Page 87: Antipatternsblog.marc-seeger.de/assets/2007/05/antipatterns_ss07.pdf© HdM Stuttgart, Name, Studiengang, Datum Agenda Begri!serklärung Anti-Patterns im Projektmanagement Code-Design-Antipatterns

© HdM Stuttgart, Name, Studiengang, Datum© HdM Stuttgart, Name, Studiengang, Datum

Unsere Quellen Projektmanagement & Software-Design-Antipatterns:

http://www.little-idiot.de/teambuilding/AntiPatternSoftwareentwicklung.pdf

Java-Antipatterns:http://www.odi.ch/prog/design/newbies.php

how to write unmaintainable code:http://thc.org/root/phun/unmaintain.html

Kakapo:Douglas Adams – Die Letzten ihrer Art [Heyne (November 1992) | ISBN-10: 3453061152]

Page 88: Antipatternsblog.marc-seeger.de/assets/2007/05/antipatterns_ss07.pdf© HdM Stuttgart, Name, Studiengang, Datum Agenda Begri!serklärung Anti-Patterns im Projektmanagement Code-Design-Antipatterns

© HdM Stuttgart, Name, Studiengang, Datum© HdM Stuttgart, Name, Studiengang, Datum

Vielen Dank für Eure Aufmerksamkeit!

Page 89: Antipatternsblog.marc-seeger.de/assets/2007/05/antipatterns_ss07.pdf© HdM Stuttgart, Name, Studiengang, Datum Agenda Begri!serklärung Anti-Patterns im Projektmanagement Code-Design-Antipatterns

Hochschule der Medien

Nobelstraße 1070569 Stuttgart

Tel. 0711 8923 10Fax 0711 8932 11

[email protected]