Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Organizovanje C++ programa kao u Delphi-ju

[es] :: C/C++ programiranje :: Organizovanje C++ programa kao u Delphi-ju

Strane: 1 2

[ Pregleda: 5010 | Odgovora: 26 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Predrag Damnjanovic
Predrag Damnjanovic
Nis, Srbija

Član broj: 141
Poruke: 1305
*.dial.InfoSky.Net

Sajt: www.mycity.rs


+1 Profil

icon Organizovanje C++ programa kao u Delphi-ju29.07.2003. u 17:13 - pre 230 meseci
Moram da pokrenem ovu temu jer sam naleteo na klasčan problem - iako koristim C++ moj sors izgleda kao C sors - glavne stvari se dešavaju u klasičnim funkcijama.
Evo i zašto.

Koristim FLTK :)
Mislim da je on dobrim delom zaslužan za ovo - ako hoćeš callback za (recimo) klik - moraš da mu daš pointer ka funkciji koja će da handle-uje događaj. Znači, ta funkcija mora da bude obična, ne može da bude članica neke klase (ja barem tako mislim - nek me ispravi neko ako grešim).
Da stvar bude još gora, callback često može da se postavi za samo jedan event (recimo samo On_Click), pa često moraš da subclass-uješ klasu da bi dodao svoj handle za željeni event (ovo me najviše nervira).

Zato sam praktično prinuđen da sve trpam u obične funkcije, pa kad program naraste (a naras'o je) - kuku mene - pola sata tražim šta je gde, koja funkcija koju poziva... tužno... kao da programiram u C-u...

I onda kad se setim dana kada sam programirao u Delphi-ju, dođe mi da plaćem... kad se setim kako tamo svaka kontrola ima svoje Event-e, pa tu lepo smestiš program, pa je sve lepo organizovano...

E sad se ja pitam... ima li šanse da takvu organizaciju imam u C++ ?

Da li je rešenje u nekoj drugoj GUI biblioteci ?

Da li postoji GUI biblioteka koja je organizovana tako što svaka kontrola ima prazne virtual-ne funkcije za svaki Event, pa ti onda lepo napraviš subklasu i 'preuzmeš' virtualne funkcije koje ti trebaju ?

Znači, klasa ima:

Code:

class button
{
  virtual int On_Click ()
  {
    // prazno, nista ne radi
    return 0;
  }
};


I onda ti preuzmeš taj event, tako što subklasuješ klasu :

Code:

class button1 : public button
{
  int On_Click ()
  {
    // ovde ide tvoj program
    return 1;
  }
};


... i posle kreiraš objekat od te izvedene klase.
Ovako sors izgleda mnogo organizovanije, baš kao u Delph-iju.


Jasno je da FLTK ne može ovo.
Jedino rešenje za FLTK je da ja sam napravim podklasu za svaku komponentu (Widget), i da izmenim handle() funkciju tako da ona poziva prazne virtual-ne funkcije (koje postoje u toj podklasi), pa onda u mom programu da napravim podklasu te podklase, i tu da napravim svoje virtuelne funkcije, u koje mogu da ubacim program za Evente.
Ovo je popriličan smor, pošto koristim desetak komponenti, pa sve njih trebam da subklasujem.

I postoji drugo rešenje, lakše, ali nije kompletno.
Rešenje je da napravim namespace za svaki objekat (kontrolu) na formi, i tu da trpam funkcije za handle-ovanje, i globalne promenljive.
Tako sors izgleda pregledniji, svaki objekat ima svoj 'kutak', koji ima svoje ime, tako da je sve raspoređeno...
Mana je što ne mogu da handle-ujem svaki Event, pa ću negde morati da sublasujem neki Widget, da bi dodao callback za željeni event.

Elem, interesuju me vaša iskustva i rešenja u organizaciji sorsa.
Postoji li neka portabilna GUI biblioteka koja ima onakve prazne virtual-ne funkcije, namenjene baš Event-ima ?
 
Odgovor na temu

sspasic
Sasa Spasic

Član broj: 3261
Poruke: 175
*.medianis.net

Jabber: sspasic@elitesecurity.org
ICQ: 35454521


Profil

icon Re: Organizovanje C++ programa kao u Delphi-ju29.07.2003. u 18:28 - pre 230 meseci
Verovatno ima takvih biblioteka, ali sve popularne C++ biblioteke (GTK--, QT, ...) koriste signal/slot fazon - svodi se na to da kada kreiras objekat, pomocu connect povezes njegov signal (npr. onclick), objekat koji ce biti pozvan i njegov metod (tj. callback).
I wxWindows ovo radi s tim sto se connect radi staticki kao u MFC-u, u vreme kompajliranja. Mislim, doduse, da moze i dinamicki, ali nisam se upustao u takve detalje.

Dakle, signal/slot je kombinacija nacina iz GTK++ (a po tvom tekstu i FLTK) i ovog sa nasledjivanjem.
 
Odgovor na temu

Dragi Tata
Malo ispod Kanade

Član broj: 1958
Poruke: 3906
199.171.112.*



+6 Profil

icon Re: Organizovanje C++ programa kao u Delphi-ju29.07.2003. u 19:04 - pre 230 meseci
Pogledaj VCF na http://vcf.sourceforge.net/index.php

Ova biblioteka koristi objektne callback-ove (nešto slično kao .NET delegates). Ne znam dokle se stiglo sa portovima na Linux i Mac, ali pod Windowsom radi dosta dobro.
 
Odgovor na temu

leka
Dejan Lekić
senior software engineer, 3Developers
Ltd.
London, UK

Član broj: 234
Poruke: 2534
*.racasse.se

Sajt: dejan.lekic.org


+2 Profil

icon Re: Organizovanje C++ programa kao u Delphi-ju29.07.2003. u 19:52 - pre 230 meseci
Ko kaze da FLTK nema signal/slot mehanizam dokazuje samo da pojma nema o FLTK-u. Postoji nekoliko implementacija i sve se mogu naci u FLTK bazaru!
Dejan Lekic
software engineer, MySQL/PgSQL DBA, sysadmin
 
Odgovor na temu

Predrag Damnjanovic
Predrag Damnjanovic
Nis, Srbija

Član broj: 141
Poruke: 1305
*.dial.InfoSky.Net

Sajt: www.mycity.rs


+1 Profil

icon Re: Organizovanje C++ programa kao u Delphi-ju29.07.2003. u 20:01 - pre 230 meseci
to dokazuje da taj ne posecuje FLTK bazar, a ne da nema pojma o FLTK-u... :)
 
