14. Java Klassen. Klassen (Java) vs. Records (Pascal) Klassen - Konzeptuell. Klassen - Technisch

Ähnliche Dokumente
Einstieg in die Informatik mit Java

Einstieg in die Informatik mit Java

Repetitorium Informatik (Java)

Java Einführung Methoden in Klassen

Silke Trißl, Prof. Ulf Leser Wissensmanagement in der Bioinformatik. Jede Applikation braucht eine Klasse mit einer main-methode

Kapitel 9. Programmierkurs. Attribute von Klassen, Methoden und Variablen. 9.1 Attribute von Klassen, Methoden und Variablen

Beispiele für Ausdrücke. Der imperative Kern. Der imperative Kern. Imperativer Kern - Kontrollstrukturen. Deklarationen mit Initialisierung

Einstieg in die Informatik mit Java

FH D. Objektorientierte Programmierung in Java FH D FH D. Prof. Dr. Ing. André Stuhlsatz. Wiederholung: Gerüstbeispiel. Vererbungshierarchie: Typ 0

Klassen und Objekte. Einführung in Java. Folie 1 von Mai Ivo Kronenberg

3 Objektorientierte Konzepte in Java

Einstieg in die Informatik mit Java

Kapitel 9: Klassen und höhere Datentypen. Klassen und höhere. Objekte, Felder, Methoden. Küchlin/Weber: Einführung in die Informatik

Statische und Nichtstatische Methoden Properties/ Eigenschaften

7. Objektorientierte Softwareentwicklung/3. Informatik II für Verkehrsingenieure

Innere Klassen. Gerd Bohlender. Institut für Angewandte und Numerische Mathematik. Vorlesung: Einstieg in die Informatik mit Java

Javakurs für Anfänger

Informatik II Prüfungsvorbereitungskurs

Geschachtelte Klassen

5.5.8 Öffentliche und private Eigenschaften

Inhaltsüberblick. I. Grundbegriffe - Objekte und Klassen. Organisatorisches. I. Grundbegriffe - Objektorientierte Konzepte

Objekt-Orientierte Programmierung

Algorithmen und Datenstrukturen 06

Javakurs 2013 Objektorientierung

Klassen mit Instanzmethoden

AuD-Tafelübung T-B5b

Programmieren in Java

3. Klassen Statische Komponenten einer Klasse. Klassenvariablen

7. Klassenmethoden Einführung in die Programmierung (fbw) Sommersemester 2008 Prof. Dr. Bernhard Humm Hochschule Darmstadt, fbi

Algorithmen und Datenstrukturen

Sichtbarkeit & statische Methoden. Einsatz von Sichtbarkeit Einsatz statischer Methoden programmatische Realisierung 2 Beispielaufgaben

Java I Vorlesung Vererbung und Sichtbarkeit

Javakurs für Anfänger

Th. Letschert OOP 2 2. Geheimnisprinzip und Sichtbarkeitsbeziehungen

Objekt-Orientierte Programmierung

PIWIN I. Praktische Informatik für Wirtschaftsmathematiker, Ingenieure und Naturwissenschaftler I. Vorlesung 3 SWS WS 2007/2008

Programmieren II. Innere Klassen. Heusch 10, Ratz 5.2.1, Institut für Angewandte Informatik

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

Javakurs FSS Lehrstuhl Stuckenschmidt. Tag 3 - Objektorientierung

Objektorientierte Programmierung mit Java. Grundlagen Übersicht. Programmiersprachen

Klausur Grundlagen der Programmierung

Prof. W. Henrich Seite 1

Vorkurs C++ Programmierung

Polymorphie/Späte Bindung Abstrakte Klassen Interfaces. Polymorphie/Späte Bindung Abstrakte Klassen Interfaces

Übung 1 mit C# 6.0 MATTHIAS RONCORONI

3 Objektorientierte Konzepte in Java

Java Einführung Methoden. Kapitel 6

1. Grundzüge der Objektorientierung 2. Methoden, Unterprogramme und Parameter 3. Datenabstraktion 4. Konstruktoren 5. Vordefinierte Klassen

Grundzüge der Programmierung. Wiederverwendung VERERBUNG

Algorithmen und Programmierung II

Innere Klassen in Java

Programmierkurs. Manfred Jackel

Java: Vererbung. Teil 3: super()

C# im Vergleich zu Java

3. Konzepte der objektorientierten Programmierung

Kapitel 6. Vererbung

Algorithmen und Datenstrukturen 07

Prinzipien Objektorientierter Programmierung

Anwendungsentwicklung mit Java. Grundlagen der OOP, Vererbung, Schnittstellen, Polymorphie

Kapitel 6. Vererbung

Einstieg in die Informatik mit Java

Kapitel 6. Vererbung

Java Einführung Klassendefinitionen

Softwaretechnik WS 16/17. Übungsblatt 01

Theorie zu Übung 8 Implementierung in Java

1 Abstrakte Klassen, finale Klassen und Interfaces

