Nazwa modułu: Programowanie obiektowe II Rok akademicki: 2015/2016 Kod: JIS-1-501-s Punkty ECTS: 5 Wydział: Fizyki i Informatyki Stosowanej Kierunek: Informatyka Stosowana Specjalność: - Poziom studiów: Studia I stopnia Forma i tryb studiów: - Język wykładowy: Polski Profil kształcenia: Ogólnoakademicki (A) Semestr: 5 Strona www: http://newton.fis.agh.edu.pl/~woloszyn/po2/ Osoba odpowiedzialna: dr inż. Wołoszyn Maciej (woloszyn@newton.fis.agh.edu.pl) Osoby prowadzące: dr inż. Malinowski Janusz (malinowski@fis.agh.edu.pl) dr inż. Wołoszyn Maciej (woloszyn@newton.fis.agh.edu.pl) 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_W07, IS1A_W08 Aktywność na zajęciach, Egzamin, Udział w dyskusji, 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_W04, IS1A_W05, IS1A_W07 Aktywność na zajęciach, Egzamin, Udział w dyskusji, Umiejętności 1 / 7
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_U03, IS1A_U07, IS1A_U13, IS1A_U14 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_U09, IS1A_U10, IS1A_U13, IS1A_U14, IS1A_U19 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_U01, IS1A_U10, IS1A_U11, IS1A_U19 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_K05, IS1A_K06 Udział w dyskusji, Wykonanie ćwiczeń 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 Ćwiczenia audytoryjne Ćwiczenia laboratoryjne Ćwiczenia projektowe Konwersatori um seminaryjne praktyczne terenowe warsztatowe Inne E-learning Wiedza M_W001 M_W002 Umiejętności 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ą. 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++. 2 / 7
M_U001 M_U002 M_U003 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. 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. 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. 3 / 7
Adnotacje. Testowanie: asercje, JUnit. Debugowanie, JDB. Ćwiczenia laboratoryjne 1. Zapoznanie się z JDK i narzędziami dostępnymi w pracowni komputerowej 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 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 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 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. 4 / 7
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 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 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 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. 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 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 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. 5 / 7
13. Zintegrowane środowiska programistyczne (IDE). Debugowanie kodu 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. 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 Eckel B., Thinking in Java 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 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 Nie podano dodatkowych publikacji 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ń. - 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ń 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ń. 6 / 7
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/ Nakład pracy studenta (bilans punktów ECTS) Forma aktywności studenta Egzamin lub kolokwium zaliczeniowe Samodzielne studiowanie tematyki zajęć Przygotowanie do zajęć Udział w ćwiczeniach Udział w wykładach Sumaryczne obciążenie pracą studenta Punkty ECTS za moduł Obciążenie studenta 2 godz 42 godz 42 godz 28 godz 28 godz 142 godz 5 ECTS 7 / 7