Wydział Informatyki
Kierunek studiów Informatyka Poziom i forma studiów pierwszego stopnia inżynierskie stacjonarne
Specjalność / Ścieżka dyplomowania --- Profil kształcenia ogólnoakademicki
Nazwa przedmiotu Zaawansowane zagadnienia programowania Kod przedmiotu INF1ZZP
Rodzaj przedmiotu obieralny
Forma zajęć i liczba godzin W Ć L P Ps T S Semestr 5
45 Punkty ECTS 5
Przedmioty wprowadzające
Cele przedmiotu

Celem przedmiotu jest pogłębienie znajomości wybranych zagadnień programowania nieomawianych w ramach innych przedmiotów z obszaru Inżynierii Oprogramowania. Zagadnienia te będą obejmowały ciekawe aspekty programowania (z naciskiem na język Java) niezbędne przy pracy na realnych projektach w biznesie.

Po ukończeniu kursu student:
1. Posiada pogłębioną wiedzę na temat języków obiektowych (szczególnie Java) w kontekście realnych problemów biznesowych.
2. Potrafi zastosować wzorce projektowe w praktyce.
3. Tworzy oprogramowanie w wyższej jakości dzięki poznaniu technik zarządzania jakością w kodzie i procesem Quality Assurance.
4. Potrafi technicznie analizować wymagania biznesowe i projektować/implementować rozwiązania w wysokiej jakości.

Treści programowe

Do prowadzenia przedmiotu wykorzystana będzie platforma TEWI.

Agenda przedmiotu:

1. Wzorce projektowe w praktyce (anty-wzorce, refaktoryzacja do wzorców, kodowanie na żywo wzorców: strategii, metody szablonowej, obserwatora, fabryki, wizytatora i dekoratora. Przykłady z Java SE API)
2. Najlepsze praktyki programowania w Javie – dwa zajęcia (standardy kodowanie, JNC, formatowanie kodu, standardy nazewnicze. Zasady SOLID.
3. Zaawansane zagadnienia Java Virtual Machine (parametry uruchamiania JVM, obszary pamięci i cykl życia obiektów. Algorytmy garbage collection, konfiguracja GC, przeglądanie logów GC. Technologia JMX, metody analizy uruchomionego JVM przy użyciu standardowych MBeanów, tworzenie własnych. Zapoznanie z narzędziem VisualVM).
4. Programowanie wielowątkowe w Javie (przypomnienia problemów wielowątkowości. Java API do tworzenia i zarządzania wątkami. Zmienne atomowe. Synchronizacja na monitorach. Analiza kodu pod kątem potencjalnych problemów w dostępie wielowątkowym. Kolecje bezpieczne dla wątków, pakiet java.util.concurrent)
5. Technologie wspomającące Continous Integration na przykładzie Jenkinsa. Jezyki skryptowe kompilowane do bajtokodu: Jython, Groovy, Scala. Zarządzanie projektami Agile – Jira Agile).
6. Wprowadzenie do automatycznego testowania UI na stronach WWW – Selenium).
7. Programowanie aspektowe (wprowadzenie do aspektów, anatomia aspektu. Metody instrumentalizacji – statyczna vs. dynamiczna. Konfiguracja dynamicznego weavera. Przegląd pointcutów na konkretnych przykładach)
8. Zaawansowany Javascript (widocznośc zmiennych, hoisting. Zarządzanie obiektami, mix-iny. Pułapki przy pętlach sterujących, currying. Modelowanie klas, dziedziczenie. Przestrzenie nazw, wzorzec modułu i sandbox)
9. Alternatywne systemy baz danych (wprowadzenie do NoSQL. Grafowe bazy danych na przykładzie Neo4j. Dokumentowe bazy danych. Przegląd aktualnych i najbardziej perspektywicznych technologii NoSQL wraz z prostymi przykładami)

Metody dydaktyczne

programowanie z użyciem komputera,   metoda przypadków,  

Forma zaliczenia

Ocena wykonywanych zadań praktycznych. Kolokwium.

Symbol efektu uczenia się Zakładane efekty uczenia się Odniesienie do kierunkowych efektów uczenia się
EU1 wykorzystuje wiedzę na temat języków obiektowych (szczególnie Java) w kontekście realnych problemów biznesowych
EU2 potrafi zastosować wzorce projektowe w praktyce
EU3 tworzy oprogramowanie w wyższej jakości dzięki poznaniu technik zarządzania jakością w kodzie i procesem Quality Assurance
EU4 potrafi technicznie analizować wymagania biznesowe i projektować/implementować rozwiązania w wysokiej jakości
Symbol efektu uczenia się Sposób weryfikacji efektu uczenia się Forma zajęć na której zachodzi weryfikacja
EU1 ocena wykonywanych aplikacji, kolokwium Ps
EU2 ocena wykonywanych aplikacji Ps
EU3 ocena wykonywanych aplikacji Ps
EU4 ocena wykonywanych aplikacji, kolokwium Ps
Bilans nakładu pracy studenta (w godzinach) Liczba godz.
Wyliczenie
1 - Udział w zajęciach - 15 x 3h = 45
2 - Realizacja zadań domowych 70
3 - Udział w konsultacjach 2
4 - Przygotowanie do zaliczenia kolokwium 10
RAZEM: 127
Wskaźniki ilościowe GODZINY ECTS
Nakład pracy studenta związany z zajęciami wymagającymi bezpośredniego udziału nauczyciela 47
(3)+(1)
1.9
Nakład pracy studenta związany z zajęciami o charakterze praktycznym 127
(3)+(4)+(2)+(1)
5.0
Literatura podstawowa

1. Arnold, Ken, and James Gosling. The Java programming language. 3rd ed. Boston: Addison-Wesley, 2000. Print.
2. Berg, Alan. Jenkins Continuous Integration Cookbook. Birmingham: Packt Publishing, 2012. Print.
3. Flanagan, David. JavaScript: the definitive guide. 3rd ed. Cambridge: O'Reilly, 1998. Print.
4. Gamma, Erich. Design patterns: elements of reusable object-oriented software. Reading, Mass.: Addison-Wesley, 1995. Print.
5. Gradecki, Joe, and Nicholas Lesiecki. Mastering AspectJ aspect-oriented programming in Java. Indianpolis, Ind.: Wiley, 2003. Print.

Literatura uzupełniająca

1. Beck, Kent. JUnit. Sebastopol (Calif.): O'Reilly, 2004. Print.
2. Ching, Maria Odea, Brett Porter, Wendy Smoak, and Carsten Ziegeler. Apache Maven 2 effective implementation build and manage applications with Maven, Continuum, and Archiva. Birmingham, UK: Packt Pub., 2009. Print.
3. FernaÌndez, Javier. Java 7 concurrency cookbook. Birmingham: Packt Pub., 2012. Print.
4. Goetz, Brian. Java concurrency in practice. Upper Saddle River, NJ: Addison-Wesley, 2006. Print.
5. Magee, Jeff, and Jeff Kramer. Concurrency: state models & Java programs. Chichester [England: Wiley, 1999. Print.

Jednostka realizująca Interesariusz zewnętrzny Data opracowania programu
Program opracował(a) 2025.05.12