200 likes | 428 Views
Jak dzielić na moduły?. Łukasz Kamiński 2008-01-10. Założenia początkowe. Język Java. Znajomość baz danych. Podstawowa znajomość sieci. Co to jest moduł?. Moduł utożsamiajmy intuicyjnie moduł z poddrzewem pakietów w Javie. Przykład modułu.
E N D
Jak dzielić na moduły? Łukasz Kamiński 2008-01-10
Założenia początkowe. • Język Java. • Znajomość baz danych. • Podstawowa znajomość sieci.
Co to jest moduł? • Moduł utożsamiajmy intuicyjnie moduł z poddrzewem pakietów w Javie. • Przykład modułu. • Definicja (Wiki) – Moduł (pakiet, unit - ang.) to oddzielny (względem aplikacji go wykorzystujących) twór, zawierający dostępne w nim implementacje typów wartości, zmiennych, stałych oraz treści procedur i funkcji. Moduł (module) - procedura, która realizuje w systemie komputerowym jedną lub kilka funkcji przedsiębiorstwa lub części tych funkcji. W konsekwencji moduł będzie często wdrażany jako program komputerowy. • Wiele różnych znaczeń w różnych miejscach informatyki (np. w różnych językach). • Z punktu widzenia inżynierii pojęcie bardzo arbitralne.
Aspekty tworzenia modułów. • Wielkość kodu. • Soft, który ma 1KLOC inaczej się dzieli niż kod o 1000KLOC. • Wymagania funkcjonalne. • Bieżące, ale także przyszłe.... • Cykl życia aplikacji. • Organizacja zespołu programistów.
Podział na moduły – przykłady. • OPSS – zadanie Weselne toasty. • 93 linie kodu. • System wydawniczy. • 25KLOC. • Zespół jednoosobowy. • 4 lata pracy. • OCEAN GenRap. • 500KLOC (+kod generowany 1500KLOC). • Zespół 30 osób. • 3 lata pracy.
Moduły a funkcjonalność. • Postawmy się w pozycji programisty, który rozpoczyna projekt i ma podzielić zadanie na moduły. • Moduły definiuje programista! • Przykład TV Everywhere. • Założenia – dobrze znane. • Jak podzielić na moduły?
Moduły a funkcjonalność. • Moduły definiuje programista. • Przykład TV Everywhere. • Założenia – dobrze znane. • Rozwiązanie (sensowne): • Moduł przechwytywania TV. • Moduł kompresji Video. • Moduł komunikacji (serwer). • Moduł komunikacji (klient). • Moduł dekompresji Video. • Moduł pokazywania Video.
Moduły a funkcjonalność. • Postawmy się w pozycji programisty, który rozpoczyna projekt i ma podzielić zadanie na moduły. • Przykład. • Fotoradar – dobrze znane. • Przykłady podziału zadania.
Moduły a funkcjonalność. • Fotoradar – podział na moduły. • Analiza obrazu. • Wtyczki w proces analizy obrazu. • Możliwość dostosowywania procesu analizy do potrzeb. • Heterogeniczne źródła danych (różne urządzenia, podczerwień). • Interfejs użytkownika. • Możliwość swobodnej konfiguracji parametrów analizy obrazu. • Problem w przypadku zmian algorytmu analizy. • Wynik. • Analiza danych wynikowych. • Konfiguracja przechowywania danych. • Konfiguracja komunikacji z innymi instancjami. • Powtórna analiza danych (dwu-przebiegowa, rozproszona). • Warstwa sprzętowa. • Wybór technologii implementacji.
Zasada tworzenia modułów. • Podstawowa zasada: • Interfejs modułu powinien być prosty! • Co to jest interfejs? • Co to znaczy prosty?
Interfejs modułu. • Interfejs modułu to wszystkie elementy, które moduł udostępnia ze zewnątrz siebie. • Co wchodzi z skład interfejsu modułu w Javie? • SQLStatement.execute i język SQL. • java.awt.Graphics2D – rozmiar większy niż xxx. • new byte[-25]? • ByteArrayOutputStream, writeInt.
Interfejs modułu. • Interfejs modułu w Javie. • Czysto formalnie • Klasy/interfejsy publiczne. • Metody/stałe/pola publiczne klas publicznych. • W rzeczywistości • Typy parametrów + założenia poprawności parametrów + formaty danych. • Typy wyników + definicje wyjątków + założenia rzucania wyjątków. • Zasoby zewnętrzne (pliki, okienka, baza danych, urządzenia, etc.) • Struktura bazy danych. • Specyfikacja protokołu.
Ćwiczenie – interfejs modułu. • java.sql.SQLStatement::execute(String). • java.awt.Graphics2D() • new byte[<size>] • ByteArrayOutputStream::writeInt. • Przykłady.
Prostota interfejsu. • Prostota interfejsu to ilość elementów negatywnych (im mniej tym interfejs prostszy). • Elementy pozytywne • Typy proste (int, String, byte, double, etc. i klasy zawierające typy proste [rekurencyjnie]) - dane. • Elementy negatywne • Definicje niejawne (np. wyjątki, poprawność parametrów, dziedziczenie implementacji). • Zasoby (wszelakie, pliki, okienka, sockety, baza danych). • Zależność od komponentów zewnętrznych.
Przykłady. • Pattern – referencja do zasobu. • Odczyt plików – przyk1.cpp. • Antypattern – baza danych – przyk2.php. • Przykład: readfile – przyk3.cpp • Pattern – separacja algorytmów. • bsdiff. • Implementacje online, np. wyszukiwanie wzorca. • Pattern – BlackBox • bsdiff – interfejsy – C(pliki H), Java. • Problemy (zarządzanie cyklem życia!) • Bufor odczytu danych – przyk4.java
Przykłady. • Pattern – biblioteki zewnętrzne • Opakowanie własnym interfejsem – przyk9. • Pattern – not null – przyk6. • Istnienie nulla ma sens tylko w przypadkach • Integracji z bibliotekami zewnętrznymi. • Szybkim prototypowaniu aplikacji. • Szybkim bugfixowaniu istniejącego kodu. • Pattern – jawne kontrakty. • Sprawdzenie kontraktu – przyk8. • Czasami niemożliwe do sensownej realizacji.
Przykłady cd. • Pattern – wieloplatformowość • Java vs .NET • C++, Linux vs Windows – przyk7 • Pattern - protokoły komunikacji. • Kod „pure”. • Oddzielenie czytania od realizacji protokołu. • State x byte[] -> State x Cmds[] – przyk5.java. • Podstawowa wada? • Pattern – obsługa OutOfMemory • Jak obsługiwać?
Kryteria oceny modułu. • Prostota interfejsu. • Brak cykli w implementacji. • Jeśli interfejs da się zaimplementować po webserwisie, to jest ok. • Przesłanie komunikatu z nazwą metody, parametrami (serializacja) oraz zwrócenie wyniku (serializacja). • Pełna separacja środowiska wykonania. • Separacja maszyn wirtualnych – np. referencje w Javie. • Separacja zasobów (dyski, urządzenia) – np. nazwy plików. • Separacja środowiska sieciowego – np. adresy komputerów.
Zagrożenia stosowania zasad. • Dwie strategie. • Podział na code + biblioteki logiki. • Zalety – bardzo dużo kodu „pure”. • Wady – rozrost kodu w core, nad którym trudno panować. • Opakowanie zasobów. • Zalety – elastyczny dostęp do zasobów. • Wady – błędy, obsługa wszędzie wszystkiego. • Sensowny podział w moduły kosztuje. Trzeba pilnować, aby nie przeinwestować!
Sprawy organizacyjne • Następne zajęcia (2008-01-24) • Prezentacja wyników prac – I semestr. • Weryfikacja realizacji założeń. • Prezentacja działających wyników. • Publikacja wyników. • Wystawienie w dostępnym dla mnie miejscu kodów źródłowych i wersji demo. • Licencjat.