Objekttypen. Referenzen, Objekte, Gleichheit, Wrapper, Arrays, mehr-dimensionale Arrays, Bildbearbeitung, krumme Arrays

Ähnliche Dokumente
Reihungen. Martin Wirsing. in Zusammenarbeit mit Matthias Hölzl und Nora Koch 11/03

5.4 Klassen und Objekte

Modellierung und Programmierung 1

1 Polymorphie (Vielgestaltigkeit)

Dr. Monika Meiler. Inhalt

Modul 122 VBA Scribt.docx

2. Programmierung in C

Datenbankanwendungsprogrammierung Crashkurs Java

Einführung Datentypen Verzweigung Schleifen Funktionen Dynamische Datenstrukturen. Java Crashkurs. Kim-Manuel Klein

Java für Computerlinguisten

Gliederung. Tutorium zur Vorlesung. Gliederung. Gliederung. 1. Gliederung der Informatik. 1. Gliederung der Informatik. 1. Gliederung der Informatik

Datenfelder (Arrays) Vektoren, Matrizen, Tabellen. Dr. Beatrice Amrhein

Java Einführung VARIABLEN und DATENTYPEN Kapitel 2

Propädeutikum zur Programmierung

Algorithmische Kernsprache. Zuweisung, einfache und bedingte Anweisung, Blöcke, Schleifen, return, debugging.

Einführung in die Java- Programmierung

Abschnitt 9: Schnittstellen: Interfaces

Programmieren in C++ Arrays, Strings und Zeigerarithmetik

Eine Klasse beschreibt Objekte mit gleichen Attributen und Methoden.

II. Grundlagen der Programmierung. 9. Datenstrukturen. Daten zusammenfassen. In Java (Forts.): In Java:

Arrays Fortgeschrittene Verwendung

Ein erstes Java-Programm

Probeklausur: Programmierung WS04/05

Arrays von Objekten. Annabelle Klarl. Einführung in die Informatik Programmierung und Softwareentwicklung

5 DATEN Variablen. Variablen können beliebige Werte zugewiesen und im Gegensatz zu

Programmieren in C. C Syntax Datentypen, Operatoren und Kontrollstrukturen. Prof. Dr. Nikolaus Wulff

Felder, Rückblick Mehrdimensionale Felder. Programmieren in C

VisualBasic - Variablen

FHZ. K20 Arrays. Lernziele. Hochschule Technik+Architektur Luzern Abteilung Informatik, Fach Programmieren. Inhalt

FHZ. Man unterscheidet ein- und mehrdimensionale Arrays. Bei einem mehrdimensionalen Array sind die Komponenten wiederum Arrays.

Arrays in Java. Text. Stefan Brotschi

Primitive Datentypen

Computeranwendung und Programmierung (CuP)

Java-Schulung Grundlagen

Java 7. Elmar Fuchs Grundlagen Programmierung. 1. Ausgabe, Dezember 2011 JAV7

C# im Vergleich zu Java

Java Kurs für Anfänger Einheit 5 Methoden

