De Refactoring Lab Sessie

Note: this page has been provisionally written in Dutch. We are attempting to find time to translate it in English. In case you can't wait, you might try Altavista Babelfish to automatically translate this page in English for you.

Het doel van deze sessie is om aan te tonen hoe je door het uitvoeren van een reeks kleine, beheersbare refactorings het ontwerp van een software systeem zodanig kan aanpassen dat de implementatie van nieuwe features opnieuw mogelijk is.

Het software-systeem dat we in dit lab gebruiken is de Local Area Network (LAN) Simulatie. Kort samengevat is de huidige implementatie niet geschikt voor het implementeren van nieuwe soorten netwerk-knopen. De reden hiervoor is dat de knoop-klasse een "dumb data holder" is, terwijl de netwerk-klasse alle functionaliteit bevat en daardoor een "god class" vormt. Daarom zullen we in deze sessie de verantwoordelijkheden die werkelijk tot een netwerk-knoop behoren overladen van de netwerk-klasse naar de knoop-klasse. Eens de knoop-klasse opgevuld is zullen we de verschillende soorten knopen, die momenteel nog via conditials onderscheidden worden, opsplitsen in subklassen van de knoop-klasse. Als kers op de taart zullen we hierbij polymorphisme in werking kunnen stellen om de implementatie van nieuwe features te kunnen ondersteunen.

Deze lab-sessie bestaat uit volgende onderdelen:

  1. Voorbereiding: opstellen van het test-vangnet [html]

  2. Deel I: Wegwerken van duplicate code met "Extract Method" [html]

  3. Deel II: Move Behaviour Close to the Data [html]

    • Oefening II.1: Verplaatsen van de methode sendPacket naar de klasse Node
    • Oefening II.2: Verplaatsen van de methode accountForPrintJob
    • Oefening II.3: Verplaatsen van methode printDocument naar klasse Node

  4. Deel III: Eliminate Navigation Code [html]

    • Oefening III.1: Begeleide oefening op het elimineren van navigatie-code
    • Oefening III.2: Zelfstandige oefening op Eliminate Navigation Code
    • Oefening III.3: Hergebruiken van de geëxtraheerde methode atDestination
    • Oefening III.4: Extraheren van het verzenden van een packet en verplaatsing naar de klasse Node
    • Oefening III.5: Opvullen van klasse Node met print-gerelateerde verantwoordelijkheden

  5. Deel IV: Transform Self Type Checks [html]

We hebben een Eclipse CDT (C++ Development Tools) project opgesteld voor de LAN simulatie broncode. Deze kan je verkrijgen in verschillende versies, zodat je vanaf elk deel kan beginnen:

Pak het zip-bestand uit, en importeer het daarna als een bestaand project.

Succes!
Bart Du Bois.


Oorsprong:
Auteur oorspronkelijke sessie: Prof. dr. Serge Demeyer
Auteurs uitbreidingen/vertaling naar C++: dr. Matthias Rieger, Bart Van Rompaey en dr. Bart Du Bois
Opstellen stap-voor-stap gedocumenteerde lab-sessie: dr. Bart Du Bois

Allen deel van het Lab On Reengineering, Departement Wiskunde-Informatica, Universiteit Antwerpen.

De Refactoring Lab Sessie is ook beschikbaar in Java en in een niet-CDT versie voor C++. Je kan het hier downloaden.