C# PDF

Title C#
Author Kevin Nguyen
Course Konzepte des objektorientierten Programmierens
Institution FOM Hochschule
Pages 7
File Size 126.1 KB
File Type PDF
Total Downloads 4
Total Views 187

Summary

Download C# PDF


Description

Klassen  Bauplan/Template für ein Objekt - Objekte werden gemäß der in Klassen abgelegten Baupläne erzeugt - Klassen sind die Datentypen von neu instanziierten Objekten - Objekte sind die Variablen (Instanzen) dieser Datentypen (Klassen) - Überbegriff für eine Menge von Objekten, die einen gemeinsamen strukturellen Aufbau aus Daten & Prozeduren haben - Klasse trägt einen Namen und besteht aus Feldern, Attribute & Methoden (um auf Datenfelder zugreifen zu können) - Greift mit Methoden auf Datenfelder zu - Klassen werden separat angelegt und Objekte der zugehörigen Klasse werden nach den in den Klassen gespeicherten Bauplänen in der Main-Funktion erstellt Abstrakte Klasse  Klasse, von der keine Instanzen erzeugt werden können - Modifizierer „abstract“ (Klasse muss als abstract definiert werden, wenn sie eine abstrakte Methode besitzt - Kann abstrakte Methoden enthalten - Bei einer abstrakten Oberklasse, müssen all ihre Member (Attribute und Methoden) in den Unterklassen überschrieben werden public override void methodenname() {} - „Basisklasse“, welche spezialisiert werden muss! Generische Klasse  Klasse die als Platzhalter für Datentypen besitzen, die erst zur Laufzeit konkretisiert werden - Typparameter können innerhalb einer generischen Klasse an jeder Stelle stehen, an denen ein Datentyp stehen kann - + striktere Typprüfung zur Kompilierzeit möglich - + explizite Konvertierung zwischen Datentypen seltener erforderlich - + keine Notwendigkeit von Boxingvorgängen + Typprüfung zur Laufzeit Klassenhierarchien  Beziehungen von Klassen im Sinne von Spezialisierung und Generalisierung - Hierarchien werden im Klassendiagramm durch einen nicht ausgefüllten Pfeil von der Unterklasse zur Oberklasse dargestellt s. Grafik Konstruktor  Mithilfe von Konstruktoren kann jedes Objekt individuelle Attribute zugewiesen bekommen - Attribute werden zu Beginn jeder Klasse innerhalb eines Konstruktors angelegt - Konstruktor besitzt denselben Namen, wie die Klasse - Bei mehreren Konstruktoren innerhalb der gleichen Klasse, besitzen beide Konstruktoren denselben Namen und unterscheiden sich in Anzahl bzw. Typ ihrer Attribute/Parameter (überladen des Konstruktors) - Konstruktoren einer Klasse sind spezielle Methoden, die bei der Instanziierung der Klasse mit „new“ aufgerufen werden und die Felder initialisieren Exlplizite Top-Down Konstruktorverkettung  Aufruf eines Basisklassen-Konstruktors aus einer abgeleiteten Klasse heraus mit „base“ (base bezeichnet Konstruktor der Basisklasse) Implizite Top-Down Konstruktorverkettung  werden bei der Instanziierung eines Klassenobjekts einer abgeleiteten Klasse keine Konstruktoren der Basisklasse aufgerufen, so werden zunächst die Parameterkosen Standardkonstruktoren aller in einer Hierarchie vorausgehenden Basisklasse aufgerufen Objekt  Instanz einer Klasse - Objekterzeugung  Instanziierung - ein Objekt besteht aus Methoden & Elementen - alle Zustände eines Objekts sind lokal in diesem Objekt gespeichert - Instanzvariablen sind instanzlokal gültig und können in jeder Instanz eine individuelle Ausprägung annehmen Instanziierung  Instanziierung einer Klasse erfolgt generell durch den Aufruf eines Konstruktors:

object – reference = new constructor; Instanziierungsprozess 1.) Speicherallokation für das Objekt im Heap 2.) Initialisierung der Felder mit Initialwerten (falls definiert), sonst mit 0,“ oder null 3.) Aufruf des Konstruktors - werden keine Konstruktor explizit deklariert, erzeugt das System implizit einen parameterlosen Standardkonstruktor class-name() - sobald ein Konstruktor definiert wurde, wird der implizite Standardkonstruktor nicht mehr erzeugt - Konstruktoren können überladen werden

