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 PDF | wiki | SWF, [Test SWF]
- Przykład biblioteki obiektowej - Java Collections PDF | wiki | SWF, [Test SWF]
- Testowanie jednostkowe PDF | wiki | SWF, [Test SWF]
- Metryki obiektowe PDF | wiki | SWF, [Test SWF]
- Wzorce projektowe, cz. I PDF | wiki | SWF, [Test SWF]
- Wzorce projektowe, cz. II PDF | wiki | SWF, [Test SWF]
- Wzorce projektowe, cz. III PDF | wiki | SWF, [Test SWF]
- Wprowadzenie do refaktoryzacji PDF | wiki | SWF, [Test SWF]
- Katalog przekształceń refaktoryzacyjnych cz. I PDF | wiki | SWF, [Test SWF]
- Katalog przekształceń refaktoryzacyjnych cz. II PDF | wiki | SWF, [Test SWF]
- Katalog przekształceń refaktoryzacyjnych cz. III PDF | wiki | SWF, [Test SWF]
- Programowanie aspektowe PDF | wiki | SWF, [Test SWF]
- Programowanie komponentowe PDF | wiki | SWF, [Test SWF]
Ćwiczenia
- Wprowadzenie do przedmiotu wiki
- Przykład biblioteki obiektowej - Java Collections wiki
- Testowanie jednostkowe wiki
- Testowanie z użyciem obiektów zastępczych wiki
- Metryki obiektowe wiki
- Wzorce projektowe, cz. I wiki
- Wzorce projektowe, cz. II wiki
- Wzorce projektowe, cz. III wiki
- Refaktoryzacja za pomocą Eclipse wiki
- Refaktoryzacja z wykorzystaniem testów jednostkowych wiki
- Katalog przekształceń refaktoryzacyjnych wiki
- Programowanie aspektowe wiki
- Programowanie komponentowe wiki
Literatura
- E. Gamma i in.: Wzorce projektowe. Elementy oprogramowania obiektowego wielokrotnego użytku, WNT, 2005
- J. Cooper "Java. Wzorce projektowe". Helion, 2001
- A. Shalloway, J. R. Trott "Programowanie zorientowane obiektowo. Wzorce projektowe". Wydanie II, Helion, 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.
- M. Stochmiałek "Wprowadzenie do programowania aspektowego". e-Informatyka
- R. Laddad "AspectJ in Action. Practical Aspect-oriented Programming". Manning Publications, 2003.
- N. Lesiecki "Improve modularity with AspectJ programming". IBM
- M. Fowler "Inversion of Control Containers and the Dependency Injection pattern". http://www.martinfowler.com/articles/injection.html
- R.C. Martin "Dependency Inversion Pattern". http://www.objectmentor.com/resources/articles/dip.pdf