SlideShare ist ein Scribd-Unternehmen logo
Basisinformationstechnologie I 
Universität zu Köln. Historisch-Kulturwissenschaftliche Informationsverarbeitung 
Jan G. Wieners // jan.wieners@uni-koeln.de 
Wintersemester 2014/15 
17. Dezember 2014 – Programmiersprachen I
Themenüberblick „Programmiersprachen I“ 
Phasen der Programmentwicklung 
 Analyse 
 Spezifikation 
 Entwurf 
 Algorithmus 
 Pseudocode 
 Implementation 
 Post-Implementation 
Programmiersprachen 
 Compiler / Interpreter 
 Typisierung 
 Paradigmen 
 Objektorientierung
Neulich in den 
Sommerferien…
BIT I WiSe 2014 | Basisinformationstechnologie I - 08: Programmiersprachen I
BIT I WiSe 2014 | Basisinformationstechnologie I - 08: Programmiersprachen I
BIT I WiSe 2014 | Basisinformationstechnologie I - 08: Programmiersprachen I
BIT I WiSe 2014 | Basisinformationstechnologie I - 08: Programmiersprachen I
BIT I WiSe 2014 | Basisinformationstechnologie I - 08: Programmiersprachen I
BIT I WiSe 2014 | Basisinformationstechnologie I - 08: Programmiersprachen I
Analyse
Programmentwicklung: Analyse 
Descartes (1596-1650) 
„Regeln zur Leitung des 
Geistes" (1628): 
 Hohe Relevanz der 
Analysephase 
 Aufteilung in Teil- und 
Unterprobleme 
 Hierarchischer 
Erkenntnisprozess 
 Analyse der Analyse 
i.e. Sicherung der Analyse
Programmentwicklung: Algorithmus 
Spezifikation: Problembeschreibung – im Gegensatz 
zum Algorithmus, der die Lösung des Problems angibt 
Algorithmus: Anleitung oder Vorschrift, wie sich ein 
Problem lösen lässt 
 Arbeitsdefinition Algorithmus: Eindeutige 
Beschreibung eines endlichen Verfahrens zur Lösung 
einer bestimmten Klasse von Problemen 
Algorithmus im Labyrinthbeispiel: Verfahren, um aus 
dem dunklen Labyrinth zu gelangen
Entwurf
Finden Sie einen Weg aus dem Labyrinth
Entwerfen Sie einen Algorithmus, der Sie aus jedem Labyrinth (mit Ausgang) führt
Terminierung von Algorithmen: 
Wir verlangen (zumeist) von 
Algorithmen, dass sie terminieren, 
d.h. dass sie in endlicher Zeit (und 
möglichst schnell  Performance) 
ihre Arbeit erledigt haben 
Entwerfen Sie einen Algorithmus, der Sie aus jedem Labyrinth (mit Ausgang) führt
Programmentwicklung: Entwurfsphase III 
Pledge-Algorithmus: 
 Prämisse: Wir gehen davon aus, dass alle Ecken rechtwinklig 
sind 
 Somit kommen nur Rechtsdrehungen und Linksdrehungen um 
jeweils 90 Grad vor 
 Wir verwalten unterwegs einen Umdrehungszähler, der: 
 bei jeder Linksdrehung um eins erhöht und 
 bei jeder Rechtsdrehung um eins verringert wird (auch bei der 
ersten Rechtsdrehung, die nach dem Auftreffen auf eine Wand 
ausgeführt wird). 
 Zu Beginn wird dieser Umdrehungszähler auf null gesetzt 
 Anschließend werden die beiden Anweisungen 
 geradeaus, bis Wand erreicht 
 Folge der Wand, bis Umdrehungszähler = 0 
solange wiederholt, bis wir ins Freie gelangen
Pseudocode 
Pseudocode Pledge-Algorithmus: 
 Setze Umdrehungszähler auf 0; 
 Wiederhole 
 Wiederhole 
 Gehe geradeaus; 
 Solange Wand erreicht; 
 Drehe nach rechts; 
 Wiederhole 
 Folge dem Hindernis; 
 Solange Umdrehungszähler=0; 
 Solange ins Helle gelangt; 
 Der Entwurf ist unabhängig von der Programmiersprache!
