Diskuze: Využití jazyka C

C++ C a C++ Využití jazyka C

Avatar
Jiří Šedý (jsedy7):

Ahoj! :)

Ve škole dle sdělení učitele budeme programovat v jazyce C.
Smím se zeptat jaké bude mít využití tento jazyk v případě, že se ho budu učit? Vím, že se v tom dají dělat drivery, ale co více se v tomto jazyce dá ještě dělat?

Přemýšlel jsem také nad Javou, jenomže nemůžu se učit více jazyků naráz. Pište jakékoliv vaše názory ať mám trošku přehled a mohu se nějak efektivně rozhodnout. :)

Děkuju

Odpovědět 13.9.2013 22:23
Musíš se mnoho učit, abys poznal, že málo víš...
Avatar
Kit
Redaktor
Avatar
Odpovídá na Jiří Šedý (jsedy7)
Kit:

V čistém C se dá naprogramovat cokoliv, ale třeba GUI se v něm moc dobře nedělá. Programuje se v něm imperativně. To znamená, že výsledné programy bývají rychlé a efektivní, ale ladění bývá zdlouhavé.

Java vychází z C a není problém se učit oba jazyky současně. Alespoň budeš moct porovnávat. V Javě se sice také dá programovat imperativně, ale daleko výhodnější je naučit se OOP, se kterým jde vývoj mnohem rychleji a nasekáš v programu mnohem méně chyb.

Java ti také označí spoustu chyb, u kterých C v klidu mlčí a nechá tě, aby sis natloukl kokos.

Nahoru Odpovědět  +2 13.9.2013 22:32
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Odpovídá na Jiří Šedý (jsedy7)
Michael Olšavský:

V Céčku se dá dělat cokoliv, pouze je to složitější a má horší přístup k programování, ale nejsi ničím omezený. Lepší by bylo C++, vylepšená verze Céčka s pár změnami a mnoha inovacemi včetně OOP přístupu

 
Nahoru Odpovědět  ±0 13.9.2013 22:34
Avatar
Panda38
Redaktor
Avatar
Panda38:

