Obiekty, aspekty, komponentyflash.wwsi.edu.pl/wwsivideo/2007/pdf/16.05_walter... · 2010-07-21 ·...

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

Transcript of Obiekty, aspekty, komponentyflash.wwsi.edu.pl/wwsivideo/2007/pdf/16.05_walter... · 2010-07-21 ·...

Page 1: Obiekty, aspekty, komponentyflash.wwsi.edu.pl/wwsivideo/2007/pdf/16.05_walter... · 2010-07-21 · Wprowadzenie do przedmiotu (2) Rozdział zagadnień Zasada rozdziału zagadnień

Obiekty, aspekty, komponenty

Obiekty, aspekty, komponenty

Bartosz Walter

Page 2: Obiekty, aspekty, komponentyflash.wwsi.edu.pl/wwsivideo/2007/pdf/16.05_walter... · 2010-07-21 · Wprowadzenie do przedmiotu (2) Rozdział zagadnień Zasada rozdziału zagadnień

Wprowadzenie do przedmiotu (2)

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)

Page 3: Obiekty, aspekty, komponentyflash.wwsi.edu.pl/wwsivideo/2007/pdf/16.05_walter... · 2010-07-21 · Wprowadzenie do przedmiotu (2) Rozdział zagadnień Zasada rozdziału zagadnień

Wprowadzenie do przedmiotu (3)

Plan wykładu

Obiektowość

Aspekty Komponenty

Page 4: Obiekty, aspekty, komponentyflash.wwsi.edu.pl/wwsivideo/2007/pdf/16.05_walter... · 2010-07-21 · Wprowadzenie do przedmiotu (2) Rozdział zagadnień Zasada rozdziału zagadnień

Wprowadzenie do przedmiotu (4)

Plan wykładu

Obiektowość

Aspekty Komponenty

Page 5: Obiekty, aspekty, komponentyflash.wwsi.edu.pl/wwsivideo/2007/pdf/16.05_walter... · 2010-07-21 · Wprowadzenie do przedmiotu (2) Rozdział zagadnień Zasada rozdziału zagadnień

Wprowadzenie do przedmiotu (5)

Obiektowość

Hermetyzacja

Polimorfizm

Dziedziczenie

Abstrakcja

Elastyczność

ModularyzacjaPowtórne użycie

Odpowiedzialność

Obiekt

Page 6: Obiekty, aspekty, komponentyflash.wwsi.edu.pl/wwsivideo/2007/pdf/16.05_walter... · 2010-07-21 · Wprowadzenie do przedmiotu (2) Rozdział zagadnień Zasada rozdziału zagadnień

Wprowadzenie do przedmiotu (6)

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 .

Czym jest obiekt?

Page 7: Obiekty, aspekty, komponentyflash.wwsi.edu.pl/wwsivideo/2007/pdf/16.05_walter... · 2010-07-21 · Wprowadzenie do przedmiotu (2) Rozdział zagadnień Zasada rozdziału zagadnień

Wprowadzenie do przedmiotu (7)

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.

Obiektowość a podejście strukturalne

na podstawie przykładu A. Shallowaya i J. Trotta

Page 8: Obiekty, aspekty, komponentyflash.wwsi.edu.pl/wwsivideo/2007/pdf/16.05_walter... · 2010-07-21 · Wprowadzenie do przedmiotu (2) Rozdział zagadnień Zasada rozdziału zagadnień

Wprowadzenie do przedmiotu (8)

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

Obiektowość a podejście strukturalne

Page 9: Obiekty, aspekty, komponentyflash.wwsi.edu.pl/wwsivideo/2007/pdf/16.05_walter... · 2010-07-21 · Wprowadzenie do przedmiotu (2) Rozdział zagadnień Zasada rozdziału zagadnień

Wprowadzenie do przedmiotu (9)

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ą

Obiektowość a podejście strukturalne

Page 10: Obiekty, aspekty, komponentyflash.wwsi.edu.pl/wwsivideo/2007/pdf/16.05_walter... · 2010-07-21 · Wprowadzenie do przedmiotu (2) Rozdział zagadnień Zasada rozdziału zagadnień

Wprowadzenie do przedmiotu (10)

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

• ...

Obiektowość a podejście strukturalne

Page 11: Obiekty, aspekty, komponentyflash.wwsi.edu.pl/wwsivideo/2007/pdf/16.05_walter... · 2010-07-21 · Wprowadzenie do przedmiotu (2) Rozdział zagadnień Zasada rozdziału zagadnień

Wprowadzenie do przedmiotu (11)

Wnioski

Podział odpowiedzialności pozwolił

• uprościć algorytm

• zmniejszyć powiązania między obiektami

• zwiększyć otwartość systemu na zmiany

Obiektowość a podejście strukturalne

Page 12: Obiekty, aspekty, komponentyflash.wwsi.edu.pl/wwsivideo/2007/pdf/16.05_walter... · 2010-07-21 · Wprowadzenie do przedmiotu (2) Rozdział zagadnień Zasada rozdziału zagadnień

Wprowadzenie do przedmiotu (12)

Opis klasy

Klasa Nauczyciel

Odpowiedzialność

• zarządzanie kolekcją

• udostępnianie ocen

uczniom

Współdziałanie

• Kolekcja: dodawanie i

usuwanie ocen

• Uczeń: udostępnianie

ocen

Page 13: Obiekty, aspekty, komponentyflash.wwsi.edu.pl/wwsivideo/2007/pdf/16.05_walter... · 2010-07-21 · Wprowadzenie do przedmiotu (2) Rozdział zagadnień Zasada rozdziału zagadnień

Wprowadzenie do przedmiotu (13)

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

WniosekPrawidłowo zaprojektowana klasa jest spójna

A a

b

c

d e

Page 14: Obiekty, aspekty, komponentyflash.wwsi.edu.pl/wwsivideo/2007/pdf/16.05_walter... · 2010-07-21 · Wprowadzenie do przedmiotu (2) Rozdział zagadnień Zasada rozdziału zagadnień

Wprowadzenie do przedmiotu (14)

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

WniosekNiski stopień powiązań wspiera abstrakcję i hermetyzację w systemie

A

B1

B2

Page 15: Obiekty, aspekty, komponentyflash.wwsi.edu.pl/wwsivideo/2007/pdf/16.05_walter... · 2010-07-21 · Wprowadzenie do przedmiotu (2) Rozdział zagadnień Zasada rozdziału zagadnień

Wprowadzenie do przedmiotu (15)

• 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

TelefonUżytkownik +posiada

Asocjacja

Page 16: Obiekty, aspekty, komponentyflash.wwsi.edu.pl/wwsivideo/2007/pdf/16.05_walter... · 2010-07-21 · Wprowadzenie do przedmiotu (2) Rozdział zagadnień Zasada rozdziału zagadnień

Wprowadzenie do przedmiotu (16)

• 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

KsiążkaKatalog Książka

Agregacja

Page 17: Obiekty, aspekty, komponentyflash.wwsi.edu.pl/wwsivideo/2007/pdf/16.05_walter... · 2010-07-21 · Wprowadzenie do przedmiotu (2) Rozdział zagadnień Zasada rozdziału zagadnień

Wprowadzenie do przedmiotu (17)

• 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

RozdziałKsiążkaKsiążka

Kompozycja

Page 18: Obiekty, aspekty, komponentyflash.wwsi.edu.pl/wwsivideo/2007/pdf/16.05_walter... · 2010-07-21 · Wprowadzenie do przedmiotu (2) Rozdział zagadnień Zasada rozdziału zagadnień

Wprowadzenie do przedmiotu (18)

Interfejsy

komunikator.zadzwon()Komunikator

zadzwon()odbierz()

Telefon Tel. komórkowy Tel. satelit.

WnioskiInterfejs mówi CO robi klasa, a nie W JAKI SPOSÓB.

Interfejs opisuje ROLĘ obiektu.

