Chceš se vypracovat až k výdělku 160.000 Kč/měsíc? Důležité je začít. Staň se programátorem díky rekvalifikačnímu kurzu! Začni dnes!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.
Avatar
Snorlax
Tvůrce
Avatar
Snorlax:14.8.2013 18:08

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
Odpovídá na Snorlax
Neaktivní uživatel:14.8.2013 18:12

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
Neaktivní uživatelský účet
Avatar
Snorlax
Tvůrce
Avatar
Odpovídá na Neaktivní uživatel
Snorlax:14.8.2013 18:15

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
Odpovídá na Snorlax
Neaktivní uživatel:14.8.2013 18:19

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
14.8.2013 18:19
Neaktivní uživatelský účet
Avatar
Snorlax
Tvůrce
Avatar
Odpovídá na Neaktivní uživatel
Snorlax:14.8.2013 18:23

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
Odpovídá na Snorlax
Neaktivní uživatel:14.8.2013 18:26

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
Neaktivní uživatelský účet
Avatar
Odpovídá na Snorlax
Luboš Běhounek Satik:14.8.2013 18:33

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
14.8.2013 18:33
https://www.facebook.com/peasantsandcastles/
Avatar
Snorlax
Tvůrce
Avatar
Odpovídá na Neaktivní uživatel
Snorlax:14.8.2013 18:41

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
Tvůrce
Avatar
Snorlax:14.8.2013 18:49

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
Tvůrce
Avatar
Odpovídá na Luboš Běhounek Satik
Snorlax:14.8.2013 18:51

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
Odpovídá na Snorlax
Neaktivní uživatel:14.8.2013 18:56

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
Neaktivní uživatelský účet
Avatar
David Čápka Hartinger
Tým ITnetwork
Avatar
Nahoru Odpovědět
14.8.2013 19:01
You are the greatest project you will ever work on.
Avatar
Snorlax
Tvůrce
Avatar
Odpovídá na Neaktivní uživatel
Snorlax:14.8.2013 19:02

: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
Tvůrce
Avatar
Odpovídá na David Čápka Hartinger
Snorlax:14.8.2013 19:06

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
Tvůrce
Avatar
Odpovídá na Neaktivní uživatel
Kit:14.8.2013 19:09

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

Nahoru Odpovědět
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 Hartinger
Tým ITnetwork
Avatar
Odpovídá na Snorlax
David Čápka Hartinger:14.8.2013 19:09

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
You are the greatest project you will ever work on.
Avatar
Odpovídá na Kit
Neaktivní uživatel:14.8.2013 19:10

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
Neaktivní uživatelský účet
Avatar
Snorlax
Tvůrce
Avatar
Odpovídá na Neaktivní uživatel
Snorlax:14.8.2013 19:15

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
Tvůrce
Avatar
Odpovídá na David Čápka Hartinger
Snorlax:14.8.2013 19:18

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 Hartinger
Tým ITnetwork
Avatar
Odpovídá na Snorlax
David Čápka Hartinger:14.8.2013 19:19

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

Nahoru Odpovědět
14.8.2013 19:19
You are the greatest project you will ever work on.
Avatar
Snorlax
Tvůrce
Avatar
Odpovídá na David Čápka Hartinger
Snorlax:14.8.2013 19:21

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
Tvůrce
Avatar
Odpovídá na Neaktivní uživatel
Kit:14.8.2013 19:21

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
Tvůrce
Avatar
Odpovídá na Snorlax
Kit:14.8.2013 19:22

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
Odpovídá na Snorlax
Neaktivní uživatel:14.8.2013 19:23

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
14.8.2013 19:23
Neaktivní uživatelský účet
Avatar
Kit
Tvůrce
Avatar
Odpovídá na Neaktivní uživatel
Kit:14.8.2013 19:29

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
Odpovídá na Kit
Neaktivní uživatel:14.8.2013 19:34

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

Nahoru Odpovědět
14.8.2013 19:34
Neaktivní uživatelský účet
Avatar
Kit
Tvůrce
Avatar
Odpovídá na Neaktivní uživatel
Kit:14.8.2013 19:41

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
14.8.2013 19:41
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Odpovídá na Kit
Neaktivní uživatel:14.8.2013 20:01

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
Neaktivní uživatelský účet
Avatar
Odpovídá na Neaktivní uživatel
Neaktivní uživatel:14.8.2013 20:07

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

Nahoru Odpovědět
14.8.2013 20:07
Neaktivní uživatelský účet
Avatar
Odpovídá na Neaktivní uživatel
Neaktivní uživatel:14.8.2013 20:09

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

Nahoru Odpovědět
14.8.2013 20:09
Neaktivní uživatelský účet
Avatar
Odpovídá na Neaktivní uživatel
Neaktivní uživatel:14.8.2013 20:13

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
Neaktivní uživatelský účet
Avatar
Nahoru Odpovědět
14.8.2013 20:26
Neaktivní uživatelský účet
Avatar
Odpovídá na Neaktivní uživatel
Neaktivní uživatel:14.8.2013 20:30

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
14.8.2013 20:30
Neaktivní uživatelský účet
Avatar
Odpovídá na Neaktivní uživatel
Neaktivní uživatel:14.8.2013 20:31

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
Neaktivní uživatelský účet
Avatar
Odpovídá na Neaktivní uživatel
Neaktivní uživatel:14.8.2013 20:32

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
Neaktivní uživatelský účet
Avatar
Odpovídá na Neaktivní uživatel
Neaktivní uživatel:14.8.2013 20:33

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
Neaktivní uživatelský účet
Avatar
Kit
Tvůrce
Avatar
Odpovídá na Neaktivní uživatel
Kit:14.8.2013 20:35

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
Odpovídá na Neaktivní uživatel
Neaktivní uživatel:14.8.2013 20:35

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
Neaktivní uživatelský účet
Avatar
Odpovídá na Kit
Neaktivní uživatel:14.8.2013 20:38

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
Neaktivní uživatelský účet
Avatar
Kit
Tvůrce
Avatar
Odpovídá na Neaktivní uživatel
Kit:14.8.2013 20:38

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

Nahoru Odpovědět
14.8.2013 20:38
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Kit
Tvůrce
Avatar
Odpovídá na Neaktivní uživatel
Kit:14.8.2013 20:40

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
Odpovídá na Kit
Neaktivní uživatel:14.8.2013 20:40

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
14.8.2013 20:40
Neaktivní uživatelský účet
Avatar
Odpovídá na Kit
Neaktivní uživatel:14.8.2013 20:41

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
Neaktivní uživatelský účet
Avatar
Kit
Tvůrce
Avatar
Odpovídá na Neaktivní uživatel
Kit:14.8.2013 20:42

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
Odpovídá na Kit
Neaktivní uživatel:14.8.2013 20:45

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
Neaktivní uživatelský účet
Avatar
David Čápka Hartinger
Tým ITnetwork
Avatar
Odpovídá na Snorlax
David Čápka Hartinger:14.8.2013 20:49

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
14.8.2013 20:49
You are the greatest project you will ever work on.
Avatar
David Čápka Hartinger
Tým ITnetwork
Avatar
Odpovídá na Kit
David Čápka Hartinger:14.8.2013 20:51

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
You are the greatest project you will ever work on.
Avatar
Odpovídá na David Čápka Hartinger
Neaktivní uživatel:14.8.2013 20:52

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
14.8.2013 20:52
Neaktivní uživatelský účet
Avatar
David Čápka Hartinger
Tým ITnetwork
Avatar
Odpovídá na Neaktivní uživatel
David Čápka Hartinger:14.8.2013 20:54

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
14.8.2013 20:54
You are the greatest project you will ever work on.
Avatar
Odpovídá na Neaktivní uživatel
Michael Olšavský:14.8.2013 20:58

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
Odpovídá na David Čápka Hartinger
Neaktivní uživatel:14.8.2013 20:59

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
Neaktivní uživatelský účet
Avatar
Odpovídá na Michael Olšavský
Neaktivní uživatel:14.8.2013 21:01

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
Neaktivní uživatelský účet
Avatar
Odpovídá na Neaktivní uživatel
Neaktivní uživatel:14.8.2013 21:02

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

