🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

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
#15251
Author: Kurciok
Date: Tue, 29 Aug 2006 16:13
5 lines
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
#15261
Author: sg
Date: Tue, 29 Aug 2006 16:32
10 lines
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
#15259
Author: A.L.
Date: Tue, 29 Aug 2006 16:50
17 lines
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
#15255
Author: A.L.
Date: Tue, 29 Aug 2006 17:14
36 lines
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
#15264
Author: Sektor van Skijlen
Date: Tue, 29 Aug 2006 17:25
70 lines
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
#15254
Author: Sektor van Skijlen
Date: Tue, 29 Aug 2006 17:35
50 lines
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
#15263
Author: Piotr Dembiński
Date: Tue, 29 Aug 2006 17:59
7 lines
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
#15257
Author: A.L.
Date: Tue, 29 Aug 2006 18:08
18 lines
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
#15256
Author: Kurciok
Date: Wed, 30 Aug 2006 16:10
13 lines
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
#15258
Author: Sektor van Skijlen
Date: Wed, 30 Aug 2006 20:00
25 lines
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
#15260
Author: Seweryn Habdank-Wojewódzki
Date: Thu, 31 Aug 2006 14:08
30 lines
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