SlideShare una empresa de Scribd logo
1 de 46
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…
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!
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
Spracheigenschaften und 
Programmierparadigmen
? 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
/

Más contenido relacionado

La actualidad más candente

Scalaz introduction for Java programmers
Scalaz introduction for Java programmersScalaz introduction for Java programmers
Scalaz introduction for Java programmersBernhard Huemer
 
Die unsichtbaren Diener – Der Compiler und seine Artgenossen
Die unsichtbaren Diener – Der Compiler und seine ArtgenossenDie unsichtbaren Diener – Der Compiler und seine Artgenossen
Die unsichtbaren Diener – Der Compiler und seine ArtgenossenFörderverein Technische Fakultät
 
Übungsaufgaben SS2010
Übungsaufgaben SS2010Übungsaufgaben SS2010
Übungsaufgaben SS2010maikinger
 
Nigh Session Scala
Nigh Session ScalaNigh Session Scala
Nigh Session Scalaadesso AG
 
Einführung in die funktionale Programmierung
Einführung in die funktionale ProgrammierungEinführung in die funktionale Programmierung
Einführung in die funktionale ProgrammierungDigicomp Academy AG
 
T2 s4 javascriptfuerfortgeschrittene
T2 s4 javascriptfuerfortgeschritteneT2 s4 javascriptfuerfortgeschrittene
T2 s4 javascriptfuerfortgeschrittenedominion
 
Einführung in .NET mit C#
Einführung in .NET mit C#Einführung in .NET mit C#
Einführung in .NET mit C#mspgermany
 
C Sharp Einfuehrung Teil 1
C Sharp Einfuehrung Teil 1C Sharp Einfuehrung Teil 1
C Sharp Einfuehrung Teil 1DraphonyGames
 
Battle of the Languages: Java und Python im Wettstreit beim Lösen von Program...
Battle of the Languages: Java und Python im Wettstreit beim Lösen von Program...Battle of the Languages: Java und Python im Wettstreit beim Lösen von Program...
Battle of the Languages: Java und Python im Wettstreit beim Lösen von Program...gedoplan
 
An Introduction to Ruby
An Introduction to RubyAn Introduction to Ruby
An Introduction to RubyJonathan Weiss
 

La actualidad más candente (12)

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

Destacado

Lagrave Elektrotechnik Twizy Aktion
Lagrave Elektrotechnik Twizy AktionLagrave Elektrotechnik Twizy Aktion
Lagrave Elektrotechnik Twizy AktionLagrave
 
Die Unerträglichkeit der Anonymität
Die Unerträglichkeit der AnonymitätDie Unerträglichkeit der Anonymität
Die Unerträglichkeit der Anonymitäterträ glich
 
Bilder von Bautzen und Dresden
Bilder von Bautzen und DresdenBilder von Bautzen und Dresden
Bilder von Bautzen und DresdenSELO
 
A-Recruiter Tage 2013: Vortrag "Ehe- neben Karriereberatung" (Herr Prof. Flocke)
A-Recruiter Tage 2013: Vortrag "Ehe- neben Karriereberatung" (Herr Prof. Flocke)A-Recruiter Tage 2013: Vortrag "Ehe- neben Karriereberatung" (Herr Prof. Flocke)
A-Recruiter Tage 2013: Vortrag "Ehe- neben Karriereberatung" (Herr Prof. Flocke)U-Form:e Testsysteme
 
Derechosdelniñño
DerechosdelniññoDerechosdelniñño
Derechosdelniññopilifresneda
 
Die Magdeburger Pilotenrakete
Die Magdeburger PilotenraketeDie Magdeburger Pilotenrakete
Die Magdeburger PilotenraketeBjörn Schwarz
 
Cap2
Cap2Cap2
Cap2CJAO
 

Destacado (14)

Verdiunterlage
VerdiunterlageVerdiunterlage
Verdiunterlage
 
Lagrave Elektrotechnik Twizy Aktion
Lagrave Elektrotechnik Twizy AktionLagrave Elektrotechnik Twizy Aktion
Lagrave Elektrotechnik Twizy Aktion
 
SMEP Zertifikat
SMEP ZertifikatSMEP Zertifikat
SMEP Zertifikat
 
Die Unerträglichkeit der Anonymität
Die Unerträglichkeit der AnonymitätDie Unerträglichkeit der Anonymität
Die Unerträglichkeit der Anonymität
 
Encuesta 2
Encuesta 2Encuesta 2
Encuesta 2
 
Ave Maria
Ave MariaAve Maria
Ave Maria
 
