...to je bohužel opět.
Navíc mi to přijde, že jsou ty objektové vymoženosti popisovány jako úžasné nové objevy, které má kromě PHP jen jakási Java ;-) ... Kdybych chtěl hodně provokovat, napíšu, že rozhraní, instanceof, typovou kontrolu objektů za běhu, ... prostě tohle všechno už mám nějaký čas i v C (s GLib), což je skutečně jazyk z nejobjektovitějších ;-)
no c nie je nejobjektovitější OOP :o) su aj lepsi :O) a hlavne c nebolo prve ked je uz rec o OOP. Podla mna je to dobry clanok. Je potrebne poznat detaily jazyka aj jed sa opakuje stale to iste u takmer vsetkych jazykov. PHP sa dostane do oblasti velkych projektov. Ma mnoho vyhod a to pohodova implementacia, bezproblemovy chod a hlavne masu programatorov. Predpokladam ze z nastupom ver.5 nastane novy a este vecsi boom pre php. len pre porovnanie Java potrebuje silnejsie stroje a lepsich programatorov, C++(cgi) je sice najrychlejsie ale zial pocet programatorov koli zlozitosti jazyka a velkym problemom pri vyvoji (bezbecnost napriklad) je fakt mala. PHP5 na webe ziska trh. Java bude na ustupe - to ma ako javistu netesi ale co uz .... to je ta evolucia ...
To asi sotva :->, PHPko se prosadilo, a) slo se jednoduse naucit, aniz by clovek musel neco vedet o programovani - s minimem znalosti lze napsat aplikaci b) nic jinyho nebylo.
Ze v PHPku pise fura programatoru, jo, ale jakych. bastliru na kolene. Zesloziteni, doplneni funkcionality PHP spis uskodi. Komplikovany programovaci jazyky tu uz jsou. A to jestli se PHP bude pouzivat na vetsich projektech ani tak nesouvisi s jazykem jako spis s jeho zazemim, pokud budou kvalitni debuggery, editory, sprava verzi tak mozna, KNIHOVNY. Nic z toho pro PHPko vicemene neni. Jestli by neco mohlo Javu ohrozit, tak jedine C#, je preci jen o par let mladsi a je to znat, jak na jazyce, tak na knihovnach, a vyvojovy cyklus je o fous rychlejsi.
Sam netusim co si evoluce vybere, pochybuju ale, ze by to bylo phpko. Melo sanci se prosadit vedle ASP (coz byl ...), proti ASP.NETu, JSP a dalsimu uz to bude mit o dost tezsi.
Podle me nema smysl takhle spekulovat, ja mam PHP rad a vyhovuje mi, a tohle priblizeni Jave akorat uvitam. Rozhrani, vyjimky, to je presne to, co jsem potreboval, nebot bez objektu vetsi projekt neudelam (samozrejme to jde...ale negativa stejne vsichni znate), ted se mi v nem bude programovat daleko lepe.
Jednoduchost PHPka pro ty bastlire a prilezitostne programatory tam stejne zustane, v tom vidim hlavni vyhodu proti Jave. Kdo bude chtit po Javovsku implementovat, extendovat a try-catchovat, ten muze. Kdo bude chtit jenom par includu, ten muze taky.
Dalsi vec je, ze PHP je (narozdil od ASP*) zdarma a narozdil od JSP DALEKO rozsirenejsi snad na vsech hostinzich (?) a ja si myslim, ze ho jen tak neco nevytlaci.
php neni vubec spatny, je nenarocny a extremne rychly (da si rici bezkonkurencne), php5 by mohlo znacnym krokem, zacinal jsem s c++ (kdysy davno) a objekty jen privitam. Zda to bude jista konkutence Javy se uvidi. Nemam nic proti C# ci ASP, VB a podobnym bazmekum od M$ jako je .net, ale podobne vymysly od M$ mi pripadaji postupem casu docela mrtve.
Jestli mate problemy s tim cist "dalsi" uvod do OOP, tak to proste nectete. Porad se tady mluvi, ze PHP je pro svatecni programatory - pro koho je tedy vhodnejsi alespon strucne zopakovat zakladni principy OOP?
ad. 2. odstavec: kdybych mel po kazde novince v PHP vyjmenovavat seznam prg. jazyku, ktere danou vlastnost maji, nic jineho bych nedelal. Jsem priznivcem PHP a v tom co pisu snad jeste muzu zanechat svuj subjektivni dojem a radost, ze muj oblibeny jazyk bude mit konecne vlastnosti, ktere mi schazely, ne?
Myslim ze dnes uz nejde o to mit uplne nejskvelejsi
programovaci jazyk s absolutne cistou strukturou
a pruzracnou citelnosti kodu. Dnes jde o to mit
dostatecne funkcni programovaci jazyk s relativne dobrymi vyjadrovacimi schopnostmi, ale hlavne s _velmi_ dobrou a rozsahlou knihovnou ruznych modulu pro vsechno mozne.
Kdysi jsem chtel psat zobrazovaci rozhrani pro archiv e-mailove konference :-). I rekl jsem si, ze vsichni porad opevuji ten Python, tak ze bych to zkusil v Pythonu. Skoncil jsem na tom, ze tehdejsi modul pro CGI pro Python neumel zpracovavat PATH_INFO. Smutne, ze? A Python je na tom ve srovnani s Ruby jeste dobre.
-Yenya
To je podle mě neúplně položená otázka. Ono záleží co děláte, jak to děláte. A taky na tom, jestli objektově píše jen teoreticky, a nebo tak, aby Vam to ulehcilo praci. Ja osobne objekty vitam, ale zaroven dodavam, ze objektove se da prakticky psat i v neobjektovem jazyce, jen pritom prijdete o par zjednodusujicich mechanismu. Podivejte se do C knihovny libc na implementaci funkci pro praci se soubory pomoci struktury FILE a pochopite.
..neuplna otazka ...
OK, pokusim se vyjadrit presneji:
Necht je dan programator, ktery programuje ca. 10 let funkcionalni metodou podnikove informacni systemy.
Jaky narust produktivity muze tento programator ocekavat, prejde li na objektove orientovane programovani zrovna takovych systemu po jednom roce.
Jaky je narust produktivity po 5 letech.
To samozřejmě záleží na tom, jakou metodou programujete. Já osobně programuji objektově, a největší nárůst produktivity ušetřím ve fázi ladění a odchytávání chyb. Nárůst produktivity je přímo úměrný pečlivosti návrhu struktury objektů.
U objektového návrhu se dá říci, čím větší projekt, tím větší nárůst produktuvity oproti neobjektovému programování. Na mini projektech je skoro jedno, jakou metodou programujete. Pokud si zkusíte projekt na 3 obrazovky zdrojového kódu porovnat z hlediska produktivity, tak je to k ničemu.
To je také důvod, proč se dost často stává, že větší projekty jsou dost často přepisovány z C do C++, apod.. Viz třeba případ Firebirdu (klonu databázového serveru Interbase), apod..
Objektové programování dokáže podstatně omezit zmatky na mnoha úrovních, zaručit, že Vám lidé používající objekt nasáhnou na data, která nemají, apod..
Ještě více ta výhoda objektového přístupu vyplyne v případě, že programátor pracuje na více projektech a chce používat určité části kódu v různých projektech. Tam je pak možnost izolace určitého celku do samostatné jednotky (ať už jí říkáme jakkoli - objekt, třída, komponenta) dost výrazným přínosem. Lze to samozřejmě řešit i v neobjektových jazycích, ale vyžaduje to udržování disciplíny, u objektového přístupu je to přirozený postup.
Objektové programování není všelék ani jediná správná víra. Je to jen nástroj, který se pro některé účely hodí více, pro některé méně. Proto mám raději jazyky jako C++, které umožňují programovat objektově, ale neházejí mi klacky pod nohy v okamžiku, kdy se to z jakýchkoli důvodů nehodí. Pokud je jazyk koncipován tak, aby neobjektový přístup a priori potíral, při jeho praktickém použití se nakonec vždy dostanete do situace, kdy řešíte problém mnohonásobně složitěji a obtížněji než je potřeba jenom proto, aby byl váš přístup čistě objektový. Vzpomínám si na přednášku o vývoji NTS, kde jeden z vývojářů popisoval, jaké strašné ukrutnosti musejí vymýšlet proto, že na počátku místo C++ zvolili Javu.
Je to podobné, jako když kdysi dávno jakási skupina teoretiků (v čele s jistým panem Pecinovským) dštila oheň a síru na příkaz goto. Přitom rozumně použitý příkaz goto (často maskovaný za přezdívky typu return, exit, break nebo continue) může program naopak zpřehlednit. Jak pravil poručík Hamáček: "Protože, Kefalín, každej fundamentalismus je co? Každej fundamentalismus je na h___o."
jeste tomu porad nerozumim:
[...] Narust produktivity je primo umerny peclivosti navrhu struktury objektu. [...]
To je ale v jedne a te same metode. Nas ale zajima to srovnani tech dvou metod programovani a ne, ze kdyz v objektovem udelam blbe objekty tak je to horsi nez kdyz jsou ty objekty spravne.
[...] cim vetsi projekt, tim vetsi narust produktuvity oproti neobjektovemu programovani [...]
uz jste delal 2 podobne projekty -jeden funkce, druhy objekty a mohl jste zjistit tu zavislost. Nebo jak jste na tu zavislost prisel? V jakem pomeru jsou ty produktivity u stredne velkeho projektu?
[...]dokaze podstatne omezit zmatky na mnoha urovnich, [...]
ja citim, ze to myslite opravdove a proto tu vetu nechci tvrde kritizovat (to umi kazdy). Ale popravde, takova veta nas nepohne dal.
to: pan Kubecek
[...] pouziti trid pres hranice projektu prinese znacne uspory [...]
jak znacne ve srovnani s pouzitim stejnych funkci pri klasickem proceduralnim programovani. prinasi pouziti trid oproti funkcim narust produktivity 5x, 2x, 1.2x, nebo take eventuelne 0.5x ?
Suma sumarum:
Pres vsechny ty vseobecne vety bych rad vedel, zda muze nekdo rici:
mam 2 tymy po 5 lidech. jeden tym programuje proceduralne, druhy objektove? proceduralni tym je hotov za 6 mesicu.
jak dlouho potrva prace objektovemu tymu?
Zkusim odpovedet:
1) "To je ale v jedne a te same metode. Nas ale zajima to srovnani tech dvou metod programovani a ne, ze kdyz v objektovem udelam blbe objekty tak je to horsi nez kdyz jsou ty objekty spravne"
Presne srovnani jsem nikdy nedelal, a staci mi ma osobni zkusenost. Osobne uz me ani nenapadne delat neobjektove, protoze objektove je to mnohem lepsi. Takze statistikou s procenty opravdu neposlouzim, ale neco preci, viz bod 2.
2) "uz jste delal 2 podobne projekty -jeden funkce, druhy objekty a mohl jste zjistit tu zavislost. Nebo jak jste na tu zavislost prisel? V jakem pomeru jsou ty produktivity u stredne velkeho projektu?"
Neni duvod delat vetsi projekt dvakrat. Ale kolem Vas jsou projekty, ktere se prepisovaly z neobjektoveho do objektoveho. Viz Firebird, viz dalsi. Jen se rozhlednete. Rozdil take je, do jake objektovosti je prepisete. Treba pan Cada popisuje projekt, kdy si rekl 80 000 za program, ktery napsal v objektovem prostredi Cocoa na Macu. Uprimne uvedl, ze castka je prilis vysoka za to malo, co udelal. JIny jeho kolega pracujici neobjektove dal za stejnou praci nabidku 250 000 za stejny program. Pan Cada k tomu dodava, ze ta cena byla opravnena z hlediska toho, co ten programator musel psat.
Nutno rici, ze slo o vyuzivani objektu na vysoke urovni.
4) "jak znacne ve srovnani s pouzitim stejnych funkci pri klasickem proceduralnim programovani. prinasi pouziti trid oproti funkcim narust produktivity 5x, 2x, 1.2x, nebo take eventuelne 0.5x ?"
To zalezi na tom, co delate. Treba slusny narust produktivity je u objektu, pokud delate graficke rozhrani, coz dnes predstavuje 90% prace na projektech. Ale urcite urychleni u objektu je prakticky vzdy oproti cistemu proceduralnimu programovani.
5) "mam 2 tymy po 5 lidech. jeden tym programuje proceduralne, druhy objektove? proceduralni tym je hotov za 6 mesicu. jak dlouho potrva prace objektovemu tymu?"
To ale preci zavisi na tom, co dela, na jake technologii dela, apod.. Ale obecne pro tymy jsou objekty pozehnanim.
Na druhe strane je potreba rici, ze proste objekty zkuste a uvidite. Nelze z objektu delat boha, ale urcite je oop obrovska pomoc. Navic jde o omezeni kolizi jmen, o zabraneni chyb vlivem toho, ze jiny clen tymu sahl nekam do dat, kam nemel, apod.. Diky jasnemu rozhrani neni potreba tolik dokumentovat, a tolik veci dohadovat s kolegy. Atd..
Je na vás vidět, že jste otevřen debatě, ale současně že si teprve formujete názor na OOP. Výhody OOP jsou totiž nesporné.
Nuže, OOP má několik kvalitativních rysů, kterým se odlišuje od strukturovaného programování - jedním z nich je dědičnost. Co to v praxi znamená ?
Jedna skupina vašeho týmu vyvíjí reusable knihovny, které se pro jednotlivé projekty vašich zákazníků customizují - přičemž sdílená funkcionalita zůstává společná! Při strukturovaném programování sice taky vyvíjíte sdílelné knihovny - ale pokud chcete jejich funkcionalitu rozšířit a stávající zachovat - musíte do jejich funkcí a procedur přidávat volitelné parametry, nebo upravovat jejich zdrojáky - čímž přestanou být přenositelné a navzájem kompatibilní.
V OOP jsou knihovny objekty, třídy které jednoduše podědíte a nabalite si na ně vlastní funkcionalitu, aniž musíte jakkoliv zasáhnout do jejich kódu. ale v případě, že ho rozšíříte jsou změny k dipozici automaticky všem čelnům vašeho týmu - aniž však musí jakkoliv regresně upravovat spoje zdrojové kódy. Je jen na nich, zda upgrade využijí či ne. To není kvantitatiní rozdíl oproti strukturovanému programování - ale nová kvalita, přidaná fíčura, rozšířená funkcionalita oproti programování sebevíc strukturovanému.
Nebo vezměte si třeba takovou OOP inheritanci. Rozhraním definujete strukturu třídy, jak se má vypadat a chovat v budoucnosti. Nikdo z vašich vývojářů nemůže tento funkční předpis obejít, protože je zakompilován do sdílené, popř. elektronicky podepsané třídy - je tím definován do značné míry i styl a formalismus další vývojářské práce. Pro SW arcitekta představuje OOP rozhraní něco jako prefabrikát ve stavebnictví.
OOP, jak je vidět vykazuje zřetelný přínos ve vztahu k řízení SW projektů. Není to jen nějaký nový způsb psaní kódu, který někomu může vyhovovat a nemusí a celkový přínos zůstává víceméně stejný. S OOP doopravdy můžete dělat věci, které nejsou ve strukturovaném programu možné - tím neříkám, že by zásady strukturovaného programování neměly být využívány i napříč OOP. Ale zásady strukturovaného programování jsou podmnožina, subkategorie OOP paradigmatu.
Co se diskuse k PHP týče, ten jazyk příliš neznám, nezajímá mě a necítím se tedy kompetetní se k němu vyjadřovat. Podle mě se další rozšiřování jazyka dá posuzovat jedině ve vztahu či k otázce, zda je na ně jazyk koncepčně a sémanticky připraven, nebo ne. Např. ti. co programují v C++ vědí, že koncepce OOP na C byla naroubována dosti uměle - a to jak s ohledem na přehlednost a strukturovanost syntaxe, tak s ohledem na výsledný výkon, který značně degraduje možnosti původního C. Java nebo SmallTalk těmito neduhy netrpí, protože tyto jazyky byly od svého počátku koncipovány jak objektové, stejně jako JScript či Ruby byly od svého začátku koncipovány jako dynamické. A to je tedy nutné zvážit i při posouzení reálných výhod dalších rozšíření PHP směrem k OOP a vyšší dynamičnosti jazyka. Nejčistším jazykem z hlediska koncepce je podle mě dnes z dynamických jazyků Ruby, ze statických C# Microsoftu.
Posuzovat produktivitu podle toho, jestli jeden tým programuje objektově a druhý ne mi nepřijde příliš moudré. Jde totiž o to, že aby objektové programování mělo nějaký smysl, musí daný programátor skutečně objektově přemýšlet. Pokud totiž dojde pouze k bezúčelnému zabalení funkcí (metod) do nějakého objektu (např. třídy), tak to opravdu k ničemu nepovede a produktivita nestoupne.
Pokud zacnete programovat objektove proto, ze vam nekdo rekne ze je to lepsi, vase produktivita klesne. Jeste vic klesne pokud kvuli tomu zmenite jazyk, i kdyby jen z C na C++. Pokud budete mit stesti, zacne zase stoupat az si na to zvyknete, ale neni jiste jestli prekroci puvodni hodnotu.
Neco uplne jineho je zacit programovat objektove proto ze sam objevite v cem je to konkretne pro vas (nebo dokonce konkretne pro ten projekt) lepsi. To muze produktivita zacit stoupat okamzite.
Objektove se totiz musi predevsim myslet.
Taky mi často připadá, že OOP je tak trochu zaklínadlo. To bude věkem...
Myslím, že má hlavně místo při analýze a návrhu - odpovídá totiž našemu evropskému pohledu na skutečnost, kterou si už někdy od Aristotela dělíme na obecnější a speciálnější, nadřízené a podřízené.
Přepisovat neobjektový projekt do něčeho objektového je hrůza (aspoň pro mě byla) nemívající dobré výsledky (u mě neměla). To už je lepší to předělat zgruntu od analýzy a třeba použít části kódu.
Jisté zjednodušení práce vidím v dokonalejší a přímo syntaxí vynucené separaci částí kódu. Což jde i v neobjektovém jazyce, ten to ale nevyžaduje, takže můžu prasit dle libosti.
A za druhé v tom, že systém se sám postará o leccos, co bych jinde musel dělat já. Na druhou stranu to ale znamená, že na to nemám vliv, a často ani šajna, co se vlastně děje. Dle hesla "to neřeš...".
Pro nás, kteří jsme začínali v dobách, kdy strukturované programování byla horká novinka a GOTO byl nenahraditelný příkaz, to může být frustrující (pro mě je).
vazeny kolego,
jiste tusite, ze ma otazka nahore byla pouze recnicka. Ja na ni tu odpoved znam, jenom mi to obcas neda trochu popichnout komunitu prevazne mladych hochu, kteri se nadchnou pro kazdou novou myslenku - sam jsem to urcite take drive delal.
Zakoncit muzeme tu diskuzi o OOP vyrokem B. Stroustrupa - "jestli mas vyvojare, kteri umi cobol, delej ten projekt v cobolu" Stroustrup sice neni Aristoteles, ale me staci kdyz nekdo takovy vyjadri originalnim zpusobem, ze vliv pouzite metody (OOP nebo ne) je zanedbatelny ve srovnani s ostatnimi vlivy pusobici na projekt.
Co mi prekvapuje, ze i Vy s takovymi zkusenostmi prohlasujete:
[...] Jiste zjednoduseni prace vidim v dokonalejsi a primo syntaxi vynucene separaci casti kodu. [...]
to ja Vam muzu okazat C++ program, ktery sestava z jedne tridy a miionu funkcnich volani :-)) Zadny compiler mi v tom nezabrani.
[...]A za druhe v tom, ze system se sam postara o leccos, co bych jinde musel delat ja. [...]
co napriklad ??
P.S: GOTO pouzivam i nadale, v linux-jadre je toho take plno - zadna hanba.
Je skoda, pane Kubiku, ze zbytecne nechavate odpovidat lidi na otazku, ktera vas v podstate nezajima, a jen doufate, ze lidi trochu popichnete. Nic, ja sam za sebe muzu jen rici, ze jsem diky Vam zase o neco mene ochotnejsi odpovidat zacatecnikum na jejich dotazy. Asi nejsem sam, kdo nerad dela zbytecnou praci. Prave jste mi ukazal, co znamena poslat mou dobre minenou aktivitu a cas venovany v dobre vire Vam do WC. Nic, dekuji na zivotni zkusenost, zacinam naprosto chapat, proc zkuseni linuxaci pisou ostatnim RTFM. Pokud zazili par takovych lidi, jako jste Vy, vubec se tomu nedivim. Takze jeste jedno ironicke diky Vam, a moje odpovedi tem, kdo me budou zadat o radu zacatecniku budou pro blizkou budoucnost "jdi se vycpat"
To jste nepochopil.
Účelem takové popichující otázky je přimět tázaného k zamyšlení. Jistý Sokrates to kdysi praktikoval s takovým úspěchem, že ho museli nakonec ubolehlavovat, aby Athéňané nebyli moc chytří...
Zamyslet se nad souvislostmi je někdy docela příjemné, tak se nezlobte.
Zamyslim se nad OOP zhruba desatym rokem. Jasne pisu, ze OOP neni Buh, ale ze tomuto pristupu davam prednost. Vim, ze jsou i slabe stranky tohoto pristupu.
Proste jsem chtel poradit v dobre vire, a namisto toho se objevilo, ze proste nekdo chtel udelat z druhych mladiky, kteri zrovna zacinaji programovat.
Me to proste tak otravilo, ze opravdu omezim sve odpovedi tem, kdo zadaji o radu a budu jim radit az prokazi, ze se ctenim nejakeho manualu dostatecne proskvarili. To jen proto, abych priste nevenoval cas nekomu, kdo by chtel jen dokazat, ze je king a ostatni jsou blbci.
vazeny kolego,
Vase reakce me trochu prekvapila. Postavil jste se do svetla dobrocince, ktery nezjistne pomahal do dneska komunite, az tomu ten zly pan Kubik udelal konec. A hned se k tomu pridaji jinu a hovori, ze moudrost vypada jinak.
Ale ono jde porad o to OOP. Rady, ktere zde zaznely a to nejen od Vas se daji shrnout nasledovne:
- OOP je dobre, ale ma take stine stranky
- rada veci se v OOP da delat lepe
- kdyz se stim clovek zabyva, tak zjisti, ze se to muze hodit
- je treba OO myslet
- nekdo predelava projekty na OOP, pro jine to muze byt horor
- OOP je treba pouzivat tam, kde se to hodi
To jsou vsechno smysluplne vety. Ja znam ale i dalsi:
- mic je kulaty
- kazdy zapas trva 90 minut
- kazda hul ma dva konce
- "uvidime" (Franz Beckenbauer)
Vim, ze to rade lidi prijde arogantni. Ale ja Vam za sebe slibuji, ze az zase bude nejaka takova diskuze, tak se opet budu snazit dozvedet se neco konkretniho. Zaverem snad jen to, ze v takove diskuzi neni mozno polozit kazde slovo na zlatnicke vahy. Takze na videnou v nejake jine diskuzi :-)
Vazeny pane, proste jste me nastval, je to tak tezke pochopit? Pokud kazdy rok pokladate otazky komunite, a ona je neschopna polozit k noham velikana, jako jste Vy, smysluplnou odpoved, tak proste budete kazdy rok prudit namisto toho, abyste si sam zjistil odpoved vlastnimi zkusenostmi, nebo jinym zpusobem.
Pokud proste budete jen prudit, a nezkusite si to, treba Vam nikdo neni schopen predat, co OOP ve skutecnosti je. Asi tak, jako tezko predate zazitek sexualniho orgasmu nekomu, kdo sex zkouma pouze teoreticky dotazy v komunite a sam nehodla byt nicim jinym nez panicem/pannou. Proste se muzete rok co rok ptat, co je to sex, ale neco jineho je tlachat o sexu, a uplne neco jineho je zucastnit se sexu.
Mohu Vam zarucit, ze se proste muzete ptat rok co rok, co je to OOP. A stejne nikdy nedostanete odpoved. Proste si OOP zkuste, a pokud v nem budete nejaky ten rok delat, nebudete uz mit potrebu se ptat.
Ahoj, jsem student, ktery by se v budoucnu rad venoval programovani a tato diskuze je pro me docela prinosem, takova mozaika nazoru :-) Co me ale zaujalo je tento "souboj": OOP (pan Ponkrac) vs. PROC/STRUKT prg. (pan Kubik). Ja jsem zacal v Pascalu a pak jsem sel rovnou do C++, ve skole pak C (krok zpatky) a Smalltalk, i to PHP. Pokud bych se mel tedy vyjadrit ja (vicemene nezkuseny, protoze nic dokonale neovladam), co mi pripada lepsi, tak bych napsal: OOP wins! (a mozna Flawless victory :-) ikdyz to zas asi ne no). Objektovy pristup mi pripada blizsi lidskemu mysleni a me osobne opravdu vyhovuje vice. Pomoci OOP lze problemy vyresit elegantneji nez pomoci proc. pristupu, i kdyz i pomoci nej se do "cile" dobehne, prip. dojde :-) Ve skole me ing. Vojtech Merunka (velky fanda OOP a Smalltalku, autor nekolika publikaci na toto tema) ucil ze OOP je snad zatim jediny lek (i kdyz asi ne vselek) na tzv. semantickou mezeru a sva tvrzeni mimojine i dokazoval ruznymi grafy a srovnanimi, ktere si rozhodne nevycucal z prstu, ale pochazeji z verohodnych zdroju (treba OMG). Pamatuju si treba srovnani prog. jazyku z hlediska poctu napsanych radku kodu - cim vice objektovy jazyk tim lepsi vysledky, vitez byl tusim "cisty" Smalltalk ;-) Dalsi graf byl o tom ze 66% ceny softwaru tvori jeho udrzba, a ta je snadnejsi v pripade pouziti OOP. Nekde jsem cetl, ze s prichodem C++ byly prepisovany OS typu unix z C prave do C++ a tusim ze i Windows jsou tvoreny pomoci OOP, takze to asi byla pravda. Samozrejme cim mensi projekt, tim vice se rozdily smazavaji. Myslim ze chtit odpoved na otazku: Jak presne (kvantitativne vyjadreno) stoupne produktivita pri prechodu z proc. pristupu na objektovy je trochu .. no ujety :-) Proste praxe ukaze (a leckde to uz ukazala). V pripade pana Kubika by to mozna tak nevyznelo, ale jak se rika vyjimky se najdou vsude a staryho psa novym kouskum nenaucis (treba proto ze uz je prece jen starsi a nechce se uz nic noveho ucit). Jinak samozrejme bez urazky. Kazdy ma pravo na svuj nazor a toto je muj.
Samozřejmě jsem to tušil, či spíše očekával.
Ano, máte pravdu, i v C++ se dá psát prasecky a nečitelně, jen je snazší psát čitelně. I v Javě se to dá obejít přesně tak, jak popisujete - jedna třída (to je jen drobná syntaktická komplikace), z lokálních proměnných jsou rázem globální, z metod funkce, jen ty pointry by mi chyběly.
Nakonec, Pascal taky nikoho nepřinutil psát strukturovaně. Jen při tom neházel klacky pod nohy jako FORTRAN. Ale i v F IV (tuším) se už dalo psát čitelně. A nebo vyprodukovat talíř špaget, kterému po týdnu nerozuměl ani autor.
Třeba správu paměti, událostí, je toho víc. Nic co by se nedalo napsat neobjektově, jen to dá míň práce. Ergo, produktivita práce roste.
Obhajujete rozumné použití goto. Pochopitelně, proč ne. Rozumné použití téměř čehokoli nelze zavrhnout. Nedávno jsem goto taky z nezbytí použil. Ale předělával jsem mnoho programů (už dávno), kdy mi připadalo, že by GOTO/goto mělo být jen na zbrojní pas.
A kdysi měl oponovat diplomku, kde dotyčná napsala mnohasetřádkový fotranský program bez jediné funkce, zato s mnoha, velmi mnoha GOTO. Doporučil jsem jí tenkrát, aby si našla jiného oponenta, že se jí bude lépe obhajovat.
Ty převleky typu break, continue, return takové vepřovosti neumožňují a jsou užitečné. V Pascalu mi chyběly.
Pripomina mi to uvodnik ucebnice Fortranu, vydane u nas nekdy v roce 1980. Psali tam priblizne: "Nevime, jak bude vypadat nejpouzivanejsi programovaci jazyk v roce 2000. Ale vime jiste, ze se bude jmenovat Fortran!". Takhle nejak je to s PHP - nikdo nevi, v cem budou budouci bastlici bastlit sva fotoalba a knihy navstev, ale urcite se to bude jmenovat PHP. :-)
-Yenya
I went to my first computer conference at the New York Hilton about 20
years ago. When somebody there predicted the market for microprocessors
would eventually be in the millions, someone else said, "Where are they
all going to go? It's not like you need a computer in every doorknob!"
Years later, I went back to the same hotel. I noticed the room keys had
been replaced by electronic cards you slide into slots in the doors.
There was a computer in every doorknob.
-- Danny Hillis
Naprosto souhlasim, ze by PHP melo zustat pehapkem pro (nas) bastlire. OOP do nej sice prinese nove moznosti, ale kdyz potrebuju striktne objektovej jazyk, tak pouziju Javu nebo C#. Je ale pravda, ze pouziti Javy pro ciste webovou aplikaci bez robustniho backendu je jednoduse plytvani casem.
Nikoli, je potreba si uvedomit, ze prizen autoru PHP urcitemu jazyku je nestala a vrtkava. Jednou melo byt PHP co nejpodobnejsi jazyku C. Obcas byl vzorem jazyk Perl. Ted je to Java. A za 5 let uz autori PHP ani nebudou vedet, ze se kdy chteli priblizit Jave, a budou se priblizovat uplne jinemu jazyku.
Me by bohate stacilo u PHP, kdyby alespon za tech 5 let byl soucasti zakladniho baliku preklad do binarniho kodu a alespon radkovy debugger. Tedy to, co ma Java, ale i Perl a jine jazyky uz spoustu let.
Java ma zadarmo zakladni debugger, Java normalne kompiluje do binarniho kodu. Perl ma zadarmo zakladni debugger, zadarmo pracuje s binarnim kodem. Python ma zadarmo....
Atd.. Proste mit v PHP moznost debuggingu i binarni kodu jen za penize povazuji za velmi vyznamne minus PHP... Navic prave diky komercnimu podnikani autoru je tu celkem slusna jistota, ze to tak bude i nadale.
Zdravim vas vsechny. Jen predem rikam, ze uz v PHP delsi dobu neprogramuji a zastavam ve firme jinou funkci, ale vyvoj internetu a programovacich jazyku mne zajima o to vic. PHPko jsem miloval a stale ho u nas s radosti pouzivame, nicmene se priznam, ze toho moc nevim o ASP NET. Kazdy o tom mluvi, ale nikdo mi jeste poradne nevysvetlil vyhody v porovnani s napr. s "nasim" PHPkem. Nejde mi ani tak se dohodadovat na urovni programatoru co je lepsi, jak spis na moznosti vyuziti v relanem svete. Co vim o ASP NET je to, ze ma velkou vyhodu v tom, ze muzu napasat libovolnou aplikaci, ktera mi pote bude bez vetsich problemu chodid na webu, deskotpu, handheldu a jinych zarizeni. Pokud to je skutecne tak, neni opravdu vyhodnejsi se naucit ASP NET (resp. .NET) misto 5 programovacich jazyku? Ac jsem priznivcem Linuxu, predstava ze si v jednom prostredi vytvorim aplikaci, ktere bude komunikovat na urovni web-Windows-handheld je pomerne lakava. Vam by se nelibilo v PHPku napsat aplikaci pod Windows? Dekuji za konstruktivni nazory.
No, ja bych jen podotknul, ze se stejnym nazorem jsem zacinal pred nekolika lety, ac namisto ASP.NET tam byly jine technologie od MS. Kdyz jsem pak zjistil, ze mam sice jeden jazyk, ale ten se dost meni podle momentalniho marketinkoveho smeru MS, a ja jsem nucen ji dost casto poupravovat vzhledek k aktualnimu objektovemu a dalsimu pozadi momentalni verze, tak jsem ucinil jeden zaver. Pouzivej vyvojove prostredi MS stridme, a zejmena na rychloprojekty. Pro projekty, ktere budes chtit provozovat dlouho dej, pokud je to mozne, od technologii MS ruce pryc, nebo stravis spoustou casu neustalymi upravami kodu tak, aby vyhovovaly dalsim a dalsim verzim jazyka.
Takze ano, laka me to, ale uz jsem poucen. A tak vim, ze si to MS vybere jinde, a platit za pouzivani ASP.NET budeme v jinem smeru. Tudiz v souctu to zase tak velkou vyhodu neprinese. To je jen muj nazor, mozna zatim prilis pesimisticky a predcasny, uvidime.
Nekolik jazyku muze byt ohromna vyhoda. V kazdem jazyku napisu tu cast, ve ktere je ten dany jazyk vykonny, a pospojovani nekolika jazyku dohromady muze byt velmi efektivni.
...ze mam sice jeden jazyk, ale ten se dost meni podle momentalniho marketinkoveho smeru MS...
Pocity a dojmy stranou - který jazyk a prostředí to tedy bylo ? Objektový model ASP se za sedm let existence ASP prakticky nezměnil, ale ASP od začátku podporovalo několik skriptovacích jazyků (VBScript, JScript, později i Perl, Python a další, na MS nezávislé). Nezapomeňte, že ASP se používá téměř na jedné třetině webů internetu a více než 70% intranetů.
ASP.NET je od začátku plně objektové prostředí - je to aplikační prostředí doplněné vnitřně konzistentním balíkem snadno použitelných high-level knihoven tříd, které lze využít i v klientských a off-line aplikacích, middleware - výhody ASP.NET oproti PHP začínají zhruba tam, kde Java a končí tam, kde začínají aplikační služby pro Javu (jako jsou webové služby a Bean containery), které prostředí ASP.NET integruje do sebe. ASP.NET je prostě jiná kategorie a co se nekompatibility a linie vývoje týče, není na tom nijak hůže, než PHP, spíš lépe - vzhledem k dosud nízkému počtu verzí.
Co lze od ASP očekávat ? Vše, co od Javy a aplikačních serverů Javy dohromady - tj. nejen dynamické webové stránky, ale i aplikační služby a webové servisy a rozhraní pro apliakční cache a webové farmy, konzistentní rozhraní pro databáze (ne jako v PHP, kde je každá DB knihovna jiná ves a umí něco jiného), podpora komunikačních protokolů pro na bázi HTTP i jiných (SOAP/TCP/IP remoting) atd.
ASP.NET dále podporuje serverové ovládací prvky a komponenty, které umožňují zapouzdřit funkcionalitu do webové stránky způsobem, který zatím v PHP nemá obdobu. Prostředí ASP.NET umožňuje plně oddělit deklarativní (HTML/XML) a procedurální funkcionalitu webu a implementovat pro ni programovací model založený na třídách, metodách a událostech - tak jako je to dnes už běžné ve většině programovacích jazyků pro klientské aplikace. Pro prostředí ASP.NET existují vizuální návrhové prostředí různých výrobců (některá jako např. ASP WebMatrix jsou dokonce free) - čili něco, co pro PHP nebo dokonce Javu dosud není a zjevně hned tak jen nebude.
Kdybych měl prostředí ASP.NET k něčemu přirovnat, tak bych řekl, že je to modernější a kvalitativně vyšší generace Javy, zatím fungující především na Windows platformě (klony pro MacOS/BSD/Linux vnikjaí na Open/Shared source bázi) a pro tuto platformu optimalizované a vybavené funkcemi, které v Javě teprve vznikají a umožňující produktivitu práce malých i velkých týmů v rozsahu, který zatím žádné podobné aplikační prostředí nenabízí.
dobrý den vespolek,
mám jednoduchý dotaz:
používání spojení if(): ... endif; while(): ... endwhile; atd vs. užití obyčejných složených závorek {...}
já sám používám 1. možnost, avšak vždy, když vidím ukázky kódů někde v diskuzích tak se používají váhradně {}.
Co je rychlejší? nebo je v tom vůbec nějaký rozdíl kromě počtu znaků které je nutné napsat pro stejný výsledek? Osobně se mi zdá 1. možnost přehlednější v případě že mám víc vnořených cyklů a/nebo podmínek.
zdravim mohl by me nekdo presne a podrobne vysvetlit pouziti Interface vubec jsem nepochopil jeho vyuziti protoze si udelam interface kde mam stejne jenom metidy ktere me nic nedelaji a jsou prazdne a tudiz jsou me na nic a stejne jejich obsah musim delat ve scriptu s PHP delam uz delsi dobu a s objektama si uz taky delsi dobu hraju ale bohuzel jenom na urovni PHP a tak me asi vyuziti interface uchazi