Visual C# 2012 Grundkurs

Abstrakte Klassen

Testen Sie unsere 1985 Kurse

10 Tage kostenlos!

Jetzt testen Alle Abonnements anzeigen
Der Zweck von abstrakten Basisklassen in C# besteht darin, andere Klassen von diesen Basisklassen ableiten zu können.

Transkript

Dieser Abschnitt widmet sich den abstrakten Basis-Klassen in C#. Um das zu illustrieren, möchte ich mal ein kleines Klassensystem schreiben. Ich habe mal eine Klasse "Mitarbeiter", soll also Mitarbeiter abbilden, die aus einer Firma sind. Ich habe bestimmte Felder hier, die für solche Klassen typisch sind und vielleicht eine Methode noch, die also ein Mitarbeiter-Objekt auf seine typische Art und Weise erledigt. Von dieser Klasse "Mitarbeiter" kann ich jetzt eine weitere Klasse ableiten. Ich habe  deswegen eine Ableitung, weil ein Manager die Arbeit auf eine andere Weise tut wie ein Mitarbeiter. Der Manager hat also ein ganz klar anderes Verhalten als der Mitarbeiter. Aber er kann vom Mitarbeiter Einiges an Logik erben, die eben für beide Klassen gleichermaßen gilt. Das will ich auch mal skizzieren, indem ich hier eine Adresse erfasse. Dann könnte ich jetzt hier ein Property schreiben. Das berechnet mir aus der Postleitzahl das Bundesland. Property hat also einen Getter, und dann könnte man so was machen wie ––Die Postleitzahl ist ja ein String. Für Strings gibt es diese Methode "StartsWith". Da könnte ich jetzt z.B. sagen, wenn das Bundesland mit der 8 beginnt, dann sind wir in Bayern. Entsprechend für die anderen Bundesländer – also die 7 z.B., das wäre jetzt Baden-Württemberg. Und ich möchte es jetzt einfach mal vereinfachen. In Bayern würde man das sowieso so machen, dass alle anderen Ostpreußen sind. Schreiben Sie aber bitte nie für einen Kunden solchen Code. Aber für dieses Beispiel tut's. Also, die Klasse "Mitarbeiter" implementiert diese Logik und die Klasse "Manager" erbt diese Logik. Alles wunderschön. Jetzt möchten wir das System aber noch weiter erweitern. Wir möchten eine Kundenverwaltung mit dazunehmen. Also schreiben wir hier eine Klasse "Kunde". Auch ein Kunde hat ja einen Vornamen und einen Nachnamen und die Problematik mit der Adresse ist im Grunde genommen auch die gleiche. Ich kann aber jetzt die Klasse "Kunde" ja schlecht von "Mitarbeiter" ableiten, weil damit würde ich Dinge erben, z.B. so Geschichten wie das Gehalt oder den Bonus oder was auch immer, was bei einem Kunden einfach nichts zu suchen hat. Den Code einfach zu duplizieren, das wäre die noch schlechtere Idee. Was wir also brauchen, das ist eine gemeinsame Basisklasse, die die Kunden genauso wie die Mitarbeiter benutzen können. Diese Klasse möchte ich hier mal anlegen. Die nenne ich jetzt mal "Person". Diese Klasse "Person" kann jetzt all dieses Zeug hier übernehmen. Das verschiebe ich also per Copy & Paste zur Personenklasse rüber. Der Vorgang, den ich hier vornehme, der heißt im Übrigen in der Fachsprache "Refacturing". Die Funktionalität bleibt die gleiche, aber ich ändere die Struktur, damit sie meinen neuen Anforderungen besser gerecht wird. Jetzt kann ich den Kunden von "Person" ableiten und ebenso den Mitarbeiter von "Person". Und schon haben wir wieder alles beim Besten. Jetzt kann ich hier weitermachen auf der Basis dessen, was ich von "Person" geerbt habe. Hier irgendwelche Funktionialitäten hinzufügen wie z.B."Bestellwesen" oder was auch immer was Kunden so ausmacht im System. So, das Ganze hat aber einen kleinen Nachteil, so wie ich es jetzt codiert habe. Ich habe diese Klasse "Person". Niemand hindert uns daran, von dieser Klasse "Person" ein Objekt anzulegen. Es ist zwar schön, aber es macht eigentlich überhaupt gar keinen Sinn. Die Klasse "Person" hat nämlich kein eigenständiges Verhalten, das es in irgendeiner Weise nötig machen würde, Instanzen von dieser Klasse anzulegen. Sie dient ja im Grunde genommen nur als Basis-Klasse für alle weiteren Klassen, damit sie eben dieses gemeinsame Verhalten erben können. Solche Klassen, die nur als Basis-Klassen für andere Klassen dienen, die kann man als "abstrakt" markieren. Dafür ist dieses Schlüsselwort "Abstract" da und das sagt: "OK, das ist eine Klasse, die kann man nicht instanzieren, von dieser Klasse kann ich keine Objekte anlegen, diese Klasse dient nur als Basis-Klasse für andere Klassen." Der Compiler erlaubt es jetzt nicht, hier unten diese Instanz anzulegen. Das ist genau das, was wir wollen. Wir wollen eine Klasse, die man eben nicht instanzieren kann. Also muss jemand, der diesen Code geschrieben hat, den Code an der Stelle ändern, jetzt einfach zusehen, dass er eine Ableitung der Klasse für seine Arbeit bekommt. So, das war es so weit zu dem Konzept der abstrakten Basis-Klassen.

Visual C# 2012 Grundkurs

Schreiben Sie eigene Programme in C# und lernen Sie dazu alle Schlüsselwörter und die meisten Konstrukte kennen, um sicher mit dieser Programmierspreche umzugehen.

7 Std. 1 min (44 Videos)
Derzeit sind keine Feedbacks vorhanden...
 

Dieser Online-Kurs ist als Download und als Streaming-Video verfügbar. Die gute Nachricht: Sie müssen sich nicht entscheiden - sobald Sie das Training erwerben, erhalten Sie Zugang zu beiden Optionen!

Der Download ermöglicht Ihnen die Offline-Nutzung des Trainings und bietet die Vorteile einer benutzerfreundlichen Abspielumgebung. Wenn Sie an verschiedenen Computern arbeiten, oder nicht den ganzen Kurs auf einmal herunterladen möchten, loggen Sie sich auf dieser Seite ein, um alle Videos des Trainings als Streaming-Video anzusehen.

Wir hoffen, dass Sie viel Freude und Erfolg mit diesem Video-Training haben werden. Falls Sie irgendwelche Fragen haben, zögern Sie nicht uns zu kontaktieren!