Wie es in the article, sagt, es ist die Notwendigkeit die Super-Methode aufzurufen, die die Antipattern ist, das heißt der Superklasse „erwartet“ die Methode zu überschreiben die machen Funktionalität vollständig - aber ohne explizite Erwartung. Und es erwartet auch, dass Sie die Super-Implementierung aufrufen. Beide werden benötigt, damit das Programm funktioniert.
Dies ist ein Antipattern, weil die Absicht des Programmierers nicht aus dem Code abgeleitet werden kann. Wenn Ihre Kollegen sich dafür entscheiden würden, daran zu arbeiten, würden sie nicht wissen, was Sie von der Klasse erwartet haben, und werden daher wahrscheinlich auf Probleme und/oder Irritationen stoßen.
Wenn Sie also erwarten, dass einige Teile einer Methode außer Kraft gesetzt werden, aber andere Dinge an Ort und Stelle bleiben müssen, empfiehlt es sich, die template method pattern zu verwenden, wo Sie alle Dinge, die nicht ersetzt werden müssen, in einem (privaten) Methode, die dann ruft eine andere - völlig separate -, die muss implementiert werden, damit das Programm funktioniert (in einigen Sprachen wird es nicht einmal kompilieren, sonst). Auf diese Weise stellen Sie sicher, dass die wichtigen Dinge dort bleiben, wo sie sein müssen, und wer auch immer die Klasse erweitert, wird genau wissen, was zu tun ist, während er glücklicherweise die anderen Implementierungsdetails ignoriert.
Objective-C hat keine abstrakten oder virtuellen Methoden, aber Sie können den gleichen Effekt erzielen, indem Sie explizit eine Ausnahme auslösen, wenn die super-Methode aufgerufen wird. Wenn Ihre Mitarbeiter vergessen, die Methode zu überschreiben, stürzt das Programm ab - und es stürzt mit einer Fehlermeldung ab, die sie verstehen und die es ihnen ermöglicht, das Problem schneller und einfacher zu verstehen und zu beheben als bei anderen Verhalten ohne Erklärung, da die Funktionalität nicht vollständig ist.
Können Sie die Quelle angeben? das Aufrufen von Super ist nur ein Teil der objektorientierten Programmierung, ich weiß nicht, warum das ein Anti-Pattern sein sollte. – NSAddict
Link zum entsprechenden Wikipedia-Artikel? (Denken Sie daran, dass Wikipedia kollaborativ bearbeitet wird, sie könnten falsch sein). – driis
Das ist wirklich traurig, dass diese Frage als "nicht konstruktiv" markiert ist. Ich fand es sehr wichtig – Kuba