Moduł oferowany także w ramach programów studiów:
Informacje ogólne:
Nazwa:
Programowanie obiektowe 2
Tok studiów:
2018/2019
Kod:
JIS-1-501-s
Wydział:
Fizyki i Informatyki Stosowanej
Poziom studiów:
Studia I stopnia
Specjalność:
-
Kierunek:
Informatyka Stosowana
Semestr:
5
Profil kształcenia:
Ogólnoakademicki (A)
Język wykładowy:
Polski
Forma i tryb studiów:
Stacjonarne
Osoba odpowiedzialna:
dr hab. inż. Wołoszyn Maciej (woloszyn@newton.fis.agh.edu.pl)
Osoby prowadzące:
dr inż. Malinowski Janusz (malinowski@fis.agh.edu.pl)
dr hab. inż. Wołoszyn Maciej (woloszyn@newton.fis.agh.edu.pl)
Krótka charakterystyka modułu

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.

Opis efektów kształcenia dla modułu zajęć
Kod EKM Student, który zaliczył moduł zajęć wie/umie/potrafi Powiązania z EKK Sposób weryfikacji efektów kształcenia (forma zaliczeń)
Wiedza
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 Aktywność na zajęciach,
Egzamin,
Udział w dyskusji,
Wykonanie ćwiczeń laboratoryjnych
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 Aktywność na zajęciach,
Egzamin,
Udział w dyskusji,
Wykonanie ćwiczeń laboratoryjnych
Umiejętności
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 Wykonanie ćwiczeń laboratoryjnych
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 Wykonanie ćwiczeń laboratoryjnych
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 Wykonanie ćwiczeń laboratoryjnych
Kompetencje społeczne
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 Udział w dyskusji,
Wykonanie ćwiczeń laboratoryjnych
Matryca efektów kształcenia w odniesieniu do form zajęć
Kod EKM Student, który zaliczył moduł zajęć wie/umie/potrafi Forma zajęć
Wykład
Ćwicz. aud
Ćwicz. lab
Ćw. proj.
Konw.
Zaj. sem.
Zaj. prakt
Zaj. terenowe
Zaj. warsztatowe
Inne
E-learning
Wiedza
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++. + - + - - - - - - - -
Umiejętności
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. + - + - - - - - - - -
Kompetencje społeczne
M_K001 Student posiada umiejętność zwięzłego i precyzyjnego opisania własnych rozwiązań oraz określenia możliwych zastosowań. - - + - - - - - - - -
Treść modułu zajęć (program wykładów i pozostałych zajęć)
Wykład:

– 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.

Ćwiczenia laboratoryjne:

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.

Nakład pracy studenta (bilans punktów ECTS)
Forma aktywności studenta Obciążenie studenta
Sumaryczne obciążenie pracą studenta 137 godz
Punkty ECTS za moduł 5 ECTS
Egzamin lub kolokwium zaliczeniowe 2 godz
Samodzielne studiowanie tematyki zajęć 45 godz
Przygotowanie do zajęć 30 godz
Udział w ćwiczeniach laboratoryjnych 30 godz
Udział w wykładach 30 godz
Pozostałe informacje
Sposób obliczania oceny końcowej:

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).

Wymagania wstępne i dodatkowe:

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

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

Zalecana literatura i pomoce naukowe:

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/

Publikacje naukowe osób prowadzących zajęcia związane z tematyką modułu:

- – -

Informacje dodatkowe:
  • 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/