Programmieren I. Strategie zum Entwurf von Klassen. Beispiele. Design von Klassen. Dr. Klaus Höppner. Beispiel: Bibliothek

7. Schnittstellen Grundlagen zu Schnittstellen. 7. Schnittstellen

Geschachtelte Klassen

Software Engineering Klassendiagramme Einführung

Kapitel 3. Programmierkurs. Arten von Anweisungen. 3.1 Was sind Anweisungen?

5. Tutorium zu Programmieren

Vorlesung Programmieren. Bisher: Klassen und Objekte. Was ist mit ähnlichen Klassen? Vererbung und Polymorphismus

Objektorientierte Programmierung

Einführung in die Programmierung mit Java. Hörsaalübung

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

Einstieg in die Informatik mit Java

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

Software Engineering. Zur Architektur der Applikation Data Repository. Franz-Josef Elmer, Universität Basel, HS 2015

EINI WiMa/LW. Einführung in die Informatik für Naturwissenschaftler und Ingenieure. Vorlesung 2 SWS WS 11/12

Kapitel 8. Programmierkurs. Methoden. 8.1 Methoden

Java Kurs für Anfänger Einheit 5 Methoden

Letztes Mal. static int ggt(int a, int b) { if (a == b) return a; else if (a > b) return ggt(a-b,b); else if (a < b) return ggt(a,b-a);

FH D. Objektorientierte Programmierung in Java FH D FH D. Prof. Dr. Ing. André Stuhlsatz. Wiederholung: Interfaces

Erreichbarkeit von Klassenelementen. Daten verstecken und kapseln

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

Grundlagen der Programmierung Prof. H. Mössenböck. 6. Methoden

6. Globalübung (zu Übungsblatt 8)

Einführung in die Java- Programmierung

Aufbau von Klassen. class punkt {...

Überblick. 5. Objekt und Klasse, Elementfunktionen

Speicherklassen (1) Lokale Variablen

1 Polymorphie (Vielgestaltigkeit)

Themen. Web Service - Clients. Kommunikation zw. Web Services

Transkript:

Klassen (Java) vs. Records (Pascal) 14. Java Klassen Klassen, Typen, Objekte, Deklaration, Instanzierung, Konstruktoren, statische Felder und Methoden, Datenkapselung Pascal RECORDs in Pascal sind reine Datenobjekte. Auf ihnen wird mit Prozeduren operiert. RECORDs sind Werte: Instanzen werden automatisch alloziert. Java Klassen in Java beherbergen Daten und Code. Sie stellen Code bereit, mit dem auf ihnen operiert wird. Klassen sind Referenzen: Instanzen müssen mit new alloziert werden. Instanzen heissen Objekte. 275 276 Klassen - Technisch Eine Klasse ist eine Einheit mit einem Namen, die Daten und Funktionalität beinhaltet Die Klasse definiert einen neuen Datentyp. Name Klassen - Konzeptuell Klassen erlauben es, Daten, die inhaltlich zusammengehören, zu einem Datentyp zusammenzufassen. Daten sind Variablen und heissen Felder oder Attribute. Funktionalität ist vorhanden in Form von Methoden, die in der Klasse definiert sind. Klassen sind separate.java Dateien mit gleichem Namen Feld 1 Feld 2 Methode 1 Methode 2 277 Klassen bieten Funktionalitäten an, welche Abfragen basierend auf den Daten oder Operationen auf den Daten ermöglichen. 278

Klassen - Beispiel: Erdbebendaten Klasse für - Erster Versuch Datei.java: public class { String datum; String zeit ; float ; float ; String datum String zeit float float float magnitude http://hitseddb.ethz.ch:8080/ecos09/result.html?tremors=earthquake&time_start=2001&time_end=2008 float magnitude; 279 280 Objekte: Instanzen von Klassen Objektinstanzierung: Das Schlüsselwort new Variable w vom Typ Klassen beschreiben den Aufbau von Objekten, eine Art Bauplan w Vergleichbar mit den Kopfdaten aus der Tabelle. w; w = new (); datum Objekte werden instanziert nach Bauplan und enthalten nun Werte. zeit Vergleichbar mit den einzelnen Datenzeilen aus der Tabelle. Instanzierung eines Objekts vom Typ magnitude 0.0f 0.0f 0.0f 281 282

Dereferenzierung: Zugriff auf Felder Objekte sind Referenztypen: Aliasing w; w = new (); w datum zeit w; 2 0 0 1 / 0 w = new (); w.datum = "2001/01/03"; w2 = w; w.zeit = "11:11:20.4"; 1 1 : 1 1 : 46.446f w. = 46.446f; w2.magintude = 5.2f; w. = 9.982f; 9.982f w.magnitude = 2.36f; System.out.println(w.magnitude); magnitude 2.36f w2 w datum zeit magnitude 46.446f 9.982f 5.2f 2 1 283 284 Moment mal!... Ist das ein gutes Klassendesign? Klassen erlauben es, Daten, die inhaltlich zusammengehören, zu einem Datentyp zusammenzufassen. String datum String zeit float float float magnitude Es geht vielleicht besser! Datum und Zeit gehören gehören in eine eigene Klasse: Java bietet das schon an: java.time.localdatetime Breitengrad und Längengrad gehören in einen Datentyp. 285 286

Klasse für : Zweiter Versuch LocalDateTime datum_zeit position float magnitude java.time.localdatetime float float float distanz( other) Methoden in Klassen public class { float ; float ; / Berechnet die Distanz zur uebergebenen other in Kilometer. / float distanz( other){ float dl = this. other.; // Rest: Entfernungsberechnung der Orthodrome 287 288 Methodenaufruf - Setting matterhorn, bietschhorn; //... Instanzieren und Setzen von Werten d = matterhorn.distanz(bietschhorn); Im Kontext der Methode float distanz( other){ float dl = this. other.; //... this matterhorn 45.97 matterhorn 45.97 other bietschhorn 7.65 bietschhorn 7.65 46.39 46.39 7.85 7.85 289 290

Schlüsselwort this Konstruktoren - Anwendung Erstellen einer ist relativ umständlich: this erlaubt, innerhalb Methoden einer Klasse, auf das aktuelle Objekt zuzugreifen. k = new (); k. = 45.97f k. = 7.65f Konstruktoren erlauben es, einfacher die Initialwerte der Felder einer Klasse zu setzen! k = new (45.97f, 7.65f); 291 292 Konstruktoren - Definition public class { float ; float ; Statische Felder und Methoden Mit dem Schlüsselwort static deklariert. // Konstruktor fuer gegebene n (float b, float l){ this. = b; this. = l; // Standard Konstruktor ohne Parameter (){ Existieren nur einmal pro Klasse. Werden direkt über die Klasse aufgerufen, nicht auf Objekten der Klasse. Beobachtung: die main Methode ist statisch! public static void main(string[] args) 293 294

Beispiel: Die Math Klasse float f = Math.sqrt(g) Ist definiert in der Klasse Math: public class Math { public static float sqrt( float value){ //... Beispiel zum Konzept der Datenkapselung Szenario / Motivation: Langfristiges Ziel: Netzberechnung für die Wasserversorgung Komponenten: Leitungen, Reservoire, Pumpen Modellierung der Komponenten durch Objekte (Klassen) //... 295 (Quelle: Willi Gujer, Siedlungswasserwirtschaft, Springer) 296 Pumpe public class Pumpe{ public double h; // manometrische Foerderhoehe in m public double q; // Foerdermenge in m^3/s public Pumpe(double H, double Q){ h = H; q = Q; assert (h > 0); assert (q > 0); // Invariante!... Pumpe p1 = new Pumpe(40, 0.02); Pumpe p2 = new Pumpe(30, 0.01); Szenario Jemand verwendet die Pumpendaten double v = p1.q 20; // Foerdermenge in 20 Sekunden und verändert die Parameter der Pumpe p1.h = 50; p1.q = 0; Das wollen wir nicht! Wie vermeidet man diese Inkonsistenz? 297 298

Kapselung = Information Hiding! public class Pumpe{ private double h; private double q; public Pumpe(double H, double Q){ h = H; q = Q; assert (h > 0); assert (q > 0); // Invariante! public double getq(){ return q; Felder sind nun versteckt. Zugriff nur innerhalb der Klasse. Getter Methode: erlaubt (lesenden) Zugriff auf q Datenkapselung Eine komplexe Funktionalität wird auf einer möglichst hohen Abstraktionsebene semantisch definiert und durch ein vereinbartes minimales Interface zugänglich gemacht Wie der Zustand durch die Datenfelder einer Klasse repräsentiert wird, sollte für den Benutzer der Klasse nicht sichtbar sein Dem Benutzer der Klasse wird eine repräsentationsunabhängige Funktionalität angeboten Dies gestattet eine garantierte Einhaltung von Invarianten. 9 9 Im Beispiel: q 0 und h 0 299 300 Klassen können mehr als Records Verwendung public class Pumpe{ private double[] ha; // Kennlinie private double[] qa; public Pumpe(double[] Ha,double []Qa){ ha = Ha; qa = Qa; private interpolate (double x, double X[], double Y[]) {... double[] kennlinieh = {55,50,40,30,20; double[] kennlinieq = {0,0.01,0.02,0.03,0.035; Pumpe p = new Pumpe(kennlinieH, kennlinieq); // Foerdermengen in 1 Stunde bei 45 m Foerderhoehe double v = p.getq(45) 3600; public double getq(double h){ return interpolate (h,ha,qa); 301 302

Klassen Klassen beherbergen das Konzept der Datenkapselung. Klassen sind Bestandteil nahezu jeder objektorientierten Programmiersprache. Klassen können in Java in Paketen zusammengefasst werden. Zugriffsmodifizierer public class Pumpe{ private double h; private double q;.. Sichtbarkeit nach Modifizierer: Klasse Paket Subklasse Global public protected (keines) private 303 304