Autor Zpráva
zacatecnik
Profil
Dobrý den,
chtěl jsem se zeptat, jestli třídy zpomalují běh aplikace a jestli je vhodné, dělat třeba 10 tříd, když každá bude pracovat s něčím typu : Uživatel, Jazyk, Skupina, ...
Nebo jestli je lepší udělat pár základních tříd a zbytek psát už normálně.

Pak by mě zajímalo, když mám tedy ty třídy, zda má cenu dělat v ní funkce na něco, co použiji jen na jedné stránce, nebo jestli to mám vložit na ní.

Děkuji předem za odpověď a snad jsem to napsal srozumitelně...
quatzael
Profil
třídy nijak nezpomalují běh (pokud jich tam samozřejmě nenasekáš tisíce..)
objektový programování je o účelnosti (tzn. i počet metod), nejdřív si pořádně promysli jak chceš aby to fungovalo, potom teprv vytvářej třídy a metody..
zacatecnik
Profil
Je lepší udělat hlavní třídu, kterou zavolám z kódu a ve které potom budu ovládat ty další?
(např.:$hlavni->obycejna->funkce();)
Lamicz
Profil
Tohle je už IMHO otázka návrhových vzorů. Záleží vždy na konkrétním případě. Jinak je pravda, že OOP aplikace mají většinou "taťku všech objektů", v nette je to tuším Nette\Object.
zacatecnik
Profil
Pro prohlížečovou hru by jste použili jaký návrhový vzor, co mi můžete doporučit před tím, než začnu? Nerad bych začal špatně a projekt nedokončil, protože tam něco bude celé špatné a bude se to muset celé předělat. Prosím tedy Vás zkušenější o radu.
Keeehi
Profil
zacatecnik:
Návrhových vzorů by se použila určitě spousta. Na každý problém ten správný.

Nejsem si jistý, jestli máš dostatek znalostí k vytvoření prohlížečové hry. Takže jako zkušenější bych ti doporučil začít s něčím lehčím. Třeba s blogem.
zacatecnik
Profil
Jak správně udělat 3 třídy tak, aby jedna byla hlavní a druhé byli podřadné ve smyslu, že v hlavní budu moct volat obě podřadné a v podřadných budu moct volat hlavní i podřadnou.
Joker
Profil
quatzael:
třídy nijak nezpomalují běh
Zdroj? Za dob PHP4 se psalo, že objekty v PHP jsou pomalejší, v některých případech i výrazně. Nicméně se zdá, že s novějšími verzemi se rozdíl snížil, bohužel jsem to přestal sledovat.
Na druhé straně, výhodou OOP není míra optimalizace kódu, ale jednodušší a rychlejší návrh aplikace.
Přičemž dobrý návrh aplikace se může výrazně promítnout i do rychlosti.

zacatecnik:
Nebo jestli je lepší udělat pár základních tříd a zbytek psát už normálně.
Jak normálně? Jako procedurálně? To rozhodně nedoporučuji.
Procedurální a objektové programování jsou dva různé světy s různým způsobem uvažování. Buď bych dělal celou aplikaci objektově, nebo celou aplikaci procedurálně, ale rozhodně ne nějaký hybrid.

když mám tedy ty třídy, zda má cenu dělat v ní funkce na něco, co použiji jen na jedné stránce, nebo jestli to mám vložit na ní.
To je jednoduché: Kam ta funkčnost patří?
Pro jakoukoli funkčnost aplikace existuje v objektovém modelu třída, kam ta funkčnost logicky patří. A právě tam má být.
Pokud aplikace má něco umět a není pro to žádná vhodná třída, je objektový model neúplný nebo špatný.
zacatecnik
Profil
Jak správně udělat 3 třídy tak, aby jedna byla hlavní a druhé byli podřadné ve smyslu, že v hlavní budu moct volat obě podřadné a v podřadných budu moct volat hlavní i podřadnou.
A poté by mě zajímala poslední věc, když budu mít třeba inventář, tak mám 2 možnosti:
a) udělám 1 sloupec a v něm bude inventář rozdělen třeba pomocí "|" a až ho budu potřebovat explodnu ho.
b) udělám pro každé místo v inventáři sloupec.

Zajímalo by mě jaká z těchto možností je vzhledem k rychlosti nejvýhodnější.
Alphard
Profil
[#9] zacatecnik
Ta třetí
c) udělám další tabulku.
juriad
Profil
zacatecnik:
ani jedna možnost není správná

měj tabulku položka_v_inventáři (položka_id, inventář_id)
třída obalující inventář se bude starat o jeho správu (aby tam nebylo příliš mnoho položek, řešení duplicity, ...)
zacatecnik
Profil
Jenže když tam bude několik uživatelů, tak přece nebudu dělat pro každého tabulku s položkami v inventáři ne?
juriad
Profil
tak inventář bude mít vlastníka, atribut user na tabulce inventář
dotaz na jména položkek všech inventářů uživatele bude vypadat:

SELECT p.jméno, i.název FROM položka p JOIN položka_v_inventáři pvi ON p.id = pvi.položka_id JOIN inventář i ON pvi.inventář_id = i.id WHERE i.user = $USER_ID

možná tvá aplikace má nějaká logická omezení, o kterých nemohu vědět, a struktura by měla vypadat jinak
zacatecnik
Profil
Prosím, poraďte tedy jak udělat ty tři třídy aby jedna byla hlavní atd. jak jsem už psal. Nikde jsem to na netu nenašel a nechci použít to co mě napadne protože to asi nebude dobře.
Jan Tvrdík
Profil
zacatecnik:
Říká ti něco „skládání tříd“ nebo také „kompozice“?
zacatecnik
Profil
Ne, každopádně já bych to asi řešil tak, že když je v té třídě vytvořím, pošlu jim $this a oni si to uloží jako soukromou proměnou a budou přes to moct volat ostatní...
To asi správně není ne? :D
Alphard
Profil
Moc přesně vám nerozumím. Přece nedává moc smysl, aby podřízená třída volala nadřízenou.
Udělejte si teda jednu hlavní, uvnitř ní libovolný počet instancí jiných tříd a ty pak můžete volat.

class Child
{
  public function someMethod()
  {
    // work
  }
}

class Main
{
  private $child;
  
  public function __construct()
  {
    $this->child = new Child;
  }
  
  public function otherMethod()
  {
    $this->child->someMethod();
  }
}
zacatecnik
Profil
No, ale jde o to, že v té třídě Child, budu chtít volat třídu třeba Child2, vytvořenou ve třídě Main...
Jan Tvrdík
Profil
zacatecnik:
Dokud nám neřekneš, co ty jednotlivé třídy představují a proč potřebují volat ty ostatní třídy, tak ti nelze rozumně poradit. Můžeme akorát hádat.
zacatecnik
Profil
No tak dám příklad:
Bude jedna hlavní a v ní vytvořím User, Articles.
V User načtu data o uživateli a v classu Articles budu chtít zjistit, zda je uživatel admin, nebo tam budu mít třeba funkci, která mi vrátí nějaké hodnoty. Takže potřebuji aby mohli takhle komunikovat.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: