Kapitola 1. Administrativa & Jemný úvod do OOP 1.1. Organizační informace

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

Download "Kapitola 1. Administrativa & Jemný úvod do OOP 1.1. Organizační informace"

Transkript

1 Kapitola 1. Administrativa & Jemný úvod do OOP 1.1. Organizační informace základní zdroj informací [ a odkaz na KIV/UUR letos (2010/2011) předmět běží teprve čtvrtý rok pravděpodobně se ještě pořád budou objevovat různé mouchy a vady na kráse (a překlepy) přednáší Ondřej Rohlík je zodpovědný za předmět, takže veškeré problémy řešte s ním rohlik@kiv.zcu.cz garantem předmětu je doc. Pavel Herout je také původním autorem asi poloviny přednášek tímto mu děkuji za jejich poskytnutí k rukám doc. Herouta směřujte jen stížnosti na mne ;-) předpokládaná vstupní úroveň znalostí studentů není zcela jasná zdola je ohraničená zkouškou KIV/PPA1 snahou bylo, aby si předmět zapsali studenti, kteří přes zkoušku z PPA1prošli hladce dotazník snad napoví cíl předmětu: přesně podle anotace na courseware: pochopení teorie a získání zkušeností s technologiemi používanými při vytváření prezentační vrstvy programu v Javě semestrální práce je jich hodně a jsou jednoduché (skoro všechny) (možná) suplované přednášky a 9.5. (ESA) a (NASA) literatura Herout, P., Učebnice jazyka Java, České Budějovice, Kopp 2000 Herout, P., Java : grafické uživatelské prostředí a čeština, České Budějovice, Kopp

