Návrhové vzory v jazyce C?

nm

Návrhové vzory v jazyce C?
« kdy: 31. 05. 2018, 18:00:25 »
Zdravím.

Ve škole jsme se učili návrhové vzory pro objektové programování v jazyce JAVA. Jazyk C (tím myslím čisté C, nikoliv C++) není objektový jazyk. Domnívám se ale, že existují jisté postupy programování v C. A tak jsem se chtěl zeptat, jestli existuje něco, jako návrhové vzory (nebo postupy) v jazyce C?


uuuuuuuu

Re:Návrhové vzory v jazyce C?
« Odpověď #1 kdy: 31. 05. 2018, 18:07:51 »
V linuxovem kernelu se pouzivaji obcas struktury s vlastnimi ukazateli na funkce, takze jista forma objektu zde funguje.
Musi byt vsude objekty, ma to smysl? Kouknete na Go.

Re:Návrhové vzory v jazyce C?
« Odpověď #2 kdy: 31. 05. 2018, 18:22:37 »
V linuxovem kernelu se pouzivaji obcas struktury s vlastnimi ukazateli na funkce, takze jista forma objektu zde funguje.
Musi byt vsude objekty, ma to smysl? Kouknete na Go.

Nebo na Haskell... :D

------------------------------------

Ale mám dojem, že dotaz mířil trochu jinam. Asi bych se podíval, jak se co dělá v POSIX nebo v Linuxovém kernelu. :)

uuuuuuuu

Re:Návrhové vzory v jazyce C?
« Odpověď #3 kdy: 31. 05. 2018, 18:32:55 »
Ja jsem si uz delsi dobu rikal, ze C je skvele, jan mit
Pro nej knihovnu jako je boost pro C++11, pak by i C bylo
Paradni k pouziti pro bezne lidi.
Podle me je dobre delat v C se zkusenosti z C++11 a Go.

Kit

Re:Návrhové vzory v jazyce C?
« Odpověď #4 kdy: 31. 05. 2018, 18:40:25 »
Návrhové vzory se dají použít i v C a některé z nich se používají docela běžně.


Franta <xkucf03/>

Re:Návrhové vzory v jazyce C?
« Odpověď #5 kdy: 31. 05. 2018, 21:04:03 »
Pojem „návrhové vzory“ má spousta lidí spojený s Javou a obecně objektovými jazyky a z celkem nesmyslných důvodů je nesnáší a nechtějí tento pojem používat, i když by se to v zásadě návrhovým vzorem nazvat dalo, i když tam třeba ani nejsou objekty.

Pro jazyky jako C hledej tedy spíš „idomy“ – jakési zažité postupy a obvyklé řešení určitých situací. V rychlosti jsem teď našel:
http://dept-info.labri.fr/~strandh/Teaching/MTP/Common/Strandh-Tutorial/idioms.html
http://www.adamtornhill.com/Idiomatic_expressions_in_C.pdf
Pro C++ potom:
https://en.wikibooks.org/wiki/More_C%2B%2B_Idioms

borekz

  • ****
  • 493
    • Zobrazit profil
    • E-mail
Re:Návrhové vzory v jazyce C?
« Odpověď #6 kdy: 31. 05. 2018, 21:23:09 »
jan mit Pro nej knihovnu jako je boost pro C++11, pak by i C bylo Paradni k pouziti pro bezne lidi.
Např. GLib ?

Neviditelný

Re:Návrhové vzory v jazyce C?
« Odpověď #7 kdy: 31. 05. 2018, 22:05:57 »
Pojem „návrhové vzory“ má spousta lidí spojený s Javou a obecně objektovými jazyky a z celkem nesmyslných důvodů je nesnáší a nechtějí tento pojem používat, i když by se to v zásadě návrhovým vzorem nazvat dalo, i když tam třeba ani nejsou objekty.

