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
-
9/11.10.2012:
łańcuchy Fibonacciego (pdf)
-
16/18.10.2012:
wzór dwumianowy Newtona (pdf)
-
23/25.10.2012:
drzewa obliczeń (pdf)
-
6/8.11.2012:
drzewa binarnych poszukiwań (pdf)
-
20/22.11.2012:
kalkulator ONP (pdf)
-
27/29.11.2012:
liczby arabskie i rzymskie (pdf)
-
11/13.12.2012:
gra strategiczna Gomoku (pdf)
-
18/20.12.2012:
edytor obrazów (pdf)
-
8/10.01.2013:
robaki (pdf)
-
15/17.01.2013:
uniwersalny kalendarz (pdf)
-
22/24.01.2013:
lista cykliczna (pdf) - zadanie dodatkowe
Ranking
Wykład
Materiał omawiany na wykładach
Spis wykładów:
- 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.