Avatar
Snorlax
Redaktor
Avatar
Snorlax:

Zdravím. měl bych zas nějakou tu otázečku ;). zajímalo by mě, co je tak úžasného na těch objektech. osobně nevidím velkej rozdíl mezi objektem a funkcí, co se možností týče. Je to třeba mega rychlý? koukal jsem tu na pár tutoriálů a nenarazil jsem tu snad na žádnej problém co by nešel řešit přes function. pokuste se mi vysvětlit v čem je to teda tak lepší jelikož nad tím všichni úplně básní (až na našeho učitele webu, ten je z nějakého důvodu proti tomu...)
Dík moc

Odpovědět 14.8.2013 18:08
Kdo chce pochopit, pochopí. Kdo dělá že chce pochopit, může pouze dělat, že pochopil...
Avatar
Inoue Yūki
Redaktor
Avatar
Odpovídá na Snorlax
Inoue Yūki:

OOP je rozšíření myšlenky o znovupoužitelnosti. To co lze napsat procedurálně, lze napsat lépe, rychleji a obecněji v OOP.

Nahoru Odpovědět 14.8.2013 18:12
Avatar
Snorlax
Redaktor
Avatar
Odpovídá na Inoue Yūki
Snorlax:

ok to cos mi řekl mi dalo stejně jako to motto pod komentářem :D. Pokud jsem to tedy dobře pochopil, tak se to pak lépe edituje, když to chci na novou věc?

Nahoru Odpovědět 14.8.2013 18:15
Kdo chce pochopit, pochopí. Kdo dělá že chce pochopit, může pouze dělat, že pochopil...
Avatar
Inoue Yūki
Redaktor
Avatar
Odpovídá na Snorlax
Inoue Yūki:

Je to jedna z výhod. Lépe se systém edituje i doplňuje. Celý objekt pak použiješ vícekrát, s čímž souvisí obecnost objektu. Máš například třídu User.

$user = new User(2);
$data = $user->getData();
echo $data->username;
echo $data->password;
echo $data->email;
$user->signIn("admin", "heslo");
$user->signOut();

Nemyslím, že by to šlo bez objektů tak dobře.

Nahoru Odpovědět  -1 14.8.2013 18:19
Avatar
Snorlax
Redaktor
Avatar
Odpovídá na Inoue Yūki
Snorlax:

ok ta dvojka mě dost mate. co že to má dělat?

Nahoru Odpovědět 14.8.2013 18:23
Kdo chce pochopit, pochopí. Kdo dělá že chce pochopit, může pouze dělat, že pochopil...
Avatar
Inoue Yūki
Redaktor
Avatar
Odpovídá na Snorlax
Inoue Yūki:

Je to jen taková ukázka. První řádek vezme uživatele s ID 2. Druhý zapíše všechny informace o něm do proměnné $data. Další tři řádky jen vypíší jméno, heslo a email. Další přihlásí uživatele s username "admin" a heslem "heslo". Poslední řádek uživatele odhlásí.

Nahoru Odpovědět 14.8.2013 18:26
Avatar
Odpovídá na Snorlax
Luboš Běhounek (Satik):

Výhoda objektů je přehlednost.
Třídy ti pomáhají členit celý problém do menších logických celků.
Projekt s 100 třídami, kde každá má 10 metod se udržuje lépe než projekt, kde máš jen 1000 metod za sebou.

Nevýhoda OOP je ta, že to má nějakou režii, takže je to mírně pomalejší.

Ale to je i funkcionální programování oproti pouhému seznamu instrukcí, protože musíš ukládat před voláním funkce stavy registrů, pushovat na zásobník parametry funkcí (místo toho, abys na ně šahal přímo) apod. :)

Nahoru Odpovědět  +1 14.8.2013 18:33
:)
Avatar
Snorlax
Redaktor
Avatar
Odpovídá na Inoue Yūki
Snorlax:

ach tááák. takže je to to samý jako

<?php
function vypis_hodnoty ($id)
{
  global $db;
  $sql = "SELECT ... WHRERE `ID_USER` = '$id'";
  foreach ($db->query($sql) as $data)  {   }
  return "$data[1] $data[2] $data[3]";
}

function LogIn ($nick, $pass)
{
  global $db;
  $sql = "SELECT ... WHRERE `NICK`='$nick' and `PASS`='$pass'";
  foreach ($db->query($sql) as $data)  { }
  if (!empty ($data[0]))
  {
  $_SESSION ...
  return "Login";
  }
  else
  {
  return "Nelogin";
  }
}

function LogOut
{
  session_destroy();
}

?>
Editováno 14.8.2013 18:42
Nahoru Odpovědět 14.8.2013 18:41
Kdo chce pochopit, pochopí. Kdo dělá že chce pochopit, může pouze dělat, že pochopil...
Avatar
Snorlax
Redaktor
Avatar
Snorlax:

OK takže tu máme 2 programy co dělaj naprosto tu samou věc ale jeden je přes fce a druhý přes OOP. teď mi tedy dejte příklad, kdy budu funkce proklínat a OOP uctívat. věřím že přeci nějaký rozdíl tam MUSÍ být :D

Nahoru Odpovědět 14.8.2013 18:49
Kdo chce pochopit, pochopí. Kdo dělá že chce pochopit, může pouze dělat, že pochopil...
Avatar
Snorlax
Redaktor
Avatar
Odpovídá na Luboš Běhounek (Satik)
Snorlax:

tak podle mě se dá všechno napsat jak přehledně i nepřehledně. v tom teda výhodu necítím. možná ta univerzálnost jak tady se zmiňovala. ale upřímě nevím, co si mám pod tím přímo představit :D

Nahoru Odpovědět 14.8.2013 18:51
Kdo chce pochopit, pochopí. Kdo dělá že chce pochopit, může pouze dělat, že pochopil...
Avatar
Inoue Yūki
Redaktor
Avatar
Odpovídá na Snorlax
Inoue Yūki:

Ano, psal jsem, že vše se dá napsat procedurálně i objektově. Nezaručuju, že budeš OOP uctívat, ale zkusím to. :)
Vezmu si třeba tento řádek:

$sql = Database::oneResult("SELECT ... WHERE `NICK`=? and `PASS`=?", array($nick, $password);

Zapomněl jsi na ošetření proměnných. PDO ti to udělá automaticky. Asi jsi si všiml i větší přehlednosti jakožto "knihovny". Všechny třídy se také dají použít později v jiných projektech. Můžeš použít třídy jiných a snadno je zakompentovat do své aplikace, to by asi v procedurálce nešlo. :) Máš tu také už zmíněnou snadnou údržbu a rozšiřování do budoucna. Můžeš si napsat třídu na tvorbu miniatur obrázku s obrovským množstvím možností a zbytek aplikace ani nemusí vědět, co se vlastně děje. Nemusíš znovuvytvářet kolo, prostě použiješ to, co už existuje.

Chce si to pořádně ohmatat, pak by jsi si našel svoje vlastní výmluvy proč používat OOP a nutil je ostatním. :)

Nahoru Odpovědět 14.8.2013 18:56
Avatar
David Čápka
Tým ITnetwork
Avatar
Nahoru Odpovědět 14.8.2013 19:01
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
Snorlax
Redaktor
Avatar
Odpovídá na Inoue Yūki
Snorlax:

:D . Já to stejně vyzkouším ale vždy je boj když se zkouší něco nového že?... tak až budu vymýšlet nějakou věc, zkusím to udělat pře OOP. starý zdroje rozhodně přepisovat nebudu :D

Nahoru Odpovědět 14.8.2013 19:02
Kdo chce pochopit, pochopí. Kdo dělá že chce pochopit, může pouze dělat, že pochopil...
Avatar
Snorlax
Redaktor
Avatar
Odpovídá na David Čápka
Snorlax:

nn jen jsem koukal na ty nejnovější články co si psal (ohledně tý PHP glaerie - http://www.itnetwork.cz/php/oop )

Nahoru Odpovědět 14.8.2013 19:06
Kdo chce pochopit, pochopí. Kdo dělá že chce pochopit, může pouze dělat, že pochopil...
Avatar
Kit
Redaktor
Avatar
Odpovídá na Inoue Yūki
Kit:

Tohle by mělo zůstat skryto v modelu. K čemu je ta statika?

Nahoru Odpovědět  -1 14.8.2013 19:09
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 Snorlax
David Čápka:

Tak si to přečti. Objekt není jen nádoba na funkce, umí zapouzdřovat data, předává se referencí a umožňuje znovupoužívat kód a tvořit architekturu.

Nahoru Odpovědět 14.8.2013 19:09
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
Inoue Yūki
Redaktor
Avatar
Odpovídá na Kit
Inoue Yūki:

Však to byl jen příklad. Vážně? Už zase ta statika? Zdá se že tu máme takový rituál boj Smarty/PHP, Statika/Kit.

Nahoru Odpovědět 14.8.2013 19:10
Avatar
Snorlax
Redaktor
Avatar
Odpovídá na Inoue Yūki
Snorlax:

Pánové, pánové, přestaňte se hádat, dokud vám nebudu rozumět a hádat se s váma :D.

Nahoru Odpovědět 14.8.2013 19:15
Kdo chce pochopit, pochopí. Kdo dělá že chce pochopit, může pouze dělat, že pochopil...
Avatar
Snorlax
Redaktor
Avatar
Odpovídá na David Čápka
Snorlax:

ok tak jsem si to v rychlosti proletěl a zjistil jsem jaký jsou výhody, ovšem mám pocit že stále se to dá nahradit funkcí (doufám že nevyhraju nějakýho machra, jelikož jakmile by jste se dozvěděli adresu tak by jste mě asi ukamenovali :D ). snad někdy OOP přijdu na chuť. chce to jen čas a zkušenosti. až to nastane tak vám napíšu :D

Nahoru Odpovědět 14.8.2013 19:18
Kdo chce pochopit, pochopí. Kdo dělá že chce pochopit, může pouze dělat, že pochopil...
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na Snorlax
David Čápka:

Pokud si myslíš, že to jde nahradit funkcí, tak jsi to nepochopil.

Nahoru Odpovědět 14.8.2013 19:19
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
Snorlax
Redaktor
Avatar
Odpovídá na David Čápka
Snorlax:

vždyť to řikám že mě ukamenujete :D. prostě to snad časem pochopím. je to stejný jako když jsem se učil v PHP pracovat se soubory...

Nahoru Odpovědět 14.8.2013 19:21
Kdo chce pochopit, pochopí. Kdo dělá že chce pochopit, může pouze dělat, že pochopil...
Avatar
Kit
Redaktor
Avatar
Odpovídá na Inoue Yūki
Kit:

Nelíbí se mi, když začátečníkovi ukazuješ věci z OOP, které jsou udělané hnusně a nepřehledně. Ukázky by měly být názorné, aby z nich byla patrná výhoda OOP proti procedurálnímu kódu. Jednoduchost, zapouzdření, elegance, robustnost.

Nahoru Odpovědět 14.8.2013 19:21
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Kit
Redaktor
Avatar
Odpovídá na Snorlax
Kit:

Nejsi terčem pro naše kameny... :)

Nahoru Odpovědět 14.8.2013 19:22
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Jiří Gracík
Redaktor
Avatar
Odpovídá na Snorlax
Jiří Gracík:

Akimi bude teďka terčem Kitových kamenů, a pak se nemůžeme divit že ty kostkový chodníky v Hradci nikdy hotový nebudou :D

Nahoru Odpovědět  +3 14.8.2013 19:23
Creating websites is awesome till you see the result in another browser ...
Avatar
Kit
Redaktor
Avatar
Odpovídá na Jiří Gracík
Kit:

To jsou základní kameny pro budoucí programátory a webdesignery. Lítají tady proto, aby ti, kteří tyto diskuze sledují, se mohli svobodně rozhodnout, která cesta jim vyhovuje víc.

Nahoru Odpovědět 14.8.2013 19:29
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Inoue Yūki
Redaktor
Avatar
Odpovídá na Kit
Inoue Yūki:

Hnusně a nepřehledně? Je to správné použití statiky.

Nahoru Odpovědět 14.8.2013 19:34
Avatar
Kit
Redaktor
Avatar
Odpovídá na Inoue Yūki
Kit:

