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

Rozměr: px
Začít zobrazení ze stránky:

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

Transkript

1 Generiky Aplikační programování v Javě (BI-APJ) - 10 Ing. Jiří Daněček Katedra softwarového inženýrství Fakulta informačních technologií ČVUT Praha Evropský sociální fond Praha & EU: Investujeme do vaší budoucnosti

2 Generiky Generické (tj. parametrizovatelné) konstrukce (zkráceně generiky) umožňují některé části programu, který se liší pouze typem, zapsat v programu pouze jednou a opakovaně je použít ("volat"). Generiky lze volat s různými, ale pouze referenčními typy (Pozn.: C++ umí generiky i s primitivními typy). Hrubou analogií generik jsou tedy metody, které lze také volat opakovaně s různými parametry. Avšak zatímco metody se volají při běhu programu, generiky se volají při kompilaci! Generické mohou být: třídy, rozhraní, konstruktory, metody.

3 Příklad: kontrolovaná reference public class Box { private Object ref; public Box(Object ref) { this.ref = ref; public Object getref() throws MyNullRefException { if (ref == null) { throw new MyNullRefException(); return ref; public static void main(string[] args) { try { Box sp = new Box("Ahoj"); // při přístupu vyžaduje přetypování: String s = (String) sp.getref(); catch (MyNullRefException ex) {...

4 Řešení s pomocí generické třídy public class Box<T> { private T ref; public Box(T ref) { this.ref = ref; public T getref() throws MyNullRefException { if (ref == null) { throw new MyNullRefException(); return ref; public static void main(string[] args) { try { // parametrizování ("vyvolání") generické třídy // pro typ String: Box<String> stringbox = new Box<String>("Ahoj"); String s = stringbox.getref(); catch (MyNullRefException ex) {...

5 Opakování Typ je entita, která existuje v době překladu (udržuje si ji kompilátor). V Javě je o každém proměnné a každém výrazu znám typ v době překladu. Typ definuje množinu hodnot, které mohou být uloženy v proměnných a význam operací, které se provádějí s operandy výrazů. Typy jsou primitivní a referenční. Referenční typy jsou: typ třída (může být parametrizovaný), typ interface (může být parametrizovaný), typ pole.

6 Referenční typy ReferenceType: ClassOrInterfaceType TypeVariable ArrayType ClassOrInterfaceType: ClassType InterfaceType ClassType: TypeDeclSpecifier TypeArguments opt InterfaceType: TypeDeclSpecifier TypeArguments opt

7 Typové proměnné Identifikátor v parametrové části deklarace generické třídy nebo rozhraní definuje tzv. typovou proměnnou: class Box<T> {... Typová proměnná je podle definice referenční typ: 1. je možno deklarovat proměnné resp. parametry typu T: T ref; 2. lze ji použít jako argument v jiném parametrickém typu: List<T> 3. je možno ji použít v přetypování (avšak s unchecked warning): (T)x 4. nelze ji použít pro vytváření objektů: new T() // error new T[10]; // error 5. Nelze ji použít v operátoru instanceof: obj instanceof T // error

8 Typové parametry (1/2) Za deklarací typové proměnné může nepovinně následovat tzv. omezení (bounds) : class Box<T extends Numeric> { Omezení je tvořeno jedním nebo více referenčními typy. V případě více typů má formát: extends B 1 & B 2 &... B n Pozn.: První prvek omezení (B1) může být libovolný refereční typ, ostatní pouze typy rozhraní Omezení omezuje možné refereční typy dosazené za typovou proměnnou a je tedy analogií typu u "normálních" proměnných. Typová proměnná spolu s omezením se nazývá typový (formální) parametr. Pokud omezení není uvedeno předpokládá se implicitně Object.

9 Typové parametry (2/2) TypeParameter: TypeVariable TypeBound opt TypeBound: extends ClassOrInterfaceType AdditionalBoundList opt AdditionalBoundList: AdditionalBound AdditionalBoundList AdditionalBound AdditionalBound: & InterfaceType

10 Průnikový typ Průnikový (intersection) typ se zapisuje ve formě T 1 &... & T n, n>0, kde T i je typový výraz. Průnikové typy nelze zapsat přímo (nemají syntaxi), ale vznikají v procesu typové inference a při zpracování chytací konverze. Pokud jsou některé z typů T i třídní, pak jeden z nich musí být podtypem všech ostatních: String & Number - chybný průnikový typ Členy průnikového typu jsou všechny členy typů T i. Členy typové proměnné jsou členy průnikového typu tvořeného jednotlivými omezeními.

11 Příklad typového parametru public class NumberBox<T extends Number> {... public static void main(string[] args) { try { NumberBox<Integer> sri = new NumberBox<Integer>(33); NumberBox<String> srs = new NumberBox<String>("33"); // error: type argument String is not within its bound Integer i = sp.getref(); catch (MyNullRefException ex) {...

12 Parametrizované typy Generická konstrukce (třída, rozhraní, konstruktor, metoda) uvedená s typovými argumenty (skutečnými parametry) se nazývá volání generické konstrukce - analogie volání metody. Speciálně pro třídy a rozhraní vzniká voláním nový referenční typ, který se nazývá parametrizovaný. Parametrizovaný typ je možno použít (s některými výjimkami) tam, kde obyčejný referenční typ. Hlavní použití je v deklaraci proměnných a parametrů a při vytváření objektů: Box<List<String>> box = new Box<List<String>>(new ArrayList<String>());

13 Členy parametrizovaných typů Jesliže C<F,..> je deklarace třídy nebo rozhraní s typovým parametrem F,..., a C<T,...> je parametrizovaný typ, kde T není supertyp. Potom: Jestliže m je člen nebo konstruktor v C, jehož typ je S. Potom typ m v parametrizovan0m typu C<T,..., je S[F := T,..]. Jestliže m je člen nebo konstruktor v D, kde D je třída rozšířená C nebo rozhraní implementované C. Jestliže D<U1,...,Uk> je supertype of C<T,...> který koresponduje s D. Potom typ m v C<T,...> je typ m v D<U,...> Jestliže parametrizovaný typ má jako typový argument supertyp, jsou jeho členy nedefinované. Členy jsou přístupné až po provedení chytací konverze.

14 Mechanizmus vyčištění Všechny objekty parametrizovaných typů, které vznikly "voláním" stejné generiky, jsou stejné tzv. runtimové třídy. Tvar této třídy je dán mechanismem vyčištění (erasure): třída se jmenuje stejně jako původní generická třída nemá žádné typové parametry, její nadtřída a nadrozhraní jsou vyčištěné, v jejím těle jsou použité typové proměnné nahrazeny svými nejlevějšími omezeními, generické metody a konstruktory jsou vyčištěny. Při běhu programu je generická třída reprezentována (implemetována) tzv. runtimovou třídou, která je dána vyčištěním generické třídy.

15 Důsledky mechanizmu vyčištění Všechny objekty parametrizovaných typů, které vznikly voláním stejné generiky, jsou stejné tzv. runtimeové třídy. Při výpočtu nelze zjistit od kterého parametrizovaného typu byl objekt vytvořen: Box<String> stringbox = new Box<String>("Ahoj"); Box<Integer> intbox = new Box<Integer>(33); System.out.println(stringBox.getClass() == intbox.getclass()); // vrátí true boolean jetypu = stringbox instanceof Box<String>; // illegal generic type for instanceof

16 Důsledky zavedení generik Je potřeba rozlišovat mezi referenčním typem, deklarací třídy a runtimovou třídou (v Java 1.4 byly tyto pojmy zaměnitelné). Deklarace generická třídy generuje množinu referenčních typů. Nadtřída (resp. nadrozhraní) v deklaraci třídy je referenční typ (nikoliv třída resp. rozhraní). Nadtřída (resp. nadrozhraní) runtimové třídy je runtimová třída. Výrazy jsou referenčních typů zatímco objekty jsou rutimových tříd. Je potřeba definovat vlastnosti nových referenčních typů: 1. parametrizovaných typů, 2. typových proměnných. Pro nové referenční typy je potřeba definovat: jaké mají členy, jaká je jejich kompatibilita (tj. relace nadtypu).

17 Členy parametrizovaných typů Pro každý parametrizovaný typ je vytvořena fiktivní parametrizovaná třída, jejíž složky jsou určeny složkami původní generické třídy, ve kterých je za typovou proměnnou dosazen typový argument: Box<Integer> intbox = new Box<Integer>(10); int i = sri.getref().intvalue(); Proměnná intbox (která je parametrizovaného typu) obsahuje referenci na objekt (fiktivní) parametrizované třídy. Tato třída pak obsahuje: metodu: Integer getref() {... proměnnou: Integer ref; konstruktor: Box(Integer ref) {...

18 Další vlastnosti typových proměnných Je označena identifikátorem, který platí v celé oblasti třídy (resp. metody nebo konstruktoru) včetně deklarační části. Existuje analogie mezi typovou proměnnou a "normální" proměnnou s těmito odchylkami: Typová proměnná je v podstatě proměnná kompilátoru, která neexistuje v době výpočtu, ale pouze v době překladu. Do typové proměnné nelze přiřazovat - hodnotu získává tzv. vyvoláním generické konstrukce (resp. chytací konverzí): Box<String> Pozn.:Typová proměnná tak svými vlastnostmi odpovídá proměnným ve funkcionálních jazycích.

19 Generická třída jako nadtřída Typová proměnná může být použita jako typový argument nadtřídy: public class VarBox<T> extends Box<T> { public VarBox() { public VarBox(T ref) { super(ref); public void setref(t ref) { this.ref = ref; public static void main(string[] args) { try { VarBox<String> stringvarbox = new VarBox<String>(); stringvarbox.setref("hello"); String s = stringvarbox.getref(); catch (MyNullRefException ex) {... Může být také použita jako typový argument omezení: class X<T extends Y<T>>

20 Omezení parametrických typů Omezující vlastnost parametrických typů: z kompatibility typových argumentů neplyne kompatibilita parametrizovaných typů (tzv. nejsou kovariantní) Příklad: Number n = new Integer(20); // ok VarBox<Number> numberbox = new VarBox<Integer>(20);// error Důvod: parametrizovaný typ VarBox<Integer> neposkytuje službu setref(number ref), takže přiřazením by se do numberbox uložila reference na objekt porušující kontrakt typu VarBox<Number>. Srovnej: Number[] an = new Integer[10]; // ok, protože pole jsou kovariantní an[0] = new Number(1) // error

21 Surové typy Standardně musí počet argumentů v parametrizovaném typu odpovídat počtu formálních parametrů generické třídy (resp. rozhraní). Výjimečně je možno argumenty vynechat - takový typ se pak nazývá surový (raw). Surové typy umožňují, aby program navržený pro Javu 1.4 byl přeložitelný v Javě 1.5 a tak byla zachována kompatibilita. Surové typy jsou oboustraně kompatibilní s parametrizovanými typy: Box rawbox = new Box<Integer>();... Box<String> stringbox = rawbox ; // unchecked warning

22 Typový parametr supertyp (wildcard) Řešení: zavedení "supertypu" označeného znakem? (wildcard) Použití supertypu jako typového argumentu dělá parametrizované typy kompatibilní: Box<?> sr = new Box<Integer>(20); // ok Supertyp si můžeme představit jako typ tvořený množinou objektů vzniklou sjednocením všech referenčních typů. O typu parametrizovaném supertypem má kompilátor pouze omezené informace: VarBox<?> varbox = new VarBox<Integer>(); Integer i = (Integer)varBox.getRef(); varbox.setref(new Integer(20)); //error: setref cannot be applied to Integer návratový typ getref je Object, typ parametru setref je nedefinovaný.

23 Použití supertypu Hlavní význam je při deklaraci parametru metody, která může pracovat s různými parametrickými typy: public static boolean containinteger (Box<?> box) { try { return box.getref() instanceof Integer;... catch (MyNullRefException ex) { return false; containinteger(new Box<Double>(3.14)) // false containinteger(new Box<Integer>(10)) // true Příklad z třídy java.util.collections: public static int indexofsublist (List<?> source, List<?> target)

24 Omezený supertyp Supertyp lze omezovat podobně jako typovou proměnnou a tak zpřesnit typovou informaci známou při překladu: VarBox<? extends Number> numvarbox; if (...) numvarbox = new VarBox<Double>(20.0); else numvarbox = new VarBox<Integer>(20);... numvarbox.getref().doublevalue()); // vrati 20.0 Typ parametrizovaný supertypem se velmi podobá surovému typu. Není však kompatibilní s jinými parametrizovanými typy: VarBox<?> varbox=... VarBox<Integer> intvarbox = (VarBox<Integer>) varbox; // nutné přetypování

25 Dolním omezením Supertyp lze omezit také zdola, tzv. dolním omezením: static void settobox(integer i, VarBox<? super Integer> box) { box.setref(i) Supertyp omezený shora reprezentuje množinu referenčních typů, které jsou nadtypy dolního omezení. V uvedeném příkladu: Integer, Number, Object.

26 Kompatibilita parametrizovaných typů Opakování: mezi typy existuje relace nadtyp-podtyp (supertype-subtype). Tato relace je tranzitivním uzávěrem relace přímý nadtyp-přímý podtyp (direct supertype-directsubtype) označená >1. Relace přímého nadtypu mezi primitivními typy: double >1 float float >1 long long >1 int int >1 char int >1 short short >1 byte Nadtyp parametrizovaného typu je: příslušně parametrizovaná nadtřída, příslušně parametrizovaná implementovaná rozhraní, třída Object, surový typ.

27 Přímý nadtyp Jestliže existuje deklarace parametrického typu C<F>, s nadtřídou resp. nadrozhraním D<U>, pak přímý nadtyp parametrizovaného typu C<T> (T není supertyp): Object, jestliže C je interface be nadrozhraní, surový typ C, přímá nadtřída where D<U theta>, kde theta je substituce U[F := T], C<S>, kde S obsahuje T. Příklad: VarBox<String> < 1 Object VarBox<String> < 1 VarBox VarBox<String> < 1 Box<String> VarBox<T> < 1 VarBox<? extends String> VarBox<T> < 1 VarBox<? super String>

28 Ostatní přímé nadtypy Přímé nadtypy typu C<R>, kde R je supertyp jsou přímé nadtypy C<X>, kde C<X je výsledek capture conversion na C<R>. Přímé nadtypy průnikového (intersection) typu T1 &... & Tn, jsou Ti,... Přímé nadtypy typové proměnní jsou typy z jejího omezení. Přímý nadtyp null typu jsou všechny referenční typy s výjimkou samotného null typu. Typová proměnná je přímý nadtyp svého dolního omezení

29 Přímé nadtypy typu pole Jestliže S a T jsou oba referenční typy, pak: S[] > 1 T[] jestliže S > 1 T pole na rozdíl od tříd jsou kovariantní!!! Dále: Object > 1 Object[] Cloneable > 1 Object[] java.io.serializable > 1 Object[] Jestliže p je primitivní typ, pak: Object > 1 p[] Cloneable > 1 p[] java.io.serializable > 1 p[]

30 Znečištění heapu Přiřazení hodnoty surového typu do proměnné parametrizovaného typu může způsobit tzv. znečištění heapu (heap pollution). Jedná se o stav, kdy proměnná neobsahuje objekt deklarovaného typu. Tato situace je při překladu hlášena varováním: unchecked warning. Varování znamená, že program není při překladu striktně typově zkontrolován a mohou se vyskytnout neočekávané výjimky za běhu: Box rawbox = new Box<String>("Ahoj"); Box<Integer> intbox = rawbox; // warning: [unchecked] unchecked conversion System.out.println(intBox.getRef().intValue()); // java.lang.classcastexception:...

31 Důsledky znečištění heapu Důsledkem možného znečištění heapu je, že při použití parametrizovaných typů se musí v run-timu provádět stejné kontroly jako u typů neparametrizovaných. Fragment kódu: intbox.getref().intvalue() se ve skutečnost přeloží: ((Integer)intBox.getRef()).intValue() Obdobný problém vniká i tehdy, pokud je v přetypování použita typová proměnná nebo parametrizovaný typ: private void uncheckedcasts(object o) { T ref = (T) o; // warning: [unchecked] unchecked cast Box<T> sr = (Box<T>) o; // warning: [unchecked] unchecked cast

32 Dolní omezení supertypu Supertyp je možno omezit také zdola:? super T V tomto případě je typový argument tvořen sjednocením všech typů, které jsou nadtypem typu T. Dolní omezení se používá pro vyjádření vztahu mezi parametry metod: // Collections public static <T> int binarysearch (List<? extends Comparable<? super T>> list, T key) parametr list musí být seznam prvků, které jsou provnatelné, porovnávací metoda prvků seznamu (compareto) musí jako parameter akceptovat typ, který je nadtypem T.

33 Relace obsažení Typový argument TA1 obsahuje (je nadmnožina) typového argumentu TA2 (psáno TA2 <= TA1), jestliže množina typů TA2 je podmnožinou typů TA1:? extends T <=? extends S jestliže T <: S? super T <=? super S jestliže S <: T T <= T T <=? extends T T <=? super T

34 Konverze Pokud se v určitém kontextu objeví dva typy dochází ke konverzi. V Javě existují následující konverze: 1. identická, 2. rozšiřující (widening) primitivní, 3. zužující (narowing) primitivní, 4. rozšiřující referenční, 5. užující referenční, 6. zabalovací (boxing), 7. rozbalovací (unboxing), 8. nekontrolovaná (unchecked), 9. chytací (capture), 10. řetězová, 11. Value set konverze. Konverzní kontexty jsou: přiřazení, volání metody, přetypování, spojování řetězu a číselné povýšení.

35 Chytací konverze Chytací (capture) konverze je automaticky aplikována v místě výskytu referenčního typu parametrizovaného supertypem. Jestliže G<F extends U> je generická deklarace, pak existuje chytací konverze z parametrizovaného typu G<?...> na parametrizovaný typ G<S>, kde S je nová (fresh) typová proměnná s následujícími vlastnostmi: Parametrizovaný typ Dolní mez S Horní mez S G<?> typ null U[A := S] G<? extends UB> typ null UB & U[A := S] Pokud G<? super jsou LB> ve druhém případě LB B a U typ U[A třída, := S] musí být jedna podtřídou druhé: NumberBox<? super String> ns; // error

36 Nekontrolovaná konverze Nekontrolovaná (unchecked) je konverze ze surového typu G na parametrizovaný typ G<T>. Pokud nejsou všechny typové argumenty cílového typu neohraničené supertypy, generuje nekontrolovaná konverze při kompilaci povinně varování (unchecked warning), protože může způsobit znečištění heapu: Box box = new Box<String>("Ahoj"); Box<Integer> ibox = box; // warning: [unchecked] unchecked conversion Box<?> ubox = box;

37 Volací konverze V kontextu volací konverze (method invocation conversion) se typ argumentu konvertuje na typ parametru. Kontext připouští tyto konverze: identickou konverzi, rozšiřující primitivní konverzi, rozšiřující referenční konverzi, zabalovací konverzi volitelně následovanou rozšiřující referenční konverzí, rozbalovací konverzi volitelně následovanou rozšiřující primitivní konverzí. Jestliže po aplikaci uvedených konverzí výsledný typ surový, může být na konec aplikována nekontrolovaná konverze. Chyba nastane, pokud se v řetězu konverzí vyskytnou parametrizované typy, které nejsou v relaci podtypu: Integer => Comparable<Integer> => Comparable => Comparable<String>

38 Přiřazovací konverze Kontext přiřazovací konverze (assignment conversion) se chová stejně jako volací konverze a navíc připouští zužující primitivní konverzi, pokud: typ proměnné je byte, short, nebo char hodnota výrazu je reprezentovatelná v typu proměnné.

39 Přetypování V kontextu přetypování (typecasting) je možno použít: identickou konverzi, rozšiřující primitivní konverzi, zužující primitivní konverzi, rozšiřující referenční konverzi volitelně následovanou nekontrolovanou konverzí, a zužující referenční konverzi volitelně následovanou nekontrolovanou konverzí, zabalovací konverzi, rozbalovací konverzi. V přetypování může být aplikována každá konverze z výjimkou řetězové a chytací.

40 Přetypování referenčních typů Přetypování z typu S na typ T je staticky korektní (statically known to be correct) jestliže S <: T. Přetypování z typu S na parameterizovaný typ T je nekontrolované (unchecked) pokud neplatí ani jedna z podmínek: S <: T, všechny typové argumenty T jsou supertypy bez omezení, T <: S a S nemá žádný podtyp X!= T, takový že X = T. Přetypování na typovou proměnnou je vždy nekontrolované. Nekontrolované přetypování z S na T je kompletně nekontrolovatelné, pokud přetypování z S na T je staticky korektní, jinak je částečně nekontrolované. Přetypování je kontrolované (checed) pokud není staticky korektní a není nekontrolované.

41 Přetypování v runtimu Chování přetypování S na T v runtimu: bez znečištění heapu staticky korektní možné znečištění heapu žádná runtime kontrola runtime kontrola kompletně nekontrolované kontrolované částečně nekontrolované - Částečně nekontrolované přetypování - v runtimu je prováděna stejná kontrola jako u kontrolovaného přetypování avšak mezi S and T, Kontrolované přetypování: hodnotu null je možno vždy přetypovat, třída objektu reference je kompatibilní pro přiřazení s typem T.

42 Generické metody a konstruktory Typové parametry generických metod umožňují vyjádřit vztah mezi typy skutečných parametrů a výsledku metody: public static <T> boolean replaceall // Collections (List<T> list, T oldval, T newval) public static <T> List<T> aslist(t... a) // Arrays Při volání generické metody je udání typových argumentů nepovinné. Hodnoty typových argumentů se v tomto případě odvodí z typů skutečných parametrů metody: List<String> ls = Arrays.asList("x", "b", "x"); Collections.replaceAll(ls, "x", "c"); nebo Collections.<String>replaceAll(ls, "x", "c"); Pozn.: volání metody nelze začínat typovými argumenty. Pokud jsou vyjádřeny musí být před nimi uvedno jméno třídy, this atd.

43 Generická metoda versus supertyp Při práci s generickými třídami je možno použít buď generickou metodu nebo parametr se supertypem. Generická metoda je doporučena pouze při potřebě vyjádřit vztahy mezi parametry: public static void reverse(list<?> list) { rev(list); private static <T> void rev(list<t> list) { List<T> tmp = new ArrayList<T>(list); for (int i = 0; i < list.size(); i++) { list.set(i, tmp.get(list.size() - i - 1)); public static <T> boolean contains(box<t> x, T y) throws MyNullRefException { return x.getref().equals(y);

44 Omezení metod Je chyba jestliže v deklaraci typu C je deklarovaná metoda m1 a existuje metoda m2 deklarovaná v C nebo v nadtypu C taková že platí: m1 and m2 mají stejné jméno, signatura m1 se liší od signatury of m2, m1 má stejné vyčištění jako m2. class C<T> { T id (T x) {... class D extends C<String> { Object id(object x) {...

45 C c = new D(); c.id(new Object()); // nedovolený argument pro C<String>.id() Signatura aktuálně volané metody: D.id(String) se liší od signatury kompilované metody: C.id (Object). Chyba může být detekována vytvořením přemosťovací metody ve třídě D: Object id(object x) { return id((string) x); class C<T> { abstract T id(t x); class D extends C<String> { String id(string x) { return x; Přemosťovací metody

Generické typy. Podrobněji: The Java Language Specification ( Third Edition ) , 18

Generické typy. Podrobněji: The Java Language Specification ( Third Edition ) , 18 Generické typy jsou třídy či interfejsy deklarující tzv. typové parametry jimiž: - systematizují typovou kontrolu kompilátorem, - vyjadřují jasněji smysl, zlepšují čitelnost a robustnost programu, - ulehčují

Více

Teoretické minimum z PJV

Teoretické minimum z PJV Teoretické minimum z PJV Pozn.: následující text popisuje vlastnosti jazyka Java zjednodušeně pouze pro potřeby výuky. Třída Zavádí se v programu deklarací třídy což je část programu od klíčových slov

Více

Parametrizované třídy Generics generické třídy. JDK zavádí mimo jiné tzv. parametrizované třídy - generics

Parametrizované třídy Generics generické třídy. JDK zavádí mimo jiné tzv. parametrizované třídy - generics 1 Parametrizované třídy Generics generické třídy JDK zavádí mimo jiné tzv. parametrizované třídy - generics Úvod 2 podobnost se šablonami (templates) z C++ nejčastěji použité v oblasti knihoven kontejnerového

Více

Úvod do programovacích jazyků (Java)

Úvod do programovacích jazyků (Java) Úvod do programovacích jazyků (Java) Michal Krátký Katedra informatiky VŠB Technická univerzita Ostrava Úvod do programovacích jazyků (Java), 2007/2008 c 2006 2008 Michal Krátký Úvod do programovacích

Více

Návrhové vzory Tvorba objektů

Návrhové vzory Tvorba objektů Objektové modelování, AD7B36OMO Návrhové vzory Tvorba objektů JIŘÍ ŠEBEK Katedra počítačů Fakulta elektrotechnická České vysoké učení technické v Praze https://edux.feld.cvut.cz/courses/ad7b36omo Přednáška

Více

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

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007 Úvod do programovacích jazyků (Java) Michal Krátký Katedra informatiky VŠB Technická univerzita Ostrava Úvod do programovacích jazyků (Java), 2006/2007 c 2006 Michal Krátký Úvod do programovacích jazyků

Více

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

14.4.2010. Obsah přednášky 7. Základy programování (IZAPR) Přednáška 7. Parametry metod. Parametry, argumenty. Parametry metod. Základy programování (IZAPR) Přednáška 7 Ing. Michael Bažant, Ph.D. Katedra softwarových technologií Kancelář č. 229, Náměstí Čs. legií Michael.Bazant@upce.cz Obsah přednášky 7 Parametry metod, předávání

Více

PŘETĚŽOVÁNÍ OPERÁTORŮ

PŘETĚŽOVÁNÍ OPERÁTORŮ PŘETĚŽOVÁNÍ OPERÁTORŮ Jazyk C# podobně jako jazyk C++ umožňuje přetěžovat operátory, tj. rozšířit definice některých standardních operátorů na uživatelem definované typy (třídy a struktury). Stejně jako

Více

Generické programování

Generické programování Generické programování Od C# verze 2.0 = vytváření kódu s obecným datovým typem Příklad generická metoda, zamění dva parametry: static void Swap(ref T p1, ref T p2) T temp; temp = p1; p1 = p2; p2 =

Více

typová konverze typová inference

typová konverze typová inference Seminář Java Programování v Javě II Radek Kočí Fakulta informačních technologií VUT Únor 2008 Radek Kočí Seminář Java Programování v Javě (2) 1/ 36 Téma přednášky Rozhraní: použití, dědičnost Hierarchie

Více

Úvod do programovacích jazyků (Java)

Úvod do programovacích jazyků (Java) Úvod do programovacích jazyků (Java) Michal Krátký Katedra informatiky VŠB Technická univerzita Ostrava Úvod do programovacích jazyků (Java), 2007/2008 c 2006 2008 Michal Krátký Úvod do programovacích

Více

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

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007 Úvod do programovacích jazyků (Java) Michal Krátký Katedra informatiky VŠB Technická univerzita Ostrava Úvod do programovacích jazyků (Java), 2006/2007 c 2006 Michal Krátký Úvod do programovacích jazyků

Více

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

7. přednáška - třídy, objekty třídy objekty atributy tříd metody tříd 7. přednáška - třídy, objekty třídy objekty atributy tříd metody tříd Algoritmizace (Y36ALG), Šumperk - 7. přednáška 1 Třída jako zdroj funkcionality Třída v jazyku Java je programová jednotka tvořená

Více

PREPROCESOR POKRAČOVÁNÍ

PREPROCESOR POKRAČOVÁNÍ PREPROCESOR POKRAČOVÁNÍ Chybová hlášení V C# podobně jako v C++ existuje direktiva #error, která způsobí vypsání chybového hlášení překladačem a zastavení překladu. jazyk C# navíc nabízí direktivu #warning,

Více

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

Reflexe. Aplikační programování v Javě (BI-APJ) - 8 Ing. Jiří Daněček Katedra softwarového inženýrství Fakulta informačních technologií ČVUT Praha Reflexe Aplikační programování v Javě (BI-APJ) - 8 Ing. Jiří Daněček Katedra softwarového inženýrství Fakulta informačních technologií ČVUT Praha Evropský sociální fond Praha & EU: Investujeme do vaší

Více

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/04.0006

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/04.0006 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/04.0006 Lekce 1 Jazyk Java Tento projekt je spolufinancován Evropským sociálním fondem

Více

Algoritmizace a programování

Algoritmizace a programování Algoritmizace a programování Struktura programu Vytvoření nové aplikace Struktura programu Základní syntaktické elementy První aplikace Verze pro akademický rok 2012/2013 1 Nová aplikace NetBeans Ve vývojovém

Více

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

Definice třídy. úplná definice. public veřejná třída abstract nesmí být vytvářeny instance final nelze vytvářet potomky JAVA Třídy Definice třídy úplná definice [public] [abstract] [final] class Jmeno [extends Predek] [impelements SeznamInterfacu] {... // telo tridy public veřejná třída abstract nesmí být vytvářeny instance

Více

Z. Kotala, P. Toman: Java ( Obsah )

Z. Kotala, P. Toman: Java ( Obsah ) Z. Kotala, P. Toman: Java ( Obsah ) 13. Výjimky Výjimka (exception) je definována jako událost, která nastane během provádění programu a která naruší normální běh instrukcí. Výjimka je vyvolána například

Více

9. přednáška - třídy, objekty

9. přednáška - třídy, objekty třída String a její použití kolekce, typované kolekce 9. přednáška - třídy, objekty Algoritmizace (Y36ALG), Šumperk - 9. přednáška 1 Třída String Objekty knihovní třídy String jsou řetězy znaků Od ostatních

Více

Generické programování v jazyce Java Generics programming in Java

Generické programování v jazyce Java Generics programming in Java Jihočeská univerzita v Českých Budějovicích Pedagogická fakulta Generické programování v jazyce Java Generics programming in Java Bakalářská práce Autor: Pavel Říha Vedoucí bakalářské práce: RNDr. Jaroslav

Více

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

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007 Úvod do programovacích jazyků (Java) Michal Krátký 1 Katedra informatiky VŠB Technická univerzita Ostrava Úvod do programovacích jazyků (Java), 2006/2007 c 2006 Michal Krátký Úvod do programovacích jazyků

Více

1. Programování proti rozhraní

1. Programování proti rozhraní 1. Programování proti rozhraní Cíl látky Cílem tohoto bloku je seznámení se s jednou z nejdůležitější programátorskou technikou v objektově orientovaném programování. Tou technikou je využívaní rozhraní

Více

Úvod Třídy Rozhraní Pole Konec. Programování v C# Hodnotové datové typy, řídící struktury. Petr Vaněček 1 / 39

Úvod Třídy Rozhraní Pole Konec. Programování v C# Hodnotové datové typy, řídící struktury. Petr Vaněček 1 / 39 Programování v C# Hodnotové datové typy, řídící struktury Petr Vaněček 1 / 39 Obsah přednášky Referenční datové typy datové položky metody přístupové metody accessory, indexery Rozhraní Pole 2 / 39 Třídy

Více

Seminář Java II p.1/43

Seminář Java II p.1/43 Seminář Java II Seminář Java II p.1/43 Rekapitulace Java je case sensitive Zdrojový kód (soubor.java) obsahuje jednu veřejnou třídu Třídy jsou organizovány do balíků Hierarchie balíků odpovídá hierarchii

Více

7. Datové typy v Javě

7. Datové typy v Javě 7. Datové typy v Javě Primitivní vs. objektové typy Kategorie primitivních typů: integrální, boolean, čísla s pohyblivou řádovou čárkou Pole: deklarace, vytvoření, naplnění, přístup k prvkům, rozsah indexů

Více

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

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007 Úvod do programovacích jazyků (Java) Michal Krátký Katedra informatiky VŠB Technická univerzita Ostrava Úvod do programovacích jazyků (Java), 2006/2007 c 2006 Michal Krátký Úvod do programovacích jazyků

Více

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

8 Třídy, objekty, metody, předávání argumentů metod 8 Třídy, objekty, metody, předávání argumentů metod Studijní cíl Tento studijní blok má za cíl pokračovat v základních prvcích jazyka Java. Konkrétně bude věnována pozornost třídám a objektům, instančním

Více

11.5.2012. 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

11.5.2012. 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 Obsah přednášky 9 Základy programování (IZAPR, IZKPR) Přednáška 9 Základy dědičnosti, přístupová práva Ing. Michael Bažant, Ph.D. Katedra softwarových technologií Kancelář č. 03 022, Náměstí Čs. legií

Více

Zápis programu v jazyce C#

Zápis programu v jazyce C# Zápis programu v jazyce C# Základní syntaktická pravidla C# = case sensitive jazyk rozlišuje velikost písmen Tzv. bílé znaky (Enter, mezera, tab ) ve ZK překladač ignoruje každý příkaz končí ; oddělovač

Více

Algoritmizace a programování

Algoritmizace a programování Algoritmizace a programování Řídicí struktury jazyka Java Struktura programu Příkazy jazyka Blok příkazů Logické příkazy Ternární logický operátor Verze pro akademický rok 2012/2013 1 Struktura programu

Více

Programování v Javě I. Leden 2008

Programování v Javě I. Leden 2008 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

Více

Abstraktní datové typy: zásobník

Abstraktní datové typy: zásobník Abstraktní datové typy: zásobník doc. Ing. Miroslav Beneš, Ph.D. katedra informatiky FEI VŠB-TUO A-1007 / 597 324 213 http://www.cs.vsb.cz/benes Miroslav.Benes@vsb.cz Abstraktní datové typy omezené rozhraní

Více

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

Paměť počítače. alg2 1 Paměť počítače Výpočetní proces je posloupnost akcí nad daty uloženými v paměti počítače Data jsou v paměti reprezentována posloupnostmi bitů (bit = 0 nebo 1) Připomeňme: paměť je tvořena řadou 8-mi bitových

Více

UJO Framework. revoluční architektura beans. verze 0.80 http://ujoframework.org/

UJO Framework. revoluční architektura beans. verze 0.80 http://ujoframework.org/ UJO Framework revoluční architektura beans verze 0.80 http://ujoframework.org/ Pavel Pone(c), září 2008 Historie rok 2004 upravené objekty z frameworku Cayenne nevýhodou byla špatná typová kontrola rok

Více

Dědění, polymorfismus

Dědění, polymorfismus Programování v jazyce C/C++ Ladislav Vagner úprava Pavel Strnad Dědění. Polymorfismus. Dnešní přednáška Statická a dynamická vazba. Vnitřní reprezentace. VMT tabulka virtuálních metod. Časté chyby. Minulá

Více

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

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 Seminář Java Výjimky Radek Kočí Fakulta informačních technologií VUT Únor 2008 Radek Kočí Seminář Java Výjimky 1/ 25 Výjimky Co a k čemu jsou výjimky výjimka je mechanizmus umožňující psát robustní, spolehlivé

Více

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

Programování v Javě I. Únor 2009 Seminář Java Programování v Javě I Radek Kočí Fakulta informačních technologií VUT Únor 2009 Radek Kočí Seminář Java Programování v Javě (1) 1/ 44 Téma přednášky Datové typy Deklarace třídy Modifikátory

Více

Java Výjimky Java, zimní semestr

Java Výjimky Java, zimní semestr Java Výjimky 1 Výjimky (exceptions) hlášení a ošetření chyb výjimka signalizuje nějaký chybový stav výjimka = instance třídy java.lang.throwable dvě podtřídy java.lang.error a java.lang.exception konkrétní

Více

IRAE 07/08 Přednáška č. 2. atr1 atr2. atr1 atr2 -33

IRAE 07/08 Přednáška č. 2. atr1 atr2. atr1 atr2 -33 Objekt jako proměnná Objekty a metody Objekt = proměnná referenčního typu vznik pomocí new, chování viz pole jako referenční proměnná minulý semestr Stack Heap objekt ref this 10 20 atr1 atr2 jinyobjekt

Více

Základy jazyka C# Obsah přednášky. Architektura.NET Historie Vlastnosti jazyka C# Datové typy Příkazy Prostory jmen Třídy, rozhraní

Základy jazyka C# Obsah přednášky. Architektura.NET Historie Vlastnosti jazyka C# Datové typy Příkazy Prostory jmen Třídy, rozhraní Základy jazyka C# doc. Ing. Miroslav Beneš, Ph.D. katedra informatiky FEI VŠB-TUO A-1007 / 597 324 213 http://www.cs.vsb.cz/benes Miroslav.Benes@vsb.cz Obsah přednášky Architektura.NET Historie Vlastnosti

Více

RMI Remote Method Invocation

RMI Remote Method Invocation 2. cvičení RMI Remote Method Invocation 2007/09 ver.2.0 1 RMI co to je? vyvolání metody z jiné JVM lokalizace vzdáleného objektu komunikace se vzdálenými objekty přenos objektu v bytecode typicky klient

Více

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

7 Formátovaný výstup, třídy, objekty, pole, chyby v programech 7 Formátovaný výstup, třídy, objekty, pole, chyby v programech Studijní cíl Tento studijní blok má za cíl pokračovat v základních prvcích jazyka Java. Konkrétně bude věnována pozornost formátovanému výstupu,

Více

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

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007 Úvod do programovacích jazyků (Java) Michal Krátký Katedra informatiky VŠB Technická univerzita Ostrava Úvod do programovacích jazyků (Java), 2006/2007 c 2006 Michal Krátký Úvod do programovacích jazyků

Více

Tento studijní blok má za cíl pokračovat v základních prvcích jazyka Java. Konkrétně bude věnována pozornost rozhraním a výjimkám.

Tento studijní blok má za cíl pokračovat v základních prvcích jazyka Java. Konkrétně bude věnována pozornost rozhraním a výjimkám. 13 Rozhraní, výjimky Studijní cíl Tento studijní blok má za cíl pokračovat v základních prvcích jazyka Java. Konkrétně bude věnována pozornost rozhraním a výjimkám. Doba nutná k nastudování 2 2,5 hodiny

Více

14.4.1. Typický prvek kolekce pro české řazení

14.4.1. Typický prvek kolekce pro české řazení 14.4. Co všechno by měl mít typický prvek kolekce 177 Poznámka: Třídy BigInteger, BigDecimal a Date budou vysvětleny v částech [15./183, [16./185 a [18.1./204. 14.4.1. Typický prvek kolekce pro české řazení

Více

Enterprise Java (BI-EJA) Technologie programování v jazyku Java (X36TJV)

Enterprise Java (BI-EJA) Technologie programování v jazyku Java (X36TJV) Příprava studijního programu Informatika je podporována projektem financovaným z Evropského sociálního fondu a rozpočtu hlavního města Prahy. Praha & EU: Investujeme do vaší budoucnosti Enterprise Java

Více

Úvod Přetěžování Generika Kolekce Konec. Programování v C# Další jazykové konstrukce. Petr Vaněček 1 / 31

Úvod Přetěžování Generika Kolekce Konec. Programování v C# Další jazykové konstrukce. Petr Vaněček 1 / 31 Programování v C# Další jazykové konstrukce Petr Vaněček 1 / 31 Obsah přednášky Přetěžování metody operátory Generika Kolekce třídy rozhraní 2 / 31 Překrytí vs. přetížení Rozdíl ve způsobu deklarace metody/operátoru

Více

Seminář Java IV p.1/38

Seminář Java IV p.1/38 Seminář Java IV Seminář Java IV p.1/38 Rekapitulace Deklarace tříd Proměnné, metody, konstruktory, modifikátory přístupu Datové typy primitivní, objektové, pole Dědičnost Řídící konstrukce Podmínky, cykly

Více

Dědičnost (inheritance)

Dědičnost (inheritance) Dědičnost (inheritance) Úvod Umožňuje objektům převzít (zdědit) členy jiných objektů a pouze je rozšířit o Auto: lze odvodit Vztah je osobní auto, cisterna jsou auta Základní pojmy Bázová třída (rodič)

Více

29. Výjimky, jejich vznik, vyhození, odchyt a zpracování. (A7B36PVJ)

29. Výjimky, jejich vznik, vyhození, odchyt a zpracování. (A7B36PVJ) 29. Výjimky, jejich vznik, vyhození, odchyt a zpracování. (A7B36PVJ) Výjimka (exception) je definována jako událost, která nastane během provádění programu a která naruší normální běh instrukcí. Výjimka

Více

5 Přehled operátorů, příkazy, přetypování

5 Přehled operátorů, příkazy, přetypování 5 Přehled operátorů, příkazy, přetypování Studijní cíl Tento studijní blok má za cíl pokračovat v základních prvcích jazyka Java. Konkrétně budou uvedeny detaily týkající se operátorů. Doba nutná k nastudování

Více

Úvod do programovacích jazyků (Java)

Úvod do programovacích jazyků (Java) Úvod do programovacích jazyků (Java) Michal Krátký Katedra informatiky VŠB Technická univerzita Ostrava Úvod do programovacích jazyků (Java), 2007/2008 c 2006 2008 Michal Krátký Úvod do programovacích

Více

6. Příkazy a řídící struktury v Javě

6. Příkazy a řídící struktury v Javě 6. Příkazy a řídící struktury v Javě Příkazy v Javě Příkazy v Javě Řídicí příkazy (větvení, cykly) Přiřazovací příkaz = Řízení toku programu (větvení, cykly) Volání metody Návrat z metody - příkaz return

Více

2) Napište algoritmus pro vložení položky na konec dvousměrného seznamu. 3) Napište algoritmus pro vyhledání položky v binárním stromu.

2) Napište algoritmus pro vložení položky na konec dvousměrného seznamu. 3) Napište algoritmus pro vyhledání položky v binárním stromu. Informatika 10. 9. 2013 Jméno a příjmení Rodné číslo 1) Napište algoritmus pro rychlé třídění (quicksort). 2) Napište algoritmus pro vložení položky na konec dvousměrného seznamu. 3) Napište algoritmus

Více

Soubor jako posloupnost bytů

Soubor jako posloupnost bytů Soubory Soubor je množina údajů uložená ve vnější paměti počítače, obvykle na disku Pro soubor jsou typické tyto operace. otevření souboru čtení údaje zápis údaje uzavření souboru Přístup k údajům (čtení

Více

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

Příklad : String txt1 = new String( Ahoj vsichni! ); //vytvoří instanci třídy String a přiřadí ji vnitřní hodnotu Ahoj vsichni! Java práce s řetězci Trochu povídání.. Řetězce jsou v Javě reprezentovány instancemi tříd StringBuffer a String. Tyto třídy jsou součástí balíčku java.lang, tudíž je možno s nimi pracovat ihned bez nutného

Více

Datové typy strana 29

Datové typy strana 29 Datové typy strana 29 3. Datové typy Jak již bylo uvedeno, Java je přísně typový jazyk, proto je vždy nutno uvést datový typ datového atributu, formálního parametru metody, návratové hodnoty metody nebo

Více

KTE / ZPE Informační technologie

KTE / ZPE Informační technologie 4 KTE / ZPE Informační technologie Ing. Petr Kropík, Ph.D. email: pkropik@kte.zcu.cz tel.: +420 377 63 4639, +420 377 63 4606 (odd. informatiky) Katedra teoretické elektrotechniky FEL ZČU Plzeň Největší

Více

Základní pojmy. Úvod do programování. Základní pojmy. Zápis algoritmu. Výraz. Základní pojmy

Základní pojmy. Úvod do programování. Základní pojmy. Zápis algoritmu. Výraz. Základní pojmy Úvod do programování Michal Krátký 1,Jiří Dvorský 1 1 Katedra informatiky VŠB Technická univerzita Ostrava Úvod do programování, 2004/2005 Procesor Procesorem je objekt, který vykonává algoritmem popisovanou

Více

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

Úvod do programování - Java. Cvičení č.4 Úvod do programování - Java Cvičení č.4 1 Sekvence (posloupnost) Sekvence je tvořena posloupností jednoho nebo více příkazů, které se provádějí v pevně daném pořadí. Příkaz se začne provádět až po ukončení

Více

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

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007 Úvod do programovacích jazyků (Java) Michal Krátký Katedra informatiky VŠB Technická univerzita Ostrava Úvod do programovacích jazyků (Java), 2006/2007 c 2006 Michal Krátký Úvod do programovacích jazyků

Více

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

Class loader. každá třída (java.lang.class) obsahuje referenci na svůj class loader. Implementace class loaderu Seminář Java Zavádění tříd Radek Kočí Fakulta informačních technologií VUT Duben 2008 Radek Kočí Seminář Java Zavádění tříd 1/ 16 JVM zavádí třídy dynamicky Class loader objekt schopný zavádět třídy abstraktní

Více

Algoritmizace a programování

Algoritmizace a programování Algoritmizace a programování Typy Základní (primitivní) datové typy Deklarace Verze pro akademický rok 2012/2013 1 Typy v jazyce Java Základní datové typy (primitivní datové typy) Celočíselné byte, short,

Více

Algoritmizace, základy programování, VY_32_INOVACE_PRG_ALGO_01

Algoritmizace, základy programování, VY_32_INOVACE_PRG_ALGO_01 Anotace sady: Algoritmizace, základy programování, VY_32_INOVACE_PRG_ALGO_01 Autor: Blanka Sadovská Klíčová slova: Algoritmus, proměnná, diagram Stupeň a typ vzdělávání: gymnaziální vzdělávání, 3. ročník

Více

TŘÍDY POKRAČOVÁNÍ. Události pokračování. Příklad. public delegate void ZmenaSouradnicEventHandler (object sender, EventArgs e);

TŘÍDY POKRAČOVÁNÍ. Události pokračování. Příklad. public delegate void ZmenaSouradnicEventHandler (object sender, EventArgs e); TŘÍDY POKRAČOVÁNÍ Události pokračování public delegate void ZmenaSouradnicEventHandler (object sender, EventArgs e); class Bod private int x; private int y; public event ZmenaSouradnicEventHandler ZmenaSouradnic;

Více

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

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007 Úvod do programovacích jazyků (Java) Michal Krátký 1 Katedra informatiky VŠB Technická univerzita Ostrava Úvod do programovacích jazyků (Java), 2006/2007 c 2006 Michal Krátký Úvod do programovacích jazyků

Více

IRAE 07/08 Přednáška č. 1

IRAE 07/08 Přednáška č. 1 Úvod do předmětu OOP Objekt Proč OOP? Literatura, osnova předmětu viz. cvičení Základní prvek OOP sw inženýrství = model reálných objektů (věcí) člověk, auto, okno (ve windows), slovník, = model abstraktní

Více

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

4. ZÁKLADNÍ POJMY Z OBJEKTOVĚ ORIENTOVANÉHO PROGRAMOVÁNÍ 4. ZÁKLADNÍ POJMY Z OBJEKTOVĚ ORIENTOVANÉHO PROGRAMOVÁNÍ OBJEKT Program v Javě je staticky strukturován na třídy, jejichž instance (objekty) za běhu dynamicky programu vznikají a zanikají. Objekt je nejprve

Více

JAVA. Zdrojové soubory

JAVA. Zdrojové soubory JAVA Zdrojové soubory 1 Unicode programy ~ Unicode komentáře, identifikátory, znakové a řetězcové konstanty ostatní ~ ASCII (

Více

Třídy, polymorfismus. A0B36PR2-Programování 2 Fakulta elektrotechnická České vysoké učení technické

Třídy, polymorfismus. A0B36PR2-Programování 2 Fakulta elektrotechnická České vysoké učení technické Třídy, polymorfismus A0B36PR2-Programování 2 Fakulta elektrotechnická České vysoké učení technické Polymorfizmus ~ vícetvarost Polymorfizmus základní vlastnost objektového přístupu základní princip polymorfismu:

Více

Algoritmizace a programování

Algoritmizace a programování Algoritmizace a programování Výrazy Operátory Výrazy Verze pro akademický rok 2012/2013 1 Operace, operátory Unární jeden operand, operátor se zapisuje ve většině případů před operand, v některých případech

Více

Programování v jazyce JavaScript

Programování v jazyce JavaScript Programování v jazyce JavaScript Katedra softwarového inženýrství Fakulta informačních technologií České vysoké učení technické v Praze Pavel Štěpán, 2011 Syntaxe 1. část BI-JSC Evropský sociální fond

Více

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

Pokud zadání nerozumíte nebo se vám zdá nejednoznačné, zeptejte se. Pište čitelně, nečitelná řešení nebudeme uznávat. Pokud zadání nerozumíte nebo se vám zdá nejednoznačné, zeptejte se. Pište čitelně, nečitelná řešení nebudeme uznávat. 1. Odkrokujte následující program a s použitím notace z přednášky popište stav paměti

Více

Práce s textem. Třída Character. Třída Character. Třída Character. reprezentuje objekty zapouzdřující hodnotu typu char (boxing / unboxing)

Práce s textem. Třída Character. Třída Character. Třída Character. reprezentuje objekty zapouzdřující hodnotu typu char (boxing / unboxing) Třída Character Práce s textem doc. Ing. Miroslav Beneš, Ph.D. katedra informatiky FEI VŠB-TUO A-1007 / 597 324 213 http://www.cs.vsb.cz/benes Miroslav.Benes@vsb.cz reprezentuje objekty zapouzdřující hodnotu

Více

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

Definice třídy. úplná definice. public veřejná třída abstract nesmí být vytvářeny instance final nelze vytvářet potomky JAVA Třídy Definice třídy úplná definice [public] [abstract] [final] class Jmeno [extends Predek] [impelements SeznamInterfacu] {... // telo tridy public veřejná třída abstract nesmí být vytvářeny instance

Více

Principy objektově orientovaného programování

Principy objektově orientovaného programování Principy objektově orientovaného programování Třídy a objekty doc. Ing. Miroslav Beneš, Ph.D. katedra informatiky FEI VŠB-TUO A-1007 / 597 324 213 http://www.cs.vsb.cz/benes Miroslav.Benes@vsb.cz C E T

Více

7. Dynamické datové struktury

7. Dynamické datové struktury 7. Dynamické datové struktury Java poskytuje několik možností pro uložení většího množství dat (tj. objektů či primitivních datových typů) v paměti. S nejjednodušší z nich, s polem, jsme se již seznámili.

Více

Seznamy a iterátory. Kolekce obecně. Rozhraní kolekce. Procházení kolekcí

Seznamy a iterátory. Kolekce obecně. Rozhraní kolekce. Procházení kolekcí Kolekce obecně Seznamy a iterátory doc. Ing. Miroslav Beneš, Ph.D. katedra informatiky FEI VŠB-TUO A-1007 / 597 324 213 http://www.cs.vsb.cz/benes Miroslav.Benes@vsb.cz Kolekce ::= homogenní sada prvků

Více

Abstraktní třída a rozhraní

Abstraktní třída a rozhraní Abstraktní třída a rozhraní Někdy se může stát, zejména při psaní v hierarchické struktuře hodně nadřazených tříd, že tušíme, že bude ve zděděných třídách vhodné použít nějakou metodu. Tuto metodu ještě

Více

Jazyk C# (seminář 6)

Jazyk C# (seminář 6) Jazyk C# (seminář 6) Pavel Procházka KMI 29. října 2014 Delegát motivace Delegáty a události Jak docílit v C# funkcionální práce s metodami v C je to pomocí pointerů na funkce. Proč to v C# nejde pomocí

Více

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

Datové typy v Javě. Tomáš Pitner, upravil Marek Šabo Datové typy v Javě Tomáš Pitner, upravil Marek Šabo Úvod k datovým typům v Javě Existují dvě základní kategorie datových typů: primitivní a objektové Primitivní v proměnné je uložena přímo hodnota např.

Více

24-2-2 PROMĚNNÉ, KONSTANTY A DATOVÉ TYPY TEORIE DATUM VYTVOŘENÍ: 23.7.2013 KLÍČOVÁ AKTIVITA: 02 PROGRAMOVÁNÍ 2. ROČNÍK (PRG2) HODINOVÁ DOTACE: 1

24-2-2 PROMĚNNÉ, KONSTANTY A DATOVÉ TYPY TEORIE DATUM VYTVOŘENÍ: 23.7.2013 KLÍČOVÁ AKTIVITA: 02 PROGRAMOVÁNÍ 2. ROČNÍK (PRG2) HODINOVÁ DOTACE: 1 24-2-2 PROMĚNNÉ, KONSTANTY A DATOVÉ TYPY TEORIE AUTOR DOKUMENTU: MGR. MARTINA SUKOVÁ DATUM VYTVOŘENÍ: 23.7.2013 KLÍČOVÁ AKTIVITA: 02 UČIVO: STUDIJNÍ OBOR: PROGRAMOVÁNÍ 2. ROČNÍK (PRG2) INFORMAČNÍ TECHNOLOGIE

Více

Objekty v PHP 5.x. This is an object-oriented system. If we change anything, the users object.

Objekty v PHP 5.x. This is an object-oriented system. If we change anything, the users object. Objekty v PHP 5.x This is an object-oriented system. If we change anything, the users object. Objektové PHP Objekty se poprvé objevili v PHP ve verzi 4. Nepříliš zdařilý pokus. Programátoři získali nedůvěru

Více

20. Projekt Domácí mediotéka

20. Projekt Domácí mediotéka Projekt Domácí mediotéka strana 211 20. Projekt Domácí mediotéka 20.1. Základní popis, zadání úkolu V projektu Domácí mediotéka (Dome) se jednoduchým způsobem evidují CD a videa. Projekt je velmi jednoduchý

Více

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

Správa paměti. Karel Richta a kol. Katedra počítačů Fakulta elektrotechnická České vysoké učení technické v Praze Karel Richta, 2016 Správa paměti Karel Richta a kol. Katedra počítačů Fakulta elektrotechnická České vysoké učení technické v Praze Karel Richta, 2016 Objektové modelování, B36OMO 10/2016, Lekce 2 https://cw.fel.cvut.cz/wiki/courses/xxb36omo/start

Více

Tematický celek Proměnné. Proměnné slouží k dočasnému uchovávání hodnot během provádění aplikace Deklarace proměnných

Tematický celek Proměnné. Proměnné slouží k dočasnému uchovávání hodnot během provádění aplikace Deklarace proměnných Tematický celek 03 3.1 Proměnné Proměnné slouží k dočasnému uchovávání hodnot během provádění aplikace. 3.1.1 Deklarace proměnných Dim jméno_proměnné [As typ] - deklarace uvnitř procedury platí pouze pro

Více

Návrh softwarových systém. Návrh softwarových systémů

Návrh softwarových systém. Návrh softwarových systémů Návrh softwarových systém ů - Java 8 Jiří Šebek Návrh softwarových systémů (B6B36NSS) Co je nového? Default interface methods Lambda expressions Method references and repeatable annotations Streams Functional

Více

Předmluva k aktuálnímu vydání Úvod k prvnímu vydání z roku Typografické a syntaktické konvence... 20

Předmluva k aktuálnímu vydání Úvod k prvnímu vydání z roku Typografické a syntaktické konvence... 20 Obsah 5 Obsah Předmluva k aktuálnímu vydání 15 1 Úvod k prvnímu vydání z roku 2000 16 Typografické a syntaktické konvence................ 20 2 Základní pojmy 21 2.1 Trocha historie nikoho nezabije................

Více

Jazyk C++ I. Polymorfismus

Jazyk C++ I. Polymorfismus Jazyk C++ I Polymorfismus AR 2013/2014 Jazyk C++ I Operátory Co to vůbec jsou operátory? Na co je používáme? AR 2013/2014 Jazyk C++ I 2 Operátory Můžeme si upravit operátory pro vlastní objektové typy?

Více

Proměnné a datové typy

Proměnné a datové typy Proměnné a datové typy KAPITOLA 2 V této kapitole: Primitivní datové typy Proměnné Opakování Mezi základní dovednosti každého programátora bezesporu patří dobrá znalost datových typů. Ta vám umožní efektivní

Více

Stream API. Petr Krajča. Základy programovaní 4 (Java) Katedra informatiky Univerzita Palackého v Olomouci

Stream API. Petr Krajča. Základy programovaní 4 (Java) Katedra informatiky Univerzita Palackého v Olomouci Základy programovaní 4 (Java) Stream API Petr Krajča Katedra informatiky Univerzita Palackého v Olomouci Petr Krajča (UP) KMI/ZP4JV 5. listopad, 2014 1 / 10 Stream API Java 8 nový přístup k práci s kolekcemi

Více

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

Java - výjimky. private void vstup() throws IOException {... } Java - výjimky Tato kapitola ukazuje na několika příkladech práci s výjimkami v Javě. Klíčové pojmy: Výjimka, hierarchie výjimek, zachytávání výjimek, blok try-catch, tvorba vlastních výjimek, propagace

Více

Abstraktní třídy, polymorfní struktury

Abstraktní třídy, polymorfní struktury Karel Müller, Josef Vogel (ČVUT FIT) Abstraktní třídy, polymorfní struktury BI-PA2, 2011, Přednáška 9 1/32 Abstraktní třídy, polymorfní struktury Ing. Josef Vogel, CSc Katedra softwarového inženýrství

Více

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

Statické proměnné a metody. Tomáš Pitner, upravil Marek Šabo Statické proměnné a metody Tomáš Pitner, upravil Marek Šabo Úvod Se statickou metodou jsme se setkali už u úplně prvního programu - Hello, world! public class Demo { public static void main(string[] args)

Více

Jazyk C++ I. Šablony 2

Jazyk C++ I. Šablony 2 Jazyk C++ I Šablony 2 AR 2013/2014 Jazyk C++ I Třídy template class TVektor { T *a; int n; static int PocInstanci; public: TVektor(int _n = 0) : n(_n) { a = new T[n]; PocInstanci++; } ~TVektor()

Více

Jak v Javě primitivní datové typy a jejich reprezentace. BD6B36PJV 002 Fakulta elektrotechnická České vysoké učení technické

Jak v Javě primitivní datové typy a jejich reprezentace. BD6B36PJV 002 Fakulta elektrotechnická České vysoké učení technické Jak v Javě primitivní datové typy a jejich reprezentace BD6B36PJV 002 Fakulta elektrotechnická České vysoké učení technické Obsah Celočíselný datový typ Reálný datový typ Logický datový typ, typ Boolean

Více

Čipové karty Lekařská informatika

Čipové karty Lekařská informatika Čipové karty Lekařská informatika Následující kód je jednoduchou aplikací pro čipové karty, která po překladu vytváří prostor na kartě, nad kterým jsou prováděny jednotlivé operace a do kterého jsou ukládány

Více

Obsah. Předmluva 13 Zpětná vazba od čtenářů 14 Zdrojové kódy ke knize 15 Errata 15

Obsah. Předmluva 13 Zpětná vazba od čtenářů 14 Zdrojové kódy ke knize 15 Errata 15 Předmluva 13 Zpětná vazba od čtenářů 14 Zdrojové kódy ke knize 15 Errata 15 KAPITOLA 1 Úvod do programo vání v jazyce C++ 17 Základní pojmy 17 Proměnné a konstanty 18 Typy příkazů 18 IDE integrované vývojové

Více