Erben von mehreren Klassen

  • Erben von mehreren Klassen

    Hallo Leute,

    ich bin Neuling in Objectiv C und wollte mal Fragen, ob es möglich ist, dass ich mit meiner eigenen Klasse von mehreren Objekten erben kann.

    Also das meine Klasse z.B. gleichzeitig von der Klasse UIButton und einer anderen selbstgeschriebenen oder vorgefertigten Klasse erben kann.

    Falls das nicht gehen sollte, könntet ihr mir bitte einen Tipp geben, wie ich das Problem lösen könnte, um die "Vorlagen" beider Klassen zu verwenden (erst von der einen, dann von der anderen erben?).

    Vielen Dank im Vorraus

    Uwo
  • uwoan schrieb:

    ich bin Neuling in Objectiv C und wollte mal Fragen, ob es möglich ist, dass ich mit meiner eigenen Klasse von mehreren Objekten erben kann.

    Von Objekten kann eine Klasse niemals erben.

    uwoan schrieb:

    Falls das nicht gehen sollte, könntet ihr mir bitte einen Tipp geben, wie ich das Problem lösen könnte, um die "Vorlagen" beider Klassen zu verwenden (erst von der einen, dann von der anderen erben?).

    Delegating: Da in Cocoa das eins der wesentlichen Entwurfsmuster ist, solltest Du Dich lieber damit erstmal beschäftigen.

    wolf_10de schrieb:

    Mehrfach-Vererbung gibts "nicht"

    Mehrfaches Vererben geht in den meisten objekt-orientierten Sprachen - mehrfaches Erben hingegen nicht ;)
    „Meine Komplikation hatte eine Komplikation.“
  • uwoan schrieb:

    ich bin Neuling in Objectiv C und wollte mal Fragen, ob es möglich ist, dass ich mit meiner eigenen Klasse von mehreren Objekten erben kann.
    Also das meine Klasse z.B. gleichzeitig von der Klasse UIButton und einer anderen selbstgeschriebenen oder vorgefertigten Klasse erben kann.

    Das geht in Objective-C nicht.

    uwoan schrieb:

    Falls das nicht gehen sollte, könntet ihr mir bitte einen Tipp geben, wie ich das Problem lösen könnte, um die "Vorlagen" beider Klassen zu verwenden (erst von der einen, dann von der anderen erben?).

    Deine Klasse kann auch nicht nacheinander von zwei unterschiedlichen Klassen erben. ;)

    Du kannst aber beispielsweise von deiner einen selbst erstellten Klasse erben und UIButton über eine Kategorie mit den Methoden erweitern, die du für diesen Spezialfall brauchst.

    Mich würde auch interessieren, wofür du das brauchst. Ich habe es bis jetzt nicht benötigt.
    «Applejack» "Don't you use your fancy mathematics to muddle the issue!"

    Iä-86! Iä-64! Awavauatsh fthagn!

    kmr schrieb:

    Ach, Du bist auch so ein leichtgläubiger Zeitgenosse, der alles glaubt, was irgendwelche Typen vor sich hin brabbeln. :-P
  • zerm schrieb:

    macmoonshine schrieb:

    Mehrfaches Vererben geht in den meisten objekt-orientierten Sprachen - mehrfaches Erben hingegen nicht

    Mein C++ kann das :P
    Was nicht heisst, dass man es einfach so benutzen sollte....

    Er sagte ja auch objekt-orientierte Sprachen.
    Es hat noch nie etwas gefunzt. To tear down the Wall would be a Werror!
    25.06.2016: [Swift] gehört zu meinen *Favorite Tags* auf SO. In welcher Bedeutung von "favorite"?
  • @OP

    Neben der bereits genannten Möglichkeit des Delegating (muss aber die Ausgangsklasse anbieten) ist noch daran zu denken, dass du Instanzen der Ausgangsklassen als Member der vereinigenden Klasse nimmst und dann mit Forwarding arbeitest. Außerdem sind – je nach Problemstellung – Protokolle zu bedenken. Mehrere Protokolle kann nämlich eine Klasse implementieren.
    Es hat noch nie etwas gefunzt. To tear down the Wall would be a Werror!
    25.06.2016: [Swift] gehört zu meinen *Favorite Tags* auf SO. In welcher Bedeutung von "favorite"?
  • Amin Negm-Awad schrieb:

    zerm schrieb:

    macmoonshine schrieb:

    Mehrfaches Vererben geht in den meisten objekt-orientierten Sprachen - mehrfaches Erben hingegen nicht

    Mein C++ kann das :P
    Was nicht heisst, dass man es einfach so benutzen sollte....

    Er sagte ja auch objekt-orientierte Sprachen.

    Objektorientiert, objektbasiert... ist doch irgendwo dasselbe: die Sprachen haben Objekte.

    Soweit ich weiß geht mehrfaches Vererben beispielsweise in JavaScript nicht. ^^
    «Applejack» "Don't you use your fancy mathematics to muddle the issue!"

    Iä-86! Iä-64! Awavauatsh fthagn!

    kmr schrieb:

    Ach, Du bist auch so ein leichtgläubiger Zeitgenosse, der alles glaubt, was irgendwelche Typen vor sich hin brabbeln. :-P
  • macmoonshine schrieb:

    uwoan schrieb:

    ich bin Neuling in Objectiv C und wollte mal Fragen, ob es möglich ist, dass ich mit meiner eigenen Klasse von mehreren Objekten erben kann.

    Von Objekten kann eine Klasse niemals erben.

    Doch doch, das geht. Wird auch von der Runtime afaik ziemlich rege genutzt.
    objc_allocateClassPair() und objc_registerClassPair() können vom Klassenobjekt direkt erben. (a.k.a. 'zur Laufzeit')

    "Von (Klassen)Objekten kann ein(e) Klasse(nobjekt) niemals erben." ist also falsch. ;)

    "Von Klassen- und Instanzobjekten kann eine im Code geschriebene Klasse niemals erben." ist hingegen korrekt.
    «Applejack» "Don't you use your fancy mathematics to muddle the issue!"

    Iä-86! Iä-64! Awavauatsh fthagn!

    kmr schrieb:

    Ach, Du bist auch so ein leichtgläubiger Zeitgenosse, der alles glaubt, was irgendwelche Typen vor sich hin brabbeln. :-P
  • zerm schrieb:

    Amin Negm-Awad schrieb:

    Er sagte ja auch objekt-orientierte Sprachen.

    Haa.... ich sag mal nix darauf :) […]

    *g* Musst du ja auch nicht. Alan Kay hat ja schon alles gesagt:
    „I invented the term Object-Oriented, and I can tell you I did not have C++ in mind.“
    de.wikipedia.org/wiki/Alan_Kay#Zitate
    Es hat noch nie etwas gefunzt. To tear down the Wall would be a Werror!
    25.06.2016: [Swift] gehört zu meinen *Favorite Tags* auf SO. In welcher Bedeutung von "favorite"?
  • Lucas de Vil schrieb:

    "Von (Klassen)Objekten kann ein(e) Klasse(nobjekt) niemals erben." ist also falsch.

    Das habe ich auch nicht geschrieben.

    Lucas de Vil schrieb:

    Doch doch, das geht. Wird auch von der Runtime afaik ziemlich rege genutzt.
    objc_allocateClassPair() und objc_registerClassPair() können vom Klassenobjekt direkt erben. (a.k.a. 'zur Laufzeit')

    Nein, falsch: Mit diesen Objekten werden zur Laufzeit neue Klassen erzeugt. Die neu erzeugte Klasse erbt aber die Eigenschaften ihrer Oberklasse. Sie erbt nicht die Eigenschaften ihres Oberklassenobjekts.
    „Meine Komplikation hatte eine Komplikation.“
  • macmoonshine schrieb:

    Lucas de Vil schrieb:

    Soweit ich weiß geht mehrfaches Vererben beispielsweise in JavaScript nicht.

    In JavaScript kann jede Klasse maximal eine Unterklasse haben? Das ist mir neu. ;)

    In JavaScript (ohne Frameworks) gibt es keine Klassen, also auch keine Vererbung. :P
    Und selbst die 'Klassen' in beispielsweise cappuccino sind klassenlose Objekte.

    Da Prototyping ja angeblich keine Form der Vererbung und Klassen keine Form des Prototypings sein sollen, gibt es in JavaScript selbst keine Vererbung. ;)
    Keine Vererbung bedeutet logischerweise auch: keine Mehrfachvererbung.

    macmoonshine schrieb:

    Nein, falsch: Mit diesen Objekten werden zur Laufzeit neue Klassen erzeugt. Die neu erzeugte Klasse erbt aber die Eigenschaften ihrer Oberklasse. Sie erbt nicht die Eigenschaften ihres Oberklassenobjekts.

    Dann kann eine Klasse also doch von (Klassen)Objekten erben? 8|
    «Applejack» "Don't you use your fancy mathematics to muddle the issue!"

    Iä-86! Iä-64! Awavauatsh fthagn!

    kmr schrieb:

    Ach, Du bist auch so ein leichtgläubiger Zeitgenosse, der alles glaubt, was irgendwelche Typen vor sich hin brabbeln. :-P
  • zerm schrieb:

    Lucas de Vil schrieb:

    Soweit ich weiß geht mehrfaches Vererben beispielsweise in JavaScript nicht.

    JavaScript ist mir zu schrill, aber sowohl meine Erinnerung, wie auch crockford.com/javascript/inheritance.html behaupten, dass es geht.

    Dein Link behauptet aber auch
    I have been writing JavaScript for 8 years now, and I have never once found need to use an uber function. The super idea is fairly important in the classical pattern, but it appears to be unnecessary in the prototypal and functional patterns. I now see my early attempts to support the classical model in JavaScript as a mistake.
    «Applejack» "Don't you use your fancy mathematics to muddle the issue!"

    Iä-86! Iä-64! Awavauatsh fthagn!

    kmr schrieb:

    Ach, Du bist auch so ein leichtgläubiger Zeitgenosse, der alles glaubt, was irgendwelche Typen vor sich hin brabbeln. :-P
  • Ich dachte, [someObject class] gibt das dazugehörige Klassenobjekt zurück.
    Da les ich mal nach.
    Ha, ich hatte recht.
    class
    Returns the class object for the receiver’s class. (required)
    - (Class)class
    Return Value
    The class object for the receiver’s class.
    «Applejack» "Don't you use your fancy mathematics to muddle the issue!"

    Iä-86! Iä-64! Awavauatsh fthagn!

    kmr schrieb:

    Ach, Du bist auch so ein leichtgläubiger Zeitgenosse, der alles glaubt, was irgendwelche Typen vor sich hin brabbeln. :-P