zadzwon()odbierz()

zadzwon()odbierz()

zadzwon()odbierz()

«Interface»

Page 19: Obiekty, aspekty, komponentyflash.wwsi.edu.pl/wwsivideo/2007/pdf/16.05_walter... · 2010-07-21 · Wprowadzenie do przedmiotu (2) Rozdział zagadnień Zasada rozdziału zagadnień

Wprowadzenie do przedmiotu (19)

Wielokrotne interfejsy

Komunikator

zadzwon()odbierz()

«Interface»

Telefon Tel. komórkowy Tel. satelit.

zadzwon()odbierz()

zadzwon()odbierz()

zadzwon()odbierz()

Komunikator

Komunikator komunikator = new TelefonKomorkowy();

komunikator.zadzwon();

Czasomierz

czas()

Zegarek

czas()

«Interface»

Page 20: Obiekty, aspekty, komponentyflash.wwsi.edu.pl/wwsivideo/2007/pdf/16.05_walter... · 2010-07-21 · Wprowadzenie do przedmiotu (2) Rozdział zagadnień Zasada rozdziału zagadnień

Wprowadzenie do przedmiotu (20)

Wielokrotne interfejsy

Komunikator

zadzwon()odbierz()

«Interface»

Telefon Tel. komórkowy Tel. satelit.

zadzwon()odbierz()

zadzwon()odbierz()

zadzwon()odbierz()

Czasomierz

Czasomierz czasomierz = new Zegarek();

czasomierz.czas();

Czasomierz

czas()

Zegarek

czas()

«Interface»

Page 21: Obiekty, aspekty, komponentyflash.wwsi.edu.pl/wwsivideo/2007/pdf/16.05_walter... · 2010-07-21 · Wprowadzenie do przedmiotu (2) Rozdział zagadnień Zasada rozdziału zagadnień

Wprowadzenie do przedmiotu (21)

Wielokrotne interfejsy

Komunikator

zadzwon()odbierz()

«Interface»

Telefon Tel. komórkowy Tel. satelit.

zadzwon()odbierz()

zadzwon()odbierz()

zadzwon()odbierz()

Czasomierz

Komunikator komorka = new TelefonKomorkowy();

Czasomierz komorka = new TelefonKomorkowy();

Czasomierz

czas()

Zegarek

czas()

«Interface»

Komunikator

Page 22: Obiekty, aspekty, komponentyflash.wwsi.edu.pl/wwsivideo/2007/pdf/16.05_walter... · 2010-07-21 · Wprowadzenie do przedmiotu (2) Rozdział zagadnień Zasada rozdziału zagadnień

Wprowadzenie do przedmiotu (22)

• Odrzutowiec jest rodzajem

Samolotu

• Odrzutowiec może

zastąpić Samolot

• Odrzutowiec posiada

niejawną instancję

Samolotu

• związek między

Odrzutowcem i Samolotem

jest nierozerwalny

Dziedziczenie

Page 23: Obiekty, aspekty, komponentyflash.wwsi.edu.pl/wwsivideo/2007/pdf/16.05_walter... · 2010-07-21 · Wprowadzenie do przedmiotu (2) Rozdział zagadnień Zasada rozdziału zagadnień

Wprowadzenie do przedmiotu (23)

Telefon

zadzwon()

odbierz()

Telefon kom.

zadzwon()

odbierz()

czas()

Komunikator

zadzwon()

odbierz()

• Telefon i Telefon kom. są

Komunikatorami. Oba obiekty

mogą inicjować i odbierać rozmowy

• Telefon i Telefon kom. współdzielą

tylko typ

Zegarek

czas()

Zegar ścienny

czas()

• Zegar ścienny jest rodzajem

Zegarka. Posiada wszystkie jego

cechy i działa tak samo

• Zegar ścienny dziedziczy zarówno

typ, jak i implementację

«Interface»

Dziedziczenie vs. użycie interfejsu

