• Artykuły
  • Forum
  • Ciekawostki
  • Encyklopedia
  • Refaktoryzacja

    Przeczytaj także...
    Konstruktor w programowaniu obiektowym to specjalna metoda danej klasy, wywoływana podczas tworzenia jej instancji. Zadaniem konstruktora jest zainicjowanie obiektu, a w niektórych językach programowania także utworzenie obiektu.CASE (Computer-Aided Software Engineering, Computer-Aided Systems Engineering) - oprogramowanie używane do komputerowego wspomagania projektowania oprogramowania.
    Library of Congress Control Number (LCCN) – numer nadawany elementom skatalogowanym przez Bibliotekę Kongresu wykorzystywany przez amerykańskie biblioteki do wyszukiwania rekordów bibliograficznych w bazach danych i zamawiania kart katalogowych w Bibliotece Kongresu lub u innych komercyjnych dostawców.

    Refaktoryzacja (czasem też refaktoring, ang. refactoring) – proces wprowadzania zmian w projekcie/programie, w wyniku których zasadniczo nie zmienia się funkcjonalność. Celem refaktoryzacji jest więc nie wytwarzanie nowej funkcjonalności, ale utrzymywanie odpowiedniej, wysokiej jakości organizacji systemu. W ramach refaktoryzacji podejmowane są następujące działania:

    Redundancja (łac. redundantia – powódź, nadmiar, zbytek), inaczej nadmiarowość w stosunku do tego, co konieczne lub zwykłe. Określenie może odnosić się zarówno do nadmiaru zbędnego lub szkodliwego, niecelowo zużywającego zasoby, jak i do pożądanego zabezpieczenia na wypadek uszkodzenia części systemu.Architektura wielowarstwowa (ang. multi-tier architecture lub n-tier architecture) – architektura komputerowa typu klient-serwer, polegająca na rozdzieleniu interfejsu użytkownika, przetwarzania i składowania danych na kilka osobnych warstw, które mogą być oddzielnie rozwijane i aktualizowane, co ułatwia ich utrzymanie i nie wpływa negatywnie na funkcjonowanie pozostałych warstw.
  • modyfikowanie elementów systemu w celu wpasowania ich w przyjęte standardy i wzorce
  • poszukiwanie nowych standardów i wzorców, które pojawiły się w systemie w trakcie jego rozwoju i ich precyzyjne definiowanie (łącznie z wpasowywaniem istniejących elementów w te definicje).
  • Dzięki refaktoryzacji w systemie ogranicza się redundancję (nadmiarowość, np. istnienie wielu obiektów i procedur o takiej samej lub bardzo zbliżonej funkcjonalności, a mających niezależne implementacje, czyli stosując regułę DRY) i wprowadza standardy. W przypadku systemów o architekturach wielowarstwowych, refaktoryzacja jest jednym z istotnych czynników gwarantujących zachowanie silnej separacji warstw systemu i ich przejrzystej struktury.

    W programowaniu obiektowym klasa jest częściową lub całkowitą definicją dla obiektów. Definicja obejmuje dopuszczalny stan obiektów oraz ich zachowania. Obiekt, który został stworzony na podstawie danej klasy nazywany jest jej instancją. Klasy mogą być typami języka programowania - przykładowo, instancja klasy Owoc będzie mieć typ Owoc. Klasy posiadają zarówno interfejs, jak i strukturę. Interfejs opisuje, jak komunikować się z jej instancjami za pośrednictwem metod, zaś struktura definiuje sposób mapowania stanu obiektu na elementarne atrybuty.Zarządzanie przez jakość (ang. Total Quality Management, inaczej: kompleksowe zarządzanie jakością, totalne zarządzanie jakością) - podejście do zarządzania organizacją, w którym każdy aspekt działalności jest realizowany z uwzględnieniem spojrzenia projakościowego. Uczestniczą w nim wszyscy pracownicy poprzez pracę zespołową, zaangażowanie i stałe podnoszenie kwalifikacji. Celem jest osiągnięcie długotrwałego sukcesu, którego źródłem są zadowolenie klienta oraz korzyści dla organizacji i jej członków oraz dla społeczeństwa.

    Refaktoryzacja jest kosztowna, ale jest istotnym elementem zarządzania projektem informatycznym. W szczególności zaś przy dużych i złożonych projektach koszt dobrze prowadzonej refaktoryzacji powinien być zrekompensowany dużo niższym kosztem wprowadzania późniejszych zmian w projekcie, szczególnie zmian o charakterze globalnym (przekrojowym), dotykających wielu modułów funkcjonalnych jednocześnie. W przypadku projektów obarczonych dużym ryzykiem niepowodzenia (np. z powodu niestabilnych wymagań funkcjonalnych klienta) regularnie prowadzona refaktoryzacja wydaje się być nieodzowna.

    Metoda – w programowaniu obiektowym podprogram składowy klasy, którego zadaniem jest działanie na rzecz określonych elementów danej klasy lub klas z nią spokrewnionych (zob. też dziedziczenie).Zintegrowane środowisko programistyczne (ang. Integrated Development Environment, IDE) jest to aplikacja lub zespół aplikacji (środowisko) służących do tworzenia, modyfikowania, testowania i konserwacji oprogramowania.

    Narzędzia wspomagające refaktoryzację należą do narzędzi CASE i możemy je dziś spotkać jako narzędzia wbudowane w zintegrowane środowiska programistyczne.

    Przykłady refaktoryzacji[ | edytuj kod]

    Usuwanie nadmiarowych konstruktorów[ | edytuj kod]

    Konieczność zastosowania tego typu metody refaktoryzacji następuje najczęściej w przypadku, gdy programista chcąc szybko zastosować nową funkcjonalność, rozszerza klasę o kolejne konstruktory z nowymi parametrami. Podajmy przykład oparty na systemie obliczającym wartość pożyczki:

    Zarządzanie projektem – zbiór czynności wykonywanych w celu osiągnięcia wyznaczonych celów głównych i pośrednich w skończonym czasie. Zawiera się w nim między innymi planowanie, harmonogramowanie, realizacja i kontrola zadań potrzebnych do osiągnięcia celów projektu.Zarządzanie ryzykiem – według międzynarodowej normy ISO 31000:2009, oraz polskiej normy PN-ISO 31000:2012 skoordynowane działania dotyczące kierowania i nadzorowania organizacją w odniesieniu do ryzyka.
    Pozyczka(wartosc);
    Pozyczka(wartosc, oprocentowanie);
    Pozyczka(wartosc, oprocentowanie, czasSplaty);
    Pozyczka(wartosc, oprocentowanie, czasSplaty, ryzyko);
    Pozyczka(wartość, oprocentowanie, czasSplaty, ryzyko, status);
    

    Początkowo w kodzie programu istniał jeden konstruktor o nazwie „Pozyczka” z jednym parametrem (wartosc). W miarę dodawania nowych funkcjonalności pojawiała się potrzeba tworzenia konstruktorów „Pozyczka” o większej liczbie parametrów. W ten sposób powstało pięć metod o tej samej nazwie, lecz różnym działaniu. Taki kod zazwyczaj wymaga refaktoryzacji, gdyż nazwa metody powinna jednoznacznie wskazywać, za jaką funkcjonalność systemu metoda odpowiada. Przy dalszym rozwoju kodu tej klasy mogą pojawić się problemy z implementacją wynikające z niezrozumienia faktycznej roli konstruktora. Po refaktoryzacji kod może mieć postać:

    Standard – wspólnie ustalone kryterium, które określa powszechne, zwykle najbardziej pożądane cechy czegoś, np. wytwarzanego przedmiotu (np. standardem jest, że każdy współcześnie wytwarzany telewizor wyświetla kolory) czy ludzkiego zachowania (norma kulturowa). Standard to czasem także podstawowa, najprostsza wersja produktu.Gemeinsame Normdatei (GND) – kartoteka wzorcowa, stanowiąca element centralnego katalogu Niemieckiej Biblioteki Narodowej (DNB), utrzymywanego wspólnie przez niemieckie i austriackie sieci biblioteczne.
    Pozyczka(wartosc, oprocentowanie,  czasSplaty, ryzyko, status);
    ustalWartosc(wartosc);
    stworzPozyczke(wartosc, oprocentowanie);
    dajPozyczke(wartosc, oprocentowanie, czasSplaty);
    sprawdzPozyczke(wartosc, oprocentowanie, czasSplaty, ryzyko);
    

    Tworzenie łańcucha konstruktorów[ | edytuj kod]

    Stosowanie łańcucha konstruktorów jako metody refaktoryzacyjnej jest wskazane w typowych przypadkach nadmiarowości kodu w klasach o wielu konstruktorach, które nadpisują po sobie kod. Sztandarowym przykładem takiej sytuacji jest przypisywanie wartość parametrów do pól w każdym konstruktorze klasy:

    Implementacja (wdrożenie, przystosowanie, realizacja, łac.ang. implementation) – w informatyce – proces przekształcania abstrakcyjnego opisu systemu lub programu na obiekt fizyczny: komputer lub działający program zapisany w konkretnym języku programowania; także obiekt fizyczny będący efektem takiego przekształcenia, np. implementacja systemu operacyjnego (wdrożenie systemu) lub kompilatora dla konkretnego typu komputera.
    Pozyczka(wartosc) { 
    	this.wartosc = wartosc; 
    }
    
    Pozyczka(wartosc, oprocentowanie) {
    	this.wartosc = wartosc;
    	this.oprocentowanie = oprocentowanie;
    }
    
    Pozyczka(wartosc, oprocentowanie, czasSplaty) {
    	this.wartosc = wartosc;
    	this.oprocentowanie = oprocentowanie;
    	this.czasSplaty = czasSplaty;
    }
    

    Można zauważyć, że zamiast każdorazowego przypisywania wartości można utworzyć tzw. łańcuch, który pozwoli na uproszczenie kodu:

    Pozyczka(wartosc) {
    	this(wartosc, null);
    }
    
    Pozyczka(wartosc, oprocentowanie) {
    	this(wartosc, oprocentowanie, null);
    }
    
    Pozyczka(wartosc, oprocentowanie, czasSplaty) {
    	this.wartosc = wartosc;
    	this.oprocentowanie = oprocentowanie;
    	this.czasSplaty = czasSplaty;
    }
    

    W przypadku, gdy łańcuch konstruktorów jest długi kolejne wywołania mogą okazać się mało wydajne. Alternatywą w takim przypadku jest zastosowanie konstruktora uniwersalnego (który przyjmuje wszystkie możliwe parametry):

    Pozyczka(wartosc) {
    	this(wartosc, null, null);
    }
    
    Pozyczka(wartosc, oprocentowanie) {
    	this(wartosc, oprocentowanie, null);
    }
    
    Pozyczka(wartosc, oprocentowanie, czasSplaty) {
    	this.wartosc = wartosc;
    	this.oprocentowanie = oprocentowanie;
    	this.czasSplaty = czasSplaty;
    }
    

    Zastosowanie tych metod pozwala na ustalenie jednego miejsca przypisania wartości parametrów do pól. W takim przypadku konieczne jest wychwytywanie wszystkich możliwych zerowych wartości parametrów (tzw. null pointerów), albo zdefiniowanie i użycie wartości domyślnych.

    Linki zewnętrzne[ | edytuj kod]

  • Strona Martina Fowlera na temat refaktoryzacji (ang.)
  • Martin Fowler - Software Design in the 21st Century prelekcja Martina Fowlera na temat refaktoryzacji z przykładami (ang.)



  • w oparciu o Wikipedię (licencja GFDL, CC-BY-SA 3.0, autorzy, historia, edycja)

    Reklama

    Czas generowania strony: 0.016 sek.