Verhindert, dass eine Methode überschrieben wird. public final int holekontostand() {...} public final class Girokonto extends Konto {...

Einfache Arrays. Annabelle Klarl. Einführung in die Informatik Programmierung und Softwareentwicklung

Zusammengesetzte Datentypen -- Arrays und Strukturen

Arrays von Objekten. Annabelle Klarl. Einführung in die Informatik Programmierung und Softwareentwicklung

Studentische Lösung zum Übungsblatt Nr. 7

Objektorientierte Programmierung

Java Generics & Collections

Datentypen: Enum, Array, Struct, Union

Einführung in die Informatik für Hörer aller Fakultäten II. Andreas Podelski Stephan Diehl Uwe Waldmann

HEUTE. Effizienzbeispiel: bekannte Version (Übung ) Mathematik: Was ist Effizienz? vollständige Induktion

Objektorientierte Programmierung. Kapitel 9: Arrays

Propädeutikum zur Programmierung

Einführung in Java. PING e.v. Weiterbildung Andreas Rossbacher 24. März 2005

Java Schulung (Java 2 Java Development Kit 5 / 6)

Distributed Computing Group

Kapitel 6. Vererbung

5.5.8 Öffentliche und private Eigenschaften

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 11/12. Kapitel 8. Arrays. Arrays

Proseminar C-Programmierung. Strukturen. Von Marcel Lebek

Kapitel 6. Vererbung

Deklarationen in C. Prof. Dr. Margarita Esponda

Javakurs für Anfänger

Objekte und Klassen. Objekte, Klassen, Felder und Methoden, Ergebnistyp, Parameter, Signatur, Kommentare, Javadoc

Das erste Programm soll einen Text zum Bildschirm schicken. Es kann mit jedem beliebigen Texteditor erstellt werden.

Hello World. Javakurs 2014, 1. Vorlesung. Sebastian Schuck. basierend auf der Vorlage von Arne Kappen. wiki.freitagsrunde.org. 3.

Kapitel 6. Vererbung

Funktionen Häufig müssen bestimmte Operationen in einem Programm mehrmals ausgeführt werden. Schlechte Lösung: Gute Lösung:

C++-Zusammenfassung. H. Schaudt. August 18, 2005

5. Tutorium zu Programmieren

Einführung in die Java- Programmierung

Selbststudium OOP Programmieren 1 - H1103 Felix Rohrer

1. Übung zu "Numerik partieller Differentialgleichungen"

Teil 1: Grundeigenschaften von Rechnern und Software [10P]

Testen mit JUnit. Motivation

4 Objektorientierte Programmierung mit Java 4.1 Java-Grundlagen

Kontrollstrukturen, Pseudocode und Modulo-Rechnung

Übung Programmierung WS 2007/08 - Blatt 5

Übersicht. Informatik 2 Teil 3 Anwendungsbeispiel für objektorientierte Programmierung

A(T1) A(T2) A(T1) A(T2)

Javakurs 2013 Objektorientierung

Algorithmen und Datenstrukturen

5.6 Vererbung. Vererbung

Java: Eine Übersicht. Dennis Giffhorn. Lehrstuhl für Programmierparadigmen Universität Karlsruhe

Repetitorium Informatik (Java)

Institut fu r Informatik

Grundlagen der Programmierung Prof. H. Mössenböck. 10. Klassen

Java Programme bestehen aus Klassen, die Objekte der

Test zu Grundlagen der Programmierung Leitung: Michael Hahsler. 21. November 2003

M. Graefenhan Übungen zu C. Blatt 3. Musterlösung

Einführung in die. objektorientierte Programmierung

Grundwissen Informatik JS September 2015

Client-Server-Beziehungen

Programmieren - Vererbung & Polymorphie

Übersicht. Schleifen. Schleifeninvarianten. Referenztypen, Wrapperklassen und API. 9. November 2009 CoMa I WS 08/09 1/15

Klausur zur Einführung in die objektorientierte Programmierung mit Java

[E-1] Wolf, Jürgen: C von A bis Z. Galileo Computing, 3. Auflage,

Versuchsziele Kenntnisse in der Anwendung von: Sortieren mit Klassen Benutzung von generischen Klassen o Definition o Sortierung.

J.5 Die Java Virtual Machine

Einführung in die Programmiersprache C

Java Einführung Collections

Objective-C CheatSheet

Einführung in die Programmierung Arrays, Zeiger, Strings. Arvid Terzibaschian

Dynamische Sprachen auf der JVM

Transkript:

Objekttypen Referenzen, Objekte, Gleichheit, Wrapper, Arrays, mehr-dimensionale Arrays, Bildbearbeitung, krumme Arrays

Primitive- und Objekt-Datentypen Primitive Datentypen benötigen einen vorher genau bekannten Speicherplatz int : 4 Byte, double: 8 Byte, char: 2 Byte Manche Objekte können unvorhersehbar viel Speicherplatz verbrauchen String:? Hängt von der Länge des Textes ab. String janeinantwort; String meinediplomarbeit; KontenListe:? Hängt davon ab, wie gut das Geschäft geht 42 betrag cd ab diplom Arbeit UÜb nd rig 42 no Ef en ch gh s...?

Objekte sind Referenztypen In einer Objektvariable wird nur ein Link (reference) auf das wirkliche Objekt gespeichert String diplomarbeit; Die Java Maschine kümmert sich um Platz für die Daten des Objekts. Dazu gehört Besorgung von zusätzlichem Platz bei Bedarf Recyclen von nicht mehr benötigtem Platz Dies heißt: Garbage Collection Der Programmierer hat stets einen Link auf das Objekt zur Verfügung 42 betrag diplom Arbeit

Referenzen Hier geht s lang Beim Zugriff auf Objektfelder folgt Java automatisch dem Link Bei manchen Sprachen muss der Programmierer dies tun In Pascal zum Beispiel: meinkonto^.kontostand meinkonto billkonto nummer : 621 736 172 inhaber : H.P.G kontostand : 1000 In Java: meinkonto.kontostand = billkonto.kontostand+1 ; nummer : 567 890 909 inhaber : Bill Gates kontostand : 500 000 000

Zuweisung von Objekten Vorher: meinkonto = billkonto ; nummer : 621 736 172 inhaber : H.P.G kontostand : 1000 Nachher: meinkonto billkonto nummer : 567 890 909 inhaber : Bill Gates kontostand : 500 000 000 meinkonto billkonto anderes Beispiel: Bei Zuweisungen ganzer Objekte werden nur die Referenzen übernommen

Datenmüll Nach der Zuweisung ist ein Objekt unerreichbar geworden Kein Link zeigt mehr auf es Es ist Müll (engl.: garbage) nummer : 621 736 172 inhaber : H.P.G kontostand : 1000 Nachher: nummer : 567 890 909 inhaber : Bill Gates kontostand : 500 000 000 meinkonto billkonto Java sorgt automatisch für das Recycling des Datenmülls: Garbage Collection

Beeinflussung, Manipulation Wenn zwei Referenzen auf das gleiche Objekt zeigen: Jedes kann die Felder des anderen beeinflussen Ein Name ist dann ein sog. Alias für den anderen billkonto.kontostand = 500000000; meinkonto.abheben(600000000) ; billkonto.getkontostand() - 100 000 000 nummer : 567 890 909 inhaber : Bill Gates kontostand : 500 000 000 meinkonto billkonto

Gleichheit Vergleich zweier Objekte mit == bzw.!= prüft nur die Verweise Möglich, dass alle Felder der Objekte übereinstimmen, Vergleich liefert trotzdem false. Für den inhaltlichen Vergleich ist eine Methode equals vorgesehen equals mit der Signatur public boolean equals(object z) wird von Object geerbt und ist daher für alle Objekte vorhanden Es sollte für die eigene Klasse geeignet redefiniert werden, z.b.: public boolean equals(object z){ return nummer==(konto)z.nummer && kontostand == (Konto)z.kontoStand && inhaber.equals((konto)k.inhaber ); } meinkonto.equals(billkonto) nummer : 621 736 172 inhaber : Otto kontostand : 1000 meinkonto billkonto meinkonto == billkonto false meinkonto.equals(billkonto) true nummer : 621 736 172 inhaber : Otto kontostand : 1000

Wrapper Klassen Basis-Datentypen von Java sind keine Klassen boolean, char, short, byte, int, long, float, double Keine Objekte im Sinne des OO-Programmierens Vorteil: direkter Zugriff - ohne Referenz keine explizite Erzeugung (new) notwendig Nachteil sind keine Objekte Viele Behälter-Strukturen (ArrayLists) etc. können nur Objekte aufnehmen Ausweg Für jede Basisklasse gibt es eine entsprechende Wrapper-Klasse Boolean, Character, Short, Byte, Integer, Long, Float, Double

Wir packen den Typ ein Wrapper Klassen verpacken (engl.: to wrap) den Wert des Basistyps Eine final deklarierte Klasse kann keine Unterklasse haben Ein Objekt der Wrapper- Klasse hat genau ein Feld des entsprechenden Datentyps.Dieses ist unveränderlich final, also konstant Hier könenn wir es auspacken Jede Wrapper-Klasse ist ähnlich aufgebaut

Autoboxing Seit Java 1.5: Autoboxing Automatische Umwandlung zwischen Basisklassen und Wrapperklassen

Arrays Arrays sind Objekte, die Folgen gleichartiger Variablen enthalten Mathematisch: x 0, x 1, x 2,, x n Java: x[0], x[1], x[2],, x[n] 34 11 178 42 Deklaration: int [] x; x ist Folge von ganzen Zahlen char[] wort ; wort ist Folge von Zeichen, also eine Zeichenkette Konto[] konten; konten ist eine Folge von Konten Deklaration mit Initialisierung int[] x = { -13, 27, 42, 128} ; char[] wort = { H, a, l, l, o,, W, e, l, t }; Erzeugung int[] x = new int[10]; Folge: x[0], x[1],, x[9] Konto[] kunden = new Konto[200]; Eine Folge von 200 Konten, kunden[0], kunden[1],..., kunden[199]

Arrays und for-schleifen Die Länge eines Array-Objekts steht in dem Feld length int[] myarray = new int[x*x+1]; int länge = myarray.length; for-schleifen eignen sich gut um Arrays zu durchlaufen schreiben lesen Würfel meinwürfel = new Würfel(); for(int k=0; k<länge; k++){ meinwürfel.würfele(); myarray[k] = meinwürfel.getaugenzahl(); } Typische Suche in einem Array mit vorzeitigem Verlassen: for (int k=0; k<länge; k++) if (meinarray[k] == 6) { gefunden = true; break; }

Mehrdimensionale Arrays Matrizen sind mehrdimensionale Arrays Man benutzt Matrizen zur Speicherung und Bearbeitung von Bildern Operationstabellen Wetterdaten Graphen Distanztabellen... Deklaration int [][] greymonalisa; Color[][][] rubik ; Hamburg Deklaration mit Erzeugung Color[][] bildschirm = new Color[1024][748]; Berlin Deklaration mit Initialisierung boolean[][] xortabelle = {{false, true},{true,false}} Marburg int[][] entfernung = { { 0, 213, 419, 882}, {213, 0, 617, 720}, {419, 617, 0, 521}, München {882, 720, 521, 0}};

Beispiel: Bildbearbeitung 0 1 2 3 y Graphik als Matrix von Grauwerten int[][] monagrey = new int[4][4]; monagrey = { {21,98,205,23}, {32,37,126,98}, {113,47,191,139}, {107,189,191,96} } ; Aufhellen Negieren for (int x = 0; x < höhe; x++) for(int y =0; y < breite; y++) monagrey[x][y] = Math.min(monaGrey[x][y]*9/10,255); for (int x = 0; x < höhe; x++) for(int y =0; y < breite; y++) monagrey[x][y] = 255-monaGrey[x][y] ; 0 1 2 3 x 21 98 205 23 32 37 126 98 113 47 191 139 107 189 191 96 Schwarzweiss for (int x = 0; x < höhe; x++) for(int y =0; y < breite; y++) if(monagrey[x][y] < 128) monagrey[x][y] = 0; else monagrey[x][y] = 255;

Mehrdimensionale Arrays braucht man nicht! Mehrdimensionale Arrays sind einfach nur Arrays von Arrays Ein zweidimensionaler Array ist ein Array von Zeilen Ein dreidimensionaler Array ist ein Array von zweidimensionalen Arrays... mona mona [1] 21 98 205 23 32 37 126 98 113 47 191 139 107 189 191 96 mona [1][2] Wir inspizieren monagrey im BlueJ-Inspektor monagrey monagrey[0],..., monagrey[3] monagrey[1][0],..., monagrey[1][3]

Arrays: Krumm und schief Die Dimension eines Arrays ist nicht Teil seines Typs Folglich können verschieden große Arrays gleichen Typ haben int [] alt = new int[3]; int [] neu = new int[17]; alt = neu ; // das ist in Java möglich! Eine Matrix kann verschieden lange Zeilen haben int[][] pascaldreieck = { {1}, {1, 1}, {1, 2, 1}, {1, 3, 3, 1}, {1, 4, 6, 4, 1} }; Wie durchläuft man krumme Arrays? Die innere for-schleife muss die Länge der zu durchlaufenden Zeile selber bestimmen Das geht mittels des length-feldes Durchlauf durch schiefarray for(int zeile=0; zeile < schiefarray.length; zeile++) for(int spalte=0; spalte < schiefarray[zeile].length; spalte++) tuwassinnvollesmit(schiefarray[zeile][spalte]);

Arrays kopieren Arrays sind Objekte Array-Variablen speichern Referenzen Kopieren kopiert Referenzen shallow copy (flache Kopie) wie bei jedem Objekt Deep Copy : System.arraycopy( ) υυπσ bässär shallow