Page 24: Obiekty, aspekty, komponentyflash.wwsi.edu.pl/wwsivideo/2007/pdf/16.05_walter... · 2010-07-21 · Wprowadzenie do przedmiotu (2) Rozdział zagadnień Zasada rozdziału zagadnień

Wprowadzenie do przedmiotu (24)

Zegarek

czas()

Zegar ścienny

czas()

Zegar cyfr.

czas()

wyswietl()

Czasomierz

czas()

Zegar ścienny

czas()

Zegarek ręczny

czas()

wyswietl()

«Interface»

«Interface»

Wnioski

Dziedziczenie klas przekazuje podklasie typ i implementację

Dziedziczenie interfejsów dotyczy tylko typu

Dziedziczenie klas vs. dziedziczenie interfejsów

Page 25: Obiekty, aspekty, komponentyflash.wwsi.edu.pl/wwsivideo/2007/pdf/16.05_walter... · 2010-07-21 · Wprowadzenie do przedmiotu (2) Rozdział zagadnień Zasada rozdziału zagadnień

Wprowadzenie do przedmiotu (25)

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

WniosekNależy identyfikować zmienność w systemie i hermetyzować ją

Hermetyzacja

Page 26: Obiekty, aspekty, komponentyflash.wwsi.edu.pl/wwsivideo/2007/pdf/16.05_walter... · 2010-07-21 · Wprowadzenie do przedmiotu (2) Rozdział zagadnień Zasada rozdziału zagadnień

Wprowadzenie do przedmiotu (26)

Przykład

Ocena może zmienić swoją wartość

Konstruktor tworzy ułomny obiekt

Ocena ocena = new Ocena();

ocena.ustawWartosc(Ocena.BDB);

Hermetyzacja danych (1)

Page 27: Obiekty, aspekty, komponentyflash.wwsi.edu.pl/wwsivideo/2007/pdf/16.05_walter... · 2010-07-21 · Wprowadzenie do przedmiotu (2) Rozdział zagadnień Zasada rozdziału zagadnień

Wprowadzenie do przedmiotu (27)

Przykład

Wykładowca wystawia oceny

Kto jeszcze może wystawić oceny?

Kolekcja oceny = nauczyciel.oceny();

oceny.dodaj(new Ocena(Ocena.BDB));

Hermetyzacja danych (2)

Page 28: Obiekty, aspekty, komponentyflash.wwsi.edu.pl/wwsivideo/2007/pdf/16.05_walter... · 2010-07-21 · Wprowadzenie do przedmiotu (2) Rozdział zagadnień Zasada rozdziału zagadnień

Wprowadzenie do przedmiotu (28)

Zadanie

Oceń jakość tego projektu

Page 29: Obiekty, aspekty, komponentyflash.wwsi.edu.pl/wwsivideo/2007/pdf/16.05_walter... · 2010-07-21 · Wprowadzenie do przedmiotu (2) Rozdział zagadnień Zasada rozdziału zagadnień

Wprowadzenie do przedmiotu (29)

Rozwiązanie

Page 30: Obiekty, aspekty, komponentyflash.wwsi.edu.pl/wwsivideo/2007/pdf/16.05_walter... · 2010-07-21 · Wprowadzenie do przedmiotu (2) Rozdział zagadnień Zasada rozdziału zagadnień

Wprowadzenie do przedmiotu (30)

Plan wykładu

Obiektowość

Aspekty Komponenty

Page 31: Obiekty, aspekty, komponentyflash.wwsi.edu.pl/wwsivideo/2007/pdf/16.05_walter... · 2010-07-21 · Wprowadzenie do przedmiotu (2) Rozdział zagadnień Zasada rozdziału zagadnień

Wprowadzenie do przedmiotu (31)

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)

Page 32: Obiekty, aspekty, komponentyflash.wwsi.edu.pl/wwsivideo/2007/pdf/16.05_walter... · 2010-07-21 · Wprowadzenie do przedmiotu (2) Rozdział zagadnień Zasada rozdziału zagadnień

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?

