115
Initiation à la programmation orientée objet avec Alice version du 26/09/2010 David Roche Initiation à la programmation orientée objet avec Alice 1

Programmation oriente objet

Embed Size (px)

DESCRIPTION

Programmation oriente objet

Citation preview

  • Initiation la programmation oriente objet avec Alice

    version du 26/09/2010

    David Roche

    Initiation la programmation oriente objet avec Alice 1

  • Ce document est publi sous licence Creative Commons

    Vous tes libres : de reproduire, distribuer et communiquer cette cration au public de modifier cette cration

    Selon les conditions suivantes :

    Paternit. Vous devez citer le nom de l'auteur original de la manire indique par l'auteur de l'uvre ou le titulaire des droits qui vous confre cette autorisation (mais pas d'une manire qui suggrerait qu'ils vous soutiennent ou approuvent votre utilisation de l'uvre).

    Pas d'Utilisation Commerciale. Vous n'avez pas le droit d'utiliser cette cration des fins commerciales.

    A chaque rutilisation ou distribution de cette cration, vous devez faire apparatre clairement au public les conditions contractuelles de sa mise disposition.

    Chacune de ces conditions peut tre leve si vous obtenez l'autorisation du titulaire des droits sur cette uvre.

    Rien dans ce contrat ne diminue ou ne restreint le droit moral de l'auteur ou des auteurs.

    Initiation la programmation oriente objet avec Alice 2

  • Notes de l'auteur :

    Ce document est grandement inspir du livre de Wanda P. Dann, Stephen Cooper et Randy Pausch Learning to program with Alice (Pearson, Practice Hall), mais il n'en constitue pas une traduction.

    Alice est gratuitement tlchargeable sur www.alice.org

    Ce document a t utilis par trois enseignants du lyce G Fichet de Bonneville (Nicolas Bechet, David Berthier et moi mme) pour initier des lves (3 groupes de 20 lves) de seconde, la programmation oriente objet pendant l'anne scolaire 2009-2010. Un grand merci Nicolas pour le temps consacr amliorer ce document.

    Un cours destin aux lves de premire faisant le lien entre Alice et la programmation en Java est en cours de prparation.

    David Roche enseignant au lyce G Fichet Bonneville (74)

    Initiation la programmation oriente objet avec Alice 3

  • Prface

    Alice ?

    Alice est un logiciel " open source " qui a t ralis lUniversit de Carnegie Mellon (Pittsburgh Pennsylvanie USA), dans le cadre dune dmarche pdagogique visant motiver des lves de collges ou de lyce sinitier la programmation.

    Le principe dAlice est de permettre la construction dune scne 3D incluant des dcors, des personnages (humains ou humanodes), des animaux, des objets, du texte, du son ou dautres lments issus de bibliothques fournies avec le logiciel et pouvant tre enrichies partir dInternet ou bien avec des crations labores avec des logiciels spcialiss tels que 3D Studio par exemple. Outre ces lments, lutilisateur dAlice dispose aussi de la possibilit de placer et de faire voluer une camra et de rgler des questions dclairage, de cadrage, etc.

    A tous les lments sont associs des " mthodes ", cest dire des commandes ou des actions agissant sur tout ou partie de llment : agrandir un objet, le tourner, dplacer une camra, plier un bras, faire marcher un personnage, etc. Chaque mthode peut disposer de paramtres (par exemple : distance parcourir, angle de rotation). De nouvelles mthodes plus ou moins complexes peuvent tre cres ou modifies. Certaines actions peuvent tre contrles partir du clavier ou de la souris qui disposent donc de leurs propres mthodes (appuyer sur une touche, clic droit, etc).

    La programmation dune squence 3D anime commence donc en gnral par lcriture dun projet (scnario, storyboard ou autre forme de cahier des charges), puis par la slection et la mise en place des diffrents lments sur la scne, et enfin la programmation de ces diffrents lments par glisser-dposer puis paramtrage des mthodes. La vrification du bon droul de la programmation seffectue en " jouant " la squence lcran. Il est ensuite possible dexporter cette squence sous forme dimages, de vido, ou encore de fichier partageable par dautres utilisateurs dAlice.

    Initiation la programmation oriente objet avec Alice 4

  • Quelques avantages dAlice :

    Lgret de lapplication qui ne ncessite pas dordinateurs particulirement puissants ou volus sur le plan graphique. Il suffit simplement de disposer dune plate-forme Java (gratuite) installe sur son ordinateur, et denviron 400Mo despace disque pour Alice 2.2

    Gratuit du logiciel Communaut importante dutilisateur (enseignants, enfants, passionns) issus des plus de

    1.500 tablissements scolaires utilisateurs du logiciel dans le monde. Cette communaut est essentiellement anglophone, mais nous allons nous employer dvelopper une communaut francophone dans le mme esprit dchange de pratiques et dchange dexpriences.

    Accessibilit de linterface et du logiciel pour les novices Exigence du concept, en pleine conformit avec les exigences de la programmation objet.

    Apprendre la programmation

    Lapprentissage de la programmation est un domaine pdagogique particulirement intressant permettant de donner aux lves lexprience de systmes complexes en dveloppant un mode de pense structur, mthodique et rigoureux quils pourront ensuite mettre en uvre dans de nombreuses autres matires de la Biologie lconomie, mais aussi dans la vie pratique, que ce soit au contact des appareils technologiques de la vie courante, ou bien de systmes complexes dont le fonctionnement dpend de celui de ses lments constitutifs et de leurs interactions (automobile, mto, organisation de la production dans une usine, plan de dveloppement conomique, laboration dune politique environnementale,).

    La pratique de la programmation permet de se trouver confront des problmes plus ou moins complexes ncessitant la fois une dmarche logique base sur lanalyse, une approche par hypothses, essais successifs et limination, une capacit imaginative, un esprit dinitiative propice lauto-apprentissage et enfin le dveloppement de qualits plus gnriques telles que la patience, louverture desprit, ladaptabilit, la prcision.

    Enfin la programmation sappuie sur des langages qui ont leur vocabulaire et leur syntaxe, elle renforce donc la formation de lesprit aux pratiques linguistiques. Dune faon plus directe, les lves, sans forcment se trouver une vocation pour les mtiers de linformatique, seront confronts tout au long de leur vie lenvironnement informatique et nombre dentre eux seront appels collaborer de faon troite avec des professionnels de linformatique ou encore de mettre directement en application leurs savoir-faire en programmation, comme par exemple dans le cadre de la mise en place de formules sous tableur Excel, de la manipulation dinformations issues de bases de donnes marketing ou commerciales, ou de la prparation dun e-mailing.

    Mais lapprentissage de la programmation est aussi potentiellement porteur de frustrations ! Les ttonnements pour obtenir un rsultat satisfaisant peuvent tre longs et striles, la patience trop malmene, les problmes jugs trop complexes, leurs rsolutions trop obscures. Do la conception du logiciel Alice, un outil de programmation dans un environnement 3D permettant de manipuler des objets et des personnages afin de raliser des squences animes, voire des jeux interactifs.

    Alice a t pens afin de lever deux des principaux obstacles rencontrs par les programmeurs dbutants :

    Les erreurs de syntaxe La non visibilit du rsultat

    Initiation la programmation oriente objet avec Alice 5

  • Pour cela, la programmation seffectue par glisser-dposer de blocs de code incluant les concepts classiques abords dans ce domaine : itrations et boucles, branchements conditionnels, mthodes, paramtres, variables, tableaux et rcursivit. De plus, lapprenant peut tout moment observer le rsultat, ajuster et corriger ses erreurs, en visualisant lanimation 3D en cours de ralisation.

    Alice ouvre lesprit

    Heureusement, Alice nest pas quun simple outil dapprentissage la programmation. Cest aussi un outil qui permet aux lves dapprendre apprendre : le travail par essais successifs, qui est une base de la programmation, sapplique aussi bien dautres activits, cest une dmarche qui permet aussi dapprendre mesure les risques et prendre des prcautions en consquence (comme par exemple effectuer une copie de scurit de son travail avant dy effectuer des changements importants, ou bien encore dcomposer un travail important en tapes progressives lmentaires faciles contrler).

    Alice permet aussi de mettre en uvre de nouvelles mthodes pdagogiques particulirement intressantes lre de linformatique et de lInternet : celles notamment reposant sur la progression de son apprentissage partir de lacquisition dun savoir-faire pr-existant. Ainsi un lve pourra exercer son acquis et lenrichir en travaillant sur une squence dj ralise par un tiers (quon lui aura fournie ou quil aura trouv sur un espace communautaire ddi Alice sur Internet) avec pour objectif de modifier celle-ci pour lenrichir ou ladapter un nouveau besoin. Cest une mthode de travail largement rpandue dans le monde de la programmation qui permet non seulement dacqurir rapidement de nouvelles connaissances, mais aussi de confronter et de faire voluer les siennes, de dcouvrir de nouvelles faons de programmer, etc.

    Cette forme de travail permet aussi de dvelopper chez les jeunes un esprit " social " qui les incitera sinsrer dans des communauts partageant les mmes centres dintrt pour y mettre disposition leur comptence et certaines de leurs ralisations dans un esprit douverture et de service.

    Daniel Bouillot, Dlgu l'action conomique, la formation et la recherche CITIA -

    Initiation la programmation oriente objet avec Alice 6

  • SommaireChapitre I : Les premiers pas p 8

    Exercices chapitre I p 12

    Chapitre II : Premier programme p 14

    Exercices chapitre II p 25

    Chapitre III : Les fonctions et les structures de contrle p 27

    Exercices chapitre III p 36

    Chapitre IV (1er partie) : Les classes, les instances et les mthodes p 38

    Exercices Chapitre IV (1er partie) p50

    Chapitre IV (2e partie) : Les mthodes Class-Level et l'hritage p 52

    Exercices chapitre IV (2e partie) p 62

    Chapitre V : Interaction utilisateur machine p 64

    Exercices chapitre V p 69

    Chapitre VI : Retour sur les fonctions et le couple if/else p 71

    Exercices chapitre VI p 79

    Chapitre VII : L'instruction while p 81

    Exercices chapitre VII p 87

    Chapitre VIII : Les variables p 89

    Exercices chapitre VIII p 99

    Annexe 1 : Les coordonnes dans Alice p 101

    Annexe 2 : Les mthodes move, turn, roll.... p 104

    Annexe 3 : La camra p 108

    Annexe 4 : rendre les objets invisibles p 111

    Annexe 5 : Crer ses propres personnages p 112

    Annexe 6 : Nombres alatoires p 114

    Initiation la programmation oriente objet avec Alice 7

  • Chapitre ILes premiers pas

    Initiation la programmation oriente objet avec Alice 8

  • Alice 2.2 va vous permettre de crer un monde virtuel rempli de personnages de toutes sortes. l'ouverture du logiciel, vous devez choisir un monde vide (ou un monde dj partiellement peupl)

    " Templates " permet d'ouvrir un monde vide, " Textbook " permet d'ouvrir un monde partiellement peupl

    Une fois " le monde " vide choisi, il faut le peupler avec des personnages ou des objets inanims (dans les 2 cas, nous avons affaire des instances de classe au sens de la POO, chaque objet ayant des mthodes, des fonctions et des attributs (variables)).Le bouton " ADD OBJECTS " permet d'ajouter des objets (personnages ou objets inanims).

    Initiation la programmation oriente objet avec Alice 9

  • " ADD OBJECTS " nous donne accs l'diteur de scne.

    La premire chose faire est de choisir un objet parmi la collection propose (il existe aussi d'autres objets sur le net). L'objet est plac dans le monde par cliquer-dplacer-dposer.

    Vous pouvez modifier la taille et la position de vos objets (voir schma ci-dessus " contrle objet ").En 3D, vous pouvez dplacer vos objets (translation), vers le haut, vers le bas, vers la gauche, vers la droite, vers l'avant et vers l'arrire. Vous pouvez aussi faire tourner vos objets (rotation autour de l'axe des X, l'axe des Y et l'axe des Z). Bien sr tout cela est tester.

    Pour vous reprer dans cet univers 3D (ce qui est loin d'tre vident ! ), vous pouvez utiliser, dans l'diteur de scne, la vue " quad view "

    Une fois votre scne mise en place cliquez sur " DONE "

    Initiation la programmation oriente objet avec Alice 10

  • Pour chaque objet, leur crateur a dfini un centre, ce centre correspond souvent au centre gomtrique de l'objet (plutt centre de masse), mais pas forcment : pour les personnages, le centre de l'objet se trouve entre les 2 pieds, pour la batte de baseball, le centre se trouve au niveau du manche....bref, voir au cas par cas.

    Le centre de l'objet est trs important, car les coordonnes d'un objet sont donnes par rapport au centre de l'objet.

    Initiation la programmation oriente objet avec Alice 11

  • Exercices chapitre I

    Initiation la programmation oriente objet avec Alice 12

  • Voici quelques exercices pour vous entrainer maitriser la mise en place d'une scne dans Alice 2.2Dans ces exercices il est indispensable d'utiliser la vue " quad view "

    Exercice 1.1

    Dans un paysage enneig, placer 2 ranges de 3 pingouins serrs les uns contre les autres (une rookerie).

    Exercice 1.2

    Reproduire la scne suivante (personnage : MaleBalletDancer).

    Exercice 1.3 (voir l'annexe 1 pour cet exercice) Placer une poule dans un monde vide de telle faon ce qu'elle ait pour coordonnes (2,0,1) ( peu prs !).On veut placer un chat 2 m derrire la poule (il est en train de la poursuivre !). Quelles doivent tre ses coordonnes ? Placer correctement le chat.Placer une tortue qui regarde la scne ( la gauche de la poule et du chat).Enfin, placer un oiseau au milieu du triangle form par la poule, le chat et la tortue 1,5 m au-dessus du sol

    Exercice 1.4

    Crer une scne avec un aroport, une tour de contrle, 1 avion au sol et 1 avion en train de dcoller.

    Initiation la programmation oriente objet avec Alice 13

  • Chapitre IIPremier programme

    .

    Initiation la programmation oriente objet avec Alice 14

  • Placer les personnages dans une scne, c'est bien, animer une scne, c'est mieux ! Nous allons donc, dans ce chapitre, crire notre premier programme.

    Scnario et story-board

    Avant d'aborder l'criture d'un programme dans Alice, il va falloir nous familiariser avec l'criture des scnarios et des story-boards. Nous allons commencer par un petit exemple relativement simple, mais au contenu trs riche :

    Scnario : La scne se droule sur la Lune, un robot (terrien), vient juste de descendre de son vaisseau spatial, quand il est interpel par un extra terrestre qui jusqu' prsent tait cach derrire un rocher. Surpris, le robot tourne la tte vers l'intrus et se prcipite vers lui, mais trop tard, l'extra terrestre a disparu ! Le robot tourne alors la tte vers la camra; en signe de danger cette dernire devient rouge. Le robot dit la phrase reste clbre (Apollo 13) :Houston, nous avons un problme !

    Maintenant que la trame de l'histoire est connue, il nous faut passer au story-board :Le story-board va nous permettre de dcouper notre histoire en scne. Il comportera : le numro de la scne, un dessin de la scne (non obligatoire), une description de la scne, les ventuels sons et les ventuels textes. Pour notre premire scne, cela pourrait donner ceci :

    Initiation la programmation oriente objet avec Alice 15

  • Voici la suite du story-board (sans les dessins) :Scne 2 : Description : Un extra terrestre surgit derrire un rocherSon : aucunTexte : l'extra terrestre dit : ?r#'(t&^Scne 3 :Description : le robot tourne la tte (360) pour chercher l'extra terrestreSon : aucunTexte : aucunScne 4 :Description : Le robot se tourne puis se dirige vers l'extra terrestre. Mais ce dernier disparat derrire le rocher.Son : aucunTexte : aucunScne 5 :Description : le robot se tourne vers la camra, sa tte devient rouge.Son : aucunTexte : le robot dit : Houston, nous avons un problme !

    du story-board la programmation

    Nous allons utiliser une scne toute prte : ouvrir le fichier " chap2-1.a2w "Vous devriez avoir l'cran :

    Tous les acteurs sont dj en place (l'extra terrestre est cach derrire un rocher).

    Comme dj dit auparavant, Alice est 100 % objet, avec Alice, on ne fait qu'une seule chose : manipuler des objets. Qui dit POO dit classe, instance, mthodes, attributs, fonctions. Alice a dj cr les instances dont nous aurons besoin (spiderRobot, rock, rock2, alienOnWheels et lunarlander).

    Initiation la programmation oriente objet avec Alice 16

  • Chacune de ces instances possde ses propres mthodes, ses propres attributs et ses propres fonctions.Voici par exemple, une partie des mthodes de l'instance spiderRobot :

    Nous allons crer une nouvelle mthode pour la classe World grce la fentre World.myfirstmethod (une fois cr, nous aurons une mthode de la classe World qui aura pour nom myfirstmethod .)

    Nous reviendrons sur les dtails plus tard, pour l'instant, vous devez juste savoir que nous allons remplacer Do Nothing par des instructions (qui pourront tre des mthodes ou des fonctions (oui, des mthodes dans une mthode !) mais pas seulement).

    Initiation la programmation oriente objet avec Alice 17

  • Quand nous lancerons notre programme, la premire chose que fera Alice, c'est d'appeler notre mthode World.myfirstmethod .

    Car comme nous le montre l'image ci-dessus : When the world starts , do World.myfirstmethod ( );(nous reviendrons aussi plus en dtail sur la fentre Events plus tard.)

    Dernire chose avant d'entrer dans le vif du sujet, il existe 2 faons d'excuter les instructions : l'une aprs l'autre ou plusieurs en mme temps. Pour les excuter l'une aprs l'autre il faudra utiliser DoInOrder et DoTogether pour les excuter toutes en mme temps.

    La premire chose faire et de dposer DoInOrder la place de DoNothingCeci tant fait, vous devriez avoir ceci :

    Nous allons maintenant pouvoir dposer nos premires instructions :

    La scne commence avec l'apparition de l'extra terrestre (AlienOnWheel), cliquer sur AlienOnWheel, puis sur l'onglet methods, puis dposer la mthode AlienOnWhell.move(direction, amount); dans doInOrder ( la place de Do Nothing), le programme ouvre alors un menu droulant, choisir up, dans l'autre menu droulant slectionner 1 meter.

    Initiation la programmation oriente objet avec Alice 18

  • Vous devriez alors avoir ceci :

    Nous avons utilis la mthode move de alienOnWheels avec pour argument UP (vers le haut) et 1 meter (d'une distance d'un mtre).

    Vous devriez ici prendre conscience de la puissance d'Alice, car faire bouger un objet de 1 mtre vers le haut est d'une simplicit enfantine.

    Le programme vous propose automatiquement les arguments lis la mthode employe, d'autres arguments optionnels sont disponibles (more...)) !Nous pouvons d'ores et dj tester notre programme en cliquant sur le bouton Play.

    Tout fonctionne comme prvu, notre extra terrestre sort de sa cachette !

    Initiation la programmation oriente objet avec Alice 19

  • Pour la deuxime instruction, nous utiliserons la mthode say (toujours pour alienOnWheels), dans le menu droulant, slectionner other... et entrer votre texte dans la fentre.

    Nous pourrions tester l'effet de notre deuxime instruction, mais avant nous allons choisir la dure d'affichage de notre texte en slectionnant ...more-> duration-> 2 seconds.

    et voil le rsultat :

    Enchanons avec la rotation de la tte du robot :Jusqu' prsent nous avons toujours utilis les mthodes de l'instance alienOnWheels, nous allons maintenant utiliser une mthode de l'instance spiderRobot. Mais si nous utilisons la mthode turn pour spiderRobot, c'est le robot en entier qui va tourner alors que dans notre scnario, cela doit tre uniquement sa tte ! Les utilisateurs d'Alice ont prvu le coup et les objets sont souvent diviss en plusieurs parties. Pour voir ces parties, il suffit de cliquer sur le + qui se trouve devant spiderRobot.

    Initiation la programmation oriente objet avec Alice 20

  • Slectionner head (comme ci-dessus), il suffit maintenant de slectionner la mthode turn dans l'onglet methods.Choisir alors LEFT puis 1 revolution puis dans more... choisir duration et 2 seconds.

    Le robot doit maintenant se tourner vers l'extra terrestre. Pour ce faire, on slectionne la mthode turnToFace (se tourner vers) de l'instance spiderRobot, comme target choisir alienOnWheels-> the entire alienOnWheels (on aurait pu choisir seulement une partie de alienOnWheels)

    Faisons avancer le robot droit devant lui (FORWARD) sur 1 mtre. Pour cela nous allons utiliser la mthode move de spiderRobot.

    Aprs avoir test cette nouvelle instruction, il est vident que le dplacement du robot n'est pas trs naturel (les pattes ne bougent pas). Essayons d'amliorer cela.

    Pour spiderRobot, il n'existe pas de mthode marcher, nous devons la programmer nous mme.Il faut en mme temps avancer et bouger les pattes, pour se faire nous allons utiliser doTogheter la place de doInOrder (faire ensemble la place de faire dans l'ordre).Effaons la dernire ligne ajoute et dposons doTogheter la place.

    Initiation la programmation oriente objet avec Alice 21

  • Nous allons ajouter la mthode move comme indiqu prcdemment et appliquer la mthode turn vers l'avant sur 0,1 rvolution puis vers l'arrire toujours sur 0,1 rvolution la jointure entre les 2 parties de la patte arrire droite (la rotule) (ouf !), mme chose pour la patte avant gauche (par souci de simplicit nous n'animerons que 2 pattes sur 4).

    Tout cela est un peu compliqu expliquer, alors voyons, ce que cela donne l'cran :

    Testons, cela ! Horreur, cela ne fonctionne pas (on dit qu'il y a un bug !) Nous venons tout simplement de faire une erreur de programmation (une erreur de logique !)

    Rflchissons un peu :finalement, il est tout fait normal que cela ne fonctionne pas, en effet nous demandons au robot de tourner en mme temps la jambe vers l'avant et vers l'arrire, bref de ne rien faire !! Pour que cela fonctionne il faut, dans un premier temps qu'il tourne vers l'avant puis ensuite vers l'arrire. Ce mot ensuite doit immdiatement vous faire penser doInOrder. Cela sera un doInOrder dans un doTogheter ! Je vous laisse rflchir tout cela !

    Voil le code corrig :

    Initiation la programmation oriente objet avec Alice 22

  • Cela va mieux, mais ce n'est pas encore gnial. Il y a un manque de synchronisation entre le mouvement du robot et l'animation de ses pattes. Il faudrait que le mouvement avant-arrire des pattes soit plus rapide. Utilisons more.. duration-> 0.5 seconds pour chaque mouvement de la patte (pour qu'en tout le mouvement des pattes dure 1 seconde)

    L'extra terrestre doit se cacher (mouvement inverse de celui du dpart), on applique donc la mthode MOVE DOWN 1 meterde alienOnWheels. Pour que ce mouvement vers le bas se fasse pendant le mouvement du robot, il faut veiller ce que cette instruction soit dans le doTogether du mouvement du robot (voir les diffrentes couleurs de fond)

    Dans notre story-board, le robot doit maintenant se tourner vers la camra. On va donc utiliser la mthode turn to face de spiderRobot avec l'argument camera.

    Initiation la programmation oriente objet avec Alice 23

  • La tte du robot doit maintenant devenir rouge. Nous allons modifier un des attributs de la tte du robot (avec Alice pour accder aux attributs d'une instance, il faut cliquer sur l'onglet properties), l'attribut color.Dplacer l'attribut color la suite de nos instructions et choisir RED

    et la tte devient bien rouge.

    Il ne nous reste plus qu' envoyer le message Houston (avec duration = 2 seconds)Attention pas d'accent (systme US) !

    Initiation la programmation oriente objet avec Alice 24

  • Exercices chapitre II

    Initiation la programmation oriente objet avec Alice 25

  • Exercice 2.1Robert, Gertrude et Davina sont 3 bonshommes de neige. Robert a toujours eu un petit faible pour Gertrude, mais n'a jamais eu le courage de lui dclarer sa flamme. La scne dbute alors que Gertrude et Davina sont en pleine discussion.Robert choisit ce moment pour se faire remarquer par Gertrude ( vous de voir comment !). Gertrude se retourne pour faire face Robert et reprend sa conversation avec Davina sans le moindre mot pour ce pauvre Robert. crire la fin de ce scnario, crire un story-board, programmer la scne.

    Dbut de la scneExerice 2.2 (Pour cet exercice voir l'annexe 2)Crer un monde (paysage marin) et dposer dans ce monde une le (Environments/Island) et un poisson. Dans la scne initiale, le poisson sort lgrement de l'eau et se trouve devant l'le. Programmer la scne suivante :

    le poisson tourne en rond devant l'le (1 tour) le poisson tourne autour de l'le (1 tour) le poisson saute hors de l'eau avant de disparatre dans les abysses.

    scne initialeExercice 2.3 (Pour cet exercice voir l'annexe 2)Crer un monde peupl : d'une petite fille (People/Mana), d'un aimant (Objects/Magnet), d'un ressort (Objects/Spring), d'un casque de scaphandrier (Objects/divingHelmet), d'une cl (Objects/windupKey) et d'une voiture (Vehicles/car).Mana tiens l'aimant dans sa main gauche et dirige ce dernier vers le ressort, le ressort est alors attir vers l'aimant. Mana reproduit la mme opration avec le casque de scaphandrier et la cl. Elle dirige alors l'aimant vers la voiture, mais au lieu d'attirer la voiture, c'est la voiture qui attire Mana. Mana abandonne alors l'aimant, qui reste coll la voiture, et revient en marchant vers la camra. Programmer cette scne.

    scne initiale

    Initiation la programmation oriente objet avec Alice 26

  • chapitre IIILes fonctions et les structures de contrle

    Initiation la programmation oriente objet avec Alice 27

  • Jusqu' prsent, tous nos programmes crits avec Alice taient linaires ( chaque excution toutes les instructions taient toujours parcourues dans le mme ordre). Pourtant, programmer, c'est souvent demander l'ordinateur de choisir les instructions excuter. Nous allons maintenant tudier une technique permettant d'aiguiller le droulement du programme dans diffrentes directions, en fonction des circonstances rencontres. Pour ce faire, nous devons disposer d'instructions capables de tester une certaine condition et de modifier le comportement du programme en consquence. La plus simple de ces instructions conditionnelles est l'instruction if. If en anglais signifie " si ". Nous allons donc avoir une structure du type : " si ceci est vrai alors fait cela ". Mais avant d'tudier ces conditions, nous devons d'abord nous arrter sur les fonctions dans Alice 2.2.

    les fonctions dans Alice

    Nous avons dj utilis l'onglet "properties", l'onglet "methods", il nous reste donc dcouvrir l'onglet "functions"

    Les fonctions ressemblent fortement aux mthodes, on peut mme dire que les fonctions sont des mthodes qui renvoient des valeurs. Quand vous utiliserez une fonction, le rsultat de l'excution sera forcment une valeur (alors qu'une mthode ne renvoie aucune valeur : la mthode "move" dplace un objet, mais ne retourne aucune valeur).Par valeur je n'entends pas forcment un nombre, en effet une valeur peut tre un boolen (voir plus loin), une chane de caractre (suite de caractre) ou bien sr, un nombre. Un petit exemple s'impose :reprenons l'exemple du robot et de l'extra terrestre. Le robot avance d'un mtre vers le rocher, mais pourquoi un mtre ? Pourquoi pas 2, 3 ou 4 mtres ? Tout simplement parce qu'avec un cela fonctionne ! Si j'avais pris une trop grande valeur, mon robot aurait pntr dans le rocher ! Comment faire pour que le robot s'arrte juste au bord du rocher ? Il faut dans un premier temps connatre la distance robot-rocher. C'est l que les fonctions entrent dans la dance. En effet, il existe une fonction qui retourne comme valeur la distance entre 2 objets :

    Initiation la programmation oriente objet avec Alice 28

  • Nous allons utiliser la fonction "spiderRobot distance to" avec l'argument "rock", nous aurons alors la distance entre le robot et le rocher. Mais o placer cette fonction ? Il ne faut pas oublier qu'une fonction renvoie une valeur, tout se passe comme si au moment de l'excution du programme, Alice remplaait la fonction (ici "spiderRobot distance to rock") par la valeur retourne par cette mme fonction.

    O avons-nous besoin de cette valeur ? Dans la fonction "move" (pour remplacer nos "1 meter"), nous allons donc remplacer "1 meter" par la fonction "spiderRobot distance to rock" dans la mthode "spiderRobot move foreward......". Simple, non ?

    On constate quelques problmes : Le robot se dplace trop vite, mais bon, un petit coup de "duration" devrait pouvoir rsoudre

    le problme. L'animation n'est plus vraiment adapte, mais l encore rien qui ne puisse tre rsolu. Le robot "entre" carrment dans le rocher (il n'y a pas de dtection de collision dans Alice).

    L, nous devons plus srieusement nous pencher sur la question :la fonction "spiderRobot distance to rock" renvoie la distance entre les 2 centres des objets (ici le robot et le rocher), le rsultat obtenu, mme s'il ne nous convient pas, est tout fait logique.Pour que cela fonctionne il faudrait, la distance centre rocher centre robot, retrancher la moiti de la largeur du robot plus la moiti de la largeur du rocher (faites un petit schma pour vous en convaincre !)

    rsum : distance parcourir par le robot = distance centre robot centre rocher- (largeur du robot/2+largeur du rocher/2)

    Bien videmment, Alice est capable d'effectuer ce genre d'opration avec des fonctions (ne jamais oublier, qu'au cours de l'excution du programme, Alice "remplace" la fonction par la valeur renvoye par la fonction).

    Il existe des fonctions "largeur des objets" (ex "rock's width" pour la largeur du rocher) et la possibilit d'effectuer les 4 oprations avec les fonctions (utiliser la fonction "math" du menu droulant)

    Pour les oprations il faut d'abord mettre une valeur quelconque (par exemple : "spiderRobot distance to rock-1") puis remplacer la valeur quelconque par la fonction qui nous intresse (ici on remplace "1" par "spiderRobot's width").

    Initiation la programmation oriente objet avec Alice 29

  • les structures de contrles

    Les boolens

    Les valeurs renvoyes par les fonctions ne sont pas forcment des nombres. Une fonction peut aussi renvoyer un boolen. Qu'est-ce quun boolen ? Un boolen peut prendre uniquement 2 valeurs vraies ou faux (true ou false), un peu comme le binaire. Imaginons la fonction "est une fille", si l'on applique la fonction l'objet "Robert", la fonction renverra "faux" ( condition que Robert soit un garon !), si l'on applique cette fonction "Gertrude", la fonction renverra "vrai" ( condition que Gertrude soit une fille).

    Autre fonction possible : "a est gal b" (traduction Alice : "a = = b", not le double = qui montre que l'on a affaire une fonction).Imaginons le programme suivant:a=15b=20si maintenant on applique la fonction a = = b, elle nous renverra "faux".Autre programme:a=15b=15la mme fonction renverra "vrai".

    Le couple if/else

    Comme dit dans l'introduction nous allons pouvoir utiliser l'instruction if couple une fonction pour "aiguiller" le programme dans une direction ou une autre, exemple :soit une fonction boolenne (qui renvoie vrai ou faux) : fon1 soient 3 instructions quelconques : inst1,inst2 et inst3

    Nous allons trouver la structure suivante :

    if fon1 : inst1else : inst2inst3

    Voil ce qui va se passer : si la fonction fon1 renvoie "vrai" le programme excutera inst1 puis inst3 si la fonction fon1 renvoie "faux" le programme va excutera inst2 puis inst3

    L'instruction inst3 est donc quoiqu'il arrive excute (elle est en dehors du if/else), en revanche le programme devra "choisir" entre inst1 et inst2 (selon la valeur retourne par fon1)

    Le else n'est pas obligatoire, on trouve alors la structure suivante :

    if fon1 :inst1inst3

    avec pour rsultat : si la fonction fon1 renvoie "vrai" le programme excutera inst1 puis inst3 si la fonction fon1 renvoie "faux" le programme excutera uniquement inst3

    Initiation la programmation oriente objet avec Alice 30

  • diagramme

    Les programmeurs font souvent appel des schmas pour reprsenter la structure de leurs programmes. Ces schmas sont tellement courants que certains symboles sont standardiss :

    On utilise aussi le rond qui signifie "la suite du programme sur une autre page"

    le programme :if condition :

    instruction Aelse :

    instruction Bsuite du programme.......

    Se traduit donc

    Initiation la programmation oriente objet avec Alice 31

  • Bien videmment, l aussi, le else n'est pas obligatoire :

    Et dans Alice alors ?

    Crer ce genre de structure avec Alice est relativement simple (comme d'habitude !?)

    Il suffit (une fois de plus) de faire un "glisser-dposer" et de choisir "true" dans le menu droulant. Ensuite, il faut remplacer "true" par la fonction qui nous intresse (cette fonction devra bien sr renvoyer un boolen).

    Initiation la programmation oriente objet avec Alice 32

  • Prenons tout de suite un exemple concret :

    Revenons une fois de plus notre rencontre robot extra-terrestre.

    Aprs avoir t interpel par l'extra-terrestre, le robot se dirige vers ce dernier. De notre point de vue (le point de vue de la camra), le rocher est trop grand et l'extra-terrestre n'est plus visible. Mais il n'est pas totalement exclu que la perspective nous trompe et que le robot soit suffisamment grand pour voir l'extra terrestre par-dessus le rocher.

    Nous allons donc modifier le programme comme suit :

    Si le robot est plus petit que le rocher alors le robot doit allonger son cou sinon (sous entendu le robot n'est pas plus petit que le rocher !) : ne rien faire de plus.Nous allons utiliser la fonction "spiderRobot is shorter than" avec "rock" comme argument. La fonction nous renverra true si le robot est plus petit et false si le robot n'est pas plus petit.

    Il ne reste plus qu' complter la ligne juste en dessous du if (le robot allonge son cou puis reprend sa position initiale). La ligne en-dessous du else restant vide (sinon : ne rien faire de plus)

    Dans ce cas prcis, la fonction renvoie true chaque excution : le robot est plus petit que le rocher ! Mais juste pour voir ce qui se passe, modifier (suffisamment) la taille du rocher pour que la fonction "spiderRobot is shorter than rock" renvoie " false ", constatez par vous mme le rsultat : le cou du robot ne s'allonge pas !

    Initiation la programmation oriente objet avec Alice 33

  • Encore quelques fonctions...

    D'autres exemples de fonctions renvoyant des boolens :

    a = = b a est gal b (si a gal b renvoie true)a!=b a est diffrent de ba>b a est suprieur ba>=b a est suprieur ou gal betc..

    Pratiquement, comment utilise-t-on ces fonctions dans un if ?

    Slectionner le if comme prcdemment (en choisissant true)

    slectionner la fonction qui vous intresse (par exemple avec a

  • les rptitions

    Parfois, il est ncessaire de rpter plusieurs fois la mme instruction (on pourrait recopier plusieurs fois la mme instruction, mais bon .....).

    Une fois de plus, revenons notre robot et notre extraterrestre !

    Dans la dernire version de notre programme " ftiche ", l'animation du robot n'est pas (plus) trs raliste, car ce dernier parcourt une grande distance en n'effectuant qu'un seul "pas". Si nous voulons amliorer cette situation, il faudrait revenir la situation prcdente o le robot n'avanait que d'un mtre.Mais bon, sommes-nous condamns ne faire avancer notre robot que d'un mtre ? Bien sr que non, si nous voulons que notre robot avance de 3 mtres, il suffit de rpter 3 fois le Dotogether suivant :

    Pour cela nous allons utiliser "Loop".

    Glisser-dposer "Loop" juste avant le Do together en choisissant "other..." et "3" (les instructions dans la boucle seront excutes 3 fois)On obtient donc :

    Voil cela fonctionne !

    Initiation la programmation oriente objet avec Alice 35

  • Exercices chapitre III

    Initiation la programmation oriente objet avec Alice 36

  • Exercice 3.1Crer une scne avec un loup et une vache. Le loup doit se diriger vers la vache jusqu' qu'il y ait contact entre les 2 animaux.

    Exercice 3.2Crer une scne avec "skatergirl" et "Pj" ( rechercher dans "People"). Faites sauter en l'air ces 2 personnages, sachant qu'ils sont tous les deux capable de s'lever de de leur taille.

    Exercice 3.3Un dragon ("Medieval") est intrigu par la prsence d'un ballon et dcide de se diriger vers lui. Arriv 30 m du centre du ballon, il dcide d'en faire le tour 3 fois pour mieux l'examiner, la fin de chaque tour le dragon essaye d'interpeler les occupants du ballon en leur criant "Hello". Dsespr, le dragon dcide de se diriger vers la camra. crire le programme correspondant cette scne.

    Exercice 3.4Crer un monde avec un bonhomme de neige et un tabouret (Kitchen)

    Le bonhomme de neige doit se diriger vers le tabouret. Vous devrez utiliser une boucle (Loop). La fonction "distance to" devra tre utilise pour dterminer le nombre de rptitions de la boucle. Il faut savoir que la fonction "distance to" renverra une valeur entire (sans les dcimales) si elle est utilise comme paramtre de "loop". Dplacer le bonhomme de neige pour vrifier que votre programme fonctionne quelque soit la position de dpart du bonhomme de neige.

    Initiation la programmation oriente objet avec Alice 37

  • Chapitre IV (1er partie)Les classes, les instances et les mthodes

    Initiation la programmation oriente objet avec Alice 38

  • Notion de classe et d'instance

    Comme dj dit prcdemment, Alice 2.2 permet l'apprentissage de la programmation oriente objet. Revenons sur ce concept si important en programmation moderne.

    Tous les objets proposs dans Alice sont aussi des objets au sens informatique du terme, on parlera d'ailleurs plutt de classe au lieu d'objet (vous remarquerez que dans le slecteur d'objet d'Alice, le nom des objets est prcd du mot class). Le nom d'une classe commence toujours par une majuscule (et pas seulement dans Alice).

    A chaque fois que vous incorporez un objet dans le monde, vous crez une instance de classe. La classe est en quelque sorte le moule, et l'instance est l'objet que vous fabriquez avec le moule. Comme pour un moule, il est tout fait possible de crer plusieurs instances diffrentes (dans une mme scne) toutes issues de la mme classe (vous l'avez d'ailleurs fait ds le premier chapitre : pour aligner les pingouins, vous avez cr plusieurs instances de la classe pingouin).

    Pour vous y retrouver, il est conseill de donner des noms diffrents chaque instance d'une mme classe (Alice le fait automatiquement en ajoutant des chiffres: penguin, penguin2, .......). Chaque instance issue d'une mme classe est l'origine identique (tous les objets issus du mme moule sont identiques), mais par la suite chaque instance pourra avoir "sa propre vie" (rien ne nous empche de peindre une pice en rouge et une pice en bleu malgr le fait qu'elles sortent du mme moule !).

    Nous avons cr 3 instances de la classe "Penguin" (penguin, penguin2,penguin3), qui au dpart taient toutes identiques. Ensuite, nous avons modifi un des attributs (properties) de penguin3, sa couleur. Bien videmment, cette modification n'a eu aucune consquence sur les autres instances de la classe pingouin.Enfin pour terminer, il faut noter que la classe "World" contient toutes les autres classes, cela a son importance pour la suite des vnements.

    les mthodes

    Nous avons dj, de nombreuses reprises, utilis les mthodes; nous allons maintenant un peu entrer dans les dtails.Chaque classe (et donc chaque instance de classe) possde des mthodes. Certaines mthodes sont communes plusieurs classes, on parle alors de "world-level methods" (le nom de ces mthodes commence par World.). Il existe aussi des mthodes, dites "class-level", qui au contraire, ne peuvent tre utilises que par une seule classe (nous verrons des exemples plus loin).

    Initiation la programmation oriente objet avec Alice 39

  • Utilisation des world-level-methods

    L'criture de nos premiers programmes nous a amen utiliser des mthodes "toutes prtes" par exemple la mthode "move". Il est possible d'crire ses propres mthodes, ce que nous avons d'ailleurs dj fait de nombreuses reprises, en crivant la mthode "World.my first method".

    Au lieu d'crire le programme dans une seule mthode (dans "World.my first method"), il est souvent beaucoup plus judicieux de dcomposer le programme en plusieurs mthodes et d'appeler ces mthodes au moment opportun.

    Prenons un exemple simple:nous allons crer un monde avec un livre et une tortue.

    le livre et la tortue se dirigent l'un vers l'autre la tortue demande au livre s'il veut faire la course, le livre rpond "non, pas aujourd'hui" le livre et la tortue s'loignent l'un de l'autre

    Bien videmment, nous pourrions trs bien crire le programme dans sa totalit dans la mthode "World.my first method" comme nous l'avons toujours fait jusqu' prsent (c'est sans doute la bonne mthode dans un cas aussi simple), mais pour illustrer notre propos nous allons scinder notre programme en 3 parties en crant 3 mthodes (une par tape).

    Ces mthodes seront forcment des "world-class method" car elles concernent 2 classes diffrentes (Class Tortoise et Class Hare). Passons la pratique :

    En prenant bien soin de slectionner World (ce sont des "world-class method"), cliquer sur "create new method". Nous allons nommer cette premire mthode "rencontre"

    Initiation la programmation oriente objet avec Alice 40

  • Programmons cette mthode "world.rencontre" :

    Rien de spcial signaler, que du connu.

    Si nous lanons notre programme, il ne se passera strictement rien, car en faisant preuve d'un peu d'observation, nous pouvons remarquer que la premire chose que fait Alice au lancement d'un programme, c'est d'appeler la mthode "world.myfirst method"

    Or, la mthode "world.myfirst method" est pour l'instant vide. Passons la programmation de la 2e mthode, nous reviendrons sur ce point plus tard.

    Avant d'attaquer la deuxime mthode, faisons une petite parenthse et parlons un peu des commentaires. En programmation, il est trs important de commenter ses programmes pour expliquer d'ventuels lecteurs ce que l'on a voulu faire. Pour ajouter un commentaire, il faut cliquer sur "//" en bas gauche.

    Initiation la programmation oriente objet avec Alice 41

  • Un petit exemple avec la mthode world.rencontre

    Vous pouvez ajouter des commentaires o bon vous semble, fin de la parenthse.

    Revenons maintenant notre seconde mthode.Nous allons crer une mthode "discussion" (toujours une "world-class method")

    En suivant le mme cheminement que prcdemment nous arrivons :

    Initiation la programmation oriente objet avec Alice 42

  • et pour la 3e mthode ("separation ", attention pas d'accent pour le nom des mthodes) :

    Pour lancer nos 3 mthodes (l'une aprs l'autre) nous pourrions modifier "Events". Nous allons plutt choisir une deuxime stratgie :Quand Alice excute un programme, il lance par dfaut la mthode "world.my first method" (on dira plutt qu'Alice appelle la mthode "world.my first method"). Il est possible d'appeler une mthode dans une autre mthode. Nous allons donc complter la mthode "world.my first method" avec des appels aux mthodes "world.rencontre", "world.discussion" et "world.separation" (une fois de plus tout se fait avec du "cliquer-dplacer" !)

    Voil, vous pouvez maintenant "admirer" le rsultat.

    En programmation, il est trs courant de segmenter un programme en un grand nombre de mthodes au lieu d'crire une seule mthode "gante". En effet, cela permet :

    de grer plusieurs problmes simples au lieu d'avoir grer 1 seul problme complexe de travailler plusieurs sur un mme programme (moi je m'occupe de la mthode

    "rencontre" et toi de la mthode "discussion") si une action doit se rpter plusieurs fois dans un mme programme, il suffit d'crire une

    seule mthode et de faire plusieurs fois appel cette mthode. De rendre les programmes beaucoup plus clairs (lecture facilite notamment si les mthodes

    sont correctement commentes).

    Initiation la programmation oriente objet avec Alice 43

  • En bref, il faudra privilgier cette faon de travailler (c'est plus qu'un conseil !!). Tout dveloppement srieux devra forcment passer par la phase "fragmentation du problme" et "mise en place de la liste des mthodes crire".

    mthodes et paramtres

    Crons une scne avec 2 personnages : class Pj et class Mana.L'instance cre partir de la class Mana se nommera Gertrude et l'instance cre partir de la class Pj se nommera Robert (on renommera donc les 2 instances)

    Nous allons crire un programme permettant au personnage de se prsenter. La prsentation se fera en 3 parties : le personnage donne son nom, le personnage avance vers la camra, le personnage incline sa tte en guise de salut. Nous allons donc crire 3 mthodes par personnage : une mthode "identification", une mthode "avance" et une mthode "incline" (toutes ces mthodes devront tre des "world-class method").

    Voici la mthode "identification" pour Gertrude :

    Pour tester cette mthode, il suffit de l'appeler dans "world.my first method" comme prcdemment.

    Initiation la programmation oriente objet avec Alice 44

  • Voici la mthode "avance" :

    et enfin la mthode "incline":

    Et maintenant il n'y a plus qu' rcrire exactement les mmes mthodes, mais cette fois-ci pour Robert ! Eh bien non ! Il y a beaucoup plus pratique faire :

    En effet, si l'on regarde toutes ces mthodes de plus prt, seules 2 choses vont changer : l'instance concerne (c'tait Gertrude, cela sera Robert) et la chane de caractre (Gertrude dit :"je m'appelle Gertrude" et Robert dira :"je m'appelle Robert"). Cela vaut-il vraiment le coup de tout rcrire pour si peu ?

    Pour viter cela, nous allons utiliser les paramtres des mthodes. L'ide c'est d'crire une seule mthode (pour les 2 instances) en remplaant ce qui doit changer d'une instance l'autre par un paramtre.

    Crons un paramtre pour la mthode identification :

    Initiation la programmation oriente objet avec Alice 45

  • Vous devez entrer un nom (ici cela sera "personnage") et le type de paramtre (ici cela sera un objet)

    Vous devez ensuite cliquer-dposer le paramtre nouvellement cr la place de l'objet Gertrude Attention il existe un 3e Gertrude, mais ce 3e Gertrude n'est pas un objet, mais une chane de caractre (ce qui s'affiche dans les bulles), pour remplacer ce 3e Gertrude nous aurons crer un nouveau paramtre.

    Nous obtenons donc :

    Initiation la programmation oriente objet avec Alice 46

  • Crons un deuxime paramtre de type String (chane en anglais) on le nommera "nom". Il devra remplacer le 3e "Gertrude" :

    "personnage" et "nom" seront remplacs par les valeurs dsires au moment de l'appel de la mthode world.identification (dans world.my first method)

    Alice vous demandera par quoi voulez-vous remplacer les paramtres personnage et nom au moment du cliquer-dposer de la mthode identification dans world.my first method.Vous pouvez d'ores et dj tester le programme avec uniquement la mthode identification.

    Il nous reste modifier les autres mthodes en crant un paramtre nom de type objet pour la mthode avance et un paramtre nom_tete (attention pas d'accent) de type objet pour la mthode incline.

    Initiation la programmation oriente objet avec Alice 47

  • Compltons la mthode world.my first method avec les appels aux diffrentes mthodes.

    Vous pouvez aussi modifier l'ordre des appels aux mthodes

    Initiation la programmation oriente objet avec Alice 48

  • Vous pouvez aussi crer un paramtre "distance" de type nombre, si vous voulez dcider de la distance faire parcourir au personnage au moment de l'appel de la mthode avance.

    Initiation la programmation oriente objet avec Alice 49

  • Exercices chapitre IV1re partie

    Initiation la programmation oriente objet avec Alice 50

  • Exercice 4.1

    Un paysage enneig, un bonhomme de neige, une bonnefemme de neige. Le bonhomme de neige salut la bonnefemme de neige en enlevant puis en remettant son chapeau. La bonnefemme de neige lui repond avec le mme geste.Ecrire une World-level-method permettant au bonhomme de neige et la bonnefemme de neige de se saluer comme dcrit ci-dessus (attention une seule mthode pour les deux !). Pourquoi n'crit-on pas une Class-level-method ?

    Exercice 4.2

    Composer une scne avec un magicien, une assistante de magicien, un lapin et une table. L'assistante du magicien est allonge sur la table. Ecrire une mthode "levitation" permettant au magicien de faire voler (lvitation) aussi bien le lapin que l'assistante.

    Exercice 4.3

    Placer 4 dragons au sol pour qu'ils forment un losange. Crer une mthode "vol_du_dragon" permettant 2 dragons d'changer leur place. Les dplacements devront se faire en volant. Les dragons ne devront pas voler la mme altitude cause du risque de collision. La mthode "vol_du_dragon" devra comporter 4 paramtres.

    Initiation la programmation oriente objet avec Alice 51

  • Chapitre IV (2e partie)Les mthodes Class-Level et l'hritage

    Initiation la programmation oriente objet avec Alice 52

  • les Class-Level method

    Nous allons maintenant nous intresser aux Class-Level method. Une Class-Level method est crite pour une classe donne. Par exemple la mthode penguin.wing_flap est une Class-Level method de la Class Penguin (on peut remarquer que le nom de la mthode ne commence plus par world, mais par le nom de la classe et que cette mthode admet un paramtre "times" (nombre de battements d'aile)).Voici l'appel de la mthode :

    Nous allons ajouter une Class-Level method qui permettra une instance de la classe IceSkater de patiner, car comme vous pouvez le constater la classe IceSkater ne possde pas ce genre de mthode. Dit autrement, nous allons apprendre la patineuse patiner !

    Le patinage est un mouvement complexe simuler, car il fait appel plusieurs parties du corps.Pour patiner, la patineuse doit faire glisser vers l'avant sa jambe gauche puis faire glisser vers l'avant sa jambe droite, la difficult rside dans le fait que le haut du corps doit aussi suivre ce mouvement. En programmation quand on a affaire un problme complexe, on essaye de le fragmenter en plusieurs problmes moins complexes. Ce n'est donc pas une mthode que nous allons crer, mais trois :Une mthode patinage, qui fera avancer la patineuse et qui servira appeler tour tour les 2 autres mthodes (patinagegauche et patinagedroite).

    Crons la mthode patinagegauche :Dans un premier temps, slectionnez l'instance iceskater puis cliquez sur "create new method ", appelez-la " patinagegauche ", voil, vous avez cr votre premire Class-Level method (vous pouvez constater que le nom de la mthode commence bien par IceSkater)

    Initiation la programmation oriente objet avec Alice 53

  • Il ne nous reste plus qu' complter notre mthode (il ny a rien de spcial dire, que du connu, sauf l'instruction wait) :

    Voici patinagedroite :

    Initiation la programmation oriente objet avec Alice 54

  • et enfin la mthode patinage :

    N'oublions pas la mthode world.my first method (si vous voulez avoir le temps d'admirer la patineuse, pourquoi ne pas faire appel une petite boucle ?)

    Les Class-Level method et les paramtres

    Comme pour les World-Class method, les Class-Level method peuvent admettre des paramtres.crivons une autre Class-Level method pour la classe IceSkater.

    Notre patineuse sait dsormais patiner, nous allons maintenant lui apprendre faire la toupie. Nous allons utiliser 3 mthodes : une mthode pour prparer la toupie (prepa_toupie), une mthode pour effectuer la toupie (toupie) et une mthode pour terminer la toupie (fin_toupie). Les mthodes prepa_toupie et fin_toupie seront des Class-Level method sans paramtre. La mthode toupie sera une Class-Level method avec un paramtre (le nombre de tours effectuer). De plus, cette mthode appellera la mthode prepa_toupie et la mthode fin_toupie.

    Initiation la programmation oriente objet avec Alice 55

  • La mthode prepa_toupie :

    La mthode fin_toupie :

    La mthode toupie avec l'appel aux autres mthodes et le paramtre nbre_tours :

    Initiation la programmation oriente objet avec Alice 56

  • et enfin la mthode World.my first method (patine-toupie-patine) :

    cration d'objet et hritage

    Notre instance iceSkater (attention je parle bien de l'instance, pas de la classe IceSkater, j'espre que maintenant, vous faites bien la diffrence !) possde maintenant 2 nouvelles mthodes (nous avons cr plus de 2 mthodes, mais il n'y en a que 2 directement utilisables : patinage et toupie). Si nous crons un nouveau monde et que nous utilisons de nouveau la class IceSkater pour crer une nouvelle instance, nos 2 nouvelles mthodes auront disparu. Faut-il "s'amuser" rcrire nos mthodes chaque fois que nous crons une instance partir de la classe IceSkater ? Bien sr que non !

    Nous allons utiliser notre instance iceskater (avec ces mtodes supplmentaires), pour crer une nouvelle classe SuperIceSkateur (nous aurions pu lui donner n'importe quel nom !). Cette nouvelle classe bnficiera de toutes les mthodes de la classe IceSkater (puisque notre instance iceskater est issue de la classe IceSkater) mais aussi des nouvelles mthodes que nous venons de crer (patinage et toupie). Nous dirons que la classe SuperIceSkater descend de la classe IceSkater (classe parent : Iceskater classe enfant : SuperIceSkater). Nous dirons aussi que la classe SuperIceSkater hrite des mthodes, des attributs(properties) et des fonctions de la classe IceSkater. Cette notion d'hritage est trs importante en POO .

    La personne qui utilisera la nouvelle classe SuperIceSkater pourra utiliser les mthodes patinage et toupie sans se soucier le moins du monde du code qu'il a fallu crire pour les programmer. Encore une fois, nous sommes ici au cur de la POO. Un programme crit avec un langage du type C++, Java ou Python (qui accepte la POO) fonctionnera exactement sur ce principe.

    Initiation la programmation oriente objet avec Alice 57

  • Assez parl thorie, passons la pratique :

    Pour crer notre nouvelle classe SuperIceSkater, il faut renommer notre instance iceskater en superIceSkater (encore une fois pas de majuscule au dbut du nom, pour l'instant, c'est toujours une instance pas encore une classe (oui, je sais la diffrence est un peu difficile comprendre, mais faites un effort, c'est trs important !). Ensuite, cliquer droit sur superIceSkater et choisir "save object...". Il ne vous reste plus qu' sauvegarder votre objet (votre nouvelle classe) dans un endroit appropri.

    Noter qu'Alice a mis un S la place du s (nous sauvegardons bien une classe !)

    Initiation la programmation oriente objet avec Alice 58

  • Si maintenant vous (ou un autre) dsire utiliser notre nouvelle classe SuperIceSkater, il suffira de cliquer sur "File" (menu du haut), et de choisir "Import" dans le menu droulant :

    Et voici un nouveau monde avec une instance superIceSkater issue de notre nouvelle classe SuperIceSkater.

    Initiation la programmation oriente objet avec Alice 59

  • Et comme vous pouvez le constater, notre instance iceSkater possde bien toutes les nouvelles mthodes :

    Quelques rgles respecter

    Il ne faut jamais appeller de World-level-method depuis une Class-level-method.

    A ne surtout pas faire !

    Prenons un exemple simple : nous programmons une nouvelle Class-level-method pour une instance toto (issue de la classe Toto) : toto.methode1. La mthode toto.methode1 fait appel une World-class-method : World.bonjour (programme par nos soins). Crons une nouvelle classe SuperToto partir de l'instance toto.

    Si nous essayons d'utiliser notre nouvelle classe SuperToto dans un autre monde (un nouveau programme), Alice nous renverra un mchant message d'erreur : "World.bonjour non dfinie". En effet dans notre nouveau programme la mthode World.bonjour n'existe pas , d'o le message d'erreur.

    Dans le mme genre, il ne faut jamais utiliser une instance dans une Class-level-method :Retrouvons notre superIceSkater. Nous allons crire une nouvelle Class-level-method pour superIceSkater extrmement (ridiculement ?) simple qui aura pour seul intert, de vous montrer, ce qu'il ne faut surtout pas faire.

    Initiation la programmation oriente objet avec Alice 60

  • Avant cela, ajoutons un pingouin notre scne. Notre nouvelle Class-level-method (se_tourner_vers) ne comportera qu'une seule instruction :

    Imaginons maintenant qu'extrmement fier de notre nouvelle mthode, nous dcidions de crer une nouvelle classe SuperSuperIceSkater pour pouvoir profiter de cette nouvelle mthode !!Et l, catastrophe :

    En bref, Alice vous dit :"penguin, connat pas !". En effet dans votre nouveau programme l'instance penguin n'existe pas. Voil pourquoi il ne faut surtout pas utiliser une instance dans une Class-level method.Comment faire alors ?

    Il faut tout simplement utiliser un paramtre de type objet la place de l'instance penguin.

    Comme a, pas d'erreur en cas de cration et d'utilisation d'une nouvelle. Ensuite, rien de nouveau !

    Initiation la programmation oriente objet avec Alice 61

  • Exercices chapitre IV2e partie

    Initiation la programmation oriente objet avec Alice 62

  • Exercice 4.4

    Crer un monde avec un cadenas combinaisons ( rechercher dans objects)Coder 6 Class-level-method :

    un_cran_a_gauche (tourne la roue du cadenas d'un cran vers la gauche) un_cran_a_droite (tourne la roue du cadenas d'un cran vers la gauche) un_tour_a_droite (tourne la roue du cadenas d'un tour vers la droite) un_tour_a_gauche (tourne la roue du cadenas d'un tour vers la gauche) ouvrir (ouvre le cadenas) fermer (ferme le cadenas)

    Une fois les mthodes codes, crer une nouvelle classe qui hritera de la classe Combolock (par exemple CombolockPlus)

    Exercice 4.5

    Exercice libre : choisir un objet, crer pour lui une nouvelle class-level-method (avec au moins 1 paramtre), partir de l'instance prcdente, crer une nouvelle classe. Imaginer une scne permettant d'illustrer l'utilisation de votre nouvelle classe (et surtout de votre nouvelle mthode).

    Initiation la programmation oriente objet avec Alice 63

  • Chapitre VInteraction utilisateur - machine

    Initiation la programmation oriente objet avec Alice 64

  • Nos programmes commencent tre complexes, mais jusqu' prsent, il manque l'essentiel :

    l'I-N-T-E-R-A-C-T-I-V-I-T-E. L'utilisateur est pour l'instant uniquement spectateur, or, dans la plupart des programmes, il interagit avec la machine par l'intermdiaire de la souris et du clavier. Pour grer cette interaction homme-machine, tous les programmes modernes sont pourvus d'un observateur d'vnements. L'observateur d'vnements surveille en permanence les priphriques d'entres (clavier et souris dans la plupart des cas) et ragit en consquence lors de l'utilisation de ces priphriques.

    et Alice

    Bien videmment, Alice possde un observateur d'vnements. On "programme" l'observateur d'vnements d'Alice grce la fentre "Events" (la fentre "Events" est un peu plus qu'un "simple" observateur d'vnements, car c'est dans cette fentre que l'on trouve le fameux "When the world starts, do world.my first method"

    Dans la fentre vous allez pouvoir choisir les actions entreprendre (souvent l'appel d'une mthode) en cas :

    d'appui sur une touche du clavier d'action avec la souris (clique sur un objet, dplacement,......)

    Prenons un exemple trs simple :Nous allons crer 2 vnements : "cliquer sur A" et "clic de souris sur l'instance penguin". L'vnement "cliquer sur A" appellera une mthode "penguin.saut" et l'vnement "clic de souris sur l'instance penguin " appellera la mthode "penguin.dit_bonjour".

    Pour crer un vnement, il faut cliquer sur......"create new event", ensuite, il ne reste plus qu' complter :

    Initiation la programmation oriente objet avec Alice 65

  • Pour obtenir ceci, il faut avoir au pralable cr les Class-level method saut et dit_bonjour.Il nous reste justement complter ces 2 mthodes :

    Et voil, enfin un programme avec de l'I-N-T-E-R-A-C-T-I-V-I-T-E !!

    Mthodes, paramtres, Events et if/elseL'tude de l'exemple suivant va nous permettre d'utiliser toutes les notions que nous venons d'tudier.Crons une scne avec une instance de la classe Nerd, une instance de la classe Jock et une instance de la classe Lunchlady

    L'ide est trs simple : si l'utilisateur clique sur lunchLady (que nous appellerons par la suite Gertrude), nerd devra dire : Gertrude , une pause, levez la main . Gertrude devra alors lever puis baisser la main. Si l'utilisateur clique sur jock (que nous appellerons par la suite Robert), nerd devra dire : Robert , une pause, levez la main . Robert devra alors lever puis baisser la main.Tout cela semble relativement simple raliser, mais nous allons essayer d'tre le plus propre possible , notamment en utilisant au maximum les paramtres des mthodes.

    Initiation la programmation oriente objet avec Alice 66

  • Nous allons crire uniquement 2 mthodes : appel, qui sera une class level method de la classe Nerd leve_main qui sera une world level method

    Voici la mthode appel :

    Vous remarquerez la prsence d'un paramtre de type String, nom_perso. Ce paramtre est utilis ds la premire ligne de la mthode. Cette mthode est appele par l'observateur d'vnements Events

    En cas de clic sur lunchLady, la mthode nerd.appel est appele avec le paramtre nom_perso gal Gertrude .En cas de clic sur jock, la mthode nerd.appel est appele avec le paramtre nom_perso gal Robert.

    Initiation la programmation oriente objet avec Alice 67

  • Voici maintenant la mthode leve_main :

    Cette mthode possde un paramtre perso, de type Object L'appel de cette mthode (et le choix de la valeur attribuer au paramtre perso) se trouve au niveau du if de la mthode nerd.appel.

    Initiation la programmation oriente objet avec Alice 68

  • Exercices chapitre V

    Initiation la programmation oriente objet avec Alice 69

  • Exercice 5.1

    Crer une scne avec un scientifique fou, une table (Furniture), un mixeur (Kitchen/Blender) et une tasse (Kitchen/Mug). Placer le scientifique fou derrire la table, le mixeur et la tasse sur la table. crire un programme permettant qu'un clic sur le mixeur entrane les vnements suivants :

    le scientifique fou se tourne vers le mixeur le bras du scientifique se tend vers le mixeur le mixeur se met tourner sur lui mme.

    De plus, un clic sur la tasse entrane : le scientifique fou se tourne vers la tasse le bras du scientifique se tend vers la tasse le liquide prsent dans la tasse disparat

    Vous devrez crire le moins de codes possible (faites preuves d'astuces lors de l'criture des mthodes), n'hsitez pas utiliser des paramtres.

    Exercice 5.2

    En "hommage" Lewis Carroll (auteur d'Alice aux pays des merveilles), vous allez crer une scne avec un arbre, un chat (cheshireCat) et un interrupteur (Controls/TwoButtonSwitch).Le chat, qui est perch dans l'arbre, devient invisible ( part son sourire) en cas d'appui sur le bouton rouge et doit redevenir visible aprs l'utilisation du bouton vert. Vous devez crire une seule mthode.

    Exercice 5.3

    Crer une scne avec un bonhomme de neige et 4 sphres (shapes/sphere) de 4 couleurs diffrentes (rouge, vert, bleu et jaune). crire un programme permettant au bonhomme de neige de prendre la couleur de la sphre choisie (on choisira la sphre en cliquant dessus). Un clic sur le bonhomme de neige doit le faire redevenir blanc. A chaque changement de couleur, le bonhomme de neige doit "dire" sa couleur.

    Exercice 5.4Crer une scne d'hiver avec un lac gel, un joueur de hockey, une crosse de hockey, un palet de hockey et un but de hockey. Placer 3 sphres colores (vert, rouge, jaune). Le joueur s'entrane frapper au but. L'utilisateur contrle le dclenchement et la puissance du tir en cliquant sur une des sphres (vert : faible, rouge : moyen, jaune : fort). L'appui sur la barre d'espace doit ramener le palet sa position d'origine.

    Initiation la programmation oriente objet avec Alice 70

  • Chapitre VIRetour sur les fonctions et le couple if/else

    Initiation la programmation oriente objet avec Alice 71

  • Nous avons plusieurs reprises utilis les fonctions proposes par Alice. Il est peut-tre bon de rappeler qu'une fonction renvoie une valeur (au contraire d'une mthode). Il est bien videmment possible de crer ses propres fonctions dans Alice et comme les mthodes, ces fonctions peuvent utiliser des paramtres.

    Les fonctions dans Alice ressemblent vraiment aux fonctions en mathmatiques (y = 3x+2 si x = 3 alors y = 11, on a bien une valeur d'entre (3), qui correspond un paramtre dans Alice, et une valeur de sortie (11)).

    Crer ses propres fonctions dans Alice

    Nous allons chercher simuler un ballon qui roule. La premire ide qui nous vient est d'utiliser la mthode move et la mthode turn dans un do together :

    Mais le rsultat n'est pas la hauteur de nos esprances !En effet, il ne faut pas oublier que le move se fait par rapport aux axes ports par le ballon, or, les axes du ballon tournent (mthode turn). Il nous faut donc utiliser AsSeenBy :

    Le rsultat est correct, mais si nous dcidons de changer la distance parcourue par le ballon, nous devrons aussi modifier le nombre de tours effectus par le ballon : tout cela n'est pas trs propre !Faisons un peu de maths (ou de physique !) : le ballon ne glissant pas sur le sol, quelle est la distance parcourue par le ballon quand il effectue un tour ? Alors ?La rponse est : la circonfrence du ballon, c'est dire 2R (R tant le rayon du ballon).Si le ballon parcourt une distance d, combien de tours doit-il effectuer ? (De plus en plus dur !).Une petit produit en croix nous permet de trouver : nbre de tour = d/2R. Revenons Alice, nous allons crer une fonction nbre_de_tours :Cette fonction sera utilise par la classe toyball, on slectionne donc l'instance toyball, l'onglet functions et enfin on clique sur create new function.On obtient alors :

    Initiation la programmation oriente objet avec Alice 72

  • Remarquez que la fonction cre apparat ct des mthodes (nous avons cr une class-level-method balle_qui_roule), il faut aussi remarquer le Return la fin de la fonction. Pour l'instant la fonction renvoie comme valeur 1, nous allons maintenant remplacer le 1. Mais avant a, nous devons crer un paramtre distance :

    Nous allons maintenant remplacer le 1 par distance/(2x3,14x(largeur de la balle/2)) car largeur de la balle/2 est tout simplement le rayon de la balle. On a donc distance/(3,14xlargeur de la balle) :

    Remarquez que nous avons uniquement complt la partie return de la fonction (ce qui est renvoy), nous aurions pu aussi crire des instructions juste au-dessus (nous verrons des exemples plus tard).Nous allons maintenant utiliser la fonction nbre_de_tours dans la class level method balle qui roule :

    Initiation la programmation oriente objet avec Alice 73

  • Nous pouvons mme utiliser un paramtre pour la mthode balle_qui_roule qui nous permettra de choisir la distance parcourir lors de l'appel de la mthode dans world.my first method :

    Voil l'appel de la fonction :

    Voil, cela fonctionne.

    Retour sur le couple if/else

    Nous allons crer une simulation de contrle de trafic arien :Crons une scne avec un aroport (ventuellement une tour de contrle), un avion et un hlicoptre.

    L'ide est de crer un programme permettant d'viter les collisions entre l'hlicoptre et l'avion.Si la diffrence d'altitude entre l'avion et l'hlicoptre est trop faible, le programme devra modifier l'altitude d'un ds deux engins. Voici l'ide :

    Cration d'une fonction "trop_pret" qui renvoie vrai si les 2 engins sont trop prt et faux si la distance de scurit est respecte. Une mthode "modif_alt" qui modifie l'altitude. La mthode world my first method appelle la mthode "modif_alt" (si besoin est !) puis fait avancer les 2 engins.

    Initiation la programmation oriente objet avec Alice 74

  • Commenons par l'criture de la fonction "trop_pret" :

    Notre fonction devra renvoyer un boolen

    Si la diffrence d'altitude entre les 2 engins est infrieure une certaine valeur, la fonction devra renvoyer "true" sinon elle renverra "false". Cette diffrence d'altitude sera donne par la fonction appartenant l'instance helicopter : "helicopter distance above". Nous devons respecter un certain ordre pour arriver au rsultat attendu:

    Initiation la programmation oriente objet avec Alice 75

  • Utilisons la fonction a
  • Nous devons faire des tests pour savoir qui est au-dessus et qui est en dessous :

    Si l'hlicoptre est au-dessus, l'hlicoptre monte de 2 m et l'avion descend de 2 m sinon l'avion monte de 2 m et l'hlicoptre descend de 2 m.

    Il nous reste crire la world.my first method :

    Visiblement le programme fonctionne trs bien quand l'hlicoptre est au-dessus de l'avion. En revanche quand l'hlicoptre est en-dessous de l'avion, la fonction "modif_alt" est systmatiquement appele (quelque soit la diffrence d'altitude entre les 2 engins). Nous avons donc affaire un bug. Essayons de comprendre pourquoi :

    Le problme vient de la fonction "helicopter distance above navyjet" utilise dans notre fonction "trop_pret". En effet, si l'hlicoptre est 10 m au-dessus de l'avion, la fonction "helicopter distance above navyjet" renverra la valeur 10. En revanche si l'hlicoptre est 10 m en dessous de l'avion, la fonction "helicopter distance above navyjet" renverra la valeur 10. Si vous rflchissez un peu notre problme vient de l. En effet - 10 est bien infrieur 4, il est donc logique que notre fonction "trop_pret" retourne "true" alors que la diffrence d'altitude est suprieure au 4 m "rglementaire". Pour que cela fonctionne, il faudrait que la fonction "helicopter distance above navyjet" renvoie 10 au lieu de -10, dit autrement, il faudrait supprimer le signe moins.

    Initiation la programmation oriente objet avec Alice 77

  • Les mathmatiques vont venir notre secours. Il existe en effet une fonction mathmatique qui supprime justement les signes moins : la valeur absolue. Valeur absolue de -10 est gale 10.

    Il faut donc demander Alice de prendre la valeur absolue de "helicopter distance above navyjet".Pour cela il suffit d'ajouter "absolute value of a" (fonction de world) devant "helicopter distance above navyjet".

    Notre programme fonctionne maintenant correctement (il reste un petit bug dans le calcul de la diffrence d'altitude, parfois l'hlicoptre semble au-dessus, et pourtant, c'est lui qui descend, mais l, on ne peut pas y faire grand-chose, c'est un bug dans Alice !)

    Voil, maintenant, on peut ventuellement mettre des paramtres (de type objet) la place de navyJet et d'helicopter, on peut aussi remplacer la distance de scurit par un paramtre de type nombre, mais bon, tout cela, on l'a dj vu auparavant et je vous laisse vous dbrouiller tout seul.

    Initiation la programmation oriente objet avec Alice 78

  • Exercices chapitre VI

    Initiation la programmation oriente objet avec Alice 79

  • Exercice 6.1

    Crer un monde avec une voiture et une route. Vous devez crire un programme permettant la voiture d'avancer de faon raliste sur la route (en faisant tourner les roues correctement).

    Exercice 6.2

    Crer un monde avec un pingouin. Ecrire une fonction permettant au pingouin de se dplacer (en glissant) alatoirement. Pour cela, il faudra crire une mthode "deplacement". A chaque appel de cette mthode le pingouin devra se dplacer (ce dplacement ne devra pas se limiter un simple avant-arrire ou un simple gauche-droite, il devra tre plus complexe). Pour vous aider, je vous signale qu'un move foreward avec un nombre ngatif comme argument entraine un mouvement vers l'arrire (mme principe pour les mouvements gauche-droite).

    Exercice 6.3

    Crer un monde avec une mare ronde (choisir "Class circle" dans "Shapes", puis colorer le cercle en bleu). Placer une abeille (Class Bee, ne pas hsiter la grossir) au-dessus de la mare. Ecrire une mthode permettant l'abeille de dcrire une trajectoire circulaire au dessus de la mare (interdiction d'utiliser "asSeenBy"), la circonfrence du cercle dcrit par l'abeille devra tre identique la circonfrence de la mare.

    Exercice 6.4

    Nous allons crer un programme permettant de travailler son vocabulaire en Anglais. Crer un monde avec un chat (Class Sitting_cat). Placer devant le chat 3 mots en 3D (les mots en 3D sont des objects comme les autres) : cat, dog et bird. Au cas o l'lve clique sur la bonne rponse (le bon mot en 3D), le chat devra dire :"Bravo tu es le meilleur". Si l'lve clique sur n'importe quoi d'autres, le chat devra hocher la tte et dire "Non, essaye encore une fois". Pour arriver vos fins, vous devrez crer une fonction "cestbon" qui renverra true en cas de bonne rponse et false en cas de mauvaise.

    Initiation la programmation oriente objet avec Alice 80

  • Chapitre VIIL'instruction while

    Initiation la programmation oriente objet avec Alice 81

  • Retour sur l'instruction loop

    Nous avons dj entre-aperu l'instruction loop dans le chapitre 3, commenons donc par quelques rappels :Si vous avez besoin de rpter plusieurs fois la mme instruction (ou le mme groupe d'instructions), vous devez utiliser la fonction loop.

    Crons un monde avec un lapin.

    Programmons une mthode (trs simple) pour faire sauter le lapin :

    Pour faire sauter le lapin plusieurs fois, il suffit d'utiliser loop :

    le lapin sautera 4 fois...

    Nous pouvons aussi placer une boucle (loop) dans une boucle :Rajoutons un pingouin notre monde et crivons un programme pour que le lapin accomplisse 3 sauts et qu'aprs chaque srie de 3 sauts, le pingouin dise : Encore, encore ! et effectue ensuite un tour sur lui mme.

    Initiation la programmation oriente objet avec Alice 82

  • Crons mthode pingouin_action (trs trs simple) :

    Crons la mthode lapin_saut (toujours trs simple) :

    et maintenant les appels des mthodes :

    Pourquoi le premier Loop 3 times est en dehors du Loop global (2 times) ?

    Noter aussi que 3 times peut-tre remplac par une fonction qui renverra le nombre de fois que la boucle devra s'excuter :

    Initiation la programmation oriente objet avec Alice 83

  • Un loop un peu particulier : l'instruction while

    En anglais while veut dire tant que . While est une boucle, mais une boucle un peu spciale : while est toujours associ une fonction qui renvoie un boolen. Tant que cette fonction renverra vrai , les instructions prsentes dans le while seront excutes. Crons un monde avec un pingouin et une tortue. Nous pouvons alors crire le programme suivant :

    Attention, une erreur de logique peut faire tomber le programme dans une boucle infinie (une fonction qui renvoie toujours vrai).

    While peut aussi tre utilis dans le gestionnaire d'vnements avec par exemple while something is true :Appuyer sur create new event puis slectionner while something is true :

    Je reviendrais plus tard sur Begin, During et End. Pour l'instant nous allons rcrire le programme du pingouin et de la tortue en utilisant le gestionnaire d'vnements :

    world.myfirstmethod sera uniquement utilis pour tourner le pingouin vers la tortue

    Initiation la programmation oriente objet avec Alice 84

  • Pour le reste, en utilisera le gestionnaire d'vnements

    Voil, le rsultat est presque le mme ! A vous de trouver la diffrence.

    Revenons maintenant sur Begin et End :Quand la fonction du while devient vraie avant d'excuter ou d'appeler une mthode (avec During ), il est possible d'appeler (d'excuter) une autre mthode. De la mme manire pour terminer le while (la fonction du while vient de devenir fausse), nous pouvons appeler une autre mthode grce End . Un petit exemple :

    Je pense que l'exemple parle de lui mme, analysez-le !

    NB : Il sera dans la plupart des cas beaucoup plus propre de crer des mthodes (ici c'est inutile, le programme est trop simple) et de les appeler avec Begin, During et End.

    Autre exemple qui peut s'avrer trs utile (notamment pour faire des jeux !) : while any key is pressed (tant qu'une touche est presse)Pour accder cette instruction, il faut d'abord choisir when any key is typed......

    Il faut ensuite faire clic droit sur When any key....... , choisir change to et slectionner While any key is ...

    Initiation la programmation oriente objet avec Alice 85

  • Vous pouvez alors complter Begin , During et End comme prcdemment

    Voici un petit exemple tout simple

    Initiation la programmation oriente objet avec Alice 86

  • Exercice chapitre VII

    Initiation la programmation oriente objet avec Alice 87

  • Exercice 7.1

    Ecrire un programme permettant de faire "tomber" le brouillard sur une scne par un simple appui sur la touche espace (le brouillard se lve ds que la touche espace est relche). Un personnage (de votre choix) devra annoncer l'arrive du brouillard (juste avant que le brouillard "tombe").

    Exercice 7.2

    Crer une scne avec un bonhomme de neige et une bonne femme de neige. L'utilisateur doit pouvoir contrler le bonhomme de neige (avant, arrire, tourner gauche, tourner droite). Le bonhomme de neige est extrmement timide, il devient rouge quand il s'approche un peu trop prs de la bonne femme de neige et redevient blanc quand il s'en loigne.

    Initiation la programmation oriente objet avec Alice 88

  • Chapitre VIIILes variables

    Initiation la programmation oriente objet avec Alice 89

  • Dans ce dernier chapitre, nous allons aborder le sujet des variables. La notion de variable est trs importante en programmation, voil pourquoi, il me parait important de prciser quelques notions gnralistes avant d'entrer dans le vif du sujet :

    Un programme passe son temps traiter des donnes. Pour pouvoir traiter ces donnes,l'ordinateur doit les ranger dans sa mmoire (la RAM). La RAM se compose de cases dans lesquelles nous allons ranger ces donnes (une donne dans une case). Chaque case a une adresse (ce qui permet au processeur de savoir o sont ranges les donnes).Alors, qu'est-ce quune variable ?Eh bien c'est une petite information (une donne) temporaire que l'on stocke dans une case de laRAM. On dit qu'elle est "variable" car c'est une valeur qui peut changer pendant le droulement duprogramme.Une variable est constitue de 2 choses : Elle a une valeur : c'est la donne qu'elle stocke (par exemple le nombre 5 ou la suite decaractres (chaine de caractres) bonjour ) Elle a un nom : c'est ce qui permet de la reconnatre.

    Les variables dans Alice

    Sans le savoir, vous avez dj de nombreuses reprises utiliss des variables dans Alice. Avez-vous dj utilis l'onglet "Properties" ? Oui, donc vous avez dj utilis des variables !En POO chaque instance va possder des mthodes (vu et revu.....) et des variables (que l'on appelle aussi des attributs, mais par souci de simplicit, je n'utiliserai que le terme de variable). Par exemple, dans Alice, le pingouin possde la mthode wing_flap

    et la variable "color"

    Comme dj dit plus haut: instance d'un objet = des variables + des mthodes (ou fonctions) dans Alice, mais cette ide est vraie en POO plus gnralement.Enfin, il faut savoir que la valeur d'une variable peut tre modifie en utilisant une mthode (vous avez dj eu faire ce genre de choses de nombreuses reprises).

    Initiation la programmation oriente objet avec Alice 90

  • Crer ses propres variables d'instance

    Cration d'un chrono

    Chaque instance possde des variables, mais vous pouvez aussi crer les vtres. Nous allons prendre un exemple : la cration d'un chrono.Nous allons utiliser un texte en 3D, ce texte est une instance (un objet) comme un autre il possde donc des mthodes et des variables (de toute faon, en POO, tout est objet !Au dpart la variable "text" de "3D text" est gale zro.

    Puisque nous voulons crer un chrono, nous allons renommer l'instance 3D text en "chrono" (nous aurions trs bien pu laisser 3D Text, mais bon, je trouve cela plus logique de changer le nom)

    Il est maintenant temps de crer une nouvelle variable pour chrono : "temps"

    Initiation la programmation oriente objet avec Alice 91

  • Appuyer sur "create new varialbe"

    et entrer le nom de la nouvelle variable (temps) dans le champ prvu cet effet (Name). On laissera "Number" slectionn.

    Voil nous avons cr une nouvelle variable de type nombre :

    Vous remarquerez que par dfaut temps = 1

    Initiation la programmation oriente objet avec Alice 92

  • Nous allons maintenant crer une nouvelle mthode (une classe level method) pour "chrono", on l'appellera "temps_ecoule".Nous allons utiliser un while dans notre mthode : "tant que "temps" est infrieur 61" suivit d'un "do in order"

    Pourquoi chrono.temps < 61 ? Tout simplement parce que notre chrono devra fonctionner pendant 1 minute (alors pourquoi pas 60 ? Rflchissez bien la question, vous allez trouver vous mme la rponse !!). Par la suite, nous remplacerons 61 par un paramtre. Par ailleurs vous remarquerez que comme temps est une variable de l'instance chrono on crira chrono.temps.

    Qu'allons nous mettre dans le "Do in order" ?

    Premire chose, notre variable temps est de type "number" alors que la variable "text" est de type "string" (chaine de caractre). Or, la premire chose que nous voulons faire c'est d'utiliser la valeur contenue dans la variable "temps" et de l'afficher l'cran grce la variable "text", il faut donc, transformer le nombre contenu dans la variable "temps" en chaine de caractre, puis d'associer cette chaine de caractre la variable "text". Tout ceci a l'air compliqu, mais dans Alice cela se fait en une seule ligne :

    Pour avoir cette ligne, il faut :

    "Enmener" la variable "text" dans le "Do in order", choisir "default string" dans le menu."Dposer" la fonction "what a string" (vous la trouverez dans l'onglet "function" de "world") la place de "default string" choisir "chrono" puis "chrono.temps" dans le menu droulant. N'oubliez pas le "duration=0".

    Initiation la programmation oriente objet avec Alice 93

  • Ensuite nous allons ajouter un "wait 1 second"

    Enfin, nous allons terminer notre boucle en augmentant la valeur de l'attribut "temps" d'une unit.

    Pour obtenir cette dernire ligne, il faut "emmener" l'attribut "temps" dans le "Do in order" et choisir "increment chrono.temps by 1" dans le menu droulant. L aussi, ne pas oublier le "duration = 0"

    Je pense que tout cela est limpide et ne demande aucune explication supplmentaire !!

    Il ne reste plus qu' appeler la mthode "temps_ecoule" depuis la mthode "world.my first method"

    Je vous laisse le soin de modifier la mthode "temps_ecoule" pour que la dure chronomtre soit dfinie dans un paramtre au moment de l'appel de la mthode.

    Utilisation des boolens

    Un petit exemple pour montrer l'utilit des variables de type boolens :Crons un monde avec un livre. L'ide de base est trs simple : en appuyant sur la barre espace le livre doit se mettre parler (blablabla), si vous appuyez de nouveau sur la barre espace, le livre devra arrter de parler.Le programme n'est pas si simple crire, car l'appui sur la barre espace devra dclencher ou arrter les paroles. Alors, comment faire ? Nous allons crer une variable de type boolen qui sera vraie si le livre est dj en train de parler et fausse si le livre est silencieux.

    Initiation la programmation oriente objet avec Alice 94

  • Nous allons crer une variable de l'objet "Hare" de type boolen : parle On_Off (qui sera false au dpart)

    Cette variable sera utilise dans "Events" :

    Tant que la variable parle On_Off est false, la mthode parle n'est pas appele, tant que parle On_Off est true la mthode parle est appele en permanence (utilisation du while).Voici d'ailleurs la mthode parle :

    On peut difficilement faire plus simple.

    Initiation la programmation oriente objet avec Alice 95

  • Il nous reste maintenant tudier la mthode choix. C'est cette mthode qui fera basculer l'attribut parle On_Off de false true et vice versa. C'est la mthode la plus complexe, mais aussi la plus intressante :

    Les variables dans les mthodes ou les fonctions : les variables locales

    Pour l'instant nos variables sont associes une instance de classe. Il existe dans Alice d'autres types de variables : les variables locales. Les variables sont associes des mthodes, crons une variable locale dans la mthode "world my first method" en cliquant sur "create new variable" :

    Nous appellerons cette variable : essai

    Comme vous pouvez le constater, notre variable est de type "number", mais elle aurait pu tre de type "Boolean", "Object" ou autre.Les variables locales s'utilisent de la mme faon que les variables d'instance, mais, chose trs importante, elles n'existent que dans la mthode o elles ont t cr (d'o leur nom de locale !).A partir du moment o vous "quittez" une mthode, la variable locale est "dtruite".

    Initiation la programmation oriente objet avec Alice 96

  • Ecrivons un petit programme : Crons une mthode "compteur"

    Nous avons cr une variable locale "var_compteur", sinon le programme ne pose pas de problme.

    Cette mthode est appele dans le gestionnaire d'vnements avec un while :

    Tant que la touche "entre" reste appuye, nous "restons" dans la mthode "compteur". Si nous relchons la touche "entre", nous sortons de la mthode "compteur", la variable "var_compteur" est "dtruite". Si nous appuyons de nouveau sur la touche "entre" la variable "var_compteur" est re-cr avec la valeur de dpart, pratiquement, le compteur est remis zro.

    Ecrivons le mme programme avec une variable d'instance la place de la variable locale :

    Nous avons cr une variable d'instance : "var_text"

    Initiation la programmation oriente objet avec Alice 97

  • Le reste du programme n'est quasiment pas modifi

    Pourtant cela change tout : la variable d'instance "var_text" n'est pas une variable locale, elle n'est donc pas "dtruite" en cas de "sortie" de la mthode "compteur", le compteur ne redmarre donc pas zro.

    Initiation la programmation oriente objet avec Alice 98

  • Exercices chapitre VIII

    Initiation la programmation oriente objet avec Alice 99

  • Exercice 8.1

    Crer une scne avec un lapin et un pingouin. Un clic sur le lapin fait augmenter le score du lapin d'une unit (le score sera un texte 3D). Mme chose pour le pingouin (cet exercice pourra par la suite vous servir pour dvelopper des jeux plus compexes)

    Exercice 8.2Crer une scne avec un mange (Amusement Park/Carousel) et un bouton (Controls/Button). Au dpart le ma