Obsah
Souvislosti, prerekvizity, návaznosti
Hodnocení a jeho složky
Kontakty a konzultační hodiny
Odkazy na informační zdroje
Prakticky zaměřený bakalářský předmět
Cílem je naučit základním principům objektového programování a algoritmizace
IB001 - Úvod do programování (předpokládají se znalosti na úrovni IB001)
IB002 - Návrh algoritmů I (v PB162 se prakticky implementují vybrané algoritmy probírané v IB002)
Předpokládají se základní znalosti strukturované algoritmizace a programování (v rozsahu Úvodu do programování), tj. např.:
Na tento základní kurz navazují na FI
PV168 - Seminář z jazyka Java (jarní semestr), náplní je zvládnutí Javy umožňující vývoj jednodušších praktických aplikací s GUI, databázemi, s použitím JavaME... Učí kolektiv zkušených cvičících pod vedením Petra Adámka (Jan Pavlovič, Pavel Drášil, Luděk Bártek a další).
PA165 - Vývoj aplikací v jazyce Java (podzimní semestr) - pokročilejší předmět spíše magisterského určení, předpokládá znalosti/zkušenosti z oblasti databází, částečně sítí a distribuovaných systémů - a také Javy zhruba v rozsahu PB162 a PV168. Náplní je zvládnutí netriviálních, převážně klient/server aplikací na platformě JavaEE.
32 bodů - hodnocení úloh řešených samostatně v průběhu semestru (na cvičeních, ve volném čase...)
8 bodů - první písemka řešení jednoduché praktické úlohy přímo u počítače (říjen)
14 bodů - druhá písemka řešení jednoduché praktické úlohy přímo u počítače (listopad)
18 bodů - třetí písemka řešení praktické úlohy přímo u počítače, v době cvičení, na konci výuky v semestru (prosinec).
28 bodů - závěrečná/zkoušková písemka řešení rozsáhlejší praktické úlohy přímo u počítače, ve zkouškovém období.
Celkem 100 bodů
viz aktuální informace o předmětu PB162 na IS MU
Cvičení jsou dvouhodinová, konají se pod vedením příslušných kvalifikovaných cvičících v počítačových učebnách, zpravidla B116, B117, B130 - viz váš rozvrh.
Náplň
Hlavním obsahem je konzultovaná samostatná práce na bodovaných úlohách + aktivní opakování témat z přednášek s důrazem na praktické zvládnutí;
cvičení jsou dvouhodinová, účast na přednáškách je však přesto žádoucí;
předpokládá se i jistý netriviální podíl práce mimo cvičení;
odměnou vám, kromě získaných znalostí a dovedností, budou celkem 4 kr. + za ukončení
kanc. B307 (3. patro budovy B)
tel. 54949 5940 (z tlf. mimo budovu), kl. 5940 (volání v rámci fakulty i celé MU)
e-mail: tomp@fi.muni.cz
www TP: http://www.fi.muni.cz/~tomp
materiály PB162-Java (IS): https://is.muni.cz/auth/el/1433/podzim2006/PB162/
Primárním konzultačním bodem jsou vaši cvičící. Cvičení jsou vedena mj. právě z důvodu možnosti konzultací.
Konzultace přímo s přednášejícím: vždy v kanc. B307, prosím o dodržování časů:
Studijní materiály předmětu: https://is.muni.cz/auth/el/1433/podzim2006/PB162/ (budou vystavovány postupně, pro celkový přehled o obsahu lze použít materiály loňské)
Aktuální materiály na wiki http://kore.fi.muni.cz/wiki/index.php/PB162 přístup ze sítí mimo FI: http://kore.fi.muni.cz:5080/wiki/index.php/PB162
Další zdroje, materiály z (hodně) minulých let: http://www.fi.muni.cz/~tomp/java
Knihy
TP: Java - začínáme programovat, Grada Publishing, 2002, http://www.fi.muni.cz/~tomp/java/ucebnice
Pavel Herout: Učebnice jazyka Java, Kopp, 2000
(Pavel Herout: Java - grafické uživatelské rozhraní a čeština, Kopp, 2001) - pro pokročilé
Rudolf Pecinovský: Myslíme v jazyce Java 5.0, Grada Publishing, 2005
Bruce Eckel: Myslíme v jazyce Java - příručka programátora, Grada Publishing, 2000
(Bruce Eckel: Myslíme v jazyce Java - příručka zkušeného programátora, Grada Publishing, 2000) - pro pokročilé
a další, viz např.http://www.vltava.cz
Joshua Bloch: Java efektivně 57 zásad softwarového experta, Grada Publishing
Bogdan Kiszka: 1001 tipů a triků pro programování v jazyce Java, Computer Press, 2003, informace na Vltavě
univerzální (není určen výhradně pro specifickou aplikační oblast)
objektově-orientovaný (výpočet je realizován jako volání metod/zasílání zpráv objektů)
ideovým předchůdcem je C++ (a evt. Delphi) (C++ zbaveno zbytečností a nepříjemností)
reálným soupeřem je (Microsoft) C# (zatím převážně na platf. Windows)
Java je jazyk pro vývoj a běh jednoduchých i rozsáhlých aplikací
Vývoj je efektivnější než na jejich předchůdcích (C++) a výsledné aplikace "běží všude"
Nezavádí zbytečnosti a vede ke správným a dále uplatnitelným návykům
Je velmi perspektivní platformou pro vývoj open-source i komerčního SW, mj. pro extrémně velké množství volně dostupných knihoven
program v Javě je meziplatformně přenositelný na úrovni zdrojového i přeloženého kódu
je to umožněno tím, že přeložený javový program běží v tzv. Java Virtual Machine (JVM)
zdrojový i přeložený kód je tedy přenositelný mezi všemi obvyklými platformami (UNIX, Windows, MAC OS X, ale také sálové počítače, minipočítače typu IBM AS/400 apod.)
tedy všude tam, kde existuje příslušná JVM
Kód je při běhu dobře zabezpečen:
je možné nastavit úrovně přístupu k hostitelskému systému pomocí tzv. Security Manageru
je možné ověřovat před spuštěním elektronický podpis kódu
jazyk vhodný pro efektivní (rychlé) psaní přehledných programů (mj. také díky dokumentačním možnostem)
v průměru vyšší produktivita programátorské práce v Javě než v C++
zdarma dostupné nezměrné množství knihoven pro různorodé aplikační oblasti, např. na SourceForge a tisících dalších místech
k dispozici je řada kvalitních vývojových prostředí (i zdarma) - NetBeans, JBuilder, Visual Age for Java, Eclipse, IDEA
Škálovatelné výkonné aplikace běžící na serverech (Java Enterprise Edition)
Aplikace na přenosných a vestavěných zařízeních (Java Micro Edition)
Přenositelné desktopové i grafické/okénkové (GUI) aplikace
překladač (přístupný např. příkazem javac) a další vývojové nástroje
chování JVM se mění např. pokud se objeví bezpečnostní "díra" nebo nelze-li dosáhnout požadované změny chování pomocí modifikace Java Core API
daleko konzervativnější je samotný jazyk - mění se zřídka, ale přece: např. Java2, v1.4 přidává nové klíčové slovo assert, Java 5.0 (postaru 1.5) obohacuje jazyk o enum, generické typy a další rysy.
Specifikace Javy (tzv. "Editions") - např.: Java 2 Standard Edition, 1.4 nebo Java 2 Standard Edition 5.0
Implementace Javy ("Development Kits" nebo "Runtime Environments") - např.: Java 2 Software Development Kit, 5.0 - obsahuje vývojové nástroje
Java 2 Runtime Enviroment, 5.0 - obsahuje jen běhové prostředí pro spouštění hotových přeložených pg.
Verze Javy byly až do verze 1.5 (ponovu 5.0) děleny na "Java (před Java 2)" a "Java 2"
číslování verzí:
tzv. major číslo, např. Java 2, v1.4
tzv. minor číslo, např. Java 2, v1.4.2
při změně major (druhého) čísla se může měnit Core API a někdy i jazyk
ke změně prvního čísla dochází až teď, s verzí 5.0 (postaru 1.5) - tj. s celkovou změnou pojmenovávacího schématu
Java 2 Standard Edition 5.0 a Enterprise Edition 5.0 je stabilní verzí pro všechny platformy.
Připravována je Java 2 Standard Edition 6.0.
Aktuální informace najdete vždy na webu http://java.sun.com.
generika (generické datové typy) technika umožňující silnou typovou kontrolu v době překladu - např. v metodách manipulujících s prvky dynamických datových struktur
umožňuje snadnou a typově bezpečnou iteraci po prvcích kolekcí a polí
zajišťuje automatickou konverzi mezi primitivními typy a příslušnými objektovými "obalujícími" typy
typově bezpečné výčtové typy
umožňují specifikovat proměnný počet parametrů metod
dovoluje odkazovat se na statické prvky bez uvádění jména třídy (rozhraní)
dovolují specifikovat u tříd, rozhraní, metod metadata (anotace) dostupná i za běhu
java.sun.com (pro Windows, Solaris, Linux)
lze stáhnout jak samotné vývojové prostředí (JDK), jen běhové prostředí (JRE) nebo JDK v balíčku s IDE (Integrated Development Environment) NetBeans.
dokumentace se stahuje z téhož místa, ale samostatně (nebo lze číst z WWW)
celkově vývojové prostředí J2SDK 1.4.2 vč. dokumentace zabere cca 220 MB na disku
potřebná velikost operační paměti - min 64 MB, doporučeno 128 MB (i více :-))
samotné vývojové prostředí (JDK),
jen běhové prostředí (JRE),
JDK v balíčku s grafickým (okénkovým) integrovaným vývojovým prostředím (IDE, Integrated Development Environment) NetBeans.
Vývojové nástroje (Development
Tools) v bin
-- určené k vývoji,
spouštění, ladění a dokumentování programů v Javě.
Běhové prostředí Javy (Java Runtime
Environment) se nalézá v jre
.
Obsahuje Java Virtual Machine (JVM), knihovnu tříd Java Core API a
další soubory potřebné pro běh programů v Javě.
Přídavné knihovny (Additional
libraries) v podadresáři lib
jsou
další knihovny nutné pro běh vývojových nástrojů.
Ukázkové applety a aplikace (Demo
Applets and Applications) v demo
.
Příklady zahrnují i zdrojový kód.
Hlavičkové soubory pro C (C header
Files) - v include
- představují
podporu pro psaní tzv. nativních metod přímo v jazyce C.
Staré hlavičkové soubory (Old Native Interface Headers) - totéž, ale pro starší verzi rozhraní.
Zdrojový kód (Source Code)
knihoven z Java Core API se nalézá v archivu
src.zip
.
Dokumentace (Documentation) -
v podadresáři docs
- obsahuje dokumentaci k
dané verzi JDK, k API, nejrůznější průvodce vývojem, dokumentaci k
nástrojům, ukázkové programy a odkazy na související
dokumentaci.
Pod Windows jsou to .exe
soubory umístěné v podadresáři bin
java
-
spouštěč (přeloženého bajtkódu)
javadoc
- generátor dokumentace API
jar
-
správce archivů JAR (sbalení, rozbalení, výpis)
jdb
-
debugger
appletviewer
- referenční prostředí pro spouštění appletů
javaws
-
referenční prostředí pro spouštění aplikací typu "Java Web Start"
prostřednictvím Java Network Launching Protocol (JNLP)
Seznámíme se se strukturou programu v Javě,
naučíme se spouštět hotové jednoduché programy ve výukovém prostředí BlueJ
a tyto programy upravovat.
Pro výuku v kurzu PB162 budeme převážně používat jednoduché, pro výuku určené, vývojové prostředí BlueJ.
BlueJ je pro všechny platformy (Win, Linux...) zdarma dostupné na http://bluej.org.
BlueJ je lokalizované pro češtinu vč. základního manuálu.
Pro BlueJ existuje i jednoduchý animátor běhu programů - vizualizuje spouštění a chod programů.
Toto prostředí je již předinstalované v síti FI.
BlueJ je již v síti FI instalováno, pro vlastní potřebu jej lze zdarma stáhnout z http://bluej.org.
Doporučujeme aktuální verzi - v současnosti BlueJ 2.1.3.
Předtím je třeba mít korektně nainstalováno samotné vývojové prostředí Java.
Po stažení příslušného instalačního balíčku postupujte v závislosti na platformě:
poklepat (double-click) na staženém programu
bluejsetup-
(např. verze
.exebluejsetup-213.exe
)
následovat pokyny instalačního programu
instalační program přitom nechá vybrat z předem instalovaných běhových prostředí Javy
na konzole (v prostředí shellu) se přepněte (pomocí
cd) do adresáře se staženým balíčkem, např.
bluej-213.jar
spusťte instalaci příkazem java -jar bluej-213.jar
při instalaci vyberte vhodný cílový adresář a zvolte z předem instalovaných běhových prostředí Javy
najdete v menu Start systému Windows složku BlueJ a zde spouštěcí odkaz BlueJ s ikonou ptáka
v adresáři, kam se BlueJ nainstalovalo, najdete spustitelný
soubor bluej
- tím lze prostředí
spustit.
Chcete-li, aby nabídky (menu) a hlášky BlueJ byly v češtině, postupuje podle pokynů v Konfigurační doplněk pro prostředí BlueJ (autor Rudolf Pecinovský).
Každý javový program vytvořený v BlueJ představuje jeden projekt. Toto je specificky vlastnost BlueJ, ne Javy jako takové.
Práce s hotovým programem v BlueJ tedy znamená otevřít projekt -> menu Projekt/Otevřít projekt.
Každý běžný javový program spouštíme (nejen v BlueJ) aktivací metody main.
V BlueJ to znamená kliknout pravým tlačítkem myši na ikoně příslušné třídy a vybrat void main(String[] args).
Při spuštění uvádíme parametry, které metoda main dostane. Jelikož zatím žádné specifikovat nepotřebujeme, ponecháme dialog, jak je a stiskneme Enter (klikneme OK).
Výsledek spuštění programu se projeví v tzv. okně terminálu (konzole) BlueJ a vypadá takto:
Objektový přístup znamená především to, že program za běhu vytváří objekty a volá jejich metody. To lze v BlueJ snadno realizovat.
V demostračním programu Hello máme jednu třídu (Hello), od níž lze vytvořit objekt (instanci) a na ní volat metody.
Zdrojový kód třídy Hello (dostupný poklepáním na její ikonu) prozradí, které metody zde máme k dispozici.
Dále postupujeme:
Pravým tlačítkem klikneme na ikonu Hello a vybereme new Hello().
do dialogu uvedeme název odkazu na vytvářený objekt typu Hello - můžeme ponechat hello1.
Vytvořený objekt (instance třídy Hello) je k dispozici jako červená krabička vlevo dole.
Vytvořený objekt (instance hello1 třídy Hello) je k dispozici jako červená krabička vlevo dole.
S instancí je nyní možné komunikovat/interagovat - tj. volat metody.
Jelikož v úvahu (viz zdrojový kód Hello) připadá jen metoda void go(), zavoláme právě ji:
Metoda proběhne s výsledkem podobným, jako když jsme program spouštěli metodou main.
Metoda main totiž realizovala postupně stejné kroky, jako jsme teď provedli interaktivně (krok po kroku) sami.
Nejjednodušší úpravou programu je změna těla některé z metod, v našem případě již známé metody go().
Editor zdrojového kódu třídy Hello aktivujeme pravým tlačítkem - položkou Otevřít v editoru.
Kód metody go() změníme přepsáním hlášky "Hello, world" na "Ahoj!".
Po kliknutí na tlačítko Přeložit by se mělo objevit:
Třídu Hello s upravenou metodou spustíme jako v předchozím - např. pravým tlačítkem a metodou main.
Objeví se:
Cílem je porozumět obecné struktuře javového programu
a být schopni vytvořit a spustit jej i mimo prostředí BlueJ.
Program sestává z jedné (ale obvykle více) tříd (class). Ukážeme na příkladu třídy s názvem NazevTridy:
Zdrojový kód každé (veřejně přístupné) třídy je
umístěn v jednom souboru
(NazevTridy.java
)
Postup:
vytvoření zdrojového textu (libovolným editorem čistého
textu) ->
NazevTridy.java
překlad (nástrojem javac
) NazevTridy.java
-> NazevTridy.class
spuštění, např. java
NazevTridy
překládá se javac NazevTridy.java
(název souboru se třídou včetně přípony
.java
!!!)
spouští se vždy udáním java
NazevTridy
(název třídy bez přípony
.class
!!!)
Půjde o podobný jednoduchý demoprogram, jaký jsme spouštěli v BlueJ pod názvem Hello.
Navíc se zde objeví použití balíků -
třída bude umístěna do balíku
tomp.ucebnice
.
Zdrojový kód bude vypadat takto:
package tomp.ucebnice;
public class Pozdrav {
// Program spouštíme aktivací funkce "main"
public static void main(String[] args) {
System.out.println("Ahoj!");
}
}
Pozn: Jelikož třída Pozdrav
je umístěna do
balíku
, její
zdrojový soubor musí být uložen v podadresáři
tomp.ucebnice
tomp\ucebnice
.
Máme nainstalován J2SDK 5.0
Jsme v adresáři c:\devel\pb162
, v něm je
podadresář tomp\ucebnice
, v něm je soubor
Pozdrav.java
Spustíme překlad javac
tomp\ucebnice\Pozdrav.java
Je-li program správně napsán, přeloží se "mlčky"
(výsledný .class
soubor bude v témže
adresáři jako zdroj)
Poté spustíme program Pozdrav:
java -classpath . tomp.ucebnice.Pozdrav
Volba překladače -classpath
zajistí, že (dříve
přeložené) třídy používané při spuštění této třídy budou přístupné
pod adresářem
adresář
adresář
.
-classpath .
tedy značí, že třídy (soubory
.class
) se budou hledat v odpovídajících
podadresářích aktuálního adresáře (adresáře
.
)
Je-li program správně napsán a přeložen, vypíše se
Ahoj!
Vytvoření a editace zdrojového kódu v editoru PSPad (dostupný zdarma, instalovaný na všech Win strojích v učebnách na FI)
= spuštění metody main jedné ze tříd tvořících program
Tato funkce může mít parametry:
podobně jako např. v Pascalu nebo v C
jsou typu String
(řetězec)
předávají se při spuštění z příkazového řádku do pole
String[] args
Metoda main
nevrací žádnou
hodnotu - návratový typ je vždy(!) void
Její hlavička musí vypadat vždy přesně tak, jako ve výše uvedeném příkladu, jinak nebude spuštěna!
Cesty ke spustitelným programům
(PATH)
musejí obsahovat i adresář
JAVA_HOME\bin
Systémové proměnné by měly obsahovat:
JAVA_HOME=kořenový adresář instalace
Javy, např. JAVA_HOME=c:\jdk5.0
CLASSPATH=cesty ke třídám
(podobně jako v
PATH
jsou cesty ke spustitelným souborům),
např. CLASSPATH=c:\devel\pb162
Odkazy na zdroje (učebnice) http://www.fi.muni.cz/~tomp/java/ucebnice/resources.html
Další tutoriály: http://www.mike-levin.com/learning-java/toc.html