Page 33: Obiekty, aspekty, komponentyflash.wwsi.edu.pl/wwsivideo/2007/pdf/16.05_walter... · 2010-07-21 · Wprowadzenie do przedmiotu (2) Rozdział zagadnień Zasada rozdziału zagadnień

Wprowadzenie do przedmiotu (33)

Podział wymagań

Wymagania systemowe(techniczne)

Wymagania podstawowe(biznesowe)

Page 34: Obiekty, aspekty, komponentyflash.wwsi.edu.pl/wwsivideo/2007/pdf/16.05_walter... · 2010-07-21 · Wprowadzenie do przedmiotu (2) Rozdział zagadnień Zasada rozdziału zagadnień

Wprowadzenie do przedmiotu (34)

Modularyzacja kodu

funkcje podstawowe

aspekt 1

aspekt 2

program obiektowy program aspektowy

Page 35: Obiekty, aspekty, komponentyflash.wwsi.edu.pl/wwsivideo/2007/pdf/16.05_walter... · 2010-07-21 · Wprowadzenie do przedmiotu (2) Rozdział zagadnień Zasada rozdziału zagadnień

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

Page 36: Obiekty, aspekty, komponentyflash.wwsi.edu.pl/wwsivideo/2007/pdf/16.05_walter... · 2010-07-21 · Wprowadzenie do przedmiotu (2) Rozdział zagadnień Zasada rozdziału zagadnień

Wprowadzenie do przedmiotu (36)

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

Page 37: Obiekty, aspekty, komponentyflash.wwsi.edu.pl/wwsivideo/2007/pdf/16.05_walter... · 2010-07-21 · Wprowadzenie do przedmiotu (2) Rozdział zagadnień Zasada rozdziału zagadnień

Wprowadzenie do przedmiotu (37)

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

Aspekt

Page 38: Obiekty, aspekty, komponentyflash.wwsi.edu.pl/wwsivideo/2007/pdf/16.05_walter... · 2010-07-21 · Wprowadzenie do przedmiotu (2) Rozdział zagadnień Zasada rozdziału zagadnień

Wprowadzenie do przedmiotu (38)

Zasada działania AspectJ

aspekt

obiekt

weaver

aspekt

aspekt

obiektobiekt

pliki *.java

pliki *.aj

pliki *.class

Page 39: Obiekty, aspekty, komponentyflash.wwsi.edu.pl/wwsivideo/2007/pdf/16.05_walter... · 2010-07-21 · Wprowadzenie do przedmiotu (2) Rozdział zagadnień Zasada rozdziału zagadnień

Wprowadzenie do przedmiotu (39)

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 przykładu R. Laddada (2002)

Prosty aspekt w AspectJ

Page 40: Obiekty, aspekty, komponentyflash.wwsi.edu.pl/wwsivideo/2007/pdf/16.05_walter... · 2010-07-21 · Wprowadzenie do przedmiotu (2) Rozdział zagadnień Zasada rozdziału zagadnień

Wprowadzenie do przedmiotu (40)

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)

Prosty aspekt w AspectJ

Page 41: Obiekty, aspekty, komponentyflash.wwsi.edu.pl/wwsivideo/2007/pdf/16.05_walter... · 2010-07-21 · Wprowadzenie do przedmiotu (2) Rozdział zagadnień Zasada rozdziału zagadnień

Wprowadzenie do przedmiotu (41)

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

Page 42: Obiekty, aspekty, komponentyflash.wwsi.edu.pl/wwsivideo/2007/pdf/16.05_walter... · 2010-07-21 · Wprowadzenie do przedmiotu (2) Rozdział zagadnień Zasada rozdziału zagadnień

Wprowadzenie do przedmiotu (42)

Punkty cięcia

Punkt cięcia (ang. pointcut) jest zdefiniowaną kolekcją

punktów złączenia.

pointcut wywolanieHej () :

call(public static void HelloWorld.hej*(..));

nazwa punktu cięcia

definicja punktu złączenia

