Io-13-lab-wiki: Różnice pomiędzy wersjami
(Nie pokazano 11 pośrednich wersji utworzonych przez tego samego użytkownika) | |||
Linia 3: | Linia 3: | ||
==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. | ||
Celem ćwiczenia jest | Celem ćwiczenia jest przeanalizowanie rozwoju niewielkiego programu i jego wpływu zmian na jego jakość. | ||
== | ==Instalacja== | ||
Przygotowanie do ćwiczenia polega na zainstalowaniu [http://java.sun.com/javase/downloads/index.jsp JDK 5.0] oraz środowiska [http://www.eclipse.org/downloads Eclipse] w wersji 3.2 | |||
Po uruchomieniu środowiska i wyborze przestrzeni roboczej należy zaimportować [[media:io-13-lab.zip|projekt]] z rozwiązaniami początkowymi. | |||
=== | ==Zadanie== | ||
W kolejnych krokach będzie rozwijany program-kalkulator realizujący proste obliczenia matematyczne. Przed przeczytaniem poleceń do kolejnego kroku należy zakończyć implementację poprzedniego. | |||
Warto także zapisywać kolejne kroki w postaci osobnych projektów Eclipse, aby umożliwić późniejsze porównania jakości. | |||
===Wersja początkowa=== | |||
W wersji początkowej program wykonuje 4 podstawowe dwuargumentowe operacje matematyczne: +, -, *, / na liczbach całkowitych typu ''int''. | |||
Kalkulator wczytuje polecenia ze strumienia wejściowego, po jednym w każdej linii. Polecenie ma postać: | Kalkulator wczytuje polecenia ze strumienia wejściowego, po jednym w każdej linii. Polecenie ma postać: | ||
'''liczba operator liczba''' | '''liczba''' ''operator'' '''liczba''' | ||
przy czym między liczbami a operatorem znajduje się zawsze przynajmniej jedna spacja. | przy czym między liczbami a operatorem znajduje się zawsze przynajmniej jedna spacja. | ||
Linia 18: | Linia 23: | ||
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: | 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: | ||
* KalkulatorA, stosujące podejście strukturalne | * ''KalkulatorA'', stosujące podejście strukturalne, zbudowane wewnątrz ''main()'' w jednej klasie | ||
* KalkulatorB, wykorzystujące mechanizmy obiektowe | * ''KalkulatorB'', wykorzystujące mechanizmy obiektowe w celu oddzielenia implementacji kalkulatora od operacji matematycznych | ||
Zastanów się, | Zastanów się, której z wersji wolisz użyć do dalszych prac. Jakie są kryteria wyboru? | ||
===Krok 1=== | ===Krok 1=== | ||
Linia 26: | Linia 31: | ||
<span style="font-variant:small-caps">Treść zadania </span> | <span style="font-variant:small-caps">Treść zadania </span> | ||
<div class="mw-collapsible-content" style="display:none"> | <div class="mw-collapsible-content" style="display:none"> | ||
Rozszerz kalkulator o wykonywanie operacji bitowych | Rozszerz kalkulator o wykonywanie dwuargumentowych operacji bitowych: alternatywy (oznaczanej symbolem "||") i koniunkcji (oznaczanej symbolem "&&"). | ||
</div> | </div> | ||
</div> | </div> | ||
===Krok 2=== | ===Krok 2=== | ||
Zastąp notację infiksową notacją RPN, w której argumenty odkładane są na stosie ulegającym redukcji. | <div class="mw-collapsible mw-made=collapsible mw-collapsed"> | ||
<span style="font-variant:small-caps">Treść zadania </span> | |||
<div class="mw-collapsible-content" style="display:none"> | |||
Zastąp istniejącą notację infiksową notacją postfiksową RPN (ang. ''reverse polish notation''), w której argumenty odkładane są na stosie ulegającym redukcji w momencie wykonania działania. | |||
W ten sposób zapis dotychczasowy zapis ''2 + 3'' będzie miał postać ''2 3 +''. Na stosie odłożone zostaną argumenty ''2'' i ''3'', a wczytanie operatora + spowoduje wykonanie redukcji na stosie poprzez zdjęcie dwóch elementów, wykonanie dodawania i odłożenie na stosie wyniku operacji. | |||
Użycie notacji RPN pozwala na obliczanie wartości złożonych wyrażeń bez konieczności pamiętania o priorytecie poszczególnych operatorów. | |||
</div> | |||
</div> | |||
===Krok 3=== | ===Krok 3=== | ||
Zaimplementuj operacje na ułamkach zwykłych, zapisywanych w postaci a/b (bez spacji). | <div class="mw-collapsible mw-made=collapsible mw-collapsed"> | ||
<span style="font-variant:small-caps">Treść zadania </span> | |||
<div class="mw-collapsible-content" style="display:none"> | |||
Zaimplementuj w kalkulatorze operacje na ułamkach zwykłych, zapisywanych w postaci ''a/b'' (bez spacji). Licznik i mianowanik ułamka są zawsze liczbami naturalnymi. | |||
Wersja rozszerzona zadania może zawierać także mechanizm skracania ułamków i wyłączania całości. | |||
</div> | |||
</div> | |||
==Pytania do dyskusji== | ==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? | * Na podstawie rozwoju programu oceń jakość kodu na kolejnych etapach. Co - Twoim zdaniem - jest najważniejszym elementem przyczyniającym się do utrzymania lub nawet poprawy jakości kodu programu w kolejnych iteracjach? | ||
* Czy wybór początkowego | * Czy wybór początkowego wersji początkowej programu (A lub B) miał wpływ na jakość końcowej wersji? |
Aktualna wersja na dzień 20:55, 5 wrz 2006
Ćwiczenie 13. Ewolucja oprogramowania
Informacje wstępne
Ćwiczenie jest realizowane w języku Java w środowisku Eclipse 3.2. Celem ćwiczenia jest przeanalizowanie rozwoju niewielkiego programu i jego wpływu zmian na jego jakość.
Instalacja
Przygotowanie do ćwiczenia polega na zainstalowaniu JDK 5.0 oraz środowiska Eclipse w wersji 3.2 Po uruchomieniu środowiska i wyborze przestrzeni roboczej należy zaimportować projekt z rozwiązaniami początkowymi.
Zadanie
W kolejnych krokach będzie rozwijany program-kalkulator realizujący proste obliczenia matematyczne. Przed przeczytaniem poleceń do kolejnego kroku należy zakończyć implementację poprzedniego. Warto także zapisywać kolejne kroki w postaci osobnych projektów Eclipse, aby umożliwić późniejsze porównania jakości.
Wersja początkowa
W wersji początkowej program wykonuje 4 podstawowe dwuargumentowe operacje matematyczne: +, -, *, / na liczbach całkowitych typu int. 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, zbudowane wewnątrz main() w jednej klasie
- KalkulatorB, wykorzystujące mechanizmy obiektowe w celu oddzielenia implementacji kalkulatora od operacji matematycznych
Zastanów się, której z wersji wolisz użyć do dalszych prac. Jakie są kryteria wyboru?
Krok 1
Treść zadania
Krok 2
Treść zadania
Krok 3
Treść zadania
Pytania do dyskusji
- Na podstawie rozwoju programu oceń jakość kodu na kolejnych etapach. Co - Twoim zdaniem - jest najważniejszym elementem przyczyniającym się do utrzymania lub nawet poprawy jakości kodu programu w kolejnych iteracjach?
- Czy wybór początkowego wersji początkowej programu (A lub B) miał wpływ na jakość końcowej wersji?