November Black Friday C# týden
BlackFriday je tu! Využij jedinečnou příležitost a získej až 80 % znalostí navíc zdarma! Více zde
Pouze tento týden sleva až 80 % na e-learning týkající se C#

Lekce 1 - Úvod do objektově orientovaného programování v Javě

Unicorn College Tento obsah je dostupný zdarma v rámci projektu IT lidem.
Vydávání, hosting a aktualizace umožňují jeho sponzoři.

Vítejte u první lekce kurzu o objektově orientovaném programování v Javě. Kurz Základní konstrukce jazyka Java již máme zasebou, minule jsme ji dokončili dílem Matematické funkce v Javě a knihovna Math. V tomto kurzu se naučíme objektově programovat a hlavně objektově myslet. Je to něco trochu jiného, než jsme dělali doteď a samotný program už nebudeme chápat jako několik řádek příkazů, které interpret vykonává odshora dolů.

Objektově orientované programování (dále jen OOP) nevzniklo náhodou, ale je důsledkem vývoje, který k němu směřoval. Jedná se o moderní metodiku vývoje softwaru, kterou podporuje většina programovacích jazyků. Častou chybou je, že se lidé domnívají, že OOP se využívá pouze při psaní určitého druhu programů a jinak je na škodu. Opak je pravdou - OOP je filosofie, je to nový pohled na funkci programu a komunikaci mezi jeho jednotlivými částmi. Mělo by se používat vždy, ať už děláme malou utilitku nebo složitý databázový systém. OOP není jen technika nebo nějaká doporučená struktura programu, je to hlavně nový způsob myšlení, nový náhled na problémy a nová éra ve vývoji softwaru.

Nejprve se podíváme do historie, jak se programovalo dříve a které konkrétní problémy OOP řeší. Je to totiž důležité k tomu, abychom pochopili, proč OOP vzniklo.

Evoluce metodik

Mezi tím, jak se programovalo před 40ti lety a jak se programuje dnes, je velký rozdíl. První počítače neoplývaly velkým výkonem a i jejich software nebyl nijak složitý. Vývoj hardwaru je však natolik rychlý, že se počet tranzistorů v mikroprocesorech každý rok zdvojnásobí (Moorův zákon). Bohužel, lidé se nedokáží rozvíjet tak rychle, jako se rozvíjí hardware. Stále rychlejší počítače vyžadují stále složitější a složitější software (resp. lidé toho chtějí po počítačích stále více a více). Když se v jedné chvíli zjistilo, že okolo 90% softwaru je vytvořeno se zpožděním, s dodatečnými náklady nebo selhalo úplně, hledaly se nové cesty, jak programy psát. Vystřídalo se tak několik přístupů, přesněji se jim říká paradigma (chápejte jako směr myšlení). My si je zde popíšeme.

1. Strojový kód

Program byl jen souborem instrukcí, kde jsme neměli žádnou možnost pojmenovávat proměnné nebo zadávat matematické výrazy. Zdrojový kód byl samozřejmě specifický pro daný hardware (procesor). Toto paradigma bylo brzy nahrazeno.

2. Nestrukturované paradigma

Nestrukturovaný přístup je podobný assemblerům, jedná se o soubor instrukcí, který se vykonává odshora dolů. Zdrojový kód již nebyl závislý na hardwaru a byl lépe čitelný pro člověka, přístup na nějakou dobu umožnil vytvářet komplexnější programy. Bylo tu však stále mnoho úskalí: Jediná možnost, jak udělat něco vícekrát nebo jak se v kódu větvit, byl příkaz GOTO. GOTO nám umožňovalo "skákat" na jednotlivá místa v programu. Místa byla dříve specifikována číslem řádku zdrojového kódu, což je samozřejmě nepraktické. Když do kódu vložíme nový řádek, čísla přestanou souhlasit a celý kód je rozbitý. Později vznikla možnost definovat tzv. "návěstí". Takto se obcházela např. absence cyklů. Takovýto způsob psaní programů je samozřejmě velice nepřehledný a brzy přestal postačovat pro vývoj složitějších programů.

Uvědomme si, že obrovské rozšíření počítačů za posledních několik dekád má na svědomí růst poptávky po softwaru a logicky také růst poptávky po programátorech. Jistě existují lidé, kteří dokáží bez chyby psát programy v ASM nebo jiných nízkých jazycích, ale kolik jich je? A kolik si asi za takovou nadlidskou práci účtují? Je potřeba psát programy tak, aby i méně zkušení programátoři dokázali psát kvalitní programy a nepotřebovali k tvorbě jednoduché utilitky 5 let praxe.

3. Strukturované programování

Strukturované programování je první paradigma, které se udrželo delší dobu a opravdu chvíli postačovalo pro vývoj nových programů. Programujeme pomocí cyklů a větvení. To je v podstatě to, kam jsme se doteď dostali.

Program lze rozložit do funkcí (metod), tomu jsme se nevěnovali, protože to v Javě (která je objektová) ani moc dobře nejde a raději jsem dal přednost tento mezikrok přeskočit a začít rovnou s OOP. U strukturovaného programování hovoříme o tzv. funkcionální dekompozici. Problém se rozloží na několik podproblémů a každý podproblém potom řeší určitá funkce s parametry. Nevýhodou je, že funkce umí jen jednu činnost, když chceme něco jiného, musíme napsat novou. Neexistuje totiž způsob, jak vzít starý kód a jen trochu ho modifikovat, musíme psát znovu a znovu - vznikají zbytečné náklady a chyby. Tuto nevýhodu lze částečně obejít pomocí parametrizace funkcí (počet parametrů poté ale rychle narůstá) nebo použitím globálních proměnných. S globálními daty vzniká však nové nebezpečí - funkce mají přístup k datům ostatních. To je začátek konce, nikdy totiž neuhlídáme, aby někde nedošlo k přepsání glob. dat mezi funkcemi a začne docházet k nekontrolovatelným problémům. Celý program se potom skládá z nezapouzdřených bloků kódu a špatně se udržuje. Každá úprava programu zvyšuje složitost, program potom nutně dojde do stavu, kdy náklady na přidávání nových funkcí vzrostou na tolik, že se program již nevyplatí rozšiřovat. Zástupci tohoto přístupu jsou například jazyky C a Pascal.

Mezi strukturovaným programováním a objektově orientovaným programováním existoval ještě mezičlánek, tzv. modulární programování, která nám umožňuje zapouzdřit určitou funkcionalitu do modulů. Stále však neexistuje způsob, jak již napsaný kód modifikovat a znovu využít.

Tento výukový obsah pomáhají rozvíjet následující firmy, které dost možná hledají právě tebe!

Jak již jsem se zmínil na začátku článku, někdy se uvádí, že se jednoduché programy mají psát neobjektově, tedy strukturovaně. Není to však pravda. Když opomineme fakt, že porušujeme filozofii OOP jako takovou, nikdy nemůžeme vědět, zda se tento program neuchytí a z malé utilitky se nestane něco vážnějšího. Potom opět nutně dospějeme do stavu, kdy program nebude možné dál rozšiřovat a budeme ho buď muset zahodit nebo celý přepsat s pomocí OOP.

Neobjektovým metodám psaní kódu se přezdívá "spaghetti code" pro jejich nepřehlednost (protože špagety jsou zamotané).

Objektově orientovaný přístup

Jedná se o filozofii a způsob myšlení, designu a implementace, kde klademe důraz na znovupoužitel­nost. Přístup nalézá inspiraci v průmyslové revoluci - vynález základních komponent, které budeme dále využívat (např. když stavíme dům, nebudeme si pálit cihly a soustružit šroubky, prostě je již máme hotové).

Poskládání programu z komponent je výhodnější a levnější. Můžeme mu věřit, je otestovaný (o komponentách se ví, že fungují, jsou otestovány a udržovány). Pokud je někde chyba, stačí ji opravit na jednom místě. Jsme motivováni k psaní kódu přehledně a dobře, protože ho po nás používají druzí nebo my sami v dalších projektech (přiznejme si, že člověk je od přírody líný a kdyby nevěděl, že se jeho kód bude znovu využívat, nesnažil by se ho psát kvalitně :) ).

Znalosti, které jsme se doteď naučili, samozřejmě budeme používat dál. Náš kód budeme pouze jinak strukturovat a to do komunikujících objektů.

Jak OOP funguje

Snažíme se nasimulovat realitu tak, jak ji jsme zvyklí vnímat. Můžeme tedy říci, že se odpoutáváme od toho, jak program vidí počítač (stroj) a píšeme program spíše z pohledu programátora (člověka). Jako jsme tehdy nahradili assembler lidsky čitelnými matematickými zápisy, nyní jdeme ještě dál a nahradíme i ty. Jde tedy o určitou úroveň abstrakce nad programem. To má značné výhody už jen v tom, že je to pro nás přirozenější a přehlednější.

Základní jednotkou je objekt, který odpovídá nějakému objektu z reálného světa (např. objekt člověk nebo databáze).

Objekty v objektově orientovaném programování

Objekt má své atributy a metody.

Atributy

Atributy objektu jsou vlastnosti neboli data, která uchovává (např. u člověka jméno a věk, u databáze heslo). Jedná se o prosté proměnné, se kterými jsme již stokrát pracovali. Někdy o nich hovoříme jako o vnitřním stavu objektu.

Metody

Metody jsou schopnostmi, které umí objekt vykonávat. U člověka by to mohly být metody: jdiDoPrace(), pozdrav() nebo mrkni(). U databáze pridejZaznam() nebo vyhledej()). Metody mohou mít parametry a mohou také vracet nějakou hodnotu. Velmi dobře je známe, používali jsme např. metodu split() na objektu String. String je vlastně objekt, který reprezentuje v realitě nějaký text. Vidíte, že si můžeme jednoduše představit, že jednáme s řetězcem textu, něco mu přikazovat nebo na něm něco nastavovat. Obsahuje metody, které řetězec umí vykonávat (kopírování, mazání, splitování...) a má také nějaké atributy, např. delka, který značí jeho délku.

Objekty v objektově orientovaném programování

Ve starších jazycích metody nepatřily objektům, ale volně se nacházely v modulech (jednotkách). Místo text.split() bychom tedy postaru psali split(text). Nevýhodou samozřejmě bylo zejména to, že metoda split() zde nikam nepatří. Nebyl způsob, jakým si vyvolat seznam toho, co se s řetězcem dá dělat a v kódu byl nepořádek. Navíc jsme nemohli mít 2 metody se stejným názvem, v OOP můžeme mít uzivatel.vymaz() a clanek.vymaz(). To je velmi přehledné a jednoduché, ve strukturovaném programu bychom museli psát: vymaz_uzivate­le(uzivatel) a vymaz_clanek(cla­nek). Takovýchto hloupých metod bychom museli mít někde rozházených tisíce. Pokud vám to připomíná jazyk PHP, bohužel máte pravdu. PHP je v tomto opravdu hrozné a to z toho důvodu, že jeho návrh je starý. Sice se časem plně přeorientovalo na objekty, ale jeho základy se již nezmění. Java je naštěstí jazyk moderní a je silně postavená na objektech.

V tomto článku si vysvětlíme jen úplné základy, tedy jak objekty vytvářet a jak zapouzdřit jejich vnitřní logiku. Dalším funkcím OOP (mluvím zejména o dědičnosti) budou věnovány další lekce, aby toho nebylo najednou moc :)

Třída

S pojmem třída jsme se již také setkali, chápali jsme ji jako soubor příkazů. Třída však umožňuje mnohem více. Třída je vzor, podle kterého se objekty vytváří. Definuje jejich vlastnosti a schopnosti.

Objekt, který se vytvoří podle třídy, se nazývá instance. Instance mají stejné rozhraní jako třída, podle které se vytváří, ale navzájem se liší svými daty (atributy). Mějme například třídu Člověk a od ní si vytvořme instance karel a josef. Obě instance mají jistě ty samé metody a atributy, jako třída (např. jméno a věk) a metody (jdiDoPrace() a pozdrav()), ale hodnoty v nich se liší (první instance má v atributu jméno hodnotu "Karel" a ve věk 22, druhá "Josef" a 45).

Komunikace mezi objekty probíhá pomocí předávání zpráv, díky čemuž je syntaxe přehledná. Zpráva obvykle vypadá takto: příjemce.jméno­Metody(parame­try). Např. karel.pozdrav(sou­sedka) by mohl způsobit, že instance karel pozdraví instanci sousedka.

OOP stojí na základních třech pilířích:

  • Zapouzdření
  • Dědičnost
  • Polymorfismus.

Vysvětleme si první z nich.

Zapouzdření

Zapouzdření umožňuje skrýt některé metody a atributy tak, aby zůstaly použitelné jen pro třídu zevnitř. Objekt si můžeme představit jako černou skřínku (anglicky blackbox), která má určité rozhraní (interface), přes které jí předáváme instrukce/data a ona je zpracovává.

Nevíme, jak to uvnitř funguje, ale víme, jak se navenek chová a používá. Nemůžeme tedy způsobit nějakou chybu, protože využíváme a vidíme jen to, co tvůrce třídy zpřístupnil.

Příkladem může být třída Člověk, která bude mít atribut datumNarozeni a na jeho základě další atributy: plnolety a vek. Kdyby někdo objektu zvenčí změnil datumNarozeni, přestaly by platit proměnné plnolety a vek. Říkáme, že vnitřní stav objektu by byl nekonzistentní. Toto se nám ve strukturovaném programování může klidně stát. V OOP však objekt zapouzdříme a atribut datumNarozeni označíme jako privátní, zvenčí tedy nebude viditelný. Naopak ven vystavíme metodu zmenDatumNaro­zeni(), která dosadí nové datum narození do proměnné datumNarozeni a zároveň provede potřebný přepočet věku a přehodnocení plnoletosti. Použití objektu je bezpečné a aplikace stabilní.

Zapouzdření tedy donutí programátory používat objekt jen tím správným způsobem. Rozhraní (interface) třídy rozdělí na veřejně přístupné (public) a vnitřní strukturu (private).

V příští lekci, První objektová aplikace v Javě - Hello object world, si vytvoříme svůj první objektový program.


 

 

Článek pro vás napsal David Čápka
Avatar
Jak se ti líbí článek?
53 hlasů
Autor pracuje jako softwarový architekt a pedagog na projektu ITnetwork.cz (a jeho zahraničních verzích). Velmi si váží svobody podnikání v naší zemi a věří, že když se člověk neštítí práce, tak dokáže úplně cokoli.
Unicorn College Autor sítě se informační technologie naučil na Unicorn College - prestižní soukromé vysoké škole IT a ekonomie.
Všechny články v sekci
Objektově orientované programování v Javě
Miniatura
Následující článek
První objektová aplikace v Javě - Hello object world
Aktivity (6)

 

 

Komentáře

Avatar
lukas.klm94
Člen
Avatar
lukas.klm94:9.4.2013 23:17

Super, díky!:)

 
Odpovědět
9.4.2013 23:17
Avatar
Simon
Člen
Avatar
Simon:11.5.2013 14:47

Napsat tutoriál je jedna věc, ale napsat ho tak, abych ho pochopil i já, to klobouk dolů :D
Učitel na nás furt tasil s pojmama jako instance,zapou­zdření,konstruk­tory atd. a nikdo mu nikdy moc nerozumněl, teď si čtu tenhe článek a po 2 letech programování konečně rozumim těmto pojmům :D díky..

 
Odpovědět
11.5.2013 14:47
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na Simon
David Čápka:11.5.2013 14:49

Není zač, od toho tu jsou :)

Odpovědět
11.5.2013 14:49
Jsem moc rád, že jsi na síti, a přeji ti top IT kariéru, ať jako zaměstnanec nebo podnikatel. Máš na to! :)
Avatar
Mr. Forstak
Člen
Avatar
Odpovídá na David Čápka
Mr. Forstak:4.7.2013 21:37

!TOTO NENÍ ODPOVĚĎ NA TVŮJ KOMENTÁŘ, ALE CHCI ABY SIS TO PŘEČET!
Mám blbej dotaz: dá se přeskočit Základní Syntaxe a jít rovnou na OOP?

 
Odpovědět
4.7.2013 21:37
Avatar
Petr Nymsa
Redaktor
Avatar
Odpovídá na Mr. Forstak
Petr Nymsa:4.7.2013 21:43

Obecně ano ale na implementaci v jazyce bez základních znalostí celkem těžko ... a příště prosím bez toho Caps Locku ;)

Odpovědět
4.7.2013 21:43
Pokrok nezastavíš, neusni a jdi s ním vpřed
Avatar
Samik11
Redaktor
Avatar
Odpovídá na Mr. Forstak
Samik11:4.7.2013 21:48

Tak to bych rozhodně nedoporučoval. Navíc mám pocit, že zdejší tutoriály rozhodě takto koncipované nejsou. :-)
Existuje však například kniha, která se snad snaží na člověka vrhnout rovnou objektový přístup. Čtenář alespoň nezíská špatné návyky.

Myslíme objektově v jazyku Java
Odpovědět
4.7.2013 21:48
„Radost vidět a rozumět, to je nejkrásnější dar přírody.“ Albert Einstein
Avatar
Kit
Redaktor
Avatar
Odpovídá na Samik11
Kit:4.7.2013 21:52

