Obiekty, aspekty, komponenty

Podobne dokumenty
Programowanie aspektowe

Dariusz Brzeziński. Politechnika Poznańska, Instytut Informatyki

Technologie obiektowe

Kurs programowania. Wstęp - wykład 0. Wojciech Macyna. 22 lutego 2016

Programowanie obiektowe - 1.

Podstawy Programowania Obiektowego

Języki i paradygmaty programowania Wykład 2. Dariusz Wardowski. dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 1/18

Aplikacje w środowisku Java

Język programowania. Andrzej Bobyk

Programowanie w Javie 1 Wykład i Ćwiczenia 3 Programowanie obiektowe w Javie cd. Płock, 16 października 2013 r.

Modelowanie i Programowanie Obiektowe

Programowanie aspektowe na przykładzie AspectJ JUG Poznań, Jacek Pospychała

Technologie i usługi internetowe cz. 2

Programowanie obiektowe Wykład 1. Dariusz Wardowski. dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 1/20

Komputerowe Systemy Przemysłowe: Modelowanie - UML. Arkadiusz Banasik arkadiusz.banasik@polsl.pl

Projektowanie obiektowe. Roman Simiński Wzorce projektowe Wybrane wzorce strukturalne

Wzorce Strukturalne. Adapter: opis. Tomasz Borzyszkowski

Programowanie obiektowe i zdarzeniowe wykład 4 Kompozycja, kolekcje, wiązanie danych

Programowanie obiektowe

Programowanie współbieżne Wykład 8 Podstawy programowania obiektowego. Iwona Kochaoska

Programowanie obiektowe

Kurs WWW. Paweł Rajba.

Programowanie obiektowe

problem w określonym kontekście siły istotę jego rozwiązania

Diagram klas UML jest statycznym diagramem, przedstawiającym strukturę aplikacji bądź systemu w paradygmacie programowania obiektowego.

Dokumentacja do API Javy.

Programowanie obiektowe

Informatyka I. Klasy i obiekty. Podstawy programowania obiektowego. dr inż. Andrzej Czerepicki. Politechnika Warszawska Wydział Transportu 2018

Programowanie komponentowe

Zaawansowane programowanie w języku C++ Klasy w C++

Wzorce projektowe. dr inż. Marcin Pietroo

Polimorfizm. dr Jarosław Skaruz

Programowanie obiektowe

Język JAVA podstawy. Wykład 4, część 1. Jacek Rumiński. Politechnika Gdańska, Inżynieria Biomedyczna

Aplikacje RMI

Programowanie obiektowe

JAVA. Java jest wszechstronnym językiem programowania, zorientowanym. apletów oraz samodzielnych aplikacji.

Początki Javy. dr Anna Łazińska, WMiI UŁ Podstawy języka Java 1 / 8

Materiały do zajęć VII

Enkapsulacja, dziedziczenie, polimorfizm

JAVA W SUPER EXPRESOWEJ PIGUŁCE

Diagramy klas. dr Jarosław Skaruz

Pico. Wstęp do kontenerów IoC.

10. Programowanie obiektowe w PHP5

Iteracyjno-rozwojowy proces tworzenia oprogramowania Wykład 3 część 1

Wykład 7: Pakiety i Interfejsy

Wykład Ćwiczenia Laboratorium Projekt Seminarium

Programowanie obiektowe, wykład nr 6. Klasy i obiekty

Zofia Kruczkiewicz - Modelowanie i analiza systemów informatycznych 1

Podstawy Języka Java

Programowanie w języku Java WYKŁAD

Języki i metody programowania Java. Wykład 2 (część 2)

PHP 5 język obiektowy

Programowanie obiektowe

Programowanie II. Lista 3. Modyfikatory dostępu plik TKLientBanku.h

Techniki programowania INP001002Wl rok akademicki 2018/19 semestr letni. Wykład 3. Karol Tarnowski A-1 p.