Bilder von Bautzen und Dresden
Bilder von Bautzen und DresdenBilder von Bautzen und Dresden
Bilder von Bautzen und Dresden
 
A-Recruiter Tage 2013: Vortrag "Ehe- neben Karriereberatung" (Herr Prof. Flocke)
A-Recruiter Tage 2013: Vortrag "Ehe- neben Karriereberatung" (Herr Prof. Flocke)A-Recruiter Tage 2013: Vortrag "Ehe- neben Karriereberatung" (Herr Prof. Flocke)
A-Recruiter Tage 2013: Vortrag "Ehe- neben Karriereberatung" (Herr Prof. Flocke)
 
SoSe 2013 | IT-Zertifikat: DM - 01_Terminologie
SoSe 2013 | IT-Zertifikat: DM - 01_TerminologieSoSe 2013 | IT-Zertifikat: DM - 01_Terminologie
SoSe 2013 | IT-Zertifikat: DM - 01_Terminologie
 
Derechosdelniñño
DerechosdelniññoDerechosdelniñño
Derechosdelniñño
 
Die Magdeburger Pilotenrakete
Die Magdeburger PilotenraketeDie Magdeburger Pilotenrakete
Die Magdeburger Pilotenrakete
 
Ginger
GingerGinger
Ginger
 
Cap2
Cap2Cap2
Cap2
 
Hospenthal book
Hospenthal bookHospenthal book
Hospenthal book
 

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

Übungsaufgaben
ÜbungsaufgabenÜbungsaufgaben
Übungsaufgabenmaikinger
 
Java Streams und Lambdas
Java Streams und LambdasJava Streams und Lambdas
Java Streams und LambdasNane Kratzke
 
BASTA! 2017 Jubiläumskonferenz - Warum warten auf die IDE!?
BASTA! 2017 Jubiläumskonferenz - Warum warten auf die IDE!?BASTA! 2017 Jubiläumskonferenz - Warum warten auf die IDE!?
BASTA! 2017 Jubiläumskonferenz - Warum warten auf die IDE!?Robin Sedlaczek
 
C/ C++ for Notes & Domino Developers
C/ C++ for Notes & Domino DevelopersC/ C++ for Notes & Domino Developers
C/ C++ for Notes & Domino DevelopersUlrich Krause
 
Der C++ Standard
Der C++ StandardDer C++ Standard
Der C++ Standardtutego
 
ADC Core 2017 - Warum warten auf die IDE?
ADC Core 2017 - Warum warten auf die IDE?ADC Core 2017 - Warum warten auf die IDE?
ADC Core 2017 - Warum warten auf die IDE?Robin Sedlaczek
 
#SpeakRoslyn - Die Microsoft .NET Compiler Plattform
#SpeakRoslyn - Die Microsoft .NET Compiler Plattform#SpeakRoslyn - Die Microsoft .NET Compiler Plattform
#SpeakRoslyn - Die Microsoft .NET Compiler PlattformRobin Sedlaczek
 
#ADC 2016 - C# Script in Action
#ADC 2016 - C# Script in Action#ADC 2016 - C# Script in Action
#ADC 2016 - C# Script in ActionRobin Sedlaczek
 
C API for Lotus Notes & Domino
C API for Lotus Notes & DominoC API for Lotus Notes & Domino
C API for Lotus Notes & DominoUlrich Krause
 
Go - Googles Sprache für skalierbare Systeme
Go - Googles Sprache für skalierbare SystemeGo - Googles Sprache für skalierbare Systeme
Go - Googles Sprache für skalierbare SystemeFrank Müller
 
C / C++ Api for Beginners
C / C++ Api for BeginnersC / C++ Api for Beginners
C / C++ Api for BeginnersUlrich Krause
 
Java und Go im Vergleich
Java und Go im VergleichJava und Go im Vergleich
Java und Go im VergleichQAware GmbH
 
Roslyn - Ein offener Compiler. Ja, und nun?
Roslyn - Ein offener Compiler. Ja, und nun?Roslyn - Ein offener Compiler. Ja, und nun?
Roslyn - Ein offener Compiler. Ja, und nun?Robin Sedlaczek
 
Kuck mal, Node.js! Einstieg für .NET Entwickler mit Visual Studio Code und Ty...
Kuck mal, Node.js! Einstieg für .NET Entwickler mit Visual Studio Code und Ty...Kuck mal, Node.js! Einstieg für .NET Entwickler mit Visual Studio Code und Ty...
Kuck mal, Node.js! Einstieg für .NET Entwickler mit Visual Studio Code und Ty...Gregor Biswanger
 

Similar a BIT I WiSe 2014 | Basisinformationstechnologie I - 08: Programmiersprachen I (20)

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

