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)

powrót na początek strony


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.

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ć 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ń
  • 6-8.10.2008 (rozruchowa lista zadań): binarna reprezentacja liczby całkowitej (ps/pdf)
  1. 13-15.10.2008: liczby naturalne w postaci słownej (ps/pdf)
  2. 20-22.10.2008: rozkład liczb naturalnych na czynniki pierwsze (ps/pdf)
  3. 27-29.10.2008: lista par klucz-wartość (ps/pdf)
  4. 3-5.11.2008: drzewa obliczeń (ps/pdf)
  5. 17-19.11.2008: kalkulator (ps/pdf)
  6. 24-26.11.2008: gra w "kółko i krzyżyk" (ps/pdf)
  7. 1-3.12.2008: kalendarz (ps/pdf)
  8. 8-10.12.2008: nawigator po systemie plików (ps/pdf)
  9. 15-17.12.2008: bufor automatycznie ssący dane (ps/pdf)
  10. 5-7.01.2009: lista cylkiczna (ps/pdf)
  11. 12-14.01.2009: akwarium (ps/pdf)
  12. 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)

powrót na początek strony


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.

powrót na początek strony