September discount week
Pouze tento týden sleva až 80 % na e-learning týkající se MS Office
50 % bodů zdarma na online výuku díky naší Slevové akci!

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

Vítejte u první lekce úvodu do objektově orientovaného programování v C#. Kurz Základní konstrukce jazyka C# již máme za sebou, minule jsme jej dokončili lekcí Matematické funkce v C# 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 řádků 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 C# (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.

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.

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

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 jmeno a vek, 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.

Slovo vlastnost si v Microsoftu vyhradili pro specifické využití a to samé platí pro atribut. Proměnným objektů říkají field, což se zase kryje s českým slovem pole. Budu tedy používat slovo atribut, i když to nebude úplně korektní.

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. I 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ř. Length, 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() tehdy nikam nepatřila. Nebyl způsob, jak 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_uzivatele(uzivatel) a vymaz_clanek(clanek). 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í. C# je naštěstí jazyk moderní a celý .NET 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 Clovek a od ní si vytvořme instance karel a josef. Obě instance mají jistě ty samé metody a atributy, jako třída (např. jmeno a vek) a metody (JdiDoPrace() a Pozdrav()), ale hodnoty v nich se liší (první instance má v atributu jmeno hodnotu "Karel" a ve vek 22, druhá "Josef" a 45).

Objekty v objektově orientovaném programování

Komunikace mezi objekty probíhá pomocí předávání zpráv, díky čemuž je syntaxe přehledná. Zpráva obvykle vypadá takto: prijemce.NazevMetody(parametry). Např. karel.Pozdrav(sousedka) 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 Clovek, 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 ZmenDatumNarozeni(), 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 C# - Hello object world, si vytvoříme svůj první objektový program.


 

Všechny články v sekci
Objektově orientované programování v C# .NET
Článek pro vás napsal David Čápka
Avatar
Jak se ti líbí článek?
83 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 university Autor sítě se informační technologie naučil na Unicorn College - prestižní soukromé vysoké škole IT a ekonomie.
Aktivity (13)

 

 

Komentáře

Avatar
Kit
Redaktor
Avatar
Kit:20.10.2012 16:34

Je dost nešťastné označit pojem "člověk" jako objekt a o několik řádek níž použít pojem "člověk" jako třídu. "člověk" je třída, "Franta" je instancí třídy "člověk".

"Praha" a "Brno" jsou objekty třídy "město".
"Alík" a "Asta" jsou objekty třídy "pes".

V reálném životě objekt od třídy rozeznáme tak, že název objektu píšeme zpravidla s velkým písmenem na začátku slova, název třídy s malým písmenem. V mnohých programovacích jazycích bývá zvykem to psát přesně naopak. Nikdo neví proč, ale je to tak.

Odpovědět
20.10.2012 16:34
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na Kit
David Čápka:20.10.2012 16:44

Hádám, že je to proto, aby OOP navázalo na předešlé konvence, kde proměnné byly malými písmeny.

Pojem objekt je vůbec dost nejednoznačný, ale už se to tak jmenuje (není to instanční programování), proto ho musím používat a nebudu hned zpočátku plést instancí. GameMaker říká třídě object, asi na to přišel podobně.

Odpovědět
20.10.2012 16:44
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
Kit
Redaktor
Avatar
Odpovídá na David Čápka
Kit:20.10.2012 17:00

Ještě zajímavější je to v Javascriptu a dalších skriptovacích jazycích, kde místo tříd jsou prototypy, které se však chovají odlišně.

Myslím si, že tvůj odhad ohledně velkých/malých písmen se blíží realitě. V HTML bylo zpočátku zvykem psát tagy velkými písmeny, aby se odlišily od okolního textu. Dnes se píší malými a v XHTML dokonce povinně. V jazyku SQL je zvykem psát klíčová slova velkými písmeny a názvy polí malými. Přitom dnes v době barvení syntaxe v editoru to je zbytečné. Třeba to někdy bude naopak.

Odpovědět
20.10.2012 17:00
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na Kit
David Čápka:20.10.2012 17:14

Někde jsem slyšel, že aby se nějaké paradigma uchytilo, tak v sobě musí obsahovat většinu toho minulého (myslím, že to bylo 90%). OOP procedurální kód vlastně pouze rozvíjí. Asi proto jsou tak úspěšné i céčkové jazyky, ORM (oproti non-relačním databázím) a tak dále. Asi to funguje.

