CS1005 Objektorientierte Programmierung

Werbung
CS1005
Objektorientierte Programmierung
Bachelor of Science (Informatik)
Programme
Erstellen und Ausführen
Seite 1
Th Letschert
Programme Erstellen
Lebenszyklus der Software
– Software werden in mehreren voneinander abgegrenzte Phasen erstellt.
– Man erhält einen Softwarelebenszyklus, einen so genannten
Software Life Cycle.
– Es gibt keinen allgemein akzeptierten Ablauf des Softwarelebenszyklus
Einigkeit herrscht nur über die prinzipiellen Tätigkeitsklassen
Analyse: Was ist überhaupt zu tun
Entwurf: Wie wollen wir es machen
Implementierung: Programm(e)
schreiben
Test: Prüfen
Wartung: Verbesserungen, WeiterEntwicklungen
Das klassische Wasserfall-Modell:
Zeitliche Abfolge der Phasen
das Spiral-Modell:
In einander verschränkte Phasen
Seite 2
Programme Erstellen
Phasen in der SW-Entwicklung
Wie wird der Text (Quellcode) der Programme erstellt und gepflegt
Problemanalyse (Anforderungs- / Systemanalyse)
– Analyse des Problemfeldes und der Aufgabenstellung
– Ergebnis: Anforderungsbeschreibung (= Pflichtenheft)
Systementwurf
– Aufteilung der Aufgabe/Lösung in so genannte Module aufgeteilt
– Ergebnis: Systemspezifikation
Programmentwurf
– Module werden zu Programmstrukturen ausgearbeitet
– Ergebnis: mehrere Spezifikationen
Implementierung und Test
– Module werden programmiert und getestet (verifiziert)
– Ergebnis: aus getesteten Modulen zusammengesetztes Programm
Betrieb und Wartung
– Pflege der Software: Fehlerbeseitigung, Erweiterungen und Änderungen
Seite 3
Programme Übersetzen und Ausführen
Programm-Ausführung
Wie wird der Text (Quellcode) der Programme zu Aktionen eines Computers
Programm
– Festlegung von Aktionen
– in einer exakt festgelegten Notation
Interpreter
– liest das Programm und befolgt dessen Anweisungen
– Varianten
 Hardware (CPU, Prozessor)
Programm wird durch Hardware ausgeführt
die Basis aller Programmausführung
 Software (Programm)
Programmausführung durch ein Programm
Seite 4
Programmausführung durch Hardware
Rechner – Aufbau und Arbeitsweise
externer Speicher
Rechner – Prinzipieller Aufbau
– Externer Speicher (Festplatte): Enthält Daten und Programme
– Arbeitsspeicher / RAM: Enthält Daten und Programme mit denen
– Prozessor: führt Anweisungen (Befehle) aus
Prozessor (CPU)
–
–
–
–
Lädt Befehle (Sequenzen von Bits) aus Arbeitsspeicher in Register
Lädt Operanden (Sequenzen von Bits) in Register
Führt Befehle aus: ändert Bit-Sequenzen in Registern
Speichert Werte in Registern im Hauptspeicher
Arbeitsspeicher
CPU
Hauptspeicher
CPU
3
Befehl
1
Daten
Daten
2
Befehl
Befehl
Befehl
Daten
Dasten
Daten
4
...
...
Seite 5
1. Befehl laden
2. Daten laden
3. Befehl ausführen
4. Daten speichern
Programmausführung durch Hardware
Steuerwerk
ALU
Register
Prozessor Aufbau
ALU (Arithmetic Logical Unit)
Rechenwerk für mathematische / logische Operationen
(Arbeits-) Register
Speicherplätze für Daten innerhalb des Prozessors. Die ALU
rechnet mit den Werten, die sich in den (Arbeits-) Registern
befinden.
Steuerwerk
Kontrolle der Ausführung, nutzt dabei spezielle Register
 Befehlszählerregister
 Befehlsregister
 …