Odgovor na temu

leka
Dejan Lekić
senior software engineer, 3Developers
Ltd.
London, UK

Član broj: 234
Poruke: 2534
*.telia.com

Sajt: dejan.lekic.org


+2 Profil

icon Re: Organizovanje C++ programa kao u Delphi-ju30.07.2003. u 01:44 - pre 230 meseci
Pitaj iskusnog FLTK programera sta radi svakodnevno - posećuje news.easysw.com . A tamo o signalima nedeljno ima bar nekoliko poruka. - Dakle ne mora da posećuje bazar.
Dejan Lekic
software engineer, MySQL/PgSQL DBA, sysadmin
 
Odgovor na temu

Predrag Damnjanovic
Predrag Damnjanovic
Nis, Srbija

Član broj: 141
Poruke: 1305
*.dial.InfoSky.Net

Sajt: www.mycity.rs


+1 Profil

icon Re: Organizovanje C++ programa kao u Delphi-ju30.07.2003. u 12:34 - pre 230 meseci
usput, FL_Signal nece da se iskompajlira na gcc 3.2.2 :

Code:

$ cd Fl_Signal/makefiles/
$ make
g++ -O -Wall -I../../fltk -c -o Fl_Signal.o ../Fl_Signal.cpp
In file included from ../Fl_Signal.cpp:26:
../Fl_Signal.H:149: friend declaration requires class-key, i.e. `friend class
   Fl_Cb_<R>'
../Fl_Signal.H:172: friend declaration requires class-key, i.e. `friend class
   Fl_Cb_<R>'
../Fl_Signal.H:200: friend declaration requires class-key, i.e. `friend class
   Fl_Cb_<R>'
../Fl_Signal.H:241: friend declaration requires class-key, i.e. `friend class
   Fl_Cb_<R>'
../Fl_Signal.H:537: friend declaration requires class-key, i.e. `friend class
   Fl_Cb_<R>'
../Fl_Signal.H:560: friend declaration requires class-key, i.e. `friend class
   Fl_Cb_<R>'
make: *** [Fl_Signal.o] Error 1


u Redme-u pise da je testiran samo pod gcc 3.2.0 :(
 
Odgovor na temu

leka
Dejan Lekić
senior software engineer, 3Developers
Ltd.
London, UK

Član broj: 234
Poruke: 2534
*.telia.com

Sajt: dejan.lekic.org


+2 Profil

icon Re: Organizovanje C++ programa kao u Delphi-ju30.07.2003. u 12:38 - pre 230 meseci
Pa ti popravi, napravi patch i pošalji autoru - logično - zar ne? :)
Dejan Lekic
software engineer, MySQL/PgSQL DBA, sysadmin
 
Odgovor na temu

Rapaic Rajko
Bgd

Član broj: 4105
Poruke: 802
80.93.225.*



+62 Profil

icon Re: Organizovanje C++ programa kao u Delphi-ju30.07.2003. u 15:41 - pre 230 meseci
"Efikasno" programiranje, nema sta...

Leko, a ko bi platio to patch-ovanje tudjeg koda, da bi mogao da radis sopstveni posao? Ili bolje, koliko vremena to kosta?
Da se razumemo, i ja volim da programiram po principu "u se i svoje kljuse" (stalno se svadjam na poslu zbog "third-party" komponenti), ali ovo bas lici na arcenje vremena i para...

Rajko
 
Odgovor na temu

filmil
Filip Miletić
Oce Technologies B.V., inženjer
hardvera
Arcen, NL

Član broj: 243
Poruke: 2114
*.et.tudelft.nl

Jabber: filmil@jabber.org
ICQ: 36601391


+3 Profil

icon Re: Organizovanje C++ programa kao u Delphi-ju30.07.2003. u 15:53 - pre 230 meseci

Ne zaboravi da je tulkit besplatan (free as in 0$). Dakle možda arčiš pare, ali to su one iste koje si uštedeo ne kupujući recimo licencu za Qt. :)

f
 
Odgovor na temu

Dragi Tata
Malo ispod Kanade

Član broj: 1958
Poruke: 3906
199.171.112.*



+6 Profil

icon Re: Organizovanje C++ programa kao u Delphi-ju30.07.2003. u 18:07 - pre 230 meseci
Totalno off topic:

Zna li ko neki besplatan toolkit koji je pod nekom ne-GPL licencom? Podrazumevam da i ne koristi nikakav GPL kod "ispod haube".
 
Odgovor na temu

NastyBoy
Bojan Nastic
UK

Član broj: 12041
Poruke: 895
*.in-addr.btopenworld.com



+4 Profil

icon Re: Organizovanje C++ programa kao u Delphi-ju30.07.2003. u 18:25 - pre 230 meseci
Well, da bi to dobio u C++u treba ti C++ builder :) Zasto? Zato sto to sto ti navodis kao lepotu u Delphiu je takodje moguce u C++Builder-u, ali samo zato sto Borland koristi nestandardne ekstenzije jezika (posebno __closure keyword) koje mu dozvoljavaju da "izvuce" metod klase "napolje", tako da iako ti je Button ustvari klasa za sebe, ti pises Event-response kao metod njegove forme (tj. potpuno druge klase)!
Zgodan trik, ali tako je samo na Borlandu i NIGDE drugde.
E sad, FLTK ne znam, i ne znam da li ima nekih "precica" da se dobije slicno ponasanje, samo sam naveo kako to Delphi/Builder rade :)
 
Odgovor na temu

leka
Dejan Lekić
senior software engineer, 3Developers
Ltd.
London, UK

Član broj: 234
Poruke: 2534
*.telia.com

Sajt: dejan.lekic.org


+2 Profil

icon Re: Organizovanje C++ programa kao u Delphi-ju30.07.2003. u 20:33 - pre 230 meseci
Citat:
Rapaic Rajko:
"Efikasno" programiranje, nema sta...

Leko, a ko bi platio to patch-ovanje tudjeg koda, da bi mogao da radis sopstveni posao? Ili bolje, koliko vremena to kosta?
Da se razumemo, i ja volim da programiram po principu "u se i svoje kljuse" (stalno se svadjam na poslu zbog "third-party" komponenti), ali ovo bas lici na arcenje vremena i para...

Rajko


Da si malo pažljivije čitao tekstove i malo, ali baš samo malo, razmišljao, shvatio bi da je FLTK tim ponudio svoje rešenje. Univerzalnog rešenja nema. Signal/Slot mehanizam je samo jedna programerska paradigma. Ja lično više volim upravo kako to radi Borland C++ Builder, ali FLTK koristim jer sam od onih ljudi čiji je moto "size and speed do matter". Takođe mislim da nisi shvato osnovnu stvar u celoj priči - Siglan/Slot sistem o kome je Peca govorio (pa onda ja, pa ti) NIJE difolt FLTK solucija. FLTK godinama koristi drugi sistem koji Peci ne odgovara. - Govorimo o mehanizmu koji je čini mi se napisao Roman Kantor (jel taj Peco?). A taj nije jedini... Ima ih još.

