Komponentowe systemy rozproszone Komponenty i zależności.

Slides:



Advertisements
Podobne prezentacje
Agile w praktyce, czyli jak to robimy naprawdę
Advertisements

Zarządzanie konfiguracją oprogramowania
Architektura SAP R/3 Wybrane zagadnienia.
Programowanie obiektowe
Projektowanie w cyklu życia oprogramowania
Opis metodyki i procesu produkcji oprogramowania
©Ian Sommerville 2000 Software Engineering, 6th edition. Chapter 28Slide 1 Restrukturyzacja oprogramowania l Reorganizowanie i modyfikowanie istniejącego.
FIT Środowisko Testów Integracyjnych
Obiektowe metody projektowania systemów
Programowanie w środowiskach zintegrowanych wykład 1 PSZ Programowanie w Środowiskach Zintegrowanych > Systemy i środowiska zintegrowane > Środowisko zintegrowane.
Cykle życia oprogramowania
Wykład 2. Wprowadzenie do architektur systemów rozproszonych
Biblioteki i przestrzenie nazw
Zasady zaliczenia Warunki uzyskania zaliczenia:
Enteprise Java Beans Emil Wcisło.
Rational Unified Process
Wzorce projektowe w J2EE
Projektowanie i programowanie obiektowe II - Wykład IV
Modele baz danych - spojrzenie na poziom fizyczny
Wykład 5 UML - Unified Modeling Language
Wykład 2 Cykl życia systemu informacyjnego
C.d. wstępu do tematyki RUP
Adam Gabryś , v1.1,
Continuous Integration
Źródła: podręcznikopracował: A. Jędryczkowski.
Komponentowe i rozproszone
Microsoft Solution Framework
Programowanie strukturalne i obiektowe
Refaktoryzacja Robert Pająk.
WPROWADZENIE W ŚWIAT OBIEKTÓW
Komponentowe systemy rozproszone Wprowadzenie. Komponent... jest to podstawowa jednostka oprogramowania z kontraktowo (deklaratywnie) opisanymi interfejsami,
Komponentowe i rozproszone Interludium. OOA vs SOA OOA (obiekty rozproszone): CORBA, COM(+), EJB Współdzielenie obiektów SOA (serwisy rozproszone): Autonomiczne.
Programowanie obiektowe Wykład 6 dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 1/14 Dariusz Wardowski.
Obsługa procesów biznesowych w MOSS 2007 Na przykładzie procesu obsługi zleceń Paweł Wróbel.
Programowanie obiektowe – język C++
Rational Unified Process Implementacja Aleksandra Reiman, gr. I-52.
Programowanie obiektowe 2013/2014
ZWIĄZKI MIĘDZY KLASAMI KLASY ABSTRAKCYJNE OGRANICZENIA INTERFEJSY SZABLONY safa Michał Telus.
Zarządzanie Projektami
UML W V ISUAL S TUDIO Mateusz Lamparski. UML D EFINICJA Unified Modeling Language (UML) to graficzny język do obrazowania, specyfikowania, tworzenia i.
Treści multimedialne - kodowanie, przetwarzanie, prezentacja Odtwarzanie treści multimedialnych Andrzej Majkowski 1 informatyka +
Programowanie strukturalne i obiektowe C++
Diagram klas Kluczowymi elementami są: klasy (class)
Zarządzanie zagrożeniami
ŁUKASZ DZWONKOWSKI Modele zwinne i ekstremalne. Podejście tradycyjne
Proces tworzenia oprogramowania Proces tworzenia oprogramowania jest zbiorem czynności i związanych z nimi wyników, które prowadzą do powstania produktu.
OOP, Desing Patterns … and more Michał Dubel
Komponentowe i rozproszone Komponenty i zależności.
Komponentowe systemy rozproszone Wprowadzenie. Komponent... jest to podstawowa jednostka oprogramowania z kontraktowo (deklaratywnie) opisanymi interfejsami,
Projektowanie obiektowe. Przykład: Punktem wyjścia w obiektowym tworzeniu systemu informacyjnego jest zawsze pewien model biznesowy. Przykład: Diagram.
Obiekty COM Przemysław Buczkowski. Plan prezentacji 1.Wprowadzenie do COM 2.Historia standardu 3.Jak działa COM 4.Interface IUknown 5.Paradygmaty COM.
Wzorce Projektowe w JAVA
Komponentowe i rozproszone Interludium czyli krótki wykład o rozpraszaniu.
Platforma .Net.
Programowanie Zaawansowane
Struktura systemu operacyjnego
Rozwiązania mobilne wykorzystujące i aktualizujące informacje przestrzenne Poznań
Wykład 7 i 8 Na podstawie CCNA Exploration Moduł 5 i 6 – streszczenie
C++ WYKŁAD 12 ( ) Własne biblioteki. S PIS TREŚCI Kompilacja i łączenie Moduły Biblioteki Biblioteka statyczna Biblioteka współdzielona Biblioteka.
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.
MAS Rafał Hryniów. Agenda  Zasady  Referaty  Projekt  Kolosy.
Komponentowe systemy rozproszone Interludium czyli krótki wykład o rozpraszaniu.
STAĆ CIĘ NA INNOWACJE Systemy Call Center Sp. z o.o.
Komponentowe i rozproszone (Web)Service Oriented Architecture.
InMoST Wielkopolska sieć współpracy w zakresie innowacyjnych metod wytwarzania oprogramowania Termin realizacji: – Innowacyjne metody.
TWOJA CYFROWA PRZYSZŁOŚĆ. JUŻ DZISIAJ. Marcin Parczewski © 2016 Software AG. All rights reserved. For internal use only.
Dynamiczny serwer aplikacyjny w C++ platforma LEFTHAND
JavaBeans by Paweł Wąsala
Modele baz danych - spojrzenie na poziom fizyczny
Zapis prezentacji:

