Pobieranie prezentacji. Proszę czekać

Pobieranie prezentacji. Proszę czekać

Jak dzielić na moduły? Łukasz Kamiński 2008-01-10.

Podobne prezentacje


Prezentacja na temat: "Jak dzielić na moduły? Łukasz Kamiński 2008-01-10."— Zapis prezentacji:

1 Jak dzielić na moduły? Łukasz Kamiński

2 Założenia początkowe. Język Java. Znajomość baz danych.
Podstawowa znajomość sieci.

3 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.

4 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.

5 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.

6 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?

7 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.

8 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.

9 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.

10 Zasada tworzenia modułów.
Podstawowa zasada: Interfejs modułu powinien być prosty! Co to jest interfejs? Co to znaczy prosty?

11 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.

12 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.

13 Ćwiczenie – interfejs modułu.
java.sql.SQLStatement::execute(String). java.awt.Graphics2D() new byte[<size>] ByteArrayOutputStream::writeInt. Przykłady.

14 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.

15 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

16 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.

17 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ć?

18 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.

19 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ć!

20 Sprawy organizacyjne Następne zajęcia (2008-01-24) Publikacja wyników.
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.


Pobierz ppt "Jak dzielić na moduły? Łukasz Kamiński 2008-01-10."

Podobne prezentacje


Reklamy Google