SlideShare uma empresa Scribd logo
1 de 51
Basisinformationstechnologie I
Wintersemester 2013/14
18. Dezember 2013 – Programmiersprachen I

Universität zu Köln. Historisch-Kulturwissenschaftliche Informationsverarbeitung
Jan G. Wieners // jan.wieners@uni-koeln.de
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

Algorithmus

 Arbeitsdefinition
: 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
Ebene 5

Problemorientierte Sprache

Ebene 4

Assemblersprache

Ebene 3

Betriebssystemmaschine

Ebene 2

Befehlssatzarchitektur (ISA)

Ebene 1

Mikroarchitektur

Ebene 0

Digitale Logik
Programmiersprachen: Klassifizierung
Maschinennahe Programmiersprache: Assembler
Beispiel: „Hello World“ :
DATA SEGMENT
Meldung db "Hello World"
db "$"
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
Anfang:
mov ax, DATA
mov ds, ax
mov dx, offset Meldung
laden
mov ah, 09h
21h auswählen
int 21h
mov ax, 4C00h
int 21h
CODE ENDS
END Anfang

Vgl.: http://de.wikipedia.org/wiki/Assemblersprache

;;;;;;;;;
;-

Beginn des Datensegments
Die Zeichenkette "Hello World"
Endzeichen der Zeichenkette
Ende des Datensegment
Beginn des Codesegements
Dem Assembler die Segmente mitteilen
Label für den Anfang des Programms
das Daten...
...segment festlegen
den Text in das auf DS bezogene Datenregister

;- Die Unterfunktion 9 des Betriebssysteminterrupts
;- den Betriebssysteminterrupt 21h (hier erfolgt
Ausgabe des Texts) aufrufen
;- Die Unterfunktion 4Ch (Programmbeendigung) des
Betriebssysteminterrupts 21h festlegen
;- diesen Befehl wiederum ausführen
;- Ende des Codesegments
;- dem Assembler das Ende des Labels Anfang mitteilen
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);
}
Programmierparadigmen: Prozedurale Programmierung

Prozedurale Programmierung: Aufteilung von
Programmen in Teilprogramme bzw. -Aufgaben:
Prozeduren [C, Pascal]
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:
int klassenVariable;
};

// privater Teil
// 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 Fighter
attribute 1: name
attribute 2: gender
attribute 2: two legs
attribute 3: two arms
behaviour 1: printName()
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
Endspurt der
Implementation…
Refactoring
Refactoring
(Refaktorisierung /
Umgestaltung): Manuelle
oder automatisierte
Programmverbesserung
(u.a. Performance,
CodeQualität) unter
Beibehaltung des
Programmverhaltens
Test-driven development

