home *** CD-ROM | disk | FTP | other *** search
/ DP Tool Club 22 / CD_ASCQ_22_0695.iso / win / fr / doc12 / scoop.tx_ / scoop.tx
Text File  |  1995-02-28  |  27KB  |  379 lines

  1. SCOOP.MMO
  2.  
  3. HIERARCHIE DES CLASSES
  4.  
  5. Root
  6.  
  7. Scoop
  8.  
  9. User
  10.  
  11. UDPaddr
  12.  
  13. IPaddr
  14.  
  15. ICMPaddr
  16.  
  17. ARPaddr
  18.  
  19. ETHaddr
  20.  
  21. Tache
  22.  
  23. ListeTache
  24.  
  25. Scheduler
  26.  
  27. NMsg
  28.  
  29. Msg
  30.  
  31. Map
  32.  
  33.  
  34.  
  35.  
  36. 1 - INTRODUCTION
  37.         S.C.O.O.P., SystΦme de Communication OrientΘ Objet pour Protocoles est un simulateur fonctionnant au dessus d'Unix. Il reprend dans ses grandes lignes les fonctionnalitΘs du simulateur x-Kernel. La principale propriΘtΘ de SCOOP est qu'il est entiΦrement conτu dans un langage orientΘ objet : le C++.
  38. Certaines fonctionnalitΘs de x-Kernel ont ΘtΘ assouplies ou supprimΘes (gestion de la mΘmoire, gestionnaire dÆΘvΘnements, gestion des processus), le but Θtant de montrer une implΘmentation dans un langage orientΘ objet de la composante principale de x-Kernel : son gestionnaire de communication, α la base a ΘtΘ conτu en langage C. SCOOP simule les diffΘrentes couches rΘseau (UDP, IP, ARP, ICMP) le driver ethernet Θtant en fait l'ouverture d'une socket. Nous avons conservΘ la modularitΘ d'x-Kernel, et donc la possibilitΘ d'implΘmenter facilement un nouveau protocole.
  39. 2 - CHOIX DE D╔VELOPPEMENT
  40.         SCOOP a ΘtΘ dΘveloppΘ en C++ avec le compilateur GNU (g++, version 1.40)  sur des stations de travail SONY News. AprΦs l'Θtude du systΦme d'exploitation Choices et de
  41. x-Kernel il nous a semblΘ que le langage C++ est le plus adaptΘ pour l'Θlaboration de SCOOP. De plus, notre connaissance du langage C, nous permettait sans doute un passage plus rapide vers le C++ que vers un autre langage orientΘ objet.
  42.     Bien que x-Kernel ait ΘtΘ pensΘ dans un style orientΘ objet, il a fallu Θtudier un nouveau fonctionnement pour pouvoir l'adapter au C++ tout en gardant sa philosophie.
  43. Notre premier travail a ΘtΘ de dΘfinir les classes d'objets ainsi que les liens d'hΘritage entre les classes. Ensuite nous avons Θcrit tout le code en C++, parfois nous n'avons fait qu'une simple transposition. Mais le C++ Θtant beaucoup moins permissif que le langage C, nous avons souvent rΘΘcrit le code d'une autre maniΦre en pensant en terme d'objet, et non plus en terme procΘdural comme avec le langage C.
  44. 3 - PR╔SENTATION G╔N╔RALE
  45.         Le simulateur SCOOP fonctionne au dessus d'Unix et simule les diffΘrentes couches du rΘseau. Nous avons choisi un modΦle de type client-serveur pour illustrer le fonctionnement de SCOOP. SCOOP est lancΘ simultanΘment sur deux stations : une en mode client et l'autre en mode serveur. Le serveur aprΦs son initialisation (on simule le boot d'une station), est en attente d'une interruption. Le client, aprΦs lui aussi Ωtre passΘ par une phase d'initialisation, envoi une sΘrie de messages au serveur.
  46. 4 - ORGANISATION HI╔RARCHIQUE DES CLASSES
  47.  
  48. 4 - ORGANISATION HI╔RARCHIQUE DES CLASSES
  49.         Certaines classes de SCOOP possΦdent des liens d'hΘritage entre elles. Seul l'hΘritage
  50. simple est utilisΘ dans l'organisation hiΘrarchique.
  51.     Les classes sont dΘcoupΘes en cinq catΘgories, les classes spΘcifiques pour chaque
  52. protocoles, les classes pour la gestion des messages, les classes pour la gestion des tΓches,
  53. la classe Scoop pour l'interface commune des protocoles et la classe User pour l'utilisation
  54. et les test de SCOOP..
  55. 4.1 - LES CLASSES PROTOCOLES
  56.         Pour chaque protocole est dΘfini une classe principale ôPROTLöaddr (ETHaddr,
  57. ARPadr, etc ...) qui hΘrite de la classe Scoop, et dΘfinit les fonctionnalitΘs du protocole en
  58. question. D'autres classes complΦtent leur fonctionnement, mais n'ont pas de lien
  59. d'hΘritage, ce sont des classes isolΘes, nommΘes classes internes.
  60.     Les classes internes du protocole ETH (driver ethernet) :
  61.         ò Driver, Entete, Packet.
  62.     Les classes internes du protocole ARP (Address Resolution Protocole) :
  63.         ò ArpPak, arpstate, arpent.
  64.     Les classes internes du protocole ICMP (Internet Control Message Protocole) :
  65.         ò ICMPHeader, ICMPrefix, ICMPBadMsg, ICMPFormat,
  66.         ò ICMPRedirect, ICMPErreur, ICMPTimeStamp, ICMPState.
  67.     Les classes internes du protocole IP (Internet Protocole) :
  68.         ò IPhost, IPheader, MSGlist, IPtimer, RR, IPstate, Activeid,
  69.         ò ReassemblyKey, RTE, IPOption.
  70.     Les classes internes du protocole UDP (User Datagram Protocole) :
  71.         ò Header, Sstate, Activepid.
  72. 4.2 - LES CLASSES MESSAGES
  73.         Les classes messages fournissent une panoplie de mΘthodes pour manipuler les objet
  74. messages au cours de leur passage dans les diffΘrentes couches rΘseau. Ces mΘthodes
  75. permettent entre autre la manipulation des en-tΩtes et le dΘcoupage/rΘassemblage des
  76. messages.
  77.     Les classes messages :
  78.         ò NMsg, Msg.
  79. 4.3 - LA GESTION DES TACHES
  80.  
  81. 4.3 - LA GESTION DES TACHES
  82.         SCOOP offre un gestionnaire de tΓches fonctionnant α travers une liste chaεnΘe
  83. suivant deux types de queue : F.I.F.O. et L.I.F.O.. Chaque tΓche est dΘsignΘe par un appel
  84. de fonction ou l'exΘcution d'une mΘthode, ayant comme arguments les variables ôargcö,
  85. pour mentionner le nombre d'arguments, et ôargvö, pour la liste des arguments. Cette
  86. gestion existe α travers trois classes : Scheduler, ListeTache, et Tache, la premiΦre classe
  87. est la principale, et sert d'interface pour les besoins des autres objets dΘsirant gΘrer une liste
  88. de tΓches.
  89. 4.3.1 - LA CLASSE TACHE
  90.         Elle possΦde les informations liΘes α une tΓche :
  91.             ò un identifiant unique,
  92.             ò la tΓche α exΘcuter avec ses arguments,
  93.             ò un numΘro de prioritΘ,
  94.             ò une pile,
  95.             ò des pointeurs de chaεnage,
  96. et offre des services de rΘcupΘration, de destruction, et de modification d'informations liΘs
  97. α l'objet impliquΘ.
  98. 4.3.2 - LA CLASSE LISTETACHE
  99.         Elle ne possΦde que deux pointeurs de liste, un de fin de liste et un autre de dΘbut.
  100. Ses services ciblent uniquement la manipulation des listes ainsi que des tΓches α travers une
  101. liste.
  102. 4.3.3 - LA CLASSE SCHEDULER
  103.         Elle gΦre l'ordonnancement des tΓches appartenant α une liste. A chaque objet
  104. Scheduler est associΘe une liste gΘrΘe par des mΘthodes de rΘcupΘration et d'insertion des
  105. tΓches suivant le type de queue choisie.
  106. 4.3.4 - LA HI╔RARCHIE
  107.         La hiΘrarchie de la gestion des tΓches se dΘcompose en trois classes principales. La
  108. classe Scheduler hΘrite des deux autres classes, ce qui lui configure α la dΘclaration d'un
  109. objet, les mΘthodes et services des autres classes, et surtout une gestion transparente dÆune
  110. ou plusieurs listes, par lÆobjet qui utilise les services de la classe Scheduler.
  111. 4.4 - LA CLASSE SCOOP
  112.         La principale fonction de la classe Scoop est de dΘfinir l'interface virtuelle des
  113. protocoles de communication (IP, UDP, ICMP, ARP, ETH). Les mΘthodes appartenant α
  114. l'interface commune sont dΘfinies dans la classe Scoop comme mΘthode virtuelle (notion de
  115. polymorphisme).
  116.     Ces mΘthodes sont redΘfinies au niveau de chaque classe de protocole qui  hΘrite de
  117. la classe Scoop. Ainsi pour une mΘthode donnΘe, il existe pour chaque classe de protocoles
  118. une mΘthode qui est personnalisΘe pour chaque protocole. Prenons l'exemple de la
  119. mΘthode Push () qui est dΘfinie comme mΘthode virtuelle dans la classe Scoop et qui est
  120. redΘfinie dans les classes UDPaddr et IPaddr.
  121.     DΘfinition de la classe supΘrieure Scoop :
  122.     DΘfinition de la classe IPaddr qui hΘrite des propriΘtΘs de la classe parent Scoop :
  123.     DΘfinition de la classe UDPaddr qui hΘrite des propriΘtΘs de la classe parent Scoop :
  124.     Ainsi l'appel de la mΘthode Scoop::Push () avec le protocole IP permet d'appeler la
  125. mΘthode IPaddr::Push () de maniΦre transparente. Il n'est pas obligatoire pour une classe
  126. hΘritant de la classe Scoop de redΘfinir une mΘthode virtuelle. Par exemple la classe
  127. ARPaddr hΘrite bien de la classe Scoop mais ne comporte pas de mΘthode Push ().
  128. 4.5 - LA CLASSE USER
  129.         La classe User permet de tester et dÆutiliser S.C.O.O.P.. Elle hΘrite de la classe
  130. Scoop pour Ωtre aisΘment manipulΘe par les objets polymorphes du graphe.
  131.     La classe User correspond au niveau applicatif de SCOOP. Elle simule la couche
  132. utilisateur de lÆapplication. Elle se situe dans la hiΘrarchie des classes au mΩme niveau que
  133. les protocoles pour les manipuler aisΘment.
  134.     Ne faisant pas partie de lÆinitialisation du graphe de dΘpart, lÆobjet User crΘΘ possΦde
  135. certaines mΘthodes de lÆinterface virtuelle qui lui permettent dÆenvoyer et de recevoir des
  136. messages. ConstituΘe principalement de deux mΘthodes : Client et Server, lors de lÆappel
  137. α la mΘthodes d'initialisation de la classe, une tΓche est gΘnΘrΘe, et est considΘrΘe soit
  138. comme application de type client, ou soit comme application de type serveur, suivant le
  139. mode de lancement.
  140.     Le fait de crΘer une classe User hΘritant de la classe Scoop, permet une manipulation
  141. plus fine de lÆensemble de toutes les classes. En utilisant la classe User on comprend mieux
  142. la facilitΘ de crΘer un nouveau protocole et de lÆinsΘrer dans la hiΘrarchie existante, au lieu
  143. dÆavoir une architecture de couches statiques, il est plus intΘressant dÆavoir tous les
  144. protocoles au mΩme niveau et de les interconnecter α son grΘ.
  145.     La classe User est crΘΘe pour mettre en Θvidence une des utilisations de SCOOP.
  146. 5 - FONCTIONNEMENT G╔N╔RAL
  147.  
  148. 5 - FONCTIONNEMENT G╔N╔RAL
  149.         SCOOP fonctionne α travers la crΘation d'un graphe de protocoles qui s'initialise au
  150. lancement de l'application (client ou serveur). NommΘ graphe polymorphe, car chacun des
  151. noeuds peut prendre la forme de l'objet protocole qui lui est assignΘ, il reprΘsente le chemin
  152. principal que prennent les messages. La seule chose qui n'est pas prise en compte, est la
  153. cohΘrence des envois de messages entre les diffΘrents protocoles, qui est laissΘe α la charge
  154. de l'utilisateur, cÆest-α-dire dans son choix de crΘation du graphe. Une fois le graphe
  155. constituΘ, une phase dÆinitialisation est lancΘe, qui est en partie une prise de connaissance
  156. des noeuds entre eux.
  157.     Tous les noeuds sont des objets qui appartiennent α la classe Scoop, grΓce α
  158. l'interface virtuelle dΘfinie par cette classe, chaque protocole initialisΘ α l'intΘrieur de
  159. chaque noeud peut communiquer avec les autres α l'intΘrieur du graphe, soit dans le sens
  160. montant, vers l'application utilisateur, soit dans le sens descendant, vers le rΘseau.
  161. 5.1 - LÆINTERFACE VIRTUELLE
  162.         LÆinterface virtuelle, appelΘe aussi interface commune, reprΘsente la partie principale
  163. de la classe Scoop, cÆest par elle que transitent les messages, et cÆest elle qui assure la
  164. modularitΘ de chaque protocole, ainsi que leur intΘgration dans le graphe. Elle est
  165. commune α chaque protocole grΓce α la notion de hiΘrarchie.
  166.     Les mΘthodes sont dΘclarΘes virtuelles, et dans chaque sous classe il existe une
  167. mΘthode correspondante qui redΘfinit les actions de lÆobjet appelant. La notion de mΘthode
  168. virtuelle est ici trΦs importante, cÆest grΓce α elle que la notion de polymorphisme donne
  169. tout son potentiel α la manipulation des objets protocoles. Pour chaque objet de la classe
  170. Scoop, et pour chaque appel α une mΘthode virtuelle, ce ne sont pas les actions liΘes au
  171. type de lÆobjet, cÆest-α-dire sa classe, qui sont appelΘes, mais les actions de lÆobjet
  172. factorisΘ.
  173.     Dans le cas o∙ lÆobjet Scoop scp1 considΘrΘ prend la forme dÆun objet obj1 dÆune
  174. sous classe UDPaddr, par exemple, au moment de lÆappel dÆune mΘthode de la classe
  175. Scoop, cÆest la mΘthode de la classe UDPaddr qui est appelΘe, α laquelle appartient obj1,
  176. dans la mesure o∙ cette derniΦre classe redΘfinit la mΘthode et ses actions, dans le cas
  177. contraire, cÆest la mΘthode de lÆobjet scp1 qui est appelΘe.
  178. 5.2 - LA COMMUNICATION ENTRE LES NOEUDS
  179.         Son mode de fonctionnement peut Ωtre schΘmatisΘ par une couche qui enveloppe
  180. chaque protocole, qui permet α chaque message dÆΘvoluer dÆobjet en objet. Chaque noyau
  181. de ces nouvelles entitΘs est inconnu des autres, seule la partie extΘrieure est considΘrΘe
  182. comme visible
  183.     LÆabstraction faite par lÆinterface virtuelle permet les envois de message α lÆintΘrieur
  184. du graphe. A chaque noeud, traversΘ par un message, le protocole associΘ lui applique ses
  185. mΘthodes et le renvoi au prochain noeud, et ainsi de suite, suivant le sens du message.
  186.     Une fois le graphe crΘΘ et initialisΘ, SCOOP exΘcute les tΓches de lÆutilisateur qui a
  187. choisi le r⌠le de lÆapplication, soit en serveur, soit en client. Dans les deux cas, les
  188. messages sont remontΘs jusquÆα la racine du graphe, et sont ensuite laissΘs α la charge de
  189. lÆapplication utilisateur, la classe User donne une des possibilitΘs dÆutilisation du graphe.
  190. 5.3 - CR╔ATION DES OBJETS DE MODEL╔ SESSION
  191.         A la maniΦre de x-Kernel, SCOOP reprend les modΦles Session et Protocole. La
  192. crΘation des objets de modΦle Session se fait α lÆinitialisation dÆune connexion entre un
  193. client et un serveur. Avant dÆenvoyer ses messages, lÆapplication cliente doit ouvrir une
  194. session sur le noeud du graphe de niveau infΘrieur, grΓce α la mΘthode virtuelleOpen () de
  195. la classe Scoop, avec comme arguments, lÆobjet protocole reprΘsentant lÆapplication, doit
  196. Ωtre reprΘsentΘ par un objet polymorphe de la classe Scoop, le noeud du protocole dΘsirΘ
  197. (UDP, IP, ETH, ...), reprΘsentΘ aussi par un objet polymorphe, celui-ci peut Ωtre aisΘment
  198. rΘcupΘrΘ par la mΘthode GetProtlByName () de la classe Scoop, et les participants de cette
  199. connexion.
  200.     A lÆappel de la mΘthode virtuelle Open () sur un noeud du graphe, ce dernier se
  201. charge de rΘpercuter lÆappel sur le noeud de niveau infΘrieur, et ainsi de suite. A chaque
  202. rΘpercussion sur les noeuds infΘrieurs du graphe, un objet polymorphe de modΦle Session
  203. est retournΘ. LÆapplication cliente recevant en gage de bon dΘroulement de lÆappel, un
  204. objet de modΦle Session, par cet objet, lÆapplication peut envoyer ses messages sur le
  205. protocole choisi.
  206.     Par la crΘation de ces objets de modΦle Session, une liaison dynamique est crΘΘe, elle
  207. garantit lÆacheminement des messages dÆune connexion, il est ainsi possible d'ouvrir
  208. plusieurs connexions pour des acheminements diffΘrents.
  209. 5.4 - LÆACHEMINEMENT DES MESSAGES
  210.         Les messages sont transmis α travers le graphe grΓce α deux principales mΘthodes :
  211. Push () et Pop (). La premiΦre pousse un message dans le sens descendant, alors que la
  212. seconde pousse le message vers le sens ascendant. Dans le cas de plusieurs objets de
  213. modΦle Session pour un mΩme objet de modΦle Protocole, la mΘthode Demux () se charge
  214. de diriger le flux de messages vers le bon objet Session.
  215. 5.5 - LA GESTION DES MESSAGES
  216.         Les Classes Msg et NMsg fournissent un jeu de mΘthodes pour manipuler les objets
  217. messages (ajout ou retrait des en-tΩtes, assemblage et rΘassembage des messages, etc...).
  218. La classe Map est utilisΘe par les protocoles pour diriger un paquet qui arrive d'un
  219. protocole de niveau supΘrieur, ou infΘrieur, vers l'objet Session appropriΘ. Ces mΘthodes
  220. reprennent en grande partie la librairie message fournie dans x-Kernel. Le message est
  221. composΘ de trois ΘlΘments :
  222.     ò Une pile qui englobe les en-tΩtes du message.
  223.     ò Un index qui reprΘsente le haut de la pile.
  224.     ò Un pointeur vers un graphe de buffer qui englobe les donnΘes.
  225.     Le principale avantage de cette structuration des messages est que les en-tΩtes sont
  226. ajoutΘs ou enlevΘs en manipulant la pile, sans recopier le message. Lorsque le message est
  227. de petite taille il est contenu dans la pile. Lorsque le message est plus important il est
  228. reprΘsentΘ par un graphe acyclique.
  229.     Lorsqu'un message parcoure les diffΘrents protocoles, des en-tΩtes sont ajoutΘs ou
  230. enlevΘs en dΘplaτant l'index du haut de la pile. Chaque protocole par lÆintermΘdiaire des
  231. mΘthodes virtuelles Push () et Pop () peut insΘrΘ, ou lÆextraire, son en-tΩte. Mais seule la
  232. mΘthode virtuelle Demux () extrait les informations de lÆen-tΩte pour diriger le message
  233. vers le bon objet Session, dans le cas ou le message vient du rΘseau.
  234.     Lorsque le message ne peut plus Ωtre contenu dans la pile, la pile est de taille fixe et
  235. ne peut donc pas Ωtre agrandie, un dΘcoupage en forme de graphe est alors effectuΘe. Dans
  236. le schΘma suivant la structure du message est dans une Θtape intermΘdiaire, le message est
  237. trop grand pour faire partie de la pile, mais il est contenu dans un simple buffer.
  238.     Avant dÆenvoyer un message dans le graphe des protocoles, il faut obtenir
  239. lÆouverture dÆobjets de type Session, qui, avec les participants de la communication,
  240. permettent de baliser le chemin que prennent les messages. Cet service sÆobtient par la
  241. mΘthode Open () de la classe Scoop. Cette mΘthode rΘpercute la demande sur lÆensemble
  242. du graphe, et renvoie lÆobjet de type Session, en rΘponse dÆun bon dΘroulement, ensuite il
  243. suffira dÆenvoyer les messages par lÆintermΘdiaire de cet objet, et grΓce au service de la
  244. mΘthode Push () de la classe Scoop. Chaque objet session sÆoccupe de gΘrer la liaison
  245. entre deux objets de type Protocole, et permet ainsi le dΘplacement des messages α travers
  246. les diffΘrents protocoles de communication.
  247.     Dans le cas ou un message remonte du rΘseau, la mΘthode virtuelle Demux (), dirige
  248. le message dans son parcours, grΓce aux objets de la classe Map, qui sauvegardent dans
  249. une liste les diffΘrents objets Scoop de type Session, pour les diffΘrents protocoles
  250. existants. La gestion de cette liste est assurΘe par les mΘthodes de la classe Map, elle
  251. permet ainsi α chaque protocole de possΘder plusieurs objets de type Session, pour assurer
  252. les diffΘrents voyages α travers le graphe des messages. LÆobjet Map gΦre sa liste, par
  253. ôhash codingö , par lÆintermΘdiaire de clΘs, α travers une table, ainsi chaque protocole
  254. peut rΘcupΘrer lÆobjet de type Session correspondant au message arrivant.
  255.     Les objets Map peuvent sauvegarder dans leur liste tout type dÆobjet, puisque leur
  256. services sont aussi utilisΘs pour y sauvegarder des objets de la classe.RTE, classe interne α
  257. la classe IPaddr.
  258. 6 - IMPL╔MENTATION D'UN PROTOCOLE
  259.  
  260. 6 - IMPL╔MENTATION D'UN PROTOCOLE
  261.         SCOOP permet une implΘmentation simple d'un nouveau protocole de
  262. communication. La premiΦre rΦgle α respecter est l'hΘritage que ce nouveau protocole doit
  263. obtenir de la classe supΘrieure Scoop. Par cette simple adjonction le nouveau protocole
  264. implΘmentΘ gagnera en abstraction pour son utilisation α partir d'un objet Scoop.
  265.     Mais pour une correcte coopΘration avec les autres protocoles, la classe principale de
  266. cette nouvelle implΘmentation doit obligatoirement possΘder l'interface virtuelle α toutes les
  267. classes dΘrivΘes de la classe majeure Scoop. Cette interface commune permet une
  268. utilisation immΘdiate de ces fonctionnalitΘs par d'autres objets, et inversement.
  269.     En respectant ce minimum, la coordination entre les objets se fera automatiquement.
  270. A l'intΘrieur de la nouvelle classe, la crΘation et l'appel α des objets internes sont tout α fait
  271. acceptΘes. La nouvelle classe doit Ωtre considΘrΘe par les autres objets protocoles, comme
  272. une "boite avec des entrΘes", chaque objet effectue son travail sur le message dont il
  273. connaεt le format principal commun α toute la hiΘrarchie.
  274. 6.1 - IMPL╔MENTATION DE LA CLASSE UDPaddr
  275.         Dans le premier stade de lÆimplΘmentation il est nΘcessaire de modulariser la nouvelle
  276. classe en dΘtachant les diffΘrents services de la classe. La classe UDPaddr est la plus
  277. simple α implΘmenter, reprenant les fonctionnalitΘs de la couche UDP de x-Kernel, et
  278. nÆaffectant que trΦs peu les messages, son implΘmentation sÆest faite α travers les mΘthodes
  279. virtuelles de la classe Scoop. La classe UDPaddr ne possΦde que trΦs peu de mΘthodes
  280. non hΘritΘes de la classe supΘrieure, elle redΘfinit la majeure partie des mΘthodes.
  281.     Reprenant les fonctionnalitΘs dÆune couche UDP standard elle affecte les messages α
  282. travers la classe Header interne, qui contient les informations : du ôchecksumö, de la taille,
  283. et des ports de communication du message qui transite par elle. Les classes sont dites
  284. internes, dans le cas o∙ elles correspondent α une spΘcificitΘ dÆun protocole, et ne sont
  285. connus dÆaucune autre classe que la classe principale du protocole, cÆest-α-dire ici
  286. UDPaddr.
  287. 6.2 - IMPL╔MENTATION DE LA CLASSE ETHaddr
  288.         La classe ETHaddr redΘfinit les mΘthodes hΘritΘes de la classe Scoop, et gΦre les
  289. messages avec la classe Driver. SCOOP Θtant un simulateur au niveau utilisateur, grΓce α
  290. la classe Driver, les objets ETHaddr envoient et reτoivent les messages, comme si ces
  291. derniers circulaient α travers un driver communiquant avec la carte ethernet de la station.
  292. La classe Driver sÆoccupe de lÆenvoi vΘritable des messages sur le rΘseau via le mΘcanisme
  293. des sockets. Dans le cas dÆune modification de SCOOP, par lÆajout dÆun dialogue direct
  294. avec la carte rΘseau, il suffira dÆajouter α la classe Driver une sous classe qui se chargera
  295. du dialogue. Le choix pourra alors se faire entre la simulation ou lÆaccΦs direct au rΘseau,
  296. par lÆintermΘdiaire dÆun objet Driver dΘjα existant dans la classe ETHaddr par le simple
  297. appel de tel ou tel service.
  298. 7 - COMPILATION ET PORTAGE
  299.     Le choix d'un compilateur C++ est un ΘlΘment trΦs important en cas de portage d'une
  300. application. Le C++ n'est pas suffisamment normalisΘ, il est en Θvolution constante, de
  301. plus, la plupart dÆentre eux se contentent de gΘnΘrer du code C qui sera en suite recompilΘ.
  302. Pour SCOOP le compilateur g++ du GNU a ΘtΘ choisi pour sa plate-forme qui peut
  303. Ωtre installΘe sur de nombreuses machines (HP, SUN, SONY, PC compatibles, etc ...), ce
  304. qui garantit, dans le meilleur des cas, un code indΘpendant du matΘriel, dans le soucis
  305. d'Θcrire un code C++ "portable", car malgrΘ les caractΘristiques de ce langage de haut
  306. niveau, le C++ est loin d'Ωtre implΘmentΘ de la mΩme maniΦre sur toutes les machines.
  307.     C'est pour toutes ces raisons, que SCOOP a ΘtΘ testΘ avec d'autres compilateurs, dit
  308. conforme AT&T : sur SONY, HP, SUN, et micro-ordinateurs (PC : Turbo C++,
  309. Commodore Amiga : Lattice C++). Il s'est avΘrΘ que certaines implΘmentations C++ sont α
  310. manipuler avec prudence. La liste de toutes ces anomalies ne sera pas ici dΘtaillΘe, mais
  311. quelques particularitΘs utilisΘes dans SCOOP sont α dΘtailler.
  312.     Les pointeurs sur les mΘthodes et leur utilisation par des objets de types diffΘrents
  313. peuvent Ωtre α l'origine de nombreuses erreurs de programmation. Avec le langage C
  314. l'utilisation de pointeurs sur fonctions est trΦs facile, et cette facilitΘ se retrouve avec le
  315. C++, la difficultΘ commence quand il s'agit de pointeurs sur les mΘthodes d'un objet
  316. particulier manipulΘ par un autre objet de type diffΘrent.
  317.     En C++ il est possible de prendre l'adresse d'une fonction membre, le principal
  318. inconvΘnient est qu'il est obligatoire de prΘciser le type du pointeur [str86]. Et suivant les
  319. compilateurs cette implΘmentation est plus ou moins stricte, ou bien oblige une grammaire
  320. diffΘrente, ce qui peut obliger une hiΘrarchie non souhaitΘe pour arriver au service voulu.
  321.     L'utilisation du type ôconstö, α la place de certain ô#defineö n'est pas toujours ce qu'il
  322. y a de mieux α faire, surtout pour certain passage d'argument aux mΘthodes, qui modifie la
  323. valeur de l'argument concernΘ, le compilateur C++ sur SUN est le seul α se ôplanterö
  324. littΘralement sans donner la moindre indication. Le passage d'argument implicite est
  325. souvent proscrit, ce qui oblige α prΘciser le type exact de l'argument par des conversion de
  326. types souvent abusifs et pouvant apparaεtre inutiles.
  327. 8 - ORGANISATION ET LANCEMENT DE S.C.O.O.P.
  328.         Les sources de S.C.O.O.P. se regroupent dans un rΘpertoire Scoop, comprenant deux
  329. rΘpertoires principaux :
  330.     inc : qui contient tous les fichiers include .h, qui possΦdent en grande partie
  331.        les dΘfinitions des classes.
  332.      src : qui contient les fichiers sources .cc. Ils possΦdent les sources des mΘthodes
  333.        des classes, et vont donc de paire avec les fichiers du rΘpertoire inc..
  334.     Pour chaque classe dΘfinie, il existe, un ou plusieurs fichiers ôincludeö et un fichier
  335. source. Par exemple pour la dΘfinition dans SCOOP du protocole UDP, il existe un fichier
  336. udp.cc qui contient uniquement la dΘfinition des mΘthodes, un fichier udp.h pour la
  337. dΘfinition de la classe UDPaddr, et un fichier udp_i.h pour la dΘfinition des classes internes
  338. α la classe UDPaddr.
  339. Les autres rΘpertoires sont :
  340.     ò RCS : contient les versions de lÆensemble des fichiers.
  341.     ò tmp : pour les fichiers temporaires.
  342. Les autres fichiers sont :
  343.     ò bmakeobj : fichier makefile pour la gΘnΘration de fichiers objets de compilation.
  344.     ò bmakebin : fichier makefile pour la gΘnΘration de fichiers binaires de
  345.         compilation.
  346.     ò mkc : lance une compilation totale de SCOOP.
  347.     ò mkr : lance un archivage RCS des fichiers modifiΘs.
  348.     ò version : script kshell de gestion des versions de lÆensemble des fichiers.
  349.     Pour compiler en mode ôdebugö, et obtenir la trace de lÆexΘcution du programme il
  350. suffit de lancer la compilation avec le script mkc et lÆoption -g.
  351.     > mkc -g
  352.     Une fois lÆexΘcutable, nommΘ main, crΘΘ, il suffit de le lancer soit en mode client soit
  353. en mode serveur. Pour cette exΘcution on considΦre quÆune application est attachΘe α
  354. SCOOP pour le bon fonctionnement de lÆexΘcutable. La classe User dΘfinit dans les fichiers
  355. user.h et user.cc est un exemple dÆutilisation.
  356.     > main -s -p <numero_de_port >        # en mode serveur.
  357.     > main -c <serveur> -p <numero_de_port>    # en mode client.
  358.     Dans la crΘation dÆun systΦme de communication orientΘ objet pour protocoles, un
  359. nouveau concept est apportΘ aux techniques de communication entre machines distantes.
  360. La maniΦre de vΘhiculer les messages nÆΘvolue que trΦs peu, lÆatout principal se trouve
  361. dans la modularitΘ dÆun tel systΦme, seuls les protocoles UDP/IP ont ΘtΘ implΘmentΘs, mais
  362. le principe de base est lα, pouvoir suffisamment modulariser des protocoles pour les
  363. interconnecter entre eux, ou les faire coexister, dans un minimum dÆeffort de gestion.
  364.     Si un tel systΦme peut Ωtre dΘveloppΘ plus profondΘment, et gΘnΘralisΘ, la venue dÆun
  365. nouveau protocole ne serait plus un problΦme, mais reviendrait α une factorisation dans une
  366. hiΘrarchie dΘjα existante. De plus lÆΘvolution dÆun des protocoles nÆaffecterait pas
  367. lÆimplΘmentation des autres.
  368.     Si on regarde S.C.O.O.P. avec du recul, nÆassistons nous pas α lÆΘmergence dÆune
  369. nouvelle norme ?, une de plus ?. Une norme dictant la maniΦre dÆimplΘmenter un protocole
  370. dans un systΦme qui superviserait la coordination de tous les protocoles.
  371.     A partir du moment ou lÆon dΘsire un systΦme regroupant une compatibilitΘ la plus
  372. gΘnΘrale, il est nΘcessaire dÆΘdifier une base qui devra Ωtre respectΘe, ce minima, qui est
  373. commun α tous, pourra rΘunir les diffΘrents protocoles de communication. La notion
  374. dÆorientΘ objet aide α gΘnΘraliser un tel concept, puisquÆil est α la base mΩme du mode de
  375. programmation, la hiΘrarchisation et la rΘutilisation du code existant sont lα pour le
  376. rappeler.
  377. Forme dÆadressage dispersΘ, sur une table de taille limitΘe au nombre de clΘs utilisΘs. Une mΘthode
  378. permet dÆassocier α toute clΘ une valeur dans un interval donnΘ.
  379.