Thread View: pl.comp.objects
11 messages
11 total messages
Started by Kurciok
Tue, 29 Aug 2006 16:13
Projekt obiektowy do napisania w C
Author: Kurciok
Date: Tue, 29 Aug 2006 16:13
Date: Tue, 29 Aug 2006 16:13
5 lines
1287 bytes
1287 bytes
Mam projekt obiektowy z mnustwem dziedziczeń klas abstrakcyjnych itd. I musze to napisać w C w dodatku pod mikrokontroler. Jak się do tego zabrać? Jak narazie myślę aby każdą klase zawrzeć w osobnym pliku. I tam umieścić strukturę i funkcję ktore na niej operują. Jak jednak zrobić coś takiego jak dziedziczenie itd?
Re: Projekt obiektowy do napisania w C
Author: sg
Date: Tue, 29 Aug 2006 16:32
Date: Tue, 29 Aug 2006 16:32
10 lines
1229 bytes
1229 bytes
Kurciok napisał(a): > Mam projekt obiektowy z mnustwem dziedziczeń klas abstrakcyjnych itd. I > musze to napisać w C w dodatku pod mikrokontroler. Jak się do tego zabrać? > Jak narazie myślę aby każdą klase zawrzeć w osobnym pliku. I tam umieścić > strukturę i funkcję ktore na niej operują. Jak jednak zrobić coś takiego jak > dziedziczenie itd? > > a to w C są obiekty?
Re: Projekt obiektowy do napisania w C
Author: A.L.
Date: Tue, 29 Aug 2006 16:50
Date: Tue, 29 Aug 2006 16:50
17 lines
1290 bytes
1290 bytes
On Tue, 29 Aug 2006 18:32:53 +0200, sg <alpha@skynet.org.pl_WITHOUT> wrote: >Kurciok napisał(a): >> Mam projekt obiektowy z mnustwem dziedziczeń klas abstrakcyjnych itd. I >> musze to napisać w C w dodatku pod mikrokontroler. Jak się do tego zabrać? >> Jak narazie myślę aby każdą klase zawrzeć w osobnym pliku. I tam umieścić >> strukturę i funkcję ktore na niej operują. Jak jednak zrobić coś takiego jak >> dziedziczenie itd? >> >> > >a to w C są obiekty? Obiekty moga byc w czymkolwiek. Tzreba je tylko sobie zrobic. A.L.
Re: Projekt obiektowy do napisania w C
Author: A.L.
Date: Tue, 29 Aug 2006 17:14
Date: Tue, 29 Aug 2006 17:14
36 lines
2090 bytes
2090 bytes
On Tue, 29 Aug 2006 18:13:06 +0200, "Kurciok" <kurciok@poczta.BEZSPAMUonet.pl> wrote: >Mam projekt obiektowy z mnustwem dziedziczeń klas abstrakcyjnych itd. I >musze to napisać w C w dodatku pod mikrokontroler. Jak się do tego zabrać? >Jak narazie myślę aby każdą klase zawrzeć w osobnym pliku. I tam umieścić >strukturę i funkcję ktore na niej operują. Jak jednak zrobić coś takiego jak >dziedziczenie itd? > http://www.accu.org/acornsig/public/articles/oop_c.html Do you think that to program in an object-oriented style you need an object-oriented language? Well, you're wrong. It seems to be a common myth that you need an object-oriented language to implement an object-oriented design and, although languages such as C++ and Smalltalk provide many features that encourage this style of design, you can benefit equally well from the use of objects in imperative languages such as C. Tutaj jest ksiazka "Object Oriented programming in ANSI C" http://www.planetpdf.com/codecuts/pdfs/ooc.pdf#search=%22object%20programming%20C%22 ta sama ksiazka jest tutaj (na stronei autora), w dziale "books". W dziale "papers" sa publikacje http://www.cs.rit.edu/~ats/ Technika bazuje na preprocesorze napisanym w Awku; kod mozna sciagnac stad http://www.cs.rit.edu/~ats/oop-2001-2/code/ooc/awk/ A.L.
Re: Projekt obiektowy do napisania w C
Author: Sektor van Skijlen
Date: Tue, 29 Aug 2006 17:25
Date: Tue, 29 Aug 2006 17:25
70 lines
3978 bytes
3978 bytes
Dnia Tue, 29 Aug 2006 18:13:06 +0200, Kurciok skrobie:
> Mam projekt obiektowy z mnustwem dziedziczeń klas abstrakcyjnych itd. I
> musze to napisać w C w dodatku pod mikrokontroler. Jak się do tego zabrać?
> Jak narazie my?lę aby każd? klase zawrzeć w osobnym pliku. I tam umie?cić
> strukturę i funkcję ktore na niej operuj?. Jak jednak zrobić co? takiego jak
> dziedziczenie itd?
Można, ale niekoniecznie.
Pierwsze, co musisz zrobić, to określić sposób tworzenia obiektów, czyli
funkcję, która utworzy nowy obiekt i zwróci na niego wskaźnik. Dziedziczenie w
takim przypadku możesz zrobić poprzez umieszczenie w swojej strukturze z
polami klasy jednego pola, które będzie typu struktury klasy dziedziczonej. W
takim przypadku będą ci nawet działać wszystkie sprawy typu "wywoływanie metod
z klasy bazowej". Oczywiście będzie to tylko dziedziczenie pojedyncze. No i
oczywiście drugi punkt, ważny w dziedziczeniu, to wywołanie "konstruktora"
klasy bazowej w konstruktorze klasy pochodnej. Z tego względu powinieneś mieć
oddzielną funkcję, która tylko inicjalizuje (czyli odpowiednik konstruktora w
C++).
Możesz to zrobić metodą "udawania C++", czyli w strukturach pola,
funkcjonalność w funkcjach.
Polimorfizm tak samo - robisz tablicę metod dla każdej "klasy" i przy
tworzeniu obiektów zapisujesz wskaźnik na odpowiednią tablicę. W związku z tym
"konstruktor" każdego typu musi mieć możliwość podania mu tego wskaźnika. Np.:
struct A { int a; void** vp; };
struct B { A derived; int b; void** vp; };
void construct_A( A* self, void** vp, int i ) { self->a = i; self->vp = vp; }
A* new_A( int i )
{
void* vo = malloc( sizeof(A) );
A* a = (A*)vo;
construct_A( a, vtable_A, i );
return a;
}
void construct_B( B* self, void** vp, int a, int b )
{
construct_A( self->derived, vp, a );
self->b = b;
}
B* new_B( int x, int y )
{
void* vo = malloc( sizeof(B) );
B* a = (B*)vo;
construct_B( a, vtable_B, x, y );
return a;
}
Nie deklarowałem vtable_A i vtable_B, bo z tym jest trochę zabawy i mi się nie
chce :). To powinny być w każdym razie tablice, w których na określonych
pozycjach są zapisane wskaźniki do funkcji "implementacji".
Metody wirtualne definiujesz w ten sposób, że tworzysz funkcję, która
wyciągnie odpowiedni wskaźnik z tej tablicy vp, zrzutuje go na swoją
sygnaturę, i wywoła. Te forwardery potrzebujesz zdefiniować tylko raz.
Przedefiniowanie metod wirtualnych polega na tym, że wpisujesz odpowiednie
elementy do vtable danej klasy - te, które pozostawiasz w spokoju, kopiujesz z
vtable klasy bazowej, a te, które chcesz przedefiniować wpisujesz ręcznie.
--
// _ ___ Michal "Sektor" Malecki <sektor(whirl)kis.p.lodz.pl>
\\ L_ |/ `| /^\ ,() <ethouris(O)gmail.com>
// \_ |\ \/ \_/ /\ C++ bez cholesterolu: http://www.intercon.pl/~sektor/cbx
"I am allergic to Java because programming in Java reminds me casting spells"
Re: Projekt obiektowy do napisania w C
Author: Sektor van Skijlen
Date: Tue, 29 Aug 2006 17:35
Date: Tue, 29 Aug 2006 17:35
50 lines
3047 bytes
3047 bytes
Dnia Tue, 29 Aug 2006 12:14:00 -0500, A.L. skrobie: > On Tue, 29 Aug 2006 18:13:06 +0200, "Kurciok" > <kurciok@poczta.BEZSPAMUonet.pl> wrote: > >Mam projekt obiektowy z mnustwem dziedziczeń klas abstrakcyjnych itd. I > >musze to napisać w C w dodatku pod mikrokontroler. Jak się do tego zabrać? > >Jak narazie myślę aby każdą klase zawrzeć w osobnym pliku. I tam umieścić > >strukturę i funkcję ktore na niej operują. Jak jednak zrobić coś takiego jak > >dziedziczenie itd? > > > http://www.accu.org/acornsig/public/articles/oop_c.html > Do you think that to program in an object-oriented style you need an > object-oriented language? Well, you're wrong. It seems to be a > common myth that you need an object-oriented language to implement > an object-oriented design and, although languages such as C++ and > Smalltalk provide many features that encourage this style of design, > you can benefit equally well from the use of objects in imperative > languages such as C. Autor nie pokazał jednak, jak w C osiągnąć dziedziczenie i polimorfizm. A dopiero tu naprawdę zaczyna się jazda. Oczywiście, że nie są to cechy wymagane do obiektowości, ale przedmówca wyraźnie mówił o zrealizowaniu hierarchii klas. > Tutaj jest ksiazka "Object Oriented programming in ANSI C" > http://www.planetpdf.com/codecuts/pdfs/ooc.pdf#search=%22object%20programming%20C%22 > ta sama ksiazka jest tutaj (na stronei autora), w dziale "books". W > dziale "papers" sa publikacje > http://www.cs.rit.edu/~ats/ > Technika bazuje na preprocesorze napisanym w Awku; kod mozna > sciagnac stad > http://www.cs.rit.edu/~ats/oop-2001-2/code/ooc/awk/ Zamiast tego proponowałbym już prędzej skorzystać z Objective-C. -- // _ ___ Michal "Sektor" Malecki <sektor(whirl)kis.p.lodz.pl> \\ L_ |/ `| /^\ ,() <ethouris(O)gmail.com> // \_ |\ \/ \_/ /\ C++ bez cholesterolu: http://www.intercon.pl/~sektor/cbx "I am allergic to Java because programming in Java reminds me casting spells"
Re: Projekt obiektowy do napisania w C
Author: Piotr Dembiński
Date: Tue, 29 Aug 2006 17:59
Date: Tue, 29 Aug 2006 17:59
7 lines
1072 bytes
1072 bytes
A.L. <alewando@fala2005.com> writes: [...] > Obiekty moga byc w czymkolwiek. Tzreba je tylko sobie zrobic. Tak samo, jak typy.
Re: Projekt obiektowy do napisania w C
Author: A.L.
Date: Tue, 29 Aug 2006 18:08
Date: Tue, 29 Aug 2006 18:08
18 lines
1406 bytes
1406 bytes
On Tue, 29 Aug 2006 17:35:49 +0000 (UTC), Sektor van Skijlen <ethouris@guess.if.gmail.com.is.valid.or.invalid> wrote: >D >Autor nie pokazał jednak, jak w C osiągnąć dziedziczenie i polimorfizm. A >dopiero tu naprawdę zaczyna się jazda. Oczywiście, że nie są to cechy wymagane >do obiektowości, ale przedmówca wyraźnie mówił o zrealizowaniu hierarchii >klas. Panei Sektor, Pan tam w ogole zajrzal?... Rozdzial 4 ksiazki ma tytul "Inheritance", rozdzial 6 "Class hierarchy", i tak dalej. Proponuje nie wydawc opinii "w ciemno" bo Panska wiarugodnosc ucierpi. A Objective-C? Na mkrokontroler?... A.L.
Re: Projekt obiektowy do napisania w C
Author: Kurciok
Date: Wed, 30 Aug 2006 16:10
Date: Wed, 30 Aug 2006 16:10
13 lines
1675 bytes
1675 bytes
> Tutaj jest ksiazka "Object Oriented programming in ANSI C" > > http://www.planetpdf.com/codecuts/pdfs/ooc.pdf#search=%22object%20programming%20C%22 Przejrzałem i ciekawe. No ale jednak na ten temat jest cała książka ;) także to by było szczelanie z armaty do wróbla. Także dam sobi spokój z tymi zakusami (po wprowadzeniu tych zasad kod byłby zupełnie nieczytelny). Ale oczywiście niektóre z tych zasad zastosuje. Pójde na jakiś kompromis i chyba zrobie zmiany w projekcie tak aby nie było w nim dziedziczenia w ogóle . Postaram się to napisać tak żeby działało i było jako tako zgodne z obiektowością.
Re: Projekt obiektowy do napisania w C
Author: Sektor van Skijlen
Date: Wed, 30 Aug 2006 20:00
Date: Wed, 30 Aug 2006 20:00
25 lines
2122 bytes
2122 bytes
Dnia Tue, 29 Aug 2006 13:08:58 -0500, A.L. skrobie: > On Tue, 29 Aug 2006 17:35:49 +0000 (UTC), Sektor van Skijlen > <ethouris@guess.if.gmail.com.is.valid.or.invalid> wrote: > >D > >Autor nie pokazał jednak, jak w C osiągnąć dziedziczenie i polimorfizm. A > >dopiero tu naprawdę zaczyna się jazda. Oczywiście, że nie są to cechy wymagane > >do obiektowości, ale przedmówca wyraźnie mówił o zrealizowaniu hierarchii > >klas. > Panei Sektor, Pan tam w ogole zajrzal?... Rozdzial 4 ksiazki ma > tytul "Inheritance", rozdzial 6 "Class hierarchy", i tak dalej. > Proponuje nie wydawc opinii "w ciemno" bo Panska wiarugodnosc > ucierpi. > A Objective-C? Na mkrokontroler?... A jaki problem? Że się biblioteka nie zmieści? -- // _ ___ Michal "Sektor" Malecki <sektor(whirl)kis.p.lodz.pl> \\ L_ |/ `| /^\ ,() <ethouris(O)gmail.com> // \_ |\ \/ \_/ /\ C++ bez cholesterolu: http://www.intercon.pl/~sektor/cbx "I am allergic to Java because programming in Java reminds me casting spells"
Re: Projekt obiektowy do napisania w C
Author: Seweryn Habdank-Wojewódzki
Date: Thu, 31 Aug 2006 14:08
Date: Thu, 31 Aug 2006 14:08
30 lines
1956 bytes
1956 bytes
Witam Kurciok wrote: > >> Tutaj jest ksiazka "Object Oriented programming in ANSI C" >> >> http://www.planetpdf.com/codecuts/pdfs/ooc.pdf#search=%22object%20programming%20C%22 > > Przejrzałem i ciekawe. No ale jednak na ten temat jest cała książka ;) także > to by było szczelanie z armaty do wróbla. Także dam sobi spokój z tymi > zakusami (po wprowadzeniu tych zasad kod byłby zupełnie nieczytelny). Ale > oczywiście niektóre z tych zasad zastosuje. > > Pójde na jakiś kompromis i chyba zrobie zmiany w projekcie tak aby nie było > w nim dziedziczenia w ogóle . Postaram się to napisać tak żeby działało i > było jako tako zgodne z obiektowością. Zamin całkiem porzucisz OOP dla uC, proponuję, abyś zgrubsza obejrzał implementację gtk. Mi ona dużo dała i wiel prostych spraw można ładnie zaimplementować na wzór gtk. Dla jednej firmy napisałem w C software dla DSP i udało się zrobić to w zasadzie obiektowo. Pozdrawiam. -- |\/\/| Seweryn Habdank-Wojewódzki `\/\/
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads