Java

Java to obiektowy język programowania stworzony przez Jamesa Goslinga z firmy Sun Microsystems w 1995 roku. Od momentu powstania w połowie lat 90'tych przeżył on dynamiczny rozwój a zainteresowanie nim stale rośnie. W Javie programy źródłowe są kompilowane do kodu bajtowego, czyli postaci wykonywanej przez maszynę wirtualną JVM. Język ten cechuje się silnym typowaniem. Jego podstawowe koncepcje zostały przejęte z języka Smalltalk (maszyna wirtualna, odśmiecanie pamięci) oraz z języka C++ (duża część składni i słów kluczowych).

Celem tych zajęć jest nauczenie Was programowania w języku Java oraz zapoznanie z kilkoma ważnymi technologiami wykorzystywanymi we współczesnym programowaniu z wykorzystaniem 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:

Literatura elektroniczna anglojęzyczna:

Terminarz
  • wykład: środa 8-10 s.25 (P.Rzechonek)
  • laboratorium:
    poniedziałek 14-16 s.110 (Ł.Piwowar)
    środa 10-12 s.137 (M.Skórzewski)
    środa 12-14 s.108 (P.Rzechonek)
    środa 14-16 s.108 (P.Rzechonek)

powrót na początek strony


Ogłoszenia

20.01.2010 (laboratorium grupa PRz)
Laboratorium z Javy w grupie PRz przesunięte na środę odbędzie się w sali 107 w godzinach 11:15-13:00.
20.01.2010 (wykład)
Wykład z Javy przesunięty na środę odbędzie się w sali 103 w godzinach 9:15-11:00.
14.01.2010 (wykład i laboratorium)
Wykład środowy, który wypada we wtorek 26 stycznia 2010, zostanie przesunięty na środę 27 stycznia 2010 (jest to pierwszy dzień sesji). To samo dotyczy się zajęć laboratoryjnych w moich grupach. Godzina rozpoczęcia wykładu to 9:15, a laboratorium 11:15 (numer sali wykładowej zostanie później określony).
16.12.2009 (laboratorium)
Zadanie 9 będzie miało termin realizacji dopiero po Nowym Roku - przyszły tydzień jest więc wolny od programowania w Javie. Przy okazji, życzę Wam radosnych i spokojnych Świąt, nieco odpoczynku po Świętach i wystrzałowej zabawy w Sylwestra.
27.11.2009 (laboratorium)
Zadanie 7 jest spore i zostało ogłoszone z lekkim poślizgiem, dlatego termin jego realizacji został przesunięty na kolejny tydzień, czyli na 9 grudnia 2009 r.
29.09.2009 (wykład/laboratorium)
Tutaj będą umieszczene informacje dotyczące organizacji zajęć. Proszę zaglądać do ogłoszń co najmniej dwa razy w tygodniu przed wykładem i przed laboratorium.

powrót na początek strony


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: 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 i 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 dobra trzba będzie zgromadzić 90% punktów; oceny pośrednie pozostją w liniowej zależności od przedstawionych wymagań granicznych.
Listy zadań
  1. 14.10.2009: liczby całkowite w postaci słownej (ps/pdf)
  2. 21.10.2009: rozkład liczb całkowitych na czynniki pierwsze (ps/pdf)
  3. 28.10.2009: uporządkowana lista jednokierunkowa z liczbami rzeczywistymi (ps/pdf)
  4. 4.11.2009: uporządkowana tablica dynamiczna z danymi o osobach (ps/pdf)
  5. 18.11.2009: abstrakcyjne drzewa składni dla programów (ps/pdf)
  6. 25.11.2009: kalkulator (ps/pdf)
  7. 9.12.2009: geometria na płaszczyźnie (ps/pdf)
  8. 16.12.2009: nawigator po systemie plików (ps/pdf)
  9. 6.01.2010: skrzyżowanie (ps/pdf)
  10. 13.01.2010: lista cykliczna (ps/pdf)
  11. 20.01.2010: aplet - życie (ps/pdf)
  12. 27.01.2010: serwlet - trójkąt Pascala (zadanie dodatkowe) (ps/pdf)
Rankingi

Punkty z laboratoriów w grupach P.Rzechonka:
środa 12-14
środa 14-16

powrót na początek strony


Wykład

7.10.2009 (język Java)

Koncepcja Javy:

  • rys historyczny Javy;
  • podstawowe cechy języka programowania Java (obiekty, odśmiecanie);
  • technologia Javy;
  • wirtualna maszyna Javy;
  • biblioteki standardowe 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, stałe;
  • literały;
  • 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.

14.10.2009 (klasy i obiekty):

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ływanie innych konstruktorów w tej samej klasie (konstrukcja this);
  • wywołanie konstruktora wewnątrz innego konstruktora;
  • referencja this;
  • tworzenie obiektów za pomocą operatora new;
  • usuwanie obiektów przez garbage-collector;
  • metoda finalize();
  • kontrola dostępu do składowych (deklaratory public, private, protected i widoczność pakietowa);
  • metody definiują zachowanie się obiektu;
  • przeciążanie nazw konstruktorów i metod;
  • metody ze zmienną liczbą argumentów;
  • składowe statyczne (deklarator static);
  • inicjalizacja pól statycznych, statyczny blok inicjalizacyjny;
  • własności metod statycznych;
  • metoda main().

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.

21.10.2009 (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;
  • 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);
  • hierarchia dziedziczenia i klasa Object;
  • wrappery i autoboxing;
  • klonowanie obiektów (metoda clone() i interfejs Cloneable).

28.10.2009 (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;
  • markery;
  • fabrykowanie obiektów na podstawie interfejsu.

Interfejsy i klasy zagnieżdżone:

  • statyczne typy zagnieżdżone;
  • klasy wewnętrzne;
  • dostęp do klasy zewnętrznej poprzez .this;
  • tworzenie obiektów klas wewnętrznych poprzez .new;
  • lokalne klasy wewnętrzne;
  • anonimowe klasy wewnętrzne;
  • dziedziczenie typów;
  • klasy wewnętrzne w interfejsach.

4.11.2009 (wyjątki):

Wyjątki:

  • czym są wyjątki i jak się ich używa (podział kodu ze względu na wykorzystanie wyjątków);
  • hierarchia klas wyjątków (klasa Throwable);
  • wyjątki kontrolowane i niekontrolowane (klasy Error i RuntimeException);
  • zgłaszanie wyjątków - instrukcja throw;
  • wychwytywanie wyjątków - instrukcja try-catch-finally;
  • klauzula throws i jej postać w przypadku nadpisywania;
  • deklarowanie własnych klas wyjątków.

Asercje:

  • czym są asercje i jak się ich używa;
  • instrukcja assert;
  • sterowanie programem za pomocą asercji (wyjątek AssertionError);
  • włączanie i wyłączanie asercji (domyślnie asercje są wyłączone).

18.11.2009 (AWT):

Graficzny interfejs użytkownika AWT:

  • komponenty interfejsu graficznego AWT;
  • menadżery rozkładu komponentów w kontenerach;
  • delegacyjny model obsługi zdarzeń;
  • niskopoziomowa grafika (metoda paint z parametrem Graphics).

25.11.2009 (Swing):

Graficzny interfejs użytkownika Swing:

  • komponenty lekkie interfejsu graficznego Swing;
  • menu i akcje klawiaturowe;
  • wyspecjalizowane kontenery (klasy JSplitPane, JTabbedPane, JScrollPane);
  • niskopoziomowa grafika (metoda paintComponent z parametrem Graphics);
  • okna dialogowe (klasy JFileChooser, JColorChooser, JOptionPane);
  • zamykanie aplikacji (metoda setDefaultCloseOperation);
  • architektura okien (komponenty ciężkie) w Swingu;
  • warstwy w oknach;
  • wygląd okien (klasa LookAndFeel).

Archiwa javy:

  • program jar do pakowania aplikacji i innych zasobów;
  • uruchamianie spakowanych aplikacji.

2.12.2009 (MVC):

Modele danych i widoki:

  • model MVC;
  • oddzielenie danych od ich prezentacji w kontrolkach Swing;
  • modele danych (ListModel w klasie JList);
  • powiadamianie o zmianach w danych (generowanie zdarzeń ListDataEvent w klasie AbstarctListModel);
  • krześlarze danych (ListCellRenderer w klasie JList).

Dokumentowanie programów:

  • komentarze dokumentacyjne i ich umiejscowienie w programach;
  • tagi dokumentacyjne;
  • generowanie dokumentacji programem javadoc.

9.12.2009 (strumienie):

Strumienie:

  • pojęcie strumienia;
  • strumienie do czytania i pisania;
  • strumienie na bajtowe i znakowe;
  • strumienie przedmiotowe (źródło i cel danych);
  • strumienie przetwarzające i filtrujące;
  • strumienie binarne;
  • kodowanie;
  • kompresja;
  • serializacja (interfejs Serializable).

Pliki:

  • obiekty plikowe (klasa File).

16.12.2009 (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;
  • 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.

6.01.2010 (typy sparametryzowane i wyliczenia):

Typy sparametryzowane:

  • parametryzacja klas;
  • typy parametryczne;
  • parametry ograniczone;
  • parametry wieloznaczne;
  • parametryzacja metod;
  • parametryzacja interfejsów;
  • parametryzacja podczas dziedziczenia;
  • typy surowe;
  • mechanizm znoszenia parametryzacji przez kompilator;
  • ograniczenia typów sparametryzowanych.

Przegląd kolekcji standardowych:

  • 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 pomoca iteratorów;
  • wykorzystanie pętli for-each.

Wyliczenia:

  • definiowanie wyliczeń;
  • typ wyliczeniowy w instrukcji switch-case;
  • porównywanie wyliczeń i ich identyfikacja;
  • typy wyliczeniowe jako klasy dziedziczące po Enum.

13.01.2010 (aplety i serwlety):

Wyliczenia - dokończenie

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.

Serwlety:

  • serwlet - program generujący dokument html działający po stronie serwera www;
  • definiowanie serwletu (interfejs Servlet);
  • umieszczanie serwletu na sewerze www;
  • konfigurowanie serwera aplikacji (plik web.xml);
  • generowanie dokumentu html przez serwlet.

20.01.2010 (java-beans):

Java-beans:

  • idea pracy z komponentami-ziarnami;
  • atrybuty zwyczajne (powiązane) i wetowalne (ograniczane) w ziarnach;
  • skcesory: 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.

Refleksja:

  • program javap do deasemblacji klas;
  • RTTI w javie;
  • mechanizm refleksji i klasa Class;
  • mechanizm introspekcji i klasa BeanInfo.

27.01.2010 (lokalizacja):

Refleksja - dokończenie

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 domyślne z jedną składową value;
  • notatki znacznikowe;
  • czytanie notatek w czasie działania programu.

Lokalizacja:

  • ...

powrót na początek strony