Organizacja zajęć projektu z Technologii Obiektowych
- Projekty wykonywane są w grupach 3-4 osobowych. Inna liczebność członków zespołu projektowego wymaga zgody Prowadzącego.
- Każdy zespół projektowy wybiera swojego team leadera, który odpowiada za koordynację pracy w zespole. Team leader odpowiada za kontakt z Prowadzącym w imieniu zespołu osobiście, bądź może do tego wyznaczyć inną osobę.
- Każdy zespół musi dotrzymywać terminów wg Harmonogramu opisanego poniżej.
- Na zaliczenie projektu musi stawić się cały zespół.
- Przebieg zaliczenia projektu odbywa się wg następujących punktów:
- Przedstawienie tematyki projektu i założeń projektowych
- Prezentacja aplikacji wraz z przeprowadzonymi testami
- Przedstawienie sposobu implementacji poszczególnych elementów aplikacji (kod źródłowy, użyte biblioteki, narzędzia itp.)
- Obrona projektu - każdy z członków zespołu referuje część aplikacji wykonaną przez siebie
- Złożenie sprawozdania - dokumentacja techniczna w formie papierowej oraz dokumentacja wraz z kodami źródłowymi w wersji elektronicznej (wysłanej na wskazanego maila)
Harmonogram spotkań (dokładne terminy spotkań do uzgodnienia z teamleaderem):
- Do 5 kwietnia 2020 r. - Zgłoszenie zespołów projektowych z wskazaniem Team Leadera. Zgłoszenie tematów projektów (tematy MUSZĄ być unikalne). Przygotowanie wstępnej listy funkcjonalności projektu. Zarejestrowanie kont na GitLab wskazanym przez Prowadzącego.
- 30 marca - 2 kwietnia - Przygotowanie prezentacji z pełnymi założeniami projektu: Treść założeń, schemat baz danych (jeśli dotyczy), wykorzystywane technologie, diagramy UML.
- Ostatni tydzien semestru - I termin oddania projektu
Wymagania dotyczące projektu
- Projekt musi być zaimplementowany w obiektowym, nieskryptowym języku programowania.
- Konkretny język programowania pozostaje do wyboru zespołu projektowego
- Tematyka projektów powinna dotyczyć np. programów użytkowych. Nie powinny to być systemy webowe (a przynajmniej nie używamy serwerów aplikacyjnych). Nadają się również gry, implementacje sieciowych protokołów komunikacyjnych, wszelkiego rodzaju toolsy dla użytkowników, systemy integrujące się z zewnętrznymi usługami i np. agregowanie wyników itp. Przykładowych kilka tematów poniżej.
- W ramach projektu i implementacji należy uwzględniać możliwie dużo zagadnień dotyczących OOP. Powinny się znaleźć:
- przynajmniej po 2 różne wzorce projektowe konstrukcyjne, strukturalne, czynnościowe (użycie konkretnego wzorca powinno być uzasadnione konkretną funkcjonalnością projektu. Nie tworzymy "sztucznych" zastosowań),
- obsługa wielowątkowości (wykorzystujemy dostępny sprzęt - optymalizujemy wydajność) - mile widziane zastosowanie mechanizmów wspierających wielowątkowość (np. Executors w Javie)
- stosujemy zasady "czystego kodu" - SOLID, DRY, KISS
- korzystamy z w miarę najnowszych wersji języków programowania (tzn., że korzystamy z dobrodziejstw nowszych wersji - dla przykładu: korzystanie z Javy 8, 11, 13 i brak stosowania Optional, LocalDateTime, Stream itp nie spełnia założeń)
- dozwolone i mile widziane jest stosowanie z mechanizmów ORM
- stosujemy dziedziczenia, polimorfizm itd.
- mile widziane AOP (Aspect Oriented Programming)
- Każdy projekt musi mieć zaimplementowane testy jednostkowe oraz integracyjne
Przykładowe tematy
- Projekt i implementacja programu do szyfrowania plików i katalogów. Należy zaimplementować mechanizm tworzenia klucz szyfrujący (szyfrowanie synchroniczne).
- Projekt i implementacja programu do dodawania i odczytywania metatagów dla plików multimedialnych (możliwość umieszczania np. informacji o właścicielu pliku).
- Projekt i implementacja biblioteki implementującej mechanizm ORM
- Projekt i implementacja generatora klas warstwy DTO np.: klasa Javy <=> JSON <=> TypeScript.
- .................... (rozważam Państwa propozycje. W razie potrzeby wymyślę kolejne)