Nelíbí se mi na tom to, že k objektu Database mají přístup všechny komponenty aplikace a dokonce mohou s tou databází dělat vše, co je jim zlíbí. Nakonec zjistíme, že s tou databází smí manipulovat i webdesigner.

Nahoru Odpovědět  +2 14.8.2013 19:41
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Inoue Yūki
Redaktor
Avatar
Odpovídá na Kit
Inoue Yūki:

Proč by nemohli mít přístup všechny komponenty? Webdesignér se stará o HTML, nechápu proč by měl volat třídy. Vůbec by do {} neměl sahat.

Nahoru Odpovědět 14.8.2013 20:01
Avatar
Jiří Gracík
Redaktor
Avatar
Odpovídá na Inoue Yūki
Jiří Gracík:

Koder se stará o HTML, webdesignér se stará pouze o návrh ...

Nahoru Odpovědět 14.8.2013 20:07
Creating websites is awesome till you see the result in another browser ...
Avatar
Inoue Yūki
Redaktor
Avatar
Odpovídá na Jiří Gracík
Inoue Yūki:

Pardon, dobře. Ale princip je stejný.

Nahoru Odpovědět 14.8.2013 20:09
Avatar
Jiří Gracík
Redaktor
Avatar
Odpovídá na Inoue Yūki
Jiří Gracík:

Já jenom celou dobu přemejšlel, proč by sakra grafik měl lízt do jakýhokoliv kódu, zmát jsi mě :D

Nahoru Odpovědět 14.8.2013 20:13
Creating websites is awesome till you see the result in another browser ...
Avatar
Inoue Yūki
Redaktor
Avatar
Nahoru Odpovědět  +1 14.8.2013 20:26
Avatar
Jiří Gracík
Redaktor
Avatar
Odpovídá na Inoue Yūki
Jiří Gracík:

K tomu přístupu k databázi - bezpečnost. Není nijak extra bezpečné, když můžeš přistupovat do databáze odkudkoliv a dělat s ní cokoliv :)

Nahoru Odpovědět  +1 14.8.2013 20:30
Creating websites is awesome till you see the result in another browser ...
Avatar
Inoue Yūki
Redaktor
Avatar
Odpovídá na Jiří Gracík
Inoue Yūki:

To lze přece ošetřit. Je to stejné, jen kratší než zápis new, ten taky můžeš vyvolat všude.

Nahoru Odpovědět 14.8.2013 20:31
Avatar
Inoue Yūki
Redaktor
Avatar
Odpovídá na Inoue Yūki
Inoue Yūki:

Stačí to mít ošetřený. No nic, já už jsem z unavený z pořád té samé konverzace... :D

Nahoru Odpovědět 14.8.2013 20:32
Avatar
Jiří Gracík
Redaktor
Avatar
Odpovídá na Inoue Yūki
Jiří Gracík:

Spíš jde o to, že statický a přístupný by měl být objekt, který bude mít přístup k databázi a bude tahat a přepisovat data která chceme a jak chceme pomocí pár metod.

Editováno 14.8.2013 20:34
Nahoru Odpovědět 14.8.2013 20:33
Creating websites is awesome till you see the result in another browser ...
Avatar
Kit
Redaktor
Avatar
Odpovídá na Inoue Yūki
Kit:

Do databáze má mít přístup pouze Model a nikdo jiný. Když uděláš databázi jako statický objekt, tak k ní bude mít přístup i ten grafik. Stačí, aby ti útočník nabořil kteroukoli část aplikace a data budou jeho.

Nahoru Odpovědět 14.8.2013 20:35
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Inoue Yūki
Redaktor
Avatar
Odpovídá na Jiří Gracík
Inoue Yūki:

Bral jsem to spíše jako ukázku, ale budiž. :) Však od toho jsou modely, který jsem sem teď nechtěl přidávat, akorát by to zesložitilo to, co jsem chtěl vysvětlit.

Nahoru Odpovědět 14.8.2013 20:35
Avatar
Inoue Yūki
Redaktor
Avatar
Odpovídá na Kit
Inoue Yūki:

Nechápu ale, proč by kodér měl ve svým zelí volat třídy. V aplikaci by neměli být díry. Každá se musí ošetřit, všechno musí být zalepené aby nedošlo k ničemu, počítaje i ty nejmenší změny. A to u každé aplikace, takže nevidím rozdíl.

Nahoru Odpovědět 14.8.2013 20:38
Avatar
Kit
Redaktor
Avatar
Odpovídá na Inoue Yūki
Kit:

Nové ovladače databází už ani staticky není možné použít. Hlásí to jako chybu.

Nahoru Odpovědět  +1 14.8.2013 20:38
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Kit
Redaktor
Avatar
Odpovídá na Inoue Yūki
Kit:

Ale jak chceš zalepit tuhle díru jako vrata?

Nahoru Odpovědět 14.8.2013 20:40
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Inoue Yūki
Redaktor
Avatar
Odpovídá na Kit
Inoue Yūki:

A to je správně. Už po několikátý tu píšu, že jsem to napsal jako ukázku náhrady za model. Nechtěl jsem to ztěžovat. Jako by to tam nebylo.

Nahoru Odpovědět  -1 14.8.2013 20:40
Avatar
Inoue Yūki
Redaktor
Avatar
Odpovídá na Kit
Inoue Yūki:

Díru jako vrata? Řekni mi konkrétní příklad, kde by to bylo nebezpečné.

Nahoru Odpovědět 14.8.2013 20:41
Avatar
Kit
Redaktor
Avatar
Odpovídá na Inoue Yūki
Kit:

To se musíš zeptat nějakého hackera :)

Nahoru Odpovědět 14.8.2013 20:42
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Inoue Yūki
Redaktor
Avatar
Odpovídá na Kit
Inoue Yūki:

Určitě by byl nějaký způsob, kterým by se to dalo využít, tomu věřím. Také neříkám, že je to nejlepší způsob. Ale pro ukázku, kde není ukázaný zbytek aplikace je to správný způsob.

Nahoru Odpovědět 14.8.2013 20:45
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na Snorlax
David Čápka:

Ono to funguje tak, že všechno, co jde procedurálně, jde udělat i objektově. Proto ti připadá, že je to stejné. Jenže co jde objektově už procedurálně neuděláš, musíš to napsat jinak a přijdeš o určité výhody. Objekty na procedurální programování navazují a rozšiřují ho, není to tedy něco úplně jiného, je to užitečná funkcionalita k těm tvým funkcím navíc.

Editováno 14.8.2013 20:50
Nahoru Odpovědět  +1 14.8.2013 20:49
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na Kit
David Čápka:

To se mi nezdá, leda že by nějak dostal svoji šablonu do systému, ale to už si tam může dát stejně svůj model. Nenapadá mě žádné bezpečnostní riziko.

Nahoru Odpovědět 14.8.2013 20:51
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
Inoue Yūki
Redaktor
Avatar
Odpovídá na David Čápka
Inoue Yūki:

Souhlasím. Mě už procedurální programování nepřipadá nikterat hygienické. S přibývajícími verzemi PHP se taky většina modulů pomalu přesouvá na OOP, i když myslím, že PHP funkce ještě chvíli zůstanou...

Nahoru Odpovědět  +2 14.8.2013 20:52
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na Inoue Yūki
David Čápka:

Jsme se zrovna s Drahomír Hanákem bavili, že je to PHP už fakt pěkný jazyk, jen si s sebou táhne ten neobjektový balast. Zdá se to ale verzi od verze lepší.

Nahoru Odpovědět  +1 14.8.2013 20:54
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
Odpovídá na Inoue Yūki
Michael Olšavský:

Nejsem žádný hacker, ale trošku jsem se nad tím zamýšlel a přidal k tomu trochu znalostí z C++ a jediný problém ochrany by byla statická doba trvání. Jelikož je objekt alokován už při načtení aplikace do paměti, jeho adresa se nemění. Další věc je to, že (alespoň mi to tak zatím vždy vyšlo) adresy proměnných statického objektu jsou více méně u sebe, takže by mělo poté snáze projít a získat jejich hodnoty. Ale nevím jestli mám pravdu. Zvlášť když je to PHP -> interpret.

 
Nahoru Odpovědět 14.8.2013 20:58
Avatar
Inoue Yūki
Redaktor
Avatar
Odpovídá na David Čápka
Inoue Yūki:

Tak tak. Docela se těším na PHP6. Jsem zvědavý na goto, i když zatím nevím, nevím, přide mi to divný v PHP goto. :D

Nahoru Odpovědět 14.8.2013 20:59
Avatar
Inoue Yūki
Redaktor
Avatar
Odpovídá na Michael Olšavský
Inoue Yūki:

Já mám hackrovské znalosti jen hodně okrajově, takže nevím, ale nemyslím si, že by to byla tak závažná díra.

Nahoru Odpovědět 14.8.2013 21:01
Avatar
Inoue Yūki
Redaktor
Avatar
Odpovídá na Inoue Yūki
Inoue Yūki:

Zvlášť, když používání statiky v databázi bylo do nedávna normální.

Nahoru Odpovědět 14.8.2013 21:02
Avatar
Kit
Redaktor
Avatar
Odpovídá na David Čápka
Kit:

To bezpečnostní riziko je podobné, jako kdybys měl všechny atributy objektu public. Kdyby tam žádné riziko nebylo, nikdo by se nenamáhal používat private a skrývat implementaci všude, kde to jen jde.

Pokud na projektu pracuje víc vývojářů, riziko je hlavně uvnitř. Stačí aby jeden z nich udělal v aplikaci jednu bezpečnostní díru. Útočník pak má k dispozici celý systém bez omezení. Proto se ta omezení dělají.

Do konfigurace operačního systému je přece také blokován zápis, aby sis v něm náhodou něco neponičil. Spuštěné programy si také nemohou vzájemně přepisovat data v operační paměti, dokonce je ani nemohou číst.

Nahoru Odpovědět 14.8.2013 21:04
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:

Skrývání implementace je hlavně z důvodu přehlednosti, přes reflexi ti zavolám privátní metodu jako nic, takže to není žádná ochrana.

Nahoru Odpovědět 14.8.2013 21:06
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
Odpovídá na Inoue Yūki
Michael Olšavský:

Závažná určitě není. To by se to rychle rozšířilo. Ale hackeři se dostanou i pomocí těch nejmenších skulinek.

 
Nahoru Odpovědět  +1 14.8.2013 21:06
Avatar
Inoue Yūki
Redaktor
Avatar
Odpovídá na Kit
Inoue Yūki:

Neříkám, že to není riziko. Je to ale riziko zevnitř, které se při použití statických tříd musí podstoupit. Není to ale vhodné použití u citlivých dat, zvlášť, když na tom pracuje více programátorů.

(Ještě jen tak mimochodem: Kit: že zrovna ty se zajímáš o práci více vývojářů. :), sdraco: fajn avatar. :))

Nahoru Odpovědět 14.8.2013 21:09
Avatar
Kit
Redaktor
Avatar
Odpovídá na Inoue Yūki
Kit:

Problém je hlavně v tom, že používání statiky strašně svádí k substituci za globální proměnné. A ty vedou do pekel. Zpočátku to vypadá jako velmi výhodné, ale jak projekt roste, tak se z výhody časem stane nevýhoda. Omezuje se tím znovupoužitelnost tříd, protože pokud je třída statická, nemůžeš ji použít ke dvěma různým účelům.

Nahoru Odpovědět 14.8.2013 21:10
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Inoue Yūki
Redaktor
Avatar
Odpovídá na Kit
Inoue Yūki:

Právě od toho statika existuje. Když potřebuješ jen jednu instanci. Přesně proto byla statika vytvořená.

Nahoru Odpovědět 14.8.2013 21:16
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na Inoue Yūki
David Čápka:

Tak ona není jen k tomu, statický můžeš mít jen jeden atribut, jedná se o data, co jsou společná všem instancím. Nejjednodušší ukázka je konstanta, ta je přeci také třídní.

Editováno 14.8.2013 21:18
Nahoru Odpovědět 14.8.2013 21:18
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
Kit
Redaktor
Avatar
Odpovídá na Inoue Yūki
Kit:

