Hintergrund: Ich stelle fest, dass in vielen Projekten fast alle Klassen im internen Code öffentlich und nicht final sind, auch wenn sie nicht sein müssen. Es erscheint mir jedoch sinnvoll, diese Entscheidung nicht standardmäßig zu treffen, sondern nur dann zu veröffentlichen, wenn sie tatsächlich aus anderen Teilen des Systems verwendet werden sollen. Paketgeschützte Klassen zu haben ist ein einfacher Mechanismus, um Grenzen zwischen Modulen zu erzwingen und dient als Dokumentation über die beabsichtigte Verwendung einer Klasse.
Wenn es ein (vorzugsweise freies :-) Werkzeug gäbe, um alle Klassen zu schützen, die geschützt werden können, ohne das Programm zu brechen, und vielleicht alles endgültig macht, das keine Unterklassen hat, wäre das ein guter Ausgangspunkt für einen bewussten Einsatz von Schutzmechanismen. (Natürlich müssen Sie danach noch etwas verbessern.) Kennen Sie ein solches Werkzeug?
Vorbehalt: Mir ist bewusst, dass es bessere Modularisierungsmechanismen wie OSGI und die geplanten Superpackages usw. gibt. Aber in vielen aktuellen Projekten ist dies keine Option und die Verwendung der einfachen alten Java-Mechanismen ist etwas, was Sie leicht tun können. Dies funktioniert auch nur, wenn Sie die Eigentumsrechte an einem Code gemeinsam haben (so dass jeder die Dinge nach Bedarf wieder in die Öffentlichkeit zurückverwandeln kann) und wenn Sie ein Endprodukt entwickeln, keine Bibliothek für andere. Ich bin mir auch nicht sicher über die Vorteile, Dinge endgültig zu machen - das verhindert AOP und Spott.
Erklärung : Ich spreche nicht von Bibliotheken, die jemandem über den Zaun geworfen werden, der sie nicht ändern kann, sondern von internem Code von mittelgroßen Projekten, zu denen jeder ermutigt wird Ändere und verändere alles nach Bedarf. Wenn ich über paketgeschütztes oder endgültiges Denken spreche, denke daran, dass es "geschützt ist, bis jemand ein zwingendes Bedürfnis verspürt, diese Beschränkungen aufzuheben". Wenn jemand das Gefühl hat, die durch das Tool gesetzten Einschränkungen aufzuheben, kann er dies gerne tun.
Selbst wenn es ein solches Werkzeug gäbe (das gibt es nicht), würde ein guter Programmierer es nicht verwenden ... Zugriffsspezifikation ist ein Designproblem, das vom Programmierer selbst am besten verstanden und entschieden wird. Denke darüber nach ... du machst ein Programm und führst das Werkzeug aus und sortierst alles (vorausgesetzt, das Werkzeug ist von Anfang an superintelligent, um dein Programm wirklich zu verstehen) .. dann entscheidest du es zu ändern ... erweitere einige Klassen usw .. und du endst endende Klassen und machst Objekte von privaten Klassen .. (und das sind einige der vielen Probleme, denen du gegenüberstehst) ...
Sache ist ... wenn das Werkzeug seine Arbeit macht, würden Sie Ihr eigenes Programm nicht einmal mehr verstehen.
Bottomline .. hören Sie auf, nach Werkzeugen zu suchen, um Ihre Entwurfsprobleme zu lösen. (es fragt wie nach Werkzeugen, die automatisch Ihr Programm debuggen)
Sie können sich ATL von Eclipse anschauen. Obwohl ATL zum Erstellen von Modell-zu-Modell-Transformationen zwischen verschiedenen Arten von Modellen verwendet wird, gibt es keine Einschränkung, dass Quell- und Zielmodell nicht vom selben Typ sind. Sie könnten eine Umwandlung von Java nach Java erstellen, die Ihre aktuellen Klassen geschützt oder endgültig macht. MoDisco ist ein Toolset von Eclipse, das nur dann verwendet wird, wenn Sie Beispiele sehen möchten.