BIT I WiSe 2014 | Basisinformationstechnologie I - 08: Programmiersprachen I
Implementation 
Programmerstellung und Programmiersprachen
Programmiersprachen
Strukturierte Computerorganisation 
Problemorientierte Sprache 
Assemblersprache 
Betriebssystemmaschine 
Befehlssatzarchitektur (ISA) 
Mikroarchitektur 
Digitale Logik 
Ebene 5 
Ebene 4 
Ebene 3 
Ebene 2 
Ebene 1 
Ebene 0
Programmiersprachen: Klassifizierung 
Maschinennahe Programmiersprache: Assembler 
Beispiel: „Hello World“ : 
DATA SEGMENT ;- Beginn des Datensegments 
Meldung db "Hello World" ;- Die Zeichenkette "Hello World" 
db "$" ;- Endzeichen der Zeichenkette 
DATA ENDS ;- Ende des Datensegment 
CODE SEGMENT ;- Beginn des Codesegements 
ASSUME CS:CODE,DS:DATA ;- Dem Assembler die Segmente mitteilen 
Anfang: ;- Label für den Anfang des Programms 
mov ax, DATA ;- das Daten... 
mov ds, ax ; ...segment festlegen 
mov dx, offset Meldung ;- den Text in das auf DS bezogene Datenregister 
laden 
mov ah, 09h ;- Die Unterfunktion 9 des Betriebssysteminterrupts 
21h auswählen 
int 21h ;- den Betriebssysteminterrupt 21h (hier erfolgt 
Ausgabe des Texts) aufrufen 
mov ax, 4C00h ;- Die Unterfunktion 4Ch (Programmbeendigung) des 
Betriebssysteminterrupts 21h festlegen 
int 21h ;- diesen Befehl wiederum ausführen 
CODE ENDS ;- Ende des Codesegments 
END Anfang ;- dem Assembler das Ende des Labels Anfang mitteilen 
Vgl.: http://de.wikipedia.org/wiki/Assemblersprache
Programmiersprachen 
Anweisungen, die wir dem Computer geben, werden als Text 
formuliert, z.B.: 
In Python: 
print "Hello World!" 
In PHP: 
print "Hello World!"; 
In JavaScript: 
document.write("Hello World!"); 
In C++: 
cout << "Hello World";
Programmiersprachen 
Programmtext ist formuliert nach festen Regeln: 
Beispiel C++: 
cout << "Hello World"; 
Die Regeln (Grammatik) der Programmiersprache 
C++ schreiben vor, dass der Ausdruck 
cout << "Hello World" 
mit einem Semikolon abgeschlossen werden 
muss
BIT I WiSe 2014 | Basisinformationstechnologie I - 08: Programmiersprachen I
Spracheigenschaften und 
Programmierparadigmen
BIT I WiSe 2014 | Basisinformationstechnologie I - 08: Programmiersprachen I
? var beispiel = 23;
Deklaration und Initialisierung 
In JavaScript: 
// Deklaration 
var eineVariable, eineWeitereVariable; 
// Initialisierung 
eineVariable = 23; 
eineWeitereVariable = “Hello World!“;
Typisierung 
Variablen: Behälter / Speicherstelle; Typisierung  Typ 
der Variable 
In JavaScript: 
// Deklaration 
var eineVariable, eineWeitereVariable; 
 Dynamische Typisierung 
In C++: 
int eineVariable = 23; 
char eineWeitereVariable[]="Hello World"; 
 Statische Typisierung 
Datentyp
Datentypen (C++) 
Einfache Datentypen in C++: 
 bool  Wahrheitswerte 
 int  ganze Zahlen 
 unsigned int  Natürliche Zahlen 
 float  Fließkommazahlen 
 double  Fließkommazahlen, doppelte Genauigkeit 
 char  Zeichen 
Zusammengesetzte Datentypen (in C++): 
 string  Zeichenketten 
 array  Sammlung von Daten eines Datentyps
Doppelte Genauigkeit…?!?
Paradigmen: 
 funktional 
 objektorientiert 
 prozedural 
 etc. etc. etc.
Programmierparadigmen: Funktionale Programmierung 
var randomize = function( lowerBound, 
upperBound ) { 
if( lowerBound > upperBound ) { 
return( -1 ); 
} 
if( lowerBound === upperBound ) { 
return( lowerBound ); 
} 
return lowerBound + parseInt( 
Math.random() * ( upperBound-lowerBound+1 ), 
10); 
}
Objektorientierte Programmierung 
Objektorientierte Programmierung [C++, Java] 
 Zentrales Konzept: Objekt 
 Objekt 
 Verfügt über einen bestimmten Zustand 
 Reagiert mit einem definierten Verhalten auf 
Anforderungen / seine Umgebung 
 Besitzt eine Identität, die es von anderen Objekten 
unterscheidet 
 Kann mit anderen Objekten verbunden sein
Objektorientierung
Kapselung, Information Hiding, Geheimnisprinzip 
Abb.: Balzert, Heide: Lehrbuch der Objektmodellierung. Heidelberg, 2005.
Zentrales Konzept I: Klassen 
Gleichartige Objekte (Objekte mit denselben 
Operationen und gleichen Attributen) gehören zur 
gleichen Klasse. 
Abstrakt vs. konkret: Jedes Objekt ist Exemplar bzw. 
Instanz einer Klasse 
Klasse: Definiert für eine Sammlung von Objekten 
deren 
 Struktur (Attribute) 
 Verhalten (Operationen) 
 Beziehungen 
 Verfügt über Mechanismen, um neue Objekte zu erzeugen 
(Object Factory)
Klassen in C++  Kapselung / Information Hiding 
class EineKlasse 
{ 
public: // öffentlicher Teil 
EineKlasse() // Konstruktor 
{ 
klassenVariable=23; 
} 
~EineKlasse(); // Destruktor 
int gebeVariablezurueck(void) 
{ 
return klassenVariable; 
} 
private: // privater Teil 
int klassenVariable; // private Variable 
};
Notation von Klassen 
Abb.: Balzert, Heide: Lehrbuch der Objektmodellierung. Heidelberg, 2005.
Zentrales Konzept II: Vererbung 
 Eine Klasse kann Elemente (Variablen, Konstanten, Funktionen) von 
anderen Klassen erben 
Beispiel C++: 
class Person 
{ 
string name; 
//... 
}; 
class Mitarbeiter : Person 
{ 
long sozialversicherungsNr; 
//... 
};
Martial Arts Objects (Vererbung) 
Martial Arts Fighter 
attribute 1: name 
attribute 2: gender 
attribute 2: two legs 
attribute 3: two arms 
behaviour 1: getName() 
behaviour 2: walk() 
behaviour 3: bong_sau() 
behaviour 4: tan_sau()
Objektorientierte Programmiersprache: C++ 
C++: 
 Ermöglicht maschinennahe Programmierung (Stichw. 
„Zeiger“), als auch abstrakte Programmierung (i.e. 
Objektorientierung) 
 Kompilierung über g++ Compiler, Microsoft Visual C++ 
Compiler, etc.
Objektorientierte Programmiersprachen: Java 
Java 
 Besonderheit: Java-Programme werden in Bytecode übersetzt, 
anschließend in einer Java-Laufzeitumgebung ausgeführt  
Virtuelle Maschine (VM) 
 Vorteil: Plattformunabhängigkeit: Java-Programme laufen 
(zumeist) ohne weitere Anpassungen auf unterschiedlichen 
Computer- und Betriebssystemen, für die eine Java-VM 
existiert
/

Weitere ähnliche Inhalte

PPTX
Bit WiSe 2013 | Basisinformationstechnologie I - 08: Programmiersprachen I
PPTX
Was geht mit Java 17?
PDF
Typescript
PDF
Funktionales Programmieren mit Clojure
PDF
Inter Prozedurale Zeigeranalyse
PPT
Die freie Programmiersprache Python
TXT
Do while
DOC
SchüLerscript Imperative Programmierung Mit Der Delphi Konsole
Bit WiSe 2013 | Basisinformationstechnologie I - 08: Programmiersprachen I
Was geht mit Java 17?
Typescript
Funktionales Programmieren mit Clojure
Inter Prozedurale Zeigeranalyse
Die freie Programmiersprache Python
Do while
SchüLerscript Imperative Programmierung Mit Der Delphi Konsole

Was ist angesagt? (12)

PDF
C++11 und c++14
PDF
Scalaz introduction for Java programmers
PDF
Die unsichtbaren Diener – Der Compiler und seine Artgenossen
PDF
Übungsaufgaben SS2010
PDF
Nigh Session Scala
PDF
Einführung in die funktionale Programmierung
PDF
T2 s4 javascriptfuerfortgeschrittene
PDF
Einführung in .NET mit C#
PDF
C Sharp Einfuehrung Teil 1
PDF
Battle of the Languages: Java und Python im Wettstreit beim Lösen von Program...
PDF
An Introduction to Ruby
C++11 und c++14
Scalaz introduction for Java programmers
Die unsichtbaren Diener – Der Compiler und seine Artgenossen
Übungsaufgaben SS2010
Nigh Session Scala
Einführung in die funktionale Programmierung
T2 s4 javascriptfuerfortgeschrittene
Einführung in .NET mit C#
C Sharp Einfuehrung Teil 1
Battle of the Languages: Java und Python im Wettstreit beim Lösen von Program...
An Introduction to Ruby
Anzeige

Andere mochten auch (14)

PDF
Verdiunterlage
PDF
Lagrave Elektrotechnik Twizy Aktion
PPT
SMEP Zertifikat
PDF
Die Unerträglichkeit der Anonymität
PPTX
Encuesta 2
PPS
Ave Maria
DOC
Bilder von Bautzen und Dresden
PDF
A-Recruiter Tage 2013: Vortrag "Ehe- neben Karriereberatung" (Herr Prof. Flocke)
PPTX
SoSe 2013 | IT-Zertifikat: DM - 01_Terminologie
ODP
Derechosdelniñño
PDF
Die Magdeburger Pilotenrakete
PPSX
Ginger
PPT
Cap2
PDF
Hospenthal book
Verdiunterlage
Lagrave Elektrotechnik Twizy Aktion
SMEP Zertifikat
Die Unerträglichkeit der Anonymität
Encuesta 2
Ave Maria
Bilder von Bautzen und Dresden
A-Recruiter Tage 2013: Vortrag "Ehe- neben Karriereberatung" (Herr Prof. Flocke)
SoSe 2013 | IT-Zertifikat: DM - 01_Terminologie
Derechosdelniñño
Die Magdeburger Pilotenrakete
Ginger
Cap2
Hospenthal book
Anzeige

Ähnlich wie BIT I WiSe 2014 | Basisinformationstechnologie I - 08: Programmiersprachen I (20)

PPTX
Basisinformationstechnologie I WiSem 2015 / 2016 | 06_Rechnertechnologie II: ...
PDF
Übungsaufgaben
PDF
Java Streams und Lambdas
PPTX
BASTA! 2017 Jubiläumskonferenz - Warum warten auf die IDE!?
PPTX
C/ C++ for Notes & Domino Developers
DOC
Der C++ Standard
PPTX
WiSe 2013 | Programmierpraktikum C++ - 01_Basics
PPTX
ADC Core 2017 - Warum warten auf die IDE?
PDF
Php Schulung
PPTX
#SpeakRoslyn - Die Microsoft .NET Compiler Plattform
PPTX
TypeScript
PPTX
#ADC 2016 - C# Script in Action
PPT
C API for Lotus Notes & Domino
PDF
Go - Googles Sprache für skalierbare Systeme
PPT
C / C++ Api for Beginners
PPTX
Bit wisem 2015-wieners-sitzung-10_Programmiersprachen
PDF
Java und Go im Vergleich
PPTX
Roslyn - Ein offener Compiler. Ja, und nun?
PPTX
Kuck mal, Node.js! Einstieg für .NET Entwickler mit Visual Studio Code und Ty...
PPTX
Windows Powershell
Basisinformationstechnologie I WiSem 2015 / 2016 | 06_Rechnertechnologie II: ...
Übungsaufgaben
Java Streams und Lambdas
BASTA! 2017 Jubiläumskonferenz - Warum warten auf die IDE!?
C/ C++ for Notes & Domino Developers
Der C++ Standard
WiSe 2013 | Programmierpraktikum C++ - 01_Basics
ADC Core 2017 - Warum warten auf die IDE?
Php Schulung
#SpeakRoslyn - Die Microsoft .NET Compiler Plattform
TypeScript
#ADC 2016 - C# Script in Action
C API for Lotus Notes & Domino
Go - Googles Sprache für skalierbare Systeme
C / C++ Api for Beginners
Bit wisem 2015-wieners-sitzung-10_Programmiersprachen
Java und Go im Vergleich
Roslyn - Ein offener Compiler. Ja, und nun?
Kuck mal, Node.js! Einstieg für .NET Entwickler mit Visual Studio Code und Ty...
Windows Powershell

Mehr von Institute for Digital Humanities, University of Cologne (20)