Page 43: Obiekty, aspekty, komponentyflash.wwsi.edu.pl/wwsivideo/2007/pdf/16.05_walter... · 2010-07-21 · Wprowadzenie do przedmiotu (2) Rozdział zagadnień Zasada rozdziału zagadnień

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.

before() : call (public * Klasa.metoda(..)) {

// kod porady, który będzie wykonany przed

// wywołaniem metody metoda w klasie Klasa

}

punkt cięcia z określeniem momentu obsługi

brak kontekstu

Page 44: Obiekty, aspekty, komponentyflash.wwsi.edu.pl/wwsivideo/2007/pdf/16.05_walter... · 2010-07-21 · Wprowadzenie do przedmiotu (2) Rozdział zagadnień Zasada rozdziału zagadnień

Wprowadzenie do przedmiotu (44)

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

Page 45: Obiekty, aspekty, komponentyflash.wwsi.edu.pl/wwsivideo/2007/pdf/16.05_walter... · 2010-07-21 · Wprowadzenie do przedmiotu (2) Rozdział zagadnień Zasada rozdziału zagadnień

Wprowadzenie do przedmiotu (45)

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");

}

}

Page 46: Obiekty, aspekty, komponentyflash.wwsi.edu.pl/wwsivideo/2007/pdf/16.05_walter... · 2010-07-21 · Wprowadzenie do przedmiotu (2) Rozdział zagadnień Zasada rozdziału zagadnień

Wprowadzenie do przedmiotu (46)

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");

}

}

http://eclipse.org/aspectj

Page 47: Obiekty, aspekty, komponentyflash.wwsi.edu.pl/wwsivideo/2007/pdf/16.05_walter... · 2010-07-21 · Wprowadzenie do przedmiotu (2) Rozdział zagadnień Zasada rozdziału zagadnień

Wprowadzenie do przedmiotu (47)

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");

}

}

http://eclipse.org/aspectj

Page 48: Obiekty, aspekty, komponentyflash.wwsi.edu.pl/wwsivideo/2007/pdf/16.05_walter... · 2010-07-21 · Wprowadzenie do przedmiotu (2) Rozdział zagadnień Zasada rozdziału zagadnień

Wprowadzenie do przedmiotu (48)

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");

}

}

http://eclipse.org/aspectj

Page 49: Obiekty, aspekty, komponentyflash.wwsi.edu.pl/wwsivideo/2007/pdf/16.05_walter... · 2010-07-21 · Wprowadzenie do przedmiotu (2) Rozdział zagadnień Zasada rozdziału zagadnień

Wprowadzenie do przedmiotu (49)

Plan wykładu

Obiektowość

Aspekty Komponenty

Page 50: Obiekty, aspekty, komponentyflash.wwsi.edu.pl/wwsivideo/2007/pdf/16.05_walter... · 2010-07-21 · Wprowadzenie do przedmiotu (2) Rozdział zagadnień Zasada rozdziału zagadnień

Wprowadzenie do przedmiotu (50)

Obiekty a komponenty

Programowanie

obiektowe

Programowanie

komponentowe

• łączenie obiektów w kodzie

programu

• późne wiązanie wywołań

• opcjonalna hermetyzacja

• użycie polimorfizmu

• użycie dziedziczenia klas

• łą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

Czego jeszcze brak obiektom?

Page 51: Obiekty, aspekty, komponentyflash.wwsi.edu.pl/wwsivideo/2007/pdf/16.05_walter... · 2010-07-21 · Wprowadzenie do przedmiotu (2) Rozdział zagadnień Zasada rozdziału zagadnień

Wprowadzenie do przedmiotu (51)

Komponent

Komponent jest

• podstawową jednostką oprogramowania

• z kontraktowo (deklaratywnie) opisanymi interfejsami, i

• podanymi wprost zależnościami.

Clemens Szyperski

"Oprogramowanie komponentowe. Obiekty to za mało" (1998)

Komponent może zostać skonfigurowany i wdrożony

niezależnie od programisty, który go stworzył.