Synonyme Klasse – Objekt Objekt – Instanz, Exemplar Feld – Attribut, Eigenschaft Attribut (Eigenschaft v. Objekten) – Datenfeld, Datum, Feld Operation – Funktion, Methode, Aktion, Routine, Prozedur Parameter – Argument, Variable Felder  Variablen- oder Konstantendeklaration innerhalb von Klassen 1) Static: sind nicht Teil einer bestimmten Instanz, sondern existieren für eine Klasse nur einmal Feldertypen { 2) readonly: schreibgeschützte Felder 3) volatile: flüchtige Felder Methoden Allgemeines  Methode verändert den Zustand eines Objektes  Methode implementieren die Funktionalität von Klassenobjekten - jede Methode hat eine Adresse - Bei Methoden wird meistens der Modifizierer „public“ verwendet, damit Objekte bzw. Klassen auf die Methoden zugreifen können - Methodenname wird immer klein geschrieben - Beim Aufrufen von Methoden müssen () verwendet werden - Methoden können ohne, mit einem oder mit mehreren Parametern angelegt werden - Können mit oder ohne Rückgabewert angelegt werden (return …; vs.console.writeline()) Abstrakte Methoden - müssen „public“ sein und in einer abstrakten klasse stehen - müssen vor ihrer Verwendung/Ausgabe überschrieben werden public abstract void methodenname() -> public override void methodenname() Generische Methoden  Methoden, die Platzhalter (Typparameter) für Datentypen besitzen, die erst zur Laufzeit konkretisiert werden - Generische Methoden können Member generischer oder nicht-generischer Klassen sein Instanzmethoden  Ausführung der Methode ist an ein konkretes Objekt gebunden Überladen von Methoden  Zwei Methoden heißen überladen, wenn sie den gleichen Namen besitzen und 1) sich in Anzahl und/oder Typ ihrer Parameter unterscheiden oder 2) wenn sich zwei typgleiche Parameter nur darin unterscheiden, dass der eine als Referenz und der andere als Werteparameter deklariert ist public Mensch (int,string,string) & public Mensch (int, string, string, string) Klassenmethode (statische Methoden)  Bestimmen das Verhalten einer Klasse unabhängig von einem konkreten Objekt static  „objektunabhängige Methoden“

- Methoden die den Zustand von Klassen verändert - Methode existiert ohne Instanz einer Klasse Verdecken von Basisklassenmethoden  Member (Felder, Eigenschaften, Methoden) einer Basisklasse werden durch Member mit dem Zugriffsmodifizierer „new“ in der abgeleiteten Klasse verdeckt Verdeckte Member Member, die mit identischen Namen und Parameterliste sowohl in einer Basisklasse, als auch in einer abgeleiteten Klasse definiert sind Reimplementierung einer Methode in der Unterklasse  Verdeckt die Methode der Oberklasse - Wiederverwendung von Code: es ist keine reimplemtierung der geerbten Daten und Methoden erforderlich - Wenn Auto (subclass) fahren() kann, kann porsche (sublclass) das auch -  Methode muss nicht erneut implementiert werden Parameter  Argument, Variable Frühes Binden (statisches Binden)  Zuweisung von Routinen (Methoden, Operatoren) zu ihren Objekten (Daten) bereits zum Zeitpunkt der Übersetzung vs. Spätes Binden (dynamisches Binden)  Bindung von einer Methode an ein Klassenobjekt erst zur Laufzeit Durch: - Deklaration der Methode in der Basisklasse als virtuell („virtual“) - Überschreiben dieser Methode in der abgeleiteten Klasse („override“)

Anweisungen  Alle Steueranweisungen aus C/C++ auch in C# verfügbar C/C++ C# if (true {…} if-else else if (true) {…} else {…} switch (variable) { case 1: … break; case 2: … break; . switch . default: … break; for for (int i = 1; i < 5; i++) {…} foreach-in foreach (int item in array) {…} while while (true) {…} do.. while do {…} while (true); try-catch-finally try {…} catch (exception e) {…} catch {…} finally {…} Dekonstruktor  Spezielle Funktion einer Klasse, die immer unmittelbar vor dem löschen eines Objektes durch den Garbage Collector startet  Dekonstruktoren einer Basisklasse werden nicht an die abgeleitete Klasse vererbt (implizite Bottom-up-Dekonstruktorenverkettung) - Sobald der Garbage Collector auf ein nicht mehr referenziertes Objekt einer abgeleiteten Klasse stößt, wird zunächst vollständig der Dekonstruktor dieser Klasse und danach erst der Dekonstruktor der Basisklasse ausgeführt

