Objektově orientované programování 1 XOBO1. Autor: Doc. Ing. František Huňka, CSc.
|
|
- Luděk Růžička
- před 9 lety
- Počet zobrazení:
Transkript
1 Objektově orientované programování 1 XOBO1 Autor: Doc. Ing. František Huňka, CSc. 1
2 Seznam kapitol 1 Základní pojmy Úvod do tříd a objektů Vývojové prostředí Jednotný modelovací jazyk (Unified Modeling Language) Diagram případů užití Diagram tříd Interakční diagramy Stavový diagram Diagram aktivit Fyzické diagramy Třída Třída & instance (objekt) Zprávy a metody mechanismus posílání zpráv Primitivní a objektové (referenční) datové typy Metody třídy Třídy a objekty detailnější pohled Klíčové slovo (pseudoproměnná) this Klíčové slovo final a jeho použití Statické atributy, statické metody třídní atributy (proměnné), třídní metody Metoda main Skládání objektů kompozice & agregace. Přetěžované konstruktory Sémantika agregace Sémantika kompozice Deklarace tříd s přetíženými konstruktory Návrhové vzory (Design Patterns) Přepravka Singleton jedináček Balíčky, zapouzdření, samostatná aplikace JAR soubory Balíčky a příkaz import Samostatná aplikace JAR soubory Dědičnost. Vztahy mezi nadtřídou a podtřídami. Konstruktory v podtřídách. Třída Object Ukrývání informací v hierarchii tříd Překrývání (zastiňování) metod další specializace metod Třída Object hierarchie tříd v javovských balíčcích, abstraktní třídy a metody Polymorfismus. Abstraktní třídy a metody. Rozhraní tvorba a použití Abstraktní třída a abstraktní metody Rozhraní - tvorba, použití Využití polí pro ukládání objektů. Realizace zásobníku a fronty s využitím polí Návrhové vzory pokračování Jednoduchá tovární metoda Simple Factory Metod Návrhový vzor State (stav) Návrhový vzor Proxy Návrhový vzor Command...99 Příklady k samostatnému zpracování a odeslání em ke kontrole
3 1 Základní pojmy 1.1 Úvod do tříd a objektů V OOP se na rozdíl od klasického pojetí operuje pouze s objekty, které popisují jak datovou, tak i procesní stránku modelované problematiky. Objekt je určitá jednotka, která modeluje nějakou část reálného světa a z funkčního pohledu víc odpovídá malému kompaktnímu programu, než jedné proměnné příslušného datového typu, i když z programátorského pohledu takovou proměnnou je. Objektový systém je potom souborem takových vzájemně integrujících malých programových celků. Datová povaha objektu je dána tím, že objekty se skládají z příslušných vnitřních dat složek (atributů), což jsou v rozumném případě opět jiné objekty. Funkční povaha každého objektu je dána tím, že každý objekt má jakoby okolo svých vnitřních dat obal či zeď, která je tvořena množinou samostatných částí kódu, jenž jsou nazývány metodami. Metody slouží k tomu, aby popisovaly, co daný objekt dokáže udělat se svými složkami. Se složkami (atributy) daného objektu lze manipulovat (číst, nastavovat, měnit) pouze pomocí kódu nějaké metody tohoto objektu. Každý objekt dovoluje provádět jen ty operace, které povoluje jeho množina metod. Proto se hovoří o zapouzdření dat uvnitř objektů. Množina povolených operací s objektem se nazývá protokol objektu, což je také z hlediska vnějšího systému jeho jediný a plně postačující popis (charakteristika). Popis vnitřní struktury objektu (data) je vzhledem ke svému zapouzdření a závislosti na metodách z hlediska vnějšího systému nedůležitý. V objektovém modelu výpočtu se pracuje pouze se dvěma možnými operacemi s objekty. První z nich je pojmenování nějakého objektu (přiřazení k proměnné). Druhou je tzv. poslání zprávy. Zpráva představuje žádost o provedení operace - metody nějakého objektu. Součásti zprávy mohou být parametry zprávy, což jsou vlastně data - objekty, které představují dopředný datový tok (ve směru šíření zprávy) směrem k objektu přijímajícímu danou zprávu. Poslání zprávy má za následek provedení kódu jedné z metod objektu, který zprávu přijal, tak tento zmíněný kód také většinou dává nějaký výsledek v podobě nějakých dat - objektů, které představují zpětný datový tok ve směru od objektu - příjemce zprávy k objektu - vysílači zprávy (tj. v opačném směru k šíření zprávy). Vzhledem k možnostem kódů metod se výsledky po poslaných zprávách neomezují pouze na hodnoty jednotlivých složek objektů, protože jsou dány libovolně složitým výrazem příslušné metody nad množinou všech složek objektu sjednocenou s množinou parametrů zprávy. Zpráva je žádost, aby objekt provedl jednu ze svých operací. Zpráva specifikuje o jakou operaci se jedná, ale ne jak by se operace měla provést. Objekt, jemuž je posílána zpráva, určuje, jak provést požadovanou operaci. Běžící objektově orientovaný program je tvořen soustavou mezi sebou navzájem komunikujících objektů, který je řízen především sledem vnějších událostí z rozhraní programu. Hlavní program v objektové aplikaci tvoří jen vytvoření příslušné instance (nebo instancí) a zaslání těmto instancím odpovídajících zpráv. Hlavní program bývá tedy velmi krátký za předpokladu, že využíváme knihovny tříd. Obecně se model posílání zpráv popisuje pomocí okamžiku určení kódu, kterým se provede určitá operace. Rozlišujeme tedy tzv. pozdní a brzkou vazbu kódu. Chápe se tím doba, kdy je 3
4 znám kód metody, kterou se provede činnost způsobena posláním zprávy. V objektových systémech se setkáváme především s pozdní vazbou - kód operace je určen až za běhu programu, v okamžiku, kdy objekt začne provádět vyžádanou činnost. Při statickém chápání volání podprogramu je naopak kód operace znám již v době překladu programu - jedná se o brzkou vazbu. Polymorfismus Koncept posílání zprávy a vykonání metody nahrazuje koncept volání funkce (podprogramu) v klasických výpočetních modelech. Na rozdíl od volání funkce je tu však v případě použití pozdní vazby od sebe odlišen požadavek (to je poslání zprávy) a jeho provedení (to je vykonání metody) objektem přijímajícím zprávu, což dovoluje posílat stejnou zprávu různým objektům s různým účinkem. Takové objekty jsou potom z pohledu těchto zpráv navzájem zaměnitelné. Pro příklad uveďme zprávu dej svoji velikost. Pošleme-li ji objektu, který reprezentuje nějakou osobu, tak sdělí její výšku. Pošleme-li ji objektu představujícímu množinu nějakých číselných hodnot, sdělí jejich počet, pošleme-li ji objektu představujícímu nějaký obrázek, sdělí jeho rozměr atd. Je tomu tak proto, že všechny uvedené objekty jsou polymorfní a zpráva dej velikost může být poslána kterémukoliv z nich. Důležitá je tu ta skutečnost, že o výběru odpovídající metody na poslanou zprávu rozhoduje přijímací objekt, což znamená, že vysílací objekt (nebo část programu) se o detaily zpracování nemusí starat. Polymorfismus tedy v objektovém programování znamená, že ta samá zpráva může být poslaná rozličným objektům bez toho, že by nás při jejím poslání zajímala implementace odpovídajících metod a datových struktur objektu - příjemce zprávy; každý objekt může reagovat na poslanou zprávu po svém svoji metodou. Programátor není nucen brát ohled u významově podobných operací na to, že jsou požadovány od různých objektů. Výhody objektově orientovaného přístupu Jako výhody objektově orientovaného přístupu je často uváděno: blízkost chápání reálného světa, stabilita návrhu, znuvupoužitelnost. Blízkost chápání reálného světa V objektově orientovaném přístupu se vyjadřujeme a pracujeme v pojmech reálného světa a to se neliší od způsobu chápání reálného světa. Objektově orientovaná analýza je založena na pojmech, které jsme se nejprve učili ve školce; objekty, atributy, třídy, celky a části. Programování je chápáno jako proces modelování viz obr Na levé straně obrázku je referenční systém, který tvoří doménu, kterou modelujeme a na pravé straně je počítačový systém počítačová reprezentace systému reálného světa. Systém reálného světa (referenční systém) je složen z jevů (jednotlivin) reálného světa. Tyto jevy, jednotliviny představují konkrétní věci reálného světa. Tato tužka, tamto stojící zelené auto, modré tričko, které mám na sobě atd. Pomocí jevů se vyjadřují ty nejmenší děti. Koncepty se získají zobecněním (abstrakcí) jevů (jednotlivin). Například když řekneme tužka, nemáme na mysli konkrétní tužku, ale objekt splňující dané vlastnosti. Stejně tak auto jako 4
5 koncept pro nás může představovat nějaké osobní auto (třeba i dané značky) reprezentující dané vlastnosti. Jev je věc, která má danou individuální existenci v reálném světě, nebo v mysli; cokoli reálného. Koncept je zevšeobecňující představa kolekce jevů, založena na znalostech společných vlastností jevů v kolekci. Programování jako proces modelování modelování koncepty specifikující problém realizované koncepty (třídy) abstrakce abstrakce jevy objekty (instance) referenční systém model systému Obr. 1.1 Programování jako proces modelováni Na úrovni modelu systému musí existovat odpovídající prvky, aby se reálný systém mohl realizovat v počítačovém modelu. Tyto prvky jsou představovány objekty (někdy se používá také označení instance). Jevy reálného světa jsou modelovány do objektů počítačového světa. Abstrakcí těchto objektů dostáváme tzv. realizované koncepty, kterým se v počítačové terminologii říká třídy. Třída reprezentuje množinu objektů stejného typu. Jak je z obrázku názorně vidět, koncepty reálného světa jsou modelovány do tříd modelu systému. Stabilita návrhu Místo zaměření se na funkcionalitu systému, je prvním krokem vytvoření fyzikálního modelu reálného světa odpovídající dané aplikaci. Tento model potom vytváří základ pro různé funkce, které systém může mít. Tyto funkce mohou být později měněny a mohou být 5
6 dodávány nové funkce beze změny základního modelu. Objektově orientované programování poskytuje přirozenou kostru pro modelování aplikační domény. Znovupoužitelnost Jedním z dobře známých problémů tvorby software je schopnost znova použitelnosti programových komponent, když se vytváří nové komponenty. Zde máme na mysli úroveň implementace. Funkcionalita existující komponenty je často velmi podobná té, kterou potřebujeme pro nový systém. Z toho důvodu je nová komponenta často implementována kopírováním a modifikací existujícího kódu. To ale znamená, že musí být znova testována. Více problémů navíc způsobuje to, že se ztrácí vztah mezi starou a novou komponentou; pokud se detekuje chyba v jedné, musí být opraveny obě. Jednou z výhod OOP je, že mají silné konstrukce pro inkrementální programovou modifikaci. Je možné definovat novou komponentu jako inkrementální rozšíření již existující komponenty a udržet tak vztah mezi oběma komponentami. Schopnost vytvářet programy inkrementálním rozšiřováním je považována za jednu z hlavních výhod OOP. Nevýhodou inkrementální modifikace je, že knihovny komponent odráží historický vývoj těchto komponent. Navíc vztahy mezi komponenty jsou především diktovány potřebou pro maximálním sdílení kódu, což je často v konfliktu s požadavky modelování. Celý objektově orientovaný přístup budeme ilustrovat s využitím objektově orientovaného jazyka Java. V tomto jazyce bývá zvykem, že nejdříve deklarujeme všechny třídy (většinou každou uložíme do samostatného souboru) a pak deklarujeme třídu s příponou test, která vytvoří objekty (instance) od deklarovaných tříd a zasílá objektům odpovídající zprávy, které vyvolávají příslušné metody a dochází k běhu programu. Pokud deklarujeme např. třídu Hello, bude mít pak třída, která aplikaci spustí název HelloTest. První příklad Jak jinak začít, než pozdravením: /** * Class Hello bude uložena v souboru Hello.java */ class Hello //Metoda, která dělá tu práci public void go() System.out.println("Hello, world"); /** * třída HelloTest uložena v souboru HelloTest.java * main method hlavní metoda pro spuštění celé aplikace */ class HelloTest public static void main(string[] args) Hello hi = new Hello(); // vytvoření objektu hi třídy Hello hi.go(); //vykonání metody go zaslání zprávy go objektu hi 6
7 třída Hello obsahuje pouze metodu go, jejíž jedinou operací je tisk textu Hello World, třída HelloTest deklaruje a vytváří objekt hi a pak zašle zprávu go objektu hi (tím se provede příslušná operace Význam jednotlivých částí definice třídy je následující: public Je klíčové slovo a označuje, že třída je veřejná a že s ní proto může pracovat kdokoli. Je sice možné definovat třídu i bez použití klíčového slova public, ale tuto možnost zatím využívat nebudeme. class Toto klíčové slovo označuje, že za ním bude následovat deklarace třídy. Hello Je název nebo identifikátor třídy, který musí splňovat pravidla pro tvorbu identifikátorů v jazyce Java. Dále název veřejné třídy musí být shodný s názvem souboru, v němž je uložen zdrojový kód deklarace veřejné třídy. Soubor se zdrojovým kódem musí mít příponu.java. V jednom souboru tedy může být nanejvýš zdrojový kód jedné veřejné třídy. Deklarace nejjednodušší třídy je následující: public class TridaA Celý předchozí příklad může být samozřejmě uveden v jedné třídě a pak kód vypadá následovně: class Hello //Method that does the work public void go() System.out.println("Hello, world"); /** * main method for testing outside BlueJ */ public static void main(string[] args) Hello hi = new Hello(); hi.go(); 1.2 Vývojové prostředí Protože nedílnou součástí tohoto kurzu je jazyk UML (viz dále), pro tvorbu aplikací používáme vývojové prostředí BlueJ. Toto prostředí je výhodné zejména pro výuku objektově orientovaného programování a je ke stažení na adrese Mezi jeho charakteristiky patří: jednoduchost, 7
8 názornost slučuje možnost klasického textového zápisu programu s možností definice jeho architektury v grafickém prostředí. Grafické prostředí splňuje požadavky diagramu tříd jazyka UML. Toto prostředí je schopno vytvořit na základě grafického návrhu kostru programu a průběžně zanášet změny v programu do jeho grafické podoby a naopak změny v grafickém návrhu zanášet do textové podoby. interaktivnost umožňuje přímou práci s objekty. Ve vývojových prostředích se pracuje s projekty, které od samostatných programů mohou obsahovat jeden, nebo více programů (podle požadavků programátora. 1.3 Jednotný modelovací jazyk (Unified Modeling Language) Unified Modeling Language (UML) je standardní jazyk pro specifikaci, zobrazení (vizualizaci) vytváření a dokumentaci programových systémů, stejně také pro business modeling a jiné neprogramové systémy. UML je nejrozšířenější schéma grafické reprezentace pro modelování objektově orientovaných systémů. UML reprezentuje kolekci nejlepších inženýrských zkušeností, jaké byly úspěšně prověřeny v modelování rozsáhlých složitých systémů. UML využívá hlavně grafickou notaci pro vyjádření návrhu programových projektů. Používání UML pomáhá projektovým týmům komunikovat, zkoumat potenciální návrhy a prověřovat návrh architektury programovým systémům. Cíle UML 1. Poskytnout uživatelům jednoduchý, expresivní vizuální modelovací jazyk, aby mohly vyvíjet a měnit smysluplné modely. 2. Poskytnout mechanismus na rozšíření a další specifikaci základních konceptů. 3. Být nezávislý na konkrétním programovacím jazyku a vytvářených procesech. 4. Poskytnout formální základ pro porozumění jazyku modelování. 5. Podpořit vysoce úrovňové rozvojové koncepty jako spolupráce, programové balíčky (frameworks), vzory (patterns) a komponenty. 6. Integrovat nejlepší zkušenosti. Typy diagramů UML Každý UML diagram je navržen, aby dovolil vývojářům a zákazníkům mít pohled na programový systém z různých perspektiv a z měnících se stupňů abstrakce. UML diagramy obecně vytváření vizuální modelovací prostředky, které zahrnují: Diagram případů užití use case diagram Diagram tříd class diagram Interakční diagramy Sekvenční diagram Diagram spolupráce Stavový diagram 8
9 Diagram aktivit Fyzické diagramy Diagram komponent Diagram rozmístění deployment diagram Diagram případů užití Use case (případ užití) je specifikace posloupnosti činností (včetně měnících se a chybových posloupností, které systém může vykonávat prostřednictvím interakce (vzájemného působení) s vnějšími účastníky. Případ užití je něco, co účastník (aktor) od systému očekává. Je to případ užití systému specifickým účastníkem. Případy užití jsou vždy iniciovány účastníkem. Případy užití jsou vždy napsány z pohledu účastníka. Use case diagram (diagram případů užití) zobrazuje vztah mezi účastníky a případy užití (use cases). Use case diagram má dvě hlavní komponenty: Use cases (případy užití) Účastníky - aktory (actors) U s e C a s e A c t o r Účastník - aktor reprezentuje uživatele, nebo jiný systém, který bude v interakci (vzájemném působení) se systémem, který modelujete. Use case (případ užití) je externí pohled systému, který reprezentuje nějakou činnost, kterou uživatel může vykonávat, aby dokončil úlohu. 9
10 Název systému S y s t é m o b j e d n á v e k p o š t o u Hranice systému Komunikační relace * Z a d a t O b j e d n á v k u D o p r a v c e * * S t o r n o v a t O b j e d n á v k u O d e s l a t K a t a lo g * Z á k a z n í k * * * D o d a t P r o d u k t účastník * O věř i t S t a v O b j e d n á v k y Případ užití D i s p ečer Diagram případu užití může být snadno rozšířen o další činnosti, resp. aktualizovat stávající činnosti Diagram tříd Class diagram (diagram tříd) modeluje strukturu a obsah tříd k čemuž používá navržené prvky jako třídy, pakety a objekty. Také zobrazuje vztahy (relace) jako kompozice, dědičnost, asociaci a další. Jméno třídy atributy operace Zákazník -jméno -adresa -seznampovolání +vyhodnoceníkreditu() +tisk() Obr. 1.2 Základní grafická struktura třídy 10
11 Objednávka -datumpřijetí -jezaplacena -počet -cena +odeslání() +tisk() asociace 0..* 1 Zákazník -jméno -adresa -seznampovolání +vyhodnoceníkreditu() +tisk() kvalifikace kardinalita Obr. 1.3 Grafické označení vazeb mezi třídami Interakční diagramy Sequance diagram (sekvenční diagram) zobrazuje časovou sekvenci objektů účastnící se interakce. Skládá se z vertikální dimenze (čas) a horizontální dimenze (různé objekty). Collaboration diagram (diagram spolupráce) zobrazuje interakce organizované mezi objekty a jejich spojení (vazby) mezi sebou (pořadí zasílaných zpráv mezi objekty). Object1: Class Object2: Class Message1 Message2 Object3: Class Message4 Message3 Obr. 1.4 Sekvenční diagram 11
12 1.3.4 Stavový diagram zobrazuje sekvence stavů, kterými prochází objekt během svého života v závislosti na obdrženém stimulu, spolu s jeho reakcemi a činnostmi Diagram aktivit Zobrazuje speciální stavový diagram, kde většina ze stavů jsou stavy činností a většina přechodů je spouštěna vykonáním akcí ve zdrojových stavech. Tento diagram se zaměřuje na toky řízené vnitřním zpracováním. Používá se k zachycení algoritmů v programovacích jazycích vývojový diagram. pridej stup en do celkem o dpovida prikazu celkem = ce lkem + stupe n pridej 1 do citac odp ovid a prikazu citac = citac + 1 tisk "chyba" [ stupen < 60 ] [ stupen >= 60] tisk "proslo" 12
13 A c tio n S ta te 1 F o r k A c tio n S t a te 2 A c tio n S ta te 3 B r a n c h A c tio n S ta te 4 A c tio n S ta te 5 M e r g e J o in A c tio n S ta te 6 Obr. 1.5 Diagramy aktivit Fyzické diagramy Diagram komponent zobrazuje vysokou úroveň paketové struktury samotného kódu. Jsou zobrazeny závislosti mezi komponentami včetně zdrojového kódu komponent, binárního kódu komponent a spustitelné komponenty. Diagram rozmístění (deployment diagram) zobrazuje konfikuraci prvků běhového zpracování (run-time processing elements) a programových komponent, procesů a na nich žijících objektů. 13
14 Příklady: jsou uvedeny tři jednoduché příklady. Napřed text příkladů projděte bez použití počítače, pak je prověřte na počítači. Příklad 1: Třída Citac, bez metody main, vhodná pro testování v prostředí BlueJ. Explicitně není deklarovaný konstruktor, je použit implicitní konstruktor. public class Citac private int pocet; public int getpocet() return pocet; public void pricti() pocet = pocet + 1; public void odecti() pocet--; public void nuluj() pocet = 0; public String tostring() return "Citac stav: "+getpocet(); public void tisk() System.out.println(this.toString()); //this - odkaz na sebe sama Příklad 2: Stejný příklad doplněný o metodu main a explicitní konstruktor, který nastaví čítač na zadanou hodnotu (objekt c1 na -7, objekt c2 na 0). Pokud deklarujeme ve třídě metodu tostring( ), pak každý objekt této třídy se vypíše jen tím, že se uvede jako argument v metodě println, System.out.println( objekt ). public class Citac private int pocet; // explicitni konstruktor public Citac(int pocet) // stejny idntifikator musime odlisit this this.pocet = pocet; public int getpocet() return pocet; public void pricti() pocet = pocet + 1; public void odecti() pocet--; public void nuluj() pocet = 0; public String tostring() 14
15 return "Citac stav: "+getpocet(); public void tisk() System.out.println(this.toString()); //this - odkaz na sebe sama public static void main(string[] args) Citac c1 = new Citac(-7); Citac c2 = new Citac(0); c1.pricti(); c2.odecti(); c2.odecti(); c1.pricti(); System.out.println("C1 "+c1); System.out.println("C2 "); c2.tisk(); Příklad 3: V tomto příkladě přidáme další datový atribut do třídy Counter a tím bude název. Ten nám pomůže rozlišovat jednotlivé objekty dané třídy při výpisu. public class Citac private int pocet; private String nazev; // explicitni konstruktor public Citac(int pocet, String n) // stejny idntifikator musime // odlisit identifikatory pomoci this this.pocet = pocet; nazev = n; // ruzne identifikatory - nemusime pouzivat this public int getpocet() return pocet; public void pricti() pocet = pocet + 1; public void odecti() pocet--; public void nuluj() pocet = 0; public String tostring() return nazev + " stav: "+getpocet(); public void tisk() System.out.println(this.toString()); //this - odkaz na sebe sama public static void main(string[] args) Citac c1 = new Citac(-7, "Citac c1"); Citac c2 = new Citac(0, "C2"); c1.pricti(); c2.odecti(); c2.odecti(); c1.pricti(); System.out.println("C1 "+c1); System.out.println("C2 "); c2.tisk(); 15
16 Objekt, pojmenování objektu, posílání zprávy, brzká a pozdní vazba, polymorfismus, UML diagramy. Každý objekt obsahuje jak data (atributy), tak metody (funkce, procedury), které umožňují práci s datovými atributy. Liší se tedy od klasického recordu tím, že obsahuje navíc metody. Pojmenování objektu je jeho přiřazení k proměnné. Zpráva zaslaná objektu je žádost o provedení operace. Brzká vazba (early binding) je vazba, kdy kód operace je znám v době překladu. Pozdní vazba (late binding) je vazba, kdy kód operace je znám až za běhu programu. Polymorfismus (vícetvarost) způsobuje, že zaslání stejné zprávy různým objektům způsobí jejich odlišné reakce. UML diagramy prostřednictvím grafického vyjádření pomáhají ve vyjádření daných konkrétních aspektů modelované reality. Co představuje datovou povahu a co funkční povahu objektu? Čím se formálně liší deklarace recordu od deklarace objektu? Znamená polymorfismus to, že objekty reagují stejně na stejnou zprávu? Jaké diagramy v UML rozeznáváme a k čemu se používají? Můžeme v objektově orientovaném jazyce deklarovat strukturu record? 1.1 Specifikuje zpráva, jak se má operace provést? 1.2 Je při pozdní vazbě kód operace určen při překladu? 16
17 1.1 Ne, zpráva je pouze žádost o provedení operace. 1.2 Ne, kód operace pozdní vazby je určen až za běhu programu. V tomto modulu jsou vysvětleny základní pojmy objektově orientovaného programování. Dále jsou jazyk UML jeho funkce a jednotlivé typy diagramů. V následujících kapitolách budeme základní pojmy dále rozvíjet a praktické aplikace doplňovat o odpovídající diagramy jazyka UML. 17
18 2. Třída 2.1 Třída & instance (objekt) Třída popisuje implementaci množiny objektů, které všechny reprezentují stejný druh systémové komponenty (složky). Třídy se zavádějí především z důvodů datové abstrakce, znalostní abstrakce, efektivnímu sdílení kódu a zavedení taxonomie do popisu programové aplikace. V systémech se třídami jsou objekty chápány jako instance tříd. Třída OsobníAuto má pak např. instance Fabia, Seat, Audi. Třída popisuje formu soukromých pamětí a popisuje, jak se provádějí operace. Např. existuje systémová třída, která popisuje implementace objektů, jenž reprezentují obdélníkové plochy. Tato třída popisuje, jak si individuální instance pamatují umístění svých ploch a také jak provádějí operace pro obdélníkové plochy. Každý objekt je instancí třídy. Programování pak sestává z vytváření tříd a specifikuje sekvenci zpráv, které se vyměňují mezi objekty. Objekt (instance třídy) odpovídá v reálném světě jevu, třída má svůj protějšek v konceptu. Instance a třídy jsou si podobné jak ve veřejných vlastnostech, tak v soukromých. Veřejné vlastnosti objektu jsou zprávy které tvoří protokol. Všechny instance jedné třídy mají stejný protokol, protože reprezentují stejný druh komponenty. Individuální vlastnosti objektu tvoří množina atributů, která vytváří jejich soukromou paměť a množinu metod, které popisují, jak provádět operace. Instanční proměnné a metody nejsou přímo přístupné jiným objektům. Všechny instance dané třídy užívají stejnou množinu metod k popisu svých operací. Např. instance které reprezentují obdélníky všechny odpovídají stejné množině zpráv a ony všechny používají stejné metody k určení jak odpovídat. Objekty umí reagovat na zprávy provedením příslušných operací, které jsou popsány ve třídě a sdíleny všemi jejími instancemi. Takové sdílení vede k vyšší efektivnosti při implementaci objektových systémů. Vztah třída-objekt můžeme charakterizovat jako vztah popisu a realizace. Rozdělení objektů na třídy a instance však mění model výpočtu, protože instance obsahují jen data a metody jsou uloženy mimo ně v jejich třídě. Je-li tedy instanci poslána zpráva, tak instance musí požádat svoji třídu o vydání příslušné metody. Kód metody je poté pouze dočasně poskytnut instanci k provedení. Deklarace třídy je základním stavebním kamenem objektově orientovaného přístupu v jazyce Java. 2.2 Zprávy a metody mechanismus posílání zpráv Objekty reagují na zprávy (požadavky), které jsou jim v čase adresované. Reakce objektů na zprávu může být: Jednoduchá odpověď objektu (vrácení hodnoty, nebo objektu), Změna vnitřního stavu objektu, 18
19 Odeslání zprávy jinému objektu, Vytvoření nového objektu Kombinace uvedených možností. Formalizace zápisu, kdy zpráva zaslaná příjemci nezasílá žádnou odpověď (kvalifikátor void při popisu metody): Příjemce.zprava(eventuální parametry zprávy); Formalizace zápisu, kdy zpráva zaslaná příjemci vrací odpověď (která musí být patřičně kvalifikovaná): Odpověď = Příjemce.zpráva(eventuální parametry zprávy); kde: příjemce reprezentuje objekt (instanci dané třídy, zpráva je konkrétní zpráva deklarovaní pro danou třídu (eventuálně její nadtřídy), eventuální parametry zprávy představují skutečné parametry zprávy, které jsou vyžadovány. Mechanismus posílání zpráv, který je využit v objektově orientovaném, paradigmatu je založen na výpočetním modelu klient / server. Odpověď představuje klienta a server je reprezentován Příjemcem zprávy. Např. třída String je poskytovatelem řady standardních služeb pro zpracování řetězců. Třída String server, který poskytuje řetězcově orientované služby aplikacím klientům. Aplikace, která využívá třídu String (její objekty) je klient, který vyžaduje služby serveru vyvoláním odpovídajících metod. Vyvolání metody je prováděno prostřednictvím mechanismu posílání zpráv. String s1 = Libovolny textovy retezec ; // úvodní kvalifikace a //inicializace objektu s1 int n = s1.length(); // n odpověď obsahuje délku řetězce s1 s1 = s1.tolowercase(); // řetězec s1 bude obsahovat pouze malá // písmena Nové objekty nejběžněji vznikají podle popisu třídy (šablony třídy). Třída specifikuje pro své objekty proměnné pro uchování jejich vnitřních stavů a metody (funkce), k vykonávání zpráv. Třídy je možné vytvářet v hierarchii, viz kapitola o dědičnosti. Pro uklízení nepotřebných objektů se stará speciální program garbage collector. V některých OOP jazycích C++ není garbage collector. Běžící objektově orientovaný program je tvořen soustavou mezi sebou navzájem komunikujících objektů, který je řízen především sledem vnějších událostí z rozhraní programu. 19
20 Hlavní program může být tvořen např. pouze deklarací objektu a zasláním zprávy danému objektu. Objekt Základem objektových systémů je objekt. Je to nedělitelná sebeidentifikovatelná entita, obsahující datové atributy, jejich identifikaci a metody, které realizují příslušné operace na těchto datech. Příklady objektů: Čísla, řetězce znaků, Datové struktury: zásobník, fronta seznam, slovník, Grafické obrazce, adresáře souborů, soubory, Kompilátory, výpočetní procesy Grafické pohledy na informace, finanční historie atd. Datový atribut A Datový atribut B Datový atribut C Metoda 1 zpráva Metoda 2 Metoda 3 Metoda 4 Obr. 2.1 Struktura objektu Zapouzdřenost encapsulation Zapouzdřenost patří k základním charakteristikám objektově orientovaného přístupu. Její výhody spočívají zejména v: Programy mohou být testovány po menších částech Odstraní se častá chyba, která bývá skryta ve sdíleném přístupu ke společným datům Interní datová struktura může být změněna bez nutnosti změn okolí objektu (změna názvu datových atributů) Mohou být vytvářeny knihovny objektů, tedy abstrakcí datových typů, které je možné použít v jiných aplikacích 20
21 Je zabezpečena ochrana a identifikace se kterými program pracuje Zapouzdření napomáhá k oddělení rozhraní (interface) viditelná část objektu od implementace (skrytá část deklarace objektu). Z definice objektu vyplývá, že je pro něj typické spojení dat a operací v jeden nedělitelný celek s ochranou dat, tedy zapouzdřením. Data jsou spojena s operacemi tak těsně, že se k nim bez těchto operací nedostaneme. Sebeidentifikace objekt sám o sobě ví kdo je, takže paměť obsahující objekty obsahuje i informace o struktuře svého obsahu. Ukrývání informací Při externím ukrývání informací máme na mysli to, že objekty by neměly zpřístupňovat přímo svá lokální data a ani kódy jednotlivých operací. Objekt je tedy zvenku neprůhledná entita. Při interním ukrývání informací máme na mysli to, že při dědění nemusí mít následníci objektu přístup k lokálním datům předchůdců a také nemusí mít přístup ke kódu jednotlivých operací svých předchůdců. Objekty chápeme jako dynamické entity, které v průběhu výpočtu vznikají, vytvářejí nové objekty a zase zanikají. Zpráva Objekty komunikují s jinými objekty pomocí posílání zpráv. Množina zpráv na kterou objekt reaguje se nazývá protokol (protokol zpráv). Zpráva je žádost, aby objekt provedl jednu ze svých operací. Zpráva specifikuje o jakou operaci se jedná, ale nespecifikuje, jak by se operace měla provést. Objekt jemuž je poslána zpráva sám určuje, jak provést požadovanou operaci. Na provedení operace je nahlíženo jako na vnitřní schopnost objektu, která může být inicializovaná jedině zasláním zprávy. Objektům se posílají zprávy, které se typicky skládají z adresáta neboli příjemce zprávy, selektoru zprávy (název zprávy) a eventuálních parametrů zprávy: System.out. println ( Text k tištění +prom); kde: System.out - reprezentuje příjemce zprávy println reprezentuje zprávu Text k tištění + prom jsou parametry zprávy Konstruktory Konstruktor je speciální metoda, pro vytváření a inicializaci nových objektů (instancí). Název této metody je totožný s názvem třídy. Např. Bod b1 = new Bod(); // new klíčové slovo 21
22 nebo zápis zdlouhavější: Bod b1; // kvalifikace proměnné b1 b1 = new Bod( ); // vytvoření a inicializace nového objektu (instance) Konstruktor vytvoří požadovanou instanci a vrátí odkaz, prostřednictvím nějž se na objekt odkazujeme. Konstruktor musí mít každá třída. Pokud třída nemá deklarovaný žádný konstruktor, doplní překladač nejjednodušší konstruktor (bez parametrů) a ten se označuje jako implicitní. Existuje-li pro třídu alespoň jeden programátorem deklarovaný konstruktor (explicitní), překladač žádný implicitní konstruktor nepřidává. Konstruktory dané třídy se mohou lišit počtem (typem) parametrů. Definice několika verzí konstruktorů s různými sadami parametrů se označuje jako přetěžování (overloading) daného konstruktoru. Jednotlivé verze konstruktorů se pak nazývají přetížené. Objekt (instance) versus odkaz (reference) na objekt V Javě program nikdy neobdrží vytvořený objekt, ale pouze odkaz (referenci) na vytvořený objekt. Objekt (instance) je zřízena někde ve zvláštní paměti v haldě (heap). O haldu se stará správce paměti (garbage collector). Jeho funkce: přidělování paměti nově vznikajícím objektům rušení objektů, které nikdo nepotřebuje, (na které nejsou žádné odkazy) Na jeden objekt může být více odkazů. Zrušení objektu představuje zrušení všech odkazů na něj. 2.3 Primitivní a objektové (referenční) datové typy Typ údaje popisuje, co je daný údaj zač. V typově orientovaných jazycích mají veškerá data se kterými program pracuje svůj typ, tedy u každého údaje předem znám typ. Výhody: rychlejší práce kompletnější kontrola (robustnost) Java rozlišuje: primitivní datové typy objektové datové typy Primitivní datové typy Jsou to např. čísla zabudována hluboko v jazyku, chování pevně dané; na vytvoření není třeba konstruktor tedy posílání žádných zpráv: 22
23 Typ Velikost Zobrazená hodnota v bitech boolean true false - implementace závislá na JVM (Java Virtual Machina) char 16 \u0000 až \uffff ( ) byte short int long float 32 záporné: -3,40.. E+38-1,40.. e-45 kladné: 1,40.. e-45 3,40.. E+38 double 64 záporné: -1,79.. E ,94.. e kladné: 4,94.. e 324 1,79.. E Referenční objektové typy Referenční objektové typy jsou objekty (instance) daných tříd. Jedná se o třídy knihoven a uživatelem definované třídy. Standardní knihovna obsahuje cca 1500 tříd Třída String definuje typ znakových řetězců, posloupnost znaků chápána jako objekt. Vrácení hodnot primitivních datových typů int getx() objekt vrací celé číslo double getbalance() objekt vrací reálné číslo Vrácení referencí objektových datových typů K převzetí odkazu musíme mít připravený odkaz (referenci) odpovídajícího typu, (která bude vytvořena v zásobníku odkazů) a do které bude požadovaný odkaz na objekt uložen (viz příklad Osoba Adresa Ucet). Výjimkou je objektový typ (třída) String, která se někdy chová i jako primitivní typ automaticky se o okně BlueJ zobrazí a zároveň předává odkaz 2.4 Metody třídy Deklarace třídy a tvorba instancí public class Bod // datové atributy, instanční proměnné private int x; private int y; /** * Bezparametrický konstruktor pro objekty třídy Bod */ 23
24 public Bod() // initialise instance variables x = 0; y=0; public Bod(int c) // konstruktor s jedním parametrem x = c; y = c; public Bod(int x, int y) // konstruktor se dvěma parametry this.x = x; this.y = y; // kopírovací konstruktor (copy konstruktor) public Bod(Bod bod) this.x = bod.getx(); sety(body()); public String tostring() // metoda tostring() zděděné od třídy Object String t = "\nx: "+ x +" Y: "+y; return t; public void tisk() System.out.println("Souradnice bodu "+this.tostring()); public int getx() return x; public void setx(int x) this.x = x; public class BodTest public static void main(string[] args) Bod a = new Bod(1, 1); Bod b; Bod c = new Bod(3, 3); a.tisk(); b = a; b.tisk(); b.posun(100,200); a.tisk(); // použití kopírovacího konstruktoru Bod d = new Bod(c); Klíčové slovo private, které uvozuje informaci o typy datových atributů třídy Bod oznamuje, ža datový atribut je soukromým majetkem objektu (instance), ke kterému nemá nikdo cizí přístup. Kopírovací konstruktor je speciálním typem konstruktoru, který má jako parametr deklarovaný objekt (instanci) stejné třídy viz třída Bod. Funkcí tohoto konstruktoru je, že 24
25 vytvoří novou instanci dané třídy, do které zkopíruje všechny datové atributy objektu, který je předaný jako parametr. Ve třídě BodTest proměnná d odkazuje na objekt třídy Bod s datovými atributy x = 3, y = 3. Datové atributy jsou stejné jako u proměnné c, ale obě proměnné c, d ukazují na jiné objekty. Kopírovací konstruktor bývá využíván při skládání objektů typu kompozice (pevná vazba mezi celkem a částmi). Příklady: Příklad 4: Je uvedena třída Ucet, bez hlavní metody main. Tu je třeba doplnit, pokud byste pracovali pouze s touto třídou mino prostředí BlueJ. public class Ucet private int cislo; private int stav; // Konstruktory tridy Ucet public Ucet() cislo = 0; stav = 0; public Ucet(int cislo, int stav) this.cislo = cislo; this.stav = stav; public void vlozeni (int castka) stav = stav + castka; public int vyber (int castka) stav = stav - castka; return stav; public String tostring() String tx = "Cislo uctu: " + cislo + " stav: " + stav; return tx; public void tisk() System.out.println(this.toString()); Třída, instance třídy (objekt), konstruktor. 25
26 Třída popisuje implementaci množiny objektů. Třída představuje deklaraci. Objekty, instance jsou vlastně herci na jevišti, kteří celou práci provedou, tak jak je to deklarované ve třídách a tak jak jsou jim posílány zprávy. Na jakýkoli běžící objektově orientovaný program se můžeme dívat jako na graf objektů. Uzly v grafu jsou objekty a spojnice mezi uzly jsou reference mezi objekty. Co je to třída? Jaký je rozdíl mezi instancí a objektem? Čím se liší deklarace složeného typu od deklarace objektu? Proč se zavádí pojem třídy? 2.1 Co jsou to přístupové metody, jak se označují a k čemu se používají? 2.2 Co jsou modifikační metody, jak se označují a k čemu se používají? 2.1 Přístupové metody jsou metody ve třídě, které se používají k zpřístupnění datových atributů dané třídy. Zatímco datové atributy mají u sebe většinou modifikátor private, metody u sebe většinou mají modifikátor public. Většinou se tyto metody označují slovíčkem get které je následované identifikátorem daného datového atributu. NApř. getdelka( ), - metoda vrací datový atribut delka (return delka; ). 2.2 Modifikační metody se používají k modifikaci datových atributů. Většinou se tyto metody označují slovíčkem set, následovaný identifikátorem datového atributu a v závorkách je typ a nová hodnota, kterou chceme přiřadir datovému atributu. Např. setdelka(int p); kde proměnná p obsahuje novou hodnotu. Přístupové a modifikační metody se deklarují proto, abychom s datovými atributy nepracovali přímo, ale pouze prostřednictvím metod, které deklarují požadovaný přístup. 26
27 Pojem třídy je základníém pojmem v tzv. třídně instančních objektově orientovaných systémech. Třída vlastně představuje továrnu na výrobu objektů. 27
28 3. Třídy a objekty detailnější pohled V předchozí kapitole jsme si ukázali, že návratovou hodnotou z metody může být hodnotový typ (např. datový atribut x třídy Bod). Nyní si ukážeme, že návratovou hodnotou může být také referenční objektový typ a tedy že dvě proměnné mohou ukazovat na stejný objekt (instanci). Do předchozího příkladu doplníme dvě další metody a to metody getbod() a metodu setbod(). Zkrácený zdrojový kód třídy je pak následující: public class Bod private int x; private int y; // deklarace přetížených konstruktorů a dalších metod... public int getx() return x; public int gety() return y; public void setx(int x) this.x = x; public void sety(int y) this.y = y; public void setbod(bod f) x = f.x; y = f.y; public Bod getbod() return this; Metoda SetBod nastavuje datové atributy příjemce této zprávy na hodnoty datových atributů argumentu a. Metoda getbod() vrací referenci (odkaz) na příjemce této zprávy. Aby vše bylo názornější ukážeme si použití těchto metod ve třídě BodTest: public class BodTest public static void main(string[] args) Bod a, b, c; String t; a = new Bod(); b = new Bod(-10, 122); // STOP 1 c = b.getbod(); c.tisk(); if (b==c) t = "ANO"; else t = "NE"; System.out.println("Vysledek: "+t); // STOP 2 c.setbod(a); a.tisk(); b.tisk(); c.tisk(); 28
29 V příkladu jsme použili dva komentáře (STOP 1 a STOP 2). Ty nám kód programu rozdělují na tři části, které si pro větší přehlednost znázorníme graficky. a b c x 0 y 0 x -10 y 122 null Obr. 3.1 Situace před komentářem STOP 1 V jazyce Java jsou možné pouze odkazy (reference) na vytvořené objekty (instance). Proměnné a, b ukazují na nové objekty, jejichž datové atributy jsou nastaveny na odpovídající hodnoty. Proměnná c je pouze kvalifikována na třídu Bod, proto zatím ukazuje na null. a b c x 0 y 0 x -10 y 122 null Obr. 3.2 Situace mezi komentáři STOP1 a STOP 2 Obrázek 3.2 zobrazuje situaci po provedení příkazu c = b.getbod(). Tím proměnná c získává odkaz na objekt na který odkazuje proměnná b. Objekt null zruší garbage collector. Obrázek 3.3 zobrazuje situaci po provedení příkazu c.setbod(a). Zpráva setbod(a) způsobí, že příjemci zprávy, objektu c, se nastaví jeho datové atributy na stejné hodnoty jako objektu na který ukazuje proměnná a. Pro úplnost ještě uvádíme výpis programu BodTest. Souradnice bodu X: -10 Y: 122 // bod c Vysledek: ANO Souradnice bodu X: 0 Y: 0 // bod a 29
30 Souradnice bodu X: 0 Y: 0 // bod b Souradnice bodu X: 0 Y: 0 // bod c a b c x 0 y 0 x 0 y 0 null Obr. 3.3 Situace za komentářem STOP Klíčové slovo (pseudoproměnná) this Jak jste si jistě všimli, v metodách setx() a sety() se vyskytuje pseudoproměnná this. Používá se všude tam, kde chceme zdůraznit, že se obracíme na atribut či metodu té instance (objektu), jejíž metodu právě definujeme, kvalifikujeme ji klíčovým slovem this. Použití pseudoproměnné this je v obou metodách nutné, protože tím rozlišujeme argument (parametr) x, jehož hodnotu předáváme to metody od datového atributu x, který je použitý v deklaraci třídy Bod. V příkazu this.x = x; this.x - reprezentuje datový atribut třídy, x - reprezentuje argument metody. Pokud bychom použili různé identifikátory, nemusíme pseudoproměnnou this používat. (Pokud ji ale použijeme, nic se nestane, jen se zpřehlední kód programu). Viz následující ukázka metody: public void setx(int k) x = k; // this.x = k; Stejným způsobem můžeme provádět i další operace. Například bychom do třídy Bod potřebovali doplnit metodu rozdíl, která by vytvořila nový objekt třídy Bod, jehož datové atributy by vznikly rozdílem odpovídajících souřadnic daného bodu, s bodem, který metoda přijme jako argument. Metoda rozdíl vrací referenci na nový objekt vzniklý rozdílem odpovídajících souřadnic. Následuje zkrácený výpis třídy Bod rozšířený o metodu rozdíl. public class Bod private int x; private int y; 30
31 public int getx() return x; public int gety() return y; public void setx(int x) this.x = x; public void sety(int y) this.y = y; public Bod rozdil(bod g) Bod nbod = new Bod(); nbod.setx(getx() + g.getx()); // nbod.x = x + g.x; nbod.sety(this.gety() + g.gety()); return nbod; // deklarace dalších metod... Princip vytváření nových objektů v metodách je velmi důležitý a velmi často se používá. Jeho význam je v tom, že původní objekt, tedy příjemce zprávy nezmění své datové atributy. Naopak je vytvořen nový objekt, do kterého je zaznamenán patřičný výsledek. Uvedeme proto ještě příklad špatného postupu, kdy výsledek operace např. rozdíl ovlivňuje datové atributy příjemce odpovídající zprávy: public Bod rozdilspatne(bod g) // Bod nbod = new Bod(); this.setx(getx() + g.getx()); // nbod.x = x + g.x; this.sety(this.gety() + g.gety()); return this; 3.2 Klíčové slovo final a jeho použití Někdy bychom potřebovali zabezpečit neměnnost datových atributů daných objektů. Máme tím na mysli neměnnost datových atributů, které jsme vytvořili v konstruktoru. Datovému atributu můžeme přiřadit jednou hodnotu, kterou již nemůžeme změnit. Také bývá výhodné v programu místo literálů používat pojmenované konstanty. Ty by měly podobný význam jako již zmiňované datové atributy, tedy jednou přiřazená hodnota je dále neměnná. Pojmenované konstanty se definují jako atributy, - mezi modifikátory se použije klíčové slovo final. Např. private final int TYDEN = 7; private final int PRACTYDEN = 5; Z uvedených příkladů vyplývá, že pojmenovaná konstanta TYDEN bude mít vždy hodnotu 7 a pojmenovaná konstanta PRAC_TYDEN hodnotu 5. Podle konvence se pro identifikátory konstant používají velká písmena. 31
32 Jak bude vypadat situace ve třídě Bod, pokud bychom přidali klíčové slovo final k deklaraci datových atributů? public class BodFinal private final int x; private final int y; public BodFinal() // initialise instance variables x = 0; y=0; public BodFinal(int c) x = c; y = c; public BodFinal(int x, int y) this.x = x; this.y = y; public void setx(int x) //this.x = x; // can't assign a value to final variable x public void sety(int y) //this.y = y; // can't assign a value to final variable y public void setbod(bod a) // x = a.x; can't assign a value to final variable x // y = a.y; can't assign a value to final variable y Při použití klíčového slova final pro datové atributy třídy, překladač umožní pouze inicializaci datových atributů v konstruktoru, avšak další změny nejsou možné. Abychom se zbavili chyb překladače, uvedli jsme tyto metody jako komentář. 3.3 Statické atributy, statické metody třídní atributy (proměnné), třídní metody V nadpisu této části používáme přídavná jména statický resp. třídní. Je to z toho důvodu, že se v různých publikacích popisují různě. Nejdříve se podíváme na atributy: Doposud jsme při deklaraci třídy deklarovaly tzv. datové atributy, které se někdy také v jiných jazycích (Smalltalk) nazývají instanční proměnní. Význam těchto atributů je v tom, že v deklaraci třídy nadeklarujeme jejich typy a pak každá instance si naplní tyto datové atributy svými hodnotami. Naproti tomu statické nebo třídní atributy jsou atributy deklarované ve třídě, jejichž hodnoty jsou stejné pro všechny instance dané třídy. Proto si do nich můžeme uložit nějaké důležité hodnoty např. krok posunu, barvu, zvolenou stupnici pro měření teploty (Fahrenheit, Celsius, Kelvin) atd. Instanční proměnné jsou datové atributy objektu. Jejich hodnoty, reference se většinou liší. 32
33 Třídní proměnné jsou proměnné třídy hodnoty stejné pro všechny objekty (instance) dané třídy. Klíčové slovo static je uvedeno před datovým / objektovým typem Notace zápisu: private static int cislo; private static String nazev; private static boolean Q; Klíčové slovo static uvedené v deklaraci datového atributu určuje, že daný atribut bude třídním (statickým) atributem. Praktické využití si můžeme ukázat zase na příkladu třídy Bod, kde jako statický atribut uvedeme velikost kroku, o který se budou jednotliví složky bodu posunovat při aplikaci metody posuň (move). Této metodě tedy nebudeme muset zadávat žádný argument posunu a navíc posun bude pro všechny instance dané třídy stejný (bude mít stejnou hodnotu). Uvedeme si proto jen ty deklarace a metody, které jsou nezbytně nutné k pochopení dané problematiky. Aby byl tisk souřadnic jednotlivých bodů srozumitelnější, přidali jsme ještě datový atribut jméno, do kterého se zadá při inicializaci patřiční proměnná. Musíme samozřejmě ještě změnit metodu tisk, aby vytiskla i jméno bodu. public class BodStatic private int x; private int y; private String jmeno; private static int krokx = 25; // třídní (statický) atribut private static int kroky = -40; // třídní (statický) atribut public BodStatic(String j) x = 0; y=0; jmeno = j; public BodStatic(String j, int c) x = c; y = c; jmeno =j; public BodStatic(String j, int x, int y) this.x = x; this.y = y; jmeno = j; public String tostring() String t = String.format("\n%11s %4s %4s %4d %4s %4d", "Nazev bodu:",getjmeno(),"x:",getx(),"y:",gety()); return t; public void tisk() System.out.printf(this.toString()); public int getx() return x; public void setx(int x) this.x = x; public void setbod(bodstatic a) 33
34 setx(a.getx()); //x = a.x; sety(a.gety()); //y = a.y; public String getjmeno() return jmeno; public BodStatic getbodstatic() return this; public void posunx() x =+ krokx; public void posuny() y =+ kroky; public void posunxy() posunx(); // this.posunx(); posuny(); // this.posuny(); public class BodStaticTest public static void main(string args[]) BodStatic a, b, c; a = new BodStatic("a"); a.tisk(); b = new BodStatic("b",-10, 122); b.tisk(); c = b.getbodstatic(); c.tisk(); a.posunx(); a.tisk(); b.posuny(); b.tisk(); c.posunxy(); c.tisk(); Výpis programu: Nazev bodu: a X: 0 Y: 0 Nazev bodu: b X: -10 Y: 122 Nazev bodu: b X: -10 Y: 122 //jedná se o bod c, který //ukazuje na stejný bod jako b Nazev bodu: a X: 25 Y: 0 Nazev bodu: b X: -10 Y: -40 Nazev bodu: b X: 25 Y: -40 //jedná se o bod c, který //ukazuje na stejný bod jako b Jak je vidět z výpisu programu, metoda posunx(), posuny(), posunxy() funguje pro všechny instance třídy Bod stejně (modifikuje souřadnice bodů o stejné hodnoty). V programu jsme také využili metody set a get abychom se nemuseli přímo odkazovat na datové atributy viz např. metoda setbod(). 34
35 Pro tisk bodů jsme využili formátovaný příkaz pro tisk printf. Tento příkaz vyžaduje, aby se tisk skládal ze dvou částí. První část tvoří formát a je uzavřena v uvozovkách a druhou část pak tvoří argumenty tisku. Uvozovací symbol pro formáty je znak %, za kterým je uveden počet míst pro danou položku a následuje symbol typu tištěné proměnné s pro řetězec a d pro desítkové číslo. Zároveň se vytisknou i všechny znaky, které jsou uvedeny v první části příkazy (v našem případě se jedná pouze o mezery). String t = String.format("\n%11s %4s %4s %4d %4s %4d", "Nazev bodu:",getjmeno(),"x:",getx(),"y:",gety()); Význam zápisu: - tisk na nový řádek // \n - 11 znaků pro text Nazev bodu: zarovnáno od leva - 1 mezeta // mezera mezi %11s %4d - 4 znaky pro jméno bodu - 1 znak mezera - 4 znaky pro text X: - 1 znak mezera - 4 znaky pro hodnotu x souřadnici - 1 znak mezera - 4 znaky pro text Y: - 1 znak mezera - 4 znaky pro hodnotu y souřadnici Vyzkoušejte, co by se vytisklo, pokud bychom upravili uvedenou metodu následovně: String t = String.format("\n%11s@%4s+%4sq%4dkk%4s*&$%4d", "Nazev bodu:",getjmeno(),"x:",getx(),"y:",gety()); Statické metody (třídní metody) Doposud probírané metody byly tzv. instanční metody, to je metody, které se aplikují na objekty. Třídní metody (statické metody) se aplikují na danou třídu, zajišťují (nastavují) hodnoty třídních atributů, nebo se používají všude tam, kde nechceme uvádět příjemce jako objekt, ale místo příjemce uvádíme patřičnou třídu a k ní žádanou třídní metodu. Další charakteristiky jsou následující: definují se vložením klíčového slova static mezi identifikátory mají platnost pro všechny instance (objekty) dané třídy mohou být volány před vznikem instance dané třídy slouží k přípravě prostředí ve kterém vznikne objekt slouží k definici metod, které nejsou vázány na žádnou instanci (objekt) - takto jsou definovány matematické funkce. Metody třídy (Class methods) nezávisí na žádné instanci. V metodách třídy tedy nemůžeme: používat metody a atributy instancí přesněji atributy a metody instancí kvalifikované klíčovým slovem this. 35
Teoretické minimum z PJV
Teoretické minimum z PJV Pozn.: následující text popisuje vlastnosti jazyka Java zjednodušeně pouze pro potřeby výuky. Třída Zavádí se v programu deklarací třídy což je část programu od klíčových slov
OBJEKTOVĚ ORIENTOVANÉ PROGRAMOVÁNÍ
OBJEKTOVĚ ORIENTOVANÉ PROGRAMOVÁNÍ URČENO PRO VZDĚLÁVÁNÍ V AKREDITOVANÝCH STUDIJNÍCH PROGRAMECH FRANTIŠEK HUŇKA ČÍSLO OPERAČNÍHO PROGRAMU: CZ.1.07 NÁZEV OPERAČNÍHO PROGRAMU: VZDĚLÁVÁNÍ PRO KONKURENCESCHOPNOST
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,
Návrhové vzory Design Patterns
Návrhové vzory Design Patterns doc. Ing. František Huňka, CSc. Ostravská univerzita PřF 1 Definice vzoru Každý vzor popisuje problém, který nastává opakovaně v našem prostředí, a potom popisuje podstatu
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ý
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
Infrastruktura UML. Modelování struktury v UML. Superstruktura UML. Notace objektů. Diagramy objektů
Infrastruktura UML v UML Karel Richta listopad 2011 Richta: B101TMM - v UML 2 Superstruktura UML Směr pohledu na systém dle UML Diagramy popisující strukturu diagramy tříd, objektů, kompozitní struktury,
Objektově orientované programování
Objektově orientované programování Doc. Ing. František Huňka, CSc. katedra informatiky a počítačů PřF Ostravská univerzita frantisek.hunka@osu.cz 1 Literatura zdroje informací Pecinovský R.: Myslíme objektově
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ů
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
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
Tabulka symbolů. Vazba (binding) Vazba - příklad. Deklarace a definice. Miroslav Beneš Dušan Kolář
Vazba (binding) Tabulka symbolů Miroslav Beneš Dušan Kolář vazba = spojení mezi entitou a vlastností okamžik vazby (binding time) při návrhu jazyka při implementaci jazyka během překladu/spojování/zavádění
Přehled probírané látky
OOPR_04 1 Přehled probírané látky asociace (relace) mezi třídami popis množiny spojení mezi objekty skládání objektů - upřesněný typ asociace, vazba mezi objekty kompozice objektů (velmi pevná vazba mezi
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í
OOPR_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
Ú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
Objektově orientované programování
Objektově orientované programování Jan Faigl Katedra počítačů Fakulta elektrotechnická České vysoké učení technické v Praze Přednáška 7 A0B36PR1 Programování 1 Jan Faigl, 2015 A0B36PR1 Přednáška 7: Objektově
Ú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í
Obrázek. Základní popis, zadání úkolu. Struktura tříd,
Obrázek Základní popis, zadání úkolu Pracujeme na projektu Domecek, který je ke stažení na http://java.vse.cz/. Po otevření v BlueJ vytvoříme instanci třídy Obrazek a zavoláme metodu kresli(). Výsledkem
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
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)
Abstraktní datové typy: zásobník
Abstraktní datové typy: zásobník doc. Ing. Miroslav Beneš, Ph.D. katedra informatiky FEI VŠB-TUO A-1007 / 597 324 213 http://www.cs.vsb.cz/benes Miroslav.Benes@vsb.cz Abstraktní datové typy omezené rozhraní
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
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í
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á
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 =
Konstruktory. Konstruktor je speciální metoda, pro vytváření a inicializaci nových objektů (instancí). Název metody je totožný s názvem třídy.
OOPR_02 1 Osnova přednášky Třída Konstruktor Volání konstruktorů z konstruktorů Kopírovací konstruktor Vstup dat pomocí třídy Scanner Vstup dat s využitím třídy JOptionPane Objekt, zpráva, metoda Třídně
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ů
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í
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
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í
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
Unifikovaný modelovací jazyk UML
Unifikovaný modelovací jazyk UML Karel Richta katedra počíta tačů FEL ČVUT Praha richta@fel fel.cvut.czcz Motto: Komunikačním m prostředkem informační komunity se postupem času stala angličtina. Chcete-li
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ší
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ů
8 Třídy, objekty, metody, předávání argumentů metod
8 Třídy, objekty, metody, předávání argumentů metod Studijní cíl Tento studijní blok má za cíl pokračovat v základních prvcích jazyka Java. Konkrétně bude věnována pozornost třídám a objektům, instančním
Kolekce ArrayList. Deklarace proměnných. Import. Vytvoření prázdné kolekce. napsal Pajclín
Kolekce ArrayList napsal Pajclín Tento článek jsem se rozhodl věnovat kolekci ArrayList, protože je to jedna z nejpoužívanějších. Tento článek není kompletním popisem třídy ArrayList, ale budu se snažit
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
5 Rekurze a zásobník. Rekurzivní volání metody
5 Rekurze a zásobník Při volání metody z metody main() se do zásobníku uloží aktivační záznam obsahující - parametry - návratovou adresu, tedy adresu, kde bude program pokračovat v metodě main () po skončení
Ú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
7 Jazyk UML (Unified Modeling Language)
7 Jazyk UML (Unified Modeling Language) 7.1 Základní charakteristika jazyka Motivace - vznik řady OO metod a metodologií (konec 80. let a první polovina 90.let) podobné notace vyjadřující totéž, komplikující
knihovna programátora
knihovna programátora Učebnice pro ty, kteří nechtějí zůstat obyčejnými kodéry, ale chtějí se stát špičkovými architekty Postupuje podle metodiky Architecture First Soustředí se na návrh programů a osvojení
7 Formátovaný výstup, třídy, objekty, pole, chyby v programech
7 Formátovaný výstup, třídy, objekty, pole, chyby v programech Studijní cíl Tento studijní blok má za cíl pokračovat v základních prvcích jazyka Java. Konkrétně bude věnována pozornost formátovanému výstupu,
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
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é
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
Modelování informačních systémů s využitím jazyka UML. Jaroslav Šmarda
Modelování informačních systémů s využitím jazyka UML Jaroslav Šmarda Využití jazyka UML při vývoji IS na příkladu jednoduché aplikace pro evidenci knih Model IS Modelování případů užití Diagram případů
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
MATURITNÍ OTÁZKY ELEKTROTECHNIKA - POČÍTAČOVÉ SYSTÉMY 2003/2004 PROGRAMOVÉ VYBAVENÍ POČÍTAČŮ
MATURITNÍ OTÁZKY ELEKTROTECHNIKA - POČÍTAČOVÉ SYSTÉMY 2003/2004 PROGRAMOVÉ VYBAVENÍ POČÍTAČŮ 1) PROGRAM, ZDROJOVÝ KÓD, PŘEKLAD PROGRAMU 3 2) HISTORIE TVORBY PROGRAMŮ 3 3) SYNTAXE A SÉMANTIKA 3 4) SPECIFIKACE
14.4.1. Typický prvek kolekce pro české řazení
14.4. Co všechno by měl mít typický prvek kolekce 177 Poznámka: Třídy BigInteger, BigDecimal a Date budou vysvětleny v částech [15./183, [16./185 a [18.1./204. 14.4.1. Typický prvek kolekce pro české řazení
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,
Paměť počítače. alg2 1
Paměť počítače Výpočetní proces je posloupnost akcí nad daty uloženými v paměti počítače Data jsou v paměti reprezentována posloupnostmi bitů (bit = 0 nebo 1) Připomeňme: paměť je tvořena řadou 8-mi bitových
Modelování řízené případy užití
Modelování řízené případy užití kompletní proces od UC po implementaci, robustnost 2005 Radek Ošlejšek, Jiří Sochor FI MU Brno oslejsek@fi.muni.cz http://www.fi.muni.cz/~oslejsek/pa103 30. 3. 2005 PA103:
7 Jazyk UML (Unified Modeling Language)
7 Jazyk UML (Unified Modeling Language) 7.1 Základní charakteristika jazyka Motivace - vznik řady OO metod a metodologií (konec 80. let a první polovina 90.let) podobné notace vyjadřující totéž, komplikující
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
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í
Algoritmizace a programování
Algoritmizace a programování Řídicí struktury jazyka Java Struktura programu Příkazy jazyka Blok příkazů Logické příkazy Ternární logický operátor Verze pro akademický rok 2012/2013 1 Struktura programu
RMI Remote Method Invocation
2. cvičení RMI Remote Method Invocation 2007/09 ver.2.0 1 RMI co to je? vyvolání metody z jiné JVM lokalizace vzdáleného objektu komunikace se vzdálenými objekty přenos objektu v bytecode typicky klient
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
Modelování webových služeb v UML
Modelování webových služeb v UML Jaromír Šveřepa LBMS, s.r.o. Abstrakt: Tento příspěvek se zaměřuje na praktický postup pro identifikaci potřeby webové služby, modelování způsobu jejího použití, popřípadě
Seznamy a iterátory. Kolekce obecně. Rozhraní kolekce. Procházení kolekcí
Kolekce obecně Seznamy a iterátory doc. Ing. Miroslav Beneš, Ph.D. katedra informatiky FEI VŠB-TUO A-1007 / 597 324 213 http://www.cs.vsb.cz/benes Miroslav.Benes@vsb.cz Kolekce ::= homogenní sada prvků
Projekt Obrázek strana 135
Projekt Obrázek strana 135 14. Projekt Obrázek 14.1. Základní popis, zadání úkolu Pracujeme na projektu Obrázek, který je ke stažení na http://java.vse.cz/. Po otevření v BlueJ vytvoříme instanci třídy
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;
Webové služby a XML. Obsah přednášky. Co jsou to webové služby. Co jsou to webové služby. Webové služby a XML
Obsah přednášky Webové služby a XML Miroslav Beneš Co jsou to webové služby Architektura webových služeb SOAP SOAP a Java SOAP a PHP SOAP a C# Webové služby a XML 2 Co jsou to webové služby rozhraní k
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ář
TÉMATICKÝ OKRUH Softwarové inženýrství
TÉMATICKÝ OKRUH Softwarové inženýrství Číslo otázky : 24. Otázka : Implementační fáze. Postupy při specifikaci organizace softwarových komponent pomocí UML. Mapování modelů na struktury programovacího
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
3 Vývojová prostředí, základní prvky jazyka Java, konvence jazyka Java
3 Vývojová prostředí, základní prvky jazyka Java, konvence jazyka Java Studijní cíl V tomto bloku navážeme na konec předchozího bloku a seznámíme se s vývojovými prostředími, které se nejčastěji používají
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
Objekty a třídy. Procedurální a objektově orientované programování. V této kapitole se naučíte: Procedurální a objektově orientované programování
Objekty a třídy Objektově orientované programování (OOP) je určitý koncepční přístup návrhu programů a jazyk C++ rozšiřuje jazyk C o vlastnosti, které jeho použití usnadňují. Mezi nejdůležitější vlastnosti
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:
Datové typy v Javě. Tomáš Pitner, upravil Marek Šabo
Datové typy v Javě Tomáš Pitner, upravil Marek Šabo Úvod k datovým typům v Javě Existují dvě základní kategorie datových typů: primitivní a objektové Primitivní v proměnné je uložena přímo hodnota např.
Metodika. Architecture First. Rudolf Pecinovský rudolf@pecinovsky.cz
Copyright Rudolf Pecinovský, Soubor: 2014_Comm_PrW_Architecture First Methodology.doc, verze 1.00.2413, uloženo po 9.6.2014 14:43 1 z 39 Metodika Architecture First Rudolf Pecinovský rudolf@pecinovsky.cz
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ě
7. Datové typy v Javě
7. Datové typy v Javě Primitivní vs. objektové typy Kategorie primitivních typů: integrální, boolean, čísla s pohyblivou řádovou čárkou Pole: deklarace, vytvoření, naplnění, přístup k prvkům, rozsah indexů
Více o konstruktorech a destruktorech
Více o konstruktorech a destruktorech Více o konstruktorech a o přiřazení... inicializovat objekt lze i pomocí jiného objektu lze provést přiřazení mezi objekty v původním C nebylo možné provést přiřazení
Databázové systémy trocha teorie
Databázové systémy trocha teorie Základní pojmy Historie vývoje zpracování dat: 50. Léta vše v programu nevýhody poměrně jasné Aplikace1 alg.1 Aplikace2 alg.2 typy1 data1 typy2 data2 vytvoření systémů
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
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
PROGRAMOVÁNÍ V C++ URČENO PRO VZDĚLÁVÁNÍ V AKREDITOVANÝCH STUDIJNÍCH PROGRAMECH ROSTISLAV FOJTÍK
PROGRAMOVÁNÍ V C++ URČENO PRO VZDĚLÁVÁNÍ V AKREDITOVANÝCH STUDIJNÍCH PROGRAMECH ROSTISLAV FOJTÍK ČÍSLO OPERAČNÍHO PROGRAMU: CZ.1.07 NÁZEV OPERAČNÍHO PROGRAMU: VZDĚLÁVÁNÍ PRO KONKURENCESCHOPNOST OPATŘENÍ:
Univerzita Pardubice Fakulta ekonomicko-správní Ústav systémového inženýrství a informatiky
Univerzita Pardubice Fakulta ekonomicko-správní Ústav systémového inženýrství a informatiky Datová podpora na úrovni kontaktního pracoviště Úřadu práce pro státní sociální podporu Josef Hájek Bakalářská
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ů
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).
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
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ů
Správa paměti. Karel Richta a kol. Katedra počítačů Fakulta elektrotechnická České vysoké učení technické v Praze Karel Richta, 2016
Správa paměti Karel Richta a kol. Katedra počítačů Fakulta elektrotechnická České vysoké učení technické v Praze Karel Richta, 2016 Objektové modelování, B36OMO 10/2016, Lekce 2 https://cw.fel.cvut.cz/wiki/courses/xxb36omo/start
9. přednáška - třídy, objekty
třída String a její použití kolekce, typované kolekce 9. přednáška - třídy, objekty Algoritmizace (Y36ALG), Šumperk - 9. přednáška 1 Třída String Objekty knihovní třídy String jsou řetězy znaků Od ostatních
7.3 Diagramy tříd - základy
7.3 Diagramy tříd - základy - popisuje typy objektů a statické vztahy mezi nimi Objednávka -datumpřijetí -předplacena -číslo -cena +vyřiď() +uzavři() {if Objednávka.zákazník.charakteristika = 'nejistý'
Základní pojmy. Úvod do programování. Základní pojmy. Zápis algoritmu. Výraz. Základní pojmy
Úvod do programování Michal Krátký 1,Jiří Dvorský 1 1 Katedra informatiky VŠB Technická univerzita Ostrava Úvod do programování, 2004/2005 Procesor Procesorem je objekt, který vykonává algoritmem popisovanou
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í.
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ů
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,
Kolaborativní aplikace
Kolaborativní aplikace Michal Máčel Vema, a. s. Okružní 3a, 638 00 Brno - Lesná, macel@vema.cz Tomáš Hruška Fakulta informačních technologií Vysokého učení technického v Brně, Ústav informačních systémů,
Datové 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
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í
Zápis programu v jazyce C#
Zápis programu v jazyce C# Základní syntaktická pravidla C# = case sensitive jazyk rozlišuje velikost písmen Tzv. bílé znaky (Enter, mezera, tab ) ve ZK překladač ignoruje každý příkaz končí ; oddělovač
Konstruktory a destruktory
Konstruktory a destruktory Nedostatek atributy po vytvoření objektu nejsou automaticky inicializovány hodnota atributů je náhodná vytvoření metody pro inicializaci, kterou musí programátor explicitně zavolat,
Interpret jazyka IFJ2011
Dokumentace projektu Interpret jazyka IFJ2011 Tým číslo 093, varianta b/3/i: 20 % bodů: Cupák Michal (xcupak04) vedoucí týmu 20 % bodů: Číž Miloslav (xcizmi00) 20 % bodů: Černá Tereza (xcerna01) 20 % bodů:
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