Kontakt:

pokój: 339
telefon: +48 71 3757836
mail:
www: http://www.ii.uni.wroc.pl/~prz/

Konsultacje (pokój 339):

  • wtorek 10-11
  • środa 14-15
Proszę wcześniej uzgodnić dokładny termin konsultacji drogą mailową.

Java - kurs podstawowy (semestr zimowy 2013/14)

Adres:

Instytut Informatyki
Uniwersytetu Wrocławskiego
ul. Joliot-Curie 15
50-383 Wrocław
OGŁOSZENIA

5 stycznia 2014 r.

Zadanie 9 (2):

Z powodów organizacyjnych przesunąłem o jeden tydzień termin oddawania zadania 9 (14 i 15 stycznia).

Wielu sukcesów w Nowym Roku :)

16 grudnia 2013 r.

Zadanie 9 (1):

Zadanie 9 zostanie opublikowane dopiero w tym tygodniu. Termin jego realizacji będzie wyznaczony na pierwszą połowę stycznia 2014 (7 i 8 stycznia).

Spokojnych i wesołych Świąt :)

16 października 2013 r.

Zadanie 3:

Zadanie 3 składa się z trzech podzadań, dlatego na jego zrobienie przeznaczyłem dwa tygodnie. Zadanie to może zająć trochę więcej czasu, ale nie jest specjalnie trudne. Za zrobienie wszystkich trzech podzadań będzie można dostać w sumie do 10 punktów.

Zadanie 3 można również oddawać 5 i 6 października.

2 października 2013 r.

Pierwsze laboratorium:

Pierwsze laboratoria odbędą się dopiero w przyszłym tygodniu 8, 9 października.

1 października 2013 r.

Punkt informacyjny:

W tym miejscu będą się pojawiać ważne ogłoszenia dotyczące organizacji zajęć związanych z tym przedmiotem. Proszę sprawdzać ogłosznia, szczególnie dzień przed wykładem i przed laboratoriami.

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 stale rośnie. 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:
    wtorek 8-10 s.7 (Paweł Rzechonek)
    wtorek 16-18 s.110 (Marek Szykuła)
    środa 10-12 s.108 (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

  1. 8-9.10.2013: liczby naturalne w postaci słownej (pdf)
  2. 15-16.10.2013: rozkład liczb całkowitych na czynniki pierwsze (pdf)
  3. 29-30.10.2013: drzewa obliczeń (pdf)
  4. 12-13.11.2013: kalkulator ONP (pdf)
  5. 19-20.11.2013: rysunek (pdf)
  6. 26-27.11.2013: gra logiczna samotnik (pdf)
  7. 3-4.12.2013: wielodokumentowy edytor tekstowy (pdf)
  8. 10-11.12.2013: drzewo BST (pdf)
  9. 14-15.01.2014: skrzyżowanie (pdf)
  10. 21-22.01.2014: strumienie czyszczące (pdf)
  11. 28-29.01.2014: gra karciana pasjans (pdf) - zadanie dodatkowe

Ranking

Wykład

Materiał omawiany na wykładach

Spis wykładów:

1: ogólnie o języku Java 2: klasy i obiekty 3: dziedziczenie i polimorfizm
4: interfejsy, klasy wewnętrzne, klasy anonimowe 5: wyjątki, asercje 6: AWT, grafika, zdarzenia
7: Swing - komponenty GUI 8: Swing - architektura okien 9: programowanie generyczne
10: kolekcje, wyliczenia 11: wątki 12: strumienie
13: aplety 14: refleksja, JavaBeans 15: adnotacje, JUnit
2.10.2013 (ogólnie o języku 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
9.10.2013 (klasy i obiekty)

Klasy i obiekty:

  • klasa jako nowy typ danych;
  • definicjowanie włanych klas;
  • składowe klasy: pola i metody;
  • referencja this;
  • pola definiują stan obiektu;
  • inicjalizacja pól instancyjnych, instancyjny blok inicjalizacyjny;
  • konstruktory, konstruktor domyślny;
  • wywołanie konstruktora wewnątrz innego konstruktora (konstrukcja this);
  • metody definiują funkcjonalność obiektu;
  • przekazywanie argumentów do metod;
  • metody ze zmienną liczbą argumentów;
  • przeciążanie nazw konstruktorów i metod;
  • 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();
  • ukrywanie implementacji i kontrola dostępu do składowych (deklaratory public, private, protected oraz widoczność pakietowa).
Przykładowy program:
Punkt2D.java
16.10.2013 (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).

Pakiety:

  • definiowanie własnych pakietów;
  • pakiet to 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ładowe programy:
Wyrazenie.java, Operator1Arg.java, Operator2Arg.java, Liczba.java, WartBezwzgl.java, Dodaj.java, Mnoz.java, TestWyr.java
23.10.2013 (interfejsy, klasy wewnętrzne, klasy anonimowe)

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 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
06.11.2013 (wyjątki, asercje)

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).
13.11.2013 (AWT, grafika, zdarzenia)

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

Komentarze dokumentacyjne:

  • umieszczanie komentarzy dokumentacyjnych w programie;
  • tagi w komentarzach dokumentacyjnych;
  • generowanie dokumentacji - javadoc.
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
20.11.2013 (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.
Materiały pomocnicze:
Creating a GUI With JFC/Swing (docs.oracle.com)
17.11.2013 (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.
Materiały pomocnicze:
Creating a GUI With JFC/Swing (docs.oracle.com)
4.12.2013 (programowanie 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)
11.12.2013 (kolekcje, wyliczenia)

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.

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:
Collections (docs.oracle.com)
Java Collections (tutorials.jenkov.com)
18.12.2013 (wątki)

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;
  • synchronizacja wątków (metody i bloki synchronizowane);
  • pola z deklaratorem volatile;
  • 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.
Materiały pomocnicze:
Concurrency (docs.oracle.com)
Java Concurrency / Multithreading (tutorials.jenkov.com)
8.01.2014 (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.
Materiały pomocnicze:
Basic I/O (docs.oracle.com)
Java IO Tutorial (tutorials.jenkov.com)
15.01.2014 (aplety)

Aplety:

  • aplet - program na stronie html działający u klienta w przeglądarce;
  • definiowanie apletu (klasa Applet i JApplet);
  • cykl życia apletu;
  • osadzanie apletu w dokumencie html;
  • umieszczanie apletu na sewerze www;
  • przekazywanie parametrów do apletu;
  • ograniczenia apletów;
  • bezpieczeństwo apletów;
  • uruchamianie apletów za pomocą programu appletviewer;
  • program jar do pakowania klas, apletów oraz innych zasobów;
  • uruchamianie kodu JavaScript z poziomu apletu;
  • uruchamianie metod apletu z poziomu kodu JavaScript;
  • komunikacja pomiędzy apletami na stronie.
Materiały pomocnicze:
Java Applets (docs.oracle.com)
Java Applet Tutorial (www.realapplets.com)
Java Applet Tutorial (www.javakode.com)
Java - Applet Basics (www.tutorialspoint.com)
22.01.2014 (refleksja, JavaBeans)

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.

JavaBeans:

  • idea pracy z komponentami-ziarnami;
  • atrybuty zwyczajne (powiązane) i wetowalne (ograniczane) w ziarnach;
  • akcesory: settery i gettery;
  • kolekcje słuchaczy zdarzeń zmian atrybutów PropertyChangeSupport i VetoableChangeSupport;
  • powiadamienie o zmianie atrybutu firePropertyChange();
  • pytanie o zgodę na zmianę atrybutu fireVetoableChange();
  • interfejsy dla słuchaczy zmian atrybutów w ziarnach PropertyChangeListener i VetoableChangeListener;
  • zdarzenie zmiany atrybutu PropertyChangeEvent;
  • wetowanie zmian i wyjątek PropertyVetoException;
  • synchronizowane settery i gettery atrybutów zwyczajnych i ograniczonych.
Materiały pomocnicze:
The Reflection API (docs.oracle.com)
Java Reflection (tutorials.jenkov.com)
JavaBeans(TM) (docs.oracle.com)
JavaBeans(TM) (www-inf.int-evry.fr)
Generics (by Greg Voss) (journals.ecs.soton.ac.uk)
Przykładowy program:
TestJavaBeans.java
29.01.2014 (adnotacje, JUnit)

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)

Instytut Informatyki