Potpuno se slažem sa drugim delom tvog teksta - programeri nažalost u komercijalnom svetu ne mogu da se bave optimizacijama, da koriste najbrže tehnike itd. Zato sam potpuno siguran da je OS software taj koji ima budućnost - jedan programer koji radi na OS projektu će sesti nedelju dana i optimizovati jednu jedinu klasu - parčence celog projekta - dok će komercijalac da kupi gotove stvari, JER NEMA VREMENA ZA SVE zbog kratkog dedlajna... Na kraju, bar iz ličnog iskustva pričam, komercijalni proizvod je zapravo sve ostalo osim brz i malen, što nije ni čudo jer se svakim danom pojavljuju kojekakvi priučeni java, .net, c++, python, visual basic (etc) programeri...

[Ovu poruku je menjao leka dana 30.07.2003. u 20:39 GMT]
Dejan Lekic
software engineer, MySQL/PgSQL DBA, sysadmin
 
Odgovor na temu

leka
Dejan Lekić
senior software engineer, 3Developers
Ltd.
London, UK

Član broj: 234
Poruke: 2534
*.telia.com

Sajt: dejan.lekic.org


+2 Profil

icon Re: Organizovanje C++ programa kao u Delphi-ju30.07.2003. u 20:36 - pre 230 meseci
Citat:
Dragi Tata:
Totalno off topic:

Zna li ko neki besplatan toolkit koji je pod nekom ne-GPL licencom? Podrazumevam da i ne koristi nikakav GPL kod "ispod haube".


Citat:

FLTK comes with complete free source code. FLTK is ©1998-2001 by Bill Spitzak and others. Use and distribution of FLTK is governed by the FLTK Library License (which is the GNU Library General Public License with an exception added that allows you to distribute statically-linked programs using the library without providing source code to the program or the library). You can use it in commercial software!


Mislim da ovaj deo teksta sve govori...
Dejan Lekic
software engineer, MySQL/PgSQL DBA, sysadmin
 
Odgovor na temu

Predrag Damnjanovic
Predrag Damnjanovic
Nis, Srbija

Član broj: 141
Poruke: 1305
*.dial.InfoSky.Net

Sajt: www.mycity.rs


+1 Profil

icon Re: Organizovanje C++ programa kao u Delphi-ju30.07.2003. u 21:22 - pre 230 meseci
Citat:
leka:
Da si malo pažljivije čitao tekstove i malo, ali baš samo malo, razmišljao, shvatio bi da je FLTK tim ponudio svoje rešenje. Univerzalnog rešenja nema. Signal/Slot mehanizam je samo jedna programerska paradigma. Ja lično više volim upravo kako to radi Borland C++ Builder, ali FLTK koristim jer sam od onih ljudi čiji je moto "size and speed do matter". Takođe mislim da nisi shvato osnovnu stvar u celoj priči - Siglan/Slot sistem o kome je Peca govorio (pa onda ja, pa ti) NIJE difolt FLTK solucija. FLTK godinama koristi drugi sistem koji Peci ne odgovara. - Govorimo o mehanizmu koji je čini mi se napisao Roman Kantor (jel taj Peco?). A taj nije jedini... Ima ih još.


Taj mehanizam mozes da okacis macki o rep...
Jednostavno, nije kompletan - niti mozes da napravis callback koji tebi treba, niti callback moze da bude funkcija neke klase.

Recimo treba mi callback za event MouseOver - kada misem predjes preko widgeta.
Da bi to napravio treba da subklasujes widget, pa da napises svoj handle()

I drugo - to resenje dovodi do toga da ti sors izgleda kao papazjanija... gomila globalnih funkcija (za callback) i gomila globalnih promenljivi u jednom cpp fajlu.

Definitivno sam primoran da koristim namespace za svaki objekat, da bi uveo kakav takav red... to ispada najbolje resenje.
A sto se tice dodatnih callback-ova - subclassing - nema mi druge :(
 
Odgovor na temu

leka
Dejan Lekić
senior software engineer, 3Developers
Ltd.
London, UK

Član broj: 234
Poruke: 2534
*.telia.com

Sajt: dejan.lekic.org


+2 Profil

icon Re: Organizovanje C++ programa kao u Delphi-ju30.07.2003. u 22:16 - pre 230 meseci
Peco care, ako ti se ne svidja - ti nadji neki drugi ToolKit koji se tebi vise svidja.
Druga stvar - postoji news, pa ljudima iz FLTK tima mozes da se izjadas a oni ce videti ima li smisla to sto pricas ili ne. :)
Ja probleme tog tipa na koje ti nailazis nisam imao (sa FLTK-om).
Dejan Lekic
software engineer, MySQL/PgSQL DBA, sysadmin
 
Odgovor na temu

Dragi Tata
Malo ispod Kanade

