Wie man vermeidet, dass Oberklassenmethoden durch Unterklasse in Ziel überschrieben werden - c

8

Wie in Java:

Eine finale -Klasse kann nicht unterklassifiziert werden. Dies geschieht aus Gründen der Sicherheit und Effizienz . Dementsprechend sind viele Klassen der Java-Standardbibliotheken endgültig, zum Beispiel java.lang.System und java.lang.String. Alle Methoden in einer finalen Klasse sind implizit endgültig.

Wie kann ich dieses Verhalten in objective-c erreichen?

    
Manjunath 19.05.2010, 09:32
quelle

3 Antworten

10

Sie können nicht. Effizienz kommt nicht dazu. Wenn Sie sich so um Sicherheit kümmern, verwenden Sie nicht objective-c. Es wird immer eine Möglichkeit geben, alle Maßnahmen, die Sie ergreifen, zu umgehen.

    
hooleyhoop 19.05.2010, 09:38
quelle
6

Wie schon mehrmals gesagt wurde, können Sie nicht.

Wenn Sie jedoch eine Bibliothek erstellen (was der einzige Fall ist, in dem ich dies für relevant halten könnte), gibt es ein paar Schritte, die Sie ausführen können. Naja, wirklich.

Schreiben Sie in der Dokumentation der Klasse Folgendes: "Diese Klasse ist nicht für Unterklassen vorgesehen." (ref. NSIndexSet ) oder " Überschreibe diese Methode nicht. " (ref. +[NSApplication sharedApplication] .

Als Erklärung sei darauf hingewiesen, dass (fast) alles, was in Obj-C passiert und das es von C trennt, zur Laufzeit geschieht und die Laufzeit sozusagen "Right There" ist. Jedes Stück Code kann die Laufzeit in ihrer Freizeit inspizieren, mutieren oder pervertieren, was Obj-C zu einer furchtbar mächtigen Sprache macht; vor allem in Bezug auf seine "Meta-Sprache" Struktur.

    
Williham Totland 19.05.2010 10:14
quelle
4

Es gibt kein endgültiges Äquivalent in Ziel-c. Es gibt dieselben Muster, die eine gute Alternative sein könnten, sie geben Ihnen bessere Trennung, aber weder Leistung noch Sicherheit:

  1. Wenn nur bestimmte Methoden überschrieben werden sollen, verwenden Sie Delegat Muster könnte eine bessere Wahl sein.
  2. Wenn Sie überhaupt keine Unterklassen erstellen möchten, können Sie die abstrakte Fabrik Muster. Deklarieren Sie eine öffentliche Schnittstelle + Factory-Methoden, und verbergen Sie die konkreten Implementierungsklassen.
mfazekas 19.05.2010 10:12
quelle