jsedy7 hlavní je že z C vychází v podstatě všechny současné jazyky (včetně Javy, PHP, C#), takže se nebudeš učit něco navíc, ale úplný základ a z toho pak můžeš už snadno vycházet i u jiných jazyků.

 
Nahoru Odpovědět  +1 14.9.2013 9:26
Avatar
Odpovídá na Kit
Jiří Šedý (jsedy7):

Samozřejmě mě lákají oba jazyky, jak C tak i Java. Podle toho co jsem slyšel je trošku problém v tom, že u jazyka C, tvořený program vytvořím např. pro OS Windows, ale v případě, jak budu chtít aplikaci i pro Linuxovou distribuci, tak program budu muset přepracovat. Zatímco u jazyka Java, jednou naprogramuji nějaký program, který prý pojede na více platformách naráz. Není v tomto výhodnější Java?

brisingr002:
Chvíli, dokud jsem ještě aktivně využíval Windows, tak jsem programoval v C++. Opět na nějaké začáteční úrovni. O proti jazyku C mi C++ přišlo výrazně přehlednější a vyznal jsem se v tom lépe. Jenomže, jak už jsem se dozvěděl, tak C++ se řadí mezi vyšší prog. jazyky, tudíž se s ním nedá komunikovat přímo s HW. Pokud tomu tedy dobře rozumím.

Editováno 14.9.2013 10:14
Nahoru Odpovědět 14.9.2013 10:13
Musíš se mnoho učit, abys poznal, že málo víš...
Avatar
vitamin
Člen
Avatar
Odpovídá na Jiří Šedý (jsedy7)
vitamin:

C je low level systemovy jazyk. Je velmi jednoduchy, to je jeho vyhoda aj nevyhoda. Oplati sa ho naucit aj ked v nom neplanujes programovat. C ma velmi jednoduche ABI, takze sa casto pouziva ako medzivrztva pri kombinovani roznych jazykov vyzsej urovne.

Co sa tyka c++, tak ten jazyk podporuje aj low level aj high level programovanie (a tak ako c moze priamo vkladat asm) takze aj c++ moze komunikovat priamo s HW. Povodne c++ (C with classes) sa prekladalo dokonca najprv do C (CFront).

Editováno 14.9.2013 10:36
 
Nahoru Odpovědět 14.9.2013 10:34
Avatar
Odpovídá na Jiří Šedý (jsedy7)
Michael Olšavský:

C++ podporuje veškeré techniky z Céčka, jakmile se naučíš C++, umíš i C. Jsou zde pouze malé rozdíli jako při používání referencí atd. Díky tomu se zachová jak nový styl programování, tak přímí přístup k HW. Jak píše vitamin, první C++ se překládalo do céčka. Díky tomu se i tak rychle rozšířilo. Nebyli problémy s kompatibilitou.

 
Nahoru Odpovědět 14.9.2013 10:48
Avatar
Odpovídá na Jiří Šedý (jsedy7)
Michael Olšavský:

Pokud napíšeš daný program bez použití systémových knihoven, nemusíš předělávat vůbec nic, pouze použiješ jiný kompiler.

 
Nahoru Odpovědět  +1 14.9.2013 10:49
Avatar
Kit
Redaktor
Avatar
Odpovídá na Jiří Šedý (jsedy7)
Kit:

Java je výhodnější než C i C++ dohromady. O tom snad není sporu.

Správně napsané zdrojáky v C jsou přenositelné mezi Windowsy, Unixem i Linuxem. Musí se dodržet určitá pravidla.

V C++ můžeš dělat všechno co v C, plus spoustu věcí navíc.

Nahoru Odpovědět  -1 14.9.2013 10:55
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Odpovídá na Kit
Michael Olšavský:

Záleží na tom, co chce člověk dělat a jak si co oblíbí. Třeba já dám tedy raději přednost C++ před Javou, pokud nepotřebuji GUI.

 
Nahoru Odpovědět 14.9.2013 10:58
Avatar
Kit
Redaktor
Avatar
Odpovídá na Michael Olšavský
Kit:

Dávám přednost Javě před C++, protože chci programovat objektově.

Nahoru Odpovědět  +1 14.9.2013 11:03
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na Jiří Šedý (jsedy7)
David Čápka:

Čisté C se již téměř nepoužívá a i když ti budou lidé tvrdit jak se v tom programují drivery a mikrokontrolery a další minoritní aplikace, stačí se zeptat sám sebe jestli budeš někdy něco takového dělat. Jazyků jsou stovky, v každém se něco dělá a každý je pro něco užitečný. Smysl se má ale učit jen ty, co reálně použiješ. Ve školách se C učí spíše z důvodu zaostalosti našeho školství.

Nahoru Odpovědět  +3 14.9.2013 11:28
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
Odpovídá na David Čápka
Neaktivní uživatel:

Stretol som sa aj s tým, že sa na škole najprv učí Céčko hlavne kvôli pochopeniu syntaxe a základných pravidiel programovania. Potom sa však prechádza na plnohodnotnú Javu. Myslím, že ak už využiť na školách Céčko, tak práve takto. :)

Nahoru Odpovědět 14.9.2013 12:02
Neaktivní uživatelský účet
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na Neaktivní uživatel
David Čápka:

To je jen chybný názor, který má za následek zkažení myšlení. Lidé z céčka mají problém programovat objektově a učí se principy, které již u moderních jazyků neplatí.

Nahoru Odpovědět  -1 14.9.2013 12:03
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
Kit
Redaktor
Avatar
Odpovídá na Neaktivní uživatel
Kit:

Hlavně se přechodem z C na Javu všem hodně uleví a začnou si libovat, jaký je to pokrok proti C :)

Nahoru Odpovědět 14.9.2013 12:04
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
vitamin
Člen
Avatar
vitamin:

Vsimol som si ze na devbooku sa OOP pomaly uctieva ako bozstvo :)

 
Nahoru Odpovědět  +4 14.9.2013 12:07
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na vitamin
David Čápka:

A ty snad píšeš na pergamen? Takovéhle řeči tu vedou jen ti, co OOP nerozumí.

Nahoru Odpovědět  -1 14.9.2013 12:09
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
Odpovídá na Kit
Luboš Běhounek (Satik):

"Dávám přednost Javě před C++, protože chci programovat objektově."

To má stejnou logiku jako když napíšu "Dávám přednost C# před Javou, protože chci programovat objektově."

Nahoru Odpovědět  ±0 14.9.2013 12:14
:)
Avatar
Kit
Redaktor
Avatar
Odpovídá na vitamin
Kit:

To by ses divil, kolik různých paradigmat běžně používám. Například GUI se bez OOP dělá dost těžko, ale do databází musíš jít s relační algebrou, jinak ti vznikne paskvil. Na matematické výpočty se zase lépe uplatní funkcionální paradigma, tam s objekty moc nepochodíš. Výstupní šablony jsou zase nejlepší deklarativní. Prostě na každou vrstvu se hodí něco jiného.

Nahoru Odpovědět 14.9.2013 12:18
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na Luboš Běhounek (Satik)
David Čápka:

Logiku to má už jen v tom, že C++ je pouze objektově orientované, Java je na objektech postavená kompletně.

Nahoru Odpovědět  +1 14.9.2013 12:19
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
Kit
Redaktor
Avatar
Odpovídá na Luboš Běhounek (Satik)
Kit:

Nemá, protože C# a Javu považuji za jazyky, které jsou zhruba rovnocenné. C# proti Javě nemá ohledně OOP nic navíc.

Nahoru Odpovědět  ±0 14.9.2013 12:20
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Odpovídá na Kit
Luboš Běhounek (Satik):

Co má tedy navíc Java oproti C++?

Nahoru Odpovědět  +1 14.9.2013 12:24
:)
Avatar
Odpovídá na Kit
Michael Olšavský:

Naopak bych řekl, že C++ má více možností, které lze uplatnit v OOP než Java. Co třeba přetížení operátorů,... Mnoho funkcí z C++ lze při správném použití nazývat OOP metodami.

 
Nahoru Odpovědět 14.9.2013 12:26
Avatar
Odpovídá na David Čápka
Luboš Běhounek (Satik):

To že ti C++ umožní programovat i jinak než objektově je přeci výhoda, ne nevýhoda, jak je to tu prezentováno.

Nahoru Odpovědět  +1 14.9.2013 12:29
:)
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na Luboš Běhounek (Satik)
David Čápka:

Již ti bylo řečeno, že Java je kompletně objektová. Stačí se podívat na Hello world v C++, už metoda main je neobjektová. C++ je směsice OOP a strukturovaného programování, něco jako třeba PHP. Java je návrhem mnohem dál.

Nahoru Odpovědět 14.9.2013 12:30
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
Odpovídá na David Čápka
Michael Olšavský:

Já beru tři druhy přístupu ke kódu jako výhodu. Naopak se mi nelíbí ty striktní zásady v Javě a její omezení. Sice je java plně objektová, ale základním datovým typům to akorát škodí podle mého mínění. Navíc se ztratili některé techniky, které např. v C# jsou a jsou hojně využívány.

 
Nahoru Odpovědět 14.9.2013 12:33
Avatar
Luboš Běhounek (Satik):

Rozdíl mezi C++ a Javou/C# podle mě vůbec není v přístupu k OOP (jak mi to přijde, že je tu často prezentováno), oba jazyky OOP umožňují na podobné úrovni.

Hlavní rozdíl vidím spíš v tom, že C++ je jazyk nižší úrovně - člověk se prostě víc nadře, aby napsal kód, který vykoná to samé, ale má nad vším absolutní kontrolu.

Nahoru Odpovědět  +2 14.9.2013 12:35
:)
Avatar
Kit
Redaktor
Avatar
Odpovídá na Luboš Běhounek (Satik)
Kit:

Skutečně plnohodnotnou práci s objekty. Můžeš je likvidovat i jinde než tam, kde jsi je vytvořil a nehrozí ti memory leaky. Můžeš dát objekt do returnu metody a to si v C++ bez rizika nemůžeš dovolit. Typová kontrola na vyšší úrovni, kontrola hranic polí, testy jako součást třídy, testování každé třídy bez nutnosti externího kódu,...

Nahoru Odpovědět 14.9.2013 12:36
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Kit
Redaktor
Avatar
Odpovídá na Michael Olšavský
Kit:

