Io-13-lab-wiki: Różnice pomiędzy wersjami

Z Studia Informatyczne
Przejdź do nawigacjiPrzejdź do wyszukiwania
Bwalter (dyskusja | edycje)
Nie podano opisu zmian
 
Bwalter (dyskusja | edycje)
Nie podano opisu zmian
Linia 1: Linia 1:
=Ćwiczenie 13. Refaktoryzacja oprogramowania w Javie za pomocą Eclipse IDE=
=Ćwiczenie 13. Ewolucja oprogramowania=


==Informacje wstępne==
==Informacje wstępne==
Ćwiczenie jest realizowane w języku Java w środowisku Eclipse 3.2.
Ćwiczenie jest realizowane w języku Java w środowisku Eclipse 3.2.
Przed przystąpieniem do realizacji ćwiczenia należy zapozanać się z [http://www-128.ibm.com/developerworks/library/os-ecref|Artykułem nt. refaktoryzacji w Eclipse IDE]
Celem ćwiczenia jest zrealizowanie prostego programu rozwijanego w wielu przyrostach.
Celem ćwiczenia jest wykonanie przekształceń refaktoryzacyjnych wybranych fragmentów kodu w załączonym projekcie


==Zadanie==
==Zadanie 1==
Na podstawie załączonego kodu programu przeprowadź następujące zmiany w programie
W kolejnych krokach będzie rozwijany program realizujący proste obliczenia matematyczne. Należy każdy krok zapisywać w postaci osobnych projektów Eclipse.


===Wyłączenie metody===
===Punkt wyjściowy===
Zaznacz fragment metody oraz wywołaj z menu kontekstowego opcję Refactor->Extract Method.
Na początku kalkulator wykonuje 4 podstawowe operacje matematyczne: +, -, *, / na liczbach całkowitych
Kalkulator wczytuje polecenia ze strumienia wejściowego, po jednym w każdej linii. Polecenie ma postać:


W jakiej sytuacji takie przekształcenie jest niewykonalne?
'''liczba operator liczba'''


===Rozwijnie wyrażenia===
przy czym między liczbami a operatorem znajduje się zawsze przynajmniej jedna spacja.
Wskaż zmienną lokalną, a następnie wywołaj z menu kontekstowego opcję Refactor->Inline
Program w odpowiedzi wyświetla wyniki wykonania operacji.
Operację wykonaj dla potrzeb wyrażenia ''i + 2'' oraz ''st.nextToken()''. Na czym polega różnica w ich wykonaniu? Kiedy przekształcenie to jest niepoprawne?


===Przenoszenie metody===
Przykładowe programy, posiadające opisaną w tym punkcie funkcjonalność, znajdują się [[media:io-13-lab.zip|tutaj]]. Są to dwa niezależne rozwiązania:
Przenieś metodę statyczną do innej klasy.  
* KalkulatorA, stosujące podejście strukturalne
* KalkulatorB, wykorzystujące mechanizmy obiektowe
Zastanów się, którego z szablonów wolisz użyć. Jakie są kryteria wyboru?


W jaki sposób jest obecnie wykonywane wywołanie tej metody w dotychczasowej klasie?
===Krok 1===
Rozszerz kalkulator o wykonywanie operacji bitowych dwuargumentowych alternatywy (|) i koniunkcji (&). Zastąp liczby całkowite liczbami zmiennoprzecinkowymi


Przenieś metodę obiektu do innej klasy.
===Krok 2===
Zastąp notację infiksową notacją RPN, w której argumenty odkładane są na stosie ulegającym redukcji. Np. zapis  2 + 3 będzie miał postać 2 3 +


W jaki sposób jest obecnie wykonywane wywołanie tej metody w dotychczasowej klasie?
===Krok 3===
Zaimplementuj operacje na ułamkach zwykłych, zapisywanych w postaci a/b (bez spacji).
Wynik obliczany powinien skracać ułamki oraz wyłączać części całe.


===Zmiana sygnatury metody===
==Pytania do dyskusji==
Do wybranej metody dodaj nowy parametr. W jaki sposób zmieniły się wywołania tej metody? Czy mogło to zmienić jej zachowanie?
* Na podstawie rozwoju programu oceń jakość kodu na kolejnych etapach. Co - Twoim zdaniem - jest najważniejszym elementem przyczyniającym się do jakości kodu programu w kolejnych iteracjach?
 
* Czy wybór początkowego rozwiązania miał wpływ na jakość końcowej wersji?
Z innej metody usuń parametr. W jaki sposób zmieniły się wywołania tej metody? Czy mogło to zmienić jej zachowanie?
 
===Przenoszenie składowych w obrębie hierarchii dziedziczenia===
Przenieś metodę z podklasy do nadklasy. W jakich okolicznościach wykonanie takiej operacji jest niemożliwe?
 
Przenieś metodę z nadklasy do podklasy. W jakich okolicznościach wykonanie takiej operacji jest niemożliwe?
 
==Literatura==
# D. Gallardo "Refactoring for everyone" [http://www-128.ibm.com/developerworks/library/os-ecref IBM DeveloperWorks]

Wersja z 23:47, 4 wrz 2006

Ćwiczenie 13. Ewolucja oprogramowania

Informacje wstępne

Ćwiczenie jest realizowane w języku Java w środowisku Eclipse 3.2. Celem ćwiczenia jest zrealizowanie prostego programu rozwijanego w wielu przyrostach.

Zadanie 1

W kolejnych krokach będzie rozwijany program realizujący proste obliczenia matematyczne. Należy każdy krok zapisywać w postaci osobnych projektów Eclipse.

Punkt wyjściowy

Na początku kalkulator wykonuje 4 podstawowe operacje matematyczne: +, -, *, / na liczbach całkowitych Kalkulator wczytuje polecenia ze strumienia wejściowego, po jednym w każdej linii. Polecenie ma postać:

liczba operator liczba

przy czym między liczbami a operatorem znajduje się zawsze przynajmniej jedna spacja. Program w odpowiedzi wyświetla wyniki wykonania operacji.

Przykładowe programy, posiadające opisaną w tym punkcie funkcjonalność, znajdują się tutaj. Są to dwa niezależne rozwiązania:

  • KalkulatorA, stosujące podejście strukturalne
  • KalkulatorB, wykorzystujące mechanizmy obiektowe

Zastanów się, którego z szablonów wolisz użyć. Jakie są kryteria wyboru?

Krok 1

Rozszerz kalkulator o wykonywanie operacji bitowych dwuargumentowych alternatywy (|) i koniunkcji (&). Zastąp liczby całkowite liczbami zmiennoprzecinkowymi

Krok 2

Zastąp notację infiksową notacją RPN, w której argumenty odkładane są na stosie ulegającym redukcji. Np. zapis 2 + 3 będzie miał postać 2 3 +

Krok 3

Zaimplementuj operacje na ułamkach zwykłych, zapisywanych w postaci a/b (bez spacji). Wynik obliczany powinien skracać ułamki oraz wyłączać części całe.

Pytania do dyskusji

  • Na podstawie rozwoju programu oceń jakość kodu na kolejnych etapach. Co - Twoim zdaniem - jest najważniejszym elementem przyczyniającym się do jakości kodu programu w kolejnych iteracjach?
  • Czy wybór początkowego rozwiązania miał wpływ na jakość końcowej wersji?