NOVINKA - Online rekvalifikační kurz Python programátor. Oblíbená a studenty ověřená rekvalifikace - nyní i online.
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í.

Diskuze: Výhody objektů

V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.

Aktivity
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 Hartinger
Vlastník
Avatar
Odpovídá na Snorlax
David Hartinger:14.8.2013 19:01

Tohle jsi předpokládám asi neviděl: http://www.itnetwork.cz/…oje-softwaru

Nahoru Odpovědět
14.8.2013 19:01
New kid back on the block with a R.I.P
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 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 Hartinger
Vlastník
Avatar
Odpovídá na Snorlax
David 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
New kid back on the block with a R.I.P
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 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 Hartinger
Vlastník
Avatar
Odpovídá na Snorlax
David 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
New kid back on the block with a R.I.P
Avatar
Snorlax
Tvůrce
Avatar
Odpovídá na David 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 Hartinger
Vlastník
Avatar
Odpovídá na Snorlax
David 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
New kid back on the block with a R.I.P
Avatar
David Hartinger
Vlastník
Avatar
Odpovídá na Kit
David 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
New kid back on the block with a R.I.P
Avatar
Odpovídá na David 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 Hartinger
Vlastník
Avatar
Odpovídá na Neaktivní uživatel
David 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
New kid back on the block with a R.I.P
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
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 50 zpráv z 112.