Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Umsetzung von Spezialisierung/Generalisierung von Operationen in Argumenten und Rückgabetypen Tobias, Markus S., Janko, Sebastian, Stefanie.

Ähnliche Präsentationen


Präsentation zum Thema: "Umsetzung von Spezialisierung/Generalisierung von Operationen in Argumenten und Rückgabetypen Tobias, Markus S., Janko, Sebastian, Stefanie."—  Präsentation transkript:

1 Umsetzung von Spezialisierung/Generalisierung von Operationen in Argumenten und Rückgabetypen Tobias, Markus S., Janko, Sebastian, Stefanie

2 Spezialisierung/Generalisierung2 Übersicht Checker und notwendige Hilfsklassen Transformer Behobene Bugs Sonstige Tätigkeiten

3 Spezialisierung/Generalisierung3 Checker AllOperationsImplementedChecker –Für Java++ –Prüfung, ob alle Operationen der Oberklassen und der implementierten Interfaces durch eine Methode in der Unterklasse implementiert wird OverrideThrowsChecker –Für Java und Java++ –Prüfung, ob die Exceptions der Throws-Klauseln der überschreibenden Operationen und Methoden zu der Throws-Klausel der überschriebenen Operation oder Methode passen.

4 Spezialisierung/Generalisierung4 Checker OverrideReturnTypeChecker –Für Java und Java++ –Prüfung, ob der Rückgabewert einer Operation oder Methode zum Rückgabewert der überschriebenen Operation oder Methode passt. OverrideVisibilityChecker –Für Java und Java++ –Prüfung, ob die Sichtbarkeit einer überschriebenen Operation oder Methode nicht durch die Sichtbarkeit einer überschreibenden Operation oder Methode verringert wird. Testfälle

5 Spezialisierung/Generalisierung5 Hilfsklassen: Modelservice GetMoreGeneralOperationsStrategy FlattenedClass im Package model.j –Ist die breitgeklopfte Version der ihr zu Grunde liegenden Klasse –Enthält Operationen & Methoden aller Oberklassen & Interfaces –Enthält Oberklassen & Interfaces aller Oberklassen & Interfaces

6 Spezialisierung/Generalisierung6 Transformer Behandlung der Argumente –Feststellung des Parametertyps zur Laufzeit –Abfragen um welchen Typ es sich wirklich handelt mit Hilfe von instanceof - Anfang mit dem speziellsten Typ null –Ermittlung der speziellsten Methode und Aufruf mit Casts

7 Spezialisierung/Generalisierung7 Transformer Behandlung der Argumente –Ermittlung des Implementierungsortes und Aufruf mit super bzw. this

8 Spezialisierung/Generalisierung8 Transformer Behandlung der Rückgabetypen ModelTraveser traversiert über das Projekt mit dem GeneralizationVisitorForReturnTypes Überschriebene Methoden und deren Rückgabetypen bestimmen. – verschiedene Typen in den Oberklassen --> Fehler (wird bereits vom OverrideReturnTypeChecker überprüft)

9 Spezialisierung/Generalisierung9 Transformer – gleiche Typen in den Oberklassen Rückgabetyp in den überschriebenen Methoden spezieller als in den Methoden aus den Oberklassen --> Rückgabetyp ändern und Cast bei Aufrufen einfügen Rückgabetyp in den überschriebenen Methoden der gleiche Typ wie in den Methoden aus den Oberklassen --> nichts machen Rückgabetyp in den überschriebenen Methoden nicht spezieller oder nicht der gleiche Typ wie in den Methoden aus den Oberklassen --> Fehler

10 Spezialisierung/Generalisierung10 Transformer Rückgabetyp ändern und Cast bei Aufrunfen einfügen Umsetzung: GeneralisationVisitorForReturnTypes implementiert die Logik –Typen der Methoden feststellen und mit Hilfe der Methode isMoreSpecialThan() (realisiert über einen Inheritance- Service) –ModelTraverser durchsucht das Projekt mit Hilfe des CreateReplacementsOfClassVisitorHandler das Projekt nach Aufrufern dieser Methode und legt diese zusammen mit einer passenden ClassCastExpression in einer ReplacementList ab

11 Spezialisierung/Generalisierung11 Transformer –Änderung des Rückgabetyps wird direkt über die Methode setTypeApplication() durchgeführt. –Zur Erstellung der Casts wird die ReplacementList dem Traversieren des Transformers über eine neue Instanz des Replacers verarbeitet und die Casts darüber an die entsprechenden Stellen eingefügt.

12 Spezialisierung/Generalisierung12 Behobene Bugs Bug 181: ClassCastExceptions können jetzt geparst werden Bug 212: OverrideThrowsChecker für Java eingeführt Bug 213: OverrideReturnTypeChecker für Java eingeführt Bug 215: Implementierung von instanceof

13 Spezialisierung/Generalisierung13 Sonstige Tätigkeiten Browser, Driver, RefactorFramework für Java++ angepasst ModelTraverser durch Methode traverse ersetzt Referencer –Keine Änderungen von unserer Seite –Unterstützung der anderen Gruppen bei Einführung der VisitorFactory Visitoren –Aufteilung diverser Visitoren für Java und Java++ Umsetzung der Events –Bereitstellen der Basisklassen –Fehlersuche

14 Spezialisierung/Generalisierung14 Fragen???

15 Spezialisierung/Generalisierung15 Vielen Dank für die Aufmerksamkeit!


Herunterladen ppt "Umsetzung von Spezialisierung/Generalisierung von Operationen in Argumenten und Rückgabetypen Tobias, Markus S., Janko, Sebastian, Stefanie."

Ähnliche Präsentationen


Google-Anzeigen