Klassen, Unterklassen Vererbung
- VB.NET
- .NET (FX) 4.5–4.8
Sie verwenden einen veralteten Browser (%browser%) mit Sicherheitsschwachstellen und können nicht alle Funktionen dieser Webseite nutzen.
Hier erfahren Sie, wie einfach Sie Ihren Browser aktualisieren können.
Hier erfahren Sie, wie einfach Sie Ihren Browser aktualisieren können.
Es gibt 120 Antworten in diesem Thema. Der letzte Beitrag () ist von Amelie.
-
-
-
Langsam. Lass mal bitte die Instanziierungen (diese
As New
-Zeilen) weg. Die kommen später und haben in den Klassen erstmal überhaupt nix verloren. In den Klassen geschrieben, bedeutet das nämlich automatisch eine Hat-Beziehung. UndMensch
hat "kein"Mann
oderFrau
, Genauso hatHund
keinenDackel
. Also: Lösch die gezeigten Zeilen, in denenAs New
steht.
Schau Dir nochmal Zeile#8 an. Das mag zwar erstmal prinzipell stimmen, aber damit sagst Du, dass ein Säugetiewr ein Haar hat. Das muss dann natürlich noch abgewandelt werden, aber ich will EdR nicht in seiner Erklärung vorgreifen. Behalt es aber erstmal im Hinterkopf.
Das mit Rüde und Hündin ist wie bei Mann und Frau. Es sind also Spezialisierungen von …?Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.
Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln. -
-
Das mit den Säugetieren und Haaren hatte ich ja schon erwähnt aber OK mache ich das dann so.
Bestimmt wieder falsch.
VB.NET-Quellcode
- Public Class Wirbeltier
- '.....
- End Class
- Public Class Säugetier
- Inherits Wirbeltier
- Friend Lunge As Lunge
- End Class
- Public Class Mensch
- Inherits Säugetier
- Friend Haar As Haar
- End Class
- Public Class Frau
- Inherits Mensch
- Friend Gebärmutter As Gebärmutter
- End Class
- Public Class Mann
- Inherits Mensch
- End Class
- Public Class Hund
- Inherits Säugetier
- Friend Haar As Haar
- End Class
EDIT: 12:42
Tja Hund und Mensch ... Keine Ahnung wie man das so noch hier unterscheiden soll...
Im Moment erscheint mir das alles soooooooooooooooo viel an Klassen....Asperger Autistin. Brauche immer etwas um gewisse Sachen zu verstehen.Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Amelie“ ()
-
Wird aber besser. Guck deine Klasse
Mann
hat immer noch einen MemberMann
. Also sich selbst ???
BeimHund
undMensch
hast du es richtig.
Aber irgendwie sieht die KlasseHund
jetzt genauso aus wie die KlasseMensch
, da sollte uns also noch ein Unterschied einfallen, damit die Nutzung beider Klassen gerechtfertigt ist, (doppelter Code und so..)
Ansonsten ists halt noch nicht vollständig
-
Gonger96 schrieb:
Warum wird hier eigentlich dauernd Friend benutzt? Das ist für deine Anwendungen wirklich irrelevantFriend
. Wie es andere machen, ist mir pupe. Bei meinen DLLs natürlichPublic
, aber meine Endprogramme sollen keine API zur Verfügung stellen, daher keinPublic
, sondernFriend
. Ist das Deiner Meinung nach für Amlie in ihrer jetzigen Lernphase irrelevant oder siehst Du generellFriend
als irrelevant?Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.
Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln. -
Na angenommen man könnte Mensch und Hund wirklich nicht weiter unterscheiden, dann wird halt eine Klasse davon gestrichen. Brauchst dann nicht.
Man könnte aber
Oder wie ich es tuen würde wenn man es abstrakt versteht, aber da kommen mir wieder die Tierschützer in die Quere.
Das sind immer so viele Klassen, nur meist nicht selbst geschrieben. Jedes Objekt hat irgendwo eine Klasse hinter sich stehen.
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Haudruferzappeltnoch“ ()
-
Wenn hier gerade die Grundsätze der Vererbung besprochen werden, finde ich es eher verwirrend.
In einer Anwendung (exe) benutze ich public. Friend ist eher sinnvoll bei Bibliotheken für etwaige Helferklassen oder Funktion die zwar in der Assembly genutzt werden, in der öffentlichen Schnittstelle aber nichts zu suchen haben.
Ich würde es wirklich erstmal bei public, protected und private belassen. Außerdem ist der Name nicht so toll. Das C# internal macht genau das was es heißt: Die Funktion ist Assembly-intern. Friend verwechsel ich immer mit C++ friend, was wieder etwas vollkommen anderes ist. -
@Haudruferzappeltnoch
Naja sogesehen passt das auch nicht. Hunde und andere Tiere / Säugetiere haben auch eine Sprache, eben nur eine die der Mensch dann so nicht versteht.
Das erwähnte ich gestern schon.
Ich dachte erst an Arme aber das passt auch nicht oder aufrechter Gang... Schwer etwas zu finden.
@Gonger96
Ich verstehe was du mir sagen möchtest. Danke. Da ich aber von C++ / C# nun mal NULL Ahnung habe, und ich in meinen kleinen Projekten mit Friend und Private gut zurechtkomme...
Als ich angefangen habe, da habe ich alles auf Public gemacht, bis mich @VaporiZed darauf aufmerksam machte, das so etwas auch mal "gefährlich" sein kann usw...
Derzeit komme ich mit den beiden anderen am besten klar.Asperger Autistin. Brauche immer etwas um gewisse Sachen zu verstehen. -
Haudruferzappeltnoch schrieb:
Mensch und Hund wirklich nicht weiter unterscheiden
Natürlich kann man nachträglich alles mögliche noch hinzufügen: (Unterscheidungs-)Merkmale so gut wie vererbende und erbende Entitäten.
Aber ich würde vorschlagen, bei den gegebenen Begriffen zu bleiben, und nicht zu versuchen, eine vollständige Kladistik zu erstellen.
Ich bin mit was anderen nicht zufrieden:
Erstens erben Hund und Mensch ihre Behaarung vom Säugetier.
Zweitens hat ein Säugetier viele Haare.
Es liegt also eine Hat-Beziehung vom BeziehungTyp3 vor. Das modelliert man durch eine Auflistung, zB so:
Ansonsten, für die Intention des Spiels: Vererbung und Komposition zu verstehen, ist es egal, ob Friend oder Public deklariert wird.
Tatsächlich gibts noch ca 10 weitere Möglichkeiten, wie man deklarieren könnte, aber lassen wirs doch erstmal so wies ist - ist doch nicht falsch.
Also die Aufgabe ist noch nicht erledigt.
Und sie ist nur erledigt, wenn auch alle vorgegebenen Begriffe richtig eingeordnet sind.
Also nur Teile des Listings zu posten reicht nicht, weil die Klassen beziehen sich aufeinander, und wenn was fehlt wird es quasi sinnlos (und zB der Compiler kompilierts nicht).
-
Langsam. Ich komm eh schon jetzt ducheinander!
Erstens erben Hund und Mensch ihre Behaarung vom Säugetier.
Also doch wieder einzeln machen?
Friend Haare As List(Of Haar)
ist das nicht nur eine spezielle Art von:Friend Haar As Haar
Asperger Autistin. Brauche immer etwas um gewisse Sachen zu verstehen. -
Amelie schrieb:
Erstens erben Hund und Mensch ihre Behaarung vom Säugetier.
Also doch wieder einzeln machen?
Aber so oder so: Ist doch sonnenklar, was für das Klassen-System daraus folgt, wenn gesagt wird:Hund und Mensch erben ihre Behaarung vom Säugetier.
Amelie schrieb:
Friend Haare As List(Of Haar)
ist das nicht nur eine spezielle Art von:Friend Haar As Haar
Mit "Haar" meinte ich "einzelnes Haar", und nicht Haar im Sinne von "Kopfbehaarung beim Menschen".
Und von den einzelnen Haaren hat ein Säugetier numa viele. -
Also mit den Haaren weis ich jetzt echt nicht. Bei Hunden Katzen etc könnte man ja auch "Fell as Listof..." machen .. Keine Ahnung.
VB.NET-Quellcode
- Namespace Kladistik
- #If False Then
- Mensch, Hund, Wirbeltier, Säugetier, Mann, Frau, Fisch
- Haar, Sprache, Schwanzflosse, Flosse, Gebärmutter, Lunge, Ausweis
- #End If
- Public Class Wirbeltier
- End Class ' Wirbeltier
- Public Class Säugetier
- Inherits Wirbeltier
- Friend Lunge As Lunge
- Friend Haare As List(Of Haar)
- End Class ' Säugetier
- Public Class Fisch
- Inherits Wirbeltier
- Friend Schwanzflosse As Schwanzflosse
- Friend Flossen As List(Of Flosse)
- End Class ' Fisch
- Public Class Hund
- Inherits Säugetier
- End Class ' Hund
- Public Class Mensch
- Inherits Säugetier
- Friend Sprache As Sprache
- Friend Ausweis As Ausweis
- End Class ' Mensch
- Public Class Mann
- Inherits Mensch
- End Class ' Mann
- Public Class Frau
- Inherits Mensch
- Friend Gebärmutter As Gebärmutter
- End Class ' Frau
- Public Class Lunge
- End Class
- Public Class Flosse
- End Class
- Public Class Schwanzflosse
- End Class
- Public Class Haar
- End Class
- Public Class Sprache
- End Class
- Public Class Gebärmutter
- End Class
- Public Class Ausweis
- End Class
- End Namespace ' Kladistik
EDIT 22:56Asperger Autistin. Brauche immer etwas um gewisse Sachen zu verstehen.Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Amelie“ ()
-
Fell = Ansammlung von Haaren -> ein Fell ist per Definition = viele Haare, von daher braucht ein (Fell)Tier nur ein Fell.
Haar = (normalerweise) ein einzelnes Haar; ein Mensch hat nach der Definition viele Haare, von daher braucht die Klasse eine Sammlung von Haaren; oder alternativ nur eine Haarpracht - das entscheidest Du selbst. Es muss nur schlüssig sein.Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.
Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln. -
VaporiZed schrieb:
Es muss nur schlüssig sein.
Daraus ergibt sich klar, in welcher Klasse dieList(Of Haar)
anzusiedeln ist.
Und wie ebenfalls gesagt: Solange das Klassensystem nichtmal die bislang gegebenen Begriffe korrekt abbildet, lass uns nicht mit Einführung weiterer Begriffen verzetteln.
Erweitern kann man immer noch, wenn das gegebene Material erstmal stimmig ist.
(obwohl "Haarpracht" und "Fell" da nicht meine Favoriten wären)
-
@ErfinderDesRades
Habe in meinem letzen Beitrag den Code geändert. Hoffe das passt so.Asperger Autistin. Brauche immer etwas um gewisse Sachen zu verstehen. -
Jo, ich finde, so passts, und nun fällt mir nix mehr rechtes noch zu sagen ein.
Vlt. Zusammenfassung: OOP orientiert sich an der realen Welt, und erschafft ein Modell von Wirklichkeit.
Also Objekte der Wirklichkeit werden miteinander in Beziehung gesetzt.
Es gibt zwei grundlegende Arten von Beziehung
Ist-Beziehung - Vererbung
Hat-Beziehung - Komposition
Die Hat-Beziehung ist nochmal unterteilbar in "Hat genau ein" und "Hat viele"
Es sind ganz einfach verständliche Sätze, mit denen eine Beziehung ausgedrückt wird:
A ist B
A hat B
A hat viele B
Mensch ist Säugetier
Mensch hat Sprache
Säugetier hat viele Haare
Sowas kann man 1:1 in der Code-Architektur abbilden. Diese Abbildung von einfachen Sätzen in Code ist auch umkehrbar. Wenn ich Code sehe (oder im ObjectBrowser angucke), dann kann ich die entsprechenden Sätze bilden und erkennen, ob die Architektur stimmig ist oder nicht.
Jo, dassis glaub der Kern von OOP. Naja, einer der Kerne, es gibt noch weitere ganz grundlegende Konzepte. Oder vlt. ist das - Vererbung und Komposition - der innerste Kern, der aller-innerste, und weitere Konzepte sind unbedingt auch zum Kern zu zählen, nur vielleicht ein ganz klein wenig weniger innerlich.
Naja - da fängt ganz schnell das Streiten wieder an, und die Leuts kommen mit zig weiteren Dingen an, die iwie eingeordnet werden müssen, um der Konfusion zu entgehen.
Auch zu sagen bleibt noch, dass selbstverfasster Code nur ganz selten Vererbung implementieren muss. Fast immer ist die Architektur über Komposition aufzubauen, alsoA hat B
liegt vor, oderA hat viele B
.
(Das kennste ja noch aus deim Ampel-Programm)
-
@ErfinderDesRades @VaporiZed @Haudruferzappeltnoch
OK. Soweit danke erstmal für deine Mühe und Geduld ( Dank auch an die anderen die sich hier beteiligt haben ) mir das etwas verständlicher zu machen.
Ich nehme nun mal ein altes Projekt von mir, definiere die Klasse(n) um zu sehen ob das alles so passt.
EDIT 09:00
Bevor ich anfange eine Frage.
Auf der Form habe ich z.B. 3 Buttons. In der Programverarbeitung sollen diese Buttons dann eine Boolean-Variable ändern.
Wie mache ich das dann in der Klasse richtig?
Asperger Autistin. Brauche immer etwas um gewisse Sachen zu verstehen.Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Amelie“ ()
-
Amelie schrieb:
Wie mache ich das dann in der Klasse richtig?
Da sind wir wieder beim Punkt. In welcher Klasse? Wie ist der Name? Gilt eine hat Beziehung: Klasse hat Booleans? Das ist quasi dein Design jetzt, keine Tiere mehr.
Die Form, die du hast ist eine Klasse und die hatControl
s, zu den Controls zählen z.B. auch dieButton
s (Vererbung), die bleiben da besser auch.
Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Haudruferzappeltnoch“ ()
-
Tags
-
Ähnliche Themen
-
Eine Grundlegende Frage zur Polymorphie.
ruediger_006 - - Sonstige Problemstellungen
-
8 Benutzer haben hier geschrieben
- Amelie (51)
- VaporiZed (20)
- RodFromGermany (16)
- Haudruferzappeltnoch (16)
- ErfinderDesRades (13)
- oobdoo (2)
- Gonger96 (2)
- petaod (1)