Más de Institute for Digital Humanities, University of Cologne

Más de Institute for Digital Humanities, University of Cologne (20)

Künstliche Intelligenz und visuelle Erzählungen: Comicanalyse | 17.04.2019 | ...
Künstliche Intelligenz und visuelle Erzählungen: Comicanalyse | 17.04.2019 | ...Künstliche Intelligenz und visuelle Erzählungen: Comicanalyse | 17.04.2019 | ...
Künstliche Intelligenz und visuelle Erzählungen: Comicanalyse | 17.04.2019 | ...
 
Augmented City –Street Art, Embodiment, Cultural Heritage & AR | 03.04.2019 |...
Augmented City –Street Art, Embodiment, Cultural Heritage & AR | 03.04.2019 |...Augmented City –Street Art, Embodiment, Cultural Heritage & AR | 03.04.2019 |...
Augmented City –Street Art, Embodiment, Cultural Heritage & AR | 03.04.2019 |...
 
Künstliche Intelligenz und visuelle Erzählungen: Comicanalyse | 03.04.2019 | ...
Künstliche Intelligenz und visuelle Erzählungen: Comicanalyse | 03.04.2019 | ...Künstliche Intelligenz und visuelle Erzählungen: Comicanalyse | 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...Transformation mittelhochdeutscher Erfahrungswelten – vom Text zum Computerga...
Transformation mittelhochdeutscher Erfahrungswelten – vom Text zum Computerga...
 
Transformation mittelhochdeutscher Erfahrungswelten – vom Text zum Computerga...
Transformation mittelhochdeutscher Erfahrungswelten – vom Text zum Computerga...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-13_ki-in-gamesBit sosem 2016-wieners-sitzung-13_ki-in-games
Bit sosem 2016-wieners-sitzung-13_ki-in-games
 
Bit sosem 2016-wieners-sitzung-12_bild-iv-computer-vision
Bit sosem 2016-wieners-sitzung-12_bild-iv-computer-visionBit sosem 2016-wieners-sitzung-12_bild-iv-computer-vision
Bit sosem 2016-wieners-sitzung-12_bild-iv-computer-vision
 
Bit sosem 2016-wieners-sitzung-11_bild-iii-filter
Bit sosem 2016-wieners-sitzung-11_bild-iii-filterBit sosem 2016-wieners-sitzung-11_bild-iii-filter
Bit sosem 2016-wieners-sitzung-11_bild-iii-filter
 
Bit sosem 2016-wieners-sitzung-10_bild-ii-punktoperationen
Bit sosem 2016-wieners-sitzung-10_bild-ii-punktoperationenBit sosem 2016-wieners-sitzung-10_bild-ii-punktoperationen
Bit sosem 2016-wieners-sitzung-10_bild-ii-punktoperationen
 
Bit sosem 2016-wieners-sitzung-09_bild-i-kompression
Bit sosem 2016-wieners-sitzung-09_bild-i-kompressionBit sosem 2016-wieners-sitzung-09_bild-i-kompression
Bit sosem 2016-wieners-sitzung-09_bild-i-kompression
 
Bit sosem 2016-wieners-sitzung-08_semantic-web
Bit sosem 2016-wieners-sitzung-08_semantic-webBit sosem 2016-wieners-sitzung-08_semantic-web
Bit sosem 2016-wieners-sitzung-08_semantic-web
 
Bit sosem 2016-wieners-sitzung-07_rechnerkommunikation-ii
Bit sosem 2016-wieners-sitzung-07_rechnerkommunikation-iiBit sosem 2016-wieners-sitzung-07_rechnerkommunikation-ii
Bit sosem 2016-wieners-sitzung-07_rechnerkommunikation-ii
 
Bit sosem 2016-wieners-sitzung-06_rechnerkommunikation
Bit sosem 2016-wieners-sitzung-06_rechnerkommunikationBit sosem 2016-wieners-sitzung-06_rechnerkommunikation
Bit sosem 2016-wieners-sitzung-06_rechnerkommunikation
 
Bit sosem 2016-wieners-sitzung-05_zellulaere-automaten-conway
Bit sosem 2016-wieners-sitzung-05_zellulaere-automaten-conwayBit sosem 2016-wieners-sitzung-05_zellulaere-automaten-conway
Bit sosem 2016-wieners-sitzung-05_zellulaere-automaten-conway
 
Bit sosem 2016-wieners-sitzung-04_theoretische-informatik
Bit sosem 2016-wieners-sitzung-04_theoretische-informatikBit sosem 2016-wieners-sitzung-04_theoretische-informatik
Bit sosem 2016-wieners-sitzung-04_theoretische-informatik
 
