10.11.005 Kapitel 4-10.11.005 Lehrbeispiel: Sortieralgorithmus " Bubble Sort" Sortieren von Primitivtypen Der "Abstrakte Datentyp" Grundlagen der Objektorientierung: Abstraktion, Kapselung, Modularität, Hierarchie Lehrbeispiel: Sortieralgorithmus "Bubble Sort" Sortieren von Strings mittels der Methode compareto() Sortieren von Objekten anhand eines Feldes Ausflug: die Java Standard-Klassenbibliothek
Implementierung von Bubble Sort int[] r; //Ein- und Ausgabe-Array int i; //Index r = new int[]{ 5,, 9, 7, 7, 3,, 1, 1, ; == ref 5 9 7 7 3 1 length: 10 System.out.print( r.length ) 1 Ein Objekt vom Typ Array besitzt automatisch ein Feld "length", das die Anzahl der Elemente beinhaltet.
Implementierung von Bubble Sort int[] r; //Ein- und Ausgabe-Array int i; //Index r = new int[]{ 5,, 9, 7, 7, 3,, 1, 1, ; == ref i = ; 5 0 1 9 7 3 7 4 3 5 r[i] r[i+1] 6 1 7 1 8 9 int[index] index
Implementierung von Bubble Sort int[] r; //Ein- und Ausgabe-Array int i; //Index r = new int[]{ 5,, 9, 7, 7, 3,, 1, 1, ; == ref i = 3; 5 0 1 9 7 3 7 4 3 5 6 r[i] r[i+1] 1 7 1 8 9 int[index] index
Implementierung von Bubble Sort int[] r; //Ein- und Ausgabe-Array int i; //Index r = new int[]{ 5,, 9, 7, 7, 3,, 1, 1, ; == ref i = 4; 5 0 1 9 7 3 7 4 3 5 6 1 7 r[i] r[i+1] 1 8 9 int[index] index
Implementierung von Bubble Sort int[] r; //Ein- und Ausgabe-Array int i; //Index r = new int[]{ 5,, 9, 7, 7, 3,, 1, 1, ; == ref 5 0 1 9 7 3 7 4 3 5 6 1 7 1 8 r[i] r[i+1] 9 int[index] index for(i=0; i<r.length; i++){ System.out.println( r[i] );
Implementierung von Bubble Sort r[i+1] 3.. tmp 1. r[i] Weitere Variable ist nötig als Zwischenspeicher
Bubble Sort von Integern in Java int[] r; //Ein- und Ausgabe-Array int i; //Index int tmp; //temporaerer Speicher Variablen- Deklaration r = new int[]{ 17,, 0, 5, 6; //Sortieren for(i=0; i<r.length-1; i++){ if( r[i] > r[i+1]){ tmp = r[i]; r[i]=r[i+1]; r[i+1] = tmp; Eingabe Algorithmus //Ausgabe for(i=0; i<r.length; i++){ System.out.print(r[i]+" "); Ausgabe
Bubble Sort von Integern in Java int[] r; //Ein- und Ausgabe-Array int i; //Index int tmp; //temporaerer Speicher boolean done; //merkt sich, ob Alg fertig r = new int[]{ 17,, 0, 5, 6; //Sortieren do{ done = true; for(i=0; i<r.length-1; i++){ if( r[i] > r[i+1]){ tmp = r[i]; r[i]=r[i+1]; r[i+1] = tmp; done = false; while(!done); Variablen- Deklaration Eingabe Algorithmus //Ausgabe for(i=0; i<r.length; i++){ System.out.print(r[i]+" "); Ausgabe
Der Abstrakte Datentyp Idee: Datenstrukturen + Algorithmen gehören zusammen Ein abstrakter Datentyp (abstract data type) bündelt die Definition einer Trägermenge (carrier set) von Objekten mit einer Spezifikation der zugehörigen Operationen (Methoden) Datenrepräsentation und Implementierung der Methoden bleiben hinter einer abstrakten Aufrufschnittstelle (call interface) verborgen Daten in einem Objekt können nur über die vorgesehenen Methoden manipuliert werden Geheimnisprinzip (principle of information hiding) Dadurch muss nur noch der Hersteller (Programmierer) des abstrakten Datentyps die Datenrepräsentation und die Programmierung der Funktionen verstehen Benutzer braucht nur die Funktionsweise der Schnittstelle zu verstehen Beispiel: < ; 0, 1, +, -, *> Nach einer Folie von A. Weber und W. Küchlin
Grundlagen der Objektorientierung: das Objekt Objekt allgemein: Gegenstand des Interesses (einer Beobachtung, Untersuchung, Messung) individuelles Exemplar von Methode 1 Gegenständen (Auto, Roboter), Personen (Kunde, Mitarbeiter), Daten Begriffen der realen Welt (Auftrag) oder Begriffen der Vorstellungswelt (Strategie) Methode Kennzeichen von Objekten: Identität: Objekt kann deutlich von anderen unterschieden werden Daten (Java: Felder): Eigenschaften des Objekts Operationen (Java: Methoden): Lesen und Manipulieren der Daten Geheimnisprinzip: Datenzugriff nur über Methoden des Objekts Graphik: http://www.ias.uni-stuttgart.de/
Grundlagen der Objektorientierung: die Klasse Klasse allgemein: Art (Typ) eines Gegenstandes, Lebewesen, Begriffs Objekt-Schablone für Objekte mit denselben Daten (Feldern) und mit denselben Operationen (Methoden) Objekt-Erzeugungsmechanismus ("Konstruktor"-Aufruf mittels new() ) Mitarbeiter-Objekt ändern Name ändern Name Name Gehalt ändern Gehalt Mitarbeiter- Klasse Mitarbeiter-Objekt ändern Name Graphik: http://www.ias.uni-stuttgart.de/ Name Müller Gehalt 6.000 Name Meier Gehalt 5.000 ändern Gehalt ändern Gehalt
Grundlagen der Objektorientierung Hauptelemente des Objektmodells Die folgenden vier Konzepte sind die Hauptelemente des Objektmodells (nach G. Booch): Abstraktion Kapselung Modularität Hierarchie Grady Booch: "Object-Oriented Analysis and Design with Applications", 1994 (Neuauflage im Juni 006 mit dem neuen Modellierungsstandard UML!!!)
Grundlagen der Objektorientierung Zeichung: Grady Booch: "Object-Oriented Analysis and Design with Applications" Abstraktion konzentriert sich auf die wesentlichen Charakteristika eines Objekts relativ zur Perspektive des Betrachters
Grundlagen der Objektorientierung Zeichung: Grady Booch: "Object-Oriented Analysis and Design with Applications" Kapselung verbirgt die Details der Implementierung trennt die Schnittstelle einer Abstraktion von ihrer Implementierung
Grundlagen der Objektorientierung Zeichung: Grady Booch: "Object-Oriented Analysis and Design with Applications" Modularität packt Abstraktionen in eigenständige Einheiten Verbindungen zwischen den Modulen sind die Annahmen, die die Module gegenseitig übereinander anstellen
Grundlagen der Objektorientierung Hierarchie Abstraktionen bilden eine Hierarchie Klassenstruktur: ist-ein - Hierarchie (Vererbung) Objektstruktur: Teil-von - Hierarchie (Aggregation) Zeichung: Grady Booch: "Object-Oriented Analysis and Design with Applications"
Modellierung //Kommentar public class ComplexNumber{ //noch ein Kommentar float real; float complex; Implementierung (hier: Java) real: 17.891 complex: 13.1 Modellierung (hier: nicht-standard Symbol)
Modellierungsstandard: UML //Kommentar public class ComplexNumber{ //noch ein Kommentar float real; float complex; Implementierung (hier: Java) ComplexNumber real : float complex : float??? Modellierung (hier: UML) [Unified Modeling Language]
Die Klasse: Felder und Methoden public class ComplexNumber{ float real; float complex; Imaginäre Achse Betrag Reale Achse Erinnerung: Betrag einer komplexen Zahl ist die Wurzel der Summe von Realteil im Quadrat und Imaginärteil im Quadrat.
Die Klasse: Felder und Methoden public class ComplexNumber{ float real; float complex; public float betragquadrat(){ float bq; //Betrag im Quadrat bq = (real*real)+(complex*complex); return bq; ComplexNumber real : float complex : float betragquadrat() : float
Die Klasse: Felder und Methoden ComplexNumber real : float complex : float betragquadrat() : float ComplexNumber cn = new ComplexNumber(); cn.real = 0; cn.complex = 10; float ergebnis = cn.betragquadrat(); Anwendung der Methode betragquadrat() auf das Objekt cn.
Die Klasse: Felder und Methoden Die String-Klasse der Standardbibliothek, welche die Java- Laufzeitumgebung (Java Runtime Environment - JRE) bereits mitbringt. String value : char[] compareto() //Methode compareto() der Klasse String String a = "A"; String b = "B"; int ergebnis = a.compareto(b); -1: falls a lexikographisch kleiner als b 0: falls a lexikographisch identisch mit b +1: falls a lexikographisch größer als b
Bubble Sort von Strings in Java String[] r; //Ein- und Ausgabe-Reihung int i; //index String tmp; //temporaerer Speicher boolean done; //merkt sich, ob Alg fertig r = new String[]{ "IBM", "HP", "Apple"; //Sortieren do{ done = true; for(i=0; i<r.length; i++){ if( r[i].compareto(r[i+1]) > 0 ){ tmp = r[i]; r[i]=r[i+1]; r[i+1] = tmp; done = false; while(!done); Variablen- Deklaration Eingabe Algorithmus //Ausgabe for(i=0; i<r.length; i++){ System.out.print(r[i]+" "); Ausgabe
Sortieren von Objekten anhand ihrer Felder Student[] studenten; int i; //index Student tmp; boolean done; class Student{ String vorname; String nachname; Student studenteins = new Student(); studenteins.vorname = "Hans-Peter"; studenteins.nachname = "Müller";... studarr = new Student[]{ studenteins, studentzwei, studentdrei ; do{ done = true; for(i=0; i<studarr.length; i++){ if(studarr[i].vorname.compareto(studarr[i+1].vorname)>0){ tmp = studarr[i]; studarr[i]=studarr[i+1]; studarr[i+1] = tmp; done = false; while(!done);
Ausflug: die Java Standard-Klassenbibliothek http://java.sun.com/jse/1.4./docs/api/ Interessante Klassen zum Einstieg: java.util.random (Zufallszahlengenerator) java.lang.stringbuffer java.lang.string java.lang.stringtokenizer