OMO. 3 - Klíčové koncepty modelování systémů II
|
|
- František Ovčačík
- před 7 lety
- Počet zobrazení:
Transkript
1 OMO 3 - Klíčové koncepty modelování systémů II Abstraktní datový typ Mutabilita, immutabilita Zpřístupnění reprezentace Neávislost reprezentace Reprezentační invarianty Ing. David Kadleček, PhD kadlecd@fel.cvut.cz, david.kadlecek@cz.ibm.com 1
2 Mutabilita Mutable (měnitelné) objekty jsou takové, které obsahují metody, které modifikují hodnotu objektu. String je immutable, tedy např. při přidání znaků na konec se vždy vytváří nový String. String s = "a"; s = s.concat("b"); // s+="b" and s=s+"b" also mean the same thing StringBuilder je mutable. Tedy i přidání znaků na konec modifikuje originální objekt. StringBuilder sb = new StringBuilder("a"); sb.append("b"); Rozdíl mezi mutable a immutable typy začne být evidentní ve chvíli, kdy máme víc jak jednu referenci na objekt. Např. když t ukazuje na stejný String jako s, a tb ukazuje na StringBuilder jako sb, tak: String t = s; t = t + "c"; StringBuilder tb = sb; tb.append("c"); 2
3 Rizika mutability Mutable typy jsou mocnější z hlediska funkcionality a zpravidla mají i lepší performance - immutable typy při většině volání vytvářejí kopie. Proč tedy vůbec používat immutable typy? immutable typy jsou méně náchylné pro vznik bugů - u mutable typů vzniká velké množství chyb kvůli tzv. Aliasingu - na ten samý objekt se odkazujeme z různých míst kódu. kód s immutable typy je jednodušší na pochopení - čtenář kódu nemusí studovat implementaci, aby zjistil co se vlastně děje na pozadí kód s immutable typy i vlastní imutable typ je jednodušší na upravování - jestliže mám pod kontrolou co se děje na pozadí v kódu, tak je mnohem bezpečnější zasahovat do již hotového kódu Mutable objekty zesložiťují kontrakt a zhoršují reuse - při přepoužití musím zpravidla zasahovat mnohem hlouběji do kódu a řešit situace Aliasingu. I když obecné doporučení je používat immutable typy, tak jsou určité situace, kdy je výhodnější použít mutable typ (např. z performance důvodů) a existují užitečné mutable typy jako např: ArrayList, Hashtable z Java Collections API. Collections API poskytuje metody, které vrací immutable varianty: např. Collections.unmodifiableList 3
4 Rizika mutability - předávání mutable parametrů Vytvoříme metodu, která sečte hodnoty v listu the sum of the numbers in the list */ public static int sum(list<integer> list) { int sum = 0; for (int x : list) sum += x; return sum; Nakonec obě metody použijeme // meanwhile, somewhere else in the code... public static void main(string[] args) { //... List<Integer> mydata = Arrays.asList(-5, -3, -2); System.out.println(sumAbsolute(myData)); System.out.println(sum(myData)); Pak vytvoříme metodu pro sečtení absolutních hodnot v seznamu (nebo jen v dobré víře optimalizujeme existující metodu). Abychom dodrželi principy DRY a nemuseli draze vytvářet list znovu, tak modifikujeme původní list the sum of the absolute values of the list */ public static int sumabsolute(list<integer> list) { // let's reuse sum(), because of DRY for (int i = 0; i < list.size(); ++i) list.set(i, Math.abs(list.get(i))); return sum(list); => Náchylné na chyby: Těžko vinit implementátora sum Absolute(), chtěl jen dodržet princip DRY a nechtěl vytvářet drahou kopii celého seznamu. Je jen otázkou času než si některý programátor neuvědomí, že tato metoda modifikuje původní list. Těžko srozumitelné: Když budete procházet kód v main(), těžko vás napadne, že se seznam změní mezi voláním sumabsolute(mydata) a sum(mydata) 4
5 => Rizika mutability - vracení mutable parametrů Tato metod vrací první jarní den (volá externí službu) na objektu Java Date (je mutable) Vývojáři začnou tento kód používat pro naplánování party Pak se první vývojář rozhodne, že bude odpověď ze služby cachovat, aby ji příliš nezatěžoval A druhý vývojář se rozhodne, že posune party o jeden měsíc public static Date startofspring() { return askexternalservice(); public static void partyplanning() { Date partydate = startofspring(); //... public static Date startofspring() { if (lastanswer == null) lastanswer = askexternalservice(); return lastanswer; private static Date lastanswer = null; public static void partyplanning() { // let's have a party one month after spring starts! Date partydate = startofspring(); partydate.setmonth(partydate.getmonth() + 1); // => Next call returns different date (+1) Náchylné na chyby: Opět je vytvořen kód, který jen čeká na zavlečení chyby Náročné na změny: Dva vývojáři provedli dvě úpravy což vyústilo v chybu 5
6 Abstraktní Datový Typ (ADT) - datová abstrakce Odděluje abstraktní vlastnosti datového typu od jeho implementace. Abstraktní vlastnosti jsou ty, které jsou viditelné a měl bych je brát v potaz v kódu, ve kterém abstraktní datový typ používám. Konkrétní implementace je schovaná a mohu ji bez dopadu na tento kód měnit. Hlavním reprezentantem datové abstrakce je Abstraktní Datový Typ (ADT). ADT je matematický model pro datový typ definovaný množinou hodnot a operací nad těmito hodnotami, které splňují definované axiomy. Ekvivalentní k algebraické struktuře v abstraktní algebře. Příklad: Typ Integer je ADT definovaný hodnotami, 2, 1, 0, 1, 2, a operacemi +, -, /, <,>,= které splňují axiomy asociativity, komutativity atd. V programovacích jazycích např. typ boolean, float atd. reprezentuje tzv. ADT. Další příklady: V objektově orientovaném programování jsou třídy reprezentantem datové abstrakce - zapouzdřují přístup k datům (encapsulation) a poskytují pouze část dat (information hiding) Typy z collection API jako Collection, List, Set, Map jsou příkladem datové abstrakce - předepisují práci s datovou strukturou pomocí API a definuje princip práce s daty. RDBMS používájí abstrakci tabulky, které má záznamy (Row) a sloupečky (Column). Uživatel je odstíněn 6
7 Mutable a immutable ADT Typy, vestavěné nebo uživatelem definované, lze klasifikovat jako: mutable (měnitelné) immutable (neměnné). Mutable typy lze změnit, to znamená, že poskytují operace, které při spuštění způsobují, že výsledky dalších operací na stejném objektu dávají různé výsledky. => Date je mutable, protože můžete volat setmonth a sledovat změnu pomocí operace getmonth. => String je neměnný, protože jeho operace vytvářejí nové objekty String spíše než by měnily existující. 7
8 Klasifikace typů a operací Operace abstraktního typu dělíme takto: Creators - vytvářejí nové objekty daného typu. Creator může vzít objekt jako argument, nikoli však objekt stejného typu jako ten, kterého vytváří. Producers - vytvářejí nové objekty ze starých objektů daného typu. Operace concat v třídě String je příklad produceru: vezme dva stringy a vytvoří z nich nový reprezentující jejich spojení Observers - berou objekty abstraktního typu a vracejí objekty jiného typu. Operace size v třídě List je příkladem observeru, jelikož vrací int. Mutators - mění objekty. Metoda add třídy List, je příkladem mutátoru, protože mění list tím, že na jeho konec přidává element. Schématicky lze tyto různé typy zapsat následovně creator : t* T producer : T+, t* T observer : T+, t* t mutator : T+, t* void t T Kde T je sám abstraktní typ; každé t je nějaký jiný typ. + značí, že se typ může v signatuře metody vyskytnout jednou nebo n-krát, * a je nula nebo n-krát, značí nebo. 8
9 Příklady pro pochopení schéma Producer vezme dvě hodnoty abstraktního typu T - String.concat(): concat : String String String Observer může být bezparametrický (žádný argument typu t): size: List int nebo naopak brát několik parametrů: regionmatches : String boolean int String int int boolean Creator operace je často implementována jako constructor, např new ArrayList(), new ArrayList(): () ArrayList může to ale být i jednoduchá statická matoda jako Arrays.asList(): valueof: () String Pozn. Creator implementovaný jako statická metoda je často nazýván jako factory method. Např. String.valueOf. Mutators často vrací void, ale není to ve 100%. Metoda, která vrací void musí být volána kvůli nějakému side-efektu. Např. Component.add() v Java UI toolkitu vrací samotný objekt, aby bylo možné metody add() zřetězit za sebe. add: () Component 9
10 Příklady z Javy int je primitivní datový typ. int je immutable, nemá tedy žádné mutators. creators: čísla 0, 1, 2, producers: arithmetické operátory +, -, *, / observers: porovnávací operátory ==,!=, <, > mutators: nemá List je typ pro reprezentaci listu. List je mutable. List je také interface, což znamená, že ho implementují ostatní třídy, např. ArrayList a LinkedList. creators: ArrayList a LinkedList konstruktory, Collections.singletonList producers: Collections.unmodifiableList observers: size, get mutators: add, remove, addall, Collections.sort String je typ pro reprezentaci řetězce. String je immutable. creators: String konstruktory producers: concat, substring, touppercase observers: length, charat mutators: nemá 10
11 Jak navrhovat ADT Je lepší mít minimální množinu jednoduchých operací, které lze dobře kombinovat, než spoustu složitých operací. Každá operace by měla mít přesně vymezený účel fungující bez výjimek ve 100 % use casů. Např. operace sum nemá být definována v třídě List, protože ačkoliv funguje pro seznam integers, tak nedává smysl pro stringy. Úplně stejně sum nedává smysl pro vnořený list. Množina operací by měla dobře pokrývat výpočty, které s typem budou klienti provádět. Dobrým testem pro ověřením, že typ poskytuje dostatečné metody, je zkusit postupně získat všechny vlastnosti typu. Pokud je to jednoduché, tak je typ navržen dobře. Např. metoda size není nezbytně nutná - velikost mohu zjistit i iterováním přes celý list, nicméně je to extrémně neefektivní Dobrým testem pro ověření, že typ neposkytuje nadbytek operací, je zkusit postupně metody odebírat a zkoušet jestli mohu rozumně získat vlastnosti objektu Typ by měl být buď generický: seznam, množina, graf atd. nebo doménově specifický: mapa ulic, databáze zákazníků, telefonní seznam. Meměl by kombinovat generické a doménově specifické vlastnosti. Např. typ Balíček karet by neměl mít metodu add, která umožňuje přidávat libovolné typy jiné než karty. Naopak generický list by neměl mít metodu dealcards. 11
12 ADT a nezávislost na reprezentaci ADT by měl být nezávislý na reprezentaci - tedy na aktuální datové struktuře a datových proměnných - tak, aby změny v reporezntaci neměly vliv na kód mimo typ. Např. operace poskytované třídou List jsou nezávislé na tom, jestli jsou data uvnitř reprezentována jakou prolinkovaý seznam LinkedList nebo pole /** MyString represents an immutable sequence of characters. */ public class MyString { //////////////////// Example of a creator operation /////////////// b a boolean value string representation of b, either "true" or "false" */ public static MyString valueof(boolean b) {... //////////////////// Examples of observer operations /////////////// number of characters in this string */ public int length() { return 0 i character position (requires 0 <= i < string length) character at position i */ public char charat(int i) {... //////////////////// Example of a producer operation /////////////// /** Get the substring between start (inclusive) and end (exclusive). start starting index end ending index. Requires 0 <= start <= end <= string length. string consisting of charat(start)...charat(end-1) */ public MyString substring(int start, int end) {... 12
13 ADT a nezávislost na reprezentaci Pro náš nový ADT napíšeme implementaci. Náš ADT začnou používat vývojáři. Poté provedeme performance optimalizaci kódu. U správně implementovaného ATD tato optimalizace nebude vyžadovat zásah uživatelů do jejich kódu což je síla nezávislosti na reprezentaci. private char[] a;... public static MyString valueof(boolean b) { MyString s = new MyString(); s.a = b? new char[] { 't', 'r', 'u', 'e' : new char[] { 'f', 'a', 'l', 's', 'e' ; return s; public int length() {return a.length; public char charat(int i) { return a[i]; => private char[] a; private int start; private int end;... public static MyString valueof(boolean b) { MyString s = new MyString(); s.a = b? new char[] { 't', 'r', 'u', 'e' : new char[] { 'f', 'a', 'l', 's', 'e' ; s.start = 0; s.end = s.a.length; return s; public MyString substring(int start, int end) { MyString that = new MyString(); that.a = new char[end - start]; System.arraycopy(this.a, start, that.a, 0, end - start); return that; public int length() { return end - start; public char charat(int i) { return a[start + i]; public MyString substring(int start, int end) { MyString that = new MyString(); that.a = this.a; that.start = this.start + start; that.end = this.start + end; return that; 13
14 ADT - Invarianty Invariance (česky neměnnost) je označení pro situaci, v níž jsou vybrané VLASTNOSTI NEMĚNNÉ. Příkladem invariance je situace, kdy je dán systém veličin, které na sobě nějakým způsobem závisí. Potom se jedna z těchto veličin nazývá invariantní vůči změně jiné (referenční) veličiny, pokud má stále stejnou hodnotu při jakýchkoli změnách referenční veličiny. Správný ADT zachovává své invarianty, dokonce je za to zodpovědný Invarianta je vlastnost programu, která je splněna pro jakýkoliv runtime stav programu a to nezávisle na chování klienta. Příkladem důležité invarianty je immutabilita: jakmile je immutable objekt vytvořen, tak si drží tu samou hodnotu. Je pak výrazně jednodušší pracovat s kódem jestliže máme garantovanou tuto vlastnost. public class Tweet { public String author; public String text; public Date timestamp; /** * Make a Tweet. */ public Tweet(String author, String text, Date timestamp) { this.author = author; this.text = text; this.timestamp = timestamp; Jak zajistíme, že jednotlivé tweety jsou immutable? 14
15 ADT - immutable invarianty Prvním problémem je, že objekty mohou přímo modifikovat proměnné třídy, jedná se o tzv. Representation exposure (vystavení reprezentace). To kromě toho, že ohrožuje invarianty, tak ohrožuje i Representation independence (nezávislost na reprezentaci). Prvním krokem je tedy schování proměnných za getter/setter operace. public class Tweet { private final String author; private final String text; private final Date timestamp; public Tweet(String author, String text, Date timestamp) { this.author = author; this.text = text; this.timestamp = timestamp; public String getauthor() { return author; public String gettext() { return text; public Date gettimestamp() { return timestamp; Modifikátor final zajistí, že ani implementátor třídy nemůže upravovat stav objektu. 15
16 ADT - immutable invarianty Tím to ale nekončí. Vývojář napíše následující kód: a tweet that retweets t, one hour later*/ public static Tweet retweetlater(tweet t) { Date d = t.gettimestamp(); d.sethours(d.gethours()+1); return new Tweet("rbmllr", t.gettext(), d); Čímž jsme z objektu tweet vrátili mutable objekt, který je pak modifikován ve vnějším kódu. To můžeme vyřešit jednoduchým patchem, tzv. defensive copying. public Date gettimestamp() { return new Date(timestamp.getTime()); 16
17 ADT - immutable invarianty Vývojář ale může napsat i takovýto kód: a list of 24 inspiring tweets, one per hour today*/ public static List<Tweet> tweeteveryhourtoday () { List<Tweet> list = new ArrayList<Tweet>(); Date date = new Date(); for (int i = 0; i < 24; i++) { date.sethours(i); list.add(new Tweet("rbmllr", "keep it up! you can do it", date)); return list; Čímž nám všechny instance tweetu odkazují na ten samý date objekt. public Tweet(String author, String text, Date timestamp) { this.author = author; this.text = text; this.timestamp = new Date(timestamp.getTime()); Problém fixujeme kopií objektu Date v konstruktoru. Pokud selže úplně vše, tak nebo nechceme dělat kopie objektů, tak je nutné to zapsat alespoň ve specifikaci /**Make a Tweet. author Twitter user who wrote the tweet text text of the tweet timestamp date/time when the tweet was sent. Caller must never mutate this Date object again! */ public Tweet(String author, String text, Date timestamp) { 17
18 ADT - Rep(rezentační) invarianty Na ADT je možné se dívat jako na vztah dvou prostorů hodnot. Prostor abstraktních hodnot A a prostor reprezentací R Abstraktní prostor využíváme, protože to je právě to, co by měl ADT implementovat a vystavit. Příklad: Implementujeme ADT CharSet. Pro vnitřní reprezentaci použijeme typ String. public class CharSet { private String s;... Pak R obsahuje Stringy a A je matematická reprezentace množiny znaků Každá hodnota z A je mapovaná na nějakou hodnotu z R. Ve finále musíme být schopni vytvářet a manipulovat s veškerými možnými hodnotami A a zároveň být schopni je reprezentovat. Některé abstraktní hodnoty jsou mapované na více reprezentačních hodnot. Např. Je více možných způsobů jak reprezentovat nesetříděnou množinu znaků jako String. Ne všechny rep hodnoty jsou mapované. Pokud string nemá duplicity, tak to např. umožňuje ukončit remove metodu po nalezení první instance, protože další neexistuje. 18
19 ADT - Rep(rezentační) invarianty Definujeme dva základní termíny: Astraktní funkce - surjektivní mapování hodnoty z R do hodnot v A (abstraktních hodnot které reprezentují) - surjekce AF : R A Pozn. Surjekce = zobrazení na, druh zobrazení mezi množinami, které zobrazuje na celou cílovou množinu. Každý prvek cílové množiny má tedy alespoň jeden vzor. Rep invarianty - mapuje hodnoty z R na boolean (vlastnosti, které se drží a které ne) RI : R boolean 19
20 ADT Rep invarianty Příklad ADT pro reprezentaci racionálních čísel => Páry jako např. (2,4) a (18,12) nepatří do RI prostoru (mezi Rep Invarianty), protože nejsou v prvočíselném rozkladu jak je vyřadováno (numer/denom is in reduced form) RI - Rep Invarianty = validní reprezentace AF - abstraktní funce = mapuje validní reprezentace do R Abstraktní bariéra zajišťující nezávislost reprezentace public class RatNum { private final int numer; private final int denom; // Rep invariant: // denom > 0 // numer/denom is in reduced form // Abstraction Function: // represents the rational number numer / denom public RatNum(int n) { numer = n; denom = 1; checkrep(); public RatNum(int n, int d) throws ArithmeticException{ // reduce ratio to lowest terms int g = gcd(n, d); n = n / g; d = d / g; // make denominator positive if (d < 0) { numer = -n; denom = -d; else { numer = n; denom = d; checkrep();//used to check that Rep invariants hold 20
21 ADT Závěry Invarianta je vlastnost, která je vždy splněna na dané instanci ADT po celý jeho životní cyklus Dobrý ADT si drží své vlastní invarianty Creators a Producers nejdříve inicializují Invarianty a Observers a Mutators je poté drží. Rep invarianty specifikují validní hodnoty reprezentace a jsou kontrolovány v runtime speciální metodou checkrep(), která do jisté míry nahrazuje preconditions. Abstraktní funkce mapují konkrétní reprezentace na abstraktní hodnoty, které reprezentují Zpřístupnění reprezentace (Representation exposure) je ohrožením pro nezávislost reprezentace (Representation independence) a zachování invariant (Invariant preservation). ADT Rep Invarianty = kuchařka jak vytvářet abstraktní datové typy tak: a. aby se minimalizovaly možnosti vzniku chyb b. kód byl srozumitelný c. kód byl připravený na změny. REFERENCE: 21
OMO 3 - Klíčové koncepty modelování systémů II
OMO 3 - Klíčové koncepty modelování systémů II Abstraktní datový typ Mutabilita, immutabilita Invarianty Ing. David Kadleček, PhD. 1 Mutabilita Mutable (měnitelné) objekty jsou takové, které obsahují metody,
Modularita. Karel Richta a kol. Katedra počítačů Fakulta elektrotechnická České vysoké učení technické v Praze Karel Richta, 2016
Modularita Karel Richta a kol. Katedra počítačů Fakulta elektrotechnická České vysoké učení technické v Praze Karel Richta, 2016 Objektové modelování, xxb36omo 10/2016, Modularita https://cw.fel.cvut.cz/wiki/courses/xxb36omo/start
Ú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
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í
Neměnné objekty. Tomáš Pitner, upravil Marek Šabo
Neměnné objekty Tomáš Pitner, upravil Marek Šabo Neměnné objekty Neměnný (immutable) objekt nemůže být po jeho vytvoření modifikován Bezpečně víme, co v něm až do konce života bude Tudíž může být souběžně
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ě
Příklad : String txt1 = new String( Ahoj vsichni! ); //vytvoří instanci třídy String a přiřadí ji vnitřní hodnotu Ahoj vsichni!
Java práce s řetězci Trochu povídání.. Řetězce jsou v Javě reprezentovány instancemi tříd StringBuffer a String. Tyto třídy jsou součástí balíčku java.lang, tudíž je možno s nimi pracovat ihned bez nutného
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
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
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ř.
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ů
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
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ů
Čipové karty Lekařská informatika
Čipové karty Lekařská informatika Následující kód je jednoduchou aplikací pro čipové karty, která po překladu vytváří prostor na kartě, nad kterým jsou prováděny jednotlivé operace a do kterého jsou ukládány
Výč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
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 =
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í
9 - Map/filter/reduce OMO. Ing. David Kadleček, PhD
9 - Map/filter/reduce OMO Ing. David Kadleček, PhD kadlecd@fel.cvut.cz, david.kadlecek@cz.ibm.com 1 Map/filter/reduce v Java Map/filter/reduce v Java = Java 1.8 streams API Funkcionální přístup (řetězíme
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
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)
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ů
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ů
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
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í
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í
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,
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ý
Ú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í
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
Ú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
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ě
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ů
Ú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
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
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ů
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ší
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.
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
7. Dynamické datové struktury
7. Dynamické datové struktury Java poskytuje několik možností pro uložení většího množství dat (tj. objektů či primitivních datových typů) v paměti. S nejjednodušší z nich, s polem, jsme se již seznámili.
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í
Lambda funkce Novinky v interfaces Streamy Optional - aneb zbavujeme se null. Java 8. Ondřej Hrstka
Java 8 Ondřej Hrstka Katedra počítačů Fakulta elektrotechnická České vysoké učení technické v Praze Přednáška 13 A0B36PR2 Programování 2 Ondřej Hrstka, 2015 A0B36PR2 Přednáška 13: Java 8 1 / 26 Obsah Lambda
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
Jazyk C# (seminář 3)
Jazyk C# (seminář 3) Pavel Procházka KMI 15. října 2014 Motivace Představme si problém, jak napsat seznam v C# class IntList{... int value; public void IntList( int val, List next ){... V čem je to nevýhodné?
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ů
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
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,
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
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
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í
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,
boolean hasnext() Object next() void remove() Kolekce
11. Kontejnery Kontejnery Kontejnery jako základní dynamické struktury v Javě Kolekce, iterátory (Collection, Iterator) Seznamy (rozhraní List, třídy ArrayList, LinkedList) Množiny (rozhraní Set, třída
Java a XML. 10/26/09 1/7 Java a XML
Java a XML Java i XML jsou přenositelné V javě existuje podpora pro práci s XML, nejčastější akce prováděné při zpracování XML: načítání XML elementů generování nových elementů nebo úprava starého zápis
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
Datové struktury. Obsah přednášky: Definice pojmů. Abstraktní datové typy a jejich implementace. Algoritmizace (Y36ALG), Šumperk - 12.
Obsah přednášky: Definice pojmů o datový typ, o abstraktní datový typ Datové struktury Abstraktní datové typy a jejich implementace o Fronta (Queue) o Zásobník (Stack) o Množina (Set) Algoritmizace (Y36ALG),
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í
Stream API. Petr Krajča. Základy programovaní 4 (Java) Katedra informatiky Univerzita Palackého v Olomouci
Základy programovaní 4 (Java) Stream API Petr Krajča Katedra informatiky Univerzita Palackého v Olomouci Petr Krajča (UP) KMI/ZP4JV 5. listopad, 2014 1 / 10 Stream API Java 8 nový přístup k práci s kolekcemi
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
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
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
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
Jak v Javě primitivní datové typy a jejich reprezentace. BD6B36PJV 002 Fakulta elektrotechnická České vysoké učení technické
Jak v Javě primitivní datové typy a jejich reprezentace BD6B36PJV 002 Fakulta elektrotechnická České vysoké učení technické Obsah Celočíselný datový typ Reálný datový typ Logický datový typ, typ Boolean
Část I Spojové struktury
Část 1 Spojové struktury (seznamy) Spojové struktury Jan Faigl Katedra počítačů Fakulta elektrotechnická České vysoké učení technické v Praze Přednáška 10 A0B36PR1 Programování 1 Spojové struktury Spojový
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í
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
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
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ů
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
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;
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:
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
KTE / ZPE Informační technologie
7 KTE / ZPE Informační technologie Ing. Petr Kropík, Ph.D. email: pkropik@kte.zcu.cz tel.: +420 377 63 4639, +420 377 63 4606 (odd. informatiky) Katedra teoretické elektrotechniky FEL ZČU Plzeň - ternární
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
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
Úvod do programování v jazyce Java
Úvod do programování v jazyce Java Petr Krajča Katedra informatiky Univerzita Palackého v Olomouci 5. říjen, 2011 Petr Krajča (UP) KMI/UP3J: Seminář I. 5.10.2011 1 / 17 Organizační informace email: petr.krajca@upol.cz
4.4.2012. Obsah přednášky. Příkaz for neúplný. Příkaz for příklady. Cyklus for each (enhanced for loop) Příkaz for příklady
Základy programování (IZAPR, IZKPR) Přednáška 5 Ing. Michael Bažant, Ph.D. Katedra softwarových technologií Kancelář č. 03 022, Náměstí Čs. legií Michael.Bazant@upce.cz Obsah přednášky Příkazy cyklu -
Základy jazyka C# Obsah přednášky. Architektura.NET Historie Vlastnosti jazyka C# Datové typy Příkazy Prostory jmen Třídy, rozhraní
Základy jazyka C# doc. Ing. Miroslav Beneš, Ph.D. katedra informatiky FEI VŠB-TUO A-1007 / 597 324 213 http://www.cs.vsb.cz/benes Miroslav.Benes@vsb.cz Obsah přednášky Architektura.NET Historie Vlastnosti
Stromy. Příklady. Rekurzivní datové struktury. Základní pojmy
Základní pojmy Stromy 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 Graf uzly hrany orientované / neorientované Souvislý
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,
Základy programovaní 3 - Java. Unit testy. Petr Krajča. Katedra informatiky Univerzita Palackého v Olomouci. 26.,27.
Základy programovaní 3 - Java Unit testy Petr Krajča Katedra informatiky Univerzita Palackého v Olomouci 26.,27. listopad, 2014 Petr Krajča (UP) Unit testy 26.,27. listopad, 2014 1 / 14 Testování zásadní
OMO. 1 - Klíčové koncepty modelování systémů I
OMO 1 - Klíčové koncepty modelování systémů I Programovací paradigmata Deklarativní versus imperativní reprezentace Práce s komplexitou Dekompozice Hierarchie Základní abstrakce (jmenné, datové, funkcionální)
Algoritmizace a programování
Algoritmizace a programování Struktura programu Vytvoření nové aplikace Struktura programu Základní syntaktické elementy První aplikace Verze pro akademický rok 2012/2013 1 Nová aplikace NetBeans Ve vývojovém
Fronta (Queue) Úvod do programování. Fronta implementace. Fronta implementace pomocí pole 1/4. Fronta implementace pomocí pole 3/4
Fronta (Queue) Ú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 Fronta uplatňuje mechanismus přístupu FIFO first
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ář
Spojové struktury. Jan Faigl. Katedra počítačů Fakulta elektrotechnická České vysoké učení technické v Praze. Přednáška 10 A0B36PR1 Programování 1
Spojové struktury Jan Faigl Katedra počítačů Fakulta elektrotechnická České vysoké učení technické v Praze Přednáška 10 A0B36PR1 Programování 1 Jan Faigl, 2015 A0B36PR1 Přednáška 10: Spojové struktury
Sdílení dat mezi podprogramy
Sdílení dat mezi podprogramy Datové objekty mohou být mezi podprogramy sdíleny pomocí ne-lokálních referenčních prostředí, která jsou vytvářena na základě æ explicitních modifikací (formální parametry
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
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
IAJCE Přednáška č. 8. double tprumer = (t1 + t2 + t3 + t4 + t5 + t6 + t7) / 7; Console.Write("\nPrumerna teplota je {0}", tprumer);
Pole (array) Motivace Častá úloha práce s větším množstvím dat stejného typu o Př.: průměrná teplota za týden a odchylka od průměru v jednotlivých dnech Console.Write("Zadej T pro.den: "); double t = Double.Parse(Console.ReadLine());
Iterator & for cyklus
Iterator & for cyklus for (Object o : foo) funguje pokud je foo pole nebo je foo iterovatelné jako to zařídit? implementovat interface java.lang.iterable Iterable má jednu metodu java.util.iterator iterator()
Code Contracts. Robert Haken [MVP ASP.NET, MCT] Software architect, Owner at HAVIT, s.r.o. knowledge-base.havit.cz
Code Contracts Robert Haken [MVP ASP.NET, MCT] Software architect, Owner at HAVIT, s.r.o. knowledge-base.havit.cz Contracts volaná strana deklaruje, jak se chová vzniká dohoda mezi volající a volanou stranou
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í
State. Známý jako. Účel. Použitelnost. Stav, Object for States. umožňuje objektu měnit svoje chování v závislosti na stavu objekt mění svou třídu
State State Známý jako Stav, Object for States Účel umožňuje objektu měnit svoje chování v závislosti na stavu objekt mění svou třídu Použitelnost chování objektu závisí na jeho stavu, který se mění za
Soubor jako posloupnost bytů
Soubory Soubor je množina údajů uložená ve vnější paměti počítače, obvykle na disku Pro soubor jsou typické tyto operace. otevření souboru čtení údaje zápis údaje uzavření souboru Přístup k údajům (čtení
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,
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,
OMO. 1 - Klíčové koncepty modelování systémů I
OMO 1 - Klíčové koncepty modelování systémů I Programovací paradigmata Deklarativní versus imperativní reprezentace Práce s komplexitou Dekompozice Hierarchie Základní abstrakce (jmenné, datové, funkcionální)
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
Jakub Čermák <jakub@jcermak.cz> http://www.jcermak.cz. Microsoft Student Partner
Jakub Čermák http://www.jcermak.cz Microsoft Student Partner Úvod, příklady použití, trocha teorie Struktura aplikace Typy obecně, primitivní typy, speciální typy Podmínky, cykly, namespaces