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:
- 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:
- Java Platform SE6 API Specifications (java.sun.com)
- Java SE Technologies at a Glance (java.sun.com)
- The Java Tutorials (java.sun.com)
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)
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.
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ń
- 14.10.2009: liczby całkowite w postaci słownej (ps/pdf)
- 21.10.2009: rozkład liczb całkowitych na czynniki pierwsze (ps/pdf)
- 28.10.2009: uporządkowana lista jednokierunkowa z liczbami rzeczywistymi (ps/pdf)
- 4.11.2009: uporządkowana tablica dynamiczna z danymi o osobach (ps/pdf)
- 18.11.2009: abstrakcyjne drzewa składni dla programów (ps/pdf)
- 25.11.2009: kalkulator (ps/pdf)
- 9.12.2009: geometria na płaszczyźnie (ps/pdf)
- 16.12.2009: nawigator po systemie plików (ps/pdf)
- 6.01.2010: skrzyżowanie (ps/pdf)
- 13.01.2010: lista cykliczna (ps/pdf)
- 20.01.2010: aplet - życie (ps/pdf)
- 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
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:
- ...