Vorlesung Informatik B Inhalt (Planung) 1 Grundlegende OO Konzepte (Fundamental Concepts) 2 Grundlagen der Software Entwicklung 3 Wichtige OO Konzepte (Major Concepts) 4 Zusätzliche OO Konzepte (Minor Concepts) 5 Klassenbibliotheken 6 Grafische Benutzeroberflächen 7 Netzwerkprogrammierung ...
Jun. Prof. Dr. E. Pulvermüller Universität Osnabrück, Arbeitsgruppe Software Engineering
Folie
2
Informatik B – Sommersemester 09
1 Grundlegende OO Konzepte Inhalt 1.1 Objekte, Klassen, Instanzen im Programm (Java) 1.2 Konzepte und UML Darstellung 1.3 Identität 1.4 Sichtbarkeitsbereiche (Scoping) 1.5 Parameter und Rückgabewerte 1.6 Überladen von Methoden 1.7 Spezielle Methoden 1.8 Gleichheit bzw. Identität von Objekten 1.9 Klasseneigenschaften
Jun. Prof. Dr. E. Pulvermüller Universität Osnabrück, Arbeitsgruppe Software Engineering
Folie
3
Informatik B – Sommersemester 09
1 Grundlegende OO Konzepte 1.9 Klasseneigenschaften
In Java gibt es keine globalen Funktionen oder globale Variablen Manchmal möchte man Variablen oder Operationen haben, die nicht an Objekte einer Klasse gebunden sind: - Klassenvariablen oder –attribute (= class scope attribute): existiert pro Klasse einmal; alle Objekte “teilen” sich die Variable Zugriff: Klassenname.Variablenname - Klassenmethoden: Zugriff: Klassenname.Methodenname
In Java mit Hilfe des Modifikators static Jun. Prof. Dr. E. Pulvermüller Universität Osnabrück, Arbeitsgruppe Software Engineering
Folie
4
Informatik B – Sommersemester 09
1 Grundlegende OO Konzepte 1.9 Klasseneigenschaften
Beispiel Klassenattribut: Zählen der von einer Klasse erzeugten Instanzen public class Person { static int objNo = 0; public String name;
public static void main(String[] args) { Person p1 = new Person(); Person p2 = new Person(); System.out.println(„No: “ + Person.objNo); p2.dying(); System.out.println(„No: “ + Person.objNo);
Person() { name = „dummy“; ++objNo; } protected void dying() { --objNo; }
}
} Jun. Prof. Dr. E. Pulvermüller Universität Osnabrück, Arbeitsgruppe Software Engineering
Folie
5
Informatik B – Sommersemester 09
1 Grundlegende OO Konzepte 1.9 Klasseneigenschaften
Beispiel Klassenattribut: Deklaration von Konstanten (für alle Instanzen der Klasse) public class Person { public static final int ANZAHLOHREN = 2; Großschreibung als Konvention für Konstanten (kommt aus der Sprache C)
. . . } Lebensdauer überdauert die einzelnen Instanzen (erstreckt sich über das gesamte Programm) Jun. Prof. Dr. E. Pulvermüller Universität Osnabrück, Arbeitsgruppe Software Engineering
Unveränderliche Variable (Konstante): Keine Wertänderung während der Programmausführung möglich Folie
6
Informatik B – Sommersemester 09
1 Grundlegende OO Konzepte 1.9 Klasseneigenschaften Beispiel Klassenoperation: Verwendung von sqrt in der Klasse Math:
public static void main (String[] args) { double x =4.0d; System.out.println(„Quadratwurzel ist: “ + Math.sqrt(x)); }
Jun. Prof. Dr. E. Pulvermüller Universität Osnabrück, Arbeitsgruppe Software Engineering
Folie
7
Informatik B – Sommersemester 09
1 Grundlegende OO Konzepte 1.9 Klasseneigenschaften
z.B. in Klassenbibliotheken - System (“Toolbox”, zur Kommunikation mit dem Betriebssystem z.B. Funktionen für den Aufruf des Garbage Collectors oder das Beenden des Programms) - Math (Funktionen zur Fließkommaarithmetik)
Besonderheiten von Klassenmethoden: - kein Zugriff auf Instanzvariablen (Unabhängigkeit zum konkreten Objekt) - this-Referenz unbekannt - beides wird bei der Übersetzung vom Compiler als Fehler erkannt
Jun. Prof. Dr. E. Pulvermüller Universität Osnabrück, Arbeitsgruppe Software Engineering
Folie
8
Informatik B – Sommersemester 09
1 Grundlegende OO Konzepte 1.9 Klasseneigenschaften Statische “Konstruktoren” (Klasseninitialisierer)
Ähnlich wie die schon bekannten Konstruktoren, jetzt aber Initialisierung von Klassenattributen Der statische Konstruktor wird einmal zu Programmbeginn (Klassen laden) aufgerufen (statt bei Instanziierungen) statischer Konstruktor mit Name static
class Test { static int i; static int j;
Ohne Parameter, da keine benutzerdefinierten Parameter möglich sind (Aufruf zur Klassenladezeit durch die Java Virtual Machine)
static { i = 5; j = 3 + i; } } Jun. Prof. Dr. E. Pulvermüller Universität Osnabrück, Arbeitsgruppe Software Engineering
Folie
9
Informatik B – Sommersemester 09
1 Grundlegende OO Konzepte 1.9 Klasseneigenschaften Darstellung in UML: Person ANZAHLOHREN:int kinder:Kind [0..*] name:String = „Noname“ /alter Abgeleitetes Attribut (derived) wird berechnet; darf nicht geändert werden
Klassenvariable (Großschreibung hier nicht gefordert)
Multiplizität (multiplicity) / Attribut kinder hier optional Initialwert (inital value)
Darstellung für Klassenmethoden analog zu Klassenattributen Jun. Prof. Dr. E. Pulvermüller Universität Osnabrück, Arbeitsgruppe Software Engineering
Folie
10
Informatik B – Sommersemester 09
1 Grundlegende OO Konzepte Überblick über die Grundbegriffe der Objektorientierung
Minor Concepts: Typing Concurrency Polymorphism Persistence
Major Concepts: Relations between Classes (and Objects) Abstraction, Encapsulation / Information Hiding Modularity and Hierarchy
Fundamental: Class, Instance, Object [Boo94] G. Booch. Object-Oriented Analysis and Design, 2nd. Edition, Benjamin/Cummings, Redwood City, CA, 1994 Jun. Prof. Dr. E. Pulvermüller Universität Osnabrück, Arbeitsgruppe Software Engineering
Folie
11
Informatik B – Sommersemester 09
2 Grundlagen der SW Entwicklung 2 Inhalt 2.1 Die Programmiersprache Java 2.2 Vom Programm zur Maschine 2.3 Abstraktion von der Plattform
Jun. Prof. Dr. E. Pulvermüller Universität Osnabrück, Arbeitsgruppe Software Engineering
Folie
12
Informatik B – Sommersemester 09
2 Grundlagen der SW Entwicklung 2.1 Die Programmiersprache Java Entwicklung der Programmiersprachen
Jun. Prof. Dr. E. Pulvermüller Universität Osnabrück, Arbeitsgruppe Software Engineering
Folie
13
Informatik B – Sommersemester 09
2 Grundlagen der SW Entwicklung 2.1 Die Programmiersprache Java Entwicklung der Programmiersprachen
http://www.tiobe.com/tpci.htm Jun. Prof. Dr. E. Pulvermüller Universität Osnabrück, Arbeitsgruppe Software Engineering
Folie
14
Informatik B – Sommersemester 09
2 Grundlagen der SW Entwicklung 2.1 Die Programmiersprache Java
Java Entwicklung: - 90iger Jahre: Programmiersprache für Consumer Geräte, Set-Top-Boxen, Netzwerk-Anwendungen - heute: hauptsächlich zur Realisierung Internetbasierter / verteilter Anwendungen - OpenJDK (https://openjdk.dev.java.net/) als Basis von Java 7: endgültige Freigabe als Open Source-Lizenz GPL 2
breite Industrieunterstützung für Java
Sun, Apache Software Foundation, BEA, IBM, Oracle, (Microsoft) Konkurrent: C#, C++
Jun. Prof. Dr. E. Pulvermüller Universität Osnabrück, Arbeitsgruppe Software Engineering
Folie
15
Informatik B – Sommersemester 09
2 Grundlagen der SW Entwicklung 2.1 Die Programmiersprache Java http://www.computerzeitung.de/articles/oracle_kauft_sun_deutsche_java-user_sind_gelassen:/ 2009018/31927922_ha_CZ.html?thes=8007,8008,10228,10232&tp=/ausrichtungen/prozesse
http://www.heise.de/open/Oracle-kauft-Sun-Was-wird-aus-Java-MySQL-und-OpenOffice--/artikel/136431 Jun. Prof. Dr. E. Pulvermüller Universität Osnabrück, Arbeitsgruppe Software Engineering
Folie
16
Informatik B – Sommersemester 09
2 Grundlagen der SW Entwicklung 2.1 Die Programmiersprache Java
Java ist konzipiert als eine ... - einfache und kleine - objektorientierte - dezentrale - interpretierte - stabil laufende - architekturneutrale [plattformunabhängig] - portierbare - dynamische Sprache, die Hochgeschwindigkeitsanwendungen und Multithreading unterstützt (nach SUN Microsystems) Jun. Prof. Dr. E. Pulvermüller Universität Osnabrück, Arbeitsgruppe Software Engineering
Folie
17
Informatik B – Sommersemester 09
2 Grundlagen der SW Entwicklung 2.1 Die Programmiersprache Java
Java-Applets - in Web-Seiten eingebettet - in der Laufzeit-Umgebung von Web-Browsern ausgeführt - aus Sicherheitsgründen eingeschränkte Rechte Java-Applikationen - von Kommandozeile oder als Anwendung gestartet - volle Rechte einer eigenständigen Anwendung Programmierung von Applets und Applikationen ist ähnlich zueinander
Jun. Prof. Dr. E. Pulvermüller Universität Osnabrück, Arbeitsgruppe Software Engineering
Folie
18
Informatik B – Sommersemester 09
2 Grundlagen der SW Entwicklung 2.1 Die Programmiersprache Java
Java Development Kit (JDK) - kostenlose Java-Entwicklungsumgebung von Sun/Oracle java Klassenbibliothek +
javac
JVM + Compiler
+
Tools
- zur Java-Entwicklung reichen prinzipiell Text-Editor und JDK
integrierte Entwicklungsumgebung (Integrated Development Environment = IDE) kommerziell: - Borland JBuilder (CodeGear), ... http://www.codegear.com/products/jbuilder
Jun. Prof. Dr. E. Pulvermüller Universität Osnabrück, Arbeitsgruppe Software Engineering
Folie
19
frei: - Eclipse (IBM/Konsortium), - NetBeans (Sun), - BlueJ (www.bluej.org) Informatik B – Sommersemester 09
2 Grundlagen der SW Entwicklung 2.1 Die Programmiersprache Java
Java Entwicklungswerkzeuge javac Java Compiler (javac Example.java) java Java-Interpreter (Java Application Launcher) (java Example) appletviewer Applet-Viewer (appletviewer Example.html) javadoc Dokumentationswerkzeug (API Documentation Generator) (javadoc Example.java) jdb Textmode-Debugger (Java Application Debugger) (jdb Example) javap Disassembler (Class File Disassembler) (javap Example) javah C Header and Stub File Generator (javah Example) ... und andere jar JAR Archive Tool
Jun. Prof. Dr. E. Pulvermüller Universität Osnabrück, Arbeitsgruppe Software Engineering
Folie
20
Informatik B – Sommersemester 09
2 Grundlagen der SW Entwicklung 2.1 Die Programmiersprache Java
Java Runtime Environment (JRE) - Untermenge des JDK JRE Klassenbibliothek +
java
javac
JVM + Compiler
+
Tools
- benötigt, um Java Applikationen auszuführen - darf ohne Lizenzgebühren eigenen Produkten beigefügt werden
Java Virtual Machine (JVM) - Teil des JRE, der Bytecode (in den .class Dateien) interpretiert und ausführt - .class Dateien werden bei Bedarf geladen und interpretiert - oder “just in time” in Maschinensprache der Zielplattform übersetzt
Jun. Prof. Dr. E. Pulvermüller Universität Osnabrück, Arbeitsgruppe Software Engineering
Folie
21
Informatik B – Sommersemester 09
2 Grundlagen der SW Entwicklung 2.2 Vom Programm zur Maschine Quelltext: HelloWorld
Allgemeiner Ablauf:
Transformation: (Präprozessor, Übersetzer, Compiler, Assemblierer, Linker, Loader) ...
Assembler File HelloWorld
Maschinencode: das „sieht“ der Prozessor (HelloWorld)
110001010001001 010001010100010 101011111010101 000010111110101 010110101000101 001000
main: pushl %ebp movl %esp,%ebp subl $4,%esp call printf addl $8,%esp ...
Interpretation auf der Firmware Hardware, el. Schaltkreise Prozessor
+5 V R1
R2
R4
T1 x1
Tp
Tv x2
D y = ¬(x1 ∧ x2) T2
R3 0V Jun. Prof. Dr. E. Pulvermüller Universität Osnabrück, Arbeitsgruppe Software Engineering
Folie
22
Informatik B – Sommersemester 09
2 Grundlagen der SW Entwicklung 2.2 Vom Programm zur Maschine Ablauf am Beispiel Java:
.java Dateien (z.B. Person.java)
1) Programmierung: Entwickler schreibt Quelltext (Source Code)
javac Compiler
2) Kompilierung: Übersetzer/Compiler übersetzt Quellcode in Binärcode (JavaBinärcode = Bytecode)
.class Dateien (z.B. Person.class)
javap
Hex Darstellung
menschenlesbare Darstellung (Mnemonic)
java
3) Java Virtual Machine interpretiert Bytecode, führt ihn aus Jun. Prof. Dr. E. Pulvermüller Universität Osnabrück, Arbeitsgruppe Software Engineering
JVM Interpreter Applikation in Ausführung
Folie
23
Informatik B – Sommersemester 09
2 Grundlagen der SW Entwicklung 2.1 Die Programmiersprache Java
Plattformunabhängigkeit
Quelltext Compiler
- Bytecode ist plattformunabhängig - JVM existieren für verschiedene Plattformen → kompilierte Programme auf verschiedenen Plattformen ausführbar IBM
Bytecode
Unix JVM
Win JVM
MacOS JVM
Mainframe Dell Laptop
Jun. Prof. Dr. E. Pulvermüller Universität Osnabrück, Arbeitsgruppe Software Engineering
Folie
24
Macbook
Informatik B – Sommersemester 09
2 Grundlagen der SW Entwicklung 2.2 Vom Programm zur Maschine versus
Compilation: Quellprogramm
Interpretation: Quellprogramm
Compiler Zielprogramm (Maschinensprache)
Interpreter
Ausführung
Jun. Prof. Dr. E. Pulvermüller Universität Osnabrück, Arbeitsgruppe Software Engineering
Ausführung
Folie
25
Informatik B – Sommersemester 09
2 Grundlagen der SW Entwicklung 2.2 Vom Programm zur Maschine Wie macht es Java? Quellprogramm
Quellprogramm
Compiler Zielprogramm (Byte Code) (Maschinensprache)
Interpreter
Ausführung
Ausführung
Jun. Prof. Dr. E. Pulvermüller Universität Osnabrück, Arbeitsgruppe Software Engineering
Folie
26
Informatik B – Sommersemester 09
2 Grundlagen der SW Entwicklung 2.2 Vom Programm zur Maschine Wie macht es Java? Quellprogramm
Compiler Zielprogramm: Byte Code Maschinensprache eines Spezialprozessors: PicoJava
Jun. Prof. Dr. E. Pulvermüller Universität Osnabrück, Arbeitsgruppe Software Engineering
Folie
27
Informatik B – Sommersemester 09
2 Grundlagen der SW Entwicklung 2.2 Vom Programm zur Maschine
Vom Programm auf die Virtuelle Maschine und umgekehrt [Bill Venners, The Java Virtual Machine]
class Act {
0 1 public static void 2 doMathForever() { 5 int i = 0; Disassembly 6 for (;;) { i += 1; 7 i *= 2; 8 } 9 } } javac
Jun. Prof. Dr. E. Pulvermüller Universität Osnabrück, Arbeitsgruppe Software Engineering
iconst_0 istore_0 iinc 0, 1 iload_0 iconst_2 imul istore_0 goto 2
// // // // // // // //
03 3b 84 00 01 1a 05 68 3b a7 ff f9
javap
Bytecode stream: 03 3b 84 00 01 1a 05 68 3b a7 ff f9 (hexadezimale Darstellung)
Folie
28
Informatik B – Sommersemester 09
2 Grundlagen der SW Entwicklung 2.2 Vom Programm zur Maschine
Bytecode zum Weiterlesen: http://www.javaworld.com/javaworld/jw-09-1996/jw-09-bytecodes.html
Jun. Prof. Dr. E. Pulvermüller Universität Osnabrück, Arbeitsgruppe Software Engineering
Folie
29
Informatik B – Sommersemester 09
2 Grundlagen der SW Entwicklung 2.3 Abstraktion von der Plattform
Abstraktion in Java Java Programm (Anwendungsprogramm) Java API Java Virtual Machine (JVM) Laufzeitsystem Betriebssystem JVM zum Weiterlesen: Tim Lindholm, Frank Yellin: The JavaTM Virtual Machine Specification, Second Edition Online frei verfügbar: http://java.sun.com/docs/books/jvms/
Jun. Prof. Dr. E. Pulvermüller Universität Osnabrück, Arbeitsgruppe Software Engineering
Folie
30
Informatik B – Sommersemester 09
2 Grundlagen der SW Entwicklung 2.3 Abstraktion von der Plattform Abstraktion von der Plattform Sicherheit durch kontrollierende JVM Zwischenschicht
Java Programm Java API Java Virtual Machine (JVM) Systemprogramme, z.B. vi
Systemaufrufschnittstelle (System Call Interface)
Betriebssystem (Operating System) Verwaltung der Ressourcen (z.B. Speicher, Dateien, I/O, Benutzer, Prozesse)
Treiber
Maschinensprache Mikroprogramme Physikalische Geräte (CPU, Speicher, ...) Jun. Prof. Dr. E. Pulvermüller Universität Osnabrück, Arbeitsgruppe Software Engineering
Folie
31
Informatik B – Sommersemester 09
2 Grundlagen der SW Entwicklung 2.3 Abstraktion von der Plattform
Programm
javac java
int i = 99; A objA = new A(); . . .
API
JVM Betriebssystem (BS)
Jun. Prof. Dr. E. Pulvermüller Universität Osnabrück, Arbeitsgruppe Software Engineering
Folie
Garbage Collector
Prozess N
32
Informatik B – Sommersemester 09
2 Grundlagen der SW Entwicklung 2.3 Abstraktion von der Plattform
Systemressource “Prozess” (vom Betriebssystem verwaltet) Prozesse (Processes / Tasks): die ausführbaren / ausgeführten Programme auf einem Rechner - Multi-Processing vs. Single-Processing - Multi-User vs. Single-User Prozesszustände: 7
1 2
runnable
blocked
3
(just) created
execute on CPU 5
4 suspended
Jun. Prof. Dr. E. Pulvermüller Universität Osnabrück, Arbeitsgruppe Software Engineering
Folie
6
33
Zombie 8 Informatik B – Sommersemester 09
2 Grundlagen der SW Entwicklung 2.3 Abstraktion von der Plattform
Systemressource “Prozess” Prozesse (Processes / Tasks): die ausführbaren / ausgeführten Programme auf einem Rechner
- Prozesse besitzen eigene Speicherbereiche (Adressräume) für Daten und Code. - Prozesse besitzen Zugriffsrechte (Access Rights) auf Ressourcen wie Dateien oder Netzwerkverbindungen. - Prozesse haben Verwaltungsinformationen über ihren Zustand, z.B. Priorität und Ablaufzustand. - Das Betriebssystem hält in einer Prozesstabelle (Process Table) alle Prozesse gespeichert (Process ID, pid) und steuert den Ablauf der Prozesse. Jun. Prof. Dr. E. Pulvermüller Universität Osnabrück, Arbeitsgruppe Software Engineering
Folie
34
Informatik B – Sommersemester 09
2 Grundlagen der SW Entwicklung 2.3 Abstraktion von der Plattform - einem Prozess ist ein Speicherbereich zugeordnet = Adressraum eines Prozesses - Der Adressraum eines Prozesses (Speichermodell) besteht aus: Datensegment, Programmsegment und dem Stack (Stapelspeicher) kurzfristige Speicherung (push/pop)
Stack
empty
Prozess N
Jun. Prof. Dr. E. Pulvermüller Universität Osnabrück, Arbeitsgruppe Software Engineering
Data Segment Text Segment
Folie
35
längerfristige Speicherung Änderung nur in Ausnahmenfällen
Informatik B – Sommersemester 09
2 Grundlagen der SW Entwicklung 2.3 Abstraktion von der Plattform
Speicherbedarf für: - die Speichervariablen gemäß Datentyp - das Programm / den Programmtext Speicherverwaltung für Prozesse durch das Betriebssystem (UNIX Speichermodell) ...
Systemspeicher
B-Stack
Stack
B-Data B-Text A-Stack
empty
A-Data A-Text OS
Jun. Prof. Dr. E. Pulvermüller Universität Osnabrück, Arbeitsgruppe Software Engineering
Data Segment (== Heap) Text Segment Folie
36
Prozessadressraum = Programmspeicher verwaltet durch die Programmiersprache (Laufzeitumgebung bzw. Virtual Machine) Informatik B – Sommersemester 09