Zaawansowane projektowanie obiektowe: Różnice pomiędzy wersjami

Z Studia Informatyczne
Przejdź do nawigacjiPrzejdź do wyszukiwania
Bwalter (dyskusja | edycje)
Bwalter (dyskusja | edycje)
Linia 3: Linia 3:


== Opis ==
== Opis ==
Umiejętność wykorzystania możliwości, jakie daje paradygmat obiektowy, pozwala tworzyć oprogramowanie lepiej zmodularyzowane, łatwiejsze do modyfikacji i tańsze w pielęgnacji.
Wykorzystanie możliwości stwarzanych przez paradygmat obiektowy pozwala tworzyć oprogramowanie o lepszej strukturze, a więc bardziej zrozumiałe, łatwiejsze w modyfikacji oraz tańsze w pielęgnacji. Dlatego umiejętność doboru i prawidłowego użycia mechanizmów obiektowych: polimorfizmu, dziedziczenia, hermetyzacji i innych w osiąganiu założonego efektu jest kluczowa dla każdego programisty i projektanta oprogramowania.
Powstanie koncepcji wzorców projektowych, a następnie przeniesienie jej na inne obszary informatyki związane z programowaniem, świadczą o wadze tych zagadnień oraz zainteresowaniu nimi ze strony programistów.
Celem wykładu jest przypomnienie zadań i metod projektowania obiektowego, a także zaprezentowanie niektórych nowych koncepcji, które w ostatnich latach przeżywają gwałtowny rozwój.
Pierwszy ważny obszar dotyczy technik testowania jednostkowego, doboru strategii tworzenia testów i wykorzystania w tym celu specjalizowanego oprogramowania.
Kolejna grupa zagadnień dotyczy wzorców projektowych, ich genezy, zastosowań oraz przykładów wykorzystania.
Trzeci obszar dotyczy refaktoryzacji oprogramowania, pozwalającej efektywnie wspomagać procesy pielęgnacji kodu źródłowego.
Elementami uzupełniającymi wykład są zagadnienia związane z metrykami obiektowymi, programowaniem aspektowym i wprowadzeniem do programowania komponentowego.


Wszystkie problemy zostaną przedstawione na przykładzie popularnego języka programowania Java.
Celem przedmiotu jest zaprezentowanie najważniejszych kierunków rozwoju technik obiektowych oraz ich praktycznego wykorzystania w tworzeniu oprogramowania.
 
Składa się on z pięciu zasadniczych części. Pierwszy obszar dotyczy metod i praktyk testowania jednostkowego, doboru strategii tworzenia testów (m.in. obiektów zastępczych) i wykorzystania w tym celu specjalizowanego oprogramowania (np. JUnit, TestNG). W drugiej części omówione zostaną zagadnienia związane metrykami określającymi jakość programów obiektowych oraz wykorzystaniem poszczególnych mechanizmów obiektowych.
Trzecia grupa zagadnień dotyczy wzorców projektowych, ich genezy, zastosowań oraz przykładów wykorzystania w praktycznych sytuacjach.
Czwarty obszar jest poświęcony refaktoryzacji oprogramowania - technice pozwalającej efektywnie wspomagać procesy pielęgnacji kodu źródłowego programów.
Ostatnia, piąta część zajęć dotyczy dwóch, relatywnie nowych technik programowania: programowania aspektowego oraz komponentowego.
 
Problemy przedstawione podczas zajęć są prezentowane na przykładzie popularnego języka programowania Java, jego bibliotek i rozszerzeń,


== Sylabus ==
== Sylabus ==

Wersja z 23:09, 15 wrz 2006

Forma zajęć

Wykład (30 godzin) + laboratorium (30 godzin)

Opis

Wykorzystanie możliwości stwarzanych przez paradygmat obiektowy pozwala tworzyć oprogramowanie o lepszej strukturze, a więc bardziej zrozumiałe, łatwiejsze w modyfikacji oraz tańsze w pielęgnacji. Dlatego umiejętność doboru i prawidłowego użycia mechanizmów obiektowych: polimorfizmu, dziedziczenia, hermetyzacji i innych w osiąganiu założonego efektu jest kluczowa dla każdego programisty i projektanta oprogramowania.

Celem przedmiotu jest zaprezentowanie najważniejszych kierunków rozwoju technik obiektowych oraz ich praktycznego wykorzystania w tworzeniu oprogramowania.

