Hier mal eine kleine Übersicht über ein paar Sprachelemente der OOP die ich vor kurzem mal zusammengestellt habe. Das sind zwar lange Meter nicht alle Begrifflichkeiten, hoffe aber einigen damit einen kleinen Einblick verschaffen zu können.
Es kann durchaus sein, dass noch ein paar grobe Rechtschreibfehler oder Grammtikböcke vorhanden sind.
1.Klassen
2.Abstrakte Klassen
3.Objekte
4.Eigenschaften
5.Methoden
6.Methoden überladen
7.Methoden überschreiben
8.Ausnahmen (Exceptions)
1.Klassen
– Klassen beherrschen im Gegensatz zu Strukturen Vererbung
– Klassen dienen dazu den Aufbau von Objekten zu beschreiben
– Bauplan für Objekte
– Klassen belegen keinen Speicher
– virtuelle Gebilde
– Klassen sind Schablonen, in denen Methoden und Eigenschaften definiert sind
– Bestehen aus Datenelementen z.B. Variablen, auch Felder genannt und aus Methoden. Die Methoden sind die ausführbaren Einheiten, die Anweisungen und damit die Programmlogik enthalten.
– Anweisungen befinden sich innerhalb von Methoden, und Methoden innerhalb von Klassen
– Klassen sind Baupläne für Objekte
– Klassen können mit den Zugriffsmodifizierern public, internal und abstract versehen werden
– Wird kein Modifizierer angegeben ist die Klasse internal
– Variablen innerhalb einer Klasse werden als Instanzvariablen bezeichnet oder als Felder. Instanzvariablen müssen initialisiert werden. Sie erhalten in diesem Fall einen Standartwert z.B. bei einem int Wert die 0
2.Abstrakte Klassen
Abstrakte Klassen kann man als allgemeine Vorlage ansehen, die als Vorlage für die abgeleiteten Klassen dient. Die Methoden der abstrakten Klasse können in der abgeleiteten Klasse, wenn sie mit virtuell deklariert sind überschrieben werden. Wenn sie mit abstract deklariert sind, müssen sie überschrieben werden, um eine konkrete Klasse zu ergeben. Der Vorteil von abstrakten Klassen und Methoden ist, dass man sozusagen ein Basis hat, die je nach Bedarf in der abgeleiteten Klasse spezialisiert werden kann. D.h. Klassenspezifische Funktionalitäten können hinzugefügt werden.
Ein gutes Beispiel für ein Abstrakte Klasse wäre zum Beispiel wenn ihr eine Datenbankanbindung zu verschiedenen Datenbanken erstellen wollt. Dann erstellt ihr euch eine abstrakte Klasse mit abstrakten Methoden. Eine Methode wäre dann z.B. Datenbankverbindungherstellen (). In den abgeleiteten Klassen Präzisieren wird dann diese Methode d.h. wir überschreiben sie und geben z.B. einmal den Connection String für eine Access Datenbank mit, und in der anderen abgeleiteten Klasse einen ConnectionString für eine SQL Datenbank.
– Es wird sozusagen eine Vorlage erstellt, die dann je nach Anwendungsfall erweitert wird
– Abstrakte Klassen werden mit abstract deklariert
– Eine Abstrakte Klasse muss nicht unbedingt abstrakte Member haben. In diesem Fall soll die Klasse einfach nicht als unmittelbare nutzbare Vorlage dienen
– Von einer abstrakten Klasse lassen sich kein Objekte bilden.
– Bei der Ableitung einer abstrakten Klasse müssen zwingend alle mit abstract definierten Methoden überschrieben werden, um damit eine konkrete Klasse zu erzeugen. Wenn nicht alle abstrakten Methoden überschrieben werden, muss die abgeleitete Klasse auch als abstract gekennzeichnet werden und es können ebenfalls keine Objekte erzeugt werden
– virtuelle Methoden einer Abstrakten Klasse können, aber müssen nicht überschrieben werden
– ist nicht instanziierbar, aber es ist möglich diese zu vererben
– Wenn die abstrakte Klasse vererbt wurde ist es möglich die abstrakten
Methoden darin zu überschreiben
Mit diesen Punkten eignen sich abstrakte Klassen hervorragend, um bereits allgemeingültige Anweisungen aufzunehmen und neben einen Methodengerüst auch schon etwas Füllung zu bieten
Die von einer Abstrakten abgeleiteten Klassen können später mit override ihre speziellen Funktionalitäten hinzufügen.
3.Objekte
– Objekte sind Instanzen von einer Klasse
– Objekte werden aus Vorlagen von Klassen oder Strukturen erstellt
– Objekte verfügen häufig über Methoden und Ereignissen mit denen man Aktionen durchführen kann.
– Objektdaten sind in den Feldern, Eigenschaften und den Ereignissen des Objekts enthalten
– Objekte bilden Gegenstände der realen Welt ab
– Ein Objekt wird mit dem Operator new erzeugt
– Objekte belegen Speicher
– Objekte haben keinen Namen sondern nur deren Referenzen. Bsp: Konto k1 (Referenzvariable) = new Konto();
– Objekte werden nicht durch das Verhalten (Methoden) sondern durch
seine Daten beschrieben, die über Eigenschaften manipuliert werden
4.Eigenschaften
– Eigenschaften sind sozusagen die Get-er und Set-er in Bezug auf die Datenkapselung
– Die Anweisung für den lesenden Zugriff auf die Eigenschaft wird mit dem Schlüsselwort get eingeleitet
– Die Methode zum Schreiben eines Eigenschaftswertes wird mit set- eingeleitet. Auf den zugewiesenen Wert wird über das reservierte Schlüsselwort value zugegriffen
[php]
public int AnzahlMails1
{
get { return AnzahlMails; }
set
{
if (value > 0)
{
AnzahlMails = value;
}
else
{
flag = false;
}
}
}[/php]
– Je nachdem ob die Definition von get oder set weggelassen wird entsteht eine nicht lesbare, oder schreibgeschützte Eigenschaft
– Die reservierten Wörter get und set werden auch als get- und set-Accessor bezeichnet
– Eigenschaften können auch mit static oder virtual deklariert werden.
– Es ist nicht möglich Eigenschaften per ref oder out an Methoden zu übergeben
5.Methoden
– Die Funktionalität einer Anwendung bzw. einer Klasse machen die Methoden bzw. die Anweisungen in der Methode darin aus
– Methoden befinden sich immer innerhalb einer Klasse
– Die Bezeichnung Methode kennzeichnet in C# die Zugehörigkeit zu einer Klasse, einer Struktur oder einem Interface. In anderen Programmiersprachen steht das Wort Methode für Funktionen oder Prozeduren
– Eine Methode sollte immer eine ganz bestimmte Aufgabe erfüllen.Anstatt eine Anwendung mit nur einer großen Methode zu implementieren,in die möglichst viel Funktionalität hineingepackt wird, sollten die Anweisungen in funktional zusammengehörige Blöcke gegliedert werden, die in Methoden verpackt werden. Dadurch wird das Programm besser lesbar und wartbar
-Den Methoden können die Zugriffmodifizierer protected, private, public oder internal vorangestellt werden
6.Methoden überladen
– Häufig werden Methoden benötigt, die gleiche Aufgaben erfüllen, aber unterschiedliche Parameter bzw. Parameterlisten benötigen. Anstatt verschiedene Methoden zu schreiben, ist es möglich Methoden zu überladen. Es werden mehrere Methoden mit den gleichen Namen aber unterschiedlichen Parametern erstellt (Konstruktoren)
[php]
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
//Aufrufe der Methoden samt Parameterübergabe an die Methoden
Textausgeben(25);
Textausgeben(34.234234);
Textausgeben("Hallo");
Console.ReadLine();
}
//Hier sieht man die überladenen Methoden mit den unterschiedlichen Parametern bzw.
Konstruktoren
static void Textausgeben(int x)
{
Console.WriteLine(x + "ist eine ganze Zahl");
}
static void Textausgeben(double x)
{
Console.WriteLine(x + "ist eine Gleitkommazahl");
}
static void Textausgeben(string x)
{
Console.WriteLine(x+ "ist eine Zeichenkette");
}
}
}[/php]
Regeln:
– Der Name muss bei allen Methoden übereinstimmen
– Die Methoden müssen sich in der Anzahl und/oder dem Typ der Parameter unterscheiden
– Der Rückgabetyp wird nicht zur Unterscheidung der Methoden hinzugezogen, da Methoden auch ohne Verarbeitung des Rückgabewertes aufgerufen werden können
7.Methoden überschreiben
– Überschreiben ist ein Polymorhpes Verhalten
– Um dieses Verhalten zu erreichen, werden die Methoden, die zum überschreiben vorgesehen sind, in der Basisklasse mit dem Schlüsselwort virtuell versehen. Beim überschreiben der Methode in der abgeleiteten Klasse (man nennt das auch überlagern) ist der Methode dann das Schlüsselwort override voranzustellen. Damit wird festgelegt, dass beim Aufruf der Methode zur Laufzeit zuerst in der Klasse des betreffenden Objekts nach der entsprechenden Methode gesucht wird
Beispiel:
[php]
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
Person p = new Person();
Mitarbeiter ma = new Mitarbeiter();
AusgabeDaten(p);
AusgabeDaten(ma);
}
static void AusgabeDaten(Person p)
{
p.Ausgabe();
}
public class Person
{
public virtual void Ausgabe()
{
Console.WriteLine("Musterperson");
}
}
public class Mitarbeiter : Person
{
public override void Ausgabe()
{
base.Ausgabe();
Console.WriteLine("1000 Euro");
Console.ReadLine();
}
}
}
}[/php]
8.Ausnahmen Exceptions
– Exception Handling ermöglicht insbesondere die Reaktion auf nicht vorhersehbare Probleme und bietet damit die Möglichkeit robuste und Anwenderfreundliche Anwendungen zu erstellen
– Exceptions sind keine Fehlersituationen, sondern sie kennzeichnen einen Zustand im Programm, auf den in einer vordefinierten Weise reagiert werden soll. Dies können natürlich auch Fehler sein
– Wird eine Exception nicht verarbeitet, wird eine Meldung angezeigt und das Programm wird abgebrochen
– Um Anweisungen, die potenziell eine Exception auslösen könnten abzusichern, wird diese mit dem try-Block umschlossen. Es wird also versucht diese Anweisung auszuführen. Wird eine Exception ausgelöst lässt sich diese im folgenden catch-Block abfangen
– Es gibt eine Klassenhierarchie bei den Exceptions. Die Reihenfolge der Exceptions muss in umgekehrter Reihenfolge in den catch-Blöcken dargestellt werden. Würde beispielsweise bereits der erste catch-Block den Typ Exception verarbeiten, würden alle folgenden catch-Blöcke niemals zur Ausführung kommen. Wird sich nicht an diese Regel gehalten, gibt es eine Fehlermeldung vom Compiler
Vorteile:
– Werden Ausnahmen behandelt beendet sich nicht das Programm nicht
– Es ist möglich induviduell auf die Ausnahmen zu reagieren
– Fehlerbehandlung mit Exceptions ist wesentlich effektiver und übersichtlicher als wenn man jeden Methodenaufruf über einen Fehlercode auszuwerten (Zum Beispiel mit einer if-Abfrage) versucht. Dadurch würde der eigentliche Programmcode stark mit der Fehlerbehandlung vermischt
– Man ist nicht gezwungen Rückgabewerte oder Werte überhaupt auf deren „Richtigkeit“ zu überprüfen.
– In der catch-Anweisung wird in Klammern der Exception-Typ und optional eine Variable übergeben. Auf diese Variable kann lesend zugegriffen werden, um sich die Exception z.B. als Text ausgeben zu lassen
Beispiel unbehandelte Exception:
– Dadurch, dass in diesem Fall die Exception nicht behandelt wird, würde es hier, wenn der Anwender das Programm normal startet, also nicht im Debug-Modus zu einer FileNotFound Exception kommen.
– Weiterhin würd sich das Programm schließen bzw. es würde beendet werden
[php]
namespace Bsp.Unbehandelte_Exception
{
class Program
{
static void Main(string[] args)
{
string Dateiname = "Die Datei gibt es nicht";
}
}
}[/php]
Beispiel behandelte Exception:
[php][/php]
namespace Bsp.Behandelte_Exception
{
class Program
{
static void Main(string[] args)
{
string Dateiname = "Die Datei gibt es nicht";
try
{
FileStream fs = new FileStream(Dateiname, FileMode.Open);
}
catch(FileNotFoundException fnfEx)
{
Console.WriteLine("Die Datei {0} konnte nicht geöffnet" + "werden", Dateiname);
Console.ReadLine();
}
catch (Exception)
{
Console.WriteLine("Alle anderen Exeptions behandeln");
}
}
}
}/[php][/php]
*OOP = Objektorientierte Programmierung
– Dadurch das wir in diesem Fall die Exception behandelt haben würde das Programm weiterlaufen
Quellen : Zu einem Teil Fachbücher, zum anderen Teil von mir selber irgendwie zusammengefuddlet…
Quelle 2 : http://unique-crew.biz/showthread.php?t=6808 Copyright by COnnecTion