Bus / Datenleitung
Busse (= “Leitungen“) verbinden die CPU mit anderen Komponenten
Datenbus: Austausch von Daten mit dem Arbeitsspeicher (RAM)
Adressbus: Übertragen der Speicheradressen.
Steuerbus: Ansteuerung der Peripherie-Anschlüsse
Seite 6
Bus
RAM
E/A-System
Programmausführung durch Hardware
Prozessor-Register
Prozessor-interne Speicherplätze
für binäres Datum bestimmter Länge (z. B. 32-Bit)
Arbeitsregister werden
– vom Speicher geladen
– mit arithm. / logischen Operationen manipuliert
– in den Speicher geschrieben
Steuerregister
– Befehlszähler: Adresse des nächsten Befehls
– Befehlsregister: Befehl der gerade ausgeführt wird
– ···
Registergröße (z.B. 32, 64 Bit)
beeinflusst Leistungsfähigkeit des Prozessors
– Pro Befehl manipulierbare Datenmenge
– Größe des adressierbaren Speichers
Seite 7
Programmausführung durch Hardware
Funktionsweise Prozessor
1. Das Befehlszählerregister des Steuerwerks enthält die
Adresse des nächsten Maschinenbefehls. Die Adresse des
Befehls wird über den Adressbus an den Arbeitsspeicher
übermittelt.
2. Der Befehl wird aus dem Arbeitsspeicher über den
Datenbus in das Befehlsregister geladen. Mittels Dekodierlogik
wird der Befehl analysiert und die Ausführung angestoßen.
3. Der Befehl wird ausgeführt; abhängig vom jeweiligen Befehl
wird dabei zusätzlich das Lesen von Daten aus dem
Arbeitsspeicher, die Ansteuerung von Peripherieschnittstellen,
das Rechnen in der ALU oder die Durchführung eines Sprungs
im Programm erforderlich. Der Status der jeweiligen Operation
wird im Statusregister (Flagregister) angezeigt.
4. Falls ein Sprung stattfand, wird das Befehlszählerregister
auf die entsprechende neue Adresse gesetzt, ansonsten wird
das Befehlszählerregister um 1 erhöht.
5. Der Prozessor fährt wieder mit dem 1. Schritt fort.
Seite 8
Befehl holen
Operand holen
Befehl dekodieren
Operation ausführen
Befehlszähler ändern
Programmausführung durch Hardware
Arbeitsspeicher / RAM
– Enthält
alle Daten und Befehle eines Programms in Ausführung
– Direkter Zugriff auf Byte-Adressen
CPU greift direkt auf einzelne Speicherstellen zu
Byte-, Wort-/ Doppelwort lesen / schreiben
(Von Platte kann nur in großen Blöcken gelesen werden)
– RAM
Der Arbeitsspeicher besteht im Wesentlichen aus Speicherbausteinen, die man als
RAM (Random Access Memory = Speicher mit wahlfreiem Zugriff ) bezeichnet.
Bei allen RAM-Bausteinen gilt, dass ihr Inhalt „flüchtig“ ist, d.h. dass sie nur so lange
den gespeicherten Wert behalten, wie sie mit Strom versorgt werden. Nach Abschalten
des Rechners sind Daten im Arbeitsspeicher verloren.
– Zwei Arten von RAM:
DRAM (Dynamic RAM) langsam, kostengünstig
SRAM (Static RAM)
schnell, teurer (meist für Register und Cache-Speicher)
Seite 9
Programmausführung durch Hardware
Peripherie
alle Geräte, die an den Rechner angeschlossen sind.
Für den Prozessor i.A. nicht direkt zugreifbar.
Eingabe
– Maus, Tastatur, Scanner, ···
Ausgabe
– Drucker, Graphikkarte / Bildschirm, ···
Ein- und Ausgabegeräte: Netzkarte, ···
Massespeicher
Gerät, das zur Speicherung von Daten dient
– Magnetische Speicher
Festplatten, floppy-disc
– Optische Speicher
CD, DVD
– Halbleiter-Speicher
 USB-Stick
 SSD (solid state drive) Platte
