Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1867 connectés 

  FORUM HardWare.fr
  Programmation
  C

  Programmation objet en C

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Programmation objet en C

n°1516085
ngkreator
Posté le 18-02-2007 à 09:36:38  profilanswer
 

J'ai découvert qu'on pouvait faire de l'objet en C:
 
http://chgi.developpez.com/c/objet/
http://c.ftp-developpez.com/downloads/c/cobjet.pdf
 
Mais ça m'a l'air pus compliqué (à 1ère vue) qu'en C++. Est-ce que c'est une technique barbare ou est-ce que c'est vraiment efficace quand on est habitué?
 
Merci encore!

mood
Publicité
Posté le 18-02-2007 à 09:36:38  profilanswer
 

n°1516095
Sve@r
Posté le 18-02-2007 à 10:56:15  profilanswer
 

ngkreator a écrit :

J'ai découvert qu'on pouvait faire de l'objet en C:
 
http://chgi.developpez.com/c/objet/
http://c.ftp-developpez.com/downloads/c/cobjet.pdf
 
Mais ça m'a l'air pus compliqué (à 1ère vue) qu'en C++. Est-ce que c'est une technique barbare ou est-ce que c'est vraiment efficace quand on est habitué?
 
Merci encore!


Ben c'est pas vraiment compliqué. Il suffit de rajouter aux structures des pointeurs sur des fonctions et ensuite on peut "simuler" l'appel à une fonction membre. Le plus dur est d'écrire toutes les fonctions de manipulation de structures. Une fois ces fonctions écrites, il suffit de les utiliser quand on veut, comme en C++.
On reste quand-même obligé de passer à ces fonctions le pointeur vers l'élément qu'on manipule, chose qui n'est pas à faire en C++.
C'est très certainement efficace sauf que je ne vois pas pourquoi il faudrait s'embêter à simuler de l'objet en C alors qu'on l'a directement en C++...


---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
n°1516101
Emmanuel D​elahaye
C is a sharp tool
Posté le 18-02-2007 à 11:21:19  profilanswer
 

ngkreator a écrit :

J'ai découvert qu'on pouvait faire de l'objet en C:
 
http://chgi.developpez.com/c/objet/
http://c.ftp-developpez.com/downloads/c/cobjet.pdf
 
Mais ça m'a l'air pus compliqué (à 1ère vue) qu'en C++. Est-ce que c'est une technique barbare ou est-ce que c'est vraiment efficace quand on est habitué?


C'est compliqué si on cherche à reproduire tous les paradigmes objets en C (c'est ce que faisait C-front au temp des débuts héroïques du C++, Google est ton ami). Et c'est pour ça qu'on a inventé des langages qui supportent nativement ces paradigmes (Smalltalk, Objective-C, C++ etc.)
 
Par contre, on peut utiliser une orientation objet simple comme les types abstraits de données. C'est une pratique courante. FILE est un bon exemple dans la bibliothèque standard du  C. La bibliothèque GUI portable GTK+ est un bon exemple d'application des principes OO en C.
 
http://mapage.noos.fr/emdel/tad.htm
 
 
 


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
n°1516116
ngkreator
Posté le 18-02-2007 à 12:02:18  profilanswer
 

Merci pour vos réponses, donc je vais faire un peu de lecture... :D

n°2139757
mlouk
Posté le 30-04-2012 à 12:59:52  profilanswer
 

En programmant le trie d'une liste chainé, j' ai eu l'impression que le dit C orienté objet n'est qu'une prolongation:
Grace à la déclaration de variable, j'ai réduit le code: des testes on été réduit à un calcule pour la recherche d'une addresse.
à la base, le code se présantait comme ça:
if (a->next && a->next->pos>a->pos)
 while (a->next && a->next->pos>a->pos)
 {
 (on passe des addresses)
  ...
 }
else
 while (a->prev && a->prev->pos>a->pos)
 {  
  (on passe des addresses)
   ...
 }
le code actuel (qui au final est moin claire):
 void
 sort_contents
         (
                 void **h,
                 int (*test)(void *,int),
                 void *(*read_next)(void *),
                 void (*set_next)(void **,void *),
                 void *(*read_prev)(void *),
                 void (*set_prev)(void **,void *)
 )
 {
         void *ph,*after,*p,*pa,*pb;
         void **aptr[5]={&ph,&pa,&pb,&p,&h[0]},
                 **bptr[5]={&ph,&pb,&pa,&p,&h[0]};  
         void **ptrs[2][5]={     {&pa,&ph,&pb,&p,&h[0]},
                                 {&pa,&p,&pb,&ph,&h[0]}};
         void ***plist[2]={aptr,bptr};
         void *(*___read___[2])(void *)={read_prev,read_next};
         void (*set[2])(void **,void *)={set_next,set_prev};
         unsigned short int i,j,tv[2]={3,0};
         int pset;
         ph=h[0];
         while (ph)
         {
                 after=(*read_next)(ph);
                 pset=(*test)(ph,0);
                 while (!(*test)(ph,pset))
                 {
                         for (i=0;i<4;i++)
                                 if (i<2)
                                         plist[pset][1][0]
                                         =(*___read___[1-pset])(plist[pset][i][0]);
                                 else
                                         plist[pset][i][0]
                                         =(*___read___[(i-2)^pset])(plist[pset][0][0]);
                         for (j=0;j<4;j++)
                                 (*set[!(j<2)^pset])(plist[pset][tv[j%2]],plist[pset][j][0]);
                         if (ptrs[pset][0][0])
                                 (*set_prev)(ptrs[pset][0],ptrs[pset][1][0]);
                         if (ptrs[pset][2][0])
                                 (*set_next)(ptrs[pset][2],ptrs[pset][3][0]);
                         else
                                 ptrs[pset][4][0]=ptrs[pset][3][0];
                 }
                 ph=after;
         }
 }
tout découle d'un teste que j'avais réalisé:
 int  
 main(void)
 {
  void *ptr=NULL;
  int v=1;
  printf("%i\n",(!ptr));
  ptr=(void *)&v;
  printf("%i\n",(!ptr));
  return 0;
 }
ce qui donne par exemple:
 (*set[!(j<2)^pset])(plist[pset][tv[j%2]],plist[pset][j][0]);
 
dans l'ensemble le COO consiste à manipuler les objet lvalue (les addresses, qui n'ont pas de type)... les mov remplace les cmp,jz,jnz..

n°2139760
theshockwa​ve
I work at a firm named Koslow
Posté le 30-04-2012 à 13:14:23  profilanswer
 

[:pseudo ______]
Ce topic a environ 5 ans quand même, et je vois difficilement le rappport avec la question.
Dans ton exemple, pouruoi tu passes tous tes pointeurs de fonction en argument à ta classe ?
Si tu es censé faire de l'OO en C, tu dois aussi avoir un système de vtable sur laquelle ta structure pointe, logiquement, et non pas devoir fournir ton interface méthode par méthode à chaque fonction qui traite tes objets.
Accessoirement, je ne trouve pas un seul lien logique entre le test que tu as réalisé et le code qui est censé en découler :??:


---------------
last.fm
n°2139761
gilou
Modérateur
Modzilla
Posté le 30-04-2012 à 13:39:00  profilanswer
 

C'était déjà le cas pour son intervention précédente.
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°2139812
mlouk
Posté le 30-04-2012 à 17:31:02  profilanswer
 

snif...
un arbre à été sauvé...

n°2139820
mlouk
Posté le 30-04-2012 à 17:58:47  profilanswer
 

je suis pas hors sujet, et je me débrouille vraiment pas si mal dans le fond
si tu programme bien alors tu te fou du COO.
 
P.S:Rien empêche de se la péter et faire du CHQ.

n°2139821
mlouk
Posté le 30-04-2012 à 18:07:44  profilanswer
 

une fonction c'est une addresse et une adresse t'y accede de partout pattate.

mood
Publicité
Posté le 30-04-2012 à 18:07:44  profilanswer
 

n°2139822
gilou
Modérateur
Modzilla
Posté le 30-04-2012 à 18:17:50  profilanswer
 

Si ça continue, on va rapidement atteindre le point de modération...
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°2139826
mlouk
Posté le 30-04-2012 à 18:54:43  profilanswer
 

:kaola:

n°2139839
Sve@r
Posté le 30-04-2012 à 22:13:52  profilanswer
 

mlouk a écrit :

une fonction c'est une addresse et une adresse t'y accede de partout pattate.


 
A te lire on a vraiment l'impression que tu te réponds à toi-même...  :pt1cable:

n°2139993
__werz
Posté le 01-05-2012 à 23:40:33  profilanswer
 

Ou alors avec des membres imaginaires (ce qui pourrait être un concept de POO...).


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  Programmation objet en C

 

Sujets relatifs
[résolu] Probleme d'appel d'un objet dans ma classe[C#] [Résolu] Comment communiquer avec une dll c++
Fonction strcpy absente, programmation PICprogrammation avec scite
Comment devenir bon en programmation?Programmation pour demain
Programmation navigateur Web : Java/Javascript?[C] Programmation d'un microcontrolleur
Former le nom d'un objet a partir de chaines de caractères (VB)aide méthode objet window
Plus de sujets relatifs à : Programmation objet en C


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR