1 / 20

Jak dzielić na moduły?

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.

evette
Download Presentation

Jak dzielić na moduły?

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


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

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

More Related