Vorlesung Informatik B

Vorlesung Informatik B Inhalt (Planung) 1 Grundlegende OO Konzepte (Fundamental Concepts) 2 Grundlagen der Software Entwicklung 3 Wichtige OO Konzepte...
2 downloads 2 Views 655KB Size
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

Suggest Documents