Komponentowe systemy rozproszone Komponenty i zależności

Komponent... jest to podstawowa jednostka oprogramowania z kontraktowo (deklaratywnie) opisanymi interfejsami, i podanymi wprost zależnościami. na podst. "Oprogramowanie komponentowe. Obiekty to za mało" (1998)

Komponent Może być użyty przez inne elementy programu Jego użycie nie wymaga interwencji programisty Posiada pełną specyfikację zależności Specyfikuje oferowaną przez siebie funkcjonalność Może być użyty wyłącznie na podstawie tej specyfikacji Można go złożyć z innymi komponentami Integruje się z systemem w sposób szybki i bezproblemowy B.Meyer (2001)

Obiekt wynikająca z pradadygmatu programowania jednostka logiczna kodu tożsamośc, stan (dane) i zachowanie (metody) enkapsulacja danych i metod hermetyzacja (w zależności od jezyka mniej lub bardziej szczelna) dziedziczenie (interfejsów lub implementacji) – w celu reużycia funkcjonalności polimorfizm (dynamiczny lub statyczny) dla funkcji wirtualnych pewna forma późnego wiązania

Moduł Logicznie wydzielony kawałek kodu, który może być rozwijany w pewnej izolacji Zwykle pewna liczba klas/metod rozwijanych razem = Trochę większy obiekt ? Moduł raczej nie jest dostarczany samodzielnie do klientów, ale może byćwspółdzielony między zespołami Przykłady: namespace, biblioteka statyczna, biblioteka linkowana dynamicznie może być wdrażana (dostarczana) samodzielnie – pytanie czy powinna (czy jest wystarczająco samodzielna, integralna, samodokumentująca)

Komponent (pakiet) Jest dostarczany niezależnie Ma indywidualny cykl życia/testowania itd Poszczególni użytkownicy/podsystemy mogą używać swoich wersji. Użytkownicy chcą się “przesiąść” na nowszą wersję w wybranym, dogodnym momencie (jak robią własne zmiany) Można wersjonować komponenty na poziomie binarnym

Uprzedzając fakty Komponent ≠ Serwis

Problemy, czyli dlaczego ten wykład Mikro: jakość kodu, jak projektować klasy, projekt (dokumentacja) rozchodzi się z kodem, klasy robią się duże Makro Cały kod jest nie-do-ogarnięcia. Nawet zrozumienie zależności między modułami jest problemem Zespoły mają problem integracją Zespoły mają problem ze zmianami innych zespołów testowanie (wydanie) molocha trwa b. długo

Mikro rozwiązania SOLID + DI TDD/BDD/ATDD refaktoryzacja DDD CI/CW AOP Zapraszam na ZTO -

Przykład System – site www: ~100 modułów ~10 zespołów, Web serwer/search/baza + Integracja danych z innych systemów

Co działa? Zespoły są w miarę niezależne Obecne rozwiązania pozwalają łatwo dzielić kod na moduły TDD/BDD/ATDD w miarę działa Relatywnie łatwo lokalnie refaktoryzować. Serwery CI (Ciągła Integracja) pozwalają wykrywać niespójności pomiędzy modułami.NET: Na potrzeby instalacji można scalić kilka assemblies w jedno np. (exe+dll-ki -> exe) Na poziomie kodu i tak dążymy do rozluźnienia zależności między klasami, Dzięki Rozwiązania kontenerom DI użycie różnych assemblies jest mniej bolesne ORM pozwala na abstrachowanie od bazy

Co działa "średnio" ? Kompilacja trwa długo. Testy jeszcze dłużej. Automatyzacja jest NIEZBĘDNA ale TRUDNA. Jak testować komponent, który może być używany w kilku podsystemach/podprojektach? Co jeżeli każdy zespół chce mieć swoje zmiany ? Co jeśli zmiana indukuje zmianę w komponenecie, którego nikt nie planował w tym momencie zmieniać? Co jeżeli jedna zmiana wymaga "zaciągnięcia" wielu innych zmian? Co jeżeli 2 zespoły zmieniają moduł A oraz B, a te wymagają różnych (niekompatybilnych) wersji C?

Podsumowanie Współdzielenie kodu źródłowego vs. binarek Binarki Duży nakład pracy na releasy/wersje itd Duże zamieszanie z CI/CD, dystrybucją Kod: trudno zarzadzać cyklem zmian trudno wersjonować np. zbudowanie GUI moze wymagać różnych wersji różnych plików trudno ograniczyć wyciek abstrakcji np. klasa car/person/engine będzie miała zupełnie inne odpowiedzialności po stronie GUI i serwerowej

3 zasady Wujka Boba. Robert C. Martin: REP: The Reuse/Release Equivalency Principle Jednostką (re)użycia jest release. CRP: Common Reuse Principle: Klasy w pakiecie są (re)używane razem CCP: Common Closure Principle: Zasada wspólnego domknięcia

REP: Jednostką (re)użycia jest release Oprogramowanie (re)używane jest udostępniane na zewnątrz firmy/zespołu. Ktoś musi zarzadzać jego wydaniami:  wersjonowanie  dokumentacja, maintenance, testy  synchronizacja zmian + komunikacja z klientami  produkcja pakietów  wersjonowanie źródeł,  wybór i numeracja stabilnych wersji,  budowa i dystrybucja binariów dostęp do wybranych wersji + dokumentacja wersji informacja o kompatybilności (semantyczne wersjonowanie)

CRP: Zasada wspólnego (re)użycia Klasy w pakiecie są dostarczane razem Ponieważ (re)użytkownik musi wziąść cały pakiet - komponenty/klasy powinny być zgrupowane tak by nie trzebabyło używać wielu pakietów. Kontrola wpływu na inne moduły Specyfikacja wymagań/zależności swojego modułu Najlepiej jęsli użytkownik aby uzyskać potrzebną funkcjonalnośc musi wziąść jak najmniej pakietów.