PPTX
Künstliche Intelligenz und visuelle Erzählungen: Comicanalyse | 17.04.2019 | ...
PPTX
Augmented City –Street Art, Embodiment, Cultural Heritage & AR | 03.04.2019 |...
PPTX
Künstliche Intelligenz und visuelle Erzählungen: Comicanalyse | 03.04.2019 | ...
PPTX
Transformation mittelhochdeutscher Erfahrungswelten – vom Text zum Computerga...
PPTX
Transformation mittelhochdeutscher Erfahrungswelten – vom Text zum Computerga...
PPTX
Bit sosem 2016-wieners-sitzung-13_ki-in-games
PPTX
Bit sosem 2016-wieners-sitzung-12_bild-iv-computer-vision
PPTX
Bit sosem 2016-wieners-sitzung-11_bild-iii-filter
PPTX
Bit sosem 2016-wieners-sitzung-10_bild-ii-punktoperationen
PPTX
Bit sosem 2016-wieners-sitzung-09_bild-i-kompression
PPTX
Bit sosem 2016-wieners-sitzung-08_semantic-web
PPTX
Bit sosem 2016-wieners-sitzung-07_rechnerkommunikation-ii
PPTX
Bit sosem 2016-wieners-sitzung-06_rechnerkommunikation
PPTX
Bit sosem 2016-wieners-sitzung-05_zellulaere-automaten-conway
PPTX
Bit sosem 2016-wieners-sitzung-04_theoretische-informatik
PPTX
Bit sosem 2016-wieners-sitzung-03_algorithmen
PPTX
Bit sosem 2016-wieners-sitzung-02_datenstrukturen
PPTX
Bit sosem 2016-wieners-sitzung-01_auffrischung
PPTX
Bit sosem 2016-wieners-sitzung-00_themenueberblick
PPTX
Bit wisem 2015-wieners-sitzung-13_Zusammenfassung II
Künstliche Intelligenz und visuelle Erzählungen: Comicanalyse | 17.04.2019 | ...
Augmented City –Street Art, Embodiment, Cultural Heritage & AR | 03.04.2019 |...
Künstliche Intelligenz und visuelle Erzählungen: Comicanalyse | 03.04.2019 | ...
Transformation mittelhochdeutscher Erfahrungswelten – vom Text zum Computerga...
Transformation mittelhochdeutscher Erfahrungswelten – vom Text zum Computerga...
Bit sosem 2016-wieners-sitzung-13_ki-in-games
Bit sosem 2016-wieners-sitzung-12_bild-iv-computer-vision
Bit sosem 2016-wieners-sitzung-11_bild-iii-filter
Bit sosem 2016-wieners-sitzung-10_bild-ii-punktoperationen
Bit sosem 2016-wieners-sitzung-09_bild-i-kompression
Bit sosem 2016-wieners-sitzung-08_semantic-web
Bit sosem 2016-wieners-sitzung-07_rechnerkommunikation-ii
Bit sosem 2016-wieners-sitzung-06_rechnerkommunikation
Bit sosem 2016-wieners-sitzung-05_zellulaere-automaten-conway
Bit sosem 2016-wieners-sitzung-04_theoretische-informatik
Bit sosem 2016-wieners-sitzung-03_algorithmen
Bit sosem 2016-wieners-sitzung-02_datenstrukturen
Bit sosem 2016-wieners-sitzung-01_auffrischung
Bit sosem 2016-wieners-sitzung-00_themenueberblick
Bit wisem 2015-wieners-sitzung-13_Zusammenfassung II

