mirec:VB nic moc, souhlasím. Ale takovej pascal na jednoduché algoritmy je imho vhodnější jazyk - už jen porovnej hello world. OOP má smysl až u větších projektů. Jenže člověk, kterej sotva zvládne napsat setřídění pole může psát větší projekt?
Navíc v javě je v hello worldu spousta balastu, která se poměrně špatně začátečníkovi vysvětluje. A když se nevysvětlí, tak se učí největšímu programátorskýmu nešvaru - používat něco, aniž by vlastně věděl co a proč.
Ultimator:Na C++ je to zvláštního, že je velmi blízko hardware. Takže se na něm velmi dobře učí jak dělat věci efektivně. Není výjimkou, že vidím v kódu např
$a=explode(',',$vstup);
$a=$a[1];
Takovoudle prasečinu člověk, co umí C++ nenapíše, protože tomu je jasné, o kolik je to více práce než
if($false===($pos=strpos(',',$vstup)))
$a=$vstup;
else
$a=substr($vstup,0,$pos-1);
hurda: ano, protože pokud se někdo naučí C/C+, tak se naučí
a) psát pořádně a neprasit
b) psát efektivní kód
pokud se to totiž nenaučí, tak C/C++ neumí!
David Strejc:jde o to jak která. Samozřejmě naprogramovat střeva velký apliakce typu twitter tak, aby to opravdu vydrželo zátěž je hezkej kus práce. Na druhou stranu na to člověku jen znalost php nestačí - je třeba pořádně rozumět databázím, race condition, optimalizacím...,.... Ale právě znalost tědle věcí se nejlépe získá tím, že se člověk nebude omezovat na PHP a nastudování jedné knihovny.
Na zbytek hezky odpověděl Semestralky.
novacisko:
Nová verze C++ bude velkým krokem kupředu. Ale zatím tady není a i když nějaké kompilátory některé věci používají, není to C++ dle normy. Já se bavím o C++ dle poslední platného standardu.
Ale jo, jde, protože můžete deklarovat třídu uvnitř funkce a v ní můžete deklarovat funkci. Jediný problém je, že tuhle funkci nelze nacpat jako parametr šablony, ale jinak se s ní dá pracovat jako s funkcí.
Což je vyloženě čisté, čitelné a pohodlné řešení...
Tak mu je tam vyrobte. Co řešíte....
Proto tvrdím, že C++ se na objektové psaní hodí o něco méně. Protože musím ručně vyrábět to, co jinde je automaticky. Navíc při každé změně předka musím měnit i potomka - což je opět proti OOP paradigmatu.
ale houby, diamantovou dědičnost nemusíte přece u interaců řešit
Musím v příkladu, který jsem dal. Respektive jinak oproti jiným jazykům buď musím psát zbytečný balast a navíc je kód hůře udržovatelný (změna na jednom místě vynucuje změnu na x dalších), nebo musím užívat v hierarchii interfaců virtuální dědičnosti a utrpí tím výkon.
Interface poděděný přes A může mít jiný význam, než interface přímo, přestože je to stejný interface.... Já třeba občas používám i to, že jde o dva různé interface a v různých situacích se ten objekt chová jako dva různé objekty, podle toho, zkrs co se na něj dívám.
Podědění interfaců znamená rozšíření funkčnosti. Tzn. pokud objekt je např. seřaditelný a přidám interface seřaďitelný dle kritéria, nemělo by to na seřaditelnosti nic měnit. Jinak je to porušením zásad OOP.
Pokud se objekt chová jinak při volání přes básový interface než přes poděděný interface, tak jde imho s největší pravděpodobností o chybu návrhu: buďto jde opravdu o dva "reálné" objekty implementované jedním programátorským objektem (správné řešení by bylo tedy rozdělit ho na dva a implementovat správné interfacy), nebo naopak poděděný interface nemá být potomkem bázového interfacu (protože ho nespecializuje, ale dělá trochu něco jiného).
Ono to i naznačuje to co píšete - pokud se něco chová jako dva objekty, tak to s největší pravděpodobností dva objekty jsou :-)
Pokud nesouhlasíte s tím, že takový design je chyba v návrhu, dejte sem nějaký reálný příklad, kdy se to takto chová a je to dle vás správně. Nebo možná radši do samostatného threadu, jsme dosti OT.
Prostě důvodem je zjednodušení implementace.
Samozřejmě. Stejně jako u C++ je zjednodušení implementace to, že člověk musí rozlišovat mezi normální a virtuální dědičností. Pokud vícenásobnou dědičnost omezím na interfacy, tak se každá dědičnost chová jako virtuální. Pokud se neomezím, tak musím řešit virtualitu dědičnosti a navíc u hlubších virtuálně poděděných struktur narůstá overhead z virtuální dědičnosti.
Jsou to dva přístupy a vzhledem k tomu, že u všech nových jazyků zvolili cestu interfaců, troufám si tvrdit, že to je proto, že se s pomocí interfaců píše lépe než s pomocí vícenásobné dědičnosti. Byť mi někdy schází. Samozřejmě, nejradši bych jazyk co umí obé, ale kdybych si měl vybrat tak souhlasím s dnešním trendem a říkám: interfacy.
Je možné, že na některý konkrétní projekt by byla vícenásobná dědičnost vhodnější - jen myslím, že projektů, kde se spíš užije snadná definice interfaců je více.
C++ je úžasně flexibilní jazyk a dají se v něm dělat kouzla a chápu, že ho máte rád. Kdybych pracoval na projektech, kde se dají tydle vlastnosti využít, tak bych si to také užíval (např. šablonový systém C++ asi nemá obdoby).
Ale to nic nemění na tom, že díky absenci některých věcí (byť je můžu díky flexibilitě jazyka více či méně emulovat) se v něm nepíše objektově tak jednoduše a hezky jako např. v Javě. Ale dovede zas jiný věci, o tom žádná... :-)