Bonjour les gens (il est tôt je sais.. mais pour moi il est tard lol)
Un package Ada peut être vu d'une certaine manière : comme un objet statique. Et avec la comparaison à l'objet, vient justement la question de savoir dans un tel ou tel cas : dois-je utiliser un package ou un objet ?
La question ne se pose pas avec les langages pour lesquels tout est objet, comme Eiffel par exemple (mais que j'ai abandonné depuis 3 ans). Seulement, on ne peut pas se servir du savoir faire spécifiques à ces langages pour répondre à la question concernant Ada, parce que ces compilateurs ne traitent pas les objets comme le fait un langage comme Ada.
La réponse est moyennement évidente (moyennement, car pas toujours), dans les cas où plusieurs intances doivent exister. Dans ce cas, on aura tendance à privilégier l'objet (et encore, pas toujours). Seulement voilà, même cette remarque ne suffit pas à répondre à la question, parce que le fait même d'avoir plusieurs instances simultanés ou pas n'est justement pas évidente à trancher.
Je prend deux exemples pour être plus clair.
Exemple #1: une application réseau basée sur des socket, aura typiquement plusieurs instances d'objet. Mais on pourra pourtant avoir seulement plusieurs instances de structures de données, et des méthodes s'appliquant à ces structures qui seront dans un package et non pas dans un objet.
Exemple #2: une application qui fait du "parsing" (c'est quoi le mot français pour parsing ?) sur des fichiers. Typiquement, on aura un fichier et un seul traité à chaque instant. Mais on pourra avoir à accéder à plusieurs fichiers simultanément. C'est un exemple du cas où la multiplicité des instances n'est pas évidente. N'oublions pas ici qu'il est question de package, et non pas encore d'application, et que lors de la création d'un package, si on le veut réutilisable, on doit le penser dans plusieurs cas possible. Mais toujours prendre le pire des cas n'est pas une bonne solution non-plus, car cette solution amène rapidement trop de lourdeur, et fini par anéantir l'intérêt pour le developpement orienté réutilisation.
On peut revenir à la remarque précédente : la question ne se pose pas avec certain langage. Alors concernant Ada, est-ce une pose chose ou pas que la question se pose ? Est-ce une mauvaise question induite par la distinction objet/package ? Faut-il plutôt voir les package Ada comme des clusters Eiffel et prendre plutôt l'habitude de toujours faire des objets ?
J'espère ne pas être trop confus.
Je pense que beaucoup on déjà rencontré des cas où ce genre de question de posait.. comment abordez-vous cette question délicate ?
Quelle sont les meilleurs habitudes à prendre selon vous ? Est-ce qjue le package doit imposé une structure aux applications ou est-ce que le package doit se plier à toutes les structures potentielles des applications qui l'utiliseront ?
Bijour Jovalise(on s'est croisé quelque part... mais où ?)
J'ai plutôt un faible moi aussi pour les types de données abstraits plutôt que pour les objets.
J'y vois au moins trois raisons (j'en avais trouvé d'autres, mais je les ai oublié) :
1) Le type de donnée abstrait garanti la tracabilité à la Ada (en remontant les renames, use et with, on peut toujours remonter à la définition d'une méthode de type abstraits... ce qui n'est pas la cas avec les méthodes d'objets en Ada 2005)
2) Pouvoir étendre l'ensemble des méthodes sans avoir à redéfinir un type.
3) Pouvoir répartir les définitions de méthodes dans plusieurs packages, sans avoir à définir plusieurs type.
Le type de donnée abstrait me semble en moyenne plus lisible, plus sûr et plus souple que l'objet avec notation pointée.