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.