Zaawansowane projektowanie obiektowe
Forma zajęć
Wykład (30 godzin) + laboratorium (30 godzin)
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. 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.
Sylabus
Autor sylabusa
- dr inż. Bartosz Walter, Politechnika Poznańska
- email: Bartosz.Walter@cs.put.poznan.pl
Autor kursu
Kurs został opracowany przez dr. inż. Bartosza Waltera z Instytutu Informatyki Politechniki Poznańskiej.
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ęść (4w + 4l) jest poświęcona przypomnieniu podstawowych celów obiektowości oraz mechanizmów, któe je wspierają (dziedziczenia, polimorfizmu), omówieniu ich zastosowań oraz porównaniu możliwości, jakie oferują. Przedstawione też będą podstawowe kryteria jakości projektu obiektowego. Ilustracją jest biblioteka Java Collections i jej ewolucja wraz z rozwojem języka Java.
- Podczas drugiej części (2w + 4l) przypomniane będą zasady testowania jednostkowego z wykorzystaniem dostępnych bibliotek (JUnit 3.8.x, JUnit 4.x, TestNG). Przedstawiona zostanie także koncepcja obiektów zastępczych (ang. mock objects), pozwalająca na testowanie jednostkowe także obiektów o skomplikowanych zależnościach.
- Trzecia część (2w + 2l) dotyczy metryk obiektowych, służących do ilościowej oceny jakości projektu. Obejmuje ona trzy rodziny metryk: MOOD, C&K oraz Martina. Przedstawione zostaną ich definicje, typowe wartości oraz sposoby interpretacji otrzymanych wyników.
- Kolejna część (6w + 6l) jest poświęcona wzorcom projektowym autorstwa Bandy Czterech (Gang of Four), uzupełnionym o kilka wzorców innych autorów.
- W piątej części (8w + 6l) przedstawiona zostanie refaktoryzacja oprogramowania - technika wspomagająca pielęgnację kodu źródłowego. Omówione zostaną założenia refaktoryzacji, sposoby zapewniania jej poprawności, typowe błędne rozwiązania wymagające modyfikacji, wsparcie oferowane przez środowiska deweloperskie oraz przekształcenia refaktoryzacyjne z katalogu M. Fowlera
- Część szósta (2w + 2l) dotyczy programowania aspektowego - nowej techniki programowania, umożliwiającej łatwe łączenie przecinających się zagadnień w kodzie programu z zachowaniem jego modularyzacji. Zagadnienia aspektowe zostaną omówione na przykładzie najpopularniejszego języka AspectJ, jednak w kontekście innych rozwiązań, które są dostępne na rynku.
- 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ą, oraz rozwiązywania zależności, jakie między nimi występują. Zostanie przedstawiona idea wstrzykiwania zależności, wyszukiwania zależności oraz przykładowe rozwiązania korzystającego z tych koncepcji. Przykłady zostaną omówione na podstawie biblioteki Spring.
Moduły
Wykłady
- Wprowadzenie do przedmiotu [Wykład PDF | wiki | SWF], [Test SWF], [Lab wiki]
- Przykład biblioteki obiektowej - Java Collections [Wykład PDF | wiki | SWF], [Test SWF], [Lab wiki]
- Testowanie jednostkowe [Wykład PDF | wiki | SWF], [Test SWF], [Lab wiki]
- Metryki obiektowe [Wykład PDF | wiki | SWF], [Test SWF], [Lab wiki]
- Wzorce projektowe, cz. I [Wykład PDF | wiki | SWF], [Test SWF], [Lab wiki]
- Wzorce projektowe, cz. II [Wykład PDF | wiki | SWF], [Test SWF], [Lab wiki]
- Wzorce projektowe, cz. III [Wykład PDF | wiki | SWF], [Test SWF], [Lab wiki]
- Wprowadzenie do refaktoryzacji [Wykład PDF | wiki | SWF], [Test SWF], [Lab wiki]
- Katalog przekształceń refaktoryzacyjnych cz. I [Wykład PDF | wiki | SWF], [Test SWF], [Lab wiki]
- Katalog przekształceń refaktoryzacyjnych cz. II [Wykład PDF | wiki | SWF], [Test SWF], [Lab wiki]
- Katalog przekształceń refaktoryzacyjnych cz. III [Wykład PDF | wiki | SWF], [Test SWF], [Lab wiki]
- Programowanie aspektowe [Wykład PDF | wiki | SWF], [Test SWF], [Lab wiki]
- Programowanie komponentowe [Wykład PDF | wiki | SWF], [Test SWF], [Lab wiki]
Ćwiczenia
- Wprowadzenie do przedmiotu [Lab wiki]
- Przykład biblioteki obiektowej - Java Collections [Lab wiki]
- Testowanie jednostkowe [Lab wiki]
- Testowanie z użyciem obiektów zastępczych [Lab wiki]
- Metryki obiektowe [Lab wiki]
- Wzorce projektowe, cz. I [Lab wiki]
- Wzorce projektowe, cz. II [Lab wiki]
- Wzorce projektowe, cz. III [Lab wiki]
- Refaktoryzacja za pomocą Eclipse [Lab wiki]
- Refaktoryzacja z wykorzystaniem testów jednostkowych [Lab wiki]
- Katalog przekształceń refaktoryzacyjnych [Lab wiki]
- Programowanie aspektowe [Lab wiki]
- Programowanie komponentowe [Lab wiki]
Literatura
- E. Gamma i in.: Wzorce projektowe. Elementy oprogramowania obiektowego wielokrotnego użytku, WNT, 2005
- B. Eckel: Thinking in Java. Wydanie II lub III, Helion, 2003
- M. Fowler: Refaktoryzacja. Ulepszanie struktury istniejącego kodu. WNT, 2006
- B. Henderson-Sellers: Object-oriented metrics. Measures of complexity. Prentice Hall, 1995.