Strukturierte Programmierung

Theorie 1. Semester

Theorie 1. Semester


Nik Kaiser
Diese Lernkarten behandeln die Grundlagen der strukturierten Programmierung auf Universitätsniveau. Sie decken Themen wie Kontrollstrukturen, Datenstrukturen, abstrakte Datentypen und die Organisation von Speicher ab. Die Karteikarten sind ideal für Studierende der Informatik, die ein tieferes Verständnis für die Erstellung effizienter und fehlerfreier Programme erlangen möchten.
Flashcards
49
Students
2
Language
German
Category
Computer Science
Level
University
Created / Updated
05.01.2014 / 18.07.2016

Lernkarten

Programmiersprachen

ermöglichen formale Beschreibung von Problemlösungsverfahren, welche auf Computern ausführbar sind.

Programmentwicklung

Zweistufiges Verfahren:
- Entwurf : Formulierung eines abstrakten Problemlöseverfahrens

- Codierung: Entwurf wird mit Programmiersprache in ein Programm transformiert, unter Verwendung von Kontrollstrukturen und Datentypen

Algorithmen

Berechnungsverfahren, formale Eigenschaften: Korrektheit & Effizienz

eindeutige, ausführbare Folge von Anweisungen endlicher Länge zur Lösung eines Problems

Datenstrukturen

Datenansammlungen, die gleich aufgebaut sind und gleich verwendet werden können

Quellcode

Textform eines Programmes

Compiler

Übersetzungsprogramm für Quellcode->Maschinenbefehle

Interpreter

Programm, welches Quellcode einließt und befehle nacheinander ausführt

Syntax

Anforderungen an die Form von Programmen/Quellcode (formale Regeln)

Debugging

aufspüren von Fehlern in Programmen

Strukturierte Programmierung

- ist ein programmiersprachenübergreifendes Programmierparadigma
- Geprägt durch baumartige Zerlegung eines Programmes in Teilprogramme/Prozeduren
- beschränkt auf drei Kontrollstrukturen: Sequenz (hintereinander auszuführende Anw.), Auswahl(Verzweigung,else-if), Wiederholung(schleifen)
- So werden Sprunganweisungen vermieden (kein GOTO, kein Spaghetticode z.B. in BASIC)
- Implementierung von Teilprogrammen und Kontrollstrukturen -> Vermeidung von Wdh.
- Vorteile: Einfachere suche von Prog-Fehlern/Wartung, kürzere/übersichtlichere Programme

Pascal

- höhere Programmiersprache (ähnelt entfernt der menschlichen, vereinfacht „große“ Operationen der Maschinensprache durch andere Syntax: Abstraktion)
- typisierte Sprache (Inhalte von Variablen durch Datentyp festgelegt)
- bietet „Strong Typing“ //ggf unwichtige, stärke der Typisierung
- auf fast allen Computern unter fast jedem OS ausführbar

Abstraktion

verschieden Arten um Programmieren zu vereinfachen (sichtbare Abstraktionssicht -> verborgene Detailsicht):

- bei Ausdrücken (Nutzung von Rechenoperatoren),
- in Kontrollstrukturen (if-else Abfragen, Schleifen),
- Datenabstraktion (Datentypen, OOP, spezielle Daten auf die nur mit bestimmten Operationen zugegriffen werden können)

Hardware eines typischen Computers

Buse ermöglichen die Kommunikation zwischen
- CPU: Führt Befehle aus. Zwei Komponenten ALU(Datenmanipulation), Control Unit (Koordinierung der Aktivitäten)
- Main Memory: Enthält Programme und Daten, speichert Bits in „word“s, jedes word in einer „celle“ mit eindeutiger Adresse, diese können wahlfrei zugegriffen werden (RAM)
- Peripheral devices: Kommunikation mit der äußeren Welt (Input/Output, LAN), Langzeitspeicherung

Was steht in den einzelnen Teilen des Speichers

- CLA/EV: Eingaben (z.B. Kommandozeile)

- Stack: Lokale Variablen, Rücksprungadressen, Parameter

- Heap: reservierter Speicher der angefordert werden kann (z.B. Pointer mit New..., vom Programm vorgegeben)

- uninitialized data: Global deklarierte Variablen (i=Integer)
- Initialized data: Global definierte Konstanten/variablen (i=5)

- text: compilierter Programmcode (Binärcode)

Variable

Name für ein Stück zusammenhängender Speicher. Darin lassen sich Werte merken welche sich während der Ausführung verändern lassen.

Konstante

Name für ein Stück zusammenhängender Speicher. In diesem steht ein, während der Ausführung unveränderlicher Wert.
Der Name heißt Literal.

Datentyp

elementare Datentypen:
- einzelne Variable als Einheit
- Klassifizierung als Datentyp
- Satz von möglichen Werten/Menge von Operationen die auf dem Typ ausgeführt werden können

Sollen eindeutig zu Beginn definiert werden. Dienen der Speicheroptimierung (einige benötigen weniger als andere)

Datenstruktur

Aggregation gleicher (homogen) oder verschiedener (heterogen) Datentypen/-strukturen wie Record/Array

Aufzählugstypen

[0..10]
Material=(eisen, stahl, kupfer)

Charakter

enthält genau ein Zeichen, konstant oder variabel

String

Eine Reihe von Zeichen, konstant oder variabel

Boolean

Kontroll-Flag oder Schalter, nur zwei Einstellungen: true oder false

Record

Datenstruktur/Kollektion verschiedener Datenelemente/Felder. Kann heterogen sein

Array

Datenstruktur aus vielen Variablen/Strukturen die jeweils dem gleichen Datentyp angehören

Dateien

Gespeicherter Bestand von Daten
gängigste Methode um daten einzulesen oder langfristig zu speichern

Konvertierung

Überführen eines Datentyps in einen anderen (erweiternd oder reduzierend)

Fehler

Syntaxfehler
semantischer
compile-time error (Fehler zur Kompilierungszeit erkannt)
runtime-error (Fehler zur Ausführungszeit aufgetreten)

Definition

Definieren eine Konstanten mit festem Wert (i=5)

Deklaration

Deklarieren einer variablen mit Datentyp (i:Integer)

Prozedur (Kapselung von Komplexität und Information)

Subroutine, die von anderen Programmteilen aufgerufen werden kann. Berechnet etwas und kehrt anschließend an die Stelle zurück, von der sie aufgerufen wurde.

Funktion (Kapselung von Komplexität und Information)

berechnet einen Wert und gibt diesen als Ergebnis zurück.
kehrt nach Ausführung an Aufrufposition zurück

Modul (Kapselung von Komplexität und Information)

Ermöglichen Kapselung von Quellcode in eigener Datei (Auslagerung)

Units

Bibliotheken, vorgefertigt oder selbst erstellt (z.B. Module). Werden durch uses eingebunden.

Übergabeparameter

Übergabe von variablen an eine Prozedur:

Call by Value: Normalfall, Werte werden auf den Stack kopiert und mit der Kopie gearbeitet.
Call by Reference (var): Adresse der übergebenen Variable wird auf den Stack kopiert (pointer). Es wird also mit der original Variablen gearbeitet.

Beschreibungsmöglichkeit von Algorithmen

Natürliche Sprache
Pseudocode
Flussdiagramme
Struktogramme
Programmiersprache

Rekursion

Eine Funktion, die sich selbst aufruft. EIn Problem wird hier auf ein einfacheres Problem der gleichen Kategorie zurückgeführt.
Pro: kompakte Implementierung
Contra: Verbraucht viel Stack, langsam

Pseudocode

Abstrakte Beschreibung von Algorithmen (einfach zu verstehen/schreiben)

Strukturierter als Sprache aber weniger detailliert als ProgrammStatements
In einfachem Englisch
Jede INstruktion in separater Zeile
Keywords und Symbole zur Auszeichnung der Kontrollstrukturen

Grundlegende Operationen von Computern

- Informationen empfangen: Read (Alorithmus liest von Datensatz), Get (A. liest von Tastatur)
- Informationen ausgeben: Print (Zeichen an Drucker, Write(in eine Datei, Put/Output/Display(Ausgabe an Bildschirm), Prompt (verursacht Ausgabe/Nachfrage vor Eingabe)
- Berechnung durchführen: Compute, Calculae mit Symbolen +-*/
- Werte Speicherbereiche zuweisen: Initialise/Set (Speicher einen initialen Wert zuweisen), Save/Store
- zwei Variablen vergleichen und Alternativaktion auswählen: if, then, else
- Gruppe von Instruktionen wiederholt ausführen: dowhile enddo

Man kann jedes Programm formulieren unter ausschließlicher Verwendung von 3 Kontrollstrukturen:

Sequence/Sequenz (Anweisungsablauf)
Selection/Auswahl (if-else)
Repetition/Wiederholung (Schleifen)

Abstrakter Datentyp

2 Prinzipien
Kapselung: zu einem ADT gehört eine Schnittstelle, Zugriffe auf Datenstruktur erfolgen ausschließlich darüber

Geheimnisprinzip: interne Realisierung eines ADT Moduls bei der Umsetzung bleibtg verborgen

Implementierung zum Beispiel imt ADT Liste mit der Datenstruktur "dynamisches Feld" oder "Verkettete Liste", daher gibt es zu Interface List die Implementation "Arraylist" und "Linkedlist"

Étudier