• Aucun résultat trouvé

1.4 De la théorie à la pratique

2.1.1 L’agent, évolution de l’objet ?

Van Dyke Parunak et Odell proposent d’expliquer l’évolution des approches de pro- grammation, de la programmation monolithique à la programmation orientée agent, de la manière présentée dans le tableau 2.1. Dans la programmation monolithique, les unités de logiciel représentaient le programme dans sa globalité, entièrement spécifié par le program- meur et contrôlé par le système. La programmation modulaire répondit à l’augmentation en terme de complexité, de besoins de mémoire des applications, ainsi qu’au besoin de réutili- sabilité. Par contre l’état des unités (modules) restait toujours sous contrôle externe par ins- tructions d’appel. L’évolution logique fut la décomposition des programmes en objets. Ici, l’état des objets est encapsulé grâce à des méthodes d’accès ou d’instanciation. Par contre en programmation orientée objet classique, les objets sont considérés comme passifs et donc soumis au contrôle par envoi de messages et appel de méthodes. Enfin, afin de répondre aux besoins des agents, la programmation orientée agent, qui n’est pour l’instant qu’à l’état de concept, se propose de concevoir les agents comme des "objets actifs avec initiative" – un peu comme les acteurs en conception objet – qui ont leur propre "thread" de contrôle et sont mus par des règles, des buts ou des intentions [Van Dyke Parunak, 1997; Odell, 2002].

                                                               ! " # $ %& '! " # $ %& '! " # $ %& '! " # $ %& ( )            *       +       , - . &%& , - . &%& / . &%& / . &%& (         *        0      , - . &%& , - . &%& 1 #22& "3 , - . &%& 1 &44#5& 3 / . &%& 1 % 6 5 " &4 7 8 ! . 4 3

Tableau 2.1 — L’évolution des approches de programmation : de la programmation mo- nolithique à la programmation objet [Odell, 2002].

Odell soulève la question de l’autonomie des agents suivant deux axes : l’autonomie dynamique (de passif à pro-actif en passant par réactif) et l’autonomie non-déterministe (d’attendu à inattendu) [Odell, 2002]. Les objets peuvent être identifiés comme des entités passives au comportement attendu alors que des agents, comme des agents de courtage, possèdent un comportement inattendu entre le réactif et le pro-actif. Les systèmes naturels, comme les colonies de fourmis, se placent en haut des deux échelles : pro-actifs et inatten- dus.

Concernant les interactions entre agents comparées aux interactions objet à objet, les agents peuvent bien sûr faire appel à des méthodes au sens objet du terme, mais y ajoutent un contenu plus riche, comme par exemple avec les actes de langage FIPA ACL ou KQML ACL – il n’est pas rare d’ailleurs de trouver des librairies dédiées à ces actes dans les plates- formes de développement de systèmes multi-agents. Alors que les objets voient les autres objets comme des fournisseurs de services par appel de méthodes, les notions de conversa- tions, de communications à long terme et de réseaux de partenaires sont aussi des notions importantes en programmation orientée agent. En effet, les agents peuvent construire des réseaux de contacts et donc posséder des capacités cognitives correspondantes comme une mémoire ou des croyances sur les autres agents.

Si nous considérons les agents comme une évolution des objets, voici les différences conceptuelles notables à prendre en compte, par exemple, lors de l’identification des agents dans un système :

Décentralisation : les objets sont vus classiquement comme des unités au contrôle centralisé – bien qu’ils puissent implanter des systèmes distribués. Les agents, au contraire, sont par natures autonomes en décision et donc aucun contrôle global ne peut s’exercer sur eux ;

Classification multiple et dynamique : une fois créé par un autre objet, un objet ne peut changer de classe ou d’héritage. Si l’on pousse le concept d’agent logiciel plus loin, il devient possible pour des agents de muter et de changer de classe ;

Caractéristiques au niveau des instances : les attributs et méthodes possédés par les objets sont définis par leur classe. Dans le cas des agents, ils ne sont pas définis au niveau des classes mais au niveau des instances de classe ;

Faible en impact et en portée : les objets ou les agents peuvent être de faible ou de grosse gra- nularité. Par contre, les objets ont souvent plus d’impact sur le système dans sa globalité qie les agents qui n’ont des actions qu’au niveau des autres agents et non du système [Van Dyke Parunak, 1997]. Cette idée rejoint le principe de localité apparaissant dans la définition d’un agent [Ferber, 1995] ;

Analogie à la nature : les caractéristiques d’autonomie dynamique et de non-déterminisme rendent les agents plus proches des systèmes naturels que n’en sont les objets. La notion de système ouvert avec apparition et disparition d’agents, va aussi dans ce sens. En définitive, les agents peuvent être vus comme des objets ayant des règles structurelles ou comportementales supplémentaires – définies par des stéréotypes ou des extensions du métamodèle. La plupart des concepts manipulés par la communauté agent peuvent être modélisés en objet (ontologie, dynamique d’état, ...) mais certains axes sont encore peu ex- plorés. Il semble aussi que la caractéristique d’autonomie (qu’elle soit dynamique ou non-

2.1. L'inuence du paradigme objet

déterministe) d’un agent reste le point difficile de la conception d’agent – comme cela l’est toujours dans le domaine de l’intelligence artificielle. Le problème étant de trouver le bon niveau d’abstraction permettant de qualifier un agent d’autonome ou non. En effet, un agent reste toujours dépendant du système d’exploitation ou de la plate-forme sur laquelle il s’exé- cute, mais pas vis-à-vis des autres agents ou des objets qui l’entourent.