Statische Member  Es gehören nicht einzelne Instanzen, sondern alle Instanzen einer Klasse (Instanzen = Objekt) - Modifizierer: static Statische Member können sein: - Statische Felder (Klassenfelder) - Statische Eigenschaften (Klasseneigenschaften) - Statische Methoden (Klassenmethoden) Klassenfelder/-eigenschaften sind  sind für alle Objekte einer Klasse identisch Instanzfelder/-eigenschaften sind  sind objektspezifisch Events (Ereignisse)  Ein Event ist eine Nachricht, die durch eine Methode ausgelöst wird - Methoden, die nach Auslösung eines Events durch einen Event-Sink (Client) ausgeführt werden, heißen Event-Handler - Event-Variablen werden im Event-Source definiert 1) Event-Source: Klasse, die ein Ereignis auslöst 2) Event-Sink: Klasse, die ein Ereignis verarbeitet (Client) Garbage Collector (GC)  Prozess, der im Hintergrund einer Anwendung abläuft mit der Aufgabe: - Suche nach nicht referenzierten Objekten im Heap und Freigabe des Speicherplatzes wird ausgeführt, wenn a) Anwendung zeitweilig keine Prozessorleistung in Anspruch nimmt oder b) Speicherressourcen für die Anwendung einen Minimalwert unterschreitet Voraussetzung für das Freigeben von Speicher für ein Objekt durch Garbage Collector: 1) Gültigkeitsbereich einer Objektreferenz wird verlassen (Block) 2) Nullzuweisung: objekt – varibable = null; Boxing  Implizite Konvertierung eines Wertetyps in den Typ object durch die .NET-Laufzeitumgebung - Intern wird Speicherpatz im Heap allokiert und der Wert der Wertevariable dort abgelegt (Kopie) - =

Unboxing  Explizite Konvertierung eines Objekttyps in einem Wertetyp -

Wertetyp muss mit dem Typ der Wertevariablen entsprechend Konvertierungsregeln übereinstimmen object 0 = 1; // boxing int i = (int) 0; // unboxing int i = convert.ToInt32(0)

