Ruby Refactoring Plug-In für Eclipse

Slides:



Advertisements
Ähnliche Präsentationen
der Universität Oldenburg
Advertisements

mit Entwicklungsumgebungen (Eclipse) Software verbessern
B-Bäume.
Fortgeschrittenenpraktika WS 2003/04 Database Research Group, Prof. Dr. Bernhard Seeger Department of Mathematics and Computer Science University of Marburg.
Universität Stuttgart Institut für Kernenergetik und Energiesysteme Was ist Refactoring? Bevor man die Integration angeht, mag es angebracht sein, den.
Universität Stuttgart Institut für Kernenergetik und Energiesysteme LE P MuSofT Erkundungsumgebung Entwicklung eines komponentenbasierten Systems WS 03/04.
es gibt (fast) nichts, was nicht anders gemacht werden könnte
Java: Objektorientierte Programmierung
Java: Dynamische Datentypen
Indirekte Adressierung
Java: Referenzen und Zeichenketten
Java: Grundlagen der Objektorientierung
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Kapitel 7 Claudio Moraga, Gisbert Dittrich FBI Unido
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Vorlesung 2 SWS WS 99/00 Gisbert Dittrich FBI Unido
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Vorlesung 2 SWS WS 99/00 Gisbert Dittrich FBI Unido
Imperative Programmierung Funktionen und Parameter
Christian Kästner Modellgetriebene Softwareentwicklung Eclipse Modelling Framework.
Einführung in die Programmierung mit Java
Diskrete Mathematik I Vorlesung Arrays-
By Monika Krolak & Christian Meschke
Programmieren mit JAVA
PKJ 2005/1 Stefan Dissmann Ausblick Es fehlen noch: Möglichkeiten zum Strukturieren größerer Programme Umgang mit variabler Zahl von Elementen Umgang mit.
PKJ 2005/1 Stefan Dissmann Rückblick auf 2005 Was zuletzt in 2005 vorgestellt wurde: Klassen mit Attributen, Methoden und Konstruktoren Referenzen auf.
PKJ 2005/1 Stefan Dissmann Zusammenfassung der Vorwoche Variable stehen für (einen) Wert, der sich im Programmablauf ändern kann. Variablen besitzen einen.
PKJ 2005/1 Stefan Dissmann Zusammenfassung Vorwoche Methoden sind mit einem Namen versehene Programmabschnitte besitzen Rückgabetyp, Namen, Parameterliste.
Explizite und editierbare Metainformationen für Software Muster.
Die Skriptsprache Perl (8) Wolfgang Friebel DESY Zeuthen.
Batch-Programmierung Grundlagen
Software Design Patterns Extreme Programming (XP).
DVG Kommentare1 Kommentare. DVG Kommentare 2 Kommentare Es gibt zwei Arten von Kommentaren: einzeilige Kommentare // der Kommentar geht.
DVG Klassen und Objekte
DVG Kommentare 1 Kommentare. 2 Kommentare Es gibt zwei Arten von Kommentaren: einzeilige Kommentare // der Kommentar geht bis zum Ende der Zeile.
Wizards & Builders GmbH Programmierstil Hinweise zum Programmierstil unter Microsoft Visual FoxPro.
Marcus Haller & René Schulze
Programmiermethodik SS2007 © 2007 Albert Zündorf, University of Kassel 1 5. Test-First Prinzip Gliederung: 1. Einführung 2. Objektdiagramme zur Analyse.
Programmiermethodik SS2007 © 2007 Albert Zündorf, University of Kassel 1 5. Test-First Prinzip Gliederung: 1. Einführung 2. Objektdiagramme zur Analyse.
PRJ 2007/1 Stefan Dissmann Verkettete datenstruktur: Liste Problem: Liste, die eine beliebige Zahl von Elementen verwaltet Operationen: Erzeugen, Anfügen,
7.1 Externes Suchen Bisherige Algorithmen: geeignet, wenn alle Daten im Hauptspeicher. Große Datenmengen: oft auf externen Speichermedien, z.B. Festplatte.
Delphi II - OOP IFB Fortbildung
University of Applied Sciences Übung Objektorientierte Programmierung II Dipl.-Inf. (FH) Markus Vogler.
PowerPoint.
TWS/Graph HORIZONT Produkt-Präsentation Software für Rechenzentren
Informatik 1 Übung 8. NACHBESPRECHUNG Übung 8 Rekursion Existiert Weg von A nach B?
Programme dokumentieren mit JavaDoc
1 Sg 3 – JSP - Java Server Pages Softwareengineering Praktikum Java Server Pages Nicole Brandstätter Josef Sturm Karl Streicher.
Einführung / Geschichte Einführung / Geschichte Motivation Motivation Beispiel Beispiel Architektur / Komponenten Architektur / Komponenten Konfiguration.
Javakurs FSS 2012 Lehrstuhl Stuckenschmidt
HORIZONT 1 XINFO ® Das IT - Informationssystem Java Scanner HORIZONT Software für Rechenzentren Garmischer Str. 8 D München Tel ++49(0)89 / 540.
1. Verhalten der Objekte: Operationen Werden in den Klassen definiert Werden (i.d.R.) auf einem Objekt aufgerufen Wird das Empfängerobjekt genannt Weitere.
Cooperation unlimited © Zühlke Juni 2009 Hansjörg Scherer Folie 1 Cooperation unlimited TFS als BackEnd für Visual Studio und Eclipse.
Einführung in die Programmierung Wintersemester 2008/09 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund.
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fachbereich.
Javakurs FSS 2012 Lehrstuhl Stuckenschmidt
Grundlagen der Informatik 4 Lehrstuhl für Betriebssysteme 1 Wie werden Funktionen realisiert? Beispiel: int maximum(int x, int y) { int j = x; if (y >
Auslegung eines Vorschubantriebes
OOP-Begriffe Abstraktion Modellieren Klasse Objekt Attribute Methoden
Übersicht - Methodik Studien zur Imitation von Interpretationen klassischer Klavier-Musik durch neuronale Netze.
Eclipse-Entwicklungsumgebung
Parameterübergabemechanismen für den Methodenaufruf
EPROG Tutorium #4 Philipp Effenberger
Java-Kurs - 6. Übung Besprechung der Hausaufgabe
Java-Kurs - 6. Übung Besprechung der Hausaufgabe
Einführung in die Programmierung mit Java
Java-Kurs - 5. Übung Besprechung der Übungsaufgabe Klassen und Objekte
1. Betreuer: Prof. Dr. Jörg Striegnitz 2. Betreuer: Dr. Martin Schindler Kontextsensitive Autocompletion für Klassendiagramme in der UML/P Florian Leppers.
Ruby Refactoring Plug-In für Eclipse
«Delegierter» Methoden Schablone Funktionszeiger
Implementieren von Klassen
 Präsentation transkript:

Ruby Refactoring Plug-In für Eclipse Präsentation Diplomarbeit Ruby Refactoring Plug-In für Eclipse Team: Lukas Felber Thomas Corbat Mirko Stocker Betreuung: Prof. Peter Sommerlad Experte: Dr. Dirk Bäumer

Lukas Felber, Mirko Stocker, Thomas Corbat Übersicht Einführung Studienarbeit Refactorings Pro Refactoring: Demo Erläuterungen Testen Fragen Lukas Felber, Mirko Stocker, Thomas Corbat

Lukas Felber, Mirko Stocker, Thomas Corbat Einführung - RDT Ruby Development Tools IDE basierend auf Eclipse Grundlage von RadRails Features wie: TestUnit Runner Debugging Code Completion Lukas Felber, Mirko Stocker, Thomas Corbat

Lukas Felber, Mirko Stocker, Thomas Corbat Einführung - JRuby Ruby Implementierung in Java Stellt einen AST zur Verfügung ohne Kommentare optimiert für Interpretation Lukas Felber, Mirko Stocker, Thomas Corbat

Lukas Felber, Mirko Stocker, Thomas Corbat Studienarbeit Comment Handling Positions-Fehler AST-Rewriter Basis für Refactorings Lukas Felber, Mirko Stocker, Thomas Corbat

Refactorings Studienarbeit Code Generators: Generate Accessors Generate Constructors Using Fields Override Method Refactorings: Push Down Method Rename Local Variable Lukas Felber, Mirko Stocker, Thomas Corbat

Refactoring Basis Komponenten Refactoring Wizard Ruby Refactoring Edit Provider Document Provider Condition Checker RefactoringWizard EditProvider DocumentProvider ConditionChecker MyRefactoring RubyRefactoring Lukas Felber, Mirko Stocker, Thomas Corbat

Lukas Felber, Mirko Stocker, Thomas Corbat Refactorings Convert Local Variable to Field Encapsulate Field Extract Method Move Method Move Field Split Temporary Variable Inline Method Inline Class Inline Temp Merge Class Parts Rename Field Rename Method Rename Class Rename Local Variable Lukas Felber, Mirko Stocker, Thomas Corbat

Convert Local Variable to Field Alle vorkommen der angewählten lokalen Variable finden Falls gewünscht Deklaration der lokalen Variable entfernen und Deklaration des Feldes in Konstruktor einfügen. Lokale Variablen durch Feld ersetzen Lukas Felber, Mirko Stocker, Thomas Corbat

Lukas Felber, Mirko Stocker, Thomas Corbat Encapsulate Field Accessors für selektiertes Feld finden Entsprechende getter- und setter- Methoden generieren Bestehende Accessors löschen Ruby Accessors: attr_accessor :myPublicField attr_reader :myReadableField attr_writer :myWritableField Accessors ermöglichen den Zugriff auf Felder von ausserhalb einer Klasse. Lukas Felber, Mirko Stocker, Thomas Corbat

Lukas Felber, Mirko Stocker, Thomas Corbat Extract Method Falls nötig aktuelle Selektion sinnvoll erweitern Selektierten Codeblock ermitteln Lokale Variablen, welche als Argumente benötigt werden, ermitteln. Rückgabewerte ermitteln (in Ruby auch mehrere möglich). Selektierter Codeblock mit Methodenaufruf ersetzen und neue Methodendefinition einfügen Lukas Felber, Mirko Stocker, Thomas Corbat

Lukas Felber, Mirko Stocker, Thomas Corbat Move Method movingMethod() SourceClass TargetClass movingMethod ermitteln und verschieben Falls verlangt delegate-Method in SourceClass einfügen Referenzen anpassen: Aufrufe von movingMethod in SourceClass Aufrufe von SourceClass Methoden in movingMethod Zugriffe auf Felder von SourceClass in movingMethod Accessoren und Methoden-Visibility anpassen, dass alle Referenzen gültig bleiben Lukas Felber, Mirko Stocker, Thomas Corbat

Lukas Felber, Mirko Stocker, Thomas Corbat Move Field Feld in eine andere Klasse verschieben: Accessors in Zielklasse erstellen, in Quellklasse durch Delegate-Methode ersetzen Verwendung innerhalb der Quellklasse auf Zielklasse delegieren Lukas Felber, Mirko Stocker, Thomas Corbat

Split Temporary Variable Jeder Verwendung einer lokalen Variablen einen neuen Namen zuweisen Prinzipiell wie Rename Local Variable, nur in anderem Scope Lukas Felber, Mirko Stocker, Thomas Corbat

Lukas Felber, Mirko Stocker, Thomas Corbat Inline Method Ersetzt Methodenaufruf durch Definiton Parameter umbenennen oder neu einführen Aufrufe von self auf Referenz umbiegen returns entfernen und Werte zuweisen auf Wunsch Definition löschen Bedingungen: Höchstens ein return-Aufruf return muss am Ende stehen Lukas Felber, Mirko Stocker, Thomas Corbat

Lukas Felber, Mirko Stocker, Thomas Corbat Inline Class Integrieren der Funktionalität einer Klasse in eine andere. Restriktion: Aufnehmende Klasse muss eine Instanz der Ziel-Klasse in ihrem Konstruktor anlegen. Dieser Aufruf des nicht mehr existierenden Konstruktors wird durch die eigene Instanz ersetzt. Ablauf: Auswahl der Zielklasse Verschieben der Methoden und Felder Umbenennen der Methoden und Felder bei Konflikten Verschieben und Umbenennen des Konstruktors Löschen der integrierten Klasse Lukas Felber, Mirko Stocker, Thomas Corbat

Lukas Felber, Mirko Stocker, Thomas Corbat Inline Temp Ersetzt eine lokale Variable durch deren Wert. Ersetzung durch Methodenaufruf möglich. Restriktionen: Nur eine Zuweisung der Variable Keine Selbstzuweisung Keine Parameter Problem: Veränderung von mathematischen Ausdrücken Code: Nach Ersetzung: Besser wäre: summe = 5 + 5 produkt = summe * 5 produkt = 5 + 5 * 5 produkt = (5 + 5) * 5 --------------------------------- -------------------------------- --------------------------- produkt hat den Wert 50 produkt hat den Wert 30 produkt: 50 Lukas Felber, Mirko Stocker, Thomas Corbat

Lukas Felber, Mirko Stocker, Thomas Corbat Merge Class Parts Zusammenziehen von Klassenteilen Zwei Refactorings für Teile in derselben Datei und Teile in mehreren Dateien Ablauf: Selektion der Klassen-Teile Auswahl der Ziel-Definition Verschieben der Teile ans Ende der Ziel- Definition Lukas Felber, Mirko Stocker, Thomas Corbat

Lukas Felber, Mirko Stocker, Thomas Corbat Rename Field Umbenennen eines Feldes Vorgehen: Der Cursor muss auf einem Feld platziert werden Eingabe eines neuen gültigen Namens Vorschlag der umzubenennenden Vorkommen Auswahl der umzubenennenden Vorkommen Umbenennen der Accessors Lukas Felber, Mirko Stocker, Thomas Corbat

Lukas Felber, Mirko Stocker, Thomas Corbat Rename Method Umbenennen einer Methode Vorgehen: Selektion einer Methoden-Definition Eingabe eines neuen gültigen Namens Vorschlag der umzubenennenden Aufrufe Auswahl der umzubenennenden Aufrufe Lukas Felber, Mirko Stocker, Thomas Corbat

Lukas Felber, Mirko Stocker, Thomas Corbat Rename Class Klasse umbenennen: Instanzierungen andere Definitonen derselben Klasse Subklassen Lukas Felber, Mirko Stocker, Thomas Corbat

Lukas Felber, Mirko Stocker, Thomas Corbat Rename Local Variable Lokale Variablen beinhaltet: “normale”, lokale Variablen Methodenargumente Variablen in Blöcken, |foo, bar| Lukas Felber, Mirko Stocker, Thomas Corbat

Lukas Felber, Mirko Stocker, Thomas Corbat Testen JUnit-Tests File Driven Tests Dateien für Original und erwartetem Resultat Konfiguration für Refactoring in Property-File Keine Änderungen an Java-Code für neue Tests Continuous Integration mit Cruise Control Lukas Felber, Mirko Stocker, Thomas Corbat

Lukas Felber, Mirko Stocker, Thomas Corbat Ausblick Integration in RDT / JRuby Weiterentwicklung Weiter Refactorings Adaption an neue Versionen (Ruby/JRuby/RDT) Erweiterung bestehender Refactorings Comment Handling Lukas Felber, Mirko Stocker, Thomas Corbat

Lukas Felber, Mirko Stocker, Thomas Corbat Ende Fragen Lukas Felber, Mirko Stocker, Thomas Corbat