Składa się on z pięciu zasadniczych części. Pierwszy obszar dotyczy metod i praktyk testowania jednostkowego, doboru strategii tworzenia testów (m.in. obiektów zastępczych) i wykorzystania w tym celu specjalizowanego oprogramowania (np. JUnit, TestNG). W drugiej części omówione zostaną zagadnienia związane metrykami określającymi jakość programów obiektowych oraz wykorzystaniem poszczególnych mechanizmów obiektowych. Trzecia grupa zagadnień dotyczy wzorców projektowych, ich genezy, zastosowań oraz przykładów wykorzystania w praktycznych sytuacjach. Czwarty obszar jest poświęcony refaktoryzacji oprogramowania - technice pozwalającej efektywnie wspomagać procesy pielęgnacji kodu źródłowego programów. Ostatnia, piąta część zajęć dotyczy dwóch, relatywnie nowych technik programowania: programowania aspektowego oraz komponentowego.

Problemy przedstawione podczas zajęć są prezentowane na przykładzie popularnego języka programowania Java, jego bibliotek i rozszerzeń,

Sylabus

Autor sylabusa

  • dr inż. Bartosz Walter, Politechnika Poznańska
  • email: Bartosz.Walter@cs.put.poznan.pl

Autor kursu

Kurs został opracowany przez zespół pracowników Instytutu Informatyki Politechniki Poznańskiej: dr. inż. Bartosza Waltera, dr. inż. Wojciecha Complaka, mgr inż. Bartosza Bogackiego i mgr inż. Błażeja Pietrzaka

Wymagania wstępne

  • Zrozumienie istoty paradygmatu obiektowego (Programowanie obiektowe)
  • Zagadnienia związane z tworzeniem oraz pielęgnacją oprogramowania w modelu przyrostowym i pomiarami oprogramowania (Inżynieria oprogramowania)

Zawartość

  • Pierwsza część (5w + 5l) jest poświęcona przypomnieniu podstawowych celów obiektowości (przede wszystkim określeniu odpowiedzialności klasy) oraz mechanizmów, któe je wspierają (dziedziczenia, polimorfizmu, interfejsów), omówieniu ich zastosowań oraz porównaniu możliwości, jakie oferują. Przedstawione też są podstawowe kryteria jakości projektu obiektowego: spójność i powiązania między obiektami. Treść jest ilustrowana przykładami i porównaniem różnych rozwiązań obiektowych, w tym także biblioteki Java Collections i jej ewolucji wraz z rozwojem języka Java.
  • Podczas drugiej części (3w + 4l) przedstawione są zasady testowania jednostkowego z wykorzystaniem popularnej biblioteki JUnit 3.8, oraz nowe cechy i funkcje wprowadzone w nowej generacji bibliek JUnit 4.x i TestNG, korzystających z możliwości oferowanych przez Java 5.0. Drugim elementem tej części przedmiotu jest koncepcja obiektów zastępczych (ang. mock objects), pozwalających na stosowanie testowania jednostkowego także wobec obiektów o skomplikowanych zależnościach. Podczas kursu przedstawione są statyczne i dynamiczne techniki generowania obiektów zastępczych oraz sposoby ich wykorzystania.
  • Trzecia część (2w + 2l) dotyczy metryk obiektowych, służących do ilościowej oceny jakości projektu. Obejmuje ona trzy rodziny metryk: MOOD, Chidamber&Kemerer oraz metryki R. Martina. Najważniejsze z nich dotyczą stopnia wykorzystania mechanizmów obiektowych, spójności klas, ich powiązań oraz złożoności metod. Przedstawione zostaną definicje metryk, typowe wartości oraz sposoby interpretacji otrzymanych wyników i ich wykorzystania przy poprawie jakości kodu.
  • Kolejna część (7w + 7l) jest poświęcona koncepcji wzorców projektowych, w tym przede wszystkim katalogowi autorstwa Bandy Czterech (Gang of Four), uzupełnionym o kilka wzorców innych autorów. Wzorce są omówione zgodnie z szablonem zaproponowanym przez Bandę Czterech oraz ilustrowane przykładami.
  • W piątej części (9w + 8l) przedstawiona zostanie idea refaktoryzacji oprogramowania - techniki wspomagającej ciągłą pielęgnację kodu źródłowego. Wykład omawia założenia refaktoryzacji, sposoby zapewniania jej poprawności, typowe błędne rozwiązania wymagające modyfikacji, wsparcie oferowane przez środowiska deweloperskie oraz kilkadziesiąt przekształceń refaktoryzacyjnych z katalogu M. Fowlera, ilustrowanych przykładami.
  • Część szósta (2w + 2l) dotyczy programowania aspektowego - nowej techniki programowania, umożliwiającej łatwe łączenie przecinających się zagadnień (ang. croscutting concerns) w kodzie programu z zachowaniem jego modularyzacji. Zagadnienia aspektowe są omówione na przykładzie najpopularniejszego języka AspectJ.
  • Ostatnia, siódma część kursu (2w + 2l) jest poświęcona wprowadzeniu do programowania komponentowego. Jej celem jest przybliżenie koncepcji komponentu, sposobom łączenia komponentów ze sobą, osadzania ich w kontenerze, oraz rozwiązywania zależności, jakie między komponentami występują. Wykład przedstawia ideę wstrzykiwania zależności za pomocą różnych technik, wyszukiwania zależności z wykorzystaniem wzorca Service Locator oraz przykładowe rozwiązania korzystającego z tych koncepcji. Przykłady są omówione na bazie kontenera Spring.

