Top-Down- und Bottom-Up-Design
# Top-Down- und Bottom-Up-Design

Top-Down (engl. von oben nach unten) und Bottom-Up (engl. von unten nach oben) sind Ansätze zur Programmentwicklung in der Softwaretechnik.
Im Top-Down-Design (Überbau-Ansatz) beginnt man mit der Formulierung eines Überblicks über das System, Details werden vernachlässigt. Stattdessen wird der Algorithmus in Abschnitte unterteilt, die gewünschte Funktionalität wird zunächst umgangssprachlich angegeben. Diese Abschnitte werden im Folgenden genauer ausformuliert, die zunächst aus genauer definierten, kleineren Abschnitten besteht, bis schließlich die komplette, detaillierte Spezifikation des Algorithmus erreicht ist. Bei der Top-Down-Methode liegt der Schwerpunkt auf Planung und Verständnis des Systems. Code kann erst geschrieben werden, wenn das System detailliert genug geplant ist.
Im Gegensatz dazu werden beim Bottom-Up-Design (Basis-Ansatz) zunächst einzelne Programmbestandteile (z. B. Funktionen, Klassen, Module) definiert, eventuell sogar direkt geschrieben. Aus diesen Teilen werden dann größere Elemente des Programms zusammengesetzt, bis das vollständige System erstellt ist. Dabei sollte darauf geachtet werden, dass ein Quelltext entsteht, den man jederzeit in einem anderen Projekt verwenden kann.
Bei der Bottom-Up-Methode kann man im Gegensatz zur Top-Down-Methode schnell mit der Programmierung beginnen. Das beinhaltet allerdings das Risiko, dass die Kombination des dabei geschriebenen Codes noch nicht durchdacht war, was die Zusammensetzung zum Programm erschweren kann. Programmierumgebungen, die eine umfangreiche Standardbibliothek (z. B. .Net-Framework) mitbringen, benötigen deutlich weniger Bottom-Up-Design als Umgebungen, die nur eine minimale Unterstützung (z. B. Forth-Systeme) geben.
In der modernen Softwaretechnik werden meist beide Designtechniken kombiniert angewandt, da zwar einerseits ein Verständnis des gesamten Systems, wie es durch Top-Down-Design erreicht wird, notwendig ist, andererseits aber bis zu einem gewissen Grad existierender Code wiederverwendet werden soll (siehe Wiederverwendbarkeit).