Přetížení operátorů je jen syntaktický cukr, který dokáže programátora pořádně poplést. Vyzkoušel jsem si přetěžování operátorů v Pythonu, který je má IMHO ještě vymakanější než C++, ale pak jsem došel k názoru, že všeho moc škodí.

Java má také přetížené operátory. Jen jich má méně.

Nahoru Odpovědět 14.9.2013 12:39
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na Michael Olšavský
David Čápka:

Když ti jazyk umožňuje psát kód různými způsoby, tak je ten jazyk špatný. Vzhledem k tomu, že moderní jazyky jsou již jen objektové (ty, co někdo používá samozřejmě) tak je vidět, co se osvědčilo a co ne. Všude je snaha o co nejvyšší restrikci, umožnit psát kód jen jedním způsobem, skrývat co nejvíce implementace a podobně. Jedině tak totiž dosáhneš kvalitních výsledků.

PS: Kolik mám mínusek, tolik lidí tu neumí objekty :)

Editováno 14.9.2013 12:43
Nahoru Odpovědět  -6 14.9.2013 12:40
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
Odpovídá na David Čápka
Luboš Běhounek (Satik):

"Ohodnotil jsi příliš mnoho komentářů za sebou. Pro zachování objektivnosti hodnocení budeš moci hodnotit až za chvíli. Zkušenější uživatelé mají nižší omezení."
Počkám si, pak to mínus dostaneš :)

Nahoru Odpovědět 14.9.2013 12:47
:)
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na Luboš Běhounek (Satik)
David Čápka:

Jen si ho dej, máš nějak vysokou auru :D

Nahoru Odpovědět 14.9.2013 12:48
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
vitamin
Člen
Avatar
Odpovídá na David Čápka
vitamin:

Minuska nemas preto ze je dakto proti OOP alebo ho neovlada, ale preto ze pises uplne hovadiny :)

 
Nahoru Odpovědět  +1 14.9.2013 12:49
Avatar
Kit
Redaktor
Avatar
Odpovídá na David Čápka
Kit:

Spíš si myslím, že ty mínusy jsi dostal od těch, kteří OOP rozumí :)

Nahoru Odpovědět 14.9.2013 12:51
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Odpovídá na David Čápka
Luboš Běhounek (Satik):

Dávám mínusy/plusy podle obsahu komentářů, ne podle nějaké aury :)

Nahoru Odpovědět 14.9.2013 12:51
:)
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na vitamin
David Čápka:

Takže tvrdíš, že je výhodné míchat v jedné aplikaci OOP a strukturované programování. Zajímavé :) Určitě je přehlednější míchat protichůdné přístupy, to je pravda, rozumíš tomu.

Nahoru Odpovědět 14.9.2013 12:53
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
Kit
Redaktor
Avatar
Odpovídá na David Čápka
Kit:

Proč do toho pleteš strukturované programování?

Nahoru Odpovědět 14.9.2013 12:55
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na Kit
David Čápka:

Jelikož se o něm bavíme. Poslední byla debata o C++. Opět se asi snažíš překroutit to, co říkám.

Nahoru Odpovědět 14.9.2013 12:56
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
Odpovídá na David Čápka
Luboš Běhounek (Satik):

Já oba postupy míchám docela často, snažím se brát z každého to co je pro danou chvíli nejlepší :)

Nahoru Odpovědět 14.9.2013 12:58
:)
Avatar
Kit
Redaktor
Avatar
Odpovídá na David Čápka
Kit:

Jakmile použiješ if, while nebo switch, programuješ strukturovaně.

Nahoru Odpovědět 14.9.2013 12:59
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na Kit
David Čápka:

Ano, proto je také příliš nepoužívám.

Nahoru Odpovědět 14.9.2013 13:00
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
Kit
Redaktor
Avatar
Odpovídá na David Čápka
Kit:

Jenže jsou tady ještě další paradigmata, která se v Javě či C# běžně používají.

Nahoru Odpovědět 14.9.2013 13:02
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
David Čápka
Tým ITnetwork
Avatar
David Čápka:

