Accueil > Java > Lectures recommandées, Smalltalk et Squeak

Lectures recommandées, Smalltalk et Squeak

Beaucoup est du au fait que la syntaxe de Java est semblable à celle du C/C ++. L’utilisation d’une syntaxe semblable au C a aidé Java à devenir rapidement un language largement accepté. Des programmeurs expérimentés mais débutants en Java pouvaient rapidement se mettre à écrire du code, mais souvent ce code n’arrivait pas à garder l’esprit de Java. Ce qui manquait était l’aspect orienté objet de Java. Vous trouverez la plupart des racines OO (Orienté Objet) de Java dans Smalltalk. Certains des sujets chauds actuels qui tournent autour de Java ne sont pas du tout nouveaux aux yeux de la communauté Smalltalk.

Comme la plupart d’entre vous, je lis constamment . Pour me maintenir à un bon niveau en Java, je dois seulement consacrer du temps à estimer ce que les dernières API contiennent et quels nouveaux outils ont été développés par la communauté open-source. D’autres lectures sont destinées à aiguiser mon intellect.

Dans cet article, je vous recommanderai trois livres que j’ai récemment lus, et vous ferai part de ressources que j’ai trouvées utiles. Bien que deux de ces livres soient apparemment sur Smalltalk, le fait de les lire a amélioré ma programmation en Java. Comme toujours dans mes articles, j’ai en ma possession des jouets amusant que je partagerai avec vous. Cette fois, je vous indiquerai un téléchargement Smalltalk Carbon appelé Squeak qui fonctionne à merveille sous Mac OS X. La version Cocoa est sortie, mais quelques fonctionnalités manquent encore.

Pour les semaines à venir, je vous promets des articles émaillés de codes Java. Beaucoup de demandes des lecteurs tournent autour des API de vérification d’orthographe et de la parole. D’autres articles en cours aborderont le Java WebStart et iront plus loin dans XML. Un des livres que je mentionnerai dans cet article est le Guide to Better Smalltalk de Kent Beck de la bibliothèque de référence SIGS de la Presse de l’Université de Cambridge. Je recommande cette série d’articles sur Smalltalk aux développeurs Java. Sans le faire expressément, Beck prodigue aussi des conseils aux auteurs d’articles, conseils que j’ai récemment négligé de suivre.

Le mois dernier, j’ai promis un deuxième opus sur XML, et là je me sens franchement confus. J’essayerai de suivre le conseil de Beck et ne pas promettre que “la prochaine fois nous explorerons” quelque chose tant que cet article suivant n’a pas été soumis. Comme toujours, si vous avez des commentaires sur cet article ou des suggestions pour des articles futurs, n’hésitez pas à me les envoyer par courrier électronique à DSTEINBERG@CORE.COM (NDT : En anglais pour Steinberg ou en français à thierry@projectomega.org) avec “O’Reilly Mac Java” comme sujet.

Apprendre des langages orientés objet sans apprendre les objets

Chaque programme Java commence sa vie en invoquant une méthode avec la signature suivante : public static void main(String[] args). Chaque cours d’introduction à Java doit décider jusqu’où il faut aller dans l’explication aux étudiants de cette signature.

Quelque instructeurs commencent par parler des oppositions entre public, privé et protégé. Ces instructeurs continuent en expliquant ce qu’est une méthode statique. Cette méthode particulière ne retourne rien et a donc un type de retour “void“. Mais même quand une méthode n’a pas de valeur de retour, vous devez expliquer quel est son type.

Puis il y a l’argument, qui est en réalité un tableau d’éléments de type string. L’instructeur explique alors le fonctionnement des tableaux, des types primitifs, des arguments de ligne de commande et probablement, comment vous convertiriez l’argument de ligne de commande “127″ d’une chaîne dont la valeur est “127″ vers un nombre entier dont la valeur est 127. Vous pouvez être bien avancé dans le cours avant que les étudiants ne commencent à comprendre que Java est en fait constitué d’objets qui s’envoient des messages.

Il est vrai que Java est un langage orienté objet. D’un autre côté, très peu de programmes Java sont vraiment procéduraux. Mais avant tout : Le langage de programmation Java apporte le support et l’infrastructure pour l’écriture de superbes programmes orientés objet. Pourtant, un ami enseignant en dévelopement de logiciel m’a récemment rapporté qu’une application plutôt compliquée que certains de ses étudiants, déjà en septième semaine du premier semestre, avait développée, consistait en une seule classe. Depuis il y a deux classes, mais la plupart des fonctionnalités restent dans une méthode main() de plusieurs pages au sein de la première classe.

Ce n’est pas un problème qui est spécifique à Java. Beaucoup de personnes sont passées du C au C++ pour profiter des flux d’entrée-sortie du C++. Bien qu’ils se qualifient comme programmeurs C++ (et non C), beaucoup ne créent ni n’utilisent d’objets. Un autre ami dans un autre collège a questionné les étudiants qui ont passé le test d’évaluation avancée en C++ et qui veulent se passer du cours d’introduction à Java. Il a été frappé par le nombre d’entre eux qui n’ont jamais entendu parler du polymorphisme, ou qui ont du mal à comprendre ce que c’est réellement.

Malgré les difficultés de l’approche du style “apprennez leur d’abord la main()”, même une approche plus centrée sur les objets ne signifierait pas que les étudiants assimileraient les objets dès la première fois. Dans un texte de diplômé sur la topologie algébrique, Walter Massey décrit l’étude comme un processus d’approximations successives. En POO, cela signifie que vous devez avoir une compréhension initiale de la manière dont vous devez identifier des objets et les faire agir ensemble. A partir de cette première approximation, vous en savez maintenant assez pour passer à une meilleure compréhension.

La première approximation de certaines personnes est meilleure que d’autres. Moi, je suis passé du C à Java. Mes premières tentatives m’ont poussé à penser que la POO était centrée sur la notion de succession et sur ces longues et fragiles suites de sous-classes. Je juge maintenant un texte d’introduction à Java à sa manière de présenter le polymorphisme, suffisamment tôt et de bonne qualité. Ma deuxième approximation de la vérité est venue après la lecture Thinking in Java de Bruce Eckel et des excellents articles de Bill Venners sur la conception qui sont d’ailleurs toujours en ligne sur http://www.artima.com. Bruce m’a permis d’appréhender le pouvoir du polymorphisme et l’article de Bill sur la succession vs. la composition était le premier de ceux que j’ai lus et dont j’ai ensuite profité.

Java Efficace

Cela m’amène à la première recommandation issue de mes récentes lectures : Effective Java Programming Language Guide de Joshua Bloch de la série Java publiée par Addison Wesley. Si vos habitudes de lecture ressemblent aux miennes, il est agréable de tomber sur un livre dont les articles peuvent être lus par séance de cinq à dix minutes. Effective Java consiste en 57 recommandations divisées en neuf catégories, chaque article fournissant de très bons conseils sur la programmation en Java. C’est un livre qui fera progresser votre approche actuelle du meilleur moyen de programmer en Java. Il est écrit par un type qui n’a pas peur de désigner les erreurs qu’il a faites quand il étudiait ces leçons. Il y a des inconsistances dans les API de SUN qui nous horripilent; ce livre vous aidera à éviter de faire ces mêmes erreurs.

Mais attendez une minute. Et si vous n’écrivez pas d’API que vous avez l’intention de publier ? Bloch recommande que vous programmiez tout en gradant en mémoire le fait que votre code sera réutilisé. C’est un concept que de nouveaux programmeurs, en particulier ceux apprenant à programmer en milieu universitaire, ne comprenez pas et cela rend l’étude de Java un peu plus dure. Quand vous concevez une classe Java, pensez à la manière dont les autres gens pourront employer cette classe. “Les autres gens”, cela peut juste vouloir dire “vous”, donc garder à l’esprit que vous pouvez aussi être un client de cette classe. Qu’est-ce qu’un étranger doit-il être capable de voir ? Quels services la classe doit-elle présenter à l’extérieur ?

Une des particularités les plus agréables de Effective Java est que Bloch montre les résultats qui résulteraient de l”ignorance des règles qu’il aborde. Dans sa discussion sur l’héritage face à la composition, il montre pourquoi l’héritage rend la structure plus fragile. Ici, il signifie héritage d’implémentation et pas d’interface.

Bloch signale aussi où l’héritage est convenablement employé. Il finit la section avec une classe d’emballage qui fournit un héritage d’implémentation par la composition. La première série d’articles s’appliquent à la création et à la destruction d’objets. Il y a ces conseils standard du genre “évitez les outils de mise au point et évitez les pertes de mémoire en éliminant les références aux objets obsolètes.”

