Strukturierte Programmierung
Theorie 1. Semester
Theorie 1. Semester
-
- 1 / 49
-
Cartes-fiches
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
- 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"