Pro jazyky jako C hledej tedy spíš „idomy“ – jakési zažité postupy a obvyklé řešení určitých situací. V rychlosti jsem teď našel:
http://dept-info.labri.fr/~strandh/Teaching/MTP/Common/Strandh-Tutorial/idioms.html
http://www.adamtornhill.com/Idiomatic_expressions_in_C.pdf
Pro C++ potom:
https://en.wikibooks.org/wiki/More_C%2B%2B_Idioms

Nevím, zda se tazatel ptal právě na tohle. Idiomatické konstrukce a způsoby zápisu má každý jazyk a s návrhovými vzory (MVC, MVP, Observer, Producent-Konzument, ...) nijak nesouvisí. Mimochodem to setjmp(), longjmp() jako idiomatický způsob error handlingu v C zmíněný v tom prvním dokumentu je teda fakt nálož.

Kit to IMHO řekl dobře, návrhové vzory nejsou obecně omezené jazykem, lišit se může maximálně obtížnost implementace.

Franta <xkucf03/>

Re:Návrhové vzory v jazyce C?
« Odpověď #8 kdy: 31. 05. 2018, 22:52:07 »
Pojem „návrhové vzory“ má spousta lidí spojený s Javou a obecně objektovými jazyky a z celkem nesmyslných důvodů je nesnáší a nechtějí tento pojem používat, i když by se to v zásadě návrhovým vzorem nazvat dalo, i když tam třeba ani nejsou objekty.

Pro jazyky jako C hledej tedy spíš „idomy“ – jakési zažité postupy a obvyklé řešení určitých situací. V rychlosti jsem teď našel:
http://dept-info.labri.fr/~strandh/Teaching/MTP/Common/Strandh-Tutorial/idioms.html
http://www.adamtornhill.com/Idiomatic_expressions_in_C.pdf
Pro C++ potom:
https://en.wikibooks.org/wiki/More_C%2B%2B_Idioms

Nevím, zda se tazatel ptal právě na tohle. Idiomatické konstrukce a způsoby zápisu má každý jazyk a s návrhovými vzory (MVC, MVP, Observer, Producent-Konzument, ...) nijak nesouvisí. Mimochodem to setjmp(), longjmp() jako idiomatický způsob error handlingu v C zmíněný v tom prvním dokumentu je teda fakt nálož.

Kit to IMHO řekl dobře, návrhové vzory nejsou obecně omezené jazykem, lišit se může maximálně obtížnost implementace.

K tomu C jsem toho bohužel moc nenašel – sám bych taky uvítal nějaké dobré zdroje. Ale to, co je na těch Wikibooks k C++, se podle mého těm návrhovým vzorům celkem blíží – jsou tam i komplexnější věci, ne jen jak „procházet for cyklus od nuly“.

MD

Re:Návrhové vzory v jazyce C?
« Odpověď #9 kdy: 31. 05. 2018, 23:54:44 »
Citace
V linuxovem kernelu se pouzivaji obcas struktury s vlastnimi ukazateli na funkce, takze jista forma objektu zde funguje.
Ve Windows se též jedná o dosti oblíbený způsob řešení problémů (ChainOfResponsibility, Observer, nějaké ty Adaptery by se ašly také).

Citace
C

Jak již bylo řečeno, návrhové vzory nejsou omezeny na jazyk. Z jejich studia byste si neměl odnést, jak přesně je v určitém jazyce implementovat, ale jaká jsou za nimi myšlenky ("mám problém P, na který lze použít vzor X, který jej řeší cca takto").

Jistě, v C nemáš objekty, ale můžeš si je do potřebné míry implementovat. Třídu můžeš reprezentovat strukturou, její metody funkcemi, které jako parametr berou adresu té struktury. Dědičnost znamená, že struktura potomka v sobě obsahuje strukturu rodiče. Polymorfismus lze implementovat prostřednictvím pointerů na funkce (callbacky).

nm

Re:Návrhové vzory v jazyce C?
« Odpověď #10 kdy: 01. 06. 2018, 17:40:51 »
Chápu to tak, že v C se dá programovat mnoha způsoby, které zahrnují jak "idiomy", tak i nějaké C-čkové návrhové vzory. Takže by mě spíše zajímalo toto...

