KTE / ZPE Informační technologie
|
|
- Radovan Kolář
- před 5 lety
- Počet zobrazení:
Transkript
1 11 KTE / ZPE Informační technologie Ing. Petr Kropík, Ph.D. pkropik@kte.zcu.cz tel.: , (odd. informatiky) Katedra teoretické elektrotechniky FEL ZČU Plzeň
2 Metoda equals() - porovnání shodnosti objektů - nezapomeňte, že == vrátí shodu jen pro dvě proměnné odkazující na stejný objekt - sám si programuji, které položky se mají rovnat, podobný princip jako u metody clone - volání porovnávám instance p1 a p2: p1.equals(p2) - pokud metodu nepřekryji chová implicitně jako == a = new Obdelnik(10,43, "Prvni"); b = (Obdelnik) a.clone(); // klon s hlubokou kopií a.tisk(); b.tisk(); System.out.println(a.equals(b)); a.popisek.reverse(); a.tisk(); b.tisk(); System.out.println(a.equals(b)); - equals bude v obou případech false, nepřekryli jsme -> chová se tedy jako == (máme po klonování dvě různé instance) Překryji equals např. takto, je na mojí vůli, co porovnám, tj. co bude kritériem rovnosti instancí: public boolean equals(obdelnik tendruhej) { if ((this.sirka == tendruhej.sirka) && (this.vyska == tendruhej.vyska)) { return true; else return false;
3 V praxi jednodušeji: public boolean equals(obdelnik tendruhej) { return ((this.sirka == tendruhej.sirka) && (this.vyska == tendruhej.vyska)); Potom použití: System.out.println(a.equals(b)); - při úpravě metody equals, je vhodné, upravit i metodu následující hashcode Příklad na clone a equals: package klonovani; public class Obdelnik implements Cloneable { private int sirka, vyska; public int getsirka() { return sirka; public void setsirka(int sirka) { this.sirka = sirka; public int getvyska() { return vyska;
4 public void setvyska(int vyska) { this.vyska = vyska; public StringBuffer popisek; // pozor vložený objekt public Obdelnik(int sirka, int vyska, String popisek) { this.popisek = new StringBuffer(popisek); this.sirka = sirka; this.vyska = vyska; public Object clone() { Obdelnik dolly = null; try { dolly = (Obdelnik) super.clone(); // aby kopie byla hluboká dolly.popisek = new StringBuffer(popisek); // nelze: // dolly.popisek = (StringBuffer) popisek.clone(); catch (CloneNotSupportedException e) { e.printstacktrace(); return dolly; public void tisk() { System.out.println(popisek); public boolean equals(obdelnik tendruhej) {
5 return ((sirka == tendruhej.getsirka()) && (vyska == tendruhej.getvyska())); /** args */ public static void main(string[] args) { Obdelnik a, bklon, c; a = new Obdelnik(10,43, "Prvni"); bklon = (Obdelnik) a.clone(); c = a; a.tisk(); bklon.tisk(); System.out.println(a.equals(bKlon)); System.out.println(a.equals(c)); a.popisek.reverse(); // obrátí pořadí znaků v řetězci a.tisk(); bklon.tisk(); System.out.println(a.equals(bKlon)); bklon.setsirka(122); System.out.println(a.equals(bKlon)); Metoda hashcode()
6 - vrací id číslo objektu pro různé objekty (různé z hlediska metody equals) vrací různá čísla proto je vhodné ji upravit, pokud měním metodu equals Metoda getclass() - vrací objekt třídy Class obsahuje informace o třídě - pozor jde o finální metodu Např.: p.getclass().getname(); Class info_a = a.getclass(); System.out.println("a.getClass hlásí: " + info_a); System.out.println(a.getClass().getName()); Tiskne: a.getclass hlásí: class geometrie.obdelnik geometrie.obdelnik Balíky - nejblíže mají ke knihovnám tříd - na disku se projeví jak vnořené adresáře: package zcu.fel.kte.moje.strileckagame; na disku: /zcu/fel/kte/moje/strileckagame - slouží pro vymezení přístupových práv souvisí s použití kvalifikátorů private, protected, nic, public. - import balíku (import všech tříd balíku proto ta *): import zcu.fel.kte.moje.strileckagame.*; - import jedné třídy z balíku: import zcu.fel.kte.moje.strileckagame.mojetrida;
7 import zcu.fel.kte.moje.strileckagame.jinatrida; - toto nelze: import zcu.fel.kte.moje.strileckagame.m*; Proč import? Bez importu: zcu.fel.kte.moje.strileckagame.mojetrida.mojemetoda(blaf); r = zcu.fel.kte.moje.strileckagame.mojetrida.mojemetoda(blaf) + zcu.fel.kte.moje.strileckagame.mojetrida.mojemetoda(blaf) / zcu.fel.kte.moje.strileckagame.mojetrida.mojemetoda(blaf); S importem: MojeTrida.mojeMetoda(blaf); r = MojeTrida.mojeMetoda(blaf) + MojeTrida.mojeMetoda(blaf) / MojeTrida.mojeMetoda(blaf);
8 Přístupová práva - omezení přístupu k celým třídám nebo k jednotlivým datovým prvkům a metodám - u metod a proměnných - nástroj pro řízení zapouzdření, řízení přístupu k prvkům instance (třídy) private nic není uveden občas přátelský spec. (package friendly) protected public V porovnání s třídou, která daný datový prvek (před nímž je některý ze specifikátorů) obsahuje: stejná třída třída ze stejného balíku dceřinná třída ze stejného balíku dceřinná třída z jiného balíku třída z jiného balíku private přístupný není příst. není příst. není příst. není příst. nic přístupný přístupný přístupný není příst. není příst. protected přístupný přístupný přístupný přístupný není příst. public přístupný přístupný přístupný přístupný přístupný - pozor: pokud neuvedeme ve třídě balík, do kterého patří, spadne do balíku default nebezpečí pro datové prvky a metody se specifikátor protected balík default je vždy automaticky importován - v rámci dědičnosti není možné oslabit (zpřísnit) přístupová práva k prvkům třídy, tj. pokud původní třída dala něco více k dispozici, nemohu to v potomkovi "schovat" Např.: v Object je metoda: protected Object clone() a viz minule my jsem překryli metodou: public Object clone()
9 - tj. povolit větší přístup lze, tj. mohu skryté prvky "odkrýt". Co lze měnit (tj. směr od přísnějšího k volnějšímu): private -> nic -> protected -> public - týká se dat. prvků a metod - jinak je to u celých tříd, může být rodič public class a potomek jen class (bez ozn., nic) - u tříd: - public class jen jedna v souboru, podle ní se soubor jmenuje, je využitelná, popř. má-li main i spustitelná (z vnějšku) - class v podstatě pomocné třídy pro hlavní public class v souboru (nenabízejí se ven) - třídy nabízené balíkem (tj. např. mojí aplikací, knihovnou atp.) musí být public class, třídy pro interní potřebu balíku stačí class
10 Rozhraní (interface) - JAVA nepodporuje vícenásobnou dědičnost (viz zač. semestru dceřinná třída nemůže mít dva rodiče) - kdy použijeme: - chceme, aby třída musela implementovat (naprogramovat) určité metody - dvě třídy jsou si podobné (obsahem atp.), ale není vhodné (z logiky věci předek by byl umělou konstrukcí) vyrábět jim společného předka (popř. to ani nejde, když jde o potomky knihovních tříd) stručně: chci zkombinovat funkčnost více tříd do jedné a něco přeprogramovat. Zmínka o přeprogramování je tu proto, že jinak by stačila kompozice objektů. Pokud tuto kombinaci potřebuji => rozhraní. Vlastnosti a deklarace rozhraní: public interface MojeRozhrani { public void whoami(); public int jinametoda(double parametr); - nesmí obsahovat proměnné - obsahuje hlavičky metod (tzv. signatury metod) platí do Java 7 - mohou obsahovat konstanty - třída může implementovat několik rozhraní
11 - jsou mimo hierarchii tříd (ale mezi rozhraními lze dědit, funguje i vícenás. dědičnost) - rozhraní může být implementováno několika třídami - od Java 8 lze vytvářet tzv. default metody tj. mohu v interface připravit tělo metody, takže neudělám-li ve třídě nové, použije se výchozí (default) tělo z interface: - je to důležité např. pokud přidáme novou metodu do rozhraní pokud má default tělo, nemusíme nutně hned předělávat implementující třídy Př. Rozhraní pokračování - to, že třída implementuje rozhraní, znamená, že naprogramuje těla metod uvedených v rozhraní - a hlavička třídy vypadá takto: public class Makac extends NejakyRodic implements NejakeRozhrani, NejakeDalsiRozhrani, AjesteJedno { // tělo třídy - rozhraní často v knihovnách (metody bylo třeba seskupit pro uživatele jinak, šikovněji, než se hodilo z hlediska naprogramování těchto tříd) často u grafických knihoven - lze udělat jako proměnnou typu rozhraní (a velmi často se to dělá) kde se vezmou datové prvky? Rozhraní si v podstatě udělá instanci tříd, které jej implementují vyrobím tedy instanci třídy, která implementuje rozhraní. Dělá se tedy instance třídy, která rozhraní implementuje. Viz příklad níže. - viz dále, v podstatě jde o obdobu vynucení implementace metody jako u abstraktní metod a tříd, ovšem právě bez nutnosti společného předka - třída může být potomkem jiné třídy a navíc implementovat rozhraní: public class Makac extends NejakaTrida implements NejakeRozhrani, NejakeJineRoz {
12 // tělo třídy - pokud rodičovská třída implementuje rozhraní, dědí se do potomka (tj. pokud rodič implementuje rozhraní, implementuje jej i potomek) - nelze se přes proměnnou typu rozhraní dostat na metody implementujících tříd, které nejsou uvedeny v deklaraci rozhraní Příklad: public interface VstupVyst { public void cti(); public void zapisuj(); public class InpOut implements VstupVyst { // musím povinně naprogr. jinak překladač hlásí chybu public void cti() { // nějaké příkazy // musím povinně naprogr. jinak překladač hlásí chybu public void zapisuj() { // nějaké příkazy public void tiskni() { // nějaké příkazy
13 public class IOoperace implements VstupVyst { // musím povinně naprogr. jinak překladač hlásí chybu public void cti() { // nějaké příkazy // musím povinně naprogr. jinak překladač hlásí chybu public void zapisuj() { // nějaké příkazy public void kresli() { // nějaké příkazy Potom v nějakém mainu: VstupVyst prom, test; // všimněte si podobnosti s obdobným // postupem u abstr. tříd pole Zvirat prom = new InpOut(); test = new IOoperace(); nebo: VstupVyst[] pole; // všimněte si podobnosti s obdobným
14 // postupem u abstr. tříd pole zvirat pole = new VstupVyst[2]; pole[0] = new InpOut(); pole[1] = new IOoperace(); pole[0].cti(); // o.k. pole[1].cti(); // o.k. pole[0].zapisuj(); // o.k. pole[1].zapisuj(); // o.k. pole[0].tiskni(); // chyba, rozhraní tuto metodu nezná pole[1].kresli(); // chyba, rozhraní tuto metodu nezná - obejít to lze pouze přetypováním: ((InpOut) pole[0]).tiskni(); ((IOoperace) pole[1]).kresli(); - operátor instanceof umí zjistit, instance jakého typu byla vyrobena do např. položky toho pole for (int i = 0; i < pole.length; i++) { if (pole[i] instanceof InpOut) // je pole[0] instancí třídy InpOut? ((InpOut) pole[i]).tiskni(); if (pole[i] instanceof IOoperace) // je pole[0] instancí třídy IOoperace? ((IOoperace) pole[i]).tiskni();
15 Pozn. rozhraní s konstantou: public interface VstupVyst { public static final int KONSTANTA = 5; public void cti(); public void zapisuj(); Výčtový typ - enum /** * Vyctovy typ pro mesice v roce Pavel Micka */ public enum Month { JANUARY, FEBRUARY, MARCH, APRIL, MAY, JUNE, JULY, AUGUST, SEPTEMBER, OCTOBER, NOVEMBER, DECEMBER; /** * Vrati nahodny mesic nahodny mesic */ public static Month getrandom(){ Random r = new Random(); // pseudonahodny generator cisel int pocetpolozekenumu = Month.values().length; return Month.values()[r.nextInt(pocetPolozekEnumu)]; // konec enum Instance jednotlivých měsíců nyní získáme následovně: Month m1 = Month.JANUARY; // Ziskejme instanci odpovidajici lednu
16 Month m2 = Month.getRandom(); // Ziskejme nahodnou instanci Viz také příkad enum Planet: public enum Planet { MERCURY (3.303e+23, e6), VENUS (4.869e+24, e6), EARTH (5.976e+24, e6), MARS (6.421e+23, e6), JUPITER (1.9e+27, e7), SATURN (5.688e+26, e7), URANUS (8.686e+25, e7), NEPTUNE (1.024e+26, e7); private final double mass; // in kilograms private final double radius; // in meters Planet(double mass, double radius) { this.mass = mass; this.radius = radius; private double mass() { return mass; private double radius() { return radius; // universal gravitational constant (m3 kg-1 s-2) public static final double G = E-11; double surfacegravity() { return G * mass / (radius * radius);
17 double surfaceweight(double othermass) { return othermass * surfacegravity(); public static void main(string[] args) { if (args.length!= 1) { System.err.println("Usage: java Planet <earth_weight>"); System.exit(-1); double earthweight = Double.parseDouble(args[0]); double mass = earthweight/earth.surfacegravity(); for (Planet p : Planet.values()) System.out.printf("Your weight on %s is %f%n", p, p.surfaceweight(mass)); If you run Planet.class from the command line with an argument of 175, you get this output: $ java Planet 175 Your weight on MERCURY is Your weight on VENUS is Your weight on EARTH is Your weight on MARS is Your weight on JUPITER is Your weight on SATURN is
18 Your weight on URANUS is Your weight on NEPTUNE is
19 Vnořené třídy - třída deklarovaná uvnitř jiné třídy - použijeme ji obvykle v případě, pokud chceme třídu pro potřeby pouze jedné jiné třídy První možnost: public class Vnejsi { class VnitrniVnorena { // nějaké tělo // pokračuje tělo vnější třídy VnitrniVnorena a; Potom lze také: Vnejsi.VnitrniVnorena x; Po překladu vzniknou class soubory: Vnejsi.class Vnejsi$VnitrniVnorena.class - použiji pokud v rámci vnější třídy existuje skupina dat a operací nad nimi, vhodných k zapouzdření - vnější třída Bankomat, vnitřní vnořená Fronta požadavků - vnitřní může implementovat rozhraní, může být potomkem jiné třídy atp. Druhá možnost vnitřní třída je s public třídou v jednom souboru, ale není uvnitř jiné třídy: v jednom souboru Vnejsi.java jsou spolu: class Vnitrni { // nějaké tělo public class Vnejsi { // pokračuje tělo vnější třídy
20 Anonymní vnořená třída package geometrie; public interface Info { void kdojsem(); public class Ctverec extends Obdelnik { class VnitrniVnorena implements Info { int i = 5; // nějaké tělo public void kdojsem() { System.out.println(toString()); // anonymni vnorena public Info informace() { return new Info() { public void kdojsem() { System.out.println(toString()); ; // je konec těla anonymní vnořené třídy // konec metody informace // konec třídy Ctverec Po překladu vzniknou class soubory: Ctverec.class Tělo anonymní vnořené třídy, nemá jméno, rovnou dělám její instanci pomocí new.
21 Ctverec$VnitrniVnorena.class Ctverec$1.class - ve třídě Ctverec vytváříme metodu informace(), která vrací instanci nějaké třídy, která implementuje rozhranní Info (viz polymorfismus a rozhranní výše). - POZOR: příkaz return new Info() { značí: vyrob instanci třídy, u které neuvádím jméno, ale říkám, že implementuje rozhranní Info a rovnou píšu tělo této anonymní vložené třídy do složených závorek. - Potom v mainu: Ctverec ctv = new Ctverec(2,4,3); Info inf; inf = ctv.informace(); inf.kdojsem(); nebo rovnou: Ctverec ctv = new Ctverec(2,4,3); ctv.informace().kdojsem(); - detailní použití opět viz projekt "geometrie" V grafických aplikacích často, tělo anonymní vnořené, která zde neimplementuje rozhranní, ale je potomkem třídy MouseAdapter a překrývá její metody mouseup() a mousedown():
22 Čtení a zápis do/ze souboru - je nutno vždy otevřít vst./výst. proud (stream) - proudy - proudy znaků - proudy bytů Znakové proudy: třídy typu: Reader metody.read Writer metody.write Bytové proudy: třídy typu: InputStream metody.read OutputStream metody.write - v těchto třídách jsou další metody např..close() - mohou vyvolat výjimku IOException (viz začátek semestru, System.in.read()) Děděním jsou odvozeny další třídy, pomocné, rozšiřují se a specializují vlastnosti. Tzv. třídy vlastností viz níže. Třídy pracující se zařízeními: soubory - znakové: FileReader, FileWriter - bytové: FileInputStream, FileOutputStream paměť - znakové: CharArrayReader, CharArrayWriter, StringReader, StringWriter
23 - bytové: ByteArrayInputStream, ByteArrayOutputStream, StringBufferInputStream roura - znakové: PipedReader, PipedWriter - bytové: PipedInputStream, PipedOutputStream
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ícetypová 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íceMichal 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Ú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íceGenerické 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íceInputStream. FilterInputStream
6. Vstupy a výstupy Pro práci se vstupy a výstupy nám Java poskytuje celou řadu tříd a jejich metod. Jsou uloženy v balíku java.io. Tato knihovna je založena na mechanizmu tzv. vstupních a výstupních proudů
VíceSeminář 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íceAbstraktní 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íceVýčtový typ strana 67
Výčtový typ strana 67 8. Výčtový typ V této kapitole si ukážeme, jak implementovat v Javě statické seznamy konstant (hodnot). Příkladem mohou být dny v týdnu, měsíce v roce, planety obíhající kolem slunce
Více20. 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íce7. 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íceMichal 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íceProgramová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íceProgramová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íceAlgoritmizace 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íceDefinice 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íce14.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íceMichal 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íceSoubor 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íce11. Dědičnost. Dědičnost strana 103
Dědičnost strana 103 11. Dědičnost V této kapitole si vysvětlíme jeden ze základních pojmů objektově orientovaného programování dědičnost (inheritance). S ní souvisejí i následující témata: předek a potomek
VícePř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íceTří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íce11.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Ú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íce14.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íceKTE / ZPE Informační technologie
7 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ň - ternární
VíceSeznamy 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íceJazyk C# (seminář 3)
Jazyk C# (seminář 3) Pavel Procházka KMI October 8, 2014 Motivace Největší využití v programování okenních aplikací a GUI knihoven. Data reprezentujeme pomocí objektů (tříd), máme tedy ucelený pohled na
VícePREPROCESOR 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íce1. Téma 12 - Textové soubory a výjimky
1. Téma 12 - Textové soubory a výjimky Cíl látky Procvičit práci se soubory s využitím výjimek. 1.1. Úvod Program, aby byl programem, my mít nějaké výstupy a vstupy. Velmi častým případem je to, že se
VíceVytváření a použití knihoven tříd
Vytváření a použití knihoven tříd 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 Prostory jmen motivace spolupráce
VícePráce se soubory v Javě
Práce se soubory v Javě Cílem kapitoly je naučit pracovat se soubory a adresáři v Javě. Na jednoduchých příkladech ukázat procházení adresáře, čtení z textového souboru a zápis do textového souboru. Klíčové
VíceTŘÍ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íceMichal 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íce1. 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íceTeoretické 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ícePočí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íce3. Třídy. Základní pojmy objektového programování. Třídy
3. Třídy Základní pojmy objektového programování Jak už víme, je Java objektovým programovacím jazykem. V úvodu této kapitoly si objasníme základní pojmy objektové teorie. Objekt představuje souhrn dat
VíceDefinice 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ícePrincipy 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íceJava - 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Ú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íceOMO. 4 - Creational design patterns A. Singleton Simple Factory Factory Method Abstract Factory Prototype Builder IoC
OMO 4 - Creational design patterns A Singleton Simple Factory Factory Method Abstract Factory Prototype Builder IoC Ing. David Kadleček, PhD. kadlecd@fel.cvut.cz, david.kadlecek@cz.ibm.com 1 Creational
Více3 KTE / ZPE Informační technologie
3 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ň Komentáře
VíceDefinice 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íce8. přednáška: Soubory a proudy
8. přednáška: Soubory a proudy Soubor jako posloupnost bytů Ukládání/čtení primitivních typů Ukládání/čtení primitivních typů a objektů (řetězců) Ukládání/čtení objektů do souboru - serializace Obsah Algoritmizace
VíceZáklady objektové orientace I. Únor 2010
Seminář Java Základy objektové orientace I Radek Kočí Fakulta informačních technologií VUT Únor 2010 Radek Kočí Seminář Java Základy OO (1) 1/ 20 Téma přednášky Charakteristika objektově orientovaných
VíceRegulární výrazy. Vzory
Regulární výrazy Regulární výrazy jsou určeny pro práci s textovými řetězci, jsou součástí J2SDK až od verze 1.4, v předchozích verzích je potřeba použít některou z externích knihoven, např. knihovnu ORO
VíceSeminář 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íce4. 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íceDě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íceBridge. Známý jako. Účel. Použitelnost. Handle/Body
Bridge Bridge Známý jako Handle/Body Účel odděluje abstrakci (rozhraní a jeho sémantiku) od její konkrétní implementace předchází zbytečnému nárůstu počtu tříd při přidávání implementací používá se v době
Více4IT101 otázky k závěrečnému testu verze pro zimní semestr 2007/2008
4IT101 otázky k závěrečnému testu verze pro zimní semestr 2007/2008 Které programovací jazyky byly primárně navrženy pro oblast vědecko-technických výpočtů? Které programovací jazyky se často používají
VíceAbstraktní 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ícePŘ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íce8 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íceProgramování v C++ 1, 6. cvičení
Programování v C++ 1, 6. cvičení dědičnost, polymorfismus 1 1 Fakulta jaderná a fyzikálně inženýrská České vysoké učení technické v Praze Zimní semestr 2018/2019 Přehled 1 2 3 Shrnutí minule procvičené
VíceMichal 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íceJava 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íceJava a XML. 10/26/09 1/7 Java a XML
Java a XML Java i XML jsou přenositelné V javě existuje podpora pro práci s XML, nejčastější akce prováděné při zpracování XML: načítání XML elementů generování nových elementů nebo úprava starého zápis
Více10 Generické implementace
10 Generické implementace Main Entry: 1 ge ner ic Pronunciation: j&-'ner-ik Function: adjective Etymology: French générique, from Latin gener-, genus birth, kind, class 1 a : relating to or characteristic
VíceJava - řazení objektů
Java - řazení objektů Kapitola seznamuje se základními principy řazení objektů Klíčové pojmy: Přirozené řazení, absolutní řazení, ideální porovnávatelná třída ŘAZENÍ OBJEKTŮ U objektů není příliš jasné,
VíceNPRG031 Programování II 1 / :25:46
NPRG031 Programování II 1 / 26 28. 2. 2018 11:25:46 Objekty Svět se skládá z objektů! konkrétní x abstraktní hmatatelné x nehmatatelné (letadlo) x (chyba v programu) Objekty mohou obsahovat jiné objekty
VíceNMIN201 Objektově orientované programování 1 / :36:09
NMIN201 Objektově orientované programování 1 / 26 8.10.2013 15:36:09 Objekty Svět se skládá z objektů! konkrétní x abstraktní hmatatelné x nehmatatelné (letadlo) x (chyba v programu) Objekty mohou obsahovat
VíceÚ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íce9. Polymorfismus a rozhraní
Polymorfismus a rozhraní strana 73 9. Polymorfismus a rozhraní Tato kapitola navazuje na základní informace o objektech v kapitole 2, zde se budeme zabývat přetěžováním metod, polymorfismem a rozhraními.
VíceDědičnost. seskupování tříd do hierarchie. potomek získá všechny vlastnosti a metody. provádí se pomocí dvojtečky za názvem třídy.
3. ročník Dědičnost seskupování tříd do hierarchie nadtyp-podtyp potomek získá všechny vlastnosti a metody kromě označených jako private provádí se pomocí dvojtečky za názvem třídy Polymorfismus všude
Více7. 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íceProgramovací jazyk Java
1 z 8 Programovací jazyk Java Enumerace (výčty) Složitější definice výčtového typu Konstanty anonymních typů Výčtový typ a datové struktury Java packaging JAR archivy CLASSPATH Apache Ant 10. přednáška
VíceÚvod do programování v jazyce Java
Úvod do programování v jazyce Java Petr Krajča Katedra informatiky Univerzita Palackého v Olomouci 5. říjen, 2011 Petr Krajča (UP) KMI/UP3J: Seminář I. 5.10.2011 1 / 17 Organizační informace email: petr.krajca@upol.cz
VícePokud 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íceJAVA. Krátke poznámky:
JAVA Krátke poznámky: Vše je definováno ve třídách; Žádné funkce mimo třídy Skoro všetko je objekt, výnimka sú premenné (napr. int) Neexistuje operátor delete Rušenie objektov výlučne cez Garbage Collector
VíceÚ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íceObjektové programování
Objektové programování - přináší nové možnosti a styl programování - vytváří nový datový typ, který umí vše co standardní datové typy + to co ho naučíme - překladač se k tomuto typu chová stejně jako k
VíceDatové struktury. alg12 1
Datové struktury Jedna z klasických knih o programování (autor prof. Wirth) má název Algorithms + Data structures = Programs Datová struktura je množina dat (prvků, složek, datových objektů), pro kterou
VíceJazyk 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íce11 Diagram tříd, asociace, dědičnost, abstraktní třídy
11 Diagram tříd, asociace, dědičnost, abstraktní třídy 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 diagramům tříd, asociaci,
VíceIterator & for cyklus
Iterator & for cyklus for (Object o : foo) funguje pokud je foo pole nebo je foo iterovatelné jako to zařídit? implementovat interface java.lang.iterable Iterable má jednu metodu java.util.iterator iterator()
VíceOOPR_05. Případové studie
OOPR_05 Případové studie 1 Přehled probírané látky příklad skládání objektů - čára příklad skládání objektů kompozice a agregace přetížené konstruktory pole jako datový atribut 2 Grafický objekt - čára
VíceProgramování v C++ 3, 3. cvičení
Programování v C++ 3, 3. cvičení úvod do objektově orientovaného programování 1 1 Fakulta jaderná a fyzikálně inženýrská České vysoké učení technické v Praze Zimní semestr 2018/2019 Přehled Dokončení spojového
Více9. 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íceZákladní pojmy. Matice(řádky, sloupce) Matice(4,6) sloupce
Vektor a Matice Základní pojmy Matice(řádky, sloupce) Matice(4,6) sloupce řádky (1,1) (1,2) (1,3) (1,4) (1,5) (1,6) (2,1) (2,2) (2,3) (2,4) (2,5) (2,6) (3,1) (3,2) (3,3) (3,4) (3,5) (3,6) (4,1) (4,2) (4,3)
VíceObjekty 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íce6. PRÁCE S DATOVÝMI PROUDY
6. PRÁCE S DATOVÝMI PROUDY Balík java.io obsahuje třídy, které slouží pro zpracování datových výstupů a vstupů. Pro obvyklou práci se soubory zde můžeme najít třídy File a RandomAccessFile. Většina tříd
VíceStatické 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íceDatové 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ícePB161 Programování v jazyce C++ Přednáška 7
PB161 Programování v jazyce C++ Přednáška 7 Statické položky tříd Základy OOP Nikola Beneš 6. listopadu 2018 PB161 přednáška 7: static, základy OOP 6. listopadu 2018 1 / 21 Klíčové slovo static Znáte z
VícePB161 Programování v jazyce C++ Přednáška 7
PB161 Programování v jazyce C++ Přednáška 7 Statické položky tříd Základy OOP Nikola Beneš 6. listopadu 2018 PB161 přednáška 7: static, základy OOP 6. listopadu 2018 1 / 21 Klíčové slovo static Znáte z
VíceTřídy. Instance. Pokud tento program spustíme, vypíše následující. car1 má barvu Red. car2 má barvu Red. car1 má barvu Blue.
23. Třídy, generické třídy, instance, skládání, statické metody a proměnné. Zapouzdření, konstruktory, konzistence objektu, zpřístupnění vnitřní implementace, modifikátory public a private. Polymorfismus,
VíceAlgoritmizace 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íceJava efektivně. Lukáš Zapletal liberix.cz. Pokročilejší techniky programování v Javě
Lukáš Zapletal liberix.cz Pokročilejší techniky programování v Javě Tato prezentace vychází kompletně z knihy J. Blocha: Effective Java (A-W 2001) u nás Java efektivně - 57 zásad softwarového experta (Grada
VíceDatové struktury. Obsah přednášky: Definice pojmů. Abstraktní datové typy a jejich implementace. Algoritmizace (Y36ALG), Šumperk - 12.
Obsah přednášky: Definice pojmů o datový typ, o abstraktní datový typ Datové struktury Abstraktní datové typy a jejich implementace o Fronta (Queue) o Zásobník (Stack) o Množina (Set) Algoritmizace (Y36ALG),
VíceDě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íceClass 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íceObsah přednášky. 12. Dokumentace zdrojového kódu Tvorba elektronické dokumentace UML. Co je diagram tříd. Ing. Ondřej Guth
Evropský sociální fond. 12. Dokumentace zdrojového kódu Tvorba elektronické dokumentace Ing. Ondřej Guth Katedra teoretické informatiky Fakulta informačních technologií České vysoké učení technické v Praze
VíceMichal 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íceObsah. Úvod 11 Základy programování 11 Objektový přístup 11 Procvičování 11 Zvláštní odstavce 12 Zpětná vazba od čtenářů 12 Errata 13
Úvod 11 Základy programování 11 Objektový přístup 11 Procvičování 11 Zvláštní odstavce 12 Zpětná vazba od čtenářů 12 Errata 13 KAPITOLA 1 Na úvod o Javě 15 Počítačový program 15 Vysokoúrovňový programovací
VíceVyužití OOP v praxi -- Knihovna PHP -- Interval.cz
Page 1 of 6 Knihovna PHP Využití OOP v praxi Po dlouhé teorii přichází na řadu praxe. V následujícím textu si vysvětlíme možnosti přístupu k databázi pomocí různých vzorů objektově orientovaného programování
VíceVýchozí a statické metody rozhraní. Tomáš Pitner, upravil Marek Šabo
Výchozí a statické metody rozhraní Tomáš Pitner, upravil Marek Šabo Výchozí a statické metody rozhraní Java 8 přidává ohledně metod v rozhraní nové možnosti. Neuvidíme je tedy ve starém kódu a mnozí vývojáři
Více