Kontakt:

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

Konsultacje (pokój 339):

  • poniedziałek 18-19
  • środa 12-13
Proszę wcześniej uzgodnić dokładny termin konsultacji drogą mailową.

Java - kurs podstawowy (semestr zimowy 2012/13)

Adres:

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

20 grudnia 2012 r.

Progi punktowe na zaliczenie:

Uwaga, noworoczna promocja punktowa! Postanowiłem obniżyc wymagania punktowe na poszczególne oceny poprzez zadanie, którego punkty nie będą się wliczać do MAXa, czyli do 100% punktów możliwych do zdobycia w semestrze. Za zrobienie tego zadania studenci normalnie otrzymają punkty wliczane do swoich indywidualnych kont punktowych. Będzie to ostatnie, prawdopodobnie 11, zadanie w semestrze.

25 października 2012 r.

Laboratorium 3 (drzewa obliczeń):

Zadanie z laboratorium 3 (drzewa obliczeń) w mojej grupie (PRz) będę przyjmować jeszcze na następnych zajęciach (8.11.2012) za połowę punktów (studenci, którzy mieli już dziś rozpoczęty ten temat będę trochę lepiej punktowani).

3 października 2012 r.

Pierwsze laboratorium:

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

1 października 2012 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.

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: czwartek 8-10 s.119 (Paweł Rzechonek)
  • laboratoria:
    wtorek 10-12 s.107 (Dariusz Biernacki)
    czwartek 10-12 s.110 (Paweł Rzechonek)
    czwartek 16-18 s.108 (Marek Szykuła)

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. 9/11.10.2012: łańcuchy Fibonacciego (pdf)
  2. 16/18.10.2012: wzór dwumianowy Newtona (pdf)
  3. 23/25.10.2012: drzewa obliczeń (pdf)
  4. 6/8.11.2012: drzewa binarnych poszukiwań (pdf)
  5. 20/22.11.2012: kalkulator ONP (pdf)
  6. 27/29.11.2012: liczby arabskie i rzymskie (pdf)
  7. 11/13.12.2012: gra strategiczna Gomoku (pdf)
  8. 18/20.12.2012: edytor obrazów (pdf)
  9. 8/10.01.2013: robaki (pdf)
  10. 15/17.01.2013: uniwersalny kalendarz (pdf)
  11.  

  12. 22/24.01.2013: lista cykliczna (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 5: wyjątki, asercje 6: dzienniki, wyrażenia regularne
7: AWT i zdarzenia 8: Swing - komponenty GUI 9: Swing - architektura okien
10: strumienie 11: wątki 12: Swing - architektura MVC
13: programowanie generyczne 14: kolekcje, wyliczenia 15: refleksja, adnotacje
4.10.2012 (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);
  • 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
11.10.2012 (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).

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.
Przykładowy program:
Punkt2D.java
18.10.2012 (dziedziczenie i polimorfizm)

Dziedziczenie:

  • deklaracja dziedziczenia;
  • dziedziczenie jednobazowe (dziedziczenie po klasie 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;
  • wywoływanie starych metod 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).
Przykładowe programy:
Wyrazenie.java, Operator1Arg.java, Operator2Arg.java, Liczba.java, WartBezwzgl.java, Dodaj.java, Mnoz.java, TestWyr.java
25.10.2012 (interfejsy, klasy wewnętrzne)

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;
  • anonimowe klasy wewnętrzne.

Komentarze dokumentacyjne:

  • umieszczanie komentarzy dokumentacyjnych w programie;
  • tagi w komentarzach dokumentacyjnych;
  • generowanie dokumentacji - javadoc.
Przykładowe programy:
Zbior.java, TablicaDynamiczna.java, TestKlonTab.java
Zbior.java, Lista.java, TestKlonLis.java
08.11.2012 (wyjątki i 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.2012 (dzienniki, wyrażenia regularne)

Dzienniki:

  • rejestracja komunikatów w dziennikach;
  • zapis do dziennika przy użyciu Logger.global;
  • własne rejestratory i ich hierarchia;
  • określenie poziomu szczegółowości komunikatów (obiekt Level);
  • metody służące do śledzenia przepływu wykonania programu;
  • narzędzia sterujące przepływem komunikatów (obiekty typu Handler);
  • zapisywanie rekordów z komunikatami w formacie XML w plikach.

Łańcuchy znakowe:

  • niemodyfikowalne łańcuchy typu String;
  • konwersje do łańcuchów znakowych (metody toString() i valueOf() );
  • konkatenacja łańcuchów;
  • porównywanie łańcuchów;
  • wyszukiwanie w łańcuchach;
  • przekształcanie łańcuchów;
  • formatowane tworzenie łańcuchów (metoda format() );
  • modyfikowalne łańcuchy typu StringBuffer i StringBuilder;
  • operacje modyfikujące
  • rozbiór tekstu na tokeny za pomocą obiektu StringTokenizer.

Wyrażenia regularne:

  • budowa wyrażeń regularnych;
  • dopasowanie łańcucha do wyrażenia regularnego (metoda maches() w klasie String);
  • podział łańcucha względem wyrażenia regularnego (metoda split() w klasie String);
  • przetwarzanie wyrażeń regularnych za pomoca klas Pattern i Matcher.
22.11.2012 (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
29.11.2012 (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.
6.12.2012 (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.
13.12.2012 (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.
20.12.2012 (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.
3.01.2013 (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;
    • komponenty tekstowe i lista rozwijalna.
Przykładowy program:
Totolotek.java
10.01.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.
17.01.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.
Slajdy do wykładu:
kolekcje.ppt
wyliczenia.ppt
24.01.2013 (refleksja, adnotacje)

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;
  • dekompilacja programów - javap.

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.

Instytut Informatyki