Član broj: 1958
Poruke: 3906
199.171.112.*



+6 Profil

icon Re: Organizovanje C++ programa kao u Delphi-ju30.07.2003. u 23:45 - pre 230 meseci
Citat:
which is the GNU Library General Public License with an exception added


LGPL je previše komplikovan za moj ostareli mozak i bez "exception added". Ima li nešto pod BSD licencom ili public domain? VCF je dobar, ali još nije stigao do 1.0 verzije.
 
Odgovor na temu

leka
Dejan Lekić
senior software engineer, 3Developers
Ltd.
London, UK

Član broj: 234
Poruke: 2534
*.telia.com

Sajt: dejan.lekic.org


+2 Profil

icon Re: Organizovanje C++ programa kao u Delphi-ju31.07.2003. u 00:21 - pre 230 meseci
LGPL je nešto najotvorenije što postoji među svim licencama. FLTK je upravo zbog toliko poularan (to je jedan od prvih toolkita koji je izdat pod LGPL-om), i debelo se koristi u komercijalnim aplikacijama, koje ga najčešće statički linkaju, što je specijalitet FLTK kuhinje :)
Dejan Lekic
software engineer, MySQL/PgSQL DBA, sysadmin
 
Odgovor na temu

Predrag Damnjanovic
Predrag Damnjanovic
Nis, Srbija

Član broj: 141
Poruke: 1305
*.dial.InfoSky.Net

Sajt: www.mycity.rs


+1 Profil

icon Re: Organizovanje C++ programa kao u Delphi-ju31.07.2003. u 11:43 - pre 230 meseci
Citat:
leka:
Peco care, ako ti se ne svidja - ti nadji neki drugi ToolKit koji se tebi vise svidja.
Druga stvar - postoji news, pa ljudima iz FLTK tima mozes da se izjadas a oni ce videti ima li smisla to sto pricas ili ne. :)
Ja probleme tog tipa na koje ti nailazis nisam imao (sa FLTK-om).


Epa da znas da cu da im pisem...
Mada, imam ja i par sitnih primedbi na widget-e. Recimo onaj ListBox, mora da drzis da bi lista bila otvorena - video sam da ste to sredili u eFLTK-u, na moje veliko zadovoljstvo...

Tako da, kada im budem pisao, bice to poduze pismo...
Ili cu jednostavno da predjem na eFLTK, ako napravite (mada mogu i ja da pomognem - ako dozvolite & zelite) normalan callback sistem :)
 
Odgovor na temu

filmil
Filip Miletić
Oce Technologies B.V., inženjer
hardvera
Arcen, NL

Član broj: 243
Poruke: 2114
130.161.181.*

Jabber: filmil@jabber.org
ICQ: 36601391


+3 Profil

icon Re: Organizovanje C++ programa kao u Delphi-ju31.07.2003. u 12:22 - pre 230 meseci

Mislim da je jedini pravi potpuno OO pristup pravljenju tulkita stavljanje po jedne virtuelne funkcije clanice (metoda) za svaki moguci event. Mana pristupa je u tome sto sve klase onda vuku sve virtuelne funkcije iako realno widgeti koriste samo jedan mali njihov podskup. Problem je verovatno u tome sto svi widgeti u principu ne podrzavaju sve evente a u c++-u je nemoguce 'ubiti' metode koji se ne koriste. To naravno povecava footprint tulkita pa se svako dovija na svoj nacin. Qt je smislio signal/slot resenje koje lepo radi ali to vise nema veze sa c++-om, a FLTK je usvojio callback pristup koji je postojao jos od Motifa, a koji daje uzasno ruzan kod, i sve to pod parolom ocuvanja brzine.

Dakle na prvi pogled se vidi da malte ne nijedan tulkit ne koristi jedini pravi OO pristup resenju ovog problema i zivo me zanima zasto je tako. Recimo, kako su (e)FLTK-ovci zakljucili da su callback funkcije brze i bolje od virtuelnih f-ja? To verovatno zavisi i od kompajlera, ali zaista ne vidim razlog da se takve stvari ne mogu iskompajlirati tako da daju potpuno identican kod!

Ali ako su u pravu, onda evo zadatka za Pecu: da napravi konvertor koji ce od OO koda u eFLTK-u (dakle sa virtuelnim funkcijama) da izgenerise dodatni fajl u koji smesta sve ruzne callback-ove i povezuje na 'fltk nacin' sa ostatkom programa.

f
 
Odgovor na temu

[es] :: C/C++ programiranje :: Organizovanje C++ programa kao u Delphi-ju

Strane: 1 2

[ Pregleda: 5010 | Odgovora: 26 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.