Analiza i projektowanie oprogramowania. Analiza i projektowanie oprogramowania 1/32

Programowanie obiektowe. Wprowadzenie

Programowanie obiektowe

Klasy abstrakcyjne i interfejsy

Programowanie obiektowe

Wprowadzenie do systemów informacyjnych

Informacje ogólne. Karol Trybulec p-programowanie.pl 1. 2 // cialo klasy. class osoba { string imie; string nazwisko; int wiek; int wzrost;

Typy zmiennych proste i złożone. Programowanie komputerów. Tablica. Złożone typy zmiennych. Klasa. Struktura

Programowanie komponentowe 5

Programowanie obiektowe

1. Które składowe klasa posiada zawsze, niezależnie od tego czy je zdefiniujemy, czy nie?

Historia modeli programowania

Polimorfizm, metody wirtualne i klasy abstrakcyjne

Kurs programowania. Wykład 2. Wojciech Macyna. 17 marca 2016

Klasy. dr Anna Łazińska, WMiI UŁ Podstawy języka Java 1 / 13

UML a kod w C++ i Javie. Przypadki użycia. Diagramy klas. Klasy użytkowników i wykorzystywane funkcje. Związki pomiędzy przypadkami.

Zaawansowane programowanie w C++ (PCP)

Programowanie Obiektowe i C++

Zdalne wywołanie metod - koncepcja. Oprogramowanie systemów równoległych i rozproszonych Wykład 7. Rodzaje obiektów. Odniesienie do obiektu

Programowanie obiektowe i zdarzeniowe

Rok akademicki: 2012/2013 Kod: ZIE s Punkty ECTS: 3. Poziom studiów: Studia I stopnia Forma i tryb studiów: -

Wykład 1. Projektowanie efektywnych algorytmów przetwarzania danych w sieciowych systemach usług, rzeczy i multimediów.

Programowanie w języku Java - Wyjątki, obsługa wyjątków, generowanie wyjątków

Oprogramowanie systemów równoległych i rozproszonych Wykład 7

Projektowanie obiektowe oprogramowania Wykład 5 wzorce strukturalne Wiktor Zychla 2016

Konstruktory. Streszczenie Celem wykładu jest zaprezentowanie konstruktorów w Javie, syntaktyki oraz zalet ich stosowania. Czas wykładu 45 minut.

Dziedziczenie jednobazowe, poliformizm

Obiektowość mgr Tomasz Xięski, Instytut Informatyki, Uniwersytet Śląski Katowice, 2012

Wykład 4: Klasy i Metody

Programowanie obiektowe

Klasy abstrakcyjne, interfejsy i polimorfizm

Modelowanie obiektowe

Zaawansowane programowanie w C++ (PCP)

Wykład 8: klasy cz. 4

Obiekt klasy jest definiowany poprzez jej składniki. Składnikami są różne zmienne oraz funkcje. Składniki opisują rzeczywisty stan obiektu.

Programowanie 2. Język C++. Wykład 3.

1 Atrybuty i metody klasowe

Definiowanie własnych klas

Dziedziczenie. Tomasz Borzyszkowski

Zaawansowane programowanie w C++ (PCP)

PODEJŚCIE OBIEKTOWE. Przykład 1 metody i atrybuty statyczne

Informatyka I stopień (I stopień / II stopień) Ogólnoakademicki (ogólno akademicki / praktyczny) stacjonarne (stacjonarne / niestacjonarne)

Transkrypt:

Obiekty, aspekty, komponenty Obiekty, aspekty, komponenty Bartosz Walter

Rozdział zagadnień Zasada rozdziału zagadnień (Separation of Concerns) program powinien być zdekomponowany w taki sposób, aby różne jego aspekty znajdowały się w dobrze odseparowanych od siebie modułach każdy aspekt zajmuje się jednym zagadnieniem zagadnienie to szczególny cel programu, koncepcja albo funkcja D. Parnas "On the criteria to be used in decomposing systems..." (1972) G. Polya "How to Solve It?" (1973) E. Dijkstra "A Discipline of Programming" (1976) Wprowadzenie do przedmiotu (2)

Wprowadzenie do przedmiotu (3) Plan wykładu Obiektowość Aspekty Komponenty

Wprowadzenie do przedmiotu (4) Plan wykładu Obiektowość Aspekty Komponenty

Wprowadzenie do przedmiotu (5) Obiektowość Abstrakcja Polimorfizm Obiekt Hermetyzacja Dziedziczenie Odpowiedzialność Elastyczność Powtórne użycie Modularyzacja

Wprowadzenie do przedmiotu (6) Czym jest obiekt? Definicja 1 Obiekt w reprezentuje element świata rzeczywistego; jest strukturą posiadającą tożsamość, stan (pola) i zachowanie (metody). Definicja 2 Obiekt w pełni odpowiada za pewien fragment świata rzeczywistego. Sposób realizacji tej odpowiedzialności zależy od samego obiektu.

Obiektowość a podejście strukturalne Przykład Wykładowca przeprowadza egzamin. W zależności od oceny oraz rodzaju egzaminu, za który została wystawiona, student zalicza przedmiot, podchodzi do poprawki lub prosi o zaliczenie warunkowe. Wykładowca powinien każdemu studentowi, w zależności od jego indywidualnej sytuacji, przekazać wskazówki dotyczące dalszego postępowania. na podstawie przykładu Wprowadzenie A. Shallowaya do przedmiotu i J. Trotta (7)

Obiektowość a podejście strukturalne Rozwiązanie 1 1. Utwórz listę studentów i ich ocen 2. Dla każdego studenta z listy a) określ jego ocenę b) określ dalszy sposób postępowania studenta c) przekaż informacje studentowi Wprowadzenie do przedmiotu (8)

Obiektowość a podejście strukturalne Rozwiązanie 2 Wykładowca 1. Opublikuj listę studentów i ich ocen 2. Opublikuj informację o sposobie dalszego postępowania w zależności od oceny Student 1. Znajdź swoją ocenę na liście udostępnionej przez Wykładowcę 2. Określ sposób postępowania na podstawie oceny 3. Postąp zgodnie z instrukcją Wprowadzenie do przedmiotu (9)

Obiektowość a podejście strukturalne Pojawiają się nowe wymagania... Studenci powtarzający przedmiot nie mają prawa do egzaminu warunkowego Studenci niepełnosprawni mogą poprosić o jeszcze jeden termin egzaminu Studenci z wymiany zagranicznej nie muszą zdawać tego egzaminu, mogą wybrać inny... Wprowadzenie do przedmiotu (10)

Obiektowość a podejście strukturalne Wnioski Podział odpowiedzialności pozwolił uprościć algorytm zmniejszyć powiązania między obiektami zwiększyć otwartość systemu na zmiany Wprowadzenie do przedmiotu (11)

Opis klasy Klasa Nauczyciel Odpowiedzialność zarządzanie kolekcją udostępnianie ocen uczniom Współdziałanie Kolekcja: dodawanie i usuwanie ocen Uczeń: udostępnianie ocen Wprowadzenie do przedmiotu (12)

Spójność obiektu Spójność obiektu (ang. cohesion) opis współpracy elementów obiektu stopień powiązania metod i pól obiektu przy wypełnieniu nałożonej na niego odpowiedzialności A a c b d e Wniosek Prawidłowo zaprojektowana klasa jest spójna Wprowadzenie do przedmiotu (13)

Powiązania między obiektami Powiązania między obiektami (ang. coupling) opis zależności pomiędzy obiektami stopień powiązania obiektów, które nie są spokrewnione B1 A B2 Wniosek Niski stopień powiązań wspiera abstrakcję i hermetyzację w systemie Wprowadzenie do przedmiotu (14)

Wprowadzenie do przedmiotu (15) Asocjacja Użytkownik +posiada Telefon Telefon należy do Użytkownika Telefon może zmienić Użytkownika, Użytkownik może zmienić Telefon Użytkownik zna swój Telefon, Telefon nie wie, kto jest jego właścicielem Istnienie Użytkownika nie ma wpływu na istnienie Telefonu i vice wersa

Wprowadzenie do przedmiotu (16) Agregacja Katalog Książka Katalog zawiera Książki Książka może należeć do wielu Katalogów jednocześnie Istnienie Katalogu nie ma wpływu na istnienie Książki i vice versa

Wprowadzenie do przedmiotu (17) Kompozycja Książka Rozdział Książka składa się z Rozdziałów, Rozdział jest częścią Książki Rozdział może należeć tylko do jednej Książki Istnienie Książki decyduje o istnieniu jej Rozdziałów

Wprowadzenie do przedmiotu (18) Interfejsy «Interface» Komunikator komunikator.zadzwon() zadzwon() odbierz() Telefon Tel. komórkowy Tel. satelit. zadzwon() odbierz() zadzwon() odbierz() zadzwon() odbierz() Wnioski Interfejs mówi CO robi klasa, a nie W JAKI SPOSÓB. Interfejs opisuje ROLĘ obiektu.

Wprowadzenie do przedmiotu (19) Wielokrotne interfejsy «Interface» Komunikator zadzwon() odbierz() Komunikator Telefon Tel. komórkowy Tel. satelit. zadzwon() odbierz() zadzwon() odbierz() zadzwon() odbierz() Zegarek czas() «Interface» Czasomierz czas() Komunikator komunikator = new TelefonKomorkowy(); komunikator.zadzwon();

Wprowadzenie do przedmiotu (20) Wielokrotne interfejsy «Interface» Komunikator zadzwon() odbierz() Telefon Tel. komórkowy Tel. satelit. zadzwon() odbierz() zadzwon() odbierz() zadzwon() odbierz() Zegarek czas() «Interface» Czasomierz Czasomierz Czasomierz czasomierz = new Zegarek(); czasomierz.czas(); czas()

Wprowadzenie do przedmiotu (21) Wielokrotne interfejsy «Interface» Komunikator zadzwon() odbierz() Komunikator Telefon Tel. komórkowy Tel. satelit. zadzwon() odbierz() zadzwon() odbierz() zadzwon() odbierz() Zegarek czas() «Interface» Czasomierz Czasomierz czas() Komunikator komorka = new TelefonKomorkowy(); Czasomierz komorka = new TelefonKomorkowy();

Wprowadzenie do przedmiotu (22) Dziedziczenie Odrzutowiec jest rodzajem Samolotu Odrzutowiec może zastąpić Samolot Odrzutowiec posiada niejawną instancję Samolotu związek między Odrzutowcem i Samolotem jest nierozerwalny

Wprowadzenie do przedmiotu (23) Dziedziczenie vs. użycie interfejsu Zegarek czas() «Interface» Komunikator zadzwon() odbierz() Zegar ścienny czas() Telefon zadzwon() odbierz() Telefon kom. zadzwon() odbierz() czas() Zegar ścienny jest rodzajem Zegarka. Posiada wszystkie jego cechy i działa tak samo Zegar ścienny dziedziczy zarówno typ, jak i implementację Telefon i Telefon kom. są Komunikatorami. Oba obiekty mogą inicjować i odbierać rozmowy Telefon i Telefon kom. współdzielą tylko typ

Dziedziczenie klas vs. dziedziczenie interfejsów Zegarek czas() «Interface» Czasomierz czas() Zegar ścienny czas() Zegar ścienny czas() «Interface» Zegar cyfr. czas() wyswietl() Zegarek ręczny czas() wyswietl() Wnioski Dziedziczenie klas przekazuje podklasie typ i implementację Dziedziczenie interfejsów dotyczy tylko typu Wprowadzenie do przedmiotu (24)