Ta kniha má o něco kratší název: "Myslíme v jazyku Java".

Odpovědět
4.7.2013 21:52
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Mr. Forstak
Člen
Avatar
Odpovídá na Petr Nymsa
Mr. Forstak:4.7.2013 21:53

na mobilu SwiftKey Caps Lock není :) jenom 2x Shift

 
Odpovědět
4.7.2013 21:53
Avatar
Mr. Forstak
Člen
Avatar
Odpovídá na Petr Nymsa
Mr. Forstak:4.7.2013 21:53

Ale neboj

Editováno 4.7.2013 21:54
 
Odpovědět
4.7.2013 21:53
Avatar
Kit
Redaktor
Avatar
Odpovídá na Mr. Forstak
Kit:4.7.2013 21:56

Ale funguje jako Caps Lock, tak to nezamlouvej. Je to hodně dobře vidět, takže sis té chyby musel všimnout.

Odpovědět
4.7.2013 21:56
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Mr. Forstak
Člen
Avatar
 
Odpovědět
4.7.2013 21:57
Avatar
Mr. Forstak
Člen
Avatar
Odpovídá na Kit
Mr. Forstak:4.7.2013 21:58

to nebyla chyba

 
Odpovědět
4.7.2013 21:58
Avatar
David Hynek
Redaktor
Avatar
Odpovídá na Mr. Forstak
David Hynek:4.7.2013 23:33

To že ti je 12, ještě neznamená, že se tam musíš chovat.

Odpovědět
4.7.2013 23:33
Čím víc vím, tím víc věcí nevím.
Avatar
CutThroat
Člen
Avatar
Odpovídá na Mr. Forstak
CutThroat:4.7.2013 23:36

Začni se zde chovat slušně, nebo raději nic nepiš.

 
Odpovědět
4.7.2013 23:36
Avatar
Tomáš Brůna
Redaktor
Avatar
Tomáš Brůna:1.1.2015 21:17

Ahoj, je mi 12 a konečně jsme dodělal základní konstrukce, ale jak tak čtu článek a zjišťuji že už skoro ničemu nerozumím tak nějak nevím jestli na nějaký čas zůstat u těch základních konstrukcí a potom se vrhnout na objekty. Prosím poraďte jestli v tom mam dále pokračovat. Děkuju :-)

Odpovědět
1.1.2015 21:17
Vi veri universum vivus vici
Avatar
vosa53
Člen
Avatar
Odpovídá na Tomáš Brůna
vosa53:1.1.2015 21:57

Koukni na další článek o objektech, tohle je jen takova teorie, v dalším už je i kód. I když to asi vypadá složitě, tak to je jednoduchý. :) Vzpomínám si, jak jsem kdysi taky OOP nechápal a zdálo se mi, že vše jen komplikuje, ale teď už si bez něj nedokáži představit žádnou větší aplikaci.

 
Odpovědět
1.1.2015 21:57
Avatar
Tomáš Brůna
Redaktor
Avatar
Tomáš Brůna:2.1.2015 12:11

ok zkusím to jako když jsem začínal se základní kontsrukcí prošel jsem 3 lekce a teprve potom jsem to pochopil :)

Odpovědět
2.1.2015 12:11
Vi veri universum vivus vici
Tento výukový obsah pomáhají rozvíjet následující firmy, které dost možná hledají právě tebe!
Avatar
Tomáš Brůna
Redaktor
Avatar
Tomáš Brůna:26.2.2015 22:11

Omlouvám se asi sem to někde přehlédl ale můžu se zeptat co je v té tabulce to void ? :)

Odpovědět
26.2.2015 22:11
Vi veri universum vivus vici
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na Tomáš Brůna
David Čápka:26.2.2015 22:14

Void je návratový typ metod, konkrétně znamená že nic nevrací (void = prázdný). Bude to dále vysvětleno.

Odpovědět
26.2.2015 22:14
Jsem moc rád, že jsi na síti, a přeji ti top IT kariéru, ať jako zaměstnanec nebo podnikatel. Máš na to! :)
Avatar
Tomáš Brůna
Redaktor
Avatar
Odpovídá na David Čápka
Tomáš Brůna:26.2.2015 22:25

Aha děkuju mockrát :)

Odpovědět
26.2.2015 22:25
Vi veri universum vivus vici
Avatar
Stella Nina
Člen
Avatar
Stella Nina:1.9.2015 23:08