Moderní jazyky jsou prostě čistě v OOP a nemíchají do toho zastaralé přístupy. Můžeme tu filosofovat o tom, co si teď lze představit pod strukturovaným programováním, já jsem tento termín použil ve spojení s C++, kde lze psát plně bez objektů, což je špatně. Jazyk nesmí míchat protichůdné a možná i obecně různé přístupy, které vedou k dosažení stejného výsledku odlišnou filozofií (nezapoměňte tu větu rozebrat). Jako vždy se to tu zvrhlo ve slovíčkaření, takže jdu dělat něco konstruktivního.

Editováno 14.9.2013 13:05
Nahoru Odpovědět  -3 14.9.2013 13:04
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
vitamin
Člen
Avatar
Odpovídá na David Čápka
vitamin:

[quote]
Moderní jazyky jsou prostě čistě v OOP a nemíchají do toho zastaralé přístupy
[/quote]
Ako si na to prisiel?

[quote]
Jazyk nesmí míchat protichůdné a možná i obecně různé přístupy, které vedou k dosažení stejného výsledku odlišnou filozofií
[/quote]
Preco?

 
Nahoru Odpovědět 14.9.2013 13:11
Avatar
Kit
Redaktor
Avatar
Odpovídá na David Čápka
Kit:

To mi zní, jako kdybys znal jen strukturované a objektově orientované programování. Jako kdyby nic jiného neexistovalo. Co třeba funkcionální nebo logické programování? Zkusil jsi to někdy?

Nahoru Odpovědět 14.9.2013 13:18
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na vitamin
David Čápka:

Přál bych ti pracovat v PHPčku s kódem 3. strany, který psal někdo tak, jak mu to přišlo pod ruku a jak to PHP umožňuje. Hned bys to pochopil :) Třeba na to časem přijdeš sám.

Nahoru Odpovědět 14.9.2013 13:19
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
Nahoru Odpovědět  +2 14.9.2013 13:21
:)
Avatar
Odpovídá na David Čápka
Michal Žůrek (misaz):

špatné věci se lidem nepřejí...

Nahoru Odpovědět  +1 14.9.2013 13:21
Nesnáším {}, proto se jim vyhýbám.
Avatar
Kit
Redaktor
Avatar
Odpovídá na David Čápka
Kit:

A pak se divíš, že nesnáším frameworky. Stačí, když no nějakého nakouknu a hned vidím, že ho psalo nějaké programátorské prase.

Nahoru Odpovědět 14.9.2013 13:23
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na Kit
David Čápka:

Tak ono toho existuje hodně :) V praxi se však používá výhradně OOP a deklarativní SQL. Bude to tím, že jsou nejlepší. Až budou další paradigmata na takové úrovni, že se začnou vážně používat a to nejen pro nějaké specifické účely, tak se o ně teprve začnu zajímat. Microsoft vyvíjí svůj F#, třeba z toho něco bude.

Nahoru Odpovědět 14.9.2013 13:25
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na Kit
David Čápka:

To máme stejný názor. Problém je, že programátorské prase = každý druhý programátor. Jsou to z většiny bušiči, kterým je jedno jak to bude vypadat a jsou někdy i placení od počtu řádků. Proto by ten jazyk měl mít nějaké restrikce. EDIT: A co největší základní knihovnu objektů pro běžné situace. Se stavebnicí se toho tolik zkazit nedá.

Editováno 14.9.2013 13:30
Nahoru Odpovědět 14.9.2013 13:29
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
Kit
Redaktor
Avatar
Odpovídá na David Čápka
Kit:

Například šablony pro Smarty jsou imperativní a kvůli tomu musí být rozděleny do více částí (hlavička, střed, patička,...). Když tu šablonu uděláš deklarativně nebo objektově, tak ji v klidu strčíš do jednoho souboru a vypadá mnohem přehledněji a udržovatelněji.

Nahoru Odpovědět 14.9.2013 13:30
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Odpovídá na David Čápka
Luboš Běhounek (Satik):

Uh, placen podle počtu řádků? S tím jsem se ještě nepotkal :D

Nahoru Odpovědět 14.9.2013 14:02
:)
Avatar
Kit
Redaktor
Avatar
Odpovídá na Luboš Běhounek (Satik)
Kit:

Hmm, to bych splakal nad výdělkem nebo bych si musel účtovat aspoň 100 Kč/řádek :)

Editováno 14.9.2013 14:06
Nahoru Odpovědět  +1 14.9.2013 14:06
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Kit
Redaktor
Avatar
Odpovídá na David Čápka
Kit:

Kupodivu mi základní knihovna objektů připadá OK. Možná proto, že ty třídy používají rozhraní, které je pro mne akceptovatelné, mohu si je rozšířit a nemusím se přitom dívat do zdrojového kódu, jak to ten autor myslel.

Nahoru Odpovědět 14.9.2013 14:09
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Lukáš Hruda (Luckin):

Luboš Běhounek (Satik), Kit

Osobně hlavní rozdíl v OOP přístupu mezi C++ a moderními jazyky vidím v tom, že C++ bere objekty jako klasické proměnné a umožňuje programátorovy s nimi tak i zacházet. Zatímco Java nebo C# s objekty zachází jinak než s primitivními typy (systém referencí). Co se týče vracení objektů, tak pokud v daném případě nijak zásadně nezáleží na rychlosti, pak není problém vrátit objekt pomocí dočasné proměnné, která se zkopíruje. Jinak můžeš využít třeba smart pointery.

 
Nahoru Odpovědět  +1 14.9.2013 15:12
Avatar
Kit
Redaktor
Avatar
Odpovídá na Lukáš Hruda (Luckin)
Kit:

Ty dočasné proměnné jsou při návratu problém, protože ji musíš ve volající metodě mít dostupnou, což je zátěž navíc. Pokud neznáš její typ, je to problém. Pokud návratovou hodnotu vložíš přímo jako parametr do další metody, tak to rozhraní musí znát až ta volaná metoda.

Messenger se prostě bez návratu returnem dělá blbě.

Nahoru Odpovědět 14.9.2013 15:28
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Panda38
Redaktor
Avatar
Odpovídá na Luboš Běhounek (Satik)
Panda38:

Neprogramátoři (např. zaměstnavatelé) mají počet řádků často jaké jediné měřítko které jsou schopni posoudit. V dobách SAPI se měřila pravítkem výška stohu listingů programu.

 
Nahoru Odpovědět 15.9.2013 8:57
Avatar
Panda38
Redaktor
Avatar
Odpovídá na Lukáš Hruda (Luckin)
Panda38:

C++ může pracovat s objekty úplně stejně jako jiné jazyky (jako např. Java). U sdílených objektů (obrázky, texty) se používá také počítadlo referencí na objekt - viz např. CString z ATL. O snížení počítadla a zrušení objektu se stará destruktor lokálního objektu. Lze tak objekt vytvořit v nějaké funkci, vrátit jej v návratové hodnotě a předat jiným funkcím či objektům, aniž je třeba se starat o jeho životnost. Dobrým příkladem jsou COM objekty.

Ve skutečnosti mezi objektovým a strukturovaným programováním není až tak propastný rozdíl. Objekty jsou jen běžné struktury, jen se zjednodušil zápis a funkcím (metodám) se předává skrytě ukazatel na objekty (=struktury). Spíš že OOP nutí programátora k přehlednějšímu přístupu k programu a zjednodušuje tak práci. Dá se programovat čistě i v assembleru a naopak prasácky ve vysokém jazyce.

Objektově programovat lze i v základním C, jen musí programátor zajišťovat to, co jinak dělá OOP skrytě - předávat funkcím ukazatel na struktury (objekty), volat konstruktory a destruktory. Lze takto používat i referenční čítače počtu vlastníků objektů nebo virtuální funkce. V názvech metod pro přehlednost namísto teček uvádět např. podtržítka: Picture_Flip. Při dědění struktury se musí bázová struktura explicitně vložit (z nějakého důvodu nebylo v C pamatováno na odvozování struktur). Takto lze programovat objektově např. u jednočipů.

Na druhou stranu lze používat OOP (např. C++) i u nízkoúrovňovějších záležitostí jako např. programování kernelu systémů, není nutné používat C. Jen je nutné před prvním použitím objektů inicializovat správce paměti a explicitně zavolat konstruktor globálních objektů.

 
Nahoru Odpovědět  +1 15.9.2013 9:37
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 59 zpráv z 59.