Wprowadzenie do przedmiotu (25) Hermetyzacja Definicja 1 Hermetyzacja oznacza ukrywanie danych przed niepożądanym dostępem Definicja 2 Hermetyzacja oznacza ukrywanie każdej decyzji projektowej, która może ulec zmianie: interfejsu, implementacji, zachowania metody, danych Wniosek Należy identyfikować zmienność w systemie i hermetyzować ją

Hermetyzacja danych (1) Przykład Ocena może zmienić swoją wartość Konstruktor tworzy ułomny obiekt Ocena ocena = new Ocena(); ocena.ustawwartosc(ocena.bdb); Wprowadzenie do przedmiotu (26)

Hermetyzacja danych (2) Przykład Wykładowca wystawia oceny Kto jeszcze może wystawić oceny? Kolekcja oceny = nauczyciel.oceny(); oceny.dodaj(new Ocena(Ocena.BDB)); Wprowadzenie do przedmiotu (27)

Wprowadzenie do przedmiotu (28) Zadanie Oceń jakość tego projektu

Rozwiązanie Wprowadzenie do przedmiotu (29)

Wprowadzenie do przedmiotu (30) Plan wykładu Obiektowość Aspekty Komponenty

Rozdział zagadnień Zasada rozdziału zagadnień (Separation of Concerns) program powinien być zdekomponowany w taki sposób, aby różne jego aspekty znajdowały się w dobrze odseparowanych od siebie częściach systemu każdy aspekt zajmuje się jednym zagadnieniem zagadnienie to szczególny cel programu, koncepcja albo funkcja D. Parnas "On the criteria to be used in decomposing systems..." (1972) G. Polya "How to Solve It?" (1973) E. Dijkstra "A Discipline of Programming" (1976) Wprowadzenie do przedmiotu (31)

Wprowadzenie do przedmiotu (32) Nisza aspektowa W programowaniu obiektowym system jest zbiorem współdziałających, samodzielnych i odpowiedzialnych jednostek obiektów klasy ukrywają implementację, prezentując jedynie interfejsy polimorfizm jest podstawowym mechanizmem łączenia podobnych koncepcji...ale jak prawidłowo zaimplementować cechy, które przecinają wiele niespokrewnionych ze sobą obiektów?

Wprowadzenie do przedmiotu (33) Podział wymagań Wymagania podstawowe (biznesowe) Wymagania systemowe (techniczne)

Wprowadzenie do przedmiotu (34) Modularyzacja kodu funkcje podstawowe aspekt 1 aspekt 2 program obiektowy program aspektowy

Wprowadzenie do przedmiotu (35) OOP a AOP Programowanie obiektowe grupowanie podobnych koncepcji za pomocą hermetyzacji i dziedziczenia podstawowa jednostka modularyzacji: klasa Programowanie aspektowe grupowanie podobnych koncepcji w niezwiązanych ze sobą klasach, niezależnie od dziedziczenia dodatkowy mechanizm modularyzacji: aspekt

Język AspectJ AspectJ G. Kiczales (2001), Xerox Palo Alto Research Center aspektowe rozszerzenie Javy aspekt jako specyficzna klasa możliwość zmiany zachowania i struktury kodu łączenie aspektów i klas na poziomie bajtkodu własny kompilator ajc AspectJ Java Wprowadzenie do przedmiotu (36)

Aspekt Aspekt (w języku AspectJ) specjalizowana klasa, która może przecinać inne klasy podlega dziedziczeniu jednostka modularyzacji (obok klasy) posiada typowe elementy klasy łączy punkty cięcia i porady Aspekt.aj Aspekt.class kompilacja Wprowadzenie do przedmiotu (37)