Skvele napsany a srozumitelny clanek! :) a ty analogie. :)

 
Odpovědět
1.9.2015 23:08
Avatar
Lubor Pešek
Člen
Avatar
Odpovídá na Kit
Lubor Pešek:5.12.2015 20:42

K té knížce... já ji osobně mám, prošel jsem si ji (dokonce 2x) a popravdě tam je to skloubené tak, že pan Rudolf Pecinovský nejdřív vysvětlí pojem z OOP a pak jen následně aplikuje v praxi (to že si zvolil Javu je jeho věc, odůvodňuje to tam - z části jako je to v těhle návodech).

Doporučuju všem, tyto tutoriály nejsou špatné, ale projděte si tu knihu. V roce 2008, když jsem si ji kupoval já stála okolo 500,-. Je tlustá, ale ne kvůli nalejvárně, ale protože projde s každým krok za krokem všechny příklady. Neukazuje jen výsledek, ale dokonce schválně dělá začátečnické chyby + jejich řešení, aby doopravdy naučila programovat.

Odpovědět
5.12.2015 20:42
Existují dva způsoby, jak vyřešit problém. Za prvé vyhoďte počítač z okna. Za druhé vyhoďte okna z počítače.
Avatar
Dohny
Člen
Avatar
Dohny:25.2.2016 9:29

Zdravím. Mohu prosím poprosit o nějaký přehledný graf včetně příkladu, kde na sebe navozuje třída, instance,metoda, atribut, parametr, objekt atd.? Četl jsem to už třikrát a snažím si něco si nakreslit, ale stále v tom mám zmatek.

 
Odpovědět
25.2.2016 9:29
Avatar
vajkuba1234
Člen
Avatar
Odpovídá na Dohny
vajkuba1234:25.2.2016 9:55

Mohl bys vice vysvetlit, co presne hledas? Nejak jsem to nepochopil. :)

Odpovědět
25.2.2016 9:55
No hope, no future, JUST WAR! For world peace Israel must be DESTROYED!
Avatar
Erik Báča
Člen
Avatar
Odpovídá na Dohny
Erik Báča:25.2.2016 16:55

Pokračuj dalšími díly, až to použiješ v praxi a zjistíš co to přesně dělá, bude ti to jasné ;)

Odpovědět
25.2.2016 16:55
Když mi dáš mínus, napiš proč!
Avatar
Jakub kožich:19.7.2017 15:14

Dobra prace Davide, je to radost ucit se javu podle tvych claku.

 
Odpovědět
19.7.2017 15:14
Avatar
Polis Jiří
Člen
Avatar
Polis Jiří:27.10.2017 14:31

Začínám s programováním a IT Network mi přišla jako dobrá věcička, která mě toho hodně naučí.
Je to super.

Jirka.

 
Odpovědět
27.10.2017 14:31
Avatar
NomisCode
Člen
Avatar
NomisCode:31.1.2018 22:15

Super návod, lehký na pochopení.
Díky

 
Odpovědět
31.1.2018 22:15
Avatar
Roman Čabala:6.4.2018 11:12

Super vysvetlené :)

 
Odpovědět
6.4.2018 11:12
Avatar
monika Sinkoviczova:29.5.2018 7:11

Super :-)

 
Odpovědět
29.5.2018 7:11
Avatar
Zdenek
Člen
Avatar
Zdenek:21.6.2018 0:13

Diky za clanek

 
Odpovědět
21.6.2018 0:13
Avatar
Feri Laky
Člen
Avatar
Feri Laky:20. ledna 15:22

Jsem rád, že jsem tohle začal číst - mám Pecinovského, pod kterým jsem začal kolem 1990 Pascal a posílali jsme takové ty vyřezávané pásy papíru, kde správné odpovědi se vystřihovaly nůžkami v binárním kódu.Bohužel rozpadem Československa všechno skončilo - chyběl mi k získání "diplomu" jeden rok.
Je výborná možnost porovnat výklad OOP zde a Pecinovského - pouze začnu - ale už teď díky za články p.Čápka (promiň Davide - zapoměl jsem, že se tady tyká :-)))

 
Odpovědět
20. ledna 15:22
Avatar
Leona Koubková:1. května 9:31

Perfektně vysvětleno, díky moc za super článek :)

 
Odpovědět
1. května 9:31
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 33 zpráv z 33.