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

Slides:



Advertisements
Podobne prezentacje
Architektura SAP R/3 Wybrane zagadnienia.
Advertisements

Interfejs użytkownika do zarządzania konfiguracją oprogramowania
System Rejestracji Użytkowników Sieci Komputerowej Osiedla Studenckiego Politechniki Gdańskiej Wspólna inicjatywa Ośrodka Informatyki PG i Webstera.
Bezpieczeństwo aplikacji WWW
Role w zespole projektowym
CORBA Łukasz Wnęk.
Rozszerzalność systemów rozproszonych
1 Linux jako system wielozadaniowy i wielodostępny.
Architektura systemu Gra strategiczna „Strusia Jama”
Politechnika Gdańska WYDZIAŁ ELEKTRONIKI TELEKOMUNIKACJI I INFORMATYKI
Politechnika Gdańska WYDZIAŁ ELEKTRONIKI TELEKOMUNIKACJI I INFORMATYKI
Internet Communication Engine
Podstawy informatyki Powtórka Grupa: 1A Prowadzący: Grzegorz Smyk
Wykład nr 2: Struktura systemu komputerowego a system operacyjny
Systemy operacyjne.
Systemy operacyjne Bibliografia:
Enteprise Java Beans Emil Wcisło.
Wzorce projektowe w J2EE
Systemy zarządzania treścią CMS
Modele baz danych - spojrzenie na poziom fizyczny
REPOZYTORIA 1. Co to są repozytoria?
Analiza, projekt i częściowa implementacja systemu obsługi kina
Wykład 2 Cykl życia systemu informacyjnego
Pakiety w Javie Łukasz Smyczyński (132834). Czym są pakiety? Klasy w Javie są grupowane w pewne zbiory zwane pakietami. Pakiety są więc pewnym podzbiorem.
Podstawy programowania II
Rozwój aplikacji przy wykorzystaniu ASP.NET
IT Asset Management Service
Instytut Tele- i Radiotechniczny WARSZAWA
WebQuest wykonane w ramach projektu BelferOnLine
Podstawy Programowania
BUDOWA I DZIAŁANIE SIECI KOMPUTEROWYCH
Lokalne serwery www Serwer WWW - ang. Web server jest to oprogramowanie zainstalowane na serwerze podłączonym do sieci Internet. Używające technologii.
Prezentacja i szkolenie
Rozdział 1: Wprowadzenie do systemu Windows 2000 i podstaw sieci
Model OSI Model OSI (Open Systems Interconnection Reference Model) został wprowadzony w celu ujednolicenia regół komunikacji sieciowej. Obejmuje on cały.
Sieciowe Systemy Operacyjne
Programowanie obiektowe – zastosowanie języka Java SE
Buforowanie D e f i n i c j a.
Implementacja systemu
„Kalkulator zużycia oraz kosztu energii elektrycznej online „
SYSTEMY OPERACYJNE Adresowanie IP cz3.
SPECJALNOŚĆ: Oprogramowanie Systemowe
Model warstwowy sieci ISO/OSI
Model obiektowy bazy danych
Jednym z podstawowych celów tworzenia sieci komputerowych jest współdzielenie zasobów, takich jak pliki lub drukarki. Każdy z takich zasobów musi być udostępniony,
Projekt realizowany w ramach Software Development Studio (SDS) Wizualne środowisko do tworzenia aplikacji webowych.
HTML (ang. HyperText Markup Language ) – język do tworzenia stron internetowych opierający się na znacznikach, czy inaczej je nazywając – tagach. Język.
Projektowanie Aplikacji Internetowych Artur Niewiarowski Wydział Fizyki, Matematyki i Informatyki Politechnika Krakowska.
Administracja systemami operacyjnymi Wiosna 2015 Wykład 1 Organizacja zajęć dr inż. Wojciech Bieniecki Instytut Nauk Ekonomicznych i Informatyki
Hibernate Podstawy.
Odwzorowania relacyjno-obiektowe Hibernate Podstawy.
Waldemar Bartyna 1 Programowanie zaawansowane LINQ to XML.
Wzorce Projektowe w JAVA
Platforma .Net.
Podstawy programowania
Struktura systemu operacyjnego
WYŻSZA SZKOŁA INFORMATYKI I ZARZĄDZANIA z siedzibą w Rzeszowie WYDZIAŁ INFORMATYKI STOSOWANEJ VPN TYPU KLIENT-SERWER, KONFIGURACJA NA MICROSOFT ISA 2006.
Temat: Porównanie technologii php,c# oraz javascript na przykładzie webaplikacji typu społecznościowy agregator treści Autor: Wojciech Ślawski.
Języki i technologie wytwarzania stron WWW Autor: Michał Walkowski Referat.
T ESTY JEDNOSTKOWE W C# Alicja Majka, A GENDA Wprowadzenie do środowiska Czym są testy jednostkowe i po co je stosować? XUnit, NUnit Pokrycie.
Architektura Rafał Hryniów. Architektura Wizja projektu systemu, którą dzielą twórcy Struktura komponentów systemu, ich powiązań oraz zasad i reguł określających.
Analiza, projekt i częściowa implementacja systemu wspomagania pracy Referatu Reprografii Promotor: mgr inż. Dariusz OlczykWykonała: Katarzyna Ściwiarska.
System lokalizacji GPS
Programowanie Obiektowe – Wykład 2
Content Management System
Aplikacje i usługi internetowe
Wprowadzenie do programowania obiektowego
Podstawy programowania
JavaBeans by Paweł Wąsala
Zapis prezentacji:

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