Page 52: Obiekty, aspekty, komponentyflash.wwsi.edu.pl/wwsivideo/2007/pdf/16.05_walter... · 2010-07-21 · Wprowadzenie do przedmiotu (2) Rozdział zagadnień Zasada rozdziału zagadnień

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

Page 53: Obiekty, aspekty, komponentyflash.wwsi.edu.pl/wwsivideo/2007/pdf/16.05_walter... · 2010-07-21 · Wprowadzenie do przedmiotu (2) Rozdział zagadnień Zasada rozdziału zagadnień

Wprowadzenie do przedmiotu (53)

Przykład

Sprawny Samochód musi zawierać Silnik.

zawiera

Page 54: Obiekty, aspekty, komponentyflash.wwsi.edu.pl/wwsivideo/2007/pdf/16.05_walter... · 2010-07-21 · Wprowadzenie do przedmiotu (2) Rozdział zagadnień Zasada rozdziału zagadnień

Wprowadzenie do przedmiotu (54)

Tradycyjne rozwiązywanie zależności

komponent C

(Przyczepa)

komponent A

(Samochód)

komponent B

(Silnik)Klient

1. utwórz komponent A

3. utwórz komponent B

2. A zależy od B

4. zmontuj A i B

5. zwróć zmontowane

komponenty A i B

Page 55: Obiekty, aspekty, komponentyflash.wwsi.edu.pl/wwsivideo/2007/pdf/16.05_walter... · 2010-07-21 · Wprowadzenie do przedmiotu (2) Rozdział zagadnień Zasada rozdziału zagadnień

Wprowadzenie do przedmiotu (55)

Odwrócone rozwiązywanie zależności

Kon

tene

r za

rząd

zają

cy k

ompo

nent

ami

komponent C

(Przyczepa)

komponent A

(Samochód)

komponent B

(Silnik)Klient

1. utwórz komponent A

2. znajdź A

4. znajdź B

3. A zależy od B

5. zwróć komponent A

zmontowany z B

Page 56: Obiekty, aspekty, komponentyflash.wwsi.edu.pl/wwsivideo/2007/pdf/16.05_walter... · 2010-07-21 · Wprowadzenie do przedmiotu (2) Rozdział zagadnień Zasada rozdziału zagadnień

Wprowadzenie do przedmiotu (56)

Wybrane sposoby rozwiązywania zależności

Interface

injection

Komponenty implementują dedykowany interfejs,

poprzez który otrzymują obiekt służący do

wyszukiwania zależności

Setter

injection

Zależności są przekazywane przez właściwości

obiektu (metody setXXX() zgodne z konwencją

JavaBeans)

Page 57: Obiekty, aspekty, komponentyflash.wwsi.edu.pl/wwsivideo/2007/pdf/16.05_walter... · 2010-07-21 · Wprowadzenie do przedmiotu (2) Rozdział zagadnień Zasada rozdziału zagadnień

Wprowadzenie do przedmiotu (57)

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");

}

}

Apache Avalon

Page 58: Obiekty, aspekty, komponentyflash.wwsi.edu.pl/wwsivideo/2007/pdf/16.05_walter... · 2010-07-21 · Wprowadzenie do przedmiotu (2) Rozdział zagadnień Zasada rozdziału zagadnień

Wprowadzenie do przedmiotu (58)

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;

}

}

KontenerSamochód -> Silnik -> Silnik1_6

Page 59: Obiekty, aspekty, komponentyflash.wwsi.edu.pl/wwsivideo/2007/pdf/16.05_walter... · 2010-07-21 · Wprowadzenie do przedmiotu (2) Rozdział zagadnień Zasada rozdziału zagadnień

Wprowadzenie do przedmiotu (59)

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

Page 60: Obiekty, aspekty, komponentyflash.wwsi.edu.pl/wwsivideo/2007/pdf/16.05_walter... · 2010-07-21 · Wprowadzenie do przedmiotu (2) Rozdział zagadnień Zasada rozdziału zagadnień

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