Enum (komplexer Wertetyp)  Ein Enumeration-Typ deklariert eine Reihe von unbekannten Konstanten  Variablen eines Enumeration-Typs können die in der Aufzählungsliste definierten Konstanten-Werte annehmen - Standard: int public class EnumTest { enum Day {Sun,Mon,Tue,Wed,Thu,Fri,Sat}; static void Main() { int x = (int) Day.Sun; int y = (int) Day.Fri; console.writeline(“Sun = {0}”,x); console.writenline(“Fri = {0}”,ý); } Output: Sun = 0, Fri = 5

Vererbung  Beziehung zwischen Klassen, in der eine Klasse Struktur und/oder Verhalten übernimmt, dass in einer anderen Klasse oder in mehreren anderen Klassen definiert wurde  „erbt von“ (public class Hund:Haustier) Einfache Vererbung:  Eine Unterklasse hat nur genau eine Oberklasse (in C# ist nur Einfachverberung möglich!) Oberklasse (Superclass):  Klasse, von der die Unterklasse abgeleitet wurde = superclass = Basisklasse - Jede Oberklasse hat Subklassen (Unterklassen)  Abhängigkeiten Unterklasse (Subclass):  Neu entstandene Klasse nach Vererbung = subclass = abgeleitete Klasse - Eine von einer Basisklasse abgeleitete Klasse erbt alle Member (Felder und Methoden) der Basisklasse - Zusätzlich können weitere Member definiert werden Array  Feld von Objekten gleichen Typs (homogener Container) - Array kann eindimensional oder mehrdimensional sein - Array kann unverzeweigt oder verzweigt sein - Größe des Arrays kann zur Laufzeit festgelegt werden  Arrays sind nicht mehr statisch, sondern dynamisch (≠C) - Von jedem Datentyp bzw. jeder Klasse kann ein Array angelegt werden -  Array vom Typ Klasse, mit Objekt der Klasse Arrayoperator is -> Wahrheit (is..?) - Liefert true, wenn der Ausdruck von dem angegeben Typ ist oder in ihm konvertiert werden kann, sonst false Arrayoperator as  Vergleich - Liefert den typgewandelten Ausdruck, wenn der Ausdruck in den angegebenen Typen konvertiert werden kann, sonst null Verzweigte Felder („Checked Array“)  Array dessen Elemente (in dessen Felder) Arrays sind  verzweigt - Deklaration und Instanziierung können zusammengefasst werden - Elemente verzweigter Arrays sind Verweistypen und werden mit null initialisiert Haustier[ ][ ] zoo = new Haustier [2][ ]; zoo[0] = garten; zoo[1] = aquarium; foreach (Haustier[ ] h in zoo) { Foreach (Haustier[ ] h2 in h) { h2.pflegen(); } }

Objektsystematik (Datentypen)  Alle Datentypen sind von dem elementaren Datentyp abgeleitet -

Wertetypen Alle einfachen Datentypen (außer String und Object)

-

Refernztypen Object und string

-

Nutzerdefinierte Datentypen  Strukturen (struct)  Aufzählungen (enum)

Variablen vom Wertetyp speichern ihre Daten im Stack

-

-

Benutzerdefinierte Datentypen: Arrays (array), Klassen (class), schnittstellen (interface), Delegate (delegate) Variablen vom Referenztyp enthalten Verweise (Zeiger) auf ihre Daten im Heap Werden im Stack oder Heap gespeichert Es existiert keine „Referenzarithmetik“

Polymorphie  „eine Basisklasse, verschiedene spezialisierte Objekte“  Art der Vererbung, wobei Methode/Attribut objektspezifisch angepasst wird - Ermöglicht es, dass mehrere unterschiedliche Methoden den gleichen Namen haben können - Ohne Vererbung wäre Polymorphie nicht möglich Polymorphe Methoden:  Struktur ist gleich, aber unterschiedliche Parameter bzw. Konstruktor Statische Polymorphie:  das Überladen v. Methoden (dieselbe Methode mit unterschiedlichen Parameterlisten bzw. Datentypen) static void Ausgabe (int Zahl); static void Ausgabe (double Zahl); Dynamische Polymorphie:  Das Überschreiben von abstrakten Oberklassen-Membern public override void pflegen () {…} public abstract void pflegen (); public virutal void pflegen (); Kapselung  Durch Datenkapselung können Zugriffsrechte für Variablen, Methoden oder die Klasse selbst genauer definiert werden - Nach außen sind nur die definierten Schnittstellen sichtbar - Eigenschaften die intern bleiben sollen, bleiben verborgen Information Hiding  Ein Objekt versteckt seine Implementierung gegenüber anderen Objekten - Zugriff erfolgt nur über wohldefinierte Schnittstelle (Zugriffsmethoden)  Dadurch können Teile eines Systems modifiziert werden, ohne Einfluss auf andere Teile zu nehmen, solange die Schnittstelle konstant bleiben Schnittstellen (Interfaces)  Durch ein Interface wird eine Eigenschaft bzw. ein Verhalten für eine Klasse definiert  Eigentliche Funktionalität der Schnittstellenmember wird in den Klassen selbst codiert - Schnittstellen beginnen mit einem großen I + Großbuchstaben (IDesign, IAuto, IPflegen) - Schnittstellen enthalten keine Anweisungsblöcke, keine Zugriffsmodifizierer und enthält nur leere Member - Interfaces haben nichts mit Vererbung zutun - Schnittstelle kann mehrere Basisschnittstellen besitzen: Schnittstelle erbt alle Memberdeklaration Schnittstellenimplementierung  Eine Klasse erbt Schnittstellenmember (public class Fahrzeug, IDesignbar)  Schnittstellen können von Klassen implementiert werden - Interfaces stehen ganz oben in der Klasse - Klasse muss alle Member der Schnittstelle implementieren Die von einer Schnittstelle übernommenen Klassenmember: 1) müssen in Name, Parameter und Rückgabetyp mit dem Schnittstellenmember übereinstimmen 2) dürfen nur „public“ implementiert werden 3) können „abstract“ oder „virtual“ sein

Stack  Ist eine „Collection“ nach dem LIFO-Prinzip (Last In First Out) - Eigenschaften der Klasse Stack  Count-Eigenschaft, liest die Anzahl der Elemente, die im Stack enthalten sind Methoden der Klasse Stack - void Push (object Object), fügt an den Anfang des Stack sein Objekt hinzu - object Pop (), entfernt das oberste Objekt des Stacks und gibt es zurück - object Peek (), gilt als oberste Objekt des Stack zurück ohne es zu entfernen - void Clear (), Löscht alle Objekte des Stacks class Program { static void Main(string[] args) { Stack s = new Stack(); s.Push(11); s.Push(22); s.Push(33); foreach (object o in s) Console.Write("{0} ", o); Console.WriteLine(); Console.WriteLine("{0} entfernt", s.Pop()); foreach (object o in s) Console.Write("{0} ", o); Console.WriteLine(); s.Push(44); foreach (object o in s) Console.Write("{0} ", o); Console.WriteLine(); } }...


Similar Free PDFs