Programování v Javě I. Leden 2008



Podobné dokumenty
Programování v Javě I. Únor 2009

Seminář Java II p.1/43

Teoretické minimum z PJV

7. Datové typy v Javě

Úvod do programovacích jazyků (Java)

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

Principy objektově orientovaného programování

typová konverze typová inference

8 Třídy, objekty, metody, předávání argumentů metod

PREPROCESOR POKRAČOVÁNÍ

Algoritmizace a programování

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

Počítačové laboratoře bez tajemství aneb naučme se učit algoritmizaci a programování s využitím robotů CZ.1.07/1.3.12/

Abstraktní datové typy: zásobník

20. Projekt Domácí mediotéka

1. Programování proti rozhraní

Java Výjimky Java, zimní semestr

RMI Remote Method Invocation

Výčtový typ strana 67

Obsah přednášky 7. Základy programování (IZAPR) Přednáška 7. Parametry metod. Parametry, argumenty. Parametry metod.

Úvod do programování - Java. Cvičení č.4

Úvod do programovacích jazyků (Java)

Typický prvek kolekce pro české řazení

Paměť počítače. alg2 1

"Václav Klaus". public class Clovek { protected String jmeno; protected int roknarozeni; public Clovek(String j, int rn) {

Algoritmizace a programování. Terminálový vstup a výstup

Střední škola pedagogická, hotelnictví a služeb, Litoměříce, příspěvková organizace

OOPR_05. Případové studie

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

Seminář Java IV p.1/38

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

Proměnná. Datový typ. IAJCE Cvičení č. 3. Pojmenované místo v paměti sloužící pro uložení hodnoty.

Definice třídy. úplná definice. public veřejná třída abstract nesmí být vytvářeny instance final nelze vytvářet potomky

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

3 Vývojová prostředí, základní prvky jazyka Java, konvence jazyka Java

KTE / ZPE Informační technologie

Datové typy v Javě. Tomáš Pitner, upravil Marek Šabo

Datové struktury. alg12 1

Algoritmizace a programování

Statické proměnné a metody. Tomáš Pitner, upravil Marek Šabo

Class loader. každá třída (java.lang.class) obsahuje referenci na svůj class loader. Implementace class loaderu

Soubor jako posloupnost bytů

Definice třídy. úplná definice. public veřejná třída abstract nesmí být vytvářeny instance final nelze vytvářet potomky

Java Cvičení 01. CHARLES UNIVERSITY IN PRAGUE faculty of mathematics and physics

ADT/ADS = abstraktní datové typy / struktury

Programovací jazyk Java

6. PRÁCE S DATOVÝMI PROUDY

URČITÝM ZPŮSOBEM PODOBNÉ

Viditelnost (práva přístupu) Tomáš Pitner, upravil Marek Šabo

Objektově orientované programování

7. přednáška - třídy, objekty třídy objekty atributy tříd metody tříd

Java a XML. 10/26/09 1/7 Java a XML

Abstraktní třída a rozhraní

KTE / ZPE Informační technologie

Úvodní informace. Petr Hnětynka 2/2 Zk/Z

11. Dědičnost. Dědičnost strana 103

public static void main(string[] args) { System.out.println(new Main().getClass().getAnnotation(Greet.class).text());

NPRG031 Programování II 1 / :47:55

1. Téma 12 - Textové soubory a výjimky

KTE / ZPE Informační technologie

4. ZÁKLADNÍ POJMY Z OBJEKTOVĚ ORIENTOVANÉHO PROGRAMOVÁNÍ

7 Formátovaný výstup, třídy, objekty, pole, chyby v programech

Java - výjimky. private void vstup() throws IOException {... }

7. Statické prvky třídy

Úvodní informace. Petr Hnětynka 2/2 Zk/Z

NMIN201 Objektově orientované programování 2016/17 1 / :03:29

5 Rekurze a zásobník. Rekurzivní volání metody

Iterator & for cyklus

NPRG031 Programování II --- 2/2 Z, Zk

Proměnné a datové typy

Úvod do programování v jazyce Java

Reflexe RTTI Runtime Type Identification

Semin aˇr Java V yjimky Radek Ko ˇc ı Fakulta informaˇcn ıch technologi ı VUT Unor 2008 Radek Koˇc ı Semin aˇr Java V yjimky 1/ 25

3. Třídy. Základní pojmy objektového programování. Třídy

Pokud zadání nerozumíte nebo se vám zdá nejednoznačné, zeptejte se. Pište čitelně, nečitelná řešení nebudeme uznávat.

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

Definice třídy. úplná definice. public veřejná třída abstract nesmí být vytvářeny instance final nelze vytvářet potomky

public class Karel { private int position; public boolean issmiling; public int getposition() { return position;

Pokud zadání nerozumíte nebo se vám zdá nejednoznačné, zeptejte se. Pište čitelně, nečitelná řešení nebudeme uznávat.

Úvod do programovacích jazyků (Java)

OMO. 4 - Creational design patterns A. Singleton Simple Factory Factory Method Abstract Factory Prototype Builder IoC

ANT. Aplikační programování v Javě (BI-APJ) - 1 Ing. Jiří Daněček Katedra softwarového inženýrství Fakulta informačních technologií ČVUT Praha

Jazyk C# (seminář 3)

Jazyk C# (seminář 6)

Vytváření a použití knihoven tříd

Příklad : String txt1 = new String( Ahoj vsichni! ); //vytvoří instanci třídy String a přiřadí ji vnitřní hodnotu Ahoj vsichni!

SOUBORY, VSTUPY A VÝSTUPY POKRAČOVÁNÍ

Textové soubory. alg9 1

int t1, t2, t3, t4, t5, t6, t7, prumer; t1=sys.readint();... t7=sys.readint(); prume pru r = r = ( 1+t 1+t t3+ t3+ t4 t5+ t5+ +t7 +t7 )/ ;

Java Řetězce Java, zimní semestr

Správa paměti. Karel Richta a kol. Katedra počítačů Fakulta elektrotechnická České vysoké učení technické v Praze Karel Richta, 2016

Přehled probírané látky

Algoritmizace a programování

Objektově orientované programování 1 XOBO1. Autor: Doc. Ing. František Huňka, CSc.

Obsah přednášky 9. Skrývání informací. Skrývání informací. Zapouzdření. Skrývání informací. Základy programování (IZAPR, IZKPR) Přednáška 9

Regulární výrazy. Vzory

Tabulka symbolů. Vazba (binding) Vazba - příklad. Deklarace a definice. Miroslav Beneš Dušan Kolář

1. ÚVOD ZÁKLADY JAZYKA...

Transkript:

Seminář Java Programování v Javě I Radek Kočí Fakulta informačních technologií VUT Leden 2008 Radek Kočí Seminář Java Programování v Javě (1) 1/ 45

Téma přednášky Datové typy Deklarace třídy Modifikátory přístupu Struktura aplikace v Javě Radek Kočí Seminář Java Programování v Javě (1) 2/ 45

Datové typy Java striktně rozlišuje mezi hodnotami primitivních datových typů čísla logické hodnoty znaky objektových typů řetězce uživatelem definované typy třídy a rozhraní Základní rozdíl je v práci s proměnnými: proměnné primitivních datových typů přímo obsahují danou hodnotu proměnné objektových typů obsahují pouze odkaz na příslušný objekt Radek Kočí Seminář Java Programování v Javě (1) 3/ 45

Primitivní datové typy Charakteristika Proměnné těchto typů nesou atomické, dále nestrukturované hodnoty Deklarace způsobí rezervování příslušného pamět ového prostoru zpřístupnění (pojmenování) tohoto prostoru identifikátorem proměnné Radek Kočí Seminář Java Programování v Javě (1) 4/ 45

Primitivní datové typy Typ boolean logická hodnota, přípustné hodnoty jsou false a true na rozdíl od Pascalu na nich není definováno uspořádání Typ void není v pravém slova smyslu datovým typem, nemá žádné hodnoty označuje "prázdný" typ pro sdělení, že určitá metoda nevrací žádný výsledek Radek Kočí Seminář Java Programování v Javě (1) 5/ 45

Primitivní datové typy Čísla s pohyblivou řádovou čárkou float 32 bitů double 64 bitů zápis literálů float f = -.777f, g = 0.123f, h = -4e6f, i = 1.2E-15f; double f = -.777, g = 0.123, h = -4e6, i = 1.2E-15; Radek Kočí Seminář Java Programování v Javě (1) 6/ 45

Primitivní datové typy Integrální typy celočíselné v Javě jsou celá čísla vždy interpretována jako znaménková int 32 bitů ( 2 147 483 648.. 2 147 483 647) základní celočíselný typ long 64 bitů (cca +/ 9 10 18 ) short 16 bitů ( 32768.. 32767) byte 8 bitů ( 128.. 127) Radek Kočí Seminář Java Programování v Javě (1) 7/ 45

Primitivní datové typy Integrální typy char char představuje jeden 16bitový znak v kódování UNICODE konstanty typu char zapisujeme v apostrofech: a, ř pomocí escape-sekvencí: \n (konec řádku) \t (tabulátor) hexadecimálně: \u0040 (totéž, co a ) oktalově: \127 Pozor na kódové stránky při překladu/spouštění dochází k překódování textu! (komentář, znak, řetězec, identifikátor) javac -encoding ISO8859-2... Radek Kočí Seminář Java Programování v Javě (1) 8/ 45

Proměnné objektového typu Charakteristika Proměnné těchto typů reprezentují reference na objekty Deklarace způsobí rezervování pamět ového prostoru pro referenci! vlastní objekt (instance třídy) nevzniká! Vytvoření instance operátor new rezervuje pamět ový prostor pro objekt (instanci dané třídy) Radek Kočí Seminář Java Programování v Javě (1) 9/ 45

Proměnné objektového typu public class Banka { public static void main(string[] args) { Ucet ucet = new Ucet(); Ucet jinyucet = new Ucet(); Ucet uplnejinyucet = ucet; <ref> ucet <ref> uplnejinyucet <ref> jinyucet <objekt>:ucet <objekt>:ucet Radek Kočí Seminář Java Programování v Javě (1) 10/ 45

Deklarace třídy Příklad Chceme modelovat následující skutečnost máme dopravce vlastnící dopravní prostředky dopravce má zaměstnance, kteří mohou řídit dopravní prostředky každý prostředek může být řízen některým ze zaměstnanců Radek Kočí Seminář Java Programování v Javě (1) 11/ 45

Deklarace třídy Příklad public class Car { protected Driver drivenby; public void DrivenBy(Driver d) { drivenby = d; public class Driver { protected String name; protected Car drivecar; public void drivecar(car c) { drivecar = c; drivecar.drivenby(this); Radek Kočí Seminář Java Programování v Javě (1) 12/ 45

Deklarace třídy modifikátory class názevtřídy [extends, implements] { tělo třídy // deklarace proměnných objektu // deklarace metod Modifikátory public private protected žádný Radek Kočí Seminář Java Programování v Javě (1) 13/ 45

Deklarace proměnné objektu Deklarace proměnné objektu má tvar: modifikátory Typ jméno; např.: protected int capacity; Jmenné konvence jména začínají malým písmenem nepoužíváme diakritiku (problémy s editory, přenositelností a kódováním znaků) (raději ani český jazyk, angličtině rozumí "každý") je-li to složenina více slov, pak je nespojujeme podtržítkem, ale další začne velkým písmenem Radek Kočí Seminář Java Programování v Javě (1) 14/ 45

Základní pojmy Atributy objektu Atribut vs. proměnná objektu reprezentují data zapouzdřená v objektu Proměnná objektu implementační pohled získání/nastavení atributu lze (teoreticky) přímo (nedoporučuje se) Atribut objektu pohled z vyšší úrovně atribut je vlastnost objektu atribut není proměnná (i když je tak většinou realizován) atribut datum (dd/mm/rr) počet sekund od LP 1970 atribut objem součin tří hodnot získání/nastavení atributu operace Radek Kočí Seminář Java Programování v Javě (1) 15/ 45

Deklarace proměnné objektu Inicializace proměnné objektu (primitivní datový typ) int capacity; capacity == 0 Inicializace proměnné objektu (objektový typ) Driver drivenby; drivenby == null Radek Kočí Seminář Java Programování v Javě (1) 16/ 45

Deklarace metody modifikátory typ název ( seznamformpar ) { tělo (výkonný kód) metody seznamformparam = typ názevformparametru,... Např.: public void run(string name, Car car) { collection.getdriver(name).drivecar(car); Radek Kočí Seminář Java Programování v Javě (1) 17/ 45

Deklarace proměnné v metodě Deklarace proměnné v metodě deklarace bez modifikátorů nemá implicitní inicializaci public void run(string name, Car car) { Driver d = collection.getdriver(name); d.drivecar(car); Radek Kočí Seminář Java Programování v Javě (1) 18/ 45

Předávání parametrů metodám Hodnoty primitivních typů se předávají hodnotou, tj. hodnota se nakopíruje do lokální proměnné metody Hodnoty objektových typů se předávají odkazem, tj. do lokální proměnné metody se nakopíruje odkaz na objekt skutečný parametr Pozn: ve skutečnosti se tedy parametry vždy předávají hodnotou, protože se bud předává kopie hodnoty primitivního typu, nebo kopie hodnoty odkazu (reference) na objekt. Radek Kočí Seminář Java Programování v Javě (1) 19/ 45

Volání metod Nad existujícími (vytvořenými) objekty můžeme volat jejich metody samotnou deklarací (napsáním kódu) metody se žádný kód neprovede chceme-li vykonat kód metody, musíme ji zavolat. volání se realizuje "tečkovou notací" volání lze provést, jen je-li metoda z místa volání přístupná přístupnost regulují modifikátory přístupu Radek Kočí Seminář Java Programování v Javě (1) 20/ 45

Volání metod... Car car = new Car(); Driver driver = new Driver(); driver.drivecar(car);... Radek Kočí Seminář Java Programování v Javě (1) 21/ 45

Návrat z metody Kód metody skončí jakmile dokončí poslední příkaz v těle metody nebo dospěje k příkazu return Metoda může při návratu vrátit hodnotu (chovat se jako funkce) vrácenou hodnotu musíme uvést za příkazem return typ vrácené hodnoty musíme v hlavičce metody deklarovat nevrací-li metoda nic, pak musíme namísto typu vracené hodnoty psát void (v tomto případě se return nemusí uvádět) Ukončení metody způsobí předání řízení zpět volající metodě + předání případné hodnoty Radek Kočí Seminář Java Programování v Javě (1) 22/ 45

Modifikátory přístupu Přístup ke třídám i jejim prvkům lze (podobně jako např. v C++) regulovat: přístupem se rozumí jakékoli použití dané třídy, prvku,... omezení přístupu je kontrolováno hned při překladu takto lze regulovat přístup staticky, mezi celými třídami, nikoli pro jednotlivé objekty Granularita omezení přístupu přístup je v Javě regulován jednotlivě po prvcích omezení přístupu je určeno uvedením jednoho z modifikátoru přístupu (access modifier) nebo neuvedením žádného Radek Kočí Seminář Java Programování v Javě (1) 23/ 45

Modifikátory přístupu Typy omezení přístupu public = veřejný protected = chráněný private = soukromý modifikátor neuveden = říká se lokální v balíku nebo chráněný v balíku nebo "přátelský" Pro třídy: veřejné (public) přístup k třídě není omezen neveřejné (lokální v balíku) k třídě může přistupovat libovolná třída ze stejného balíku Radek Kočí Seminář Java Programování v Javě (1) 24/ 45

Modifikátory přístupu Pro vlastnosti tříd (proměnné/metody): veřejné (public) chráněné (protected) přístupné jen ze tříd stejného balíku a z podtříd (i když jsou v jiném balíku) neveřejné (lokální v balíku) přístupné jen ze tříd stejného balíku, už ale ne z podtříd umístěných v jiném balíku (nedoporučuje se) soukromé (private) přístupné jen v rámci třídy používá se častěji pro proměnné než metody zneviditelníme i případným podtřídám Radek Kočí Seminář Java Programování v Javě (1) 25/ 45

Speciální modifikátor final Deklaruje konečný (neměnný) stav Třídy public final class Ucet {... od této třídy nelze "dědit" (vytvářet její potomky) Metody public final void print() {... tato metoda nemůže být "překryta" (overloaded) v odvozených třídách (potomci) Proměnné protected final int i = 10; protected final String s = "řetězec"; protected final Banka b = new Banka(); obsah proměnné je neměnný konstanta Radek Kočí Seminář Java Programování v Javě (1) 26/ 45

Příklad public class Car { protected int weight; protected int capacity; protected Driver drivenby; public void drivenby(driver d) { drivenby = d; public int getweight() { return weight; public int getcapacity() { return capacity; Radek Kočí Seminář Java Programování v Javě (1) 27/ 45

Proměnné a metody třídy statické Dosud jsme zmiňovali proměnné a metody (tj. souhrnně prvky members) objektu. Lze deklarovat také metody a proměnné patřící celé třídě, tj. skupině všech objektů daného typu. Takové metody a proměnné nazýváme statické a označujeme v deklaraci modifikátorem static Radek Kočí Seminář Java Programování v Javě (1) 28/ 45

Příklad počítání účtů public class Ucet { protected Klient majitel; protected double zustatek = 0; protected static int pocet = 0; public Ucet(Klient k) { majitel = k; pocet++; public static int pocetuctu() { return pocet; Radek Kočí Seminář Java Programování v Javě (1) 29/ 45

Příklad public final class System { public static final PrintStream out; public static final InputStream in;... public static long currenttimemillis();... public static void main(string[] argv) {... Radek Kočí Seminář Java Programování v Javě (1) 30/ 45

Základní životní cyklus programu v Javě Programování v Javě spočívá ve vytváření tříd, neexistují metody a atributy deklarované mimo třídy. Radek Kočí Seminář Java Programování v Javě (1) 31/ 45

Základní životní cyklus programu v Javě aplikace sestává z alespoň jedné třídy zdrojový kód každé veřejně přístupné třídy je umístěn ve zváštním souboru NazevTridy.java (povinná přípona!) každá přeložená třída má svůj soubor s bytecode NazevTridy.class (povinná přípona!) třídy jsou organizovány do balíků (packages) u běžné "desktopové" aplikace představuje vstupní bod do programu třída obsahující metodu main Java je case sensitive! (ucet x Ucet) API: http://java.sun.com/reference/api/index.html Radek Kočí Seminář Java Programování v Javě (1) 32/ 45

Základní životní cyklus programu v Javě Ukázka aplikace třída Pozdrav je umístěná v souboru Pozdrav.java je umístěna v balíku ija1 package ija1; public class Pozdrav { // Program spouštíme aktivací funkce "main" public static void main(string[] args) { System.out.println("Ahoj!"); Radek Kočí Seminář Java Programování v Javě (1) 33/ 45

Základní životní cyklus programu v Javě Vytvoření zdrojového textu libovolný editor Pokus.java Překlad javac Pokus.java název souboru se udává včetně přípony.java vznikne soubor Pokus.class Spuštění java Pokus udává se název třídy (tj. bez přípony.class) Radek Kočí Seminář Java Programování v Javě (1) 34/ 45

Co znamená spustit program? Spuštění javového programu odpovídá spuštění metody main jedné ze tříd tvořících program Aplikace může mít parametry: podobně jako např. v jazyku C jsou typu String (řetězec) předávají se při spuštění z příkazového řádku do pole String[] args (argument metody main) Metoda public static void main(string[] args) 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! Radek Kočí Seminář Java Programování v Javě (1) 35/ 45

Návrat z metody Kód metody skončí jakmile dokončí poslední příkaz v těle metody nebo dospěje k příkazu return Ukončení metody main způsobí předání řízení systému (JVM) Radek Kočí Seminář Java Programování v Javě (1) 36/ 45

Organizace tříd do balíků třídy jsou členěny do balíků (package) balíky vytvářejí stromovou strukturu organizaci balíků odpovídá organizace adresářů a umístění zdrojového souboru do příslušného adresáře může existovat více stromů Třída je plně kvalifikovaná svým názvem a balíkem! ija1.pozdrav Radek Kočí Seminář Java Programování v Javě (1) 37/ 45

Organizace tříd do balíků package ija1; $HOME -- IJA -- ija1 -- Pozdrav.java -- Pozdrav.class Překlad 1 jsme v adresáři $HOME/IJA 2 spustíme překlad javac ija1/pozdrav.java Radek Kočí Seminář Java Programování v Javě (1) 38/ 45

Organizace tříd do balíků package ija1; $HOME -- IJA -- ija1 -- Pozdrav.java -- Pozdrav.class Překlad 1 jsme v adresáři $HOME/IJA 2 spustíme překlad javac ija1/pozdrav.java Radek Kočí Seminář Java Programování v Javě (1) 38/ 45

Organizace tříd do balíků $HOME -- java -- distribution -- project -- ija1 -- ija2 -- docs -- sun -- distribution -- examples -- ija3 -- docs Kořenový adresář: $HOME/java/project $HOME/sun/examples Radek Kočí Seminář Java Programování v Javě (1) 39/ 45

Organizace tříd do balíků Nastavení cest pro balíky balíky (kořeny stromů) mohou být umístěny v různých adresářích je možné nastavit cesty do těchto adresářů v těchto adresářích se pak hledají balíky a třídy (.class) Systémová proměnná CLASSPATH export CLASSPATH="$CLASSPATH:$HOME/java/project:..." Parametr -classpath javac -classpath "$HOME/java/project:..."... java -classpath "$HOME/java/project:..."... Radek Kočí Seminář Java Programování v Javě (1) 40/ 45

Ukázka aplikace Třída Pozdrav je umístěna v balíku ija1. Soubor Pozdrav.java: package ija1; public class Pozdrav {... $HOME -- IJA -- ija1 -- Pozdrav.java Překlad: javac -classpath "$HOME/IJA" $HOME/IJA/ija1/Pozdrav.java Spuštění: java -classpath "$HOME/IJA" ija1.pozdrav Radek Kočí Seminář Java Programování v Javě (1) 41/ 45

Ukázka deklarace třídy package ija1.cars; public class Car { protected int weight; protected int capacity; protected Driver drivenby; public void drivenby(driver d) { drivenby = d; public int getcapacity() { return capacity; ija1.cars.car car = new ija1.cars.car(); Radek Kočí Seminář Java Programování v Javě (1) 42/ 45

Přístup k třídám z jiných balíků tečková notace ija1.cars.car zdlouhavé, kompikované import tříd package homework1; public class Homework { ija1.cars.car c; c = new ija1.cars.car();... Radek Kočí Seminář Java Programování v Javě (1) 43/ 45

Import tříd z balíků klauzule import package.třída klauzule import package.* * nezpřístupní třídy z podbalíků!! package homework1; import ija1.cars.car; //import ija1.cars.*; public class Homework { Car c; c = new Car();... Radek Kočí Seminář Java Programování v Javě (1) 44/ 45

Import tříd z balíků balík java.lang je vždy importován automaticky třída java.lang.system Radek Kočí Seminář Java Programování v Javě (1) 45/ 45