CCP: Zasada wspólnego domknięcia Wydajemy zawsze cały pakiet. Zmiana pakietu implikuje testowanie u jego użytkowników. Zmiana wielu pakietów = dużo testowania. Zmiana kawałka pakietu = testowanie całego klienta. Najlepiej by pakiet był jednorodny: tj. poszczególne składowe pakietu powinny mieć podobne powody do zmian. Najlepiej jeśli poszczególne zmiany funkcjonalności implikują wydanie jak najmniejszej liczby pakietów.

Komponent CRP: podział dla uniknięcia zbędnych wydań REP: Grupowanie dla reużycia CCP: Grupowanie dla potrzeb utrzymania Zbędne wydania Zmiany rozproszone między komponentami Niewygodne (re)użycie Kompo- nent Granice podziału determinują częstość wydań, wygodę wytwarzania i korzystania z komponentu

Zależności między modułami Acyclic Dependencies Principle: zależności pomiedzy pakietami powinny miec formę skierowanego grafu acyklicznego. Tj. nie powinno być wzajemnych ani cyklicznych zależności. Stable Dependancies Principle: zależność pomiedzy pakietami powinna być powiazana z częstością I łatwością zmian. Tj. często zmienne rzeczy powinny zależeć od rzadko zmiennych (Nie odwrotnie!) Stable Abstractions Principle: packages pakiety stabilne są abstrakcyjne. Pakiety konkretne są zwykle niestabilne. Abtrakcyjność pakietu powinna być proporcjonalna do stabilnosci. Robert C. Martin

ADP: Syndrom dnia następnego Nie chodzi o efekt "świetowania" release-u 1. Releasujesz swój pakiet 2. Nastepnego dnia pakiet nie działa bo  Twój pakiet wymusił zmiany w innych pakietach  zmiany w innych pakietach finalnie wymusiły zmiany w Twoim pakiecie Trudno stwierdzić co wpływa na co => sprzeżenie zwrotne Pakiety stają się niestabilne. Pakiety muszą być zmianiane razem Hierarchia zależności powinna być płytka

SDP: Co to jest Stabilność Moduły stabilne (trudne do zmiany) nie powinny zależeć od niestabilnych (łatwych do zmiany) Co jest łatwe do zmiany?  typy, funkcje, do których odwołuje się niewiele kodu. Co jest trudne do zmiany?  typy, funkcje, do których odwołuje się dużo kodu.

SAP: Co to jest Abstrakcyjność Byty abstrakcyjne są niezmienne. Zmieniają się rzeczy konkretne np. przepisy, reguły biznesowe, warunki wyboru itd. Co często trzeba modyfikować:  klasy konkretne  metody konkretne  implementacje logiki biznesowej. Co trzeba zmieniać rzadko:  interfejsy  abstrakcje: klasy abstrakcyjne I metody abstrakcyjne  klasy bazowe

Zależności Rodzaje zależności:  (Afferent) - kto zależy  (Efferent) – od kogo zależy class X { … Y field; } class Y { … } afferent efferent

Miara zależności C A (X) = liczba funkcji/klas/modułów, które zależą od (odwołują sie do) X C E (X) = liczba funkcji/klas/modułów do których odwołuje się X N = liczba typów N A = liczba typów abstrakcyjnych Niestabilność: I =C E / (C A + C E ) Abstakcyjność: A=N A /N

Optymalna sytuacja A1A1 1 I Strefa bólu: klasy konkretne, b. często używane w kodzie Strefa braku użyteczności: klasy abstakcyjne, z których nikt nie korzysta Klasy czysto abstrakcyjne o dużej stabilności Klasy konkretne o małej stabilności Miara pot. problemów: D = |A+I-1|

Wujek Bob o komponentach I nie tylko… Robert C. Martin - Clean Design, Components Principles.wmv Dowolne prezentacje np. z NDC Warto poczytać Robert C. Martin: Agile Software Development, Principles, Patterns, and Practices Clean Code The Clean Coder