Kontakt:

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

Konsultacje:

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

Semestr zimowy w roku akademickim 2010/11

Adres:

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

19 stycznia 2011 r.

Oceny z laboratorium w grupie PRz:

Studentom z mojej grupy (PRz) będę wpisywał oceny z laboratorium w poniedziałek 24 stycznia o godzinie 13:15. Jeśli ktoś nie będzie mógł w tym czasie dotrzeć do instytutu (pokój 339), to proszę zostawić indeks na półce koło portierni.

18 grudnia 2010 r.

Zadanie 10:

Termin oddania następnego zadania (zadanie 10) wypadnie już w nowym roku. Zadanie to będzie dotyczyć wątków. Sformułuję je jeszcze przed Wigilią i umieszczę na liście.

10 listopada 2010 r.

Zadanie 6 w grupie PRz:

Termin oddania następnego zadania (zadanie 6) w mojej grupie (PRz) został przesunięty o jeden tydzień a więc na 24 listopada.

10 listopada 2010 r.

Zadanie 5 w grupie PRz:

Zadanie 5 w mojej grupie (PRz) można również oddać za tydzień 17 listopada za trochę mniejszą liczbę punktów niż normalnie.

8 listopada 2010 r.

Decode Tieto 2010:

Każdy uczestnik kursu programowania w Javie, który zapisze się na zawody Decode Tieto 2010, weźmie udział w eliminacjach i osiągnie pozytywny wynik, dostanie ekstra punkty, które będą doliczane do punktacji z laboratorium.

Konkurs programistyczny rozpoczyna się jutro (9 listopada 2010). Firma Tieto Poland zainauguruje go w naszym Instytucie. Więcej informacji można znaleźć na stonie instytutowej.

5 listopada 2010 r.

Zadanie 5:

Nie podoba mi się to zadanie. Coś w nim poprawię, jeszcze dzisiaj...

Już!

Nie chciałem zmieniać zbyt wielu rzeczy, więc tylko uzupełniłem treść o pewne wskazówki mogące pomóc przy projektowaniu klas w tym zadaniu.

Nie napisałem tego w treści, ale można pomyśleć o statycznej kolekcji przechowującej wszystkie funkcje i operatory, co pozwoliłoby w elegancki sposób identyfikować nazwy wyłuskane z wpisanego wyrażenia ONP (tak zrobiłem w rozwiązaniu wzorcowym).

25 października 2010 r.

Zadanie 3:

W związku z licznymi pytaniami odnośnie zadania 3 (drzewa obliczeń) wyjaśniam: w zadaniu tym są do zrealizowania trzy podpunkty i za zrobienie wszystkich trzech podpunktów można łącznie dostać do 10 punktów.

Ponadto zrobiłem kilka poprawek i wyjaśnień w samej treści zadania. W podpunkcie 1: zmieniłem interfejs na klasę abstrakcyjną. W podpunkcie 2: podałem przykład wyrażenia i hierarchii klas.

5 października 2010 r.

Pierwsze laboratorium:

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

3 października 2010 r.

Punkt informacyjny:

To właśnie w tym miejscu będą się pojawiać ważne ogłoszenia dotyczące organizacji zajęć związanych z tym przedmiotem. Proszę zaglądać do tych ogłoszń, 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 nauczenie Was programowania w języku Java oraz zapoznanie z podstawowymi technologiami wykorzystywanymi we współczesnym programowaniu w Javie.

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 8-10 s.25 (Paweł Rzechonek)
  • laboratorium:
    wtorek 8-10 s.107 (Marek Szykuła)
    środa 10-12 s.137 (Paweł Rzechonek)
    czwartek 12-14 s.108 (Łukasz Piwowar)
    czwartek 16-18 s.107 (Marcin Skórzewski)

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. 12-14.10.2010: liczby naturalne w postaci słownej (pdf)
  2. 19-21.10.2010: wzór dwumianowy Newtona (pdf)
  3. 26-28.10.2010: drzewa obliczeń (pdf)
  4. 3/4/9.11.2010: drzewa binarnych poszukiwań (pdf)
  5. 10/16/18.11.2010: kalkulator ONP (pdf)
  6. 23-25.11.2010: rysunek (pdf)
  7. 30.11-2.12.2010: kółko i krzyżyk (pdf)
  8. 7-9.12.2010: kalendarz (pdf)
  9. 14-16.12.2010: nawigator po systemie plików (pdf)
  10. 4/5/13.01.2011: skrzyżowanie (pdf)
  11. 11/12/20.01.2011: lista cykliczna (pdf)
  12. 18/19/27.01.2011: album (pdf)

Ranking

Wykład

Materiał omawiany na wykładach

Spis wykładów:

1: język Java 2: klasy i obiekty 3: dziedziczenie i polimorfizm
4: interfejsy 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: wyliczenia
13: typy sparametryzowane 14: aplety 15: serwlety
6.10.2010 (język Java)

Koncepcja Javy:

  • historia Javy;
  • podstawowe cechy języka programowania Java (obiekty, odśmiecanie);
  • technologia Javy;
  • wirtualna maszyna Javy;
  • biblioteki standardowe Javy.

Składnia języka Java:

  • pierwszy program w Javie;
  • kompilowanie (program javac) i uruchamianie (program java) programów w javie;
  • komentarze;
  • typy pierwotne i referencyjne;
  • zmienne, zasięg zmiennych;
  • literały;
  • stałe;
  • tworzenie obiektów (operator new) i ich usuwanie (garbage-collector);
  • operatory, wyrażenia i instrukcje sterujące;
  • napisy (klasa String);
  • tablice, tablice wielowymiarowe;
  • standardowe wejście/wyjście;
  • parametry wywołania programu.
Przykładowe programy:
PierwszyProgram.java
PolskieZnakiISO88592.java
ArgumentyProgramu.java
NapisDoLiczby.java
TrojkatnaTablica.java
13.10.2010 (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;
  • metody ze zmienną liczbą argumentów;
  • konstruktory, konstruktor domyślny;
  • wywołanie konstruktora wewnątrz innego konstruktora (konstrukcja this);
  • przeciążanie nazw konstruktorów i metod;
  • pola finalne (deklarator final) i ich inicjalizacja;
  • tworzenie obiektów za pomocą operatora new;
  • odzyskiwanie pamięci przez garbage-collector, metoda finalize();
  • kontrola dostępu do składowych (deklaratory public, private, protected i widoczność pakietowa);
  • składowe statyczne (deklarator static);
  • inicjalizacja pól statycznych, statyczny blok inicjalizacyjny;
  • ograniczenia metod staycznych.
Przykładowy program:
Punkt2D.java
20.10.2010 (dziedziczenie i polimorfizm)

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.

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).
27.10.2010 (interfejsy)

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.

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 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;
  • lokalne klasy wewnętrzne;
  • anonimowe klasy wewnętrzne.
3.11.2010 (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;
  • stos wywołań 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).
10.11.2010 (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
17.11.2010 (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.
24.11.2010 (Swing - architektura okien)

Okna w Swingu:

  • architektura okien w Swingu;
  • warstwy;
  • szyba;
  • 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.
1.12.2010 (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
8.12.2010 (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:

  • obiekty plikowe (klasa File).
15.12.2010 (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.
22.12.2010 (wyliczenia)

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.

Typy otoczkowe:

  • klasy opakowujące typu pierwotne;
  • automatyczne otaczanie wartości pierwotnych;
  • automatyczne rozpakowywanie w wyrażeniach.

Refleksja:

  • 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.
5.01.2011 (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.
12.01.2011 (aplety)

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.

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;
  • uruchamianie apletów za pomocą programu appletviewer;
  • program jar do pakowania klas, apletów oraz innych zasobów.
19.01.2011 (serwlety)

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.

Servlety:

  • serwlet - program generujący dokument html działający po stronie serwera www;
  • definiowanie serwletu (interfejs Servlet);
  • cykl życia serwletu;
  • serwer aplikacji w środowisku Apache Tomcat;
  • umieszczanie serwletu na sewerze;
  • konfigurowanie serwera aplikacji (plik web.xml);
  • generowanie dokumentu odpowiedzi przez serwlet.

Instytut Informatyki