IFT1025 :: Démo été 2010
Programmation II
Informations
Préparation examens
Aide aux devoirs
Matériel démo/cours
Ressources utiles
Nom: Maxime Chevalier-Boisvert
E-mail: chevalma (à) iro (point) umontreal (point) ca
Heures de bureau: jeudi matin, 10h00 à 12h00
Bureau: local 3331 du pavillon André-Aisenstadt
Notez que si vous ne pouvez me voir pendant mes heures de bureau, il peut être possible d'arranger un rendez-vous par courriel.
Voici un ensemble de questions d'examens des années précédentes qui, je crois, sont une bonne préparation au final.
Je vous suggère de répondre à toutes ces questions comme s'il s'agissait d'un véritable examen. Vous trouverez les
réponses à la fin du document.
Document de préparation au final
Voici des exemples de code de traversée d'arbres en utilisant des méthodes récursives et itératives, illustrant la
traversée en profondeur et en largeur, ainsi que les ordres de traversée préfixe, postfixe et infixe.
Code de traversée d'arbres
Quand vous répondrez au véritable examen final, si vous ne vous rappelez pas du nom exact d'une méthode Java, vous pouvez quand même écrire un nom approximatif, pourvue que votre votre intention soit claire.
Si vous n'êtes pas certain de la réponse à une question, gardez cette question pour la fin de l'examen, et répondez de votre mieux. Éviter surtout de laisser des questions sans réponse.
J'ai rassemblée des questions d'examens des années précédentes qui, je crois, sont une bonne préparation à l'intra.
Je vous suggère de répondre à toutes ces questions comme s'il s'agissait d'un véritable examen. Vous trouverez les
réponses à la fin du document.
Document de préparation à l'intra
Pour ce devoir, vous devez implanter une simulation du protocole CSMA/CD sur un canal de communication partagé. Vous devez utiiser un bloc synchronized Java pour simuler l'envoi d'un message sur le canal. Ceci ne correspond pas à l'usage typique du bloc synchronized. Quand un thread essaie d'envoyer un message sur le canal, il fait un appel à la méthode wait (à l'intérieur du bloc synchronized) pendant un délai fixe qui correspond au temps nécessaire pour envoyer le message.
Quand le thread qui envoi son message fait un appel à wait, ceci libere le verrou et permet à d'autres threads d'entrer dans le bloc synchronized. Si un second thread réveille le thread qui est en train d'envoyer son message en faisant un appel à notify, ceci nous permet de détecter qu'une collision s'est produite, parce qu'un second thread a essayé d'envoyer un message sur le canal avant que le premier ne termine. L'utilité de la synchronization sur le canal ici est donc comme outil de simulation plutôt que pour protéger une ressource partagée.
Si vous utilisez un GUI editor comme celui de NetBeans pour concevoir votre interface graphique, assurez vous quand même de bien documenter votre code avec des commentaires Javadoc (incluant le code généré automatiquement).
N'oubliez pas non plus d'inclure vos fichiers source et votre fichier lisezmoi dans l'archive jar que vous soumettez. Si vous utilisez NetBeans, vous pouvez aller dans File->Project Properties->Build->Packaging et effacer le texte dans le champ "Exclude From JAR File" afin de vous assurez que votre code source soit inclus. Il est aussi possible d'éditer une archive jar manuellement avec un programme qui lit les fichiers compressés au format zip.
Pour afficher des cercles qui représentent les cellules vivantes, vous pouvez utiliser
la méthode fillOval() de la classe java.awt.Graphics:
http://java.sun.com/j2se/1.3/docs/api/java/awt/Graphics.html#fillOval%28int,%20int,%20int,%20int%29
Si vous exportez un fichier .jar à partir d'Eclipse, n'oubliez pas de cocher la case qui exporte aussi les fichiers source .java dans votre .jar. Vous pouvez ouvrir votre .jar avec un éditeur de fichiers .zip (ex: winzip) si vous voulez voir son contenu.
Vous pouvez télécharger les exemples vus pendant les sessions démo en cliquant sur les liens suivants:
Cours/démo du 23 juillet 2010:
Notes du professeur sur les structures de données
Quelques exercices sur la récursion
Notes PPT sur les algorithmes de tris
Implantation producer-consumer simple
Cours/démo du 19 juillet 2010:
Notes du professeur sur Java et Internet
Notes sur réseaux, internet (français)
Implantation jeux client/serveur
Notes PPT sur la récursion
Calcul de Fibonacci récursif
Tours de Hanoi, solution récursive
Démo du 16 juillet 2010:
Connexions web, classe URL, hash sets
Démo du 13 juillet 2010:
Interaction GUI, longs calculs avec SwingWorker
Démo du 9 juillet 2010:
Démo thread pool, producer-consumer, synchronization, interaction GUI
Diapositives sur les threads et la synchronization
Session du 6 juillet 2010:
Threads, synchronization, parallélisme
Session du 2 juillet 2010:
GUI généré avec le GUI builder de NetBeans
Session du 25 juin 2010:
Questions de programmation de l'Intra
Session du 11 juin 2010:
Lecture/écriture de fichiers textes, exceptions, dialogue ouverture de fichiers
Code des exercices vus en classe
Session du 4 juin 2010:
Programme calculatrice, GUI, événements
Code des exercices vus en classe
Session du 1 juin 2010:
Code des exercices vus en classe
Session du 28 mai 2010:
Héritage, résolution de variables
Code des exercices vus en classe
Session du 25 mai 2010:
Comptes de banque, hiérarchie d'héritage
Session du 21 mai 2010:
Classes, visibilité, héritage
Tableaux, matrices et packages
Interfaces graphiques, événements souris
Boutons, tableau tic tac toe
Pour installer Java et Eclipse/NetBeans:
Installation de Java
Page web de l'IDE Eclipse
Page web de l'IDE NetBeans
Liens à consulter:
Tutoriel sur le GUI Builder de NetBeans (vidéo YouTube)
Notes Génie Logiciel, UML
Diagrammes UML avec Eclipse
Tutoriel sur l'IDE Eclipse
Tutoriels Java de Sun
Spécification des APIs Java 6