“Write the simplest code that could possibly
make the test pass
Refactor the code to eliminate all possible
duplications and code smells”
(vgl.: Francesco Carucci (Crytek): http://www.slideshare.net/fcarucci/aaa-automated-testing)
…notwendig, irgendwie, leider: Dokumentation
/
Quellennachweise





http://www.kulturbrause.de
http://freehdwalls.net/wp-content/uploads/evilminion-despicable-me-cartoon-hd-wallpaper.jpg
http://www.spiegel.de/fotostrecke/fotostrecke62645.html

Mais conteúdo relacionado

Destaque

Informació GPF 2.0
Informació GPF 2.0Informació GPF 2.0
Informació GPF 2.0mesteve
 
01 ipcc ar 4 arabic synthesis report nov07
01 ipcc ar 4 arabic synthesis report nov0701 ipcc ar 4 arabic synthesis report nov07
01 ipcc ar 4 arabic synthesis report nov07alqousi
 
2012 - Mobile Ausblick auf das "Jahr 2015"
2012 - Mobile Ausblick auf das "Jahr 2015"2012 - Mobile Ausblick auf das "Jahr 2015"
2012 - Mobile Ausblick auf das "Jahr 2015"Johannes Waibel
 
20110908 - netzstrategen - bvda - locationbasedservices
20110908  - netzstrategen - bvda - locationbasedservices20110908  - netzstrategen - bvda - locationbasedservices
20110908 - netzstrategen - bvda - locationbasedservicesnetzstrategenservices
 
La coartada: Nico ha sido secuestrado
La coartada: Nico ha sido secuestradoLa coartada: Nico ha sido secuestrado
La coartada: Nico ha sido secuestradoGuillermo Gómez
 
PROTECTOR DE PANTALLA
PROTECTOR DE PANTALLAPROTECTOR DE PANTALLA
PROTECTOR DE PANTALLAangiloaiza
 
Marketing – geht’s überhaupt noch ohne 2.0?
Marketing – geht’s überhaupt noch ohne 2.0?Marketing – geht’s überhaupt noch ohne 2.0?
Marketing – geht’s überhaupt noch ohne 2.0?Sympra GmbH (GPRA)
 
Hablemos un poco de Arquitectura de Información y Wireframes
Hablemos un poco de Arquitectura de Información y WireframesHablemos un poco de Arquitectura de Información y Wireframes
Hablemos un poco de Arquitectura de Información y WireframesRodrigo Vera
 
Mercadeo de Servicios en Redes Sociales y Herramientas gratuitas de internet
Mercadeo de Servicios en Redes Sociales y  Herramientas gratuitas de internetMercadeo de Servicios en Redes Sociales y  Herramientas gratuitas de internet
Mercadeo de Servicios en Redes Sociales y Herramientas gratuitas de internetDavid Quintero
 

Destaque (11)

Informació GPF 2.0
Informació GPF 2.0Informació GPF 2.0
Informació GPF 2.0
 
01 ipcc ar 4 arabic synthesis report nov07
01 ipcc ar 4 arabic synthesis report nov0701 ipcc ar 4 arabic synthesis report nov07
01 ipcc ar 4 arabic synthesis report nov07
 
2012 - Mobile Ausblick auf das "Jahr 2015"
2012 - Mobile Ausblick auf das "Jahr 2015"2012 - Mobile Ausblick auf das "Jahr 2015"
2012 - Mobile Ausblick auf das "Jahr 2015"
 
Asia several
Asia severalAsia several
Asia several
 
It Boy
It BoyIt Boy
It Boy
 
20110908 - netzstrategen - bvda - locationbasedservices
20110908  - netzstrategen - bvda - locationbasedservices20110908  - netzstrategen - bvda - locationbasedservices
20110908 - netzstrategen - bvda - locationbasedservices
 
La coartada: Nico ha sido secuestrado
La coartada: Nico ha sido secuestradoLa coartada: Nico ha sido secuestrado
La coartada: Nico ha sido secuestrado
 
PROTECTOR DE PANTALLA
PROTECTOR DE PANTALLAPROTECTOR DE PANTALLA
PROTECTOR DE PANTALLA
 
Marketing – geht’s überhaupt noch ohne 2.0?
Marketing – geht’s überhaupt noch ohne 2.0?Marketing – geht’s überhaupt noch ohne 2.0?
Marketing – geht’s überhaupt noch ohne 2.0?
 
Hablemos un poco de Arquitectura de Información y Wireframes
Hablemos un poco de Arquitectura de Información y WireframesHablemos un poco de Arquitectura de Información y Wireframes
Hablemos un poco de Arquitectura de Información y Wireframes
 
Mercadeo de Servicios en Redes Sociales y Herramientas gratuitas de internet
Mercadeo de Servicios en Redes Sociales y  Herramientas gratuitas de internetMercadeo de Servicios en Redes Sociales y  Herramientas gratuitas de internet
Mercadeo de Servicios en Redes Sociales y Herramientas gratuitas de internet
 

Semelhante a Bit WiSe 2013 | Basisinformationstechnologie I - 08: Programmiersprachen I

Script hydroinformatik i
Script hydroinformatik iScript hydroinformatik i
Script hydroinformatik icuitla68
 
Abläufe mit PHP und Phing automatisieren
Abläufe mit PHP und Phing automatisierenAbläufe mit PHP und Phing automatisieren
Abläufe mit PHP und Phing automatisierenChristian Münch
 
Einsatz von Subversion bei der Entwicklung technisch-wissenschaftlicher Software
Einsatz von Subversion bei der Entwicklung technisch-wissenschaftlicher SoftwareEinsatz von Subversion bei der Entwicklung technisch-wissenschaftlicher Software
Einsatz von Subversion bei der Entwicklung technisch-wissenschaftlicher SoftwareAndreas Schreiber
 
Addressroom
AddressroomAddressroom
Addressroomjoerg89
 
Architektur einer Eclipse DLTK IDE für Clojure
Architektur einer Eclipse DLTK IDE für ClojureArchitektur einer Eclipse DLTK IDE für Clojure
Architektur einer Eclipse DLTK IDE für ClojureMatthias Köster
 
Multithreading in c# mit tpl
Multithreading in c# mit tplMultithreading in c# mit tpl
Multithreading in c# mit tplDavidT27
 
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
 
Java und Go im Vergleich
Java und Go im VergleichJava und Go im Vergleich
Java und Go im VergleichQAware GmbH
 
Top 10 Internet Trends 2001
Top 10 Internet Trends 2001Top 10 Internet Trends 2001
Top 10 Internet Trends 2001Jürg Stuker
 
FH Wedel - SS11 - Seminar - Marcus Riemer - LEDA
FH Wedel - SS11 - Seminar - Marcus Riemer - LEDAFH Wedel - SS11 - Seminar - Marcus Riemer - LEDA
FH Wedel - SS11 - Seminar - Marcus Riemer - LEDAMarcus Riemer
 
Dart (Teil II der Tour de Dart)
Dart (Teil II der Tour de Dart)Dart (Teil II der Tour de Dart)
Dart (Teil II der Tour de Dart)Nane Kratzke
 

Semelhante a Bit WiSe 2013 | Basisinformationstechnologie I - 08: Programmiersprachen I (20)

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
 
Workshop: Besseres C#
Workshop: Besseres C#Workshop: Besseres C#
Workshop: Besseres C#
 
Script hydroinformatik i
Script hydroinformatik iScript hydroinformatik i
Script hydroinformatik i
 
Abläufe mit PHP und Phing automatisieren
Abläufe mit PHP und Phing automatisierenAbläufe mit PHP und Phing automatisieren
Abläufe mit PHP und Phing automatisieren
 
Einsatz von Subversion bei der Entwicklung technisch-wissenschaftlicher Software
Einsatz von Subversion bei der Entwicklung technisch-wissenschaftlicher SoftwareEinsatz von Subversion bei der Entwicklung technisch-wissenschaftlicher Software
Einsatz von Subversion bei der Entwicklung technisch-wissenschaftlicher Software
 
Windows Powershell
Windows PowershellWindows Powershell
Windows Powershell
 
Addressroom
AddressroomAddressroom
Addressroom
 
C++ kompakt
C++ kompaktC++ kompakt
C++ kompakt
 
Architektur einer Eclipse DLTK IDE für Clojure
Architektur einer Eclipse DLTK IDE für ClojureArchitektur einer Eclipse DLTK IDE für Clojure
Architektur einer Eclipse DLTK IDE für Clojure
 
Enterprise JS
Enterprise JS Enterprise JS
Enterprise JS
 
Drupal inside out
Drupal inside outDrupal inside out
Drupal inside out
 
Multithreading in c# mit tpl
Multithreading in c# mit tplMultithreading in c# mit tpl
Multithreading in c# mit tpl
 
PLUX.NET – SOFTWAREKOMPOSITION DURCH PLUG & PLAY
PLUX.NET – SOFTWAREKOMPOSITION DURCH PLUG & PLAYPLUX.NET – SOFTWAREKOMPOSITION DURCH PLUG & PLAY
PLUX.NET – SOFTWAREKOMPOSITION DURCH PLUG & PLAY
 
Einführung in .NET mit C#
Einführung in .NET mit C#Einführung in .NET mit C#
Einführung in .NET mit C#
 
Java und Go im Vergleich
Java und Go im VergleichJava und Go im Vergleich
Java und Go im Vergleich
 
Top 10 Internet Trends 2001
Top 10 Internet Trends 2001Top 10 Internet Trends 2001
Top 10 Internet Trends 2001
 
FH Wedel - SS11 - Seminar - Marcus Riemer - LEDA
FH Wedel - SS11 - Seminar - Marcus Riemer - LEDAFH Wedel - SS11 - Seminar - Marcus Riemer - LEDA
FH Wedel - SS11 - Seminar - Marcus Riemer - LEDA
 
Codeblocks manual de_2012
Codeblocks manual de_2012Codeblocks manual de_2012
Codeblocks manual de_2012
 
Dart (Teil II der Tour de Dart)
Dart (Teil II der Tour de Dart)Dart (Teil II der Tour de Dart)
Dart (Teil II der Tour de Dart)
 
GUIs mit Expression Blend
GUIs mit Expression BlendGUIs mit Expression Blend
GUIs mit Expression Blend
 

Mais de Institute for Digital Humanities, University of Cologne

Mais 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
 

Bit WiSe 2013 | Basisinformationstechnologie I - 08: Programmiersprachen I

  • 1. Basisinformationstechnologie I Wintersemester 2013/14 18. Dezember 2013 – Programmiersprachen I Universität zu Köln. Historisch-Kulturwissenschaftliche Informationsverarbeitung Jan G. Wieners // jan.wieners@uni-koeln.de
  • 2. Themenüberblick „Programmiersprachen I“ Phasen der Programmentwicklung  Analyse  Spezifikation  Entwurf  Algorithmus  Pseudocode  Implementation  Post-Implementation Programmiersprachen     Compiler / Interpreter Typisierung Paradigmen Objektorientierung
  • 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 Algorithmus  Arbeitsdefinition : 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 Ebene 5 Problemorientierte Sprache Ebene 4 Assemblersprache Ebene 3 Betriebssystemmaschine Ebene 2 Befehlssatzarchitektur (ISA) Ebene 1 Mikroarchitektur Ebene 0 Digitale Logik
  • 23. Programmiersprachen: Klassifizierung Maschinennahe Programmiersprache: Assembler Beispiel: „Hello World“ : DATA SEGMENT Meldung db "Hello World" db "$" DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA Anfang: mov ax, DATA mov ds, ax mov dx, offset Meldung laden mov ah, 09h 21h auswählen int 21h mov ax, 4C00h int 21h CODE ENDS END Anfang Vgl.: http://de.wikipedia.org/wiki/Assemblersprache ;;;;;;;;; ;- Beginn des Datensegments Die Zeichenkette "Hello World" Endzeichen der Zeichenkette Ende des Datensegment Beginn des Codesegements Dem Assembler die Segmente mitteilen Label für den Anfang des Programms das Daten... ...segment festlegen den Text in das auf DS bezogene Datenregister ;- Die Unterfunktion 9 des Betriebssysteminterrupts ;- den Betriebssysteminterrupt 21h (hier erfolgt Ausgabe des Texts) aufrufen ;- Die Unterfunktion 4Ch (Programmbeendigung) des Betriebssysteminterrupts 21h festlegen ;- diesen Befehl wiederum ausführen ;- Ende des Codesegments ;- dem Assembler das Ende des Labels Anfang mitteilen
  • 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.
  • 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
  • 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. Programmierparadigmen: Prozedurale Programmierung Prozedurale Programmierung: Aufteilung von Programmen in Teilprogramme bzw. -Aufgaben: Prozeduren [C, Pascal] 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: int klassenVariable; }; // privater Teil // 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 Fighter attribute 1: name attribute 2: gender attribute 2: two legs attribute 3: two arms behaviour 1: printName() 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
  • 47. Refactoring Refactoring (Refaktorisierung / Umgestaltung): Manuelle oder automatisierte Programmverbesserung (u.a. Performance, CodeQualität) unter Beibehaltung des Programmverhaltens
  • 48. Test-driven development “Write the simplest code that could possibly make the test pass Refactor the code to eliminate all possible duplications and code smells” (vgl.: Francesco Carucci (Crytek): http://www.slideshare.net/fcarucci/aaa-automated-testing)
  • 50. /