Kontakt:

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

Konsultacje:

czwartek 10-12
pokój 339
proszę wcześniej uzgodnić dokładny termin konsultacji drogą mailową

Java - kurs podstawowy (semestr zimowy 2011/12)

Adres:

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

11 stycznia 2012 r.

Ostatnie zadanie:

W tym semestrze było 12 zadań do realizacji w czasie laboratoriów. Dopisałem jeszcze jedno dodatkowe zadanie dla osób mających małe problemy z zaliczeniem pracowni - punkty z tego zadania nie zmieniają globalnej sumy możliwych do zdobycia punktów (czyli 120) ale doliczą się do dorobku punktowego studentów, którym zabrakło minimalnej liczby punktów do progu zaliczeniowego (czyli 60).

24 września 2011 r.

Pierwsze laboratorium:

Pierwsze laboratoria odbędą się dopiero w przyszłym tygodniu 3-7 października.

24 września 2011 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 przed wykładem i przed laboratorium.

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.

Literatura papierowa anglojęzyczna:

  • Ken Arnold, James Gosling, David Holmes: The Java Programming Language. Fourth Edition. Prentice Hall PTR, 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 12-14 s.119 (Paweł Rzechonek)
  • laboratorium:
    środa 8-10 s.107 (Paweł Rzechonek)
    środa 16-18 s.107 (Hans de Nivelle)
    czwartek 10-12 s.110 (Marek Szykuła)
    czwartek 12-14 s.7 (Dariusz Biernacki)

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. 5/6.10.2011: liczebniki porządkowe po angielsku (pdf)
  2. 12/13.10.2011: rozkład liczb całkowitych na czynniki pierwsze (pdf)
  3. 19/20.10.2011: lista (pdf)
  4. 26/27.10.2011: drzewa wyrażeń (pdf)
  5. 2/3.11.2011: kalkulator ONP (pdf)
  6. 9/10.11.2011: liczby arabskie i rzymskie (pdf)
  7. 23/24.11.2011: gra "samotnik" (pdf)
  8. 30.11/1.12.2011: edytor obrazów (pdf)
  9. 7/8.12.2011: kalendarz (pdf)
  10. 14/15.12.2011: strumień konwertujący do czytania (pdf)
  11. 4/5.01.2012: skrzyżowanie (pdf)
  12. 11/12.01.2012: drzewo BST (pdf)
  13. zadanie dodatkowe

  14. 18/19.01.2012: układ słoneczny (pdf)

Ranking

Wykład

Materiał omawiany na wykładach

Spis wykładów:

1: o języku Java 2: klasy i obiekty 3: dziedziczenie
4: polimorfizm 5: wyjątki 6: AWT i zdarzenia
7: Swing - komponenty GUI 8: Swing - architektura okien 9: Swing - architektura MVC
10: strumienie 11: wątki 12: refleksja
13: typy sparametryzowane 14: wyliczenia 15: metadane
28.09.2011 (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ść);
  • technologie Javy;
  • biblioteki standardowe Javy.

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);
  • tablice, tablice wielowymiarowe; //*//
  • standardowe wejście/wyjście;
  • parametry wywołania programu.
Przykładowe programy:
PierwszyProgram.java
ArgumentyProgramu.java
PolskieZnakiISO88592.java
NapisDoLiczby.java
TrojkatnaTablica.java
5.10.2011 (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;
  • metody definiują funkcjonalność obiektu;
  • konstruktory, konstruktor domyślny;
  • wywołanie konstruktora wewnątrz innego konstruktora (konstrukcja this);
  • przeciążanie nazw konstruktorów i metod;
  • metody ze zmienną liczbą argumentów; //*//
  • 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
12.10.2011 (dziedziczenie)

Dziedziczenie:

  • deklaracja dziedziczenia;
  • 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;
  • hierarchia dziedziczenia i klasa Object;
  • upublicznianie składowych;
  • wywoływanie starych metod z nadklasy (konstrukcja super).
  • rzutowanie i operator instanceof. //*//

Pakiety:

  • definiowanie własnych pakietów;
  • 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.

Klasy wewnętrzne:

  • definiowanie statycznych klas zagnieżdżonych;
  • definiowanie klas wewnętrznych;
  • dostęp do klasy zewnętrznej poprzez .this;
  • tworzenie obiektów klas wewnętrznych poprzez .new;
  • anonimowe klasy wewnętrzne. //*//
19.10.2011 (polimorfizm)

Polimorfizm:

  • referencje do obiektów danej klasy może wskazywać na obiekt dowolnej klasy pochodnej;
  • polimorficzne wywoływanie metod;
  • klasy i metody abstrakcyjne (modyfikator abstract);
  • klasy i metody końcowe (modyfikator final).

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.
26.10.2011 (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);
  • dekompilacja programów - javap.
2.11.2011 (AWT i 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ń.
Przykładowe programy:
TestFrame1.java
TestFrame2.java
TestFrame3.java
TestPanel.java
TestCanvas.java
TestActionEvent.java
TestLayoutFlowLayout.java
TestLayoutBorderLayout.java
TestLayoutGridLayout.java
TestLayoutNull.java
9.11.2011 (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);

Podstawowe komponenty Swing:

  • przegląd podstawowych komponentów GUI;
  • szablon aplikacji;
  • grafika w Swingu;
  • menu, menu kontekstowe, mnemoniki, akceleratory;
  • dialogi i klasa JOptionPane.
Przykładowe programy:
FrameWithMenu.java
FrameWithMenu.form
23.11.2011 (Swing - architektura okien)

Okna w Swingu:

  • architektura okien w Swingu;
  • warstwy i z-order;
  • okna wewnętrzne JInternalFrame;
  • wygląd komponentów (obiekty LookAndFeel).

Specjalizowane komponenty Swing:

  • panel dzielony JSplitPane;
  • panel z zakładkami JTabbedPane;
  • panel przewijalny JScrollPane;
  • pasek narzędzi JToolBar.
30.11.2011 (Swing - architektura MVC)

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.

Komentarze dokumentacyjne:

  • umieszczanie komentarzy dokumentacyjnych w programie;
  • tagi w komentarzach dokumentacyjnych;
  • generowanie dokumentacji (program javadoc).
Przykładowy program:
Totolotek.java
7.12.2011 (strumienie)

Strumienie:

  • pojęcie strumienia;
  • strumienie do czytania i pisania;
  • strumienie na bajtowe i znakowe;
  • strumienie przedmiotowe (źródło i odbiornik danych);
  • strumienie przetwarzające i filtrujące;
  • strumienie binarne;
  • kodowanie;
  • kompresja;
  • serializacja (interfejs Serializable);
  • pliki i kataogi (klasa File).
14.12.2011 (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.
21.12.2011 (refleksja)

Refleksja:

  • typy otoczkowe i autoboxing;
  • klasa Class;
  • literały klasowe;
  • dynamiczne ładowanie klas;
  • pojęcie refleksji;
  • pozyskanie informacji o klasie w trakcie wykonania programu;
  • działania na składowych w obiekcie z wykorzystaniem refleksji.
4.01.2012 (typy sparametryzowane)

Typy sparametryzowane:

  • zastosowanie parametyzacji;
  • parametryzacja klas;
  • typy parametryczne;
  • parametry ograniczone;
  • parametry wieloznaczne;
  • implementacja parametyzacji w Javie - mechanizm znoszenia;
  • parametryzacja metod;
  • parametryzacja interfejsów;
  • parametryzacja podczas dziedziczenia;
  • typy surowe;
  • ograniczenia dla typów sparametryzowanych.
11.01.2012 (wyliczenia)

Kolekcje standardowe:

  • pojęcie kolekcji;
  • kolekcje Vector i Properties;
  • dynamiczne zbiory danych i interfejs Collection<T>;
  • dynamiczne zbiory asocjacyjne par klucz-wartość i interfejs Map<K,V>;
  • implementacje kolekcji;
  • iteratory i interfejs Iterator<E>;
  • przeglądanie i modyfikowanie kolekcji za pomocą iteratorów;
  • algorytmy zawarte w klasie Collections.

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();
  • dodawanie pól, metod i konstruktorów w wyliczeniach.
18.01.2012 (metadane)

Metadane:

  • metadane - 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.

Instytut Informatyki