Registrace nového uživatele     Návod     Kluby     Archív  Lopuchu     Lopuch.cz  

Což takhle
dát si Lopuch?

Lopuch.cz

Jméno:
Heslo:
Podpora LCD:
 
Archiv klubu C, C++ [ŽP: neomezená] (kategorie Programování) moderuje Šéf Lopuchu.

Články

Jak bezpečně ukončit vlákno z DllMain
FastAllocPool - urychlení častých alokací a dealokací
Akce a zpráva jako objekt
Tuply v C++
Efektivní alokátor malých objektů a tady druhý a třetí díl
Šablony: Být vládce kvalifikátorů
Vracíme z funkce objekty
Základy komunikace mezi procesy (ve Windows)
Multiple Interface a Instance Factory
Multithreading v C++ (ve Win32)
  Nastavení klubu     Nastavení práv     Homepage     Anketa     Přítomní     Oblíbené     Lopuch     Kategorie  
autor: 
text: 
vyplnit a 
Help
   
[ 280 ] <Novější  <<<Nejnovější  Nejstarší>>>  Starší>  
bredy 23.12.2005 08:53  396
huhPřečti si to znovu. Já to pochopil, je to přesně tak jak píšeš. Jen jsem kritizoval nějaké názory (co jsem zaslechl někde jinde), že v "pravém OOP" se "doopravdy" zasílají zprávy - což je opět blud, protože OOP nic o tom, jakým způsobem jsou zprávy zasílány nic neříka.
king King Born to be king - ... 23.12.2005 02:44  395
huh: to neni pretypovani, to je vytvoreni noveho objektu coz je IMHO dost podstatny rozdil...

bredy: me slo o to, ze v C++ by se muselo nadefinovat string jako potomek mnoziny, aby to slo pretypovat, coz ve smalltalku nemusim, muzu pretypovat na neco mimo strom dedicnosti... polymorfismus neni omezeny jen na sub-/super- typy...

all: ano, mate pravdu, placl jsem naprostou hloupost, kdyz jsem napsal, ze C++ neni OO jazyk a omlouvam se, spravnejsi tvrzeni je, ze C++ neni PLNE objektovy jazyk, je to jen jazyk s rysy OO
huh huh 22.12.2005 21:24  394
Bredy [385]: nechápu, kde bereš odvahu nadávat ostatním, když si sám zjevně nepochopil, že "posílání zpráv" je obecný název mechanismu komunikace objektů a neexistuje objektový jazyk, který by ho nějakým způsobem neimplementoval, typicky jako volání stejnojmené metody.
huh huh 22.12.2005 21:17  393
King [390]: tak to muzu v C++ samozrejme taky:
string c("AABAACACBD");
set<char> s(c.begin(), c.end());
cout << s.size() << endl;
bredy 22.12.2005 17:59  392
KingNo jsi lamer, a nic jsi nepochopil. A tím příkladem to navíc hezky dokládáš.

ST jsem viděl z rychlíku. Ale něco mi utkvělo v paměti a to že ve ST je všechno objekt. Dokonce i číslo a řetězec je objekt, stejně tak množina (set). Dále jsou definované různé vztahy mezi objekty, mimojiné i to, že existuje vztah mezi objektem "řetězec" a objektem "množina" (set). Proto jsi schopen provést převod řetězce na množinu.

V čistém C++ nemáš nic definované. Ale to nijak nedegraduje OOP. Můžeš si přece nadefinovat. Nadefinuješ si řetězec, nadefinuješ si množinu a nadefinuješ si konverzi z řetězce na množinu. To že vlastni konverze proběhne procedurálně - to mimochodem proběhne i ve ST. OOP implementaci neřeší. Pouze pojmenovává stavebni prvky (objekty) a řeší vztahy mezi nimi (zprávy nebo metody, konverze a spoustu dalších). Takže jednou jedinkrát musím implementovat konverzi řetězce na množinu, ale právě vlastnost OOP - "re-use", mi umožňuje od toho okamžiku používat tuto konverzi a na implementaci procedurou s klidem zapomenout.

Výbava programovacího jazyka nemá vliv na hodnocení jak moc je nebo není jazyk objektový. Jediným efektem je to, že některé základní operace již nemusíš programovat.

Abych byl korektní, C++ některé věci z OOP skutečně nemá, nebo má řešeno nějak podivně. Nejznámnější je asi polymorfizmus, který je v C++ nutné speciálně oznamovat pomocí klíčových slov "virtual" (virtuální funkce, virtuální třídy) - toto lépe řeší Java. Také úplně chybí třídní proměnné (proměnná, jenž není vztažená na instanci, ale typ třídy - v C++ jsou jen statické proměnné, které jsou vázány k typu, ale nejde i nich uplatnit polymorfizmus). OOP dále umožňuje měnit třídu během programu, takže všechny instance pak reflektují změnu. v C++ jsou třídy pevně "zadrátované" v kódu, program v C++ už musí dopředu předpokládat všechny varianty změn třídy a řešit toto děděním.

C++ je do určité míry plnohodnotný objektový jazyk, pokud nepotřebujeme výše uvedené "finesy". Zároveň je to kompromis mezi OOP a implementací kde je kladen vysoký nárok na výkon (viz právě třeba ony virtuální metody, kde jsou výkonové nároky vyšší)
mpts mpts Je to jinak, ba přesně naopak! 22.12.2005 17:51  391
King: C++ si -- na rozdíl od některých jiných jazyků -- objektový přístup nevynucuje; mizerný programátor může v C++ psát zcela neobjektově, chce-li nebo neví-li ani, že dělá chybu. Avšak C++ všechny ty tři základní i ten čtvrtý Bredym dodaný znak plně umožňuje. To znamená, že tvrdit, že C++ není OO jazyk, je pitomost. C++ je OO jazykem v té míře, v jaké programátor umí objektově programovat.
king King Born to be king - ... 22.12.2005 16:01  390
385C++ pouziva (umoznuje pouzivat) jen nektere OOP techniky - v zadnem pripade to neni OO jazyk - jen proste ma objekty ;)
viz treba znamy priklad jak spoctes vsechny ruzne znaky v retezci?

ve ST pretypujes na set a zjistis si velikost, v C++ se musis uchylit k cyklu a proceduralnimu pristupu

ja vim, ze jsem asi lamer a nic jsem nepochopil (notabene kdyz nemam rad C++ a taky si myslim, ze je to paskvil), ale nemuzu si pomoct... ;)
mpts mpts Je to jinak, ba přesně naopak! 22.12.2005 15:38  389
Většinou se s Bredym moc neshodnu, ale s 385 souhlasím naprostě.
johny_g Johny_G - Relaxační terapie pro lopušáky ZDARMA! 22.12.2005 13:51  387
Taky nějak nemůžu .NET sehnat :-(. Ty Embedded Visual Tools v kompu mám, ale nechápu Visual C++ interface. Asi si budu muset najít nějakej superprimitivní tutorial na Visual C++ na komp. Je to se mnou těžký. Céčko jsem kdysi zavrhl ve prospěch Delphi, ovšem co se céčka týče, dělal jsem jenom konzolové aplikace (resp. dosovské), a strukturu toho vývojového prostředí pro objektové programování prostě nechápu :-(.
bredy 22.12.2005 13:26  386
Johny_GJe to v celku jedno. C# je na půl cesty mezi Javou a C++. Když se naučíš C++ a seženeš překladač na WM. tak jsi na tom stejně nebo možná ještě mnohem lépe, než když budeš programovat pro .NET C#. V zásadě jen v C# máš jeden API layer navíc, takže záleží, jak moc ti to vadí.

zatím je C# jen "only" pro .NET.

C++ existuje jako pro .NET tak i jako native varianta (píšeš přímo executable).

Co se podpory na různých platformách týče, myslím že u C# jsi (aspoň pro zatím) odkázán jen na Microsoft. Jaký další vývoj v tomto směru microsoft plánuje ovšem není známo.
bredy 22.12.2005 13:22  385
AL3XJasně. Jenom nevím, jestli dodržíme onu jednoduchost.
Pokud Basic je co do složitosti koloběžka, Pascal motorka a C/C++ automobil, pak SmallTalk je raketa.

Ještě k poznámce objektovosti. Objektové prostředí obecně není závislé na použitém jazyku. Jak jistě víte, existuje univerzální jazyk UML, kterým lze "programovat" objektově - dávam to do uvozovek, protože jsem ještě v životě neviděl program napsaný v UML. Vždycky je výsledkem nějaká varianta jiného jazyka, která se teprve musí naprogamovat (UML je vlastně jen jazyk pro lidi, ne pro počítače).

V zásadě je tedy jedno, jaká syntaxe se v objektovém prostředí použije. Důležité je, aby se při programování používaly objekty a základem celého programu byly klasické a notorické zásady.
1. Zapouzdření
2. Dědičnost
3. Polymorfizmus
4. A já dodávám, hlavně tedy dbát na "RE-USE". V okamžiku, kdy mohu ony černé skřínky "objekty" používat libovolně v různých projektech, mohu říct, že programuju objektově.

A až vám někdo bude tvrdit, že správně objektový programovací jazyk má Garbage collector, property nebo dokonce že si objekty mají zasílat zprávy, tak je to lamer, a nepochopil, co to OOP vlastně znamená.
johny_g Johny_G - Relaxační terapie pro lopušáky ZDARMA! 22.12.2005 13:17  384
Kruci to jsme se zamotali :-). Když pozapomeneme předpojatost, myslíte, že bych měl zkusit C#.NET? Nějaká omezenost mě nijak netrápí, většinu problémů obcházím cestami jednoduchých příkazů. Ve WM 2003SE je už integrovaný CF .NET framework - dá se psát přímo pro něj?
al3x 22.12.2005 12:46  383
Naroubovani objektu na neobjektovy jazyk. Fuj...

Bredy [382]: Tak programovat neco pro WM ve SmallTalku, to zni dobre :)
bredy 22.12.2005 11:12  382
AL3XMluvíš o SmallTalku?
kdokoliv Kdokoliv Nevidím důvod dělat cokoliv bezdůvodně. - http://kkl2401.wz.cz 22.12.2005 11:11  381
To ovsem neznamena, ze to nemuze byt paskvil. :-)

[ 280 ] <Novější  <<<Nejnovější  Nejstarší>>>  Starší>  

(c) 2001-2011 Lopuch.cz   
Kontakt