2 je to dobrá volba, ale je třeba jasně říct, že kniha je pouze o AWT, zatímco KIV/UUR je o převážně o Swing; samozřejmě Swing je postaven nad AWT a většina knihy má obecnou platnost; knížku obecně doporučuji, ale také doporučuji nejprve si knížku prolistovat v knihovně The Swing Tutorial (na WWW) Swing API (na WWW) 1.2. Jemný technologický úvod do OOP, dědičnosti a rozhraní OOP je zkratka pro Objektově Orientované Programovaní cílem přednášky je vybavit studenty základními znalostmi (povědomím) o objektovém programování ještě před tím než se pustíme do uživatelského rozhraní jako takového -- je-li to por Vás nové, asi budete z přednášky odcházet zmateni a do příštího dne strávíte nějaký čas samostudiem a konzultacemi cílem není diskuse o ideových základech OOP (tj. v čem jsou výhody zapouzdření, dědičnosti, polymorfismu) ani o OO návrhu (to se dozvíte jinde - v předmětu doc. Pavla Herouta OOP), i když se tomu nedá úplně uniknout cílem přednášky tedy je odstranit strach z čtení dokumentace Java Tutorial Swing API rozumět kódu který od přístě budu používat v přednáškách znát klíčová slova z OOP, abyste si mohli vyhledat a nastudovat detaily na Internetu nebo v knížce od Pavla Herouta Třída a Objekt znáte z PPA1 (kapitola 7.2 "Třída jako datový typ" v materiálech na PPA1) třída definuje data metody (operace) pracující nad těmito daty public class Tlacitko { private String napis; // data jsou privátní tj. nejsou vidět z venku public String getnapis() { return this.napis; public void setnapis(string napis) { this.napis = napis; 2

3 třída je šablona podle které se vytvářejí datové objekty (lze říci (ač ne zcela přesně), že třída je typem těchto objetků, tak jako String je typem pro řetězec "foo") objekty se vytvářejí z šablony třídy voláním konstruktoru pomocí operátoru new příklad: JButton tlacitkobt = new JButton("Zrušit"); Zapouzdření třída realizuje zapouzdření (v terminologii OOP), to znamená, že něco schovává před okolním světem -- v příkladu výše schovává proměnnou napis se schovaným (tj. s proměnnou napis) lze manipulovat pouze prostřednictvím metod (též operací, nebo postaru funkcí) třídy; je důležité, že kromě operací třídy Tlačítko s proměnnou napis nikdo a nic nemůže manipulovat; to dává autorovi třídy jistotu, že jiní programátoři něco nepokazí schvovat lze nejen proměnnou, ale i metodu (operaci) v Javě rozlišujeme čtyři úrovně viditelnosti: private, protected, public a implicitní; pro implicitní viditelnost není definováno žádné klíčové slovo Dědičnost příklad napoví UML Class Diagram ukazuje dvě třídy: Person a Customer šipka znázorňuje dědičnost a říká: třída Customer je specializovaným (rozšířeným) případem třídy Person tj. (každý) Customer je zároveň i Person (řekněte si to česky a uvidíte, že to dáva smysl) a má/umí něco navíc Person je třída, které může využívat atributy (proměnné) name a address Customer je třída, které může využívat atributy (proměnné) name, address a accountnumber šipka znázorňující relaci dědičnost je na obrázku správně i když se to někomu může zdát nelogické -- směřuje od podtřídy k nadtřídě (from subclass to superclass) říkáme, že třída Customer dědí od třídy Person atributy address a name stejně se dědí i metody -- to na obrázku není vidět, protože Person, žádné metody nemá 3

4 příslušný kód je uložen v souborech Person.java a Customer.java, všiměte se části "Customer extends Person" public class Person { String address; String name; public class Customer extends Person { int accountnumber; public String tostring() { return " Account number: " + accountnumber + "\n Account holder: "+ name + "\n Address: " + address + "\n"; dědičnost má řadu výhod většinu oceníme teprve později už teď je vidět, že nám může ušetřit hodně kódování, protože naprogramujeme-li třídu Person pořádně (například přidáme operace/metody setname, getaddress apod.), můžeme pak snadno děděním získat třídy Employee, Boss, Benefactor, Child... a u žádné z nich nemusíme znovu kódovat to, co už jsme nakódovali u třídy Person příklad z praxe: třída JComponent má přes 100 metod; třídy JButton nebo JPopupMenu už těchto 100 metod nemusí implementovat -- prostě a jednodušše je zdědí od svého předka -- od nadtřídy JComponent viz u dědičnosti je běžné, že při návrhu software vznikne netriviální hierarchie objektů (odpusťte autorovi obrázku, že zapoměl nakreslit šipky -- všechny by směřovaly vzhůru) Polymorfismus, virtální metoda základem polymorfismu je virtuální metoda překrývání metod -- overriding uvažujme třídu odeděděnou od Customer public class NobleCustomer extends Customer { String title; // sir, baron, knight, lord, duke, princ, king public String tostring() { 4

5 return " Account number: " + accountnumber + "\n Honorable account holder: " + title + " " + name + "\n Address: " + address + "\n"; podívejme se teď na to jaké metody jsou kdy volány public class Test { public static void main(string args[]) { Customer c; NobleCustomer nc; c = new Customer(); c.name = "Ondrej Rohlik"; c.address = "Pilsen"; c.accountnumber = ; System.out.println(c.toString()); // Vypíše očekavané: // Account number: // Account holder: Ondrej Rohlik // Address: Pilsen nc = new NobleCustomer(); nc.name = "Albert II"; nc.address = "Monaco"; nc.accountnumber = ; nc.title = "prince"; System.out.println(nc.toString()); // Vypíše očekavané: // Account number: // Honorable account holder: prince Albert II // Address: Monaco c = nc; // to je BTW pěkný trik: podtřídu lze "uložit" do proměnné typované jako nadtřída System.out.println(c.toString()); // Díky polymorfismu vypíše: // Account number: // Honorable account holder: prince Albert II // Address: Monaco tostring() je virtuální metoda (ono vlastně všechny metody v Javě jsou virtuální -- narozdíl od některých jiných jazyků jako např. C++, kde je třeba explicitně uvést které metoda je virtuální a které je obyčejná/nevirtuální) selský rozum říká, že když voláme c.tostring() a c je typu Customer, výpis by měl být 5

6 Account number: Account holder: Ondrej Rohlik Address: Pilsen trik je právě v polymorfismu volání virtualních metod; JVM si "všimne", že objekt na který referenční proměnná c ukazuje je typu NobleCustomer a tedy zavolá příslušnou metodu tostring(), tak jak je definovaná v NobleCustomer nikoliv tu, která je definovaná v Customer tato vlastnost se jmenuje polymorfismus protože výsledek volání metody mujobjekt.mojemetoda() je závislý na tom, na jaký objekt právě odkazuje mujobjekt tj. při pohledu na kód mujobjekt.mojemetod() není možné říct, co se při stane POKUD existuje více implementací metody mojemetoda() v různých třídách A ZAROVEN POKUD není známo jakého typu je mujobjekt říká se tomu pozdní vazba (late binding or dynamic binding) -- teprve za běhu programu, kdy dojde na volání metody, se zjistí, která z metod mojemetoda() se provede (a to je celkem pozdě, proto se říká late -- je to takříkajíc na posledni chvíli) pozn.: samozřejmě že kdyby žádná tostring() v NobleCustomer definovaná nebyla, JVM zavolá metodu tostring() definovanou v Customer příklad z praxe: třída JMenuItem definuje metodu updateui(); její podtřída JCheckBoxMenuItem má jinou implementaci metody updateui() Abstraktní metoda někdy je výhodné deklarovat ve třídě virtuální metodu, ale nechat jí nedefinovanou tj. nenapsat jí kód těla třída GrObj2D reprezntuje obecný grafický objekt, u kterého předpokládáme, že má nějakou plochu, a proto deklaruje třída metodu getarea(), ačkoliv sama nemá na výpočet plochy dostatek dat (pozn: atributy x a y v obrázku níže jsou jen souřadnice nějakého význačného bodu tohoto 2D objektu, třeba středu kružnice -- nejsou to rozměry jako např. šířka a výška, ale pouze souřadnice) je logické, že každý "placatý" objekt by měl být schopen poskytnout metodu pro výpočet své plochy rádi bychom do těla metody getarea() napsali i nějaký smysluplný kód, ale u obezného placatého objektu nevíme, jak to spočítat -- to lze jen u konkrétního tvaru jako čtverec, kruh, šestiúhelník atp. tak alespoň oznámíme všem potomkům třídy GrObj2D, že je potřeba oznamovat světu svoji plochu a ať programátoři každému potomku třídy GrObj2D kód doplní podle toho, jak ten který potomek vypadá -- programátor třídy Circle tak doplní tělo: return radius*radius*3.14f; a programátor třídy SnehovaVlocka se asi pěkně zapotí 6

7 Třída GrObj2D má abstraktní metodu a proto musí být také definovaná jako abstraktní public abstract class GrObj2D { int x; int y; public abstract int getarea(); Třída Circle metodu implementuje public class Circle extends GrObj2D { int radius; public int getarea() { return Math.round(radius*radius*3.14f); Třída Rectangle také public class Rectangle extends GrObj2D { int width; int height; public int getarea() { return width*height; Instanciace a demostrace použití abstraktní metody public class Test { public static void main(string args[]) { GrObj2D[] list = new GrObj2D[2]; Circle c = new Circle(); Rectangle r = new Rectangle(); c.radius = 10; r.width = 10; r.height = 20; list[0] = c; // list[0] je typovaný na GrObj2D, takže do něj můžeme vložit Circle 7

8 list[1] = r; // i do list[1] lze vložit libovolného potomka for (int i=0; i<2; i++) { System.out.println("Area: " + list[i].getarea()); Vytiskne: Area: 314 Area: 200 Takže jaká je situace? getarea() třídy GrObj2D je sice abstraktní (a nemá definované žádné chování), ale je deklarovaná ve třídě GrObj2D a tedy na jakýkoliv objekt, který lze typovat jako GrObj2D (je odděděný od GrObj2D), lze volat metodu getarea() díky polymorfismu se zavolá "ta správná implemetace metody getarea()" Třídě, které má nějakou (jednu nebo více) abstraktní metodu se říká abstraktní třída Rozhraní / Interface v dalším textu budu z pedagogických důvodů používat termín interface, i když i český překlad rozhraní je zcela běžně používaný (i když méně často než interface) interface je "něco jako třída, jejíž všechny operace jsou abstraktní" tj. "něco jako abstraktní třída, jejíž všechny operace jsou abstraktní" za takovou definici by mne OOP puristi ukamenovali ve skutečnosti i koncepčně je to trochu jinak, ale pro nás začátečníky je to velmi dobré přirovnání existuje množství literatury, kde se lze dočíst jak to přesně je ukažme si použití interface na příkladě bankovní aplikace která modeluje klienty banky třídou Custmer s atributy name, address, account pobočky banky třídou Branch s atributy address, customer, branch manager bankovní účty třídou Account a atributy owner, balance, currency a mějme následující problém aplicakce by měla periodicky archivovat stav všech klientů, poboček i účtů archivovaná data se budou ukládat do archivního souboru nejprve si ukážeme, špatné řešení -- tzv. object-based programování (bez použití interface): 8

9 při naivním řešení problému se aplikace poskládá jako množina interagujících objektů jeden Archiver objekt a spousta Customer, Branch a Account objektů ke každé kategorii objektů se nadefinuje konkrétní (tj. ne abstraktní) třída část třídy Customer může vypadat třeba takto: a Archiver takto: metoda doarchive() uloží stav aplikace (tj. stav všech objektů v aplikaci); zpracovává tři typy objektů: Customer, Branch a Account Customer[] customerlist; Branch[] branchlist; Account[] accountlist; void doarchive() { // zpracuj data klientu for (all items c in customerlist) { name = c.getname(); address = c.getaddress(); account = c.getaccount();... // zapis jmeno, adresu a ucet do archivniho souboru 9

10 // zpracuj data pobocek for (all items b in branchlist) {... // zpracuj data uctu for (all items a in accountlist) {... instanciace aplikace pak může vypadat nějak takto Archiver archiver = new Archiver(); // vytvor archivare Customer c1 = new Customer(); // vytvor objekty (instance) klientu Customer c2 = new Customer();... Customer cn = new Customer(); Branch b1... // vytvor objekty (instance) pobocek Account a1... // vytvor objekty (instance) uctu archiver.addcustomer(c1); archiver.addcustomer(c2);... // nahraj objekty (instance) klientu jeden po druhem do archivare archiver.addbranch(b1);... // nahraj objekty (instance) pobocek jeden po druhem do archivare archiver.addaccount(a1);... // nahraj objekty (instance) uctu jeden po druhem do archivare archiver.doarchive(); // trigger archive toto řešení má řadu nevýhod Archiver je velmi náchylný na změny aplikace -- např. změní-li se třída Customer, musí se změnit i Archiver :-( Archiver sice potřebuje přístup pouze ke get* metodám tříd Customer, Branch a Account, ale ve skutečností má přístup i k dalším datům, protoze get* metody vracejí objekty (v tomto případě String), nad kterými lze provádět další operace a tím je například i měnit (!), což nechce programátorovi třídy Archiver dovolit Tento přístup k objetům typu String není potřeba -- stačilo by nám méně není to pěkné z pohledu zapouzdření 10

11 a hlavně je to potenciálně velmi nebezpečné, protože Archiver by mohl (kdyby se jeho programátor dopusil chyby, a to se stavá, veřte nebo ne) měnit data klientů, poboček i účtů (a to by od archivačního subsystému jistě nikdo nečekal) Lepší řešení našeho bankovního problému je následující definujeme interface, které zapouzdří operace archivovatelných objektů které Archiver potřebuje volat tím oddělíme Archiver a archivovatelné třídy, takže už na sobě nebudou závislé -- změna jedné třídy tak nevynutí změnu třídy Archiver (a to je pro softwarevé inženýry velmi cenná vlastnost) toto oddělění (anglicky decoupling) se realizuje prostrřednictvím interface Archivable, které budou Customer, Branch a Account implementovat ("jakoby dědit".. je to stejné jako dědičnost, ale v případě interface se neříká "dědit" ale "implementovat") protože interface metody pouze deklaruje, ale nedefinuje (stejně jako abstraktní třída), nutí tím "podtřídy" (správně se jim říká implementující třídy) tyto metody dodefinovat (= napsat jim tělo) Archiver se pak může dívat na třídy Customer, Branch a Account jen jako na Archivable objekty, které implementují metodu getarchiveimage() a nemusí ho zajímat, jak přesně jsou tyto tři třídy implementovány -- stačí, že ví, že metoda getarchiveimage() vrací řetězec (String), který Archiver jen uloží do souboru; získávání dat z tříd Customer, Branch a Account bylo delegováno na třídy samostné (které koneckonců nejlépe ví, jak řetězec nejlépe poskládat... resp. jejich programátoři to ví nejlépe) díky polymorfismu si Archiver může být jistý, že bude vyvolána vždy ta správná metoda kód Archivable je: Interface Archivable { public String getarchiveimage(); 11

12 kód Archiveru pak vypadá takto (je teď mnohem elegantnejší): Class Archiver { Archivable[] list; // mame jen 1 seznam (už ne 3) void doarchive() { // zpracuj archivable objekty for (all items a in list) { string = a.getarchiveimage(); // a je typu Archivable soubor.println(string) // zapis do souboru retezce vraceneho metodou getarchiveimage() void addarchivable(archivable newitem) { list.add(newitem); A instanciační kód je: Archiver archiver = new Archiver(); // create archiver Archivable c1 = new Customer(); // create customer objects... Archivable cn = new Customer(); Archivable b1... // create branch objects Archivable a1... // create account objects archiver.add(c1);... // load customer objects archiver.add(b1);... // load branch objects archiver.add(a1);... // load account objects archiver.doarchive(); // trigger archiver Archivable je opravdu a doslova definice "rozhraní", která se třídy Customer, Branch a Account zavazují splnit (chcete-li poskytovat). Archiver se tak může spolehnout, že když zavolá metody getarchiveimage() dostane relevantní data (tedy nejaky smysluplny String). Říkáme, že rozhraní Archivable je (tj. funguje jako) smlouva (contract) mezi Archiver a třídami Customer, Branch a Account (odtud slavné "design by contract"). Všiměte se, jak se nám aplikace zlepšila z hlediska její údržby. Když nyní (po letech bezproblémového provozu) potřebujeme vyměnit část aplikace Customer za novější a lepší verzi (řekněmě NobleCustomer), nemusíme nijak editovat, překládat a testovat třídu Archiver. To je velká úspora času programátorů. Příklad z praxe: interface Observable ( [<?xml version="1.0"?> <code > > ]) je pro vývoj grafického uživatelského rozhraní naprosto nepostradatelná; probereme jej na třetí přednášce. 12

13 Další čtení

1. Dědičnost a polymorfismus

1. Dědičnost a polymorfismus 1. Dědičnost a polymorfismus Cíl látky Cílem této kapitoly je představit klíčové pojmy dědičnosti a polymorfismu. Předtím však je nutné se seznámit se základními pojmy zobecnění neboli generalizace. Komentář

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

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

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

Výčtový typ strana 67

Výč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í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

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

Třídy. Instance. Pokud tento program spustíme, vypíše následující. car1 má barvu Red. car2 má barvu Red. car1 má barvu Blue.

Tří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í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

Bridge. Známý jako. Účel. Použitelnost. Handle/Body

Bridge. 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íce

PB161 Programování v jazyce C++ Přednáška 7

PB161 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íce

11 Diagram tříd, asociace, dědičnost, abstraktní třídy

11 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íce

PB161 Programování v jazyce C++ Přednáška 7

PB161 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íce

Základy objektové orientace I. Únor 2010

Zá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íce

24. listopadu 2013, Brno Připravil: David Procházka

24. listopadu 2013, Brno Připravil: David Procházka 24. listopadu 2013, Brno Připravil: David Procházka Dědičnost Základy objektového návrhu Časná a pozdní vazba Strana 2 / 22 Obsah přednášky 1 Časná a pozdní vazba 2 Rozhraní pro dědičnost 3 Konstruktory

Více

Programování II. Polymorfismus

Programování II. Polymorfismus Programování II Polymorfismus Osnova přednášky Vztah přetížení, překrytí a protected přístupu. Co je polymorfismus? Příklad. Přetížení, překrytí, protected Přetížení x překrytí Přetížením řešíme doplnění

Více

Jazyk C# (seminář 3)

Jazyk 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í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

Programování II. Abstraktní třída Vícenásobná dědičnost 2018/19

Programování II. Abstraktní třída Vícenásobná dědičnost 2018/19 Programování II Abstraktní třída Vícenásobná dědičnost 2018/19 Osnova přednášky Polymorfismus - důsledky. Abstraktní třída. Vícenásobná dědičnost. Polymorfismus - důsledky Polymorfismus Polymorfismus je

Více

IB111 Programování a algoritmizace. Objektově orientované programování (OOP)

IB111 Programování a algoritmizace. Objektově orientované programování (OOP) IB111 Programování a algoritmizace Objektově orientované programování (OOP) OP a OOP Objekt Kombinuje data a funkce a poskytuje určité rozhraní. OP = objektové programování Vše musí být objekty Např. Smalltalk,

Více

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

Viditelnost (práva přístupu) Tomáš Pitner, upravil Marek Šabo Viditelnost (práva přístupu) Tomáš Pitner, upravil Marek Šabo Viditelnost Přístup ke třídám i jejim prvkům lze (podobně jako např. v C++) regulovat. Přístupem se rozumí jakékoli použití dané třídy, prvku

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

3. Je defenzivní programování technikou skrývání implementace? Vyberte jednu z nabízených možností: Pravda Nepravda

3. Je defenzivní programování technikou skrývání implementace? Vyberte jednu z nabízených možností: Pravda Nepravda 1. Lze vždy z tzv. instanční třídy vytvořit objekt? 2. Co je nejčastější příčinou vzniku chyb? A. Specifikace B. Testování C. Návrh D. Analýza E. Kódování 3. Je defenzivní programování technikou skrývání

Více

Programování v C++ 1, 6. cvičení

Programová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í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

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

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

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

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

Při studiu tohoto bloku se předpokládá, že student je zvládá základy programování v jazyce Java s využitím vývojového prostředí NetBeans.

Při studiu tohoto bloku se předpokládá, že student je zvládá základy programování v jazyce Java s využitím vývojového prostředí NetBeans. 1 Grafické rozhraní Studijní cíl Tento blok je věnován vytváření programů s využitím grafického rozhraní (GUI). Vysvětlen bude základní filozofie pro vytváření aplikací s GUI ve srovnání s konzolovými

Více

Programování II. Dědičnost změna chování 2018/19

Programování II. Dědičnost změna chování 2018/19 Programování II Dědičnost změna chování 2018/19 Osnova přednášky Rozšíření chování. Změna chování. Příklad. Rozšíření chování Když rozšiřujeme chování Můžeme bezpečně použít to, co už máme. Nehrozí žádný

Více

Dalším příkladem může být například výstup dat na různá zařízení, souborů, grafických rozhraní, sítě atd.

Dalším příkladem může být například výstup dat na různá zařízení, souborů, grafických rozhraní, sítě atd. 1. Zapouzdření Cíl látky Tento blok nejdříve přiblíží zásadu zapouzdření a odpoutání kódu a po té na relacích, jako jsou asociace, agregace a kompozice, vysvětlí jak lze objektový zdrojový kód zapouzdřovat

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

Pokročilé programování v jazyce C pro chemiky (C3220) Operátory new a delete, virtuální metody

Pokročilé programování v jazyce C pro chemiky (C3220) Operátory new a delete, virtuální metody Pokročilé programování v jazyce C pro chemiky (C3220) Operátory new a delete, virtuální metody Dynamická alokace paměti Jazyky C a C++ poskytují programu možnost vyžádat si část volné operační paměti pro

Více

Dě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.

Dě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íce

Programování v C++ 3, 3. cvičení

Programová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í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

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

3. 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í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

Dynamicky vázané metody. Pozdní vazba, virtuální metody

Dynamicky vázané metody. Pozdní vazba, virtuální metody Dynamicky vázané metody Pozdní vazba, virtuální metody Motivace... class TBod protected: float x,y; public: int vrat_pocet_bodu() return 1; ; od třídy TBod odvodíme: class TUsecka: public TBod protected:

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

Chování konstruktorů a destruktorů při dědění

Chování konstruktorů a destruktorů při dědění Dědičnost V objektově orientovaném programování je dědičnost způsob, jak vytvořit novou třídu použitím již existujících definic jiných tříd. Takto vytvořené třídy přebírají vlastnosti a metody svého předka

Více

Třída. Atributy. Operace

Třída. Atributy. Operace Class Diagrams Třída Atributy Operace Třída Třída je jakýsi prototyp objektů. Za třídou si můžeme představit množinu jejích instancí. Každý objekt dané třídy má stejnou množinu atributů (proměnných) a

Více

PB161 Základy OOP. Tomáš Brukner

PB161 Základy OOP. Tomáš Brukner PB161 Základy OOP Tomáš Brukner Sylabus - Co je to OOP? Jaké jsou základní principy OOP? Jak se projevují v C++? https://cs.wikipedia.org/wiki/strahovská_knihovna SELECT * FROM books WHERE pages < 250

Více

Využití OOP v praxi -- Knihovna PHP -- Interval.cz

Využ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í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

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

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

Objektové programování

Objektové 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íce

Programování II. Návrh programu I 2018/19

Programování II. Návrh programu I 2018/19 Programování II Návrh programu I 2018/19 Osnova přednášky Co víme? Objektový návrh programu. Příklad. Co víme? Třída Třída je popisem objektů se společnými vlastnostmi. class private:

Více

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

11. 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íce

Quo vadis programování? Automatizace vyhodnocování studentských úloh

Quo vadis programování? Automatizace vyhodnocování studentských úloh Vaše jistota na trhu IT Quo vadis programování? Automatizace vyhodnocování studentských úloh Rudolf PECINOVSKÝ rudolf@pecinovsky.cz Vladimír Oraný vladimir.orany@gmail.com Vaše jistota na trhu IT Obsah

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

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

Programování II. Návrh programu II

Programování II. Návrh programu II Programování II Návrh programu II Osnova přednášky Dědičnost shrnutí. Návrh programu s využitím dědičnosti Dědičnost shrnutí Klíčové otázky CO je dědičnost? PROČ použít dědičnost? KDY použít dědičnost?

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

NMIN201 Objektově orientované programování 1 / :36:09

NMIN201 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

NPRG031 Programování II 1 / :25:46

NPRG031 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íce

III/2 Inovace a zkvalitnění výuky prostřednictvím ICT

III/2 Inovace a zkvalitnění výuky prostřednictvím ICT Číslo a název šablony Číslo didaktického materiálu Druh didaktického materiálu Autor Jazyk Téma sady didaktických materiálů Téma didaktického materiálu Vyučovací předmět Cílová skupina (ročník) Úroveň

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

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

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

Programování II. Třídy a objekty (objektová orientovanost) 2018/19

Programování II. Třídy a objekty (objektová orientovanost) 2018/19 Programování II Třídy a objekty (objektová orientovanost) 2018/19 Osnova přednášky Objektový přístup (proč potřebujeme objekty). Třídy, objekty,... Příklad. Proč potřebujeme objekty? Udržovatelnost softwaru

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

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

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

Pokročilé programování v jazyce C pro chemiky (C3220) Dědičnost tříd v C++

Pokročilé programování v jazyce C pro chemiky (C3220) Dědičnost tříd v C++ Pokročilé programování v jazyce C pro chemiky (C3220) Dědičnost tříd v C++ Dědičnost tříd Dědičnost umožňuje vytvářet nové třídy z tříd existujících tak, že odvozené třídy (tzv. potomci) dědí vlastnosti

Více

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

public class Karel { private int position; public boolean issmiling; public int getposition() { return position; Objekty, třídy a hierarchie tříd Interface a abstraktní třídy Dědičnost Message passing Class diagramy a příklady systémů modelovaných pomocí OOP Volba správného přístupu Rozdíl mezi asociací, agregací

Více

6 Objektově-orientovaný vývoj programového vybavení

6 Objektově-orientovaný vývoj programového vybavení 6 Objektově-orientovaný vývoj programového vybavení 6.1 Co značí objektově-orientovaný - organizace SW jako kolekce diskrétních objektů, které zahrnují jak data tak chování objekt: OMG: Objekt je věc (thing).

Více

Návrhové vzory OMO, LS 2014/2015

Návrhové vzory OMO, LS 2014/2015 Návrhové vzory OMO, LS 2014/2015 Motivace Cílem objektového návrhu je strukturu aplikace navrhnout tak, aby splňovala následující kritéria: snadná rozšiřitelnost účelnost testovatelnost dokumentovatelnost

Více

Funkční objekty v C++.

Funkční objekty v C++. Funkční objekty v C++. Funkční objekt je instance třídy, která má jako svou veřejnou metodu operátor (), tedy operátor pro volání funkce. V dnešním článku si ukážeme jak zobecnit funkci, jak používat funkční

Více

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

SOUBORY, VSTUPY A VÝSTUPY POKRAČOVÁNÍ SOUBORY, VSTUPY A VÝSTUPY POKRAČOVÁNÍ Vstupy a výstupy pokračování Kódování textů Texty (řetězce nebo znaky) v jazyce C# jsou v paměti uloženy v kódování označovaném běžně Unicode (kódová stránka 1200).

Více

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

Vytvář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íce

Mnohotvarost (polymorfizmus)

Mnohotvarost (polymorfizmus) Mnohotvarost (polymorfizmus) TYPY MNOHOTVAROSTI... 2 PŘETĚŽOVÁNÍ METOD, PŘETĚŽOVÁNÍ OPERACÍ... 3 PŘETÍŽENÍ OPERÁTORŮ... 4 ČASTO PŘETĚŽOVANÉ OPERÁTORY... 4 PŘEPISOVÁNÍ... 7 VIRTUÁLNÍ METODY... 10 SEZNAM

Více

OMO. 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 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íce

Virtuální metody - polymorfizmus

Virtuální metody - polymorfizmus - polymorfizmus - potomka lze použít v místě, kde je možné použít předka - v dosud probraných situacích byly vždy volány funkce, které jsou známy již v době překladu. V situaci, kdy v době překladu není

Více

Programování v C++ 2, 4. cvičení

Programování v C++ 2, 4. cvičení Programování v C++ 2, 4. cvičení statické atributy a metody, konstruktory 1 1 Fakulta jaderná a fyzikálně inženýrská České vysoké učení technické v Praze Zimní semestr 2018/2019 Přehled Přístupová práva

Více

Projekty pro výuku programování v jazyce Java

Projekty pro výuku programování v jazyce Java JIHOČESKÁ UNIVERZITA V ČESKÝCH BUDĚJOVICÍCH Pedagogická fakulta Katedra informatiky Akademický rok: 2006/2007 TEZE BAKALÁŘSKÉ PRÁCE Projekty pro výuku programování v jazyce Java Jméno: František Přinosil

Více

10 Balíčky, grafické znázornění tříd, základy zapozdření

10 Balíčky, grafické znázornění tříd, základy zapozdření 10 Balíčky, grafické znázornění tříd, základy zapozdření 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 příkazům balíčkům, grafickému

Více

9. Polymorfismus a rozhraní

9. 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íce

Aplikace s grafickým uživatelským rozhraním

Aplikace s grafickým uživatelským rozhraním Aplikace s grafickým uživatelským rozhraním 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 1 Typy aplikací Konzolová

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

Kód, který se nebude často měnit

Kód, který se nebude často měnit Factory Method Úvod - problém Mějme obchod s auty: public class OrderCars { public Car ordercar(string model) { Car car; Při přidání nového modelu je nutné upravit if(model.equals("mark IV")) car = new

Více

10 Generické implementace

10 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í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

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

Platforma Java. Petr Krajča. Katedra informatiky Univerzita Palackého v Olomouci. Petr Krajča (UP) KMI/PJA: Seminář V. 27. říjen, / 15

Platforma Java. Petr Krajča. Katedra informatiky Univerzita Palackého v Olomouci. Petr Krajča (UP) KMI/PJA: Seminář V. 27. říjen, / 15 Platforma Java Objektově relační mapování II Petr Krajča Katedra informatiky Univerzita Palackého v Olomouci Petr Krajča (UP) KMI/PJA: Seminář V. 27. říjen, 2016 1 / 15 Dotazování vyhledání objektu podle

Více

7.5 Diagram tříd pokročilé techniky

7.5 Diagram tříd pokročilé techniky 7.5 Diagram tříd pokročilé techniky Stereotypy - jeden ze základních prostředků rozšiřitelnosti UML - pro modelovací konstrukce neexistující v UML, ale podobné předdefinované v UML definované uživatelem

Více

Polymorfismus. Časová náročnost lekce: 3 hodiny Datum ukončení a splnění lekce: 30.března

Polymorfismus. Časová náročnost lekce: 3 hodiny Datum ukončení a splnění lekce: 30.března Polymorfismus Cíle lekce Cílem lekce je vysvětlit význam pojmu polymorfismus jako základní vlastnosti objektově orientovaného programování. Lekce objasňuje vztah časné a pozdní vazby a jejich využití.

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

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

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

Programovací jazyk Java

Programovací 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

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

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

public static void main(string[] args) { System.out.println(new Main().getClass().getAnnotation(Greet.class).text()); Anotace a Hibernate Aleš Nosek, Ondřej Vadinský, Daniel Krátký Anotace v Javě Anotace jsou novinkou v Javy verze 5. Anotace umožňují doplnit kód Javy o dodatečné informace. Zapisují se přímo do zdrojového

Více

Objektově orientované programování v jazyce Python

Objektově orientované programování v jazyce Python Objektově orientované programování v jazyce Python Základní pojmy objektově orientovaného programování Objekt vychází z reálného světa. Má dva charakteristické rysy. Všechny objekty mají stav Všechny objekty

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

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

Zapouzdření. Tomáš Pitner, upravil Marek Šabo

Zapouzdření. Tomáš Pitner, upravil Marek Šabo Zapouzdření Tomáš Pitner, upravil Marek Šabo Co je zapouzdření Naprosto zásadní vlastnost objektového přístupu, možná nejzásadnější Jde o spojení dat a práce s nimi do jednoho celku - objektu Data jsou

Více