BIT I WiSe 2014 | Basisinformationstechnologie I - 08: Programmiersprachen I

  • 1. Basisinformationstechnologie I Universität zu Köln. Historisch-Kulturwissenschaftliche Informationsverarbeitung Jan G. Wieners // jan.wieners@uni-koeln.de Wintersemester 2014/15 17. Dezember 2014 – Programmiersprachen I
  • 2. Themenüberblick „Programmiersprachen I“ Phasen der Programmentwicklung  Analyse  Spezifikation  Entwurf  Algorithmus  Pseudocode  Implementation  Post-Implementation Programmiersprachen  Compiler / Interpreter  Typisierung  Paradigmen  Objektorientierung
  • 3. Neulich in den Sommerferien…
  • 11. Programmentwicklung: Analyse Descartes (1596-1650) „Regeln zur Leitung des Geistes" (1628):  Hohe Relevanz der Analysephase  Aufteilung in Teil- und Unterprobleme  Hierarchischer Erkenntnisprozess  Analyse der Analyse i.e. Sicherung der Analyse
  • 12. Programmentwicklung: Algorithmus Spezifikation: Problembeschreibung – im Gegensatz zum Algorithmus, der die Lösung des Problems angibt Algorithmus: Anleitung oder Vorschrift, wie sich ein Problem lösen lässt  Arbeitsdefinition Algorithmus: Eindeutige Beschreibung eines endlichen Verfahrens zur Lösung einer bestimmten Klasse von Problemen Algorithmus im Labyrinthbeispiel: Verfahren, um aus dem dunklen Labyrinth zu gelangen
  • 14. Finden Sie einen Weg aus dem Labyrinth
  • 15. Entwerfen Sie einen Algorithmus, der Sie aus jedem Labyrinth (mit Ausgang) führt
  • 16. Terminierung von Algorithmen: Wir verlangen (zumeist) von Algorithmen, dass sie terminieren, d.h. dass sie in endlicher Zeit (und möglichst schnell  Performance) ihre Arbeit erledigt haben Entwerfen Sie einen Algorithmus, der Sie aus jedem Labyrinth (mit Ausgang) führt
  • 17. Programmentwicklung: Entwurfsphase III Pledge-Algorithmus:  Prämisse: Wir gehen davon aus, dass alle Ecken rechtwinklig sind  Somit kommen nur Rechtsdrehungen und Linksdrehungen um jeweils 90 Grad vor  Wir verwalten unterwegs einen Umdrehungszähler, der:  bei jeder Linksdrehung um eins erhöht und  bei jeder Rechtsdrehung um eins verringert wird (auch bei der ersten Rechtsdrehung, die nach dem Auftreffen auf eine Wand ausgeführt wird).  Zu Beginn wird dieser Umdrehungszähler auf null gesetzt  Anschließend werden die beiden Anweisungen  geradeaus, bis Wand erreicht  Folge der Wand, bis Umdrehungszähler = 0 solange wiederholt, bis wir ins Freie gelangen
  • 18. Pseudocode Pseudocode Pledge-Algorithmus:  Setze Umdrehungszähler auf 0;  Wiederhole  Wiederhole  Gehe geradeaus;  Solange Wand erreicht;  Drehe nach rechts;  Wiederhole  Folge dem Hindernis;  Solange Umdrehungszähler=0;  Solange ins Helle gelangt;  Der Entwurf ist unabhängig von der Programmiersprache!
  • 22. Strukturierte Computerorganisation Problemorientierte Sprache Assemblersprache Betriebssystemmaschine Befehlssatzarchitektur (ISA) Mikroarchitektur Digitale Logik Ebene 5 Ebene 4 Ebene 3 Ebene 2 Ebene 1 Ebene 0
  • 23. Programmiersprachen: Klassifizierung Maschinennahe Programmiersprache: Assembler Beispiel: „Hello World“ : DATA SEGMENT ;- Beginn des Datensegments Meldung db "Hello World" ;- Die Zeichenkette "Hello World" db "$" ;- Endzeichen der Zeichenkette DATA ENDS ;- Ende des Datensegment CODE SEGMENT ;- Beginn des Codesegements ASSUME CS:CODE,DS:DATA ;- Dem Assembler die Segmente mitteilen Anfang: ;- Label für den Anfang des Programms mov ax, DATA ;- das Daten... mov ds, ax ; ...segment festlegen mov dx, offset Meldung ;- den Text in das auf DS bezogene Datenregister laden mov ah, 09h ;- Die Unterfunktion 9 des Betriebssysteminterrupts 21h auswählen int 21h ;- den Betriebssysteminterrupt 21h (hier erfolgt Ausgabe des Texts) aufrufen mov ax, 4C00h ;- Die Unterfunktion 4Ch (Programmbeendigung) des Betriebssysteminterrupts 21h festlegen int 21h ;- diesen Befehl wiederum ausführen CODE ENDS ;- Ende des Codesegments END Anfang ;- dem Assembler das Ende des Labels Anfang mitteilen Vgl.: http://de.wikipedia.org/wiki/Assemblersprache
  • 24. Programmiersprachen Anweisungen, die wir dem Computer geben, werden als Text formuliert, z.B.: In Python: print "Hello World!" In PHP: print "Hello World!"; In JavaScript: document.write("Hello World!"); In C++: cout << "Hello World";
  • 25. Programmiersprachen Programmtext ist formuliert nach festen Regeln: Beispiel C++: cout << "Hello World"; Die Regeln (Grammatik) der Programmiersprache C++ schreiben vor, dass der Ausdruck cout << "Hello World" mit einem Semikolon abgeschlossen werden muss
  • 29. ? var beispiel = 23;
  • 30. Deklaration und Initialisierung In JavaScript: // Deklaration var eineVariable, eineWeitereVariable; // Initialisierung eineVariable = 23; eineWeitereVariable = “Hello World!“;
  • 31. Typisierung Variablen: Behälter / Speicherstelle; Typisierung  Typ der Variable In JavaScript: // Deklaration var eineVariable, eineWeitereVariable;  Dynamische Typisierung In C++: int eineVariable = 23; char eineWeitereVariable[]="Hello World";  Statische Typisierung Datentyp
  • 32. Datentypen (C++) Einfache Datentypen in C++:  bool  Wahrheitswerte  int  ganze Zahlen  unsigned int  Natürliche Zahlen  float  Fließkommazahlen  double  Fließkommazahlen, doppelte Genauigkeit  char  Zeichen Zusammengesetzte Datentypen (in C++):  string  Zeichenketten  array  Sammlung von Daten eines Datentyps
  • 34. Paradigmen:  funktional  objektorientiert  prozedural  etc. etc. etc.
  • 35. Programmierparadigmen: Funktionale Programmierung var randomize = function( lowerBound, upperBound ) { if( lowerBound > upperBound ) { return( -1 ); } if( lowerBound === upperBound ) { return( lowerBound ); } return lowerBound + parseInt( Math.random() * ( upperBound-lowerBound+1 ), 10); }
  • 36. Objektorientierte Programmierung Objektorientierte Programmierung [C++, Java]  Zentrales Konzept: Objekt  Objekt  Verfügt über einen bestimmten Zustand  Reagiert mit einem definierten Verhalten auf Anforderungen / seine Umgebung  Besitzt eine Identität, die es von anderen Objekten unterscheidet  Kann mit anderen Objekten verbunden sein
  • 38. Kapselung, Information Hiding, Geheimnisprinzip Abb.: Balzert, Heide: Lehrbuch der Objektmodellierung. Heidelberg, 2005.
  • 39. Zentrales Konzept I: Klassen Gleichartige Objekte (Objekte mit denselben Operationen und gleichen Attributen) gehören zur gleichen Klasse. Abstrakt vs. konkret: Jedes Objekt ist Exemplar bzw. Instanz einer Klasse Klasse: Definiert für eine Sammlung von Objekten deren  Struktur (Attribute)  Verhalten (Operationen)  Beziehungen  Verfügt über Mechanismen, um neue Objekte zu erzeugen (Object Factory)
  • 40. Klassen in C++  Kapselung / Information Hiding class EineKlasse { public: // öffentlicher Teil EineKlasse() // Konstruktor { klassenVariable=23; } ~EineKlasse(); // Destruktor int gebeVariablezurueck(void) { return klassenVariable; } private: // privater Teil int klassenVariable; // private Variable };
  • 41. Notation von Klassen Abb.: Balzert, Heide: Lehrbuch der Objektmodellierung. Heidelberg, 2005.
  • 42. Zentrales Konzept II: Vererbung  Eine Klasse kann Elemente (Variablen, Konstanten, Funktionen) von anderen Klassen erben Beispiel C++: class Person { string name; //... }; class Mitarbeiter : Person { long sozialversicherungsNr; //... };
  • 43. Martial Arts Objects (Vererbung) Martial Arts Fighter attribute 1: name attribute 2: gender attribute 2: two legs attribute 3: two arms behaviour 1: getName() behaviour 2: walk() behaviour 3: bong_sau() behaviour 4: tan_sau()
  • 44. Objektorientierte Programmiersprache: C++ C++:  Ermöglicht maschinennahe Programmierung (Stichw. „Zeiger“), als auch abstrakte Programmierung (i.e. Objektorientierung)  Kompilierung über g++ Compiler, Microsoft Visual C++ Compiler, etc.
  • 45. Objektorientierte Programmiersprachen: Java Java  Besonderheit: Java-Programme werden in Bytecode übersetzt, anschließend in einer Java-Laufzeitumgebung ausgeführt  Virtuelle Maschine (VM)  Vorteil: Plattformunabhängigkeit: Java-Programme laufen (zumeist) ohne weitere Anpassungen auf unterschiedlichen Computer- und Betriebssystemen, für die eine Java-VM existiert
  • 46. /

Hinweis der Redaktion

  • #8: Dimmu Borgir = Dunkle Burgen, Dunkle Städte
  • #12: Analyse des gestellten Problems  ToDo: Eine Möglichkeit entwickeln, trotz Dunkelheit einen Weg aus dem Labyrinth zu finden Spezifikation: Problembeschreibung – im Gegensatz zum Algorithmus, der die Lösung des Problems angibt Beachten: Problemkomplex exakt und vollständig beschreiben Ein- und Ausgabewerte berücksichtigen (Parameter) Randbedingungen bzw. Spezialfälle berücksichtigen
  • #17: Terminierung von Algorithmen Wir verlangen (zumeist) von Algorithmen, dass sie terminieren, d.h. dass sie in endlicher Zeit (und möglichst schnell  Performance) ihre Arbeit erledigt haben Performanz: Geschwindigkeit der Problemlösung
  • #18: Terminierung von Algorithmen Wir verlangen (zumeist) von Algorithmen, dass sie terminieren, d.h. dass sie in endlicher Zeit (und möglichst schnell  Performance) ihre Arbeit erledigt haben Performanz: Geschwindigkeit der Problemlösung
  • #19: Grundfrage Algorithmus: Existiert ein Algorithmus, der für jedes denkbare Labyrinth, aus dem es einen Ausgang gibt, einen Weg ins Freie findet?
  • #23: Programmiersprache: Eine zum Formulieren von Programmen geschaffene künstliche / formale Sprache Warum braucht man so etwas? Darum:
  • #25: compiler interpreter
  • #28: Wer prüft zu welchem Zeitpunkt die Grammatik? Programmierung häufig mittels Programmierumgebungen (IDE, integrated develompent environment), die Werkzeuge beinhalten: Editor Compiler Debugger (Fehlersuche) Beispiele: Microsoft Visual Studio, Qt Creator, Eclipse Compiler  Computerprogramm, das ein in einer Hochsprache (C++, etc.) formuliertes Programm, das sog. Quellprogramm in ein Zielprogramm, z.B.: Bytecode (Sammlung von Befehlen für eine virtuelle Maschine) oder Maschinencode (Instruktionen, die der entsprechende Prozessor (Hardware) direkt umsetzen kann) übersetzt Compiler / compilierte Sprachen kompletter Programmtext wird in eine Folge von Maschinenbefehlen übersetzt, bevor die erste Programmanweisung ausgeführt wird. [C++] Interpreter / interpretierte Sprachen übersetzt immer nur eine einzige Programmanweisung in ein kleines Unterprogramm aus Maschinenbefehlen und führt dieses sofort aus. Anschließend wird mit der nächsten Anweisung genauso verfahren. [JavaScript, Python] Interpreter Pro: Einfacher zu konstruieren als Compiler Interpreter Contra: Ein Befehl, der mehrfach ausgeführt wird, muss jedes mal erneut übersetzt werden
  • #30: Dynamische Typisierung Paradigmen: Prozedurale, funktionale und objektorientierte (klassenlose) Programmierung
  • #35: Doppelte Genauigkeit…?!?  Kollisionserkennung / Problem: „Clipping“
  • #37: Funktionale Programmierung: Programme bestehen aus Funktionen.
  • #38: Objektzustand umfasst die Attribute und jeweilige Verbindungen zu anderen Objekten Attribute: unveränderliche Merkmale des Objekts; die Attributwerte können Änderungen unterliegen Verhalten eines Objekts wird durch eine Menge von Operationen beschrieben; Änderung oder Abfrage des Zustandes ausschließlich durch Operationen
  • #46: Vererbung beschreibt eine Beziehung zwischen einer allgemeinen Klasse (Basisklasse) und einer spezialisierten Klasse. Die spezialisierte Klasse ist vollständig konsistent mit der Basisklasse, enthält aber zusätzliche Informationen (Attribute, Operationen). Die allgemeine Klasse wird auch als Oberklasse (engl. super class), die spezialisierte Klasse als Unterklasse (engl. sub class) bezeichnet. Das Konzept der Vererbung ist nicht nur dazu gedacht, um gemeinsame Eigenschaften und Verhaltensweisen zusammenzufassen, sondern sie muss immer auch eine Generalisierung bzw. Spezialisierung darstellen, d.h. jedes Objekt der Unterklasse "ist ein" Objekt der Oberklasse.
  • #51: Überprüfung, ob das entwickelte Programm die Problemstellung korrekt und vollständig löst Dazu: Ausführung des Programmes mit verschiedenen Eingabewerten und Startzuständen, um möglichst jede Situation abzubilden Automatisierte Tests  “Writing automated tests is accepted to produce higher quality code at lower cost. More tests == less time spent debugging”