„Festplatte“ in Halbleiterbausteinen
Seite 10
Programme Übersetzen und Ausführen
Maschinencode / Assemblercode
Maschinenbefehle
Bit-Folgen mit festgelegter Bedeutung (für Menschen unles- / unschreibbar)
Spezifisch für jeden Prozessortyp
Assembler (symbolischer Maschinencode)
Für Menschen les- / schreibbare Darstellung der Maschinen-Befehle.
Urform der Programmiersprachen.
Nutzung: In Speziellen Situationen / als Zwischenstadium
Beispiel (Intel 80x86)
100000111100001000001111
Maschinenbefehl : addiere 0F zu Register EDX
83C20F
Maschinenbefehl in Hex
add edx,0Fh
entsprechender Assemblerbefehl
add edx,0Fh
Assembler
Seite 11
100000111100001000001111
Programme Übersetzen und Ausführen
Höhere Programmiersprache
Strukturierte Anweisungen, Datentypen, ...
Bedingungen, Schleifen, Funktionen, Datentypen, Ausdrücke ....
haben keine direkte Entsprechung in Maschinencode
Werden durch Compiler in Sprünge und einfache Operationen umgesetzt
Compiler
Übersetzt höhere Programmiersprache in Assemblercode oder direkt in Maschinencode
Beispiel
a = a+1
Anweisung in höherer Programmiersprache
load edx,0Fh
add
edx,0x01
store edx,0Fh
Maschinenbefehl in Assembler-Notation
a = a+1
Quell-Programm
Compiler
add edx,0Fh
Assembler
Assembler-Programm
100000111100001000001111
Maschinenrogramm
Seite 12
Programme Übersetzen und Ausführen
Compilierte Höhere Programmiersprache – Ausführung
– Eingeben: Der Programmtext wird mit Hilfe eines Editor-Programms vom
Entwickler eingetippt und in einer Datei abgespeichert
– Übersetzen: Der Compiler (ein Programm) übersetzt den Text in Maschinencode
und speichert ihn in einer Datei
– Binden: Der Binder (engl. Linker, ein Programm) kombiniert (verbindet) das
Maschinenprogramm mit dem Maschinencode aus Bibliotheken für
Standardkomponenten zu einem ausführbaren Programm (eine Datei).
– Laden: Das Betriebssystem lädt das Maschinenprogramm aus der Datei
(Festplatte) in den Hauptspeicher.
– Starten: Die erste Adresse des Programms wird vom Betriebssystem in das
Programmregister (= Befehlszähler) der CPU geladen
– Ausführen: Die CPU lädt einen Befehl des Maschinen-Programms nach dem
anderen und führt ihn aus.
Seite 13
Programme Übersetzen und Ausführen
Interpreter (Interpretierer)
Der Programmtext wird nicht in ein Maschinenprogramm übersetzt
damit dann die CPU das Maschinenprogramm ausführen (interpretieren) kann
sondern:
Der Programmtext wird direkt (ohne Übersetzung) von einem anderen Programm
ausgeführt – dem Interpreter (-Programm)
a = a+1
Quell-Programm
100000111100001000001111
Interpreter-Programm (Maschinencode)
Seite 14
Daten
Befehle
Programme Übersetzen und Ausführen
Interpreter
ist ein Programm, das in Maschinencode übersetzt wurde
(oder selbst interpretiert wird)
a = a+1
Quell-Programm
Daten
AnwendungsProgrammierer
100000111100001000001111
Befehle
Interpreter-Programm (Maschinencode)
Assembler
a = a+1
Quell-Programm
Compiler
add edx,0Fh
Assembler-Programm
SystemProgrammierer
Seite 15
Compiler und Assembler
sind natürlich auch
Maschinenprogramme,
die ...
Programme Übersetzen und Ausführen
Interpretierte Höhere Programmiersprache – Ausführung
– Eingeben: Der Programmtext wird mit Hilfe eines Editor-Programms vom
Entwickler eingetippt und in einer Datei abgespeichert
– Ausführen: Die CPU lädt einen Befehl des Interpreter-Programms nach dem
anderen und führt ihn aus. Dabei werden die Anweisungen des Quellprogramm
als Daten gelesen und „ausgeführt“.
Seite 16
Programme Übersetzen und Ausführen
Virtuelle Maschine
Maschine die sich aus
– der realen Maschine (CPU) plus
– Interpreter-Programm
ergibt
Das Interpreter-Programm allein wird oft als „virtuelle Maschine“ bezeichnet.
100000111100001000001111
Interpreter-Programm (Maschinencode)
a = a+1
Quell-Programm
Ausführung
Programmierer
virtuelle Maschine
Seite 17
Programme Übersetzen und Ausführen
Virtualisierung – Ein Grundprinzip der Informatik
Eingabedaten
Hardware
+
Software
Software
Programm
spezielle Maschine
virtuelle Maschine
Ausgabedaten
Seite 18
Programme Übersetzen und Ausführen
Virtualisierung – Ein Grundprinzip der Informatik
wird mehrfach geschachtelt angewendet
Eingabedaten
Hardware
+
Software
Programm:
Interpreter
in Maschinensprache
Software
spezielle Maschine:
virtueller (gedachter)
Computer der eine „höhere“
Sprache versteht
+
Software
Programm
virtuelle Maschine
Software
spezielle Maschine
virtuelle Maschine
Ausgabedaten
Seite 19
Java-Programme Übersetzen und Ausführen
Übersetzen und Ausführen
Java kombiniert Compiler und Interpreter
Java-code
– Schritt 1: Übersetzen
Das Quell-Programm (Java) wird übersetzt
Aber nicht in Machinecode
Sondern in „Bytecode“ = Code für die virtuelle
Maschine JVM
– Schritt 2: Interpertieren
Ein Interpreter-Programm (Die JVM) wird von der
realen Maschine ausgeführt
und führt dabei selbst die übersetzten Anweisungen
des Quellpropgramms aus
Compiler
virtuelle Maschine
Bytecode
JVM
Betriebssystem
CPU / HW
reale Maschine
Bildquelle: http://docs.oracle.com/javase/tutorial/getStarted/intro/definition.html
Seite 20
Java-Programme Übersetzen und Ausführen
Java : Compilieren + Interpretieren
Vorteil:
– Keine Anpassung des Compilers notwendig
– Übersetzte Programme überall lauffähig
Nachteil: Ausführung langsamer
– Direkte Ausführung von Maschinencode ist schneller als die indirekte
Ausführung mit einem Interpreter-Programm
Motivation für Compilation + Interpretation
– Compiliert: Compiler / Bibliotheken müssen an Plattform angepasst werden,
Nur Quellcode kann transferiert werden
– Compiliert + Interpretiert: Ablaufumgebung (JVM) muss an Plattform
angepasst werden, Bytecode kann transferiert werden
– Java-Programme können während ihres Laufs von beliebigen Quellen
(Internet !) weitere Programmteile („Klassen“) laden und sofort ausführen
– ohne selbst übersetzen zu müssen (zu langsam) und
– ohne dass die Quelle eine übersetzte Version bereithalten muss (geht nicht,
da ladende Maschine unbekannt).
Bildquelle: http://docs.oracle.com/javase/tutorial/getStarted/intro/definition.html
Seite 21
Java-Programme im Dateisystem
Datei
– Java-Code in Quelltext-Datei
– Dateiname: KlassenName.java
– Datei kann mehrere Klassen enthalten,
davon darf nur eine public sein
Verzeichnis
– enthält die Bestandteile eines Pakets:
 Klassen des Pakets: Java- / Class-Dateien
 Sub-Pakete
