OGŁOSZENIA
17 grudnia 2015 r.
Zajęcia po Nowym Roku:
W pierwszym tygodniu nowego 2016 roku wyjątkowo zajęcia środowe odbędą się we wtorek
(wykład i laboratoria)!
Tak więc termin oddania zadania laboratoryjnego przypadnie na 5 i 7 stycznia 2016 r.
(a nie tydzień później, jak początkowo sądziłem).
8 października 2015 r.
Pierwsze laboratorium:
W pierwszym tygodniu nauki laboratoria nie odbywają się.
Pierwsze laboratorium zaplanowałem dopiero na przyszły tydzień: 14, 15 października 2015 r.
1 października 2015 r.
Punkt informacyjny:
W tym miejscu będą się pojawiać ważne ogłoszenia dotyczące organizacji
wszystkich zajęć związanych z tym przedmiotem.
Proszę sprawdzać te ogłosznia na bieżąco.
Java to współczesny obiektowy język programowania
stworzony przez Jamesa Goslinga z firmy Sun
Microsystems.
Od momentu powstania w połowie lat 90-tych XX wieku przeżył on
dynamiczny rozwój a zainteresowanie nim wciąż nie maleje.
Język Java przyciągnął do dziś prawie 7 milionów programistów.
Znajduje zastosowanie w każdej ważniejszej gałęzi przemysłu
informatycznego i jest obecny w różnego rodzaju urządzeniach,
komputerach i sieciach.
Popularność Javy wynika przede wszystkim z przenośności programów
i niezależności od konkretnej platwormy sprzętowej, a co za tym
idzie, ma zastosowanie w Internecie oraz ogólnie w aplikacjach
sieciowych.
Jego podstawowe koncepcje zostały przejęte z języka
Smalltalk (maszyna wirtualna, odśmiecanie pamięci) oraz
z języka C++ (znaczna część składni i słów kluczowych).
Celem tych zajęć jest nauka programowania w języku Java
oraz zapoznanie z podstawowymi technologiami Javy.
Wymagane przygotowanie
- Umiejętność programowania w języku C/C++ (podstawowe
konstrukcje językowe i obiekty na elementarnym poziomie).
- Znajomość podstawowych struktur danych (tablice, listy, drzewa,
grafy).
Literatura
Literatura papierowa polskojęzyczna:
-
Ken Arnold, James Gosling:
Java.
WNT, Warszawa 1999.
-
Krzysztof Barteczko:
Java. Od podstaw do technologii. Tom 1 i 2.
Wydawnictwo MIKOM, Warszawa 2004.
-
Herbert Schildt:
Java. Kompendium programisty.
Wydawnictwo HELION, Gliwice 2005.
-
Bruce Eckel:
Thinking in Java. Wydanie 4. Edycja polska.
Wydawnictwo HELION, Gliwice 2006.
-
Cay S. Horstmann, Gary Cornell:
Java. Podstawy. Wydanie 8.
Wydawnictwo HELION, Gliwice 2008.
-
Cay S. Horstmann, Gary Cornell:
Java. Techniki zaawansowane. Wydanie 8.
Wydawnictwo HELION, Gliwice 2009.
Literatura papierowa anglojęzyczna:
-
Ken Arnold, James Gosling, David Holmes:
The Java Programming Language. Fourth Edition.
Prentice Hall PTR, 2005.
-
Kathy Sierra, Bert Bates:
Head First. Java. Second Edition.
O'Reilly Media, Inc., 2005.
-
Joshua Bloh:
Effective Java. Second Edition.
Sun Microsystems, Inc., 2008.
-
Pat Niemeyer, Jonathan Knudsen:
Learning Java. Third Edition.
O'Reilly Media, Inc., 2005.
-
James Gosling, Bill Joy, Guy Steele, Gilad Bracha:
The Java Language Specification. Third Edition.
Prentice Hall PTR, 2005.
-
Tim Lindholm, Frank Yellin:
The Java Virtual Machine Specification. Second Edition.
Prentice Hall PTR, 1999.
Literatura elektroniczna anglojęzyczna:
Terminarz
-
wykład: środa 8-10 s.119 (Paweł Rzechonek)
-
laboratoria:
środa 10-12 s.7 (Paweł Rzechonek)
środa 16-18 s.107 (Marek Szykuła)
czwartek 8-10 s.107 (Paweł Rzechonek)
Laboratorium
Zasady zaliczenia przedmiotu
- Ogólnie:
-
W semestrze będzie opublikowanych (na tej stronie) kilkanaście
prostych zadań do zaprogramowania.
Za każde poprawnie zaprogramowane zadanie i oddane w terminie
można będzie dostać do 10 punktów (chociaż zadania będą różnej
trudności).
- Terminy:
-
Zadania do zaprogramowania będą ogłaszane w tygodniu
poprzedzającym termin ich realizacji.
Zadania należy oddawać w wyznaczonym terminie.
Spóźnienia nie będą tolerowane, za wyjątkiem uzasadnionych
sytuacji życiowych: choroba potwierdzona zwolnieniem lekarskim,
wezwanie do Sądu, itp.
- Prezentacje:
-
Programy należy prezentować osobiście w czasie pracowni (proszę
nie wysyłać programów pocztą elektroniczną, ani nie przekazywać
ich poprzez kolegów czy koleżanki).
W trakcie prezentacji programu trzeba się liczyć z pytamiami
dotyczącymi zadania: metoda rozwiązania, zastosowane konstrukcje
językowe, wykorzystane technologie, itp.
- Oceny:
-
Aby zaliczyć laboratorium na ocenę dostateczną trzeba do końca
semestru zdobyć 50% z wszystkich możliwych do uzyskania punktów;
na ocenę bardzo dobrą trzeba będzie zgromadzić 90% punktów; oceny
pośrednie pozostją w liniowej zależności od przedstawionych
wymagań granicznych.
Lista zadań laboratoryjnych
-
14, 15 października 2015:
liczby całkowite w postaci słownej (pdf)
-
21, 22 października 2015:
rozkład liczb całkowitych na czynniki pierwsze (pdf)
-
28, 29 października 2015:
drzewa wyrażeń (pdf)
-
4, 5 listopada 2015:
listowa implementacja kolejek priorytetowych (pdf)
-
18, 19 listopada 2015:
kalkulator ONP (pdf)
-
25, 26 listopada 2015:
sparametryzowane drzewo BST (pdf)
-
2, 3 grudnia 2015:
rysunek (pdf)
-
9, 10 grudnia 2015:
gra Gomoku (pdf)
-
16, 17 grudnia 2015:
kalendarz (pdf)
-
5, 7 stycznia 2016:
Mikołaj i dzieciaki (pdf)
-
13, 14 stycznia 2016:
strumienie czyszczące (pdf)
-
20, 21 stycznia 2016:
planety (pdf)
-
27, 28 stycznia 2016:
zbiór liczb - zadanie dodatkowe (pdf)
Ranking
Wykład
Materiał omawiany na wykładach
Spis wykładów:
- 7 października 2015 r: podstawy języka Java
-
Koncepcja Javy:
- historia Javy;
- wirtualna maszyna Javy;
- podstawowe cechy Javy (podobieństwo składniowe do C++, obiektowość, kontrola typów, odśmiecanie, współbieżność);
- biblioteki standardowe Javy i ich dokumentacja;
- technologie Javy;
- środowisko programistyczne NetBeans.
Składnia języka Java:
- pierwszy program w Javie;
- kompilowanie programów - javac;
- uruchamianie programów - java;
- literały, zmienne, operatory, wyrażenia, instrukcje sterujące, komentarze;
- typy pierwotne i referencyjne;
- tworzenie obiektów (operator new) i ich usuwanie (garbage-collector);
- klasy opakowujące dla typów pierwotnych;
- napisy (klasa String) i konkatenacja napisów;
- tablice, tablice wielowymiarowe;
- przeglądanie tablic za pomocą pętli for-each;
- standardowe wejście/wyjście;
- parametry wywołania programu.
- Przykładowe programy:
- PierwszyProgram.java
- ArgumentyProgramu.java
- PolskieZnakiISO88592.java
- NapisDoLiczby.java
- TrojkatnaTablica.java
- 14 października 2015 r: klasy i obiekty
-
Klasy i obiekty:
- abstrakcja - I filar programowania obiektowego;
- klasa jako nowy typ danych;
- definicjowanie włanych klas;
- składowe klasy: pola i metody;
- pola definiują stan obiektu;
- inicjalizacja pól instancyjnych, instancyjny blok inicjalizacyjny;
- konstruktory, konstruktor domyślny;
- wywołanie konstruktora wewnątrz innego konstruktora (konstrukcja this);
- referencja this;
- utworzenie nowego obiektu operatorem new;
- metody definiują funkcjonalność obiektu;
- przekazywanie argumentów do metod;
- metody ze zmienną liczbą argumentów;
- przeciążanie nazw konstruktorów i metod;
- hermetyzacja - II filar programowania obiektowego;
- ukrywanie implementacji i kontrola dostępu do składowych
(deklaratory public, protected, private oraz widoczność pakietowa);
- pola finalne (deklarator final) i ich inicjalizacja;
- składowe statyczne (deklarator static);
- inicjalizacja pól statycznych, statyczny blok inicjalizacyjny;
- ograniczenia metod staycznych;
- odzyskiwanie pamięci przez garbage-collector, metoda finalize().
Pakiety:
- definiowanie własnych pakietów;
- pakiet jako struktura otwarta;
- importowanie całych pakietów, pojedynczych klas z pakietu i składowych statycznych z wybranej klasy;
- parametr -classpath przy kompilacji i przy uruchamianiu programów;
- pakiety standardowe.
- Przykładowy program:
- Punkt2D.java
- 21 października 2015 r: dziedziczenie i polimorfizm
-
Dziedziczenie:
- kompozycja i dziedziczenie;
- deklaracja dziedziczenia;
- dziedziczenie jednobazowe (dziedziczenie po klasie Object);
- klasa Object i jej metody toString() oraz equals(Object);
- hierarchia dziedziczenia w postaci drzewa;
- inicjalizacja obiektu i konstruktory w klasie pochodnej;
- inicjalizacja części odziedziczonej (konstrukcja super);
- dodawanie nowych pól i metod;
- przesłanianie pól;
- nadpisywanie metod;
- upublicznianie składowych;
- odwołania do składowych z nadklasy (konstrukcja super).
Polimorfizm:
- rzutowanie i operator instanceof;
- referencja do obiektu danej klasy może wskazywać na obiekt dowolnej klasy pochodnej;
- polimorficzne wywoływanie metod;
- klasy i metody ostateczne/finalne (modyfikator final);
- klasy i metody abstrakcyjne (modyfikator abstract).
Komentarze dokumentacyjne:
- umieszczanie komentarzy dokumentacyjnych w programie;
- tagi w komentarzach dokumentacyjnych;
- generowanie dokumentacji - javadoc.
- Przykładowe programy:
-
Wyrazenie.java,
Operator1Arg.java,
Operator2Arg.java,
Liczba.java,
WartBezwzgl.java,
Dodaj.java,
Mnoz.java,
TestWyr.java
- 28 października 2015 r: interfejsy
-
Interfejsy:
- rola interfejsów w programowaniu obiektowym;
- definiowanie interfejsów;
- domyślne modyfikatory pól i metod w interfejsach;
- rozszerzanie interfejsów;
- zastosowania interfejsów;
- adaptery;
- interfejs Comparable i porównywanie obiektów;
- interfejs Cloneable i klonowanie obiektów.
Klasy wewnętrzne:
- definiowanie klas wewnętrznych;
- dostęp do klasy zewnętrznej poprzez Klasa.this;
- tworzenie obiektów klas wewnętrznych poprzez obiekt.new;
- definiowanie statycznych klas zagnieżdżonych;
- definiowanie wewnętrznych klas lokalnych.
Klasy anonimowe:
- definiowanie klas anonimowych;
- konstruktor domyślny w klasie anonimowej;
- nadpisywanie metod i definiowanie odziedziczonych metod abstrakcyjnych;
- zastosowanie klas anonimowych;
- anonimowe klasy wewnętrzne.
- Przykładowe programy:
-
Zbior.java,
TablicaDynamiczna.java,
TestKlonTab.java
-
Zbior.java,
Lista.java,
TestKlonLis.java
-
WewZew.java
-
Wyliczanka.java
- 4 listopada 2015 r: wyjątki
-
Wyjątki:
- czym są wyjątki i jak się ich używa (podział kodu na procedury obliczeniowe i sterujące);
- hierarchia klas wyjątków (klasa Throwable);
- wyjątki kontrolowane i niekontrolowane (klasy Error i RuntimeException);
- nieprzechwycone wyjątki;
- zgłaszanie wyjątków - instrukcja throw;
- klauzula throws i jej postać w przypadku nadpisywania;
- wychwytywanie wyjątków - instrukcja try-catch;
- klauzula finally i jej wykonanie;
- deklarowanie własnych klas wyjątków;
- kolejkowanie wyjątków.
Asercje:
- czym są asercje i jak się ich używa (niezmienniki w programie);
- instrukcja assert;
- sterowanie programem za pomocą asercji (wyjątek AssertionError);
- włączanie i wyłączanie asercji (domyślnie asercje są wyłączone).
Dzienniki:
- czym są dzienniki i jak się ich używa (rejestracja kluczowych czynności wykonywanych przez program);
- schemat procesu rejestracji komunikatu w dzienniku - klasy Logger i Handler;
- proste watawianie komunikatu do dziennika;
- hierarchiczna struktura dzienników;
- poziomy ważności komunikatów - klasa Level.
- Przykładowe programy:
- Zgadywanka.java
- Dziennik.java
- Materiały pomocnicze:
- Exceptions (docs.oracle.com)
- Programming With Assertions (docs.oracle.com)
- Java Logging (tutorials.jenkov.com)
- 18 listopada 2015 r: typy generyczne
-
Programowanie generyczne:
- zastosowanie programowania generycznego;
- parametryzacja klas;
- parametryzacja metod;
- parametry ograniczone;
- implementacja parametyzacji w Javie - mechanizm znoszenia;
- typy surowe;
- parametryzacja interfejsów;
- parametryzacja podczas dziedziczenia;
- parametry wieloznaczne - wildcards;
- ograniczenia dla typów generycznych.
- Materiały pomocnicze:
- Generics (by Gilad Bracha) (docs.oracle.com)
- Generics (updated) (docs.oracle.com)
- Java Generics (tutorials.jenkov.com)
- 25 listopada 2015 r: AWT - zdarzenia, grafika
-
Komponenty AWT:
- hierarchia klas komponentów AWT;
- komponenty proste i kontenery;
- okna Frame i ich właściwości;
- okna dialogowe Dialog i modalność;
- menadżery rozkładu komponentów w kontenerach.
Grafika:
- obiekt Canvas jako płaszczyzna do rysowania;
- robot graficzny Graphics;
- kolory (klasa Color);
- czcionki (klasa Font);
- kreślenie napisów i prostych figur.
Obsługa zdarzeń:
- model obsługi zdarzeń oparty na delegatach;
- klasy zdarzeń;
- źródła zdarzeń;
- interfejsy do nasłuchu zdarzeń;
- definiowanie delegatów do odbioru zdarzeń;
- adaptery zdarzeń.
- Materiały pomocnicze:
- AWT Tutorial (www.tutorialspoint.com)
- Przykładowe programy:
- TestFrame1.java
- TestFrame2.java
- TestFrame3.java
- TestPanel.java
- TestLayoutFlowLayout.java
- TestLayoutBorderLayout.java
- TestLayoutGridLayout.java
- TestLayoutNull.java
- TestCanvas.java
- TestActionEvent.java
- TestAdjustmentEvent.java
- 2 grudnia 2015 r: Swing - komponenty GUI
-
Architektura komponentów GUI w Swingu:
- hierarchia klas komponentów Swing;
- komponenty lekkie i ciężkie w Swingu;
- komponenty wewnętrzne (lekkie);
- okna (komponenty ciężkie);
- własne komponenty.
Podstawowe komponenty Swing:
- przegląd podstawowych komponentów GUI w Swingu;
- szablon aplikacji w Swingu;
- grafika w Swingu;
- menu, menu kontekstowe, mnemoniki, akceleratory;
- dialogi i klasa JOptionPane.
- Przykładowe programy:
- ProsteOkno.java
- Dialogi.java
- Materiały pomocnicze:
- Creating a GUI With JFC/Swing (docs.oracle.com)
- 9 grudnia 2015 r: Swing - architektura okien
-
Okna w Swingu:
- architektura okien w Swingu;
- warstwy i z-order;
- okna wewnętrzne JInternalFrame;
- wygląd komponentów sterowany obiekty z grupy LookAndFeel.
Specjalizowane komponenty Swing:
- panel dzielony JSplitPane;
- panel z zakładkami JTabbedPane;
- panel przewijalny JScrollPane;
- pasek narzędzi JToolBar.
MVC:
- idea MVC - oddzielenie danych od ich prezentacji;
- MVC w Swingu;
-
szczegóły MVC na przykładzie JList:
- model danych ListModel,
- model GUI ListSelectionModel,
- komunikacja model-widok w AbstractListModel,
- kreślarz w liście ListCellRenderer.
-
zaawansowane komponenty Swing:
- lista JList;
- drzewo JTree;
- tabela JTable;
- komponenty tekstowe i lista rozwijalna.
- Przykładowy program:
- Totolotek.java
- Materiały pomocnicze:
- Creating a GUI With JFC/Swing (docs.oracle.com)
- 16 grudnia 2015 r: programowanie współbieżne
-
Wątki:
- pojęcie procesu i wątków w procesie;
- tworzenie wątków w javie, ich uruchamianie i kończenie;
- przerywanie działania wątku (metoda interrupt());
- cykl życia wątku (stany wątku);
- pola z deklaratorem volatile;
- synchronizacja wątków (metody i bloki synchronizowane);
- koordynacja wątków (metody wait(), notify() i notifyAll());
- wymuszanie pracy innych wątków (metody yield() i join());
- wątki demony;
- priorytety wątków.
- Przykładowe programy:
- Strzelanina.java
- ProdKons.java
- Materiały pomocnicze:
- Concurrency (docs.oracle.com)
- Java Concurrency / Multithreading (tutorials.jenkov.com)
- 5 stycznia 2016 r: strumienie
-
Strumienie:
- pojęcie strumienia;
- strumienie do czytania i pisania;
- strumienie bajtowe i znakowe;
- strumienie przedmiotowe (konkretne źródło i ujście danych);
- strumienie przetwarzające i filtrujące;
- kodowanie w strumieniach znakowych;
- strumienie kompresujące;
- serializacja (interfejs Serializable);
- pliki i kataogi (klasa File);
- archiwa javy - jar.
- Przykładowy program:
- Kopiowanie.java
- Materiały pomocnicze:
- Basic I/O (docs.oracle.com)
- Java IO Tutorial (tutorials.jenkov.com)
- 13 stycznia 2016 r: NIO, wyliczenia
-
NIO:
- koncepcja kanałów;
- selektory;
- bufory;
- operacje kanałowe a wielu buforach - scattering i gathering;
- mapowanie plików;
- blokowanie plików.
Wyliczenia:
- definiowanie prostych wyliczeń;
- typy wyliczeniowe jako klasy dziedziczące po Enum;
- stałe wyliczeniowe i ich nazwy;
- import statyczny w przypadku wyliczeń;
- porównywanie wyliczeń, typ wyliczeniowy w instrukcji if;
- identyfikacja wyliczeń, typ wyliczeniowy w instrukcji switch;
- metody statyczne values() i valueOf();
- typ wyliczeniowy w pętli for;
- wartości porządkowe stałych wyliczeniowych, metoda ordinal();
- dodawanie pól, metod i konstruktorów w wyliczeniach.
- Materiały pomocnicze:
- Enum Types (docs.oracle.com)
- Java Enums (tutorials.jenkov.com)
- 20 stycznia 2016 r: kolekcje, lambdy
-
Kolekcje standardowe:
- kolekcje standardowe i ich używanie w programowaniu;
- stare kolekcje Vector, Properties i BitSet;
- architektura interfejsów kolekcyjnych;
- dynamiczne zbiory danych i interfejs Collection<T>;
- dynamiczne zbiory asocjacyjne i interfejs Map<K,V>;
- implementacje interfejsów kolekcyjnych;
- iteratory i interfejs Iterator<E>;
- przeglądanie i modyfikowanie kolekcji za pomocą iteratorów;
- algorytmy zawarte w klasie Arrays i Collections;
- implementacja własnej kolekcji.
Wyrażenia lambda:
- składnia wyrażeń lambda;
- czym są wyrażenia lambda;
- zastosowanie lambd.
- Materiały pomocnicze:
- Collections (docs.oracle.com)
- Java Collections (tutorials.jenkov.com)
- Lambda Quick Start (www.oracle.com)
- Lambda Expressions (docs.oracle.com)
- Java Lambda Expressions (tutorials.jenkov.com)
- Start Using Java Lambda Expressions (www.developer.com)
- Java8 Lambda Expressions Tutorial with Examples (viralpatel.net)
- 27.01.2016 (adnotacje, testy jednostkowe)
-
Adnotacje:
- adnotacje - notatki w programie;
- definicja notatki @interface i jej użycie;
- strategia zachowania notatek @Retention;
- określenie typu deklaracji związanej z notatką @Target;
- notatki z wartościami domyślnymi składowych;
- notatki z jedną składową i notatki znacznikowe;
- czytanie notatek w czasie działania programu;
- notatki wbudowane.
Testy jednostkowe i JUnit:
- testy jednostkowe w programowaniu obiektowym;
- dodatek JUnit do NetBeans.
- Materiały pomocnicze:
- Annotations (docs.oracle.com)
- Annotations (tutorials.jenkov.com)
- Metadane i adnotacje (by Krzysztof Barteczko) (edu.pjwstk.edu.pl)
- Writing JUnit Tests in NetBeans IDE (netbeans.org)
- JUnit Tutorial (www.tutorialspoint.com)
- JUnit - test z NetBeansem (www.dobreprogramy.pl)
- JUnit - testy jednostkowe (www.youtube.com)
- 1.02.2016 (refleksja)
-
Refleksja:
- typy otoczkowe i autoboxing;
- klasa Class;
- literały klasowe;
- dynamiczne ładowanie klas;
- pojęcie refleksji i jej przeznaczenie;
- pozyskanie informacji o klasie w trakcie wykonania programu;
- działania na składowych w obiekcie z wykorzystaniem refleksji;
- dekompilacja programów - javap.
- Materiały pomocnicze:
- The Reflection API (docs.oracle.com)
- Java Reflection (tutorials.jenkov.com)