friend vs. objektorientierte Programmierung

Wie oben bereits mehrfach erwähnt, verstößt der Einsatz von friend-Funktionen gegen das Prinzip der objektorientierten Programmierung, da dadurch die Datenkapselung vollständig umgangen werden kann. Nicht zuletzt diese Tatsache hat dazu geführt, daß das Schlüsselwort friend zu einem der umstrittensten Sprachmittel von C++ überhaupt wurde.

Man kann nun kräftig darüber streiten, ob sich das friend-Konzept nicht doch mit der objektorientierten Programmierung in Einklang bringen läßt. Immerhin ist es u.a. ja nicht möglich, den Zugriff auf die privaten Elemente eine Klasse nachträglich zu erweitern, d.h. sich selbst zum Freund zu ernennen oder ähnliches.

Die strenge Datenkapselung wurde zugunsten des Laufzeitvorteils über Bord geworfen, was man nun wiederum gutheißen kann oder nicht. Fakt ist aber auch, daß C++ prinzipiell eine Sprache ist, die nicht zu einer objektorientierten Programmierung zwingt, sondern diese nur unterstützt. Man kann zwar objektorientiert programmieren, muß es jedoch nicht!
Sicherlich kann die Frage der Vereinbarkeit der beiden Konzepte hier nicht abschließend geklärt werden, da es auf den jeweiligen Standpunkt ankommt. Beide Seiten haben sicherlich sowohl bessere wie auch schlechtere Argumente auf Ihrer Seite. Man sollte sich aber jederzeit im klaren darüber sein, daß man -- wenn man es mit der objektorientierten Programmierung ernst meint -- nur dort friends einsetzen sollte, wo man diese auch tatsächlich benötigt.

Zudem beachte man folgendes: Friend-Funktionen können bei Vererbung und Polymorphie (siehe spätere Kapitel) Probleme bereiten; insofern stehen Friend-Funktionen den Konzepten der objektorientierten Idee auch an dieser Stelle im Wege.