Odpovědět
20.10.2012 17: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
Kit
Redaktor
Avatar
Odpovídá na David Čápka
Kit:20.10.2012 17:26

Možná proto se tolik neuchytily funkcionální a deklarativní jazyky. Jsou sice velmi efektivní, ale je to tak zásadní změna paradigmatu, že je to pro programátory "zkažené" imperativními jazyky obtížné pochopit.

Odpovědět
20.10.2012 17:26
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
milos
Neregistrovaný
Avatar
milos:15.9.2013 21:42

Sám příkaz GOTO není škodlivý, do něj se nakonec přeloží i cykl. Pořádek je možné udržet i v assembleru nebo puvodnim basicu, jde o to, aby kod byl strukturovaný. A to jsem zažil hezký program v assembleru ale i pole proměnných návěští v PL/1 (ačkoli i to mělo své důvody, které později pominuly).

Znovupoužitelnost není objev OOP nebo modulárního programování - vznikaly knihovny procedur, které zapouzdřovaly funkce a daly se používat univerzálně.

"Spaghetti code" tedy neznamená neobjektový kod, ale neorganizovaný kod.

 
Odpovědět
15.9.2013 21:42
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na milos
David Čápka:17.9.2013 10:01

Pořádek by teoreticky šlo udržet na silnici i bez značení, čar a semaforů. I když by to pár řidičů asi zvládlo, dokážeš si představit, jak by to vypadalo v praxi. Kdyby to fungovalo, tak by OOP nevzniklo. Knihovny jsou spíše takovým mezikrokem, určitě jde mluvit o znovupoužitelnosti, ale těžko o komponentách.

Odpovědět
17.9.2013 10:01
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
martin.stiglinc
Redaktor
Avatar
martin.stiglinc:4.6.2015 18:27

Tento Vas tutorial je zatial to najlepsie co som na webe nasiel :-) Len tak dalej :D Diki moc za cenne informacie a hlavne zrozumitelne vysvetlenie.

Odpovědět
4.6.2015 18:27
Tomorow is the very first day of the rest of your life.
Avatar
Petr Zajac
Člen
Avatar
Petr Zajac:1.3.2018 14:02

Předchozí díly jsem tak nějak pochopil a děkuju za ně.
Ale tenhle díl nechápu prakticky zatím vůbec :-/
Navíc netuším jestli v odstavci "Strojový kód" není překlep, protože tam najednou používáte "zdrojový kód" :-O

 
Odpovědět
1.3.2018 14:02
Avatar
Ondřej Štorc
Redaktor
Avatar
Odpovídá na Petr Zajac
Ondřej Štorc:1.3.2018 14:15

Strojový kód je také zdrojový, to se nevylučuje :-) Jak říká Wikipedia (https://cs.m.wikipedia.org/…Zdrojový_kód) tak zdrojový kód je zápis programu, což strojový splňuje.

Odpovědět
1.3.2018 14:15
Život je příliš krátký na to, abychom bezpečně odebírali USB z počítače..
Avatar
Petr Zajac
Člen
Avatar
Odpovídá na Ondřej Štorc
Petr Zajac:1.3.2018 14:39

Zdrojový kód (též zdrojový text,[1] slangově zdroják, anglicky source code) je v informatice označení zápisu počítačového programu nebo jeho části v nějakém programovacím jazyce. (z toho odkazu na Wiki)
Navíc ... "Samotný zdrojový kód nelze přímo využít. Je potřeba ho buď nechat přímo provádět interpretem nebo je možné ho nejprve překladačem přeložit do cílového strojového kódu procesoru a poté ho nechat přímo procesorem vykonávat." (ten samý odkaz).
Takže tam asi BUDE rozdíl mezi ZDROJOVÝM a STROJOVÝM kódem ?!?! :-O

 
Odpovědět
1.3.2018 14:39
Avatar
Moni
Člen
Avatar
Moni:19.3.2018 20:33

Pěkně a jasně rozepsané. Děkuji

 
Odpovědět
19.3.2018 20:33
Avatar
Aleš F.
Člen
Avatar
Aleš F.:4.6.2018 16:25

Zdravím,
do teď jsem psal hlavně v Delphi formulářové aplikace. Vzhledem k tomu, že stále více je vidět nějaké C, C++ ...a vše je tak nějak spojeno s tím C, řekl jsem si, že je čas na změnu. Kolega z práce mě přivedl k C# a doporučil tento WEB. Samozřejmě jakož to člověk který již několik projektů napsal, jsem hned nainstaloval VS a doufal, že se jedná jen o kosmetické rozdíly mezi těmito jazyky. No co budu povídat, je to nebe a dudy. Díky za tento seriál. Není to pro mně úplně snadné, ale zdá se, že to půjde.

 
Odpovědět
4.6.2018 16:25
Avatar
Dušan Kovářík:10.6.2018 2:51

Myslím, že na základní úrovni rozumím pojmům jako třída, instance (objekt), zapouzdření, polymorfismus, dědičnost, metody atd., protože s tím mám trochu zkušenosti z C++ a Javy (i když ani jeden z těchto jazyků jsem se nikdy nenaučil opravdu do hloubky a do detailů). Kdybych o OOP nevěděl nic, asi bych toho z článku moc nepochopil, ale myslím si, že to nevadí, protože když jsem se s OOP setkal poprvé, taky mi to nebylo moc jasné, ale netrvalo dlouho a ta filosofie a principy mi přišly jednoduché. Proto bych každému, kdo z tohoto článku bude mít pocit, že neví, o čem to celé je, doporučil si z toho vůbec nedělat vrásky a pustit se do dalších lekcí a zkrátka dál programovat! Vlastně si myslím, že ono ani nejde dost výstižně vysvětlit filosofii OOP, protože člověk všechny ty věci a souvislosti stejně pochopí postupně za pochodu. Pro mě je to takový stručný úvod (a to je dobře, že je stručný), "nástřel", nad kterým nemá cenu moc hloubat, ale když se k článku vrátíte po čase, uvidíte, že všechno je v pohodě - potom to bude mít pro čtenáře i větší hodnotu. Takže hlavně klid :) Kdyby tento úvod David rozebíral moc podrobně, tak by to možná spoustu lidí mohlo i odradit a to by byla škoda.

 
Odpovědět
10.6.2018 2:51
Avatar
Štefan Rajský:15.12.2018 10:12

Dobrý deň! Chcel by som sa týmto príspevkom poďakovať za základný kurz. Viacerí sa orientujú na podobné školenia. Som rád, že som narazil na vás. Kurz je prehľadný, postavený na množstve praktických príkladov. Predovšetkým obdivujem pedagogické stupňovanie nárokov z jednej lekcie k druhej, takže som, ako 76 - ročný chlap, mohol, aspoň doteraz, pochopiť, ako sa s týmto jazykom pracuje. Už som priam zvedavý, čo bude ďalej... Ďakujem autorovi za trpezlivé vysvetľovanie!
Tiež by som rád vyzdvihol možnosť prístupu k zodpovedaným otázkam mojich predchodcov (členov). Keď mi bolo niečo nejasné, bol som rád, že niekto predo mnou sa na niečo podobné pýtal.
Ešte raz, srdečná vďaka.
Rajský

 
Odpovědět
15.12.2018 10:12
Avatar
Pavel Vaněček
Super redaktor
Avatar
Pavel Vaněček:27.12.2018 0:21

Zdravím, tento článek mi velice pomohl pochopit základy OOP a obohatil mě o nové pojmy a metody psaní programů. Článek je napsán přehledně a srozumitelně a hned se vrhnu na další. Velice děkuji, chválím ! :-) ;-)

Odpovědět
27.12.2018 0:21
Jedno kafe je málo, dvě jsou moc.
Avatar
Odpovídá na Dušan Kovářík
Tomáš Endlicher:20.1.2019 14:19

Jsem fakt rád, že tohle píšeš! :-) Ještě tak dva měsíce zpátky jsem programování neviděl ani z letadla a při čtení prvních článků a lekcí základů, jsem měl podobné pocity, jako dnes po přečtení začátků OOP, ale přesně jak píšeš, pokračoval jsem v lekcích a postupně jsem se do toho dostal. ;-)

Tímto také děkuji autorům za základní kurz. :-)

Editováno 20.1.2019 14:20
 
Odpovědět
20.1.2019 14:19
Avatar
Odpovídá na Tomáš Endlicher
Dušan Kovářík:21.1.2019 14:02

Díky :) Já teď jedu základní kurz od začátku, resp. si ho opakuju, abych se mohl co nejdřív vrátit sem k OOP. To je tak, když se člověk nechá v životě odvést od důležitých věcí různými pi… :-D Jsem rád, že nebudu sám, kdo se teď tím aktuálně zabývá! Ať se daří!

 
Odpovědět
21.1.2019 14:02
Tento výukový obsah pomáhají rozvíjet následující firmy, které dost možná hledají právě tebe!
Avatar
Tomáš Endlicher:21.1.2019 16:56

Taky přemýšlím, že si ten základní kurz zopakuju, protože když jsem se občas vracel do určitých lekcí kvůli řešení nějakého příkladu, tak jsem zjistil, že jsou tam věci, které už jsem stihl zapomenout. :-P
Taky přeju hodně úspěchů ;-)

Editováno 21.1.2019 16:57
 
Odpovědět
21.1.2019 16:56
Avatar
Křemičitan
Člen
Avatar
Odpovídá na Dušan Kovářík
Křemičitan:21.7.2019 15:34

Já sice teprve začínám, ale to opakování vypadá napořád. Protože i když se to nezdá, je toho hodně a asi bude hůř než lépe.

 
Odpovědět
21.7.2019 15:34
Avatar
Křemičitan
Člen
Avatar
Křemičitan:21.7.2019 15:38

Chtěl bych se zeptat, zdali se tady nenachází nějaká šipka nebo odkaz, která by mě poslala na další lekci, ať se nemusím vracet na hlavní stránku.

 
Odpovědět
21.7.2019 15:38
Avatar
Martin Petrovaj
Redaktor
Avatar
Odpovídá na Křemičitan
Martin Petrovaj:21.7.2019 15:47

Na konci článku je spravidla odkaz, plus medzi článkom a komentármi je tá šípka

Odpovědět
21.7.2019 15:47
if (this.motto == "") { throw new NotImplementedException(); }
Avatar
Křemičitan
Člen
Avatar
Odpovídá na Martin Petrovaj
Křemičitan:21.7.2019 15:57

Aha, děkuji, jsem slepý.

 
Odpovědět
21.7.2019 15:57
Avatar
Odpovídá na Křemičitan
Dušan Kovářík:21.7.2019 22:29

Já jsem si začal dělat poznámky. Pak, když si zkouším něco programovat, a nemůžu si vzpomenout, jak se ta která metoda používá, tak se podívám do poznámek. Pokud jde o základy, tak např. Java a C# jsou velice podobné - a tak jsem si projel celý kurz základů Javy a doplnil jsem si přitom poznámky týkající se syntaktických rozdílů. Stejně to dělám i teď v sekci OOP - učím se Javu a C# současně a dělám si poznámky ohledně toho, o čem vím, že se k tomu budu muset vracet a opět, v čem se liší syntaxe Javy a C sharpu. Až dojde na pokročilejší věci, tam už se to samozřejmě bude lišit mnohem víc. Ale chci umět základy Javy už jen proto, že je to (dle některých statistik) nejpoužívanější OOP jazyk vůbec a spousta knih popisuje některé věci (např. návrhové vzory) a principy právě na příkladech v Javě, takže pokud se tyto principy budu chtít naučit, tak zkrátka potřebuju té syntaxi rozumět. Přeju hodně úspěchů a vytrvalosti!

 
Odpovědět
21.7.2019 22:29
Avatar
Nositelka Změny:2. ledna 14:24

Přemýšlím, není ta znuvupoužitelnost stejná s objekty i bez nich? V obou případech prostě jenom zkopírujeme celou knihovnu/třídu, smažeme, co se nám nehodí a napíšeme to znovu. Jenom bez objektů si to musíme zajistit sami, zatímco tady použijeme dědičnost. Je to tedy "pouze" jednodušší a přehlednější. Pochopil jsem to správně, nebo mi něco uniklo?

Odpovědět
2. ledna 14:24
j.k.j
Avatar
Michal Walach:16. února 12:58

Pokud atribut je v angličtině field, jak je potom v angličině pole?

 
Odpovědět
16. února 12:58
Avatar
 
Odpovědět
16. února 22:55
Avatar
David Holohlavský:6. dubna 13:33

Díky za článek. ;-)

 
Odpovědět
6. dubna 13:33
Avatar
Vlasta Řenčová :27. května 12:07

Ahoj, jsem trošku zmatená ohledně terminologie. Jak tedy autor rozlišuje atributy a vlastnosti? (V článku píše, že atributy jsou vlastnosti). Samozřejmě si to můžu dohledat v angličtině, spíš mi jde o to, jak hodlá autor v následujících článcích termíny používat. :-) Díky!

 
Odpovědět
27. května 12:07
Avatar
Alesh
Překladatel
Avatar
Odpovídá na Vlasta Řenčová
Alesh:27. května 13:40

Vlasto, nebuď zmatená! :-) Objekt může mít určité vlastnosti neboli atributy, jsou to ekvivalentní výrazy.

 
Odpovědět
27. května 13:40
Avatar
Odpovídá na Alesh
Vlasta Řenčová :27. května 14:05

Díky za pomoc! :-) Tohle jsem našla na stránkách Microsoftu, vím, že to není ideální výchozí zdroj při učení od základů, ale zjevně rozlišuje Attributes a Properties. :-) "Attributes have the following properties: Attributes add metadata to your program. You can apply one or more attributes to entire assemblies, modules, or smaller program elements such as classes and properties. Attributes can accept arguments in the same way as methods and properties."

 
Odpovědět
27. května 14:05
Avatar
Odpovídá na Vlasta Řenčová
Martin Havelka:27. května 14:25

Jestli teďka nějak souvisle procházíš tímhle kurzem na itnetwork.. tak se radši dokumentace microsoft vyhni :-)
Oni totiž těm atributům, co ty znáš z objektů říkají “fields” a atributy jsou něco jiného. Myslím že do začátků programování ani není důležitý vědět co to je.

 
Odpovědět
27. května 14:25
Avatar
Alesh
Překladatel
Avatar
Odpovídá na Vlasta Řenčová
Alesh:27. května 15:23

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.
Zdroj: Lekce 1 - Úvod do objektově orientovaného programování v C#

 
Odpovědět
27. května 15:23
Avatar
DarkCoder
Člen
Avatar
Odpovídá na Martin Havelka
DarkCoder:27. května 15:24

Myslím že do začátků programování ani není důležitý vědět co to je.

To by nebylo nejšťastnější. Pochopení základních pojmů je něco co pomáhá porozumět lépe dané problematice. Přesněji řečeno pochopit. Pokud bychom se tomuto aspektu vyhnuli, dalo by se to přirovnat tomu, že při výkladu funkcí by se opomenuly následující termíny - deklarace funkce, definice funkce, návratová hodnota funkce, identifikátor, parametr funkce, argument funkce, tělo funkce, a význam funkce a samotný pojem funkce.

Odpovědět
27. května 15:24
"„Učíš-li se proto, aby sis zapamatoval, zapomeneš. Učíš-li se proto, abys porozuměl, zapamatuješ si."
Avatar
Odpovídá na DarkCoder
Martin Havelka:27. května 15:32

Tak jsem to samozřejmě nemyslel. Myslel jsem tím TY Atributy, kterým tak říká Microsoft. Pouze tím chci říct, že si myslím, že stačí pochopit, terminologii.. tím pádem rozdíl mezi českými (našimi) a microsoftími atributy, ale není do začátků důležité hledat si učivo o atributech (a reflexi třeba), jen kvůli porozumění rozdílu mezi tím. Řekl bych, že vzhledem k tomu, že se o tom bavíme v 1. lekci.. není moc šťastné odkazovat někoho na reflexi.

 
Odpovědět
27. května 15:32
Avatar
DarkCoder
Člen
Avatar
Odpovídá na Martin Havelka
DarkCoder:27. května 16:09

Pochopením terminologie je pouze jedním z mnoha aspektů nutným k rychlému a úspěšnému dosažení cíle. Že výklad Microsoftu a dalších je zbytečně komplikovaný, to je známá věc. Čím více zdrojů k dispozici bude, tím více si lze z každého vzít. Bohužel tím vzniká mnoho duplicitních pojmů a také že každý zdroj může danou věc vykládat jinak. Právě proto že se bavíme u první lekce je nezbytné, aby každý kdo začíná pochopil základní věci, jejíž znalost dále je bezpodmínečná. Umění podat danou látku kvalitně je stejně tak důležité, jako s ní umět pracovat. Ale o už je jiný příběh...

Odpovědět
27. května 16:09
"„Učíš-li se proto, aby sis zapamatoval, zapomeneš. Učíš-li se proto, abys porozuměl, zapamatuješ si."
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 36 zpráv z 36.