Vždycky potřebuji víc než jednu instanci.

Nahoru Odpovědět  -1 14.8.2013 21:20
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:

Co třeba taková třída Math v Javě? Budeš si předávat všude instanci abys udělal mocninu? ;-)

Nahoru Odpovědět  +2 14.8.2013 21:21
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
Kit
Redaktor
Avatar
Odpovídá na David Čápka
Kit:

Math v Javě si žádná data neukládá. Je to jen kontejner na funkce, jejichž výstup je závislý pouze na vstupních datech, ale vůbec není závislý na nějakém vnitřním stavu třídy. Pokud by v takové třídě existoval jen jeden statický přepínač, třeba mezi stupni a radiány, byl by to vážný problém.

Nahoru Odpovědět 14.8.2013 21:29
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:

Takže bys jí udělal také statickou.

Nahoru Odpovědět 14.8.2013 21:32
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
Kit
Redaktor
Avatar
Odpovídá na David Čápka
Kit:

Ano. U Math vidím smysl. Pokud bych však měl mít možnost přepínat mezi stupni a radiány, dělal bych instance a konstruktoru bych předával, zda chci stupně nebo radiány. Takovou instanci bych pak musel předávat.

Naštěstí tvůrci Math takto šílení nebyli a udělali ji z tohoto pohledu správně, tedy staticky a bez vnitřních stavů.

Takže pokud si chceš udělat třeba vlastní statickou třídu Str, která bude pracovat se stringy přes funkce mb_* a nebude mít žádné vnitřní stavy, nebudu mít nic proti tomu. I když ... jeden vnitřní stav asi mít bude a bez něho by to bylo stěží použitelné. Můžeš ho však udělat jako konstantu.

Nahoru Odpovědět 14.8.2013 21:46
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Inoue Yūki
Redaktor
Avatar
Odpovídá na Kit
Inoue Yūki:

Nemůže být VŽDY jen jedna instance, někdy prostě potřebuješ, aby se další instance nevytvořili.

Nahoru Odpovědět 15.8.2013 6:15
Avatar
Inoue Yūki
Redaktor
Avatar
Odpovídá na Inoue Yūki
Inoue Yūki:

Pardon:

  • Nemůže být VŽDY více instancí *
Nahoru Odpovědět 15.8.2013 7:56
Avatar
Kit
Redaktor
Avatar
Odpovídá na Inoue Yūki
Kit:

Myslíš Singleton? Ten přece není potřebný. Ke každému rozhraní mám nejméně dvě instance. Tam bych se Singletonem nepochodil.

Proč bych si nemohl vytvořit další instanci nějaké třídy? Když potřebuji otevřít další soubor nebo databázi, tak nebudu kvůli tomu dělat další třídu.

EDIT: Chvilku mi to trvalo, ale pochopil jsem, co jsi myslel.

Editováno 15.8.2013 8:05
Nahoru Odpovědět 15.8.2013 8:03
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Inoue Yūki
Redaktor
Avatar
Odpovídá na Kit
Inoue Yūki:

Nemyslím Singlenton ale statiku.

Nahoru Odpovědět 15.8.2013 8:25
Avatar
Kit
Redaktor
Avatar
Odpovídá na Inoue Yūki
Kit:

Při testování si s jednou instancí nevystačíš. Právě testování tě odnaučí dělat statické třídy s vnitřními stavy.

Nahoru Odpovědět 15.8.2013 8:32
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Odpovídá na Kit
Luboš Běhounek (Satik):

Občas mi použití singleton/statiky přijde mnohem jednodušší a přehlednější než si všechno předávat celou hierarchií objektů...

Když mám třeba hru, kde mám nějaký TextureManager, který má u sebe všechny načtené textury (takže vím, že nemá smysl vytvářet jeho další instanci) a mám kompozici tříd třeba podobnou této:

Program-Game-Map-GameObjectList-GameObject-Animation-Texture
nebo
Program-Game-Map-MapFields-MapField-Animation-Texture

Tak dám přednost vytvoření této statické třídy TextureManager s vnitřními stavy, než abych musel všude předávat (a třeba i ukládat) referenci na TextureManager.

A pokud se k tomu přidají ještě třeba FontManager, SoundManager, Pozice kurzoru myši, informace o rozlišení obrazovky (kvůli vykreslení mapy, GUI) apod., tak mi to nabobtná tak, že budu v kontruktoru všech objektů předávat milion parametrů...

Nahoru Odpovědět  +2 15.8.2013 9:56
:)
Avatar
Kit
Redaktor
Avatar
Odpovídá na Luboš Běhounek (Satik)
Kit:

Pokud to budeš dělat objektově, tak těch předávaných parametrů je jen skutečné minimum. K popsané situaci vůbec nedojde.

Nahoru Odpovědět  -1 15.8.2013 10:24
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Odpovídá na Kit
Luboš Běhounek (Satik):

Možná sis nevšiml, ale to je objektově ;)

Nahoru Odpovědět  +1 15.8.2013 10:28
:)
Avatar
Inoue Yūki
Redaktor
Avatar
Odpovídá na Luboš Běhounek (Satik)
Inoue Yūki:

Taky mě jeho odpovědi na objektivitu matou. :D

Nahoru Odpovědět  +1 15.8.2013 10:34
Avatar
Odpovídá na Luboš Běhounek (Satik)
Lukáš Hruda (Luckin):

Tohle bych řešil přes strukturu kam bych dal všechna potřebná data v podobě objektů těchto tříd a pak předával jenom instanci té struktury. Parametr by byl tudíž jenom jeden. Ale souhlasím, že u záležitostí jako jsou tyto je asi statika přehlednější a snadněji se to pak používá.

 
Nahoru Odpovědět 15.8.2013 11:45
Avatar
Odpovídá na Lukáš Hruda (Luckin)
Luboš Běhounek (Satik):

No, asi by to šlo, ale taky si to musíš posílat celou hierarchií, což je otravné, ale jeden parametr už by se snad dal překousnout :) .

Nebo by se to dalo udělat tak, že by sis udělal statickou třídu, která by měla odkazy na instance všech těch objektů (takže ty objekty jako TextureManager apod. by statické nebyly), nějak takto:

public static class ResourcesAndSimilarStaticUglies
{
  public static TextureManager TextureManager;
  public static SoundManager SoundManager;
  public static FontManager FontManager;
  public static ScreenInfo ScreenInfo;
  public static MouseState MouseState;
  public static KeyboardState KeyboardState;
}
Nahoru Odpovědět 15.8.2013 11:58
:)
Avatar
Odpovídá na Luboš Běhounek (Satik)
Lukáš Hruda (Luckin):

Ještě by bylo možná ideální udělat Manager jako šablonu (generickou třídu) a dodávat typ (Manager<Anima­tion>, Manager<Font>...) rozdíly v rozhraní a datových položkách bych vyřešil ve specifikacích, což v C# asi neuděláš, tam bys mohl oddědit pak jednotlivé Managery. Uplně ideální by bylo kdyby tam žádné rozdíly nebyly :D

 
Nahoru Odpovědět 15.8.2013 12:29
Avatar
Kit
Redaktor
Avatar
Odpovídá na Luboš Běhounek (Satik)
Kit:

Nevšiml jsem si toho. Umí ten tvůj TextureManager ty textury i vykreslovat? Umí ten SoundManager přehrávat zvuky? Pak se totiž ty managery nemusí prohrabávat žádným stromem, protože data mají lokálně u sebe.

Nahoru Odpovědět  +1 15.8.2013 12:55
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Odpovídá na Kit
Luboš Běhounek (Satik):

Objekt Game, objekt Map, objekt Texture... tak jak je to tedy objektově, když ne takhle? :)

TextureManager nekreslí, ten jen udržuje u sebe seznam textur.
Vytvoříš nový GameObject, třeba tank -> načte si z manažeru texturu.

Ne, GameObject má metodu Draw(), která podle jeho pozice a fáze animace vykreslí správnou texturu na správné místo.

Nahoru Odpovědět 15.8.2013 13:26
:)
Avatar
Kit
Redaktor
Avatar
Odpovídá na Luboš Běhounek (Satik)
Kit:

Vytvoříš třeba objekt tank, konstruktoru předáš objekt-texturu, která se umí vykreslit a objekt-zvuk, který se umí přehrát. Tank pak v sobě má atributy-objekty, které umí vykreslit svou texturu a přehrát svůj zvuk. V továrně si tak můžeš vyrobit třeba transportér se zvukem stíhačky, při upgrade tanku mu třeba jen vyměníš texturu a samozřejmě schopnosti.

Nahoru Odpovědět 15.8.2013 13:43
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Kit
Redaktor
Avatar
Nahoru Odpovědět 15.8.2013 13:49
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Petr Nymsa
Redaktor
Avatar
Odpovídá na Kit
Petr Nymsa:

Já to dělám stejně jako Luboš Běhounek (Satik) a přijde mi to přehledné :). Do managerů si načtu všechny potřebné texturu a poté různé GameObjecty si načítájí texturu jakou chtějí.

Nahoru Odpovědět 15.8.2013 14:05
Pokrok nezastavíš, neusni a jdi s ním vpřed
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na Kit
David Čápka:

Stejně musíš mít ty obrázky v něčem statickém, aby fungoval lazy loading. Texturu nepředáváš v konstruktoru, ale tvoří si jí ten objekt, je to jeho textura. Co se mi osvědčuje je vytvořit si závislosti v jednom kontejneru a ten předávat, okoukal jsme to z XNA a funguje to skvěle.

Nahoru Odpovědět 15.8.2013 14:13
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
tastyfish
Redaktor
Avatar
tastyfish:

Co se týká možností, neumí OOP nic navíc než assembler nebo normální programování pomocí podprogramů, ale má spoustu výhod hlavně pro větší projekty:

  • Přehlednost - u velkých projektů nebudeš mít tisíc funkcí, ale množinu objektů, kterých bude zpravidla méně a půjde se v nich lépe zorientovat, z toho plyne i méně chyb, což je občas kritický atribut aplikace.
  • Objekty velmi dobře odpovídají reálnému světu a tedy i problémům reálného světa, které řešíme. Svět kolem sebe vidíme jako komunikující objekty spíš než funkce, proto se s OOP z tohoto hlediska lépe pracuje.
  • Dobrá možnost spolupráce víc lidí, každý pracuje na jiném objektu a jediné, co potřebují znát všichni, je jejich rozhraní.
  • Znovupoužitelnost, tzn. třídy, které jednou napíšu, můžu použít jindy a jinde. Tohle platí i o funkcích, ale u OOP to vynikne tím víc.
  • Vysoká abstrakce (vyšší než u funkcí). Funkce abstrahují problém tak, že o něm přemýšlíme jako o příkazech, kdežto objekty nám umožňují představovat si samostatné funkční jednotky, které můžou představovat např. celý složitý server. Objekty můžou být různě zanořené, poskládané dohromady, nebo úplně nezávislé, což nabízí velké možnosti.

Samozřejmě jsou i nevýhody - OOP programy jsou mírně pomalejší kvůli vyšší režii, navíc pro malé projekty je zbytečně složité a je často vhodnější použít jednodušší přístup, zkus např. porovnat hello world v Pascalu a v Javě. Je to prostě určitý přístup, který je vhodný pro spoustu věcí, ale pro specifické problémy můžou existovat i lepší řešení.

Nahoru Odpovědět 16.8.2013 21:58
škoda mluvit
Avatar
Kit
Redaktor
Avatar
Odpovídá na tastyfish
Kit:

To je hezké, skoro jak z učebnice. A teď to zkus aplikovat na statický objekt Texture. Mně se to nepovedlo.

Objektově psané programy nemusí být nutně pomalejší. Mohou být i rychlejší.

Editováno 16.8.2013 22:15
Nahoru Odpovědět 16.8.2013 22:13
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Odpovídá na Kit
Luboš Běhounek (Satik):

Nemohou být rychlejší už z principu. OOP s sebou nese spoustu režie navíc.

Nahoru Odpovědět  +1 16.8.2013 23:24
:)
Avatar
Kit
Redaktor
Avatar
Odpovídá na Luboš Běhounek (Satik)
Kit:

Hmm, to slýchám poměrně často. Zejména od těch, kteří OOP neovládají.

Nahoru Odpovědět  -1 16.8.2013 23:27
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Odpovídá na Kit
Luboš Běhounek (Satik):

Ti si to jen myslí, ale mají pravdu :) .

Nahoru Odpovědět 17.8.2013 0:11
:)
Avatar
Kit
Redaktor
Avatar
Odpovídá na Luboš Běhounek (Satik)
Kit:

Možná by tedy bylo lepší se zeptat těch, kteří OOP umí.

Nahoru Odpovědět 17.8.2013 0:20
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Odpovídá na Kit
Luboš Běhounek (Satik):

Není potřeba, vždyť je to logické :)

Nahoru Odpovědět 17.8.2013 0:47
:)
Avatar
Kit
Redaktor
Avatar
Odpovídá na Luboš Běhounek (Satik)
Kit:

Logický je i fakt, že Slunce obíhá kolem Země :)

Nahoru Odpovědět 17.8.2013 1:10
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Odpovídá na Kit
Luboš Běhounek (Satik):

To je celkem relativní, záleží na tom, co bereš jako centrum vztažné soustavy :)

Nahoru Odpovědět  +1 17.8.2013 1:34
:)
Avatar
TomBen
Redaktor
Avatar
Odpovídá na Kit
TomBen:

Na tom nic logického není.
Země je placatá, nesou ji čtyři sloni,
kteří stojí na zádech obrovské želvy.
To ví přece každý. :-)

Nahoru Odpovědět  +4 17.8.2013 9:14
Za posledních 200 miliónů let se nic zvláštního nestalo, akorát dinosauři vymřeli a opice se naučily programovat.
Avatar
Jiří Gracík
Redaktor
Avatar
Jiří Gracík:

Gratuluji, první komentář, který nám něco dal, napsal TomBen :D

Nahoru Odpovědět  +1 17.8.2013 10:28
Creating websites is awesome till you see the result in another browser ...
Avatar
tastyfish
Redaktor
Avatar
Odpovídá na Kit
tastyfish:

Tak pokud se nebavíme o matematice, nic neplatí na 100 %. Ano, program napsaný objektově může být teoreticky rychlejší, ale většinou není, např. kvůli virtuálním metodám. Myslím, že když se někdo ptá, jaké jsou výhody OOP, ocení spíš obecnou odpověď, klidně přetlumočenou z učebnice, radši než nějaké speciality, kterými se může zabývat profesionál, který OOP ovládá a používá na trochu jiné úrovni.

Nahoru Odpovědět 17.8.2013 12:47
škoda mluvit
Avatar
Kit
Redaktor
Avatar
Odpovídá na tastyfish
Kit:

Vadí mi jedna věc: Když někdo napíše, že malou nevýhodou OOP je, že je o něco pomalejší, tak začátečník si z toho obvykle vezme jen "OOP je pomalejší" a stane se to pro něj argumentem, že je to šmejd. Přitom výkonové rozdíly jsou naprosto nepodstatné a jsou oběma směry.

Uznávám, že když se OOP použije nešikovně, což je velmi častý případ, jsou programy pomalejší. Určitě to není kvůli virtuálním metodám, ty to naopak zrychlují.

Nahoru Odpovědět  -1 17.8.2013 13:11
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Odpovídá na Kit
Lukáš Hruda (Luckin):

Jak konkrétně virtuální metoda program zrychlí? Při jejím volání se vždy musí udělat minimálně o jeden krok více.

 
Nahoru Odpovědět 17.8.2013 15:50
Avatar
Kit
Redaktor
Avatar
Odpovídá na Lukáš Hruda (Luckin)
Kit:

Virtuální metody se píší jinak, bývají jednodušší a tím i rychlejší.

Nahoru Odpovědět 17.8.2013 16:01
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Odpovídá na Kit
Lukáš Hruda (Luckin):

Moje virtuální metoda většinou vypadá tak, že volá stejnou metodu některého z předků a k tomu dělá něco navíc. Mám pocit, že tím je spíš naopak o něco pomalejší.

 
Nahoru Odpovědět 17.8.2013 16:15
Avatar
Kit
Redaktor
Avatar
Odpovídá na Lukáš Hruda (Luckin)
Kit:

Aha, většinou ji zcela překrývám a specializuji. Proto se mi tím zjednoduší.

Nahoru Odpovědět 17.8.2013 16:32
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
David Hynek
Redaktor
Avatar
David Hynek:

programování přes funkce i OOP má svá plus i své proti.

Já jsem s OOP začal víceméně letos a tak se jej stále snažím pochopit.
A můj pohled na OOP je asi tento:

OOP je takové nástavba "funkcionálního" programování. Pamatuji si na své začátky s programováním v Basicu. O funkcích jsem nevěděl a tak něco jako funkce jsem používal příkaz GOTO, kde jsem měl určité řádky věnované konkrétní činnosti.

Funkce, pak tento proces nahrazovaly s tím, že se navíc předávali parametry. Ale asi každý kdo napsal "větší" program, dostane se do stavu, že má 387funkcí, kde mnoho z nich dělá podobné věci, ale jsou určeny ke konkrétní práci. A zde přichází kouzlo OOP, kde části programu zastupují objekty, kterým se dají upravit parametry, rozšířit, vzájemně propojit.
Zkrátka klady a pozitiva.

OOP je potřeba před používáním pochopit. Chápu, zde píšící "machry", kteří už OOP vidí za vším. Ale my ostatní musíme prostě pro OOP ještě dozrát. A těm zkušenějším velké díky za trpělivost a pomoc :)

Nahoru Odpovědět  +3 17.8.2013 17:48
Čím víc vím, tím víc věcí nevím.
Avatar
David Hynek
Redaktor
Avatar
Odpovídá na David Hynek
David Hynek:

omlouvám se za svůj češtin... :) takže z pohledu gramatiky pro prosím neposuzujte.

Nahoru Odpovědět 17.8.2013 19:25
Čím víc vím, tím víc věcí nevím.
Avatar
Luboš Běhounek (Satik):

Já nemám nic proti OOP, v C# jinak než objektově neprogramuju, ale když říkáš kladné vlastnosti OOP, neměl bys lhát o těch záporných. OOP zkrátka má nějakou režii navíc a je pomalejší, i když je obvykle (téměř) zanedbatelná.

Vždyť i jen přiřazení int hodnoty do vlastnosti třídy (v poli tříd) je 2x pomalejší než přiřazení přímo do pole.

Třeba takové vytváření třídy je taky mnohonásobně nákladnější než jen zapisování hodnot do pole - samotné vytvoření třídy a naplnění daty je v OOP dokonce operace více než o řád pomalejší než bez OOP.

Nahoru Odpovědět 18.8.2013 0:08
:)
Avatar
Kit
Redaktor
Avatar
Odpovídá na Luboš Běhounek (Satik)
Kit:

Co je to "Pole tříd"? V OOP, pokud vím, nic takového není.
Do vlastností tříd nikdy nic nepřiřazuji.
Vytváření třídy dělá JIT kompilátor. To je pouze při spouštění.
Třídu nikdy daty neplním, protože by to bylo pomalé.

Efektivita a rychlost je v OOP ukryta jinde.

Nahoru Odpovědět  -1 18.8.2013 0:17
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Odpovídá na Kit
Luboš Běhounek (Satik):

S tebou se nedá normálně diskutovat, pořád jen slovíčkaříš a stáčíš diskuzi jinam, i s Matesaxem ta diskuze měla vyšší úroveň...

"Co je to "Pole tříd"? V OOP, pokud vím, nic takového není."

  • Víš moc dobře, že tím bylo myšleno pole instancí tříd...

"Do vlastností tříd nikdy nic nepřiřazuji."

  • Tak možná používáš settery, to je fuk, vyjde to nastejno.

"Vytváření třídy dělá JIT kompilátor. To je pouze při spouštění."

  • Zase slovičkaření.

"Třídu nikdy daty neplním, protože by to bylo pomalé."

  • Tak to jsi asi výjimka, 99% lidí třídy nějakými daty plní, protože třída bez dat je většinou jaksi k ničemu :)

"Efektivita a rychlost je v OOP ukryta jinde."
Kde?

Nahoru Odpovědět 18.8.2013 0:34
:)
Avatar
Kit
Redaktor
Avatar
Odpovídá na Luboš Běhounek (Satik)
Kit:

Aha, ty si pleteš třídy s instancemi.

Nahoru Odpovědět  -1 18.8.2013 0:38
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
TomBen
Redaktor
Avatar
TomBen:

Vy jste to pořád ještě nevyřešili? :-)

Nahoru Odpovědět 18.8.2013 0:40
Za posledních 200 miliónů let se nic zvláštního nestalo, akorát dinosauři vymřeli a opice se naučily programovat.
Avatar
Kit
Redaktor
Avatar
Odpovídá na TomBen
Kit:

Ne. Teď si vysvětlujeme rozdíl mezi třídou a instancí.

Nahoru Odpovědět  ±0 18.8.2013 0:41
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
TomBen
Redaktor
Avatar
Odpovídá na Kit
TomBen:

V tuhle hodinu to za střízliva podle mě nejde. :-)

Nahoru Odpovědět 18.8.2013 0:45
Za posledních 200 miliónů let se nic zvláštního nestalo, akorát dinosauři vymřeli a opice se naučily programovat.
Avatar
Kit
Redaktor
Avatar
Odpovídá na TomBen
Kit:

Aspoň kyška kdyby byla... :)

Nahoru Odpovědět  +1 18.8.2013 0:51
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Inoue Yūki
Redaktor
Avatar
Inoue Yūki:

Tak já se taky zapojím. V OOP je objekt složitým datovým typem, tím nejsložitějším. Proto bude vždycky pomalejší. Taky bere ohromné množství paměti. Ale OOP se kvůli rychlosti nevyužívá. Určitě není nutné bát se OOP kvůli rychlosti, protože v lidském vnímání je rozdíl opravdu minimální. Také záleží na návrhu aplikace. Já se vždycky snažím držet podle citátu:

Vždy pište kód tak, jako by ten chlapík, co ho po vás bude udržovat, měl být násilnický psychopat, který bude vědět, kde bydlíte.

Když máš v aplikaci 500 objektů, z čehož v dobrém návrhu užíváš najednou jen 10 a ve špatném všech 500, je to rozdíl.

Jak už jsem psal, OOP se kvůli rychlosti neužívá, užívá se kvůli rozdělení aplikační části a kvůli přehlednosti, znovupoužitelnosti a obecnosti.

Snorlax: Věř, že kdyby to v OOP bylo pomalejší a zároveň horší jako návrh, nikdo by to nepoužíval. :) Ovšem OOP používá každý druhý programátor (nepočítám ty, kteří pracují v plně objektových jazycích nebo neobjektových jazycích), takže si můžeš být jistý tím, že sám narazíš na výhody, které OOP přináší.

Nahoru Odpovědět 18.8.2013 8:07
Avatar
vitamin
Člen
Avatar
vitamin:

OOP je programovacia technika. Mozete ju pouzit aj ked ju jazyk priamo nepodporuje (kludne mozete pouzit OOP v cistom C...). Samozrejme v jazyky ktory podporuje OOP sa pise OO kod lepsie. Objekty mozu byt v jazyku implementovane roznymi sposobmi, napr v c++ si mozete vybrat ci ma obsahovat virtualne metody alebo nie (objekt nemusi vobec obsahovat pointer do vtable a moze byt velmi maly a po inlinovani metod a celych objektov je velmi rychly). V javascripte je zas Prototype-based OOP (cize samotne objekty uchovavaju svoj interface, nemaju presny typ/triedu). V objective-C, Smalltalk a podobnych jazykoch zas objekty kumunikuju pomocou sprav...

Tymto som chcel povedat ze v roznych jazykoch mozi byt OOP podporovane inym sposobom a moze podporovat ine vlastnosti. Niekedy moze byt oop pomale, inokedy rychle...

Nezabudajte ze OOP sa da kombinovat aj s inymi programovacimi technikami.

 
Nahoru Odpovědět  +1 18.8.2013 10:24
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 112 zpráv z 112.