Wer weiß schon, wie man das Refactoring formeller definieren kann?
AKTUALISIEREN.
Ein Refactoring ist ein Paar R = (pre; T) wobei pre die Voraussetzung dafür ist das Programm muss genügen, und T ist die Programmumwandlung.
Es ist eine interessante Frage und eine, die ich nicht bedacht hatte. Ich habe ein wenig gegoogelt und mir dieses Papier (PDF) ausgedacht. beim Refactoring in AOP, das versucht, einige mathematische Modelle auf Aspekte anzuwenden, um zu zeigen, dass funktionale Aspekte die gleiche Flexibilität wie traditionelle Aspekte haben, jedoch mit reduzierter Komplexität. Ich habe die ganze Zeitung nicht gelesen, aber Sie könnten dort etwas finden.
Eine weitere interessante Idee wäre es, Refactorings auf die gleiche Art wie Compiler-Optimierungen zu betrachten. Im Wesentlichen stellt der Compiler Ihren Code im laufenden Betrieb um, obwohl mit anderen Zielen als dem Refactoring auf Codeebene gearbeitet wird. Sie müssten irgendwie die Komplexität und Lesbarkeit des Codes vernünftig quantifizieren, um zu demonstrieren, wie sich ein bestimmtes Refactoring darauf auswirkt. Das Modell wäre wahrscheinlich der schwierigste Teil.
Ich habe auch dieses Papier gefunden, das eine Algebra der OO-Programmierung erstellt und leitet einige Grundgesetze ab und verwendet dann diese Grundregeln, um ein komplizierteres Refactoring abzuleiten.
Interessante Sachen. Hoffe, das hilft.
Refactoring ist eine Reihe von Korrektheitserhaltenden Transformationen, aber Refactoring kann zu einem allgemeineren Code als das Original
führen, so können wir nicht einfach behaupten, dass eine refaktorierende Transformation T im Programm P die gleichen Eigenschaften R vor und nach dem Refactoring aufweist, aber die Eigenschaften R 'des umstrukturierten Programms P' sollten zumindest äquivalent zu R
sein %Vor%wir können auch behaupten, dass die Ein- und Ausgänge gleich oder äquivalent bleiben
Aber um Ihrem Beispiel zu folgen, wollen wir vielleicht eine Refactoring-Transformation T als 4-Tupel P, I, O, R definieren, wobei P das ursprüngliche Programm ist, I die Eingaben und / oder Vorbedingungen, O die Ausgaben und / oder Nachbedingung, und R ist das transformierte Programm, dann (unter Verwendung temporaler Logik?) das bestätigen
%Vor%gilt vor der Umwandlung
%Vor%definiert die Transformation und
%Vor%gilt nach der Umwandlung
meine symbolische Mathematik ist rostig, aber das ist eine allgemeine Richtung
Dies würde eine gute Masterarbeit machen, BTW
Es könnte interessant sein zu bemerken, dass die meisten Refactorings paarweise kommen:
Das Anwenden der beiden Refactorings des Paares ist eine Null-Transformation.
Für ein Refaktorierungspaar R, R ':
R '(R (Code)) = Code
Nun nicht direkt, aber in Geld ausgedrückt - ich kann ja sagen. Ich kann keine Gleichung dazu finden:)
Code gut geschrieben, frei von Komplexität (die durch Refactoring verursacht werden könnte) kann Zeit und Geld sparen.
Tags und Links refactoring theory program-transformation