Softwareentwicklung I (IB) Objekte. Prof. Dr. Oliver Braun. Fakultät für Informatik und Mathematik Hochschule München

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

Repetitorium Informatik (Java)

Java Einführung Klassendefinitionen

Einstieg in die Informatik mit Java

Javakurs FSS Lehrstuhl Stuckenschmidt. Tag 3 - Objektorientierung

Klassen mit Instanzmethoden

Einstieg in die Informatik mit Java

Objektorientierte Programmierung

Einstieg in die Informatik mit Java

Kapitel 8. Programmierkurs. Methoden. 8.1 Methoden

5.4 Klassen und Objekte

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);

Prof. W. Henrich Seite 1

Einstieg in die Informatik mit Java

Java Kurs für Anfänger Einheit 4 Klassen und Objekte

5.5.8 Öffentliche und private Eigenschaften

Java Einführung VARIABLEN und DATENTYPEN Kapitel 2

Einstieg in die Informatik mit Java

Javakurs für Anfänger

Javakurs 2013 Objektorientierung

JAVA - Methoden

Java 8. Elmar Fuchs Grundlagen Programmierung. 1. Ausgabe, Oktober 2014 JAV8

JAVA - Methoden - Rekursion

Einführung in die Programmierung 1

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

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

6 Speicherorganisation

Java Einführung Methoden in Klassen

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

Propädeutikum zur Programmierung

Der Aufruf von DM_in_Euro 1.40 sollte die Ausgabe 1.40 DM = Euro ergeben.

Grundzüge der Programmierung. Wiederverwendung VERERBUNG

3 Objektorientierte Konzepte in Java

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

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

Kapitel 3: Variablen

Probeklausur: Programmierung WS04/05

Präzedenz von Operatoren

Java Einführung Umsetzung von Beziehungen zwischen Klassen. Kapitel 7

Objektorientierte Programmierung OOP Programmieren mit Java

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

Einführung in die Programmierung

Programmierkurs. Manfred Jackel

Objektorientierte Programmierung mit Java. Grundlagen Übersicht. Programmiersprachen

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

Das Typsystem von Scala. L. Piepmeyer: Funktionale Programmierung - Das Typsystem von Scala

Objekt-Orientierte Programmierung

Vererbung. Martin Wirsing. Ziele. Vererbung

Javakurs zu Informatik I. Henning Heitkötter

1. Der Einstieg in Java. Was heißt Programmieren?

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

Prof. H. Herbstreith Fachbereich Informatik. Leistungsnachweis. Informatik 1 WS 2001/2002

3. Anweisungen und Kontrollstrukturen

Einstieg in die Informatik mit Java

Kapitel 6. Vererbung

Klassendefinitionen verstehen

Algorithmen und Datenstrukturen

JAVA-Datentypen und deren Wertebereich

3 Objektorientierte Konzepte in Java

Algorithmen und Programmierung II

Seminar Scala SS2010, Einführung. R. Schiedermeier Fakultät 07 für Informatik und Mathematik

Java Kurs für Anfänger Einheit 5 Methoden

Kapitel 6. Vererbung

Dr. Monika Meiler. Inhalt

Die Programmiersprache C Eine Einführung

Einführung Datentypen Verzweigung Schleifen. Java Crashkurs. Kim-Manuel Klein May 4, 2015

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

Programmierung mit C Zeiger

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

C++ - Operatoren. Eigene Klassen mit neuen Funktionen

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

Methoden. von Objekten definiert werden, Methoden,, Zugriffsmethoden und Read-Only

Theorie zu Übung 8 Implementierung in Java

12 Klassen in Java Instanz- und Klassenbestandteile

Java Einführung Operatoren Kapitel 2 und 3

Java Einführung Methoden. Kapitel 6

Methoden (fortgeschritten) in C# - 1

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

Probeklausur: Programmierung WS04/05

Kapitel 6. Vererbung

Wiederholung Wozu Methoden? Methoden Schreiben Methoden Benutzen Rekursion?! Methoden. Javakurs 2012, 3. Vorlesung

Java I Vorlesung 6 Referenz-Datentypen

Dr. Monika Meiler. Inhalt

Einführung in die Java- Programmierung

Übungsblatt 7. Was ist die Ausgabe de facto? Entspricht die Ausgabe Ihren Erwartungen?

Deklarationen in C. Prof. Dr. Margarita Esponda

Primitive Datentypen

Computeranwendung und Programmierung (CuP)

Java I Vorlesung Vererbung und Sichtbarkeit

Einführung in die Java- Programmierung

Java Vererbung. Inhalt

Objektorientierte Programmierung

Java - Zahlen, Wahrheitswerte und Zeichen. Leibniz Universität IT Services Anja Aue

Java - Zahlen, Wahrheitswerte und Zeichen. Leibniz Universität IT Services Anja Aue

Problemstellung. Informatik B - Objektorientierte Programmierung in Java. Vorlesung 24: Reflection 1. IDE und automatische Tests.

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

Objektorientierte Programmierung. Kapitel 12: Interfaces

Objektorientierte Programmierung. Objektorientierte Programmierung. Klasse. Objekt. Beispiel: Sportfest1. Methode. Eine Einführung mit BlueJ

1. Typen und Literale (6 Punkte) 2. Zuweisungen (6 = Punkte)

Modul Entscheidungsunterstützung in der Logistik. Einführung in die Programmierung mit C++ Übung 2

Transkript:

Softwareentwicklung I (IB) Objekte Fakultät für Informatik und Mathematik Hochschule München Letzte Änderung: 18.03.2018 20:09 Inhaltsverzeichnis Neue Typen durch Klassen............................. 2 Klassennamen.................................... 2 Objektvariable................................... 2 Objektvariablen als Variablen........................... 3 Primitive Typen vs. Referenztypen........................ 3 Objekte....................................... 3 Operator new.................................... 4 Klasse und Anwendung............................... 4 new als Operator.................................. 5 Referenzvariablen.................................. 5 Wertzuweisung an Referenzvariable........................ 5 Einzelschritte beim Initialisieren einer Referenzvariablen............ 6 null-referenz.................................... 6 Zugriff auf Objektvariablen............................ 7 Beispiel....................................... 7 Umgang mit Objektvariablen........................... 7 Beispiel....................................... 8 Objektvariablen unterschiedlicher Objekten................... 8 Wertzuweisungen bei primitiven Typen...................... 9 Wertzuweisungen bei Referenztypen........................ 10 Vergleich von Referenztypen............................ 10 Lebensdauer..................................... 11 1

Neue Typen durch Klassen int, double, boolean sind vordefinierte Typen Klassen definieren neue Typen Beispiel in diesem Kapitel: Brüche, wie zum Beispiel 1, 43, 0, 11 2 937 1330 4 Klassennamen Klassen sind mit eindeutigen Identifiern benannt In der Regel englische Substantive, erster Buchstabe groß Syntax: class Classname { Beispiel: Klasse Rational für Brüche class Rational { Jede Klassendefinition in einer eigenen Quelltextdatei Dateiname = Klassenname.java Objektvariable Bestandteile eines Bruchs: Zähler, Nenner (engl. numerator, denominator) Komponenten in der Klassendefinition auflisten: class Rational { int numer; int denom; Einzelne Komponente = Objektvariable (auch Instanzvariable, Datenelement, Feld, engl. field) Anzahl und Reihenfolge der Objektvariablen beliebig Letzte Änderung: 18.03.2018 20:09 2

Objektvariablen als Variablen Objektvariablen sind Variablen, ebenso wie bisher verwendete Variablen Zur begrifflichen Abgrenzung: Bisher benutzte Variablen = lokale Variablen Gleich: Syntax der Definition von Objektvariablen und lokalen Variablen Unterschiedlich: Ort der Definition: Objektvariablen Lokale Variablen Elemente von Klassen Anweisungen in Methoden Benennung von Objektvariablen: wie lokale Variablen eindeutig innerhalb einer Klasse Primitive Typen vs. Referenztypen Rational = neuer Typ, steht gleichberechtigt neben int, double, boolean Unterscheidung (Java-spezifisch): int, double, boolean sind primitive Typen: atomar, innerer Aufbau eines Wertes spielt keine Rolle Rational ist ein Referenztyp: Enthält isolierte Bestandteile (Objektvariablen), diese können einzeln angesprochen und verarbeitet werden Alle Klassen definieren Referenztypen Sortiment primitiver Typen liegt fest, können nicht neu definiert werden Erster Nutzen von Klassen: bündeln ihre Bestandteile Objekte Klassendefinition Bauplan, Konstruktionsvorschrift, Blaupause Objekte der Klasse müssen explizit geschaffen werden, entstehen nicht von alleine Objekt = Exemplar, Instanz eine Klassendefinition beliebig viele Objekte Beispiel: Zwei Rational-Objekte mit den Werten 1 und 3: 9 4 Letzte Änderung: 18.03.2018 20:09 3

Operator new Erzeugen eines neuen Objektes = instanziieren (auch konstruieren, allokieren ) Syntaktisch mit Operator new. Beispiel: new Rational() new produziert aus einer Klassendefinition ein einzelnes, neues Objekt dieser Klasse Mehrere Objekte mehrere Aufrufe von new Klasse und Anwendung Javaprogramm mit Klassen besteht aus: Definition der Klasse Anwendung der Klasse Definition und Anwendung (meist) in verschiedenen Quelltextdateien Letzte Änderung: 18.03.2018 20:09 4

Klassendefinition wie oben: class Rational { Anwendung beispielsweise in main: class Application { public static void main(string[] args) { new Rational() Formal: Auch main steckt in einer Klassendefinition; diese dient aber nur als Rahmen für main new als Operator new = unärer Operator Priorität sehr hoch, wie andere unäre Operatoren Operand von new: Klassenname + leere, runde Klammern new Operator Rational() Operand Wert des new-ausdrucks: neu geschaffenes Objekt Referenzvariablen Definition von Variablen für alle Javatypen, einschließlich Referenztypen Variablen von Referenztyp = Referenzvariable Beispiel: Rational r; Gegensatz: primitive Variable = Variable von primitivem Typ Wertzuweisung an Referenzvariable Fundamentaler Unterschied: Letzte Änderung: 18.03.2018 20:09 5

Primitive Variable: Variable und Speicherplatz für Wert fallen zusammen. Beispiel: int n = 23; Referenzvariable Variable und Wert (= Objekt) existieren unabhängig und getrennt. Definition einer Referenzvariablen schafft nur Variable, kein Objekt! Einzelschritte beim Initialisieren einer Referenzvariablen 1. Referenzvariable definieren: Rational r; 2. Neues Objekt mit new allokieren: new Rational() 3. Objekt an Variable zuweisen: r = new Rational(); Variable referenziert Objekt Bezeichnung Referenzvariable Alle Schritte zusammen: Initialisieren einer Referenzvariablen bei der Definition Rational r = new Rational(); null-referenz null steht für kein Objekt null kann an jede Referenzvariable zugewiesen werden: Rational r = null; Skizze: Achtung: null ist für den Moment ganz okay, aber etwas old-fashioned wir lernen später Optional kennen! null = wohldefinierter Wert, kann verglichen werden. Beispiel: Letzte Änderung: 18.03.2018 20:09 6

if (r == null) { System.out.println("no object"); Neu definierte lokale Variablen sind nicht initialisiert, unabhängig vom Typ Wert null heisst nicht nicht initialisiert Weisen Sie einer Referenzvariablen immer null zu, wenn kein Objekt zur Hand ist Zugriff auf Objektvariablen Jedes Objekt enthält die Objektvariablen, die in der Klassendefinition festgelegt sind Objektvariablen eines Objektes können einzeln angesprochen werden: Elementzugriff Objekt an das sich ein Elementzugriff richtet: Zielobjekt Syntax: Zielobjekt.Objektvariable Beispiel Erzeugen eines Rational-Objekts mit Wert 1 9 : 1. Rational-Objekt erzeugen und an Variable zuweisen: Rational r = new Rational(); 2. Zähler und Nenner des Zielobjektes r einzeln zuweisen: r.numer = 1; r.denom = 9; Anschließend: r ist mit 1 9 initialisiert: Umgang mit Objektvariablen Elementzugriff spricht Objektvariablen innerhalb eines Objektes an Letzte Änderung: 18.03.2018 20:09 7

Gleiche Verwendung wie lokale Variablen Nur Zugriffssyntax zeigt Unterschied zwischen Objektvariablen und lokalen Variablen Beispiel Zähler oder Nenner eines Rational-Objektes in einem Ausdruck verwenden: int i = 5 - r.numer * 3; mit Operatorzuweisung und Inkrementoperator modifizieren: r.numer *= 10; r.numer++; vergleichen: if (r.denom!= 0) usw Objektvariablen unterschiedlicher Objekten Jedes Objekt hat eigene Objektvariablen Elementzugriff richtet sich an eine Objektvariable innerhalb eines Objektes (des Zielobjektes) Andere Objektvariablen des Zielobjektes und Objektvariablen anderer Objekte unberührt Beispiel: Drei Brüche erzeugen, mit unterschiedlichen Werten initialisieren: Rational r = new Rational(); r.numer = 1; r.denom = 9; // r = 1/9 Rational s = new Rational(); s.numer = -1; s.denom = 4; // s = -1/4 Rational t = new Rational(); t.numer = 3*r.numer; t.denom = r.denom + 2 - s.denom; // t = 3/7 Letzte Änderung: 18.03.2018 20:09 8

Mehrere Objekte Wertzuweisungen bei primitiven Typen Wertzuweisung primitiver Typen kopiert den Wert int a = 1; int b = a; Beide Variablen haben Wert 1: Änderungen einer Variablen ohne Auswirkungen auf die andere: b++; System.out.println(a); // gibt 1 aus b inkrementiert auf 2, a immer noch 1. Letzte Änderung: 18.03.2018 20:09 9

Wertzuweisungen bei Referenztypen Anders bei Referenzvariablen: Wertzuweisung bei Referenztypen dupliziert Referenz, nicht das Objekt! Rational a = new Rational(); a.numer = 1; a.denom = 9; Rational b = a; Beide Variablen referenzieren dasselbe Objekt mit Wert 1 9 Aliasing (dt. etwa: Überlagerung ) Aliasing in der Praxis kontrollierbar, sogar wünschenswert Änderungen eines Objektes in beiden Variablen sichtbar b.numer++; System.out.println(a.numer); // gibt 2 aus! Vergleich von Referenztypen Vergleich von Objekten mit == prüft die Identität: true: wenn beide Operanden ein und das selbe Objekt sind false: wenn die Operanden verschiedene Objekte sind Vergleich mit == ignoriert den Inhalt der Objekte Identität aus Sicht der Programmlogik meist wenig interessant. Beispiel: Rational a = new Rational(); a.numer = 1; a.denom = 9; Rational b = new Rational(); b.numer = 1; Letzte Änderung: 18.03.2018 20:09 10

b.denom = 9; if(a == b) // false Dagegen: Rational a = ; Rational b = a; if (a == b) // true Inhaltlicher Vergleich von Objekten: Objektvariablen paarweise vergleichen Rational a = ; Rational b = ; if (a.numer == b.numer && a.denom == b.denom) Frage des Objektvergleichs wird später wieder aufgegriffen Lebensdauer Lokale Variablen werden geschaffen freigegeben wenn die Definition erreicht wird wenn der Block der Definition verlassen wird Objektvariablen werden geschaffen freigegeben sobald ein Objekt erzeugt wird (mit new) wenn das Objekt nicht mehr erreichbar ist Lebensdauer von Objekten einschließlich der darin enthaltenen Objektvariablen unabhängig von lokalen Variablen Letzte Änderung: 18.03.2018 20:09 11