{{tag>cours dev poo pharo fun-mooc sommaire}}
====== Programmation objet immersive en Pharo ======
Tutoriel proposé par l'**inria** disponible à l'adresse https://mooc.pharo.org et sur la plateforme FUN-MOOC.
===== Installation de l'environnement Pharo =====
Pharo est à la fois un langage et un environnement de développement (IDE). Pour faciliter l'installation nécessaire au suivi du MOOC, une image spécifique de Pharo est proposée via **Pharo Launcher**.
* Télécharger la version de [[https://pharo.org/download|Pharo Launcher]] adaptée à votre système;
* Pour les systèmes GNU/Linux c'est une archive ZIP, décompresser l'archive.
sudo unzip PharoLauncher-linux-3.0.1-x64.zip -d /opt/
sudo chown -R yoann:yoann /opt/pharolauncher
# lancer l'application
/opt/pharolauncher/pharo-launcher &
* Au premier lancement de Pharo Launcher la liste de vos images est vide;
* Cliquer sur le bouton ''New'' pour lancer l'assistant de création d'images;
* Sélectionner la catégorie ''Pharo Mooc'' et le template ''Pharo Mooc'' puis cliquer sur le bouton ''Create image''.
* L'image est téléchargée localement et apparaît dans la liste des images disponibles.
* Cliquer sur le bouton ''Launch'' pour lancer l'exécution de l'environnement de développement.
L'image est sauvegardée dans le répertoire utilisateur et pèse environ 200 Mo.
===== Cycles de progression =====
Le Mooc propose 5 profils pour suivre le cours à des vitesses et niveaux différents. Les séquences du cours seront étiquetées en fonction des profils. Ces profils ne sont pas exclusifs.
* 🐥 Débutant complet [Newbie] Focalisez-vous sur les premiers cours et suivez le cours jusqu'au bout sans essayer de tout comprendre. Détendez-vous et prenez le temps de comprendre que le système est écrit en lui-même. Focalisez-vous également sur les outils de navigation (senders et implémenteurs). Pour les débutants complets : nous vous conseillons vivement de commencer par la séquence facultative nommée "Presequel" consacrée aux bases de la programmation orientée objet.
* 🌐 En quête de Web [Web] Pour ceux qui se focalisent sur le web, nous conseillons de commencer par la syntaxe.
* 🎁 Rafraîchir votre vision OO [OO] Si vous voulez repenser votre approche de la programmation Orientée Objet, prêtez attention au fait que même des librairies aussi essentielles que les booléens ou les collections vous immergent dans un monde d'objets.
* 🌶 Devenir un expert Pharo [Xpert] Eh bien cela signifie qu'il faut parcourir tout le contenu en laissant éventuellement de côté la partie web si vous êtes pressés.
* 🔮 En quête de magie noire [Magic] Si vous êtes intéressé par des notions avancées, proche de la magie noire ;-) comme la réflexion, les méta-classes, la méta-programmation, etc... qui font de Pharo un langage OO unique. Vous devrez déjà connaître OO et être un expert Pharo.
===== Préambule =====
Section à l'attention des débutants. Aborde rapidement les bases de la programmation orientée objet **avant** de commencer le MOOC, cette séquence faisant office de préambule à l'ensemble du MOOC.
* 🐥 [[010_classes_objets_methodes|Introduction aux classes, objets et méthodes]]
* 🐥 [[020_objet|Qu'est ce qu'un objet]]
* 🐥 [[030_classe|Qu'est ce qu'une classe]]
* 🐥 [[040_methode_vs_message|Méthode versus messages]]
* 🐥 [[050_paradigme_oo|Le paradigme Orienté Objet]]
===== Semaine 1: Démarrage et découverte de la syntaxe =====
*[[100_objectifs_du_mooc|🐥 Objectifs du MOOC]]
*[[105_pharo_systeme_objet_immersif|🐥 Pharo: un système objet immersif]]
*[[110_vision_pharo|🐥 La vision Pharo]]
*[[115_modele_objet_de_pharo|🐥 Modèle objet de Pharo]]
*[[120_syntaxe_pharo|🐥 La syntaxe Pharo]]
*[[125_definition_classe_et_methode|🐥 Définition de classe et méthodes]]
*[[130_Selection_et_execution_des_expressions|🐥 Sélectionner et exécuter des expressions]]
*[[135_apprendre_pharo_avec_Prof_Stef|🐥 Apprendre Pharo avec Prof Stef]]
*[[140_coloration_syntaxique|🐥 Coloration syntaxique]]
*[[145_apprendre_les_raccourcis_claviers|🐥 Apprendre les raccourcis claviers]]
*[[150_packages_classes_methodes|🐥 Packages, Classes et Méthodes]]
*[[155_ajout_tests_unitaires| 🐥Ajout des tests unitaires]]
*[[160_complement_creation_methodes|🐥 Complément sur la création des méthodes]]
*[[165_sauvegarder_le_code_avec_iceberg|🐥 Sauvegarde du code via Iceberg]]
*[[170_initialisation_des_objets|🐥 Initialisation d'objets]]
*[[175_ameliorer_affichage_avec_printon|🐥 Améliorer l'affichage avec printOn:]]
*[[180_historique_des_sauvegardes_via_iceberg|🐥 Comprendre l'historique des sauvegardes avec Iceberg]]
*[[185_exercice_expressions_et_messges|🐥 Exercice Expressions et Messages]]
*[[190_miniprojet_tinyblog_presentation|🐥 Miniprojet TinyBlog: Présentation]]
*[[192_miniprojet_tinyblog_presentation|🐥 Miniprojet TinyBlog: Modèle de l'application]]
*🌶Challenge Challenge 0
===== Semaine 2: Syntaxe Pharo, blocks et inspecteur =====
* [[200_comprendre_les_messages|🐥 Comprendre les messages]]
* [[205_messages_pour_programmeurs_java|🐥 Messages pour les programmeurs Java]]
* [[210_messages_composition_et_precedence|🐥 Messages : Composition et Précédence]]
* [[215_messages_sequences_et_cascades|🐥 Comprendre les messages : Séquence et Cascade]]
* [[220_introduction_aux_blocks|🐥 Introduction aux Blocks]]
* [[225_boucles|🐥 Boucles]]
* [[230_booleens_et_conditions|🐥 Booléens et conditions]]
* [[235_parentheses_vs_crochets|🐥 Parenthèses vs Crochets]]
* [[240_yourself|🐥 Yourself]]
===== Semaine 3: Conception, classes méthodes et Collections =====
* [[ 300_]]
* [[ 305_]]
* [[ 310_variables_en_pharo| Les variables ]]
* [[ 315_application_http_basique | Une application HTTP basique ]]
* [[ 320_methodes_de_classe | Les méthodes de classe ]]
* [[ 325_principales_collections | Vue générales des principales collections ]]
* [[ 330_iterateurs | Les itérateurs ]]
* [[ 335_flux | Vue générale des flux (stream) ]]
* [[ 340_comprendre_return | Compréhesion du retour (return) ]]
* [[ 345_implementors_senders_class_reference ]]
* [[ 350_spotter]]
* [[ 355_die_mechanics_handle_dsl]]
* [[ 360_exercices]]
* [[ 365_Challenge ]]
===== Semaine 4: Héritage, LookUp et développement web =====
* [[ 400_heritage_les_bases | Les bases de l'héritage ]]
* [[ 405_heritage_et_lookup | Héritage et recherche de méthode ]]
* [[ 410_heritage_super | Héritage : super ]]
* [[ 415_heritage_doesnotunderstand | Héritage message DoesNotUnderstand:]]
* [[ 420_lookup_et_metaclasse | Recherche de méthode et métaclasse ]]
* [[ 425_methodes_de_classe_mecanisme_enregistrement | Les méthodes de classes comme mécanisme d'enregistrement]]
* [[ 430_presentation_pile_web_pharo | Présentation de la pile Web Pharo]]
* [[435_seaside_framework_web_innovant | Seaside: un framework web innovant ]]
* [[ 440_seaside_rendu_des_commosants | Seaside: rendu des composants]]
* [[ 445_seaside_apercu_metadonnees_et_rest | Seaside: aperçu sur les metadonnées et REST]]
* [[ 450_voyage_bdd_nosql | Voyage: base de données objet noSQL ]]
===== Semaine 5: =====
===== Semaine 6: =====
===== Semaine 7: =====
===== Ressources =====
* [[http://rmod-pharo-mooc.lille.inria.fr/MOOC/PharoMOOC/|Présentations et médias]]
* https://mooc.pharo.org
* {{pharocheatsheet.pdf}}
* [[https://rmod-files.lille.inria.fr/Team/Texts/Books/PharoByExample/PharoParLexemple/PharoParLExemple-20-06-2011.pdf|eBook Pharo par l'exemple]]
* [[http://books.pharo.org/tinyblog-tutoriel/book/TinyBlogFR-git86aab20.pdf|eBook Créer votre application web avec Pharo]