Bit sosem 2016-wieners-sitzung-03_algorithmen
Bit sosem 2016-wieners-sitzung-03_algorithmenBit sosem 2016-wieners-sitzung-03_algorithmen
Bit sosem 2016-wieners-sitzung-03_algorithmen
 
Bit sosem 2016-wieners-sitzung-02_datenstrukturen
Bit sosem 2016-wieners-sitzung-02_datenstrukturenBit sosem 2016-wieners-sitzung-02_datenstrukturen
Bit sosem 2016-wieners-sitzung-02_datenstrukturen
 
Bit sosem 2016-wieners-sitzung-01_auffrischung
Bit sosem 2016-wieners-sitzung-01_auffrischungBit sosem 2016-wieners-sitzung-01_auffrischung
Bit sosem 2016-wieners-sitzung-01_auffrischung
 
Bit sosem 2016-wieners-sitzung-00_themenueberblick
Bit sosem 2016-wieners-sitzung-00_themenueberblickBit sosem 2016-wieners-sitzung-00_themenueberblick
Bit sosem 2016-wieners-sitzung-00_themenueberblick
 
Bit wisem 2015-wieners-sitzung-13_Zusammenfassung II
Bit wisem 2015-wieners-sitzung-13_Zusammenfassung IIBit wisem 2015-wieners-sitzung-13_Zusammenfassung II
Bit wisem 2015-wieners-sitzung-13_Zusammenfassung II
 

Último (7)

Welche KI-Kompetenzen brauchen Lehrpersonen?!
Welche KI-Kompetenzen brauchen Lehrpersonen?!Welche KI-Kompetenzen brauchen Lehrpersonen?!
Welche KI-Kompetenzen brauchen Lehrpersonen?!
 
Wirtschaftsingenieurwesen an der Universität Duisburg-Essen
Wirtschaftsingenieurwesen an der Universität Duisburg-EssenWirtschaftsingenieurwesen an der Universität Duisburg-Essen
Wirtschaftsingenieurwesen an der Universität Duisburg-Essen
 
LAKO Kreativpreis_2024_Startnummer_02_(LFS_LA).pdf
LAKO Kreativpreis_2024_Startnummer_02_(LFS_LA).pdfLAKO Kreativpreis_2024_Startnummer_02_(LFS_LA).pdf
LAKO Kreativpreis_2024_Startnummer_02_(LFS_LA).pdf
 
Angewandte Kognitions- und Medienwissenschaft an der Universität Duisburg_Essen
Angewandte Kognitions- und Medienwissenschaft an der Universität Duisburg_EssenAngewandte Kognitions- und Medienwissenschaft an der Universität Duisburg_Essen
Angewandte Kognitions- und Medienwissenschaft an der Universität Duisburg_Essen
 
1029-Danh muc Sach Giao Khoa khoi 12.pdf
1029-Danh muc Sach Giao Khoa khoi 12.pdf1029-Danh muc Sach Giao Khoa khoi 12.pdf
1029-Danh muc Sach Giao Khoa khoi 12.pdf
 
1029-Danh muc Sach Giao Khoa khoi 11.pdf
1029-Danh muc Sach Giao Khoa khoi 11.pdf1029-Danh muc Sach Giao Khoa khoi 11.pdf
1029-Danh muc Sach Giao Khoa khoi 11.pdf
 
Angewandte Philosophie an der Universität Duisburg-Essen.
Angewandte Philosophie an der Universität Duisburg-Essen.Angewandte Philosophie an der Universität Duisburg-Essen.
Angewandte Philosophie an der Universität Duisburg-Essen.
 

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…
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 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!
  • 19.
  • 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
  • 26.
  • 28.
  • 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. /

Notas del editor

  1. Dimmu Borgir = Dunkle Burgen, Dunkle Städte
  2. 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
  3. 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
  4. 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
  5. Grundfrage Algorithmus: Existiert ein Algorithmus, der für jedes denkbare Labyrinth, aus dem es einen Ausgang gibt, einen Weg ins Freie findet?
  6. Programmiersprache: Eine zum Formulieren von Programmen geschaffene künstliche / formale Sprache Warum braucht man so etwas? Darum:
  7. compiler interpreter
  8. 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
  9. Dynamische Typisierung Paradigmen: Prozedurale, funktionale und objektorientierte (klassenlose) Programmierung
  10. Doppelte Genauigkeit…?!?  Kollisionserkennung / Problem: „Clipping“
  11. Funktionale Programmierung: Programme bestehen aus Funktionen.
  12. 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
  13. 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.
  14. Ü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”