Paket
Klasse1
Sub-Paket
Klasse2
logische Struktur
Verzeichnis ~ Paket
Paket-Zugehörigkeit
– einer Klasse durch Package-Deklaration:
package <Paket-Name>;
in der Datei
– eines Pakets (Relation Paket/Sub-Paket):
Hierarchische Paketnamen:
<Paket>.<Sub-Paket>.<Sub-Sub-Paket>
Programm
– keine direkte Repräsentation
– ergibt sich aus den geladenen Klassen
Seite 22
Klasse1.java
Java-Datei
Klasse1.class
Class-Datei
Unter-Verz. ~ Sub-Paket
Klasse2.java
Java-Datei
Klasse2.class Class-Datei
Verzeichnis-Struktur
Java-Programme Übersetzen und Ausführen
Programm erstellen
Verzeichnis erstellen: myPackage
Datei erstellen (beliebiger Text-Editor):
MyClass und in diesem Verzeichnis in der Datei MyClass.java speichern
Programm übersetzen
Kommando z.B.: javac myPackage/MyClass.java
erzeugt die Datei myPackage/myClass.class
Programm ausführen
Kommando z.B.: java myPackage.MyClass
Editor
Editor
package myPackage;
package
myPackage;
public
final
class MyClass {
public
final
{
public staticclass
void MyClass
main(final
String[] args) {
public
static
void
main(final
String[] args) {
System.out.println("Hallo Java");
System.out.println("Hallo
Java");
}
} }
}
Hallo Java
Hallo Java
Seite 23
Compiler
Compiler
(javac)
(javac)
JVM
JVM
(java)
(java)
Java-Programme Übersetzen und Ausführen
Pfad und Klassenpfad
Pfad, engl. Path
ein Ausdruck der dem System hilft Programme zu finden
C:\Programme\Java\jdk1.6.0_01\bin
könnte der Pfad zu den Programmen javac und java sein.
Klassenpfad, engl. Classpath
ein Ausdruck der java (also der JVM) hilft die Klassendateien zu finden
als Kommando- (Programm-) Argument:
java -cp /pfad/zum/Verzeichnis myPackage.MyClass
z.B.:
java -cp /home/thomas/classes myPackage.MyClass
default: aktuelles Verzeichnis
der Klassenpfad endet immer
vor den Paket-Verzeichnissen
bla
Klassenpfad
blubber
classes
myPackage
MyClass.
class
Seite 24
siehe auch: http://docs.oracle.com/javase/tutorial/getStarted/index.html
Java-Programme Übersetzen und Ausführen
Jar-Archiv
Sammlung von Java-Dateien
Class-Dateien und eventuell Quell-Dateien (zip-codierte Archiv-Datei)
Verwendung:
Transport und Installation von java-Code ~ ausführbare Datei oder Bibliothek
Erzeugung
mit Kommando (Programm) jar. Beispiel:
jar -cvf myJarArchive.jar myPackage
erzeugt ein Archiv des Verzeichnisses mypackage
Nutzung
als „Klassen-Bibliothek“, Beispiel:
jar -cvf myJarArchive.jar myPackage
java -cp myJarArchive.jar myPackage.MyClass
als „ausführbare Datei“, Beispiel:
jar -cvfe myJarArchive.jar myPackage.MyClass myPackage
java -jar myJarArchive.jar
Manifestdatei:
enthält Infos zum Archiv. z.B.: Angabe Haupt-Klasse
Seite 25
Java-Programme Übersetzen und Ausführen
Getrennte Verzeichnisse für Quell- und Binärdateien
javac -d <Zielverzeichnis> <Quelldatei>
z.B.:
javac -d bin src/hallo/HalloWelt.java
Jar-Datei erzeugen:
Archiv
Klasse
Verzeichnis
eventuell mehrere Verzeichnisse
cd bin
jar -cvfe HalloWelt.jar hallo.HalloWelt hallo
Jar-Datei aus einem anderen als dem aktuellen Verzeichnis bin heraus erstellen
jar -cvfe HalloWelt.jar hallo.HalloWelt -C bin hallo
Jar-Datei ausführen:
Gibt Verzeichnis des nachfolgenden
Kommando-Arguments an
java -jar HalloWelt.jar
HalloWeltProject
+ src
| + hallo
|
+ HalloWelt.java
+ bin
+ hallo
+ HalloWelt.class
Seite 26
Java-Programme Übersetzen und Ausführen
Ausführbare Jar-Datei mit Eclipse erstellen
Rechts-Klick auf auf das zu exportierende Projekt:
→ Export → Runnable JAR file
auszuführende Klasse angeben (Launch configuratution)
Zielverzeichnis und Datei angeben
→ Finish
Ausführbare Java-Datei ist erstellt und kann (z.B. mit Doppelklick)
ausgeführt werden.
Zu Jar-Dateien siehe auch: http://docs.oracle.com/javase/tutorial/deployment/jar/
Seite 27
Herunterladen