Nowoczesne metody tworzenia aplikacji w języku java
Transkrypt
Nowoczesne metody tworzenia aplikacji w języku java
Nowoczesne metody tworzenia oprogramowania w języku Java Podstawowe techniki • • • • Agile modeling Test-driven development Refactoring eXtreme Programming Agile modeling • Standard UML – Diagramy przypadków użycia – Diagramy klas – Diagramy sekwencji • Wzorce projektowe • Zasady projektowania • Korzyści stosowania Test-driven development • • • • Problemy integracji Rodzaje testów Zasady budowania testów Korzyści stosowania Refactoring • Poprawianie „dobrego” • Podstawowe zasady i techniki • Korzyści stosowania eXtreme Programming • • • • • XP = AM + TDD + Ref +… „Klient nasz pan” „Co dwie głowy to nie jedna” Czytelność i prostota (!) Korzyści stosowania Środowisko programistyczne • • • • Edytory UML (Poseidon for UML) IDE (Eclipse) Narzędzia testujące (JUnit) Narzędzia sprawdzające poprawność konwencji (checkstyle) • Narzędzia dokumentujące (javadoc) • Narzędzia automatyzacji procesu tworzenia (apache-ant) Proces produkcji oprogramowania Projektowanie Przypadki użycia Diagramy klas Diagramy sekwencji Kodowanie Iteracja Dokumentacja (!) Testy Implementacja Refaktoryzacja Projektowanie – przypadki użycia Diagramy przypadków użycia opisują, co robi system z punktu widzenia zewnętrznego obserwatora. Projektowanie – diagramy klas Diagram klas przedstawia ogólną panoramę systemu, pokazując klasy i ich wzajemne relacje. Projektowanie – diagramy sekwencji Diagram sekwencji pokazuje w jaki sposób wykonywane są operacje. Kodowanie - dokumentacja Dokumentacja ułatwia czytanie kodu, ale również opisuje kod, który jeszcze nie istnieje /** * Sprawdza, czy zapamietana data jest pozniejsza od podanej w parametrze. * @param date data do porownania * @return true, jesli zapamietana data jest pozniejsza od podanej w parametrze * @throws NullPointerException parametr date jest rowny null */ public boolean isLaterThan(Date date) throws NullPointerException { } Kodowanie - testy Testowanie gwarantuje sprawność już napisanego kodu /** * Dodaje liczbe „druga” do aktualnej * @param druga liczba do dodania * @throw NullPointerException * parametr „druga” jest rowny null */ public Liczba dodaj(Liczba druga) throws NullPointerException { } public class LiczbaTest extends TestCase { public void testDodaj { Liczba a = new Liczba(123); try { assertEqual(246, a.dodaj(a).getValue); } catch (Exception e) { fail(); } try { a.dodaj(null); fail(); } catch (NullPointerException e) { } } Kodowanie - implementacja Implementacja jest jednym z późniejszych etapów procesu, ale dzięki temu dokładnie wiadomo co dana metoda powinna robić. • Jak najprostsze funkcje • Projektowanie podczas implementacji • Pamiętać o kolejności Dokumentacja Test Implementacja • „TODO” (!) Kodowanie - refaktoryzacja Refaktoryzacja polega na poprawianiu działającego kodu. public double poleKola(double r) { return Math.pi() * pow(r, 2.0); } public double f02x(double d363) { if (d363<0.0) { return -2*Math.pi() *d363; } else { return Math.pi() * Math.pow(d363, 2); } } public double obwodKola(double r) { return 2.0 * Math.pi() *r } public double liczObwodLubPole( double r) { if (r<0.0) { return obwodKola(-r); } else { return poleKola(r); } } Integracja całego procesu • • • • Zastosowanie apache-ant Przykładowy plik „build.xml” Możliwości Integracja ze środowiskiem Eclipse Aspect-Oriented Programming, AOP • modularyzacja tzw. zagadnień przecinających (cross-cutting concerns). Wprowadzane przez nie pojęcia punktów łączeń, punktów cięcia, rad i aspektów charakteryzują się podobieństwem składniowym do funkcjonujących już od dawna konstrukcji języków obiektowych, czyniąc analizę programów aspektowych łatwiejszą. Spotyka się już w tej chwili opracowania refaktoryzacji aspektowych, modyfikujących zarówno kod programu w tradycyjnym języku obiektowym, jak i kod stowarzyszonych z nim jednostek kompilacji aspektów.