Java
Java to nowoczesny obiektowy język programowania. Od momentu powstania na początku lat 90'tych przeżył on dynamiczny rozwój a zainteresowanie nim stale rośnie. W obecnej chwili do samego języka programowania, rozwijanego przez firmę SUN, dołączony jest cały zestaw różnorodnych technologii, umożliwiających realizację projektów informatycznych w wielu dziedzinach. Celem tych zajęć jest zapoznanie studentów z językiem programowania Java oraz z kilkoma najważniejszymi technologiami wykorzystywanymi we współczesnym programowaniu.
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:
- 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.
- James Gosling, Bill Joy, Guy Steele, Gilad Bracha: The Java Language Specification. Second edition. Addison Wesley, 2000, ISBN 0-201-31008-2.
- Tim Lindholm, Frank Yellin: The Java Virtual Machine Specification. Second edition. Addison Wesley, 2000, ISBN 0-201-43294-3.
Literatura elektroniczna:
Terminarz
- wykład: wtorek 16-18 s.119 (P.Rzechonek)
-
laboratorium:
poniedziałek 14-16 s.110 (Ł.Piwowar)
wtorek 8-10 s.108 (M.Skórzewski)
wtorek 18-20 s.107 (P.Rzechonek)
środa 12-14 s.108 (P.Skibiński)
Ogłoszenia
- 26.01.2009 (laboratorium)
- Jutro (wtorek 27.01.2009) będł wpisywał do indeksów zaliczenia z laboratorium w godzinach 18-19.
- 5.01.2009 (laboratorium)
- Zadanie 10 zostało ogłoszone w ostatniej chwili! Trzeba je będzie zaprogramować na zajęciach. Ale za to jest proste :)
- 17.12.2008 (laboratorium)
- Nie będę ogłaszał następnego zadania przed Świętami, abyście mogli odpocząć od programowania (chociaż na kilka dni :-) a za to bardziej poświęcili czas rodzinie, spotkaniom i rozmowom z osobami bliskimi i na koniec przyjemnemu relaksowi. Życzę więc Wszystkim wesołych Świąt Bożego Narodzenia i udanej zabawy w Nowy Rok. Do zobaczenia w 2009 roku (po wykładzie pre-wigilijnym o kolekcjach standardowych 23 grudnia)!
- 13.10.2008 (laboratorium)
- W zadaniu 1 chodzi o dowolną liczbę typu int. W ostateczności można się ograniczyć do 109.
- 7.10.2008 (laboratorium)
- Zadanie rozruchowe nie będzie punktowane i nie jest obowiązkowe.
- 5.10.2008 (laboratorium)
- W nadchodzącym tygodniu będzie do zrobienia zadanie rozruchowe. Powodzenia!
- 28.09.2008 (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ć określoną 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ń
- 13-15.10.2008: liczby naturalne w postaci słownej (ps/pdf)
- 20-22.10.2008: rozkład liczb naturalnych na czynniki pierwsze (ps/pdf)
- 27-29.10.2008: lista par klucz-wartość (ps/pdf)
- 3-5.11.2008: drzewa obliczeń (ps/pdf)
- 17-19.11.2008: kalkulator (ps/pdf)
- 24-26.11.2008: gra w "kółko i krzyżyk" (ps/pdf)
- 1-3.12.2008: kalendarz (ps/pdf)
- 8-10.12.2008: nawigator po systemie plików (ps/pdf)
- 15-17.12.2008: bufor automatycznie ssący dane (ps/pdf)
- 5-7.01.2009: lista cylkiczna (ps/pdf)
- 12-14.01.2009: akwarium (ps/pdf)
- 19-21.01.2009: aplet muzyczny + serwlet z tabliczką mnożenia (ps/pdf)
Rankingi
Punkty z laboratoriów w grupie P.Rzechonka (wtorek 18-20)
Wykład
- 7.10.2008 (składnia języka):
- rys historyczny;
- podstawowe cechy języka programowania Java;
- kompilowanie (program javac) i uruchamianie (program java) programów w javie;
- typy pierwotne i referencyjne;
- 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.2008 (klasy i obiekty):
- definicjowanie włanych klas;
- składowe klasy: pola i metody;
- inicjalizacja pól instancyjnych, instancyjny blok inicjalizacyjny;
- konstruktory;
- referencja this;
- tworzenie obiektów za pomocą operatora new;
- garbage-collector i usuwanie obiektów;
- metoda finalize();
- deklaratory widoczności składowych (public, private, protected i widoczność pakietowa);
- 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;
- definiowanie własnych pakietów i klas w tych pakietach;
- importowanie pakietów, pojedynczych klas z pakietu i składowych statycznych z wybranej klasy i wybranego pakietu.
- 21.10.2008 (dziedziczenie i polimorfizm):
- deklaracja dziedziczenia;
- hierarchia dziedziczenia i klasa Object;
- metody toString() i equals(Object) w klasie Object;
- inicjalizacja klasy bazowej w konstruktorze klasy pochodnej;
- zastępowanie metod i przesłanianie pól;
- upublicznianie składowych;
- wywoływanie starych metod z nadklasy (konstrukcja super);
- referencje do obiektów klas pochodnych i polimorficzne wywoływanie metod;
- klasy wewnętrzne i zagnieżdżone;
- klasy anonimowe;
- metody i klasy abstrakcyjne (deklarator abstract);
- rzutowanie i operator instanceof;
- interfejsy jako kontrakt na funkcjonalność;
- dziedziczenie w interfejsach;
- implementowanie interfejsu;
- użycie interfejsu jako typu zmiennej lub parametru;
- klonowanie obiektów (metoda clone() i interfejs Cloneable);
- pola, metody i klasy ostateczne (deklarator final);
- budowanie nowych klas: kompozycja i dziedziczenie.
- 28.10.2008 (wyjątki):
- wrappery i autoboxing;
- zgłaszanie wyjątków - instrukcja throw;
- wychwytywanie wyjątków - instrukcja try-catch;
- klauzula finally;
- hierarchia klas wyjątków;
- wyjątki kontrolowane i niekontrolowane;
- deklarowanie własnych wyjątków - klasa Exception;
- tworzenie archiwów javy za pomocą programu jar).
- 4.11.2008 (AWT):
- komponenty interfejsu graficznego AWT;
- menadżery rozkładu komponentów w kontenerach;
- delegacyjny model obsługi zdarzeń.
- 18.11.2008 (Swing i grafika):
- komponenty interfejsu graficznego Swing;
- architektura okien w Swingu;
- look and feel;
- menu;
- niskopoziomowa grafika - klasa Graphics.
- 25.11.2008 (MVC):
- okna dialogowe JDialog i JOptionPane;
- zaawansowane komponenty Swingu;
- model MVC - oddzielenie danych od ich prezentacji w kontrolkach Swing.
- 2.12.2008 (strumienie):
- pojęcie strumienia;
- strumienie do czytania i pisania;
- strumienie na bajtowe i znakowe;
- strumienie przedmiotowe (źródło i ujście danych);
- strumienie przetwarzające i filtrujące;
- strumienie binarne;
- kodowanie;
- kompresja;
- serializacja (interfejs Serializable);
- obiekty plikowe (klasa File).
- 9.12.2008 (wątki):
- pojęcie procesu i wątków w procesie;
- tworzenie i uruchamianie wątków w javie;
- zakończenie działania wątku;
- cykl życia wątku;
- synchronizacja wątków (metody i bloki synchronizowane);
- wyłączanie optymalizacji (pola 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;
- grupy wątków;
- dokumentowanie programu za pomocą komentarzy dokumentacyjnych (program javadoc).
- 16.12.2008 (typy sparametryzowane i wyliczenia):
- parametryzacja klas i interfejsów;
- typy parametryczne;
- parametryzacja podczas dziedziczenia;
- parametryzacja ograniczona;
- parametryzacja wieloznaczna;
- parametryzacja metod;
- mechanizm znoszenia parametryzacji przez kompilator;
- ograniczenia typów sparametryzowanych;
- typy wyliczeniowe jako klasy;
- odtwarzanie programu źródłowego na podstawie skompilowanego kodu za pomocą programu javap.
- 23.12.2008 (przegląd kolekcji standardowych):
- dynamiczne zbiory danych i interfejs Collection<T>;
- listy i interfejs List<T>;
- klasy list ArrayList (implementacja listy na tablicy dynamicznej) i LinkedList (implementacja listy dwukierunkowej);
- kolejki i interfejs Queue<T>;
- klasy kolejek ArrayDeq i PriorityQueue;
- zbiory i interfejs Set<T>;
- klasa zbioru HashMap (implementacja na tablicy z haszowaniem);
- zbiory uporządkowane i interfejs SortedSet<T>;
- klasa zbioru uporządkowanego TreeSet (implementacja na drzewie czerwono-czarnym);
- dynamiczne zbiory asocjacyjne par klucz-wartość;
- zbiory asocjacyjne i interfejs Map<K,V>;
- klasa zbioru asocjacyjnego HashMap;
- uporządkowane zbiory asocjacyjne i interfejs SortedMap<K,V>;
- klasa uporządkowanego zbioru asocjacyjnego TreeMap;
- przeglądanie i modyfikowanie kolekcji za pomoca iteratorów;
- interfejs Iterator<E>;
- wykorzystanie pętli for-each.
- 6.01.2009 (java-beans):
- idea pracy z komponentami-ziarnami;
- atrybuty powiązane i ograniczone w ziarnach;
- kolekcje słuchaczy zdarzeń zmian atrybutów powiązanych PropertyChangeSupport;
- kolekcje słuchaczy zdarzeń zmian atrybutów ograniczonych 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;
- wetowanie zmian i wyjątek PropertyVetoException;
- zdarzenie zmiany atrybutu PropertyChangeEvent.
- RTTI w javie;
- mechanizm refleksji i klasa Class;
- mechanizm introspekcji i klasa BeanInfo.
- 13.01.2009 (aplety i serwlety):
- 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;
- komunikacja między apletami;
- uruchamianie apletów za pomocą programu appletviewer;
- 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;
- odczytywanie parametrów serwletu.
- 20.01.2009 (programowanie sieciowe):
- adresy sieciowe (klasa InetAddress);
- zasoby sieciowe (klasa URL);
- bezpośredni dostęp do zasobów sieciowych (klasa URLConnection);
- aplikacje typu klient-serwer;
- komunikacja po protokole TCP;
- komunikacja po protokole UDP.
- 27.01.2009 (asercje i metadane):
- instrukcja assert;
- sprawdzanie warunku w asercji (wyjątek AssertionError);
- włączanie i wyłączanie testowania asercji w czasie działania programu;
- zmienna liczba argumentów w metodach;
- 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.