Nahoru Odpovědět
14.8.2013 21:02
Neaktivní uživatelský účet
Avatar
Kit
Tvůrce
Avatar
Odpovídá na David Čápka Hartinger
Kit:14.8.2013 21:04

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 Hartinger
Tým ITnetwork
Avatar
Odpovídá na Kit
David Čápka Hartinger:14.8.2013 21:06

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
You are the greatest project you will ever work on.
Avatar
Odpovídá na Neaktivní uživatel
Michael Olšavský:14.8.2013 21:06

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
14.8.2013 21:06
Avatar
Odpovídá na Kit
Neaktivní uživatel:14.8.2013 21:09

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
Neaktivní uživatelský účet
Avatar
Kit
Tvůrce
Avatar
Odpovídá na Neaktivní uživatel
Kit:14.8.2013 21:10

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
Odpovídá na Kit
Neaktivní uživatel:14.8.2013 21:16

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
Neaktivní uživatelský účet
Avatar
David Čápka Hartinger
Tým ITnetwork
Avatar
Odpovídá na Neaktivní uživatel
David Čápka Hartinger:14.8.2013 21:18

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
You are the greatest project you will ever work on.
Avatar
Kit
Tvůrce
Avatar
Odpovídá na Neaktivní uživatel
Kit:14.8.2013 21:20

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

Nahoru Odpovědět
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 Hartinger
Tým ITnetwork
Avatar
Odpovídá na Kit
David Čápka Hartinger:14.8.2013 21:21

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
14.8.2013 21:21
You are the greatest project you will ever work on.
Avatar
Kit
Tvůrce
Avatar
Odpovídá na David Čápka Hartinger
Kit:14.8.2013 21:29

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 Hartinger
Tým ITnetwork
Avatar
Odpovídá na Kit
David Čápka Hartinger:14.8.2013 21:32

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

Nahoru Odpovědět
14.8.2013 21:32
You are the greatest project you will ever work on.
Avatar
Kit
Tvůrce
Avatar
Odpovídá na David Čápka Hartinger
Kit:14.8.2013 21:46

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
Odpovídá na Kit
Neaktivní uživatel:15.8.2013 6:15

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
Neaktivní uživatelský účet
Avatar
Odpovídá na Neaktivní uživatel
Neaktivní uživatel:15.8.2013 7:56

Pardon:

  • Nemůže být VŽDY více instancí *
Nahoru Odpovědět
15.8.2013 7:56
Neaktivní uživatelský účet
Avatar
Kit
Tvůrce
Avatar
Odpovídá na Neaktivní uživatel
Kit:15.8.2013 8:03

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
Odpovídá na Kit
Neaktivní uživatel:15.8.2013 8:25

Nemyslím Singlenton ale statiku.

Nahoru Odpovědět
15.8.2013 8:25
Neaktivní uživatelský účet
Avatar
Kit
Tvůrce
Avatar
Odpovídá na Neaktivní uživatel
Kit:15.8.2013 8:32

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:15.8.2013 9:56

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
15.8.2013 9:56
https://www.facebook.com/peasantsandcastles/
Avatar
Kit
Tvůrce
Avatar
Odpovídá na Luboš Běhounek Satik
Kit:15.8.2013 10:24

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
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:15.8.2013 10:28

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

Nahoru Odpovědět
15.8.2013 10:28
https://www.facebook.com/peasantsandcastles/
Avatar
Odpovídá na Luboš Běhounek Satik
Neaktivní uživatel:15.8.2013 10:34

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

Nahoru Odpovědět
15.8.2013 10:34
Neaktivní uživatelský účet
Avatar
Lukáš Hruda
Tvůrce
Avatar
Odpovídá na Luboš Běhounek Satik
Lukáš Hruda:15.8.2013 11:45

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
Luboš Běhounek Satik:15.8.2013 11:58

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
https://www.facebook.com/peasantsandcastles/
Avatar
Lukáš Hruda
Tvůrce
Avatar
Odpovídá na Luboš Běhounek Satik
Lukáš Hruda:15.8.2013 12:29

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
Tvůrce
Avatar
Odpovídá na Luboš Běhounek Satik
Kit:15.8.2013 12:55

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
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:15.8.2013 13:26

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
https://www.facebook.com/peasantsandcastles/
Avatar
Kit
Tvůrce
Avatar
Odpovídá na Luboš Běhounek Satik
Kit:15.8.2013 13:43

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
Tvůrce
Avatar
Odpovídá na Luboš Běhounek Satik
Kit:15.8.2013 13:49

Texture je atribut objektu.

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
Tvůrce
Avatar
Odpovídá na Kit
Petr Nymsa:15.8.2013 14:05

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 Hartinger
Tým ITnetwork
Avatar
Odpovídá na Kit
David Čápka Hartinger:15.8.2013 14:13

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
You are the greatest project you will ever work on.
Avatar
tastyfish
Tvůrce
Avatar
tastyfish:16.8.2013 21:58

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
Tvůrce
Avatar
Odpovídá na tastyfish
Kit:16.8.2013 22:13

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:16.8.2013 23:24

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

Nahoru Odpovědět
16.8.2013 23:24
https://www.facebook.com/peasantsandcastles/
Avatar
Kit
Tvůrce
Avatar
Odpovídá na Luboš Běhounek Satik
Kit:16.8.2013 23:27

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

Nahoru Odpovědět
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:17.8.2013 0:11

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

Nahoru Odpovědět
17.8.2013 0:11
https://www.facebook.com/peasantsandcastles/
Avatar
Kit
Tvůrce
Avatar
Odpovídá na Luboš Běhounek Satik
Kit:17.8.2013 0:20

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:17.8.2013 0:47

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

Nahoru Odpovědět
17.8.2013 0:47
https://www.facebook.com/peasantsandcastles/
Avatar
Kit
Tvůrce
Avatar
Odpovídá na Luboš Běhounek Satik
Kit:17.8.2013 1:10

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:17.8.2013 1:34

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

Nahoru Odpovědět
17.8.2013 1:34
https://www.facebook.com/peasantsandcastles/
Avatar
TomBen
Tvůrce
Avatar
Odpovídá na Kit
TomBen:17.8.2013 9:14

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
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
Neaktivní uživatel:17.8.2013 10:28

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

Nahoru Odpovědět
17.8.2013 10:28
Neaktivní uživatelský účet
Avatar
tastyfish
Tvůrce
Avatar
Odpovídá na Kit
tastyfish:17.8.2013 12:47

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
Tvůrce
Avatar
Odpovídá na tastyfish
Kit:17.8.2013 13:11

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
17.8.2013 13:11
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Lukáš Hruda
Tvůrce
Avatar
Odpovídá na Kit
Lukáš Hruda:17.8.2013 15:50

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
Tvůrce
Avatar
Odpovídá na Lukáš Hruda
Kit:17.8.2013 16:01

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
Lukáš Hruda
Tvůrce
Avatar
Odpovídá na Kit
Lukáš Hruda:17.8.2013 16:15

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
Tvůrce
Avatar
Odpovídá na Lukáš Hruda
Kit:17.8.2013 16:32

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
Tvůrce
Avatar
David Hynek:17.8.2013 17:48

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
17.8.2013 17:48
Čím víc vím, tím víc věcí nevím.
Avatar
David Hynek
Tvůrce
Avatar
Odpovídá na David Hynek
David Hynek:17.8.2013 19:25

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:18.8.2013 0:08

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
https://www.facebook.com/peasantsandcastles/
Avatar
Kit
Tvůrce
Avatar
Odpovídá na Luboš Běhounek Satik
Kit:18.8.2013 0:17

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
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:18.8.2013 0:34

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
https://www.facebook.com/peasantsandcastles/
Avatar
Kit
Tvůrce
Avatar
Odpovídá na Luboš Běhounek Satik
Kit:18.8.2013 0:38

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

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

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
Tvůrce
Avatar
Odpovídá na TomBen
Kit:18.8.2013 0:41

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

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

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
Tvůrce
Avatar
Odpovídá na TomBen
Kit:18.8.2013 0:51

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

Nahoru Odpovědět
18.8.2013 0:51
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Neaktivní uživatel:18.8.2013 8:07

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
Neaktivní uživatelský účet
Avatar
vitamin
Člen
Avatar
vitamin:18.8.2013 10:24

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
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.