Module also offered within study programmes:
General information:
Name:
Object-oriented Programming 2
Course of study:
2018/2019
Code:
JIS-1-501-s
Faculty of:
Physics and Applied Computer Science
Study level:
First-cycle studies
Specialty:
-
Field of study:
Applied Computer Science
Semester:
5
Profile of education:
Academic (A)
Lecture language:
Polish
Form and type of study:
Full-time studies
Responsible teacher:
dr hab. inż. Wołoszyn Maciej (woloszyn@newton.fis.agh.edu.pl)
Academic teachers:
dr inż. Malinowski Janusz (malinowski@fis.agh.edu.pl)
dr hab. inż. Wołoszyn Maciej (woloszyn@newton.fis.agh.edu.pl)
Module summary

Celem kursu jest zapoznanie się z technikami programowania obiektowego opartymi na języku Java, w tym m.in. w zastosowaniu do testowania oprogramowania, wykorzystania wątków czy obsługi sieci.

Description of learning outcomes for module
MLO code Student after module completion has the knowledge/ knows how to/is able to Connections with FLO Method of learning outcomes verification (form of completion)
Social competence
M_K001 Student posiada umiejętność zwięzłego i precyzyjnego opisania własnych rozwiązań oraz określenia możliwych zastosowań. IS1A_K03, IS1A_K01 Participation in a discussion,
Execution of laboratory classes
Skills
M_U001 Student potrafi stworzyć aplikacje oraz aplety z wykorzystaniem języka Java, zastosować w nich zasadnicze techniki obiektowe (enkapsulacja, dziedziczenie, polimorfizm), a także przygotować dokumentację kodu źródłowego za pomocą javadoc. IS1A_U06, IS1A_U04, IS1A_U02 Execution of laboratory classes
M_U002 Student potrafi wykorzystać dodatkowe biblioteki oraz narzędzia dla języka Java w celu możliwie efektywnej realizacji postawionych zadań, w tym do debugowania i testowania oprogramowania. IS1A_U06, IS1A_U05 Execution of laboratory classes
M_U003 Student umie samodzielnie wyszukiwać szczegółowe informacje w dostępnych zasobach dokumentacji oraz korzystać z popularnych środowisk programistycznych takich jak NetBeans i Eclipse. IS1A_U06, IS1A_U05, IS1A_U01 Execution of laboratory classes
Knowledge
M_W001 Student zna i rozumie składnię języka Java, wie jak funkcjonuje środowisko uruchomieniowe, a także na czym polega różnica między kompilacją do postaci kodu bajtowego i do kodu binarnego, oraz między uruchomieniem i sposobem działania obu tych rozwiązań, w tym różnice w zarządzaniu pamięcią. IS1A_W03, IS1A_W02 Activity during classes,
Examination,
Participation in a discussion,
Execution of laboratory classes
M_W002 Student zna założenia paradygmatu programowania obiektowego i wie jak je realizować za pomocą mechanizmów dostępnych w języku Java, oraz jakie są różnice w stosunku do języka C++. IS1A_W03, IS1A_W02 Activity during classes,
Examination,
Participation in a discussion,
Execution of laboratory classes
FLO matrix in relation to forms of classes
MLO code Student after module completion has the knowledge/ knows how to/is able to Form of classes
Lecture
Audit. classes
Lab. classes
Project classes
Conv. seminar
Seminar classes
Pract. classes
Zaj. terenowe
Zaj. warsztatowe
Others
E-learning
Social competence
M_K001 Student posiada umiejętność zwięzłego i precyzyjnego opisania własnych rozwiązań oraz określenia możliwych zastosowań. - - + - - - - - - - -
Skills
M_U001 Student potrafi stworzyć aplikacje oraz aplety z wykorzystaniem języka Java, zastosować w nich zasadnicze techniki obiektowe (enkapsulacja, dziedziczenie, polimorfizm), a także przygotować dokumentację kodu źródłowego za pomocą javadoc. + - + - - - - - - - -
M_U002 Student potrafi wykorzystać dodatkowe biblioteki oraz narzędzia dla języka Java w celu możliwie efektywnej realizacji postawionych zadań, w tym do debugowania i testowania oprogramowania. + - + - - - - - - - -
M_U003 Student umie samodzielnie wyszukiwać szczegółowe informacje w dostępnych zasobach dokumentacji oraz korzystać z popularnych środowisk programistycznych takich jak NetBeans i Eclipse. + - + - - - - - - - -
Knowledge
M_W001 Student zna i rozumie składnię języka Java, wie jak funkcjonuje środowisko uruchomieniowe, a także na czym polega różnica między kompilacją do postaci kodu bajtowego i do kodu binarnego, oraz między uruchomieniem i sposobem działania obu tych rozwiązań, w tym różnice w zarządzaniu pamięcią. + - + - - - - - - - -
M_W002 Student zna założenia paradygmatu programowania obiektowego i wie jak je realizować za pomocą mechanizmów dostępnych w języku Java, oraz jakie są różnice w stosunku do języka C++. + - + - - - - - - - -
Module content
Lectures:

– Język Java: charakterystyka, składnia, konwencje tworzenia kodu, typy danych, operatory. Kompilatory i środowiska programistyczne.

– Klasy w Javie: metody i pola, dostęp do danych i enkapsulacja, składowe statyczne, składowe final. Klasy final. Organizacja plików źródłowych. Dokumentowanie klas w Javie. Tablice jedno- i wielowymiarowe, klasa Arrays.

– Klasa String i inne podstawowe klasy języka Java. Pakiety: sposób użycia oraz definiowanie własnych. Przeładowanie metod. Konstruktory. Referencja this.

– Zarządzanie pamięcią, Garbage Collector.

– Dziedziczenie. Polimorfizm. Wczesne i późne wiązanie. Interfejsy. Klasy wewnętrzne. Typ wyliczeniowy.

– Wyjątki i obsługa błędów, wyjątki sprawdzane i niesprawdzane, hierarchia klas reprezentujących wyjątki.

– Mechanizm refleksji – wykrywanie typów. Obiekt Class.

– Operacje wejścia/wyjścia. Strumienie bajtowe i znakowe. Buforowanie.

– Serializacja. Sieci obiektów. Wersje serializowanych obiektów.

– Klasy generyczne (uogólnione). Metody sparametryzowane. Typy surowe.

– Kolekcje, iteratory, komparatory, algorytmy.

– Wątki: uruchamianie, priorytety, synchronizacja, komunikacja.

– Obsługa operacji sieciowych. Klasy biblioteczne z pakietu java.util.

– Adnotacje. Testowanie: asercje, JUnit. Debugowanie, JDB.

Laboratory classes:

1. Zapoznanie się z JDK i narzędziami dostępnymi w pracowni komputerowej
Efekty kształcenia:
– student potrafi samodzielnie przygotować plik z kodem źródłowym prostego, opartego na przykładach z wykładu, programu w języku Java, z zastosowaniem ogólnie przyjętych dla Javy konwencji,
– student umie kompilować go do postaci kodu bajtowego i potrafi zinterpretować pojawiające się komunikaty o błędach i wykorzystać je do wprowadzenia poprawek w kodzie,
– student potrafi uruchomić program za pomocą środowiska uruchomieniowego.

2. Definiowanie własnych klas i tworzenie obiektów w języku Java
Efekty kształcenia:
– student potrafi zastosować dostępne typy danych prostych,
– student potrafi definiować klasy z zestawem pól, konstruktorów i innych metod (w tym przeładowanych), zgodnie z przedstawionymi wymaganiami, oraz umieszczać przygotowane definicje w odpowiednich plikach,
– student potrafi wykorzystać samodzielnie zdefiniowane oraz podstawowe biblioteczne klasy (np. String) do tworzenia obiektów, oraz posługiwać się nimi za pomocą referencji i dostępnych operatorów,
– student potrafi prawidłowo zaplanować i zdefiniować dostęp (publiczny, prywatny, pakietowy) do składników klas, a także wykorzystywać pola, metody i klasy typu final,
– student potrafi zaplanować i opisać cykl życia obiektu, oraz jego związek z zagadnieniem zarządzania pamięcią w języku Java,
– student potrafi korzystać z tablic zarówno do obsługi typów prostych, jak i obiektów,
– student potrafi definiować i wykorzystywać klasy wewnętrzne oraz typy wyliczeniowe,
– student potrafi zdefiniować własny pakiet i przygotować odpowiednią strukturę katalogów i plików źródłowych,
– student potrafi wskazać różnice w realizacji powyższych zadań w językach Java i C++.

3. Dziedziczenie, interfejsy i polimorfizm
Efekty kształcenia:
– student potrafi zaproponować i przygotować hierarchię dziedziczących po sobie klas do opisania zadanego w ogólny, opisowy sposób problemu,
– student potrafi wykorzystać we własnych klasach możliwości pojawiające się dzięki dziedziczeniu po klasie Object definiującej określone metody,
– student potrafi operować na dziedziczących po sobie obiektach z wykorzystaniem skutków polimorfizmu,
– student potrafi operować na klasach wewnętrznych powiązanych relacjami dziedziczenia,
– student potrafi definiować i wykorzystywać klasy abstrakcyjne oraz interfejsy.

4. Wyjątki i obsługa błędów
Efekty kształcenia:
– student potrafi zaplanować sposób obsługi błędów dla postawionego przed nim problemu i zrealizować go za pomocą mechanizmu wyjątków,
– student potrafi korzystać z klas bibliotecznych reprezentujących wyjątki oraz definiować w tym celu własne klasy umieszczając je w odpowiednich miejscach hierarchii dziedziczenia,

5. Operacje wejścia i wyjścia, serializacja.
Efekty kształcenia:
– student potrafi zastosować obiekty reprezentujące zasadnicze typy strumieni danych: bajtowe i znakowe, buforowane, powiązane ze standardowymi strumieniami systemowymi,
– student potrafi zaplanować mechanizm zapisu i odczytu danych w aplikacji, z wykorzystaniem odpowiednich strumieni oraz z uwzględnieniem obsługi wyjątków charakterystycznych dla operacji wejścia/wyjścia,
– student potrafi przeprowadzić serializację i deserializację obiektu oraz kontrolować, które jego składniki będą podlegały temu procesowi,
– student potrafi sprawdzać zgodność wersji serializowanych i deserializowanych obiektów.

6. Klasy generyczne i typy sparametryzowane
Efekty kształcenia:
– student potrafi zdefiniować metody i klasy używające jednego lub kilku parametrów do uproszczenia rozwiązania zadanego problemu,
– student potrafi zastosować typy ograniczone oraz argumenty wieloznaczne.

7. Kolekcje i algorytmy
Efekty kształcenia:
– student potrafi wybrać optymalną dla zagadnienia kolekcję jako najwygodniejszą w danej sytuacji strukturę danych,
– student potrafi praktycznie zastosować wybraną implementację kolekcji, oraz posłużyć się dla niej odpowiednimi iteratorami,
– student potrafi uprościć realizację postawionego zadania poprzez zastosowanie dostępnych algorytmów i komparatorów,
– student potrafi zdefiniować własną implementację wybranego interfejsu kolekcji.

8. Wątki
Efekty kształcenia:
– student potrafi zaplanować i zaimplementować rozwiązanie problemu wymagającego zastosowania kilku równocześnie działających wątków,
– student potrafi tworzyć nowe wątki z poziomu własnej aplikacji, nadając im różne priorytety,
– student potrafi zsynchronizować działanie wątków,
– student potrafi zrealizować komunikację międzywątkową.

9. Pakiet java.util.
Efekty kształcenia:
– student potrafi poruszać się swobodnie po dokumentacji klas pakietu java.util i wyszukać klasy upraszczające rozwiązanie zadanego problemu,
– student potrafi zastosować najczęściej używane klasy pakietu (m.in. Date, Random, klasy do obsługi napisów, kompresji i archiwizacji danych).

10. Obsługa sieci
Efekty kształcenia:
– student potrafi zastosować klasy z pakietu java.net do przesyłania danych za pomocą standardowych protokołów sieciowych,
– student potrafi zaprojektować proste aplikacje działające wg schematu klient-serwer.

12. Adnotacje i testowanie
Efekty kształcenia:
– student potrafi zastosować typowe adnotacje do zamieszczenia w kodzie informacji dla kompilatora,
– student potrafi zdefiniować własne typy adnotacji,
– student potrafi zastosować mechanizm asercji do podstawowej diagnostyki,
– student potrafi przygotować i przeprowadzić za pomocą JUnit całościowe testy samodzielnie zdefiniowanej lub dostarczonej mu klasy.

13. Zintegrowane środowiska programistyczne (IDE). Debugowanie kodu
Efekty kształcenia:
– student potrafi utworzyć w środowisku NetBeans lub Eclipse nowy projekt wybranego typu, oraz przenieść do IDE istniejący projekt,
– student potrafi wykorzystać narzędzia środowiska do rozbudowy projektu,
– student potrafi przeprowadzić debugowanie własnego oraz dostarczonego mu kodu.

Student workload (ECTS credits balance)
Student activity form Student workload
Summary student workload 137 h
Module ECTS credits 5 ECTS
Examination or Final test 2 h
Realization of independently performed tasks 45 h
Preparation for classes 30 h
Participation in laboratory classes 30 h
Participation in lectures 30 h
Additional information
Method of calculating the final grade:

K = 0.5 L + 0.5 E
gdzie:
L – punkty uzyskane w ramach zaliczenia laboratorium (w procentach),
E – średnia (arytmetyczna, w procentach) liczba punktów uzyskana podczas wszystkich terminów egzaminu, w których student(ka) brał(a) udział,
K – ocena końcowa (wynik procentowy zostanie przeliczony na ocenę zgodnie z Regulaminem Studiów AGH, przy czym otrzymanie pozytywnej oceny końcowej następuje po uzyskaniu pozytywnego wyniku egzaminu poprzedzonego zaliczeniem laboratorium).

Prerequisites and additional requirements:

Umiejętność programowania w C i C++.

Znajomość podstaw metodologii obiektowej na poziomie modułu “Programowanie obiektowe I”.

Recommended literature and teaching resources:

Schildt H., Java. Kompendium programisty
Cornell G., Horstmann C.S., Java 2. Techniki zaawansowane
Stelting S., Java. Obsługa wyjątków, usuwanie błędów i testowanie kodu
Graham I., Metody obiektowe w teorii i w praktyce
Eckel B., Thinking in Java
Wołoszyn M., Programowanie obiektowe II. Notatki do wykładu dostępne na stronie przedmiotu: http://newton.fis.agh.edu.pl/~woloszyn/po2/
The Java Tutorials, dostępne na stronie http://docs.oracle.com/javase/tutorial/

Scientific publications of module course instructors related to the topic of the module:

- – -

Additional information:
  • Sposób i tryb wyrównania zaległości powstałych wskutek nieobecności studenta na zajęciach:
    Ćwiczenia laboratoryjne:
    - Nieobecność na nie więcej niż dwóch zajęciach wymaga od studenta samodzielnego (z możliwością wykorzystania godzin konsultacji) opanowania przerabianego na tych zajęciach materiału.
    - Nieusprawiedliwiona nieobecność na więcej niż dwóch zajęciach oznacza brak możliwości zaliczenia ćwiczeń laboratoryjnych.
    - Student ma prawo do odrobienia każdej usprawiedliwionej nieobecności w wyznaczonym przez prowadzącego terminie, lecz nie później jak w ostatnim tygodniu trwania zajęć (lub później w szczególnie uzasadnionych przypadkach losowych).
    Obecność na wykładzie: zgodnie z Regulaminem Studiów AGH.
  • Zasady zaliczania zajęć:
    Ćwiczenia laboratoryjne:
    - W ramach poprawkowego zaliczenia ćwiczeń laboratoryjnych student ma prawo do odrobienia dwóch ćwiczeń, jednak nie później jak w ostatnim tygodniu trwania zajęć. Termin ten może zostać wydłużony w przypadku niemożliwości wcześniejszego wyrównania zaległości wynikającego z usprawiedliwionych przyczyn.
    - Student który bez usprawiedliwienia opuścił więcej niż dwa zajęcia nie uzyskuje zaliczenia ćwiczeń; od takiej decyzji prowadzącego zajęcia student może się odwołać do prowadzącego przedmiot (moduł) lub Dziekana.
  • Warunkiem przystąpienia do egzaminu jest wcześniejsze uzyskanie zaliczenia z ćwiczeń laboratoryjnych.
  • Szczegółowe informacje organizacyjne dotyczące trybu zaliczania zajęć i odrabiania zaległości dostępne są na stronie
    http://newton.fis.agh.edu.pl/~woloszyn/po2/