Wprowadzenie do przedmiotu (38) Zasada działania AspectJ aspekt aspekt aspekt pliki *.aj weaver obiekt obiekt obiekt pliki *.java pliki *.class

Prosty aspekt w AspectJ public class HelloWorld { } public static void hej(string tekst) { System.out.println(tekst); } public static void hejkolego(string tekst, String imie) { System.out.println(imie + ", " + tekst); } public static int hejludzie(string tekst, String[] imiona) { for (int i = 0; i < imiona.length; i++) System.out.println(imiona[i] + ", " + tekst); return imiona.length; } na podstawie Wprowadzenie przykładu do R. Laddada przedmiotu (2002) (39)

Prosty aspekt w AspectJ public aspect Maniery { pointcut wywolaniehej () : call(public static void HelloWorld.hej*(..)); before() : wywolaniehej() { System.out.println("Dzień dobry!"); } } after() : wywolaniehej() { System.out.println("Dziękuję!"); } na podstawie przykładu R. Laddada (2002) Wprowadzenie do przedmiotu (40)

Punkty złączeń Punkty złączenia (ang. joinpoints) są dowolnymi, identyfikowalnymi miejscami w programie. Przykłady: wywołanie metody i konstruktora wykonanie metody i konstruktora dostęp do pola obsługa wyjątku statyczna inicjacja klasy Wprowadzenie do przedmiotu (41)

Punkty cięcia Punkt cięcia (ang. pointcut) jest zdefiniowaną kolekcją punktów złączenia. nazwa punktu cięcia pointcut wywolaniehej () : call(public static void HelloWorld.hej*(..)); definicja punktu złączenia Wprowadzenie do przedmiotu (42)

Wprowadzenie do przedmiotu (43) Porada Porada (ang. advice) jest fragmentem kodu programu wykonywanym przed, po lub zamiast osiągnięcia przez program punktu cięcia. brak kontekstu punkt cięcia z określeniem momentu obsługi before() : call (public * Klasa.metoda(..)) { // kod porady, który będzie wykonany przed // wywołaniem metody metoda w klasie Klasa }

Rodzaje porad Rodzaje porad w AspectJ before() wykonywana tuż przed punktem cięcia after() {returning throwing} wykonywana tuż po punkcie cięcia (poprawnym lub zgłaszającym wyjątek) around(context) otaczająca punkt cięcia i decydująca o jego wykonaniu lub nie Wprowadzenie do przedmiotu (44)

Przykład: aspekt logujący wywołania metod public aspect Logger { pointcut wywolaniemetody() : call(* * (..)) &&! within(logger); } before() : wywolaniemetody() { } System.out.println("Przed wywołaniem metody " + thisjoinpoint.getsignature()); after() returning : wywolaniemetody() { System.out.println("Po wywołaniu metody " + thisjoinpoint.getsignature()); } after() throwing : wywolaniemetody() { System.out.println("Metoda " + thisjoinpoint.getsignature() + " zgłosiła wyjątek"); } Wprowadzenie do przedmiotu (45)

Przykład: do czego służy ten aspekt? Jaki jest efekt użycia tego aspektu? aspect A { before(): call(* *(..)) { System.out.println("przed"); } after(): call(* *(..)) { System.out.println("po"); } } Wprowadzenie http://eclipse.org/aspectj do przedmiotu (46)

Przykład: wersja 2 Jaki jest efekt użycia tego aspektu? aspect A { before(): call(* *(..)) { System.out.println("przed"); } after() returning: call(* *(..)) { System.out.println("po"); } } Wprowadzenie http://eclipse.org/aspectj do przedmiotu (47)

Przykład: wersja 3 Ta wersja nie posiada tej wady... aspect A { before(): call(* *(..)) &&!within(a) { System.out.println("przed"); } after() returning: call(* *(..)) &&!within(a) { System.out.println("po"); } } Wprowadzenie http://eclipse.org/aspectj do przedmiotu (48)

Wprowadzenie do przedmiotu (49) Plan wykładu Obiektowość Aspekty Komponenty

Wprowadzenie do przedmiotu (50) Obiekty a komponenty Czego jeszcze brak obiektom? Programowanie obiektowe łączenie obiektów w kodzie programu późne wiązanie wywołań opcjonalna hermetyzacja użycie polimorfizmu użycie dziedziczenia klas Programowanie komponentowe łączenie przez konfigurację późne wiązanie wywołań i ładowanie kodu na żądanie obowiązkowa hermetyzacja dziedziczenie interfejsów powtórne użycie na poziomie binariów

Komponent Komponent jest podstawową jednostką oprogramowania z kontraktowo (deklaratywnie) opisanymi interfejsami, i podanymi wprost zależnościami. Komponent może zostać skonfigurowany i wdrożony niezależnie od programisty, który go stworzył. Clemens Szyperski "Oprogramowanie komponentowe. Obiekty to za mało" (1998) Wprowadzenie do przedmiotu (51)

Wprowadzenie do przedmiotu (52) Własności komponentu Podstawowe własności komponentu Komponenty nigdy nie sprawują kontroli nad sobą zasada hollywoodzka: proszę do nas nie dzwonić, to my oddzwonimy... Kontener jest specjalnym elementem zarządzającym wszystkimi komponentami steruje procesem tworzenia komponentami rozwiązuje zależności pomiędzy komponentami zarządza cyklem życia komponentów

Wprowadzenie do przedmiotu (53) Przykład zawiera Sprawny Samochód musi zawierać Silnik.

Wprowadzenie do przedmiotu (54) Tradycyjne rozwiązywanie zależności 4. zmontuj A i B 1. utwórz komponent A komponent A (Samochód) Klient 5. zwróć zmontowane komponenty A i B 2. A zależy od B 3. utwórz komponent B komponent B (Silnik) komponent C (Przyczepa)

Kontener zarządzający komponentami Wprowadzenie do przedmiotu (55) Odwrócone rozwiązywanie zależności 2. znajdź A komponent A (Samochód) 3. A zależy od B Klient 1. utwórz komponent A 5. zwróć komponent A zmontowany z B 4. znajdź B komponent B (Silnik) komponent C (Przyczepa)

Wprowadzenie do przedmiotu (56) Wybrane sposoby rozwiązywania zależności Interface injection Setter injection Komponenty implementują dedykowany interfejs, poprzez który otrzymują obiekt służący do wyszukiwania zależności Zależności są przekazywane przez właściwości obiektu (metody setxxx() zgodne z konwencją JavaBeans)

Wyszukiwanie zależności poprzez interfejs public interface Serviceable { public void service(servicemanager manager); } public class Samochod implements Serviceable { private ServiceManager manager = null; private Silnik silnik = null; public void service(servicemanager manager) { this.manager = manager; } } public void zbuduj() { this.silnik = (Silnik) manager.lookup("silnik"); } Wprowadzenie do przedmiotu Apache Avalon (57)

Wstrzykiwanie zależności przez właściwości public class Samochod { private Silnik silnik = null; public Samochod() { } } public void setsilnik(silnik silnik) { } this.silnik = silnik; Kontener Samochód -> Silnik -> Silnik1_6 Wprowadzenie do przedmiotu (58)

Odwrócenie sterowania Odwrócenie sterowania pasywne API komponentu komunikacja przez interfejsy automatyczne spełnianie zależności przeniesienie odpowiedzialności za rozwiązanie zależności na kontener Wprowadzenie do przedmiotu (59)

Wprowadzenie do przedmiotu (60) Podsumowanie Obiektowość jest podejściem do problemu modularyzacji programu Istotą obiektowości jest pojęcie odpowiedzialności Aspekty stanowią rozszerzenie obiektowości o nowy rodzaj jednostki Komponenty, w odróżnieniu od obiektów, są zewnętrznie konfigurowalne