Moduły

Wykłady

  1. Wprowadzenie do przedmiotu PDF | wiki | SWF, [Test SWF]
  2. Przykład biblioteki obiektowej - Java Collections PDF | wiki | SWF, [Test SWF]
  3. Testowanie jednostkowe PDF | wiki | SWF, [Test SWF]
  4. Metryki obiektowe PDF | wiki | SWF, [Test SWF]
  5. Wzorce projektowe, cz. I PDF | wiki | SWF, [Test SWF]
  6. Wzorce projektowe, cz. II PDF | wiki | SWF, [Test SWF]
  7. Wzorce projektowe, cz. III PDF | wiki | SWF, [Test SWF]
  8. Wprowadzenie do refaktoryzacji PDF | wiki | SWF, [Test SWF]
  9. Katalog przekształceń refaktoryzacyjnych cz. I PDF | wiki | SWF, [Test SWF]
  10. Katalog przekształceń refaktoryzacyjnych cz. II PDF | wiki | SWF, [Test SWF]
  11. Katalog przekształceń refaktoryzacyjnych cz. III PDF | wiki | SWF, [Test SWF]
  12. Programowanie aspektowe PDF | wiki | SWF, [Test SWF]
  13. Programowanie komponentowe PDF | wiki | SWF, [Test SWF]

Ćwiczenia

  1. Wprowadzenie do przedmiotu wiki
  2. Przykład biblioteki obiektowej - Java Collections wiki
  3. Testowanie jednostkowe wiki
  4. Testowanie z użyciem obiektów zastępczych wiki
  5. Metryki obiektowe wiki
  6. Wzorce projektowe, cz. I wiki
  7. Wzorce projektowe, cz. II wiki
  8. Wzorce projektowe, cz. III wiki
  9. Refaktoryzacja za pomocą Eclipse wiki
  10. Refaktoryzacja z wykorzystaniem testów jednostkowych wiki
  11. Katalog przekształceń refaktoryzacyjnych wiki
  12. Programowanie aspektowe wiki
  13. Programowanie komponentowe wiki

Literatura

  1. E. Gamma i in.: Wzorce projektowe. Elementy oprogramowania obiektowego wielokrotnego użytku, WNT, 2005
  2. J. Cooper "Java. Wzorce projektowe". Helion, 2001
  3. A. Shalloway, J. R. Trott "Programowanie zorientowane obiektowo. Wzorce projektowe". Wydanie II, Helion, 2005.
  4. B. Eckel: Thinking in Java. Wydanie II lub III, Helion, 2003
  5. M. Fowler: Refaktoryzacja. Ulepszanie struktury istniejącego kodu. WNT, 2006
  6. B. Henderson-Sellers: Object-oriented metrics. Measures of complexity. Prentice Hall, 1995.
  7. M. Stochmiałek "Wprowadzenie do programowania aspektowego". e-Informatyka
  8. R. Laddad "AspectJ in Action. Practical Aspect-oriented Programming". Manning Publications, 2003.
  9. N. Lesiecki "Improve modularity with AspectJ programming". IBM
  10. M. Fowler "Inversion of Control Containers and the Dependency Injection pattern". http://www.martinfowler.com/articles/injection.html
  11. R.C. Martin "Dependency Inversion Pattern". http://www.objectmentor.com/resources/articles/dip.pdf