Mám problém P, který bych chtěl řešit programem v C. Zejména určitě už někdo podobný problém řešil a možná je řešení tak známé, že se může zařadit mezi "idiomy" případné "návrhové vzory". Takže mi zbývá jen ta, už vymyšlená řešení, na můj problém P, najít a buďto je použít, nebo, když se nehodí, vymyslet něco svého.

jotr

Re:Návrhové vzory v jazyce C?
« Odpověď #11 kdy: 01. 06. 2018, 18:18:54 »
jak byste to rozdělili a jak vymezili tyto pojmy

Například jako návrhový vzor vidím něco, co není primo vázané na jazyk, ale může se to v nějakém jazyce lépe využít, když to umí. Nějakou techniku, která se hodí na určitou část funkcionality aplikacy (adaptér na čtení konfiguráků v různých formátech)

MVC bych jako návrhový vzor bych nepokládal, je to něco "nad tím", pokud si vyberu MVC, tak to znamená, že podle tohoto duchu budu dělat celou  aplikaci

idiomy neznám

pak konrétní "střípky" - programové techniky - continuation, jumps, fluent


kam zařadit  následující pojmy ?
(a teď jsem vybral opravdu paletu, které spolu nijak nesouvisí) Dependency injection, MVC, continuations, fibers/ generické typy, monkeypatching, iterators/iterable/enumerable, convency over configuration,  Reflection ,fluent interface

Návrhové vzory
postupy programování
idiomy

I/O

Re:Návrhové vzory v jazyce C?
« Odpověď #12 kdy: 01. 06. 2018, 20:02:40 »
Řekl bych, že problematika návrhových vzorů je spojena hlavně se staticky typovanými objektově orientovanými jazyky, kde se pomocí nich maskují neřešitelné rozpory mezi statickou typovou kontrolou a velmi pozdní vazbou vyžadovanou OOP. Takže v klasických strukturovaných jazycích to prakticky význam nemá a nestuduje se to.

L.

Re:Návrhové vzory v jazyce C?
« Odpověď #13 kdy: 01. 06. 2018, 21:45:52 »
Tak to bys řekl špatně. Mimochodem, ve staticky typovaných objektových jazycích dělám už hooodně dlouho a nejakých závažných neřešitelných rozporů jsem si nevšiml.

balki

Re:Návrhové vzory v jazyce C?
« Odpověď #14 kdy: 01. 06. 2018, 21:56:17 »
Pojem „návrhové vzory“ má spousta lidí spojený s Javou a obecně objektovými jazyky a z celkem nesmyslných důvodů je nesnáší a nechtějí tento pojem používat, i když by se to v zásadě návrhovým vzorem nazvat dalo, i když tam třeba ani nejsou objekty.

Pro jazyky jako C hledej tedy spíš „idomy“ – jakési zažité postupy a obvyklé řešení určitých situací. V rychlosti jsem teď našel:
http://dept-info.labri.fr/~strandh/Teaching/MTP/Common/Strandh-Tutorial/idioms.html
http://www.adamtornhill.com/Idiomatic_expressions_in_C.pdf
Pro C++ potom:
https://en.wikibooks.org/wiki/More_C%2B%2B_Idioms

Vzor by mal byt definovany a definovatelny pomocou "pattern language", ktory vymyslel Christopher Alexander vo svojej knihe "Timeless way of building" a tiez potvrdeny niekolkymi nezavislymi autoritami ako dostatocne univerzalny.  Vzorom sa dnes zvykne oznacovat vselico, preto ta averzia. A tiez ludia k nim zvyknu pristupovat dost nekriticky a bez rozumu, vzdy prevratim oci ked vidim zrudu typu "mediatorfactorysingletonholder".  Vzory sa postupne stavaju idiomami jazyka, stale tam su, ale su skryte.

Neviem, co som tym chcel povedat, ale ked som to uz napisal, tak to poslem :) Asi tolko, ze vzory su dobra vec, ale treba pouzivat rozum, nie slepo opisovat implementacie z kniziek, skor poznat principy.