Szczególne problemy projektowania aplikacji Jarosław Kuchta
Miejsce projektowania w cyklu wytwarzania aplikacji SWS Analiza systemowa Analiza statyczna Analiza funkcjonalna Analiza dynamiczna Analiza behawioralna Projektowanie systemowe Projektowanie szczegółowe Projektowanie w dziedzinie problemu Projektowanie interfejsu użytkownika Projektowanie struktury danych Projektowanie architektury systemu Implementacja Implementacja struktury klas Implementacja interfejsu użytkownika Implementacja struktury danych Opracowanie dokumentacji użytkowej 2/14
Analiza systemowa Cel: Osiągnięcie właściwego poziomu zrozumienia pomiędzy zespołem projektowym a klientem odnośnie tego co ma system robić Aktywności Analizowanie wymagań systemowych Modelowanie wymaganego systemu Prototypowanie systemu 3/14
Aspekty analizy Aspekt statyczny Analiza struktury systemu: elementów składowych (klas, obiektów), ich właściwości i relacji między nimi Aspekt funkcjonalny Analiza funkcjonalności systemu: funkcji udostępnianych przez system dla użytkowników lub innych systemów Aspekt behawioralny Analiza zachowania systemu i jego elementów składowych: ich reakcji na zdarzenia pochodzące od użytkowników lub innych systemów Aspekt dynamiczny Analiza relacji w czasie i zmian czasowych zachodzących w systemie i pomiędzy systemem a jego użytkownikami lub innymi systemami 4/14
Modele analityczne Model klas i obiektów (a.statyczny) Model przypadków użycia (a.funkcjonalny) Model kolaboracji (a.funkcjonalny) Model przepływu danych (a.funkcjonalny) Model czasowy (a.dynamiczny) Model przejść stanów (a.behawioralny) Model aktywności (a.funkcjonalny, behawioralny, dynamiczny) 5/14
Cele projektowania Projektowanie systemowe Określenie zgrubnej struktury systemu dla zrozumienia jak system ma być zrealizowany Projektowanie szczegółowe Określenie szczegółowej struktury systemu dla ułatwienia poprawnej implementacji projektu 6/14
Aspekty projektowania Projektowanie w dziedzinie problemu (projekt biznesowy) Odwzorowanie modelu analitycznego w zbiór klas, obiektów, ich właściwości, relacji i funkcjonalności możliwych do zrealizowania w systemie informatycznym Projektowanie interfejsu użytkownika Zaprojektowanie klas, obiektów, ich właściwości, relacji i funkcjonalności niezbędnych do komunikacji pomiędzy systemem informatycznym a jego użytkownikami Projektowanie struktury danych Zaprojektowanie klas, obiektów, ich właściwości, relacji i funkcjonalności niezbędnych do przechowywania danych przez system Projektowanie architektury systemu Określenie elementów składowych systemu tworzących jego fizyczną strukturę 7/14
Modele projektowe Modele analityczne + Model interfejsu użytkownika Model struktury danych Model architektury systemu Model rozwinięcia systemu 8/14
Szczególne wymagania dla aplikacji W czasie specyfikacji wymagań trzeba określić: Wymagania co do architektury systemu (organizacja przedsiębiorstwa) Wymagania wydajnościowe (trudne do określenia) Wymagania co do bezpieczeństwa Wymagania co do globalizacji 9/14
Szczególne problemy projektowania aplikacji rozproszonych (1) Opracowanie odpowiedniej architektury rozproszonej (model komponentów, model wdrożenia) niedookreślone pojęcie komponentu systemowego (klient, serwer) zrozumienie różnicy: komponent softwarowy, komponent hardwarowy zrozumienie różnicy: architektura wielowarstwowa (multilayer) v.s. architektura wielopienna (multitier) Przekształcenie analitycznego modelu klas w projektowy model klas analityczny model klas jest zintegrowany, a projektowy model klas musi być dopasowany do architektury wielowarstwowej i wielopiennej, klasy powiązane logicznie tworzą pakiety rozdzielane między warstwy jedna klasa modelowa może być odwzorowywana w wiele klas programistycznych (modele MVC i MVVM aplikacji) ograniczenia automatyzacji odwzorowania 10/14
Szczególne problemy projektowania aplikacji rozproszonych (2) Odpowiedni podział funkcjonalności między komponenty rozproszone ile funkcjonalności po stronie klienta (bezpieczeństwo klienta v.s. ochrona serwera przed przeciążeniem) ograniczenia technologiczne po stronie klienta zapewnienie wydajności komunikacji (redukcja ilości przesyłanych danych) zapewnienie synchronizacji przetwarzanych danych (identyfikacja obiektów danych, synchronizacja rozproszonej bazy danych) zapewnienie skalowalności systemu (architektura wielopienna, równoważenie obciążenia) 11/14
Szczególne problemy projektowania aplikacji rozproszonych (3) Problemy bezpieczeństwa uwierzytelnianie użytkowników (role użytkowników) bezpieczeństwo komunikacji (szyfrowanie komunikacji, infrastruktura klucza publicznego) odporność na ataki (audyt bezpieczeństwa) Problemy dostępności i niezawodności dostępność 7/24 (a kiedy konserwacja i aktualizacja systemu) odporność na awarie (zabezpieczenia sprzętowe i systemowe) Problemy użyteczności i globalizacji określenie docelowej grupy użytkowników (dopasowanie interfejsu użytkownika) wielojęzyczny interfejs użytkownika różnice kulturowe przenośność oprogramowania klienckiego (różne SO i różny sprzęt) 12/14
Tematyka dalszych zajęć (1) P.Kaczmarek podstawowe wzorce projektowe GoF: funkcjonalne, behawioralne i strukturalne metody komunikacji rozproszonej (send-receive, RMI, Messaging, streaming) wzorce i zasady architektoniczne: wzorzec Domain Model zasada Dependency Inversion wzorce Data Access Object / Repository Object interface Segregation Principle zasady clean code zasady obsługi wyjątków w aplikacjach rozproszonych 13/14
Tematyka dalszych zajęć (2) J.Kuchta Projektowanie architektury systemu rozproszonego: architektury wielowarstwowe i wielopienne Wzorce projektowe warstwy danych: Data Access Object, Transfer Object, Value List Handler Wzorce projektowe warstwy biznesowej: Transfer Object Assembler, Composite Entry, Business Delegate Wzorce projektowe warstwy usług: Service Locator, Service Activator, Session Facade, Wzorce projektowe warstwy aplikacji: Front Controller, Dispatcher View, Service To Worker Wzorce projektowe warstwy prezentacji: Intercepting Filter, View Helper, Composite View 14/14