D’autres règles peuvent vous étonner. Deux des articles incluent des suggestions de création de classes avec des constructeurs privés. Le premier article du livre suggère qu’une alternative utile à un constructeur peut être une méthode statique préfabriquée. Dans cet article, Bloch donne le ton de son livre. Il fournit les avantages et les inconvénients dand l’emploi cette technique et inclut un échantillon de code. La prochaine fois que vous irez dans une librairie, achètez ce livre et lisez le premier article ou parcourez la table des matières à la recherche de votre sujet préféré. Au bout de cinq minutes, vous saurez si le livre vous convient ou pas. Les conseils sont concrets, bien présenté et plein d’exemples de bonnes et de mauvaises conceptions.

Fête annuelle de l’objet à l’OOPSLA

Je suis un néophyte de l’OOPSLA (NDT : Object-Oriented Programming, Systems, Languages and Applications). Je ne suis allé qu’à deux de leurs réunions annuelles. Vous pouvez allez consulter leur site Web à http://oopsla.acm.org (en anglais). L’OOPSLA est souvent assimilée à une conférence académique, mais j’y ai réellement appris beaucoup sur la programmation. La réunion de l’année prochaine (2002) est programmée à Seattle début novembre.

Kristen Nygaard y a livré une keynote (discours) au symposium des éducateurs. Comme le co-créateur de Simula, il est crédité de l’invention de la programmation orientée objet (bien qu’il ne l’ait pas appelée comme ça au début). Des concepts fondamentaux comme l’encapsulation ont été inclus dans les premières version de Simula et la notion d’héritage fut ajoutée après. Smalltalk est un enfant de Simula.

En guise d’exemple, pensez à votre Mac. Vous avez une souris et un écran qui contient des fenêtres, un dock et une barre de menu. Vous pouvez cliquer sur ces différents éléments et ils réagissent de la manière qu’ils le doivent. Vous vous attendez à ce que, quand vous cliquez sur la pomme dans la barre de menu, le menu pomme se déroule. Vous vous attendez à ce que, quand vous cliquez sur le Finder dans le dock, une fenêtre du Finder apparaisse. Ces objets savent comment ils doivent répondreà un clic de souris et ils se comportent de manière appropriée. D’une façon, c’est la raison pour laquelle les gosses comprennent la programmation orientée objet mieux que nous le faisons. Ils passent leurs vies à interagir avec des interfaces grahiques (GUI), à envoyer des messages aux objets et à voir les objets interprêter correctement les messages.

Il y a pas mal d’années, j’ai vu Alain Kay parler à toute une école de filles (c’est comme ça qu’on les appelait à cette époque) à Cleveland. Il leur montra une vidéo où l’on voyait un enfant de deux ans allumer un ordinateur, insérer une disquette puis lancer une application. L’auditoire était ébahi. Et pourtant, maintenant que les ordinateurs sont omniprésents, c’est devenu une chose commune. Chacune de mes filles était à l’aise avec un ordinateur à l’âge de deux ans. Ce n’est pas extraordinaire. Presque tous les spectacles pour enfants ont leur propre site du Web. Ma fille de cinq ans demandera bientôt la permission d’aller sur les sites pour imprimer les pages de coloriage pour celle de deux ans.

Il semble tout à fait normal que le Groupe de Recherche et d’Etudes du Xerox PARC, mené par Kay, ait développé ce langage orienté objet appelé Smalltalk en même temps qu’il ait créé un environnement utilisateur incluant des fenêtres, des menus, des icônes et une souris. Dans Smalltalk-80, beaucoup de particularités semblables à celles de Java faisaient déjà partie de cet environnement.

Smalltalk était un langage multi plate-forme du fait que son code était compilé en bytecode qui était ensuite interprété par une machine virtuelle. Tout est objet dans Smalltalk (aucune primitive) et les objets sont nettoyés automatiquement de leurs déchets (objets inutilisés). Le but fondamental de l’équipe créatrice était de créer un environnement qui permettrait aux enfants et aux éducateurs de construire des applications irrésistibles.

A l’OOPSLA, il y a une poignée de gens qui se réunissent dans ce qui est appelé le Camp Smalltalk. Je pensais y aller faire un tour pour voir si un support de Smalltalk était possible sur Mac OS X. Je m’étais déjà arrêté auparavant au stand Visual Age pour Smalltalk et ils m’avaient regardé comme si j’étais un dingue. Mais là au Camp Smalltalk, j’ai vu un type qui travaillait sur un TiBook. Je me suis rapidement approché et lui ai demandé ce qu’il recommanderait pour l’utilisation de Smalltalk sur Mac OS X. Il a suggéré Squeak. Pour le moment, dit-il, utiliser la version Carbon, mais bientôt, la version Cocoa sera prête.

Le meilleur livre Java de Beck

Cela m’apporte à ma deuxième recommandation. Un des meilleurs livres que j’ai jamais lu sur la programmation Java est une suite d’articles, dont la plupart ont été écrits avant que Java 1.02 ne soit sorti. Bien que la syntaxe des exemples de code soit un peu étrange, les conseils du Kent Beck’s Guide to Better Smalltalk (Guide de Kent Beck pour un meilleur Smalltalk) sont modernes et immédiatement applicables. Bien sûr, vous verrez les origines de la Programmation Extrême (XP) dans ces articles. Dans “Clean Code: Pipe Dream or State of Mind” (Code Pure : Illusion ou l’Etat d’Esprit), Beck vous emène dans une réécriture, il vous explique les mauvaises odeurs de code qu’il détecte et il vous montre comment les arranger. Même sans connaître Smalltalk, vous pouvez reconnaître l’utilisation répétée d’instructions conditionnelles à remplacer par un modèle d’état.

Plusieurs articles concernent les cartes CRC (Collaborateurs des Responsabilités de Classe). Inventées par Ward Cunningham, ces cartes comportent une conception plus ouverte que celle de Cunningham et de Beck, probablement champion en la matière aujourd’hui. Ils fournissent une façon agréable de penser à la manière dont les objets agissent réciproquement. Une classe consiste en ce que les objets savent, ce qu’ils font et qui ils connaissent. Cet outil capte les informations des deux dernièrs catégories. Bien que Cunningham et Beck aient présenté les cartes CRC comme une technique pour l’enseignement OO (Orienté Objet) aux néophytes, ils ont rapidement découvert que les développeurs expérimentés employaient cet outil pour mieux appréhender des systèmes complexes.

Une grande partie du livre se concentre sur des Modèles, y compris un article coécrit avec Ralph Johnson, un membre GoF. Les modèles sont ici présentés avec plus de concision que ceux du livre du GoF, mais ils ne sont pas moins utiles. Dans son “Introduction Courte à un Langage Modèle” publiée en 1993, il recommande les livres de l’architecte Christophe Alexandre : la Voie Éternelle de la Construction et Un Langage Modèle. C’est devenu maintenant presque un cliché de mentionner le travail d’Alexandre au moment d’apprendre ou d’écrire des modèles de conception. Alexandre a probablement vendu plus de livres aux designers de logiciel qu’aux architectes. Beck a fait référence aux livres d’Alexandre dans un article JOOP en 1989 appelé “Construire des Abstractions pour des Applications Orientées Objet” qui a était réimprimé dans son livre.

Vous reconnaîtrez ce qui plus tard est devenu JUNIT dans l’article “Tests élémentaires de Smalltalk”. Il explique comment écrire des tests unitaires dans le contexte de Smalltalk, de la même manière que l’article “Les Tests Infectés” (disponible en téléchargement avec JUNIT à l’adresse : http://www.junit.org) a décrit le processus orienté Java quelques années plus tard. Beck, avec Erich Gamma, a écrit les premières itérations de JUNIT. A l’OOPSLA, Gamma a démontré les capacités de réutilisation de l’IDE open source multi plate-forme Eclipse, mais avec réutilisation de quelques lignes du code de JUNIT. J’indiquerai plus tard le site de Web d’Eclipse, mais une partie de l’interface est basée sur du code spécifique à une plate-forme et il n’y a actuellement aucune prévision de sortie de cet IDE pour Mac OS X.

Pour finir avec ce livre, j’ai failli ne pas l’acheter. Ne connaissant rien à Smalltalk, je ne voyais pas ce qu’un guide de perfectionnement à SmallTalk pouvait m’apprendre. Comme cela arrive souvent, SmallTalk doit être appris en élargissant ses expériences. Les significations réelles ne se révèlent jamais au début. Comme Kimmy-the-wonderwife me le rappelle, j’ai plus appris sur l’étude collaborative en travaillant dans une cuisine professionnelle qu’en suivant des séminaires d’éducation sur le sujet. De nouveau, arrêtez-vous dans votre librairie locale et lisez rapidement un article ou deux pour décider si ce livre est fait pour vous ou pas.

Téléchargements et Invitations

Le reste de cet article est bref. D’abord, je veux inciter à rapidement télécharger Squeak. Squeak est la mise en oeuvre actuelle de Smalltalk par Alain Kay et son équipe. Le nom de Kay continue à surgir en bonnes places dans des projets intéressants. Vous pouvez vous informer sur le projet Vivarium dans le livre de Stewart Brand “Le Laboratoire des Médias” et sur le projet Playground dans le livre de Beck sur Smalltalk, que j’ai recommandé dans le dernier paragraphe. Il y a beaucoup à apprendre dans le troisième livre que je recommande, “Squeak: Objected-Oriented Design with Multimedia Applications” (Squeak : Conception Orientée Objet avec des Applications Multimédia) de Marque Guzdial du Prentice Hall. L’équipe Squeak s’est déplacée du campus d’Apple vers celui de Disney où Kay est un Camarade de Disney.

Allez sur http://www.squeak.org et téléchargez le logiciel. Suivez les liens vers la section de téléchargement. Sous les options Mac, vous constaterez que vous pouvez télécharger une version Classic, une version Carbon, ou une version Cocoa. La version Cocoa n’est pas tout à fait prête encore. La version Carbon est solide mais vous aurez besoin de fichiers qui ne sont pas inclus dans cette distribution. Donc, téléchargez d’abord la version Classc et ouvrez fichier zip. Téléchargez ensuite la version Carbon et lancez là. Au moment où l’on vous demandera de trouver un fichier d’image, examinez les fichiers .image qui étaient inclus dans le téléchargement Classic. Cliquez sur l’onglet situé sur le bord gauche et mettez à jour votre logiciel. Une fois que le logiciel a correctement été mis à jour, votre fenêtre Squeak doit ressembler à peu près à ça :


Cliquez sur l’image pour l’agrandir

Jouez avec. Ouvrez Games et jouez au Tetris ou au Solitaire. Ouvrez le Son et jouez avec l’application musicale. Alors que vous explorez les différents espaces, vous pouvez entendre l’outil de développement vous interpeler, “Hé, quelle cool application éducative aimeriez vous développer aujourd’hui ?” Le livre de Guzdial est une bonne introduction aux applications que l’on peut développer avec Squeak et il inclut des exemples qui s’appliquent aux programmes orientés objet en général. L’équipe de Squeak a été prudente d’ajouter des fonctionnalités très sympathiques qui laissent suggèrer des possibilités intéressantes aux développeurs imaginatifs. Soyez prudent, vous pourriez être très vite aspirés.

Une autre grande façon d’apprendre Squeak est de vérifier le Swiki.


Cliquez sur l’image pour l’agrandir

Swiki est un Wiki pour Squeak. Si vous ne connaissez pas les Wikis, vous aurez peut être envie de vous promener autour du Grand Wiki. Pourquoi ne pas commencer par http://c2.com/cgi/wiki?CategoryPattern. Un Wiki est un site Web où chaque page est éditable par tout un chacun. S’il vous plaît soyez courtois : c’est une idée terriblement agréable qui dépend du bon comportement de ses participants. Swiki permet à des parties de la page d’être bloquées par l’auteur.

Le Wiki est encore une idée inventée par Ward Cunningham. En guise de livre bonus, vous aurez peut être envie d’examiner “The Wiki Way: Quick Collaboration on the Web” (Wiki : La Collaboration Rapide sur le Web) qu’il a coécrit avec Bo Leuf. Le livre sur CD des exemples pour initier un Wiki. Vous devez aller sur le site Web et y retirer les fichiers corrigés.

Un Swiki est maintenant encore plus facile à lancer. Vous pouvez le télécharger et l’installer en dix minutes environ. Vous trouverez les informations et les liens dont vous aurez besoin sur le site Web de Swiki à http://pbl.cc.gatech.edu/myswiki. L’esprit d’un Swiki est semblable à l’engagement de propriété collective de code que l’on trouve dans XP. Vous trouverez pas mal de traces de Cunningham dans beaucoup de pratiques d’XP.

Textes originaux en anglais sur O’Reilly : Java Programming on the Mac par Daniel H.Steinberg

Thierry Java ,

  1. Pas encore de commentaire
  1. Pas encore de trackbacks
Vous devez être identifié pour poster un commentaire