Prof. W. Henrich Seite 1

Ähnliche Dokumente
Objektorientierung. Marc Satkowski 20. November C# Kurs

C++ - Objektorientierte Programmierung Konstruktoren und Destruktoren

Einstieg in die Informatik mit Java

Einstieg in die Informatik mit Java

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

C++ - Objektorientierte Programmierung Konstante und statische Elemente

Grundelemente objektorientierter Sprachen (1)

C++ - Objektorientierte Programmierung Polymorphie

Einstieg in die Informatik mit Java

Typsystem Plattform- und Sprachenunabhängigkeit in.net

Implementieren von Klassen

7. Übung Informatik II - Objektorientierte Programmierung

Repetitorium Informatik (Java)

Variablen und Parameter

C++ Klassen weitere Funktionen

Einstieg in die Informatik mit Java

Statische und Nichtstatische Methoden Properties/ Eigenschaften

Grundelemente objektorientierter Sprachen (1)

Grundelemente objektorientierter Sprachen (1)

1 KLASSENKOMPONENTEN. Leitideen: Klassen sind aus Datenkomponenten und Komponentenfunktionen

Klassen als Datenstrukturen

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

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

Java Einführung Methoden. Kapitel 6

HSR Rapperswil 2001 Markus Rigling. Programmieren: Templates Auflage

Mikrorechentechnik II. Klassen in C++

1 Klassen und Objekte

Methoden und Wrapperklassen

Vererbung Was versteht man unter dem Begriff Vererbung?

Institut für Programmierung und Reaktive Systeme. Java 6. Markus Reschke

Grundzüge der Programmierung. Wiederverwendung VERERBUNG

Programmiertechnik. Teil 4. C++ Funktionen: Prototypen Overloading Parameter. C++ Funktionen: Eigenschaften

Allgemeines - Prinzipien

Fragen zur OOP in Java

Methoden (fortgeschritten) in C# - 1

Vererbung. Was versteht man unter dem Begriff Vererbung?

Klassen. Kapitel Klassendeklaration

Einführung in die Programmierung mit C++

C++ - Objektorientierte Programmierung Vererbung

Delegaten. d. h. eine Tätigkeitsanforderung wird weitergeleitet

Tag 7 Repetitorium Informatik (Java)

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

Überblick. R.Grossmann / P. Sobe 1

Themen. Statische Methoden inline Methoden const Methoden this Zeiger Destruktor Kopierkonstruktor Überladen von Operatoren

Prof. W. Henrich Seite 1

Programmiertechnik Klassenvariablen & Instantiierung

Intuitive Einführung. Informatik B Objektorientierte Programmierung in Java. Vorlesung 01: Objektorientierte Programmierung (Teil 1)

Einstieg in die Informatik mit Java

4. Objektorientierte Programmierung mit C++

Objektorientierte Programmierung III

Einstieg in die Informatik mit Java

Kapitel 8. Programmierkurs. Methoden. 8.1 Methoden

Programmieren in C++ Klassen

Repetitorium Programmieren I + II

Themen der Übung. Methoden und Wrapperklassen. Vorteile von Methoden. Methoden. Grundlagen

Überblick. 5. Objekt und Klasse, Elementfunktionen

Einstieg in die Informatik mit Java

Prof. Dr. Wolfgang Schramm. Vorlesung. Techniken der Programmentwicklung. Exkurs: Anonyme Klassen

Programmieren in C/C++ und MATLAB

Programmierkurs C/C++

Einstieg in die Programmierung mit Visual Basic.NET

Objektorientierte Programmierung mit Java. Grundlagen Übersicht. Programmiersprachen

Einstieg in die Informatik mit Java

Geschachtelte Klassen

HSR Rapperswil 2001 Markus Rigling. Programmieren: Klassen Auflage

Aufbau von Klassen. class punkt {...

Modellierung und Programmierung 1

7.2 Dynamischer Speicher in Objekten/Kopierkonstruktor

Einführung in C# Teil 3. Matthias Nübling

Einführung in die Programmierung Blockkurs Java

DAP2-Programmierpraktikum Einführung in C++ (Teil 2)

Javakurs für Anfänger

Methoden. Gerd Bohlender. Einstieg in die Informatik mit Java, Vorlesung vom

3 Klassen, Attribute, Methoden

Klassen mit Instanzmethoden

HSR Rapperswil 2001 Markus Rigling. Programmieren: Smart Pointer Auflage

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

Programmieren in C+ Einführung in den Sprachstandard C++ Springer-Verlag Berlin Heidelberg New York London Paris Tokyo Hong Kong Barcelona Budapest

10.4 Konstante Objekte

Java Methoden. Informatik 1 für Nebenfachstudierende Grundmodul. Kai-Steffen Hielscher Folienversion: 1. Februar 2017

Programmieren in C++ Überladen von Methoden und Operatoren

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

3 Objektorientierte Konzepte in Java

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

Tag 8 Repetitorium Informatik (Java)

Vorlesung Datenstrukturen

Einstieg in die Informatik mit Java

HSR Rapperswil 2001 Markus Rigling. Programmieren: Vererbung. 1 Variante 2

Mapra: C++ Teil 6. Felix Gruber, Sven Groß. IGPM, RWTH Aachen. 13. Juni 2017

Vorausgesetzte Grundkenntnisse. Inhalt. Klassenhierarchie und Vererbung. Vererbung. Klassenhierarchie und Vererbung. Einführung in C# Teil 3

Programmieren in Java

Dynamische Datentypen. Destruktor, Copy-Konstruktor, Zuweisungsoperator, Dynamischer Datentyp, Vektoren

C++ Notnagel. Ziel, Inhalt. Programmieren in C++

Praxis der Programmierung

Objektorientierte Programmierung und Klassen

Programmierung III. Pointer für Fortgeschrittene Marc Ruberg. Arrays von Pointern ( Zeigervektoren ): Pointer auf Pointer:

Vererbung, Polymorphie

C++ Teil 9. Sven Groß. 17. Juni Sven Groß (IGPM, RWTH Aachen) C++ Teil Juni / 17

Programmierung und Angewandte Mathematik

Transkript:

Klasse - ist ein benutzerdefinierter Datentyp (Referenztyp) - hat Datenelemente - hat Methoden - Konstruktor ist spezielle Methode zum Erstellen eines Objektes vom Typ der Klasse (Instanz) - jede Klasse ist von System.Object abgeleitet auch dann wenn dies nicht explizit angegeben wird - Syntax: [Attribute] [Zugriffsmodifikatoren] class Bezeichner [:Basisklasse] {Klassenrumpf} - Attribute: intrinsische (Bsp: [Serializable]) und benutzerdefinierte - Beispiel: [Serializable] public class B : A {} Prof. W. Henrich Seite 1

Elemente einer Klasse - Felder - Konstanten - Methoden - Konstruktoren - Destruktoren - Eigenschaften (Properties) später behandelt werden: - Operatoren - Ereignisse - Indexer Grundlagen Prof. W. Henrich Seite 2

Felder - Felddeklaration in der Klasse kann optional mit Vorgabewert versehen werden Bsp.: public int i =2; - Felder können als readonly deklariert werden. Diese können nach der Erstellung und Initialisierung nicht mehr verändert werden Die Wertzuweisung erfolgt bei der Deklaration oder im Konstruktor - statische Felder gehören zur Klasse, wobei Zugriff nur über die Klasse aber nicht über Instanz möglich ist - expliziter Initialisierer ist für statische Datenelemente erforderlich - Zugriff auf statische Elemente erfolgt über den Klassennamen mit. Operator (Bsp: A.fn();} Prof. W. Henrich Seite 3

Konstanten - werden mit dem Modifizierer const deklariert und ähneln einem Feld Bsp.: public const int size = 8; - der Wert muss in der Deklaration zugewiesen werden und kann nicht im Konstruktor zugewiesen werden - Wert muss zur Compilierzeit bekannt sein (Unterschied zu readonly Feldern) - verhalten sich wie static deklarierte Elemente, und können nicht als static deklariert werden - der Zugriff erfolgt über Klassennamen und ist nicht über eine Instanzvariable möglich (Bsp.: A.i nicht a.i) - Wert muss als Literal geschrieben werden Prof. W. Henrich Seite 4

Methoden - alle Methoden gehören zur Klasse es gibt keine globalen (freien) Funktionen - Deklaration und Definition erfolgt innerhalb der Klasse - Syntax: [Zugriffsebene] R-Typ Name Parameterliste Fktkörper Bsp.: public void fn(int i, char c) { } - der defaultmässige Zugriffsmodifizierer ist private - Methoden müssen nicht deklariert werden bevor sie benutzt werden (Unterschied zu C++) - haben Zugriff auf alle Elemente der Klasse - zu jedem Übergabeparametertyp muss ein Bezeichner angegeben werden Bsp.: void fn(int){...} // falsch - statische Methoden gehören zur Klasse und können nur über die Klasse aufgerufen werden Prof. W. Henrich Seite 5

Methodenparameter 1 - statische Methoden können keine nichtstatischen Elemente aufrufen - nicht statische Methoden können statische Elemente aufrufen - Methodenparameter können nicht (wie in C++) mit Defaultwerten versehen werden - Die Parameter werden standardmäßig als Wert übergeben - werden Objektverweise übergeben, so werden diese auch als Wert übergeben - Das Schlüsselwort params ermöglicht eine variable Parameterliste: static void fn(params int[] intlist)... Aufruf: fn(1,2,3); - params kann nicht mit ref und out (siehe unten) kombiniert werden Prof. W. Henrich Seite 6

Methodenparameter 2 - Schlüsselwort ref dient zur Übergabe eines Parameters als Verweis, der initialisiert sein muss Bsp. void fn (ref int i)... // i wird als Verweis //übergeben und kann geändert werden - ref muss sowohl in der Methodendefinition als auch beim Aufruf angegeben werden - ref auf Verweistyp macht Originalverweis änderbar - Schlüsselwort out gibt an, daß dieser Parameter beim Aufruf nicht übergeben wird da er ausschließlich für die Rückgabe verwendet werden soll - ein mit out modifizierter Parameter muss nicht initialisiert werden - einem mit out modifiziertem Parameter muss im Funktionskörper ein Wert zugewiesen werden Prof. W. Henrich Seite 7

Überladen von Methoden - Methoden können überladen werden, d. h. es kann mehrere Methoden mit gleichem Bezeichner geben, dies sind dann unterschiedliche Methoden - Überladen wird über verschiedene Parameterlisten aber nicht über Rückgabetyp bzw. Zugriffsmodifizierer ermöglicht - out und ref nicht gleichzeitig zum Überladen verwendbar - Beim Aufruf überladener Methoden werden implizite Konvertierungen durchgeführt - Falls beim Aufruf Auswahl nicht eindeutig -> Compilerfehlermeldung Prof. W. Henrich Seite 8

Konstruktoren 1 - Instanzkonstruktoren dienen dem Erstellen einer Instanz der Klasse - new ruft den Instanzkonstruktor auf Bsp.: class A{} A a = new A(); // a ist dann Referenz - werden immer aufgerufen beim Erstellen einer Instanz - können überladen werden - haben den gleichen Namen wie die Klasse und keinen Rückgabeparameter - Standardkonstruktor initialisiert mit Standardwerten (Bsp. int mit 0) - Aufruf Konstruktor von Konstruktor mit :this(parameter) Bsp.: A(int i, int j) : this(j){ } Prof. W. Henrich Seite 9

Konstruktoren 2 - Falls kein Konstruktor definiert wird ist der Standardkonstruktor (ohne Übergabeparameter) verfügbar - Falls mindestens ein Konstruktor definiert wird ist der Standardkonstruktor nicht mehr verfügbar - Erstellen von Kopien; siehe später (Clone, Kopierkonstruktor) - Syntax: [Zugriffsmodifikator] Klassenname ([Argumentliste]){Konstruktorkörper} - Statische Konstruktoren werden zur Bearbeitung statischer Elemente eingesetzt - Statische Konstruktoren werden automatisch aufgerufen Prof. W. Henrich Seite 10

Statischer Konstruktor - Zweck: Erledigung von Setup-Aufgaben, die nicht per Initialisierer erreicht werden können und nur einmal durchgeführt werden sollen - statischer Konstruktor initialisiert statische Elemente Instanz Konstruktor initialisiert Instanz Elemente - dürfen keinen Zugriffsmodifikator erhalten Aufrufreihenfolge statischer Konstruktoren - statische Konstruktor wird aufgerufen bevor erste Instanz erstellt wird - statische Konstruktor wird nur einmal aufgerufen - statische Konstruktor wird aufgerufen nachdem statische Elemente initialisiert wurden - statische Konstruktor wird aufgerufen bevor auf statische Member verwiesen wird Prof. W. Henrich Seite 11

Destruktoren - werden wie in C++ definiert ~Klassenname(){ } haben aber andere Bedeutung - werden vom Garbage Collector (GC) automatisch aufgerufen bevor dieser den Speicherplatz freigibt und nicht wenn Variable Gültigkeit verliert (GC wird später behandelt) - GC erfogt automatisch, so dass in der Regel kein Destruktor erforderlich ist - Objekte die Destruktoren enthalten benötigen mehr Zeit bei der Erstellung und Freigabe - Destruktor ist nur erforderlich für nicht automatisch handhabbare Ressourcen d. h. meistens nicht erforderlich Prof. W. Henrich Seite 12

Properties 1 - Eigenschaften sind speziellemethoden, die den Zugriff auf Datenelemente ermöglichen, wobei der Anschein des direkten Zugriffs auf ein Feld entsteht - tatsächlich erfolgt der Zugriff über Methoden Bsp.: int p=11; public int P{ get{return p; } set{p=value;)} Aufruf: Instanz.P = 7; - mindestens eine dieser Methoden (get oder set) muss implementiert werden - Vorteil: die Implementierung (z.b. Plausibilitätsprüfungen)des dahinter verborgenen Elementes könnte geändert werden, ohne dass der Zugreifer hiervon beeinflusst wird Prof. W. Henrich Seite 13

Properties 2 - aus Sicht des Clients ist es eine Membervariable - Definiton einer Eigenschaft entspricht Definition eines Datenelementes mit anschließendem Block für get und/oder set - get und set haben keine expliziten Parameter - set hat impliziten Parameter value - get/set werden vom Compiler inline expandiert - sie lassen sich nicht als Argumente an Methoden übergeben - sie können static sein - als Namenskonvention wird der Bezeichner für die Property gleich dem Bezeichner des Datenelementes mit grossem Anfangsbuchstaben (Datenelement klein) benannt Prof. W. Henrich Seite 14

Geschachtelte Klassen - Klassen bzw. Strukturen können selbst wieder solche enthalten - In der Regel sind dies lokal benötigte Hilfstypen - Sichtbarkeit des geschachtelten Typs kann auf enthaltenden Typ beschränkt werden - Bsp.: class A{...class B{...}...} - Eingeschachtelte Typen sehen alle Elemente des umliegenden Typs (auch private) - Zugriff auf äussere Instanzelemente erfolgt über Referenz auf aüssere Instanz - Äussere Typen sehen nur die public Elemente ihrer inneren Typen - Felder von inneren und äusseren Typen gehören zu unterschiedlichen Instanzen Prof. W. Henrich Seite 15