Autor Zpráva
Tomi
Profil *
ahoj,
prave som sa trosku naucil OOP(zaklady) a celkom rad by som prepisal moje proceduralne kody :)
mojim problemom je, ze ako mam prepisat talker(je cely robeny proceduralne, pocita cas, robi autopromote-po urcitom nachatovanom case sa zvysi hodnost uzivatela=>bude mat k dispozicii nove prikazi atd.) do OOP?
napadlo na pouzit triedu "useri" a potom triedu "prikazi", ale este neviem ich strukturu, co presne budu obsahovat...
poradite mi, ze ake triedy by mal ten talker obsahovat(len to hrube zakladne clenenie)?
dik
matak
Profil
OOP je hlavne zpusob mysleni, je to abstrakce reality, pokud tohle nerespektujes tak je to jenom zbytecne zatezovani zeleza. Sic nevim co by jako vsechno mel ten tvuj talker delat


ale urcite tam bude objekt, trida USER, je to uzivatel ktery bude mit metody a vlastnosti jako pridat prispevek to muze byt dalsi trida jestli to ma vyznam PRISPEVEK, vlastnosti budou jmeno, hodnost, dalsi metoda getHodnost no mas ten dotaz hoodne obecny se mi zda. Na co konkretne se ptas?
TomAsQo
Profil
mnoo ja si to predstavujem tak, ze talker bude nieco ako NUTS kod(cili bude mat podobne funkcie, ako atlantis talker[ten musis poznat :-} {vid http://talker.sk/}]), ale bude to robene v phpcku a bude to open source :)
taaakze planujem nieco take, ako triedy Users a kazdy user bude mat metody ako vypis_spravy(), vloz_spravu(prikaz,pre_koho,sprava,...)pripocitaj_cas()[bude sa ratat nachatovany cas usera] atd :) atd,
len potom je dost problem, ze ako zakomponovat do toho prikazi ako .tell, .quit atd.(.tell nick ahoj napise nickovi Nick spravu s obsahom ahoj).
neviem, ci chapes, ked nie, tak sa zaregistruj bud na uz spominany talker, alebo na chatq.sk, alebo nieco podobne :)
matak
Profil
v celku asi chapu ale co teda potrebujes, napsat tady cely navrh? :-) nebo cemu nerozumis
TomAsQo
Profil
len, ze ako "zaimplementovat" prikazi; su(podla mna) 3 riesenia:
a) totiz kazdy user bude mat uz od zaciatku(cili priamo v triede Useri) vsetky prikazi(ale potom treba n e j a k o spravit to, aby tie prikazi nevedel pouzivat dovtedy, dokym neziska dostatocnu hodnost)

b) spravim novu triedu prikazi a tak to nejak spravim

c) budem ukladat prikazi do osobitnych suborov(tak to mam teraz), cili budu/su subory na ziskavanie prikazov(napr. /in/tell.php, /in/quit.php); tento subor umoznuje vlozit napisany prikaz v spravnom formate do databazy/i[neviem, ktore "i" je spravne ;-)]
a budu/su aj subory /out/tell.php atd, ktore dany prikaz potom pomocou javascriptu dopisu a sformatuju(zaistia napr. ze prikaz .tell sa bude vypisovat zelenou, ze sa bude sklonovat nick[povedal si userOVI: ahoj ] atd:))

taaakze, ktory sposob mam pouzit? :) poradis?
ps: tie prve 2 sposoby si este neviem velmi dobre predstavit...:)
matak
Profil
zda se mi to cele zmatene,

hned na zacatku prikazu uved podminku

if ($this->getHodnost() < 2) return false;

dalsi kod se neprovede, funkce getHodnost vraci hodnotu hodnosti, a je to vyresene ne?

da se programovat i bez objektu co si od nich slibujes?vse co de s objekty de i bez nich
Joker
Profil
TomAsQo
Tohle ovšem není problém programátorský, ale analytický, problém návrhu aplikace. S tím se takhle těžko radí, to by tu někdo musel na základě přesného popisu řešeného problému tu analýzu udělat.

Třeba já bych si to představil řekněme jako zavolání nějaké metody třeba User::command(). O oprávnění uživatele by se vnější skript nemusel starat, byla by třeba metoda User::hasPrivilege(), která by se volala z metody command(). A pak by se zajistilo provedení toho příkazu, což zas záleží na tom, jak by se ty příkazy vlastně měly provádět a co všechno by se mělo dělat.

To je jedna z možností, ale samozřejmě by to mohlo být i jinak.

Jinak ale jak píše matak: naučit se OOP neznamená naučit se třeba v PHP psát $objekt->metoda(). Objektově orientované programování je v první řadě způsob uvažování o problému a způsob návrhu programu. Udělat si procedurální návrh programu a potom ho napsat objektovou syntaxí je akorát plýtvání výpočetním výkonem.

Zkusím dát příklad, v čem je ten hlavní rozdíl.
Řekněme, že řešený problém je uvařit čaj.
Strukturované uvažování bude něco takovéhohle: Tak nejdřív přijdu do kuchyně. Pak se podívám, jestli uvidím hrnek, konvici a krabičku čaje. Pokud ne, tak chyba. Pokud ano, otevřu krabičku čaje a podívám se dovnitř. Pokud tam je sáček s čajem, vyndám a vložím do hrnku. Pak vezmu konvici a strčím jí pod vodovod. Pak otočím kohoutkem a podívám se, jestli teče voda do konvice. (a tak dále)
Objektově budu přemýšlet asi takhle: Takže, co budu potřebovat: vylouhovat sáček ve vařící vodě. Vím, že mám vodovod, ze kterého získám vodu, ovšem studenou. Taky vím, že sáček lze vylouhovat v nádobě. Nádoby mám k dispozici konvici a hrnek, ale vím, že louhování sáčku v konvici moc dobře nefunguje a navíc z konvice se dost blbě pije. Tak použiju radši hrnek. Konvice zase umí uvařit vodu, takže se hodí taky. Taky mi přijde vhod, že každou nádobu (tj. i konvici a hrnek) umím naplnit vodou a taky z ní vodu vylít. (a tak dále)
Toto téma je uzamčeno. Odpověď nelze zaslat.

0