{"id":306,"date":"2026-04-29T16:17:35","date_gmt":"2026-04-29T14:17:35","guid":{"rendered":"http:\/\/localhost:8080\/?p=306"},"modified":"2026-07-03T09:43:43","modified_gmt":"2026-07-03T07:43:43","slug":"fil-rouge-2nde-annee","status":"publish","type":"post","link":"https:\/\/noemieschaendel.fr\/?p=306","title":{"rendered":"Pacwoman"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-post\" data-elementor-id=\"306\" class=\"elementor elementor-306\">\n\t\t\t\t<div class=\"elementor-element elementor-element-1ec45fd e-flex e-con-boxed e-con e-parent\" data-id=\"1ec45fd\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-3d10312 elementor-widget elementor-widget-heading\" data-id=\"3d10312\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Pacwoman : honneur aux femmes !<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-2d1e2ab elementor-widget elementor-widget-image\" data-id=\"2d1e2ab\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" src=\"https:\/\/noemieschaendel.fr\/wp-content\/uploads\/elementor\/thumbs\/Capture-decran-du-2026-05-05-16-58-58-rn0kq2i427d658lt4k8m3z7xborjahkl6stp6cqeio.png\" title=\"Capture d\u2019\u00e9cran du 2026-05-05 16-58-58\" alt=\"Capture d\u2019\u00e9cran du 2026-05-05 16-58-58\" loading=\"lazy\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-e4bb916 e-flex e-con-boxed e-con e-parent\" data-id=\"e4bb916\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-668dbe4 elementor-widget elementor-widget-text-editor\" data-id=\"668dbe4\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<p style=\"text-align: justify;\"><span style=\"font-size: 14pt;\">\u00a0<\/span><\/p><p style=\"text-align: justify;\"><span style=\"font-size: 14pt;\">Second projet personnel r\u00e9alis\u00e9 en deuxi\u00e8me ann\u00e9e. Le but \u00e9tait d&rsquo;apprendre la Programmation Orient\u00e9e Objet (POO). Le choix du sujet \u00e9tait assez libre.\u00a0 Ayant une forte affinit\u00e9 pour le r\u00e9trogaming et voulant mettre \u00e0 l&rsquo;honneur le c\u00f4t\u00e9 f\u00e9minin en informatique, j&rsquo;ai donc d\u00e9cid\u00e9 de cr\u00e9er mon propre jeu en faisant un \u00e9diteur de niveau type Miss Pacman. La charte graphique se base sur les couleurs de ce jeu : le rose, orange, et jaune.<\/span><\/p><p>\u00a0<\/p><p style=\"text-align: justify;\"><span style=\"font-size: 14pt;\"><em><strong>Technologies choisies :<\/strong><\/em><\/span><\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-2d19359 e-con-full e-flex e-con e-parent\" data-id=\"2d19359\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-94baa5a elementor-widget__width-initial elementor-widget elementor-widget-image\" data-id=\"94baa5a\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img fetchpriority=\"high\" decoding=\"async\" width=\"1395\" height=\"511\" src=\"https:\/\/noemieschaendel.fr\/wp-content\/uploads\/2026\/04\/Capture-decran-du-2026-05-06-16-55-13.png\" class=\"attachment-1536x1536 size-1536x1536 wp-image-495\" alt=\"\" srcset=\"https:\/\/noemieschaendel.fr\/wp-content\/uploads\/2026\/04\/Capture-decran-du-2026-05-06-16-55-13.png 1395w, https:\/\/noemieschaendel.fr\/wp-content\/uploads\/2026\/04\/Capture-decran-du-2026-05-06-16-55-13-300x110.png 300w, https:\/\/noemieschaendel.fr\/wp-content\/uploads\/2026\/04\/Capture-decran-du-2026-05-06-16-55-13-1024x375.png 1024w, https:\/\/noemieschaendel.fr\/wp-content\/uploads\/2026\/04\/Capture-decran-du-2026-05-06-16-55-13-768x281.png 768w\" sizes=\"(max-width: 1395px) 100vw, 1395px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-adc1831 e-flex e-con-boxed e-con e-parent\" data-id=\"adc1831\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-994e1b0 elementor-widget elementor-widget-text-editor\" data-id=\"994e1b0\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<p><span style=\"font-size: 14pt;\">Voici les \u00e9tapes principales effectu\u00e9es dans le cadre de ce projet :<\/span><\/p><p><span style=\"font-size: 14pt;\"><strong><em>0. MVP et User stories<\/em><\/strong><\/span><\/p><p style=\"text-align: justify;\"><span style=\"font-size: 14pt;\">Il s&rsquo;agit de l&rsquo;\u00e9tape pr\u00e9paratoire du fil rouge. J&rsquo;ai du mettre en place les grandes lignes du projets en r\u00e9alisant des diagrammes de cas d&rsquo;usages, d&rsquo;activit\u00e9, pour ce d\u00e9but de projet. Il a fallu \u00e9galement d\u00e9finir le MVP (ici le fait de faire un \u00e9diteur de niveau), ainsi que les parties optionnelles \u00e0 venir par la suite (MVP+) tel que la jouabilit\u00e9. J&rsquo;ai \u00e9galement fait les maquettes de mon \u00e9diteur de niveau sur Figma.<\/span><\/p><p><span style=\"text-decoration: underline;\"><span style=\"font-size: 14pt;\">Comp\u00e9tences techniques<\/span><\/span><\/p><p><span style=\"font-size: 14pt;\">-&gt; Proposer une application coh\u00e9rente \u00e0 une demande client<\/span><br \/><span style=\"font-size: 14pt;\">-&gt; Documenter les objectifs d&rsquo;une application<\/span><br \/><span style=\"font-size: 14pt;\">-&gt; Documenter une proc\u00e9dure sous la forme d&rsquo;un algorithme<\/span><\/p><p><span style=\"text-decoration: underline;\"><span style=\"font-size: 14pt;\">Comp\u00e9tences associ\u00e9es<\/span><\/span><\/p><p><span style=\"font-size: 14pt;\">-&gt; Comprendre et s&rsquo;approprier une demande client<\/span><br \/><span style=\"font-size: 14pt;\">-&gt; R\u00e9fl\u00e9chir les d\u00e9veloppements \u00e0 r\u00e9aliser<\/span><br \/><span style=\"font-size: 14pt;\">-&gt; Savoir sp\u00e9cifier et documenter une solution logiciel<\/span><\/p><p data-renderer-start-pos=\"6267\" data-local-id=\"ea695265-8155-418c-9a6f-1c4555c6f86d\">\u00a0<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-b5300a2 e-flex e-con-boxed e-con e-parent\" data-id=\"b5300a2\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-af0c0d3 elementor-widget elementor-widget-heading\" data-id=\"af0c0d3\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Maquette de l'\u00e9diteur de niveau r\u00e9alis\u00e9e avec Figma <\/h2>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-1b7b136 elementor-widget__width-initial elementor-widget elementor-widget-image\" data-id=\"1b7b136\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"640\" height=\"576\" src=\"https:\/\/noemieschaendel.fr\/wp-content\/uploads\/2026\/04\/Capture-decran-du-2026-02-18-16-01-17.png\" class=\"attachment-large size-large wp-image-585\" alt=\"\" srcset=\"https:\/\/noemieschaendel.fr\/wp-content\/uploads\/2026\/04\/Capture-decran-du-2026-02-18-16-01-17.png 1016w, https:\/\/noemieschaendel.fr\/wp-content\/uploads\/2026\/04\/Capture-decran-du-2026-02-18-16-01-17-300x270.png 300w, https:\/\/noemieschaendel.fr\/wp-content\/uploads\/2026\/04\/Capture-decran-du-2026-02-18-16-01-17-768x691.png 768w\" sizes=\"(max-width: 640px) 100vw, 640px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-3e2ceb2 e-flex e-con-boxed e-con e-parent\" data-id=\"3e2ceb2\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-eb4f55d elementor-widget elementor-widget-text-editor\" data-id=\"eb4f55d\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<p>\u00a0<\/p><p><span style=\"font-size: 14pt;\"><em><strong>1. Classe<\/strong><\/em><\/span><\/p><p style=\"text-align: justify;\"><span style=\"font-size: 14pt;\">Pour cette \u00e9tape il a fallu mettre en place l&rsquo;environnement Java afin de pouvoir travailler sur le back-end. J&rsquo;ai d\u00fb d\u00e9finir les diff\u00e9rentes classes utiles en lien avec mes formes : rectangle pour les murs, le rond pour les billes \u00e0 manger, les triangles pour les fant\u00f4mes, et l&rsquo;hexagone pour Pacwoman.\u00a0<\/span><\/p><p>\u00a0<\/p><p><span style=\"text-decoration: underline;\"><span style=\"font-size: 14pt;\">Comp\u00e9tences techniques\u00a0<\/span><\/span><\/p><p><span style=\"font-size: 14pt;\">-&gt; <span class=\"fabric-text-color-mark\" data-renderer-mark=\"true\" data-text-custom-color=\"#172b4d\">Cr\u00e9ation d&rsquo;une architecture objet\u00a0<\/span><\/span><\/p><p>\u00a0<\/p><p><span style=\"text-decoration: underline;\"><span style=\"font-size: 14pt;\">Comp\u00e9tences associ\u00e9es<\/span><\/span><\/p><p><span style=\"font-size: 14pt;\">-&gt; <span class=\"fabric-text-color-mark\" data-renderer-mark=\"true\" data-text-custom-color=\"#172b4d\">S&rsquo;initier \u00e0 la programmation orient\u00e9 objet, conna\u00eetre la notion d&rsquo;objet, de classe, d&rsquo;attribut et de m\u00e9thode<\/span><\/span><\/p><p>\u00a0<\/p><p><span style=\"font-size: 14pt;\"><em><strong>2. Encapsulation<\/strong><\/em><\/span><\/p><p style=\"text-align: justify;\"><span style=\"font-size: 14pt;\">Durant cette phase, j&rsquo;ai du mettre en place un syst\u00e8me de getters et setters en fonction des attributs et m\u00e9thodes de chacune des classes pour en prot\u00e9ger certaines donn\u00e9es.<\/span><\/p><p>\u00a0<\/p><p style=\"text-align: justify;\"><span style=\"text-decoration: underline;\"><span style=\"font-size: 14pt;\">Comp\u00e9tences techniques<\/span><\/span><\/p><p><span style=\"font-size: 14pt;\">-&gt; <span class=\"fabric-text-color-mark\" data-renderer-mark=\"true\" data-text-custom-color=\"#172b4d\">Cr\u00e9ation, destruction et modification d&rsquo;instance de classes<\/span><\/span><\/p><p>\u00a0<\/p><p><span style=\"text-decoration: underline;\"><span style=\"font-size: 14pt;\">Comp\u00e9tences associ\u00e9es<\/span><\/span><\/p><p><span style=\"font-size: 14pt;\">-&gt; <span class=\"fabric-text-color-mark\" data-renderer-mark=\"true\" data-text-custom-color=\"#172b4d\">Comprendre l&rsquo;encapsulation : la port\u00e9e des variables et des m\u00e9thodes ainsi que l&rsquo;int\u00e9r\u00eat des getters et setters<\/span><\/span><\/p><p>\u00a0<\/p><p><span style=\"font-size: 14pt;\"><strong><em>3. H\u00e9ritage<\/em><\/strong><\/span><\/p><p style=\"text-align: justify;\"><span style=\"font-size: 14pt;\">Une fois l&rsquo;encapsulation effectu\u00e9, j&rsquo;ai d\u00fb regrouper mes classes en classe enfants reli\u00e9es \u00e0 une classe m\u00e8re \u00ab\u00a0Forme\u00a0\u00bb. Il a fallu faire en sorte que les m\u00e9thodes communes soient mises dans la classe m\u00e8re afin de les transmettre aux enfants, et non plus mettre individuellement pour chaque classe le m\u00eame type de m\u00e9thode. Ex : calculer l&rsquo;aire et le p\u00e9rim\u00e8tre sera commun \u00e0 chaque forme.<\/span><\/p><p>\u00a0<\/p><p><span style=\"text-decoration: underline;\"><span style=\"font-size: 14pt;\">Comp\u00e9tences techniques<\/span><\/span><\/p><p data-renderer-start-pos=\"4317\" data-local-id=\"50bc0850-ca5d-4c0b-a29a-f977410b29a2\"><span style=\"font-size: 14pt;\">-&gt; <span class=\"fabric-text-color-mark\" data-renderer-mark=\"true\" data-text-custom-color=\"#172b4d\">Cr\u00e9ation d&rsquo;une classe m\u00e8re et de classes h\u00e9rit\u00e9es<\/span><\/span><\/p><p data-renderer-start-pos=\"4317\" data-local-id=\"50bc0850-ca5d-4c0b-a29a-f977410b29a2\">\u00a0<\/p><p data-renderer-start-pos=\"4317\" data-local-id=\"50bc0850-ca5d-4c0b-a29a-f977410b29a2\"><span style=\"text-decoration: underline;\"><span style=\"font-size: 14pt;\">Comp\u00e9tences associ\u00e9es<\/span><\/span><\/p><p data-renderer-start-pos=\"4317\" data-local-id=\"50bc0850-ca5d-4c0b-a29a-f977410b29a2\"><span style=\"font-size: 14pt;\">-&gt; <span class=\"fabric-text-color-mark\" data-renderer-mark=\"true\" data-text-custom-color=\"#172b4d\">Comprendre l&rsquo;int\u00e9r\u00eat de l&rsquo;h\u00e9ritage : la hi\u00e9rarchie de classe et la sp\u00e9cialisation<\/span><\/span><\/p><p data-renderer-start-pos=\"4317\" data-local-id=\"50bc0850-ca5d-4c0b-a29a-f977410b29a2\">\u00a0<\/p><p><span style=\"font-size: 14pt;\"><em><strong>4. UML<\/strong><\/em><\/span><\/p><p style=\"text-align: justify;\"><span style=\"font-size: 14pt;\">Dans cette \u00e9tape-ci, j&rsquo;ai pu r\u00e9aliser un diagramme de classe \u00e0 l&rsquo;aide de PlantUML. Cela m&rsquo;a permis de mod\u00e9liser l&rsquo;architecture du back-end avec ce que j&rsquo;avais mis en place pr\u00e9c\u00e9demment \u00e0 savoir : ma classe m\u00e8re \u00ab\u00a0Forme\u00a0\u00bb et mes classes enfants \u00ab\u00a0Rectangle\u00a0\u00bb, \u00ab\u00a0Rond\u00a0\u00bb, \u00ab\u00a0Triangle\u00a0\u00bb, \u00ab\u00a0Hexagone\u00a0\u00bb.<\/span><\/p><p>\u00a0<\/p><p><span style=\"text-decoration: underline;\"><span style=\"font-size: 14pt;\">Comp\u00e9tences techniques<\/span><\/span><\/p><p data-renderer-start-pos=\"4619\" data-local-id=\"49a46770-7514-47a7-a3f8-8ef31384d819\"><span style=\"font-size: 14pt;\">-&gt; <span class=\"fabric-text-color-mark\" data-renderer-mark=\"true\" data-text-custom-color=\"#172b4d\">Mod\u00e9liser l&rsquo;architecture d&rsquo;un projet avec UML<\/span><\/span><\/p><p data-renderer-start-pos=\"4619\" data-local-id=\"49a46770-7514-47a7-a3f8-8ef31384d819\">\u00a0<\/p><p data-renderer-start-pos=\"4619\" data-local-id=\"49a46770-7514-47a7-a3f8-8ef31384d819\"><span style=\"text-decoration: underline;\"><span style=\"font-size: 14pt;\">Comp\u00e9tences associ\u00e9es<\/span><\/span><\/p><p data-renderer-start-pos=\"4619\" data-local-id=\"49a46770-7514-47a7-a3f8-8ef31384d819\"><span style=\"font-size: 14pt;\">-&gt; <span class=\"fabric-text-color-mark\" data-renderer-mark=\"true\" data-text-custom-color=\"#172b4d\">Savoir r\u00e9aliser et comprendre un diagramme UML<\/span><\/span><\/p><p data-renderer-start-pos=\"4619\" data-local-id=\"49a46770-7514-47a7-a3f8-8ef31384d819\">\u00a0<\/p><p><span style=\"font-size: 14pt;\"><strong><em>5. Composition et polymorphisme<\/em><\/strong><\/span><\/p><p style=\"text-align: justify;\"><span style=\"font-size: 14pt;\">Dans cette partie, j&rsquo;ai d\u00fb faire en sorte de sp\u00e9cifier certaines m\u00e9thodes de mes classes enfants. En effet, l&rsquo;aire et le p\u00e9rim\u00e8tre \u00e9tant commun \u00e0 toutes les classes de mes formes via la classe m\u00e8re, il a fallu sp\u00e9cifier pour chacune de mes formes le bon p\u00e9rim\u00e8tre ainsi que la bonne aire. Car toutes mes formes n&rsquo;ont pas le m\u00eame calcul pour ces deux composantes.<\/span><\/p><p style=\"text-align: justify;\"><span style=\"font-size: 14pt;\">J&rsquo;ai \u00e9galement d\u00fb mettre en place une classe composition \u00ab\u00a0Labyrinthe\u00a0\u00bb afin de pouvoir y mettre plusieurs formes, \u00e0 savoir plusieurs rectangles, ronds, triangle et un hexagone.<\/span><\/p><p>\u00a0<\/p><p><span style=\"text-decoration: underline;\"><span style=\"font-size: 14pt;\">Comp\u00e9tences techniques<\/span><\/span><\/p><p data-renderer-start-pos=\"5100\" data-local-id=\"73a3f69d-ae15-4229-b4bc-3868976f0f99\"><span style=\"font-size: 14pt;\">-&gt; <span class=\"fabric-text-color-mark\" data-renderer-mark=\"true\" data-text-custom-color=\"#172b4d\">Ajout et mobilisation de m\u00e9thodes communes \u00e0 plusieurs classes\u00a0<\/span><\/span><\/p><p data-renderer-start-pos=\"5100\" data-local-id=\"73a3f69d-ae15-4229-b4bc-3868976f0f99\">\u00a0<\/p><p data-renderer-start-pos=\"5100\" data-local-id=\"73a3f69d-ae15-4229-b4bc-3868976f0f99\"><span style=\"text-decoration: underline;\"><span style=\"font-size: 14pt;\">Comp\u00e9tences associ\u00e9es<\/span><\/span><\/p><p data-renderer-start-pos=\"5100\" data-local-id=\"73a3f69d-ae15-4229-b4bc-3868976f0f99\"><span style=\"font-size: 14pt;\">-&gt; R\u00e9diger une classe mobilisant les notions de composition<\/span><\/p><p data-renderer-start-pos=\"4065\" data-local-id=\"78209f2d-636c-4d0e-b83e-7c2ef07183ae\"><span class=\"fabric-text-color-mark\" style=\"font-size: 14pt;\" data-renderer-mark=\"true\" data-text-custom-color=\"#172b4d\">-&gt; Comprendre la m\u00e9canique du polymorphisme et la mobiliser <\/span><\/p><p data-renderer-start-pos=\"4065\" data-local-id=\"78209f2d-636c-4d0e-b83e-7c2ef07183ae\">\u00a0<\/p><p><span style=\"font-size: 14pt;\"><strong><em>6. Tests<\/em><\/strong><\/span><\/p><p style=\"text-align: justify;\"><span style=\"font-size: 14pt;\">La r\u00e9alisation des tests s&rsquo;est effectu\u00e9 uniquement sur la classe composition \u00ab\u00a0Labyrinthe\u00a0\u00bb. Il s&rsquo;agissait de tests unitaires, visant \u00e0 permettre de v\u00e9rifier la robustesse du code. J&rsquo;ai donc mis en place une s\u00e9rie de tests sur la classe en question, notamment sur le calcul de l&rsquo;aire et du p\u00e9rim\u00e8tre.<\/span><\/p><p>\u00a0<\/p><p><span style=\"text-decoration: underline;\"><span style=\"font-size: 14pt;\">Comp\u00e9tences techniques<\/span><\/span><\/p><p data-renderer-start-pos=\"5453\" data-local-id=\"36414574-38d7-413f-9775-0588a8aa1e2d\"><span style=\"font-size: 14pt;\">-&gt; <span class=\"fabric-text-color-mark\" data-renderer-mark=\"true\" data-text-custom-color=\"#172b4d\">Tester et valider le comportement d&rsquo;une classe<\/span><\/span><\/p><p data-renderer-start-pos=\"5453\" data-local-id=\"36414574-38d7-413f-9775-0588a8aa1e2d\">\u00a0<\/p><p data-renderer-start-pos=\"5526\" data-local-id=\"6294e732-cef9-47f3-a848-55151366c811\"><span style=\"text-decoration: underline;\"><span style=\"font-size: 14pt;\">Comp\u00e9tences associ\u00e9es<\/span><\/span><\/p><p data-renderer-start-pos=\"5526\" data-local-id=\"6294e732-cef9-47f3-a848-55151366c811\"><span style=\"font-size: 14pt;\">-&gt; <span class=\"fabric-text-color-mark\" data-renderer-mark=\"true\" data-text-custom-color=\"#172b4d\">Comprendre l&rsquo;int\u00e9r\u00eat des tests unitaires et savoir les mettre en \u0153uvre<\/span><\/span><\/p><p data-renderer-start-pos=\"5526\" data-local-id=\"6294e732-cef9-47f3-a848-55151366c811\">\u00a0<\/p><p><span style=\"font-size: 14pt;\"><em><strong>7. API<\/strong><\/em><\/span><\/p><p style=\"text-align: justify;\"><span style=\"font-size: 14pt;\">Dans cette \u00e9tape, j&rsquo;ai d\u00fb mettre en place un CRUD (Create : POST, Read : GET, Update : PUT, Delete : DELETE) afin de pouvoir communiquer par la suite avec le front-end lors de son impl\u00e9mentation. J&rsquo;ai r\u00e9aliser les tests API \u00e0 l&rsquo;aide de Swagger, ce qui m&rsquo;a permis de v\u00e9rifier que mes routes fonctionnaient correctement. J&rsquo;ai \u00e9galement mis en place la gestion des erre<\/span><span style=\"font-size: 14pt;\">urs HTTP 400\/404.<\/span><\/p><p>\u00a0<\/p><p><span style=\"text-decoration: underline;\"><span style=\"font-size: 14pt;\">Comp\u00e9tences techniques<\/span><\/span><\/p><p data-renderer-start-pos=\"6047\" data-local-id=\"73585f77-9d74-452a-84a1-bd1ab77cc4da\"><span style=\"font-size: 14pt;\">-&gt; <span class=\"fabric-text-color-mark\" data-renderer-mark=\"true\" data-text-custom-color=\"#172b4d\">Cr\u00e9ation et utilisation d&rsquo;une API afin de partager des informations<\/span><\/span><\/p><p data-renderer-start-pos=\"6047\" data-local-id=\"73585f77-9d74-452a-84a1-bd1ab77cc4da\">\u00a0<\/p><p data-renderer-start-pos=\"6047\" data-local-id=\"73585f77-9d74-452a-84a1-bd1ab77cc4da\"><span style=\"text-decoration: underline;\"><span style=\"font-size: 14pt;\">Comp\u00e9tences associ\u00e9es<\/span><\/span><\/p><p data-renderer-start-pos=\"6047\" data-local-id=\"73585f77-9d74-452a-84a1-bd1ab77cc4da\"><span style=\"font-size: 14pt;\">-&gt; <span class=\"fabric-text-color-mark\" data-renderer-mark=\"true\" data-text-custom-color=\"#172b4d\">Maitriser le format d&rsquo;\u00e9change de donn\u00e9es JSON<\/span><\/span><br \/><span class=\"fabric-text-color-mark\" style=\"font-size: 14pt;\" data-renderer-mark=\"true\" data-text-custom-color=\"#172b4d\">-&gt; Mise \u00e0 disposition d&rsquo;informations sous forme de JSON<\/span><\/p><p data-renderer-start-pos=\"4448\" data-local-id=\"d52de1dc-5bb1-445b-8ab6-8e46b1b6b8e1\"><span style=\"font-size: 14pt;\">-&gt; Consid\u00e9rer l\u2019importance de la sobri\u00e9t\u00e9 des donn\u00e9es<\/span><br \/><span class=\"fabric-text-color-mark\" style=\"font-size: 14pt;\" data-renderer-mark=\"true\" data-text-custom-color=\"#172b4d\">-&gt; Tester et documenter une API \u00e0 l&rsquo;aide d&rsquo;outils d\u00e9di\u00e9s<\/span><\/p><p data-renderer-start-pos=\"4448\" data-local-id=\"d52de1dc-5bb1-445b-8ab6-8e46b1b6b8e1\">\u00a0<\/p><p data-renderer-start-pos=\"6267\" data-local-id=\"ea695265-8155-418c-9a6f-1c4555c6f86d\"><span style=\"font-size: 14pt;\"><em><strong>8. ORM<\/strong><\/em><\/span><\/p><p data-renderer-start-pos=\"6267\" data-local-id=\"ea695265-8155-418c-9a6f-1c4555c6f86d\"><span style=\"font-size: 14pt;\">Afin de pouvoir communiquer avec la base de donn\u00e9es, j&rsquo;ai d\u00fb mettre en place ce que l&rsquo;on appelle un ORM. Cela m&rsquo;a permis de cr\u00e9er ma base donn\u00e9es en mettant en place un repository et des entity afin de construire les tables.<\/span><\/p><p><span style=\"text-decoration: underline;\"><span style=\"font-size: 14pt;\">Comp\u00e9tences techniques<\/span><\/span><\/p><p data-renderer-start-pos=\"6047\" data-local-id=\"73585f77-9d74-452a-84a1-bd1ab77cc4da\"><span style=\"font-size: 14pt;\">-&gt; <span class=\"fabric-text-color-mark\" data-renderer-mark=\"true\" data-text-custom-color=\"#172b4d\">Utilisation d&rsquo;un ORM pour la sauvegarde en BDD<\/span><\/span><\/p><p data-renderer-start-pos=\"6047\" data-local-id=\"73585f77-9d74-452a-84a1-bd1ab77cc4da\">\u00a0<\/p><p data-renderer-start-pos=\"6047\" data-local-id=\"73585f77-9d74-452a-84a1-bd1ab77cc4da\"><span style=\"text-decoration: underline;\"><span style=\"font-size: 14pt;\">Comp\u00e9tences associ\u00e9es<\/span><\/span><\/p><p data-renderer-start-pos=\"6047\" data-local-id=\"73585f77-9d74-452a-84a1-bd1ab77cc4da\"><span style=\"font-size: 14pt;\">-&gt; <span class=\"fabric-text-color-mark\" data-renderer-mark=\"true\" data-text-custom-color=\"#172b4d\">Savoir interagir avec une base de donn\u00e9es pour sauvegarder et lire des informations \u00e0 l&rsquo;aide d&rsquo;un ORM<\/span><\/span><\/p><p data-renderer-start-pos=\"6047\" data-local-id=\"73585f77-9d74-452a-84a1-bd1ab77cc4da\">\u00a0<\/p><p data-renderer-start-pos=\"6267\" data-local-id=\"ea695265-8155-418c-9a6f-1c4555c6f86d\"><span style=\"font-size: 14pt;\"><em><strong>9. D\u00e9ploiement<\/strong><\/em><\/span><\/p><p data-renderer-start-pos=\"6267\" data-local-id=\"ea695265-8155-418c-9a6f-1c4555c6f86d\"><span style=\"font-size: 14pt;\">Dans cette phase, le but \u00e9tait de pouvoir acc\u00e9der au back \u00e0 partir d&rsquo;un autre serveur. Pour cela, j&rsquo;ai mis mon projet sous Docker, afin d&rsquo;effectuer un d\u00e9ploiement sur un serveur local.\u00a0<\/span><\/p><p data-renderer-start-pos=\"6267\" data-local-id=\"ea695265-8155-418c-9a6f-1c4555c6f86d\">\u00a0<\/p><p><span style=\"text-decoration: underline;\"><span style=\"font-size: 14pt;\">Comp\u00e9tences techniques<\/span><\/span><\/p><p data-renderer-start-pos=\"6047\" data-local-id=\"73585f77-9d74-452a-84a1-bd1ab77cc4da\"><span style=\"font-size: 14pt;\">-&gt; <span class=\"fabric-text-color-mark\" data-renderer-mark=\"true\" data-text-custom-color=\"#172b4d\">D\u00e9ployer une api et une base de donn\u00e9e sur un serveur<\/span><\/span><\/p><p data-renderer-start-pos=\"6047\" data-local-id=\"73585f77-9d74-452a-84a1-bd1ab77cc4da\">\u00a0<\/p><p data-renderer-start-pos=\"6047\" data-local-id=\"73585f77-9d74-452a-84a1-bd1ab77cc4da\"><span style=\"text-decoration: underline;\"><span style=\"font-size: 14pt;\">Comp\u00e9tences associ\u00e9es<\/span><\/span><\/p><p data-renderer-start-pos=\"6047\" data-local-id=\"73585f77-9d74-452a-84a1-bd1ab77cc4da\"><span style=\"font-size: 14pt;\">-&gt; <span class=\"fabric-text-color-mark\" data-renderer-mark=\"true\" data-text-custom-color=\"#172b4d\">Maitriser les commandes de base pour piloter un serveur<\/span><\/span><br \/><span class=\"fabric-text-color-mark\" style=\"font-size: 14pt;\" data-renderer-mark=\"true\" data-text-custom-color=\"#172b4d\">-&gt; D\u00e9ployer et administrer une architecture n-tiers bas\u00e9e sur des APIs REST<\/span><br \/><span class=\"fabric-text-color-mark\" style=\"font-size: 14pt;\" data-renderer-mark=\"true\" data-text-custom-color=\"#172b4d\">-&gt; Documenter le d\u00e9ploiement d&rsquo;une solution<\/span><br \/><span class=\"fabric-text-color-mark\" style=\"font-size: 14pt;\" data-renderer-mark=\"true\" data-text-custom-color=\"#172b4d\">-&gt; Adapter une application pour qu&rsquo;elle fonctionne sur un serveur d\u00e9j\u00e0 mobilis\u00e9 par d&rsquo;autres services<\/span><\/p><p data-renderer-start-pos=\"6047\" data-local-id=\"73585f77-9d74-452a-84a1-bd1ab77cc4da\">\u00a0<\/p><p data-renderer-start-pos=\"6267\" data-local-id=\"ea695265-8155-418c-9a6f-1c4555c6f86d\"><span style=\"font-size: 14pt;\"><em><strong>10. Front<\/strong><\/em><\/span><\/p><p><span style=\"font-size: 14pt;\">Dans le projet, il s&rsquo;agit d&rsquo;une partie cons\u00e9quente. Jusqu&rsquo;alors, le back \u00e9tait la seule chose en place, sans avoir de rendu c\u00f4t\u00e9 utilisateur. Dans cette \u00e9tape, j&rsquo;ai mis en place l&rsquo;interface en question en utilisant le framework React en utilisant TypeScript. Le front-end a \u00e9galement mis sous Docker.<\/span><\/p><p>\u00a0<\/p><p><span style=\"text-decoration: underline;\"><span style=\"font-size: 14pt;\">Comp\u00e9tences techniques<\/span><\/span><\/p><p data-renderer-start-pos=\"6047\" data-local-id=\"73585f77-9d74-452a-84a1-bd1ab77cc4da\"><span style=\"font-size: 14pt;\">-&gt; <span class=\"fabric-text-color-mark\" data-renderer-mark=\"true\" data-text-custom-color=\"#172b4d\">Cr\u00e9ation d&rsquo;un site web d\u00e9di\u00e9 \u00e0 la mise en forme d&rsquo;informations issues d&rsquo;une API, avec un framework<\/span><\/span><\/p><p data-renderer-start-pos=\"6047\" data-local-id=\"73585f77-9d74-452a-84a1-bd1ab77cc4da\">\u00a0<\/p><p data-renderer-start-pos=\"6047\" data-local-id=\"73585f77-9d74-452a-84a1-bd1ab77cc4da\"><span style=\"text-decoration: underline;\"><span style=\"font-size: 14pt;\">Comp\u00e9tences associ\u00e9es<\/span><\/span><\/p><p data-renderer-start-pos=\"6047\" data-local-id=\"73585f77-9d74-452a-84a1-bd1ab77cc4da\"><span style=\"font-size: 14pt;\">-&gt; <span class=\"fabric-text-color-mark\" data-renderer-mark=\"true\" data-text-custom-color=\"#172b4d\">Utilisation d&rsquo;un framework web pour g\u00e9n\u00e9rer l&rsquo;IHM d&rsquo;un site web<\/span><\/span><br \/><span class=\"fabric-text-color-mark\" style=\"font-size: 14pt;\" data-renderer-mark=\"true\" data-text-custom-color=\"#172b4d\">-&gt; Mise en oeuvre d&rsquo;un front-end au sein d&rsquo;une architecture N-tiers<\/span><br \/><span class=\"fabric-text-color-mark\" style=\"font-size: 14pt;\" data-renderer-mark=\"true\" data-text-custom-color=\"#172b4d\">-&gt; Savoir limiter les donn\u00e9es communiqu\u00e9es entre front-end et back-end au minimum n\u00e9cessaire pour l&rsquo;application<\/span><br \/><span class=\"fabric-text-color-mark\" style=\"font-size: 14pt;\" data-renderer-mark=\"true\" data-text-custom-color=\"#172b4d\">-&gt; Appliquer les principes de l&rsquo;\u00e9co-conception du code: optimisation des algorithmes, limitation d&rsquo;appels aux serveurs&#8230;<\/span><\/p><p data-renderer-start-pos=\"6047\" data-local-id=\"73585f77-9d74-452a-84a1-bd1ab77cc4da\">\u00a0<\/p><p data-renderer-start-pos=\"6267\" data-local-id=\"ea695265-8155-418c-9a6f-1c4555c6f86d\"><span style=\"font-size: 14pt;\"><em><strong>11. CMS et SEO<\/strong><\/em><\/span><\/p><p data-renderer-start-pos=\"6267\" data-local-id=\"ea695265-8155-418c-9a6f-1c4555c6f86d\"><span style=\"font-size: 14pt;\">Dans cette \u00e9tape, il s&rsquo;agit de cr\u00e9er son portfolio \u00e0 l&rsquo;aide de WordPress. J&rsquo;ai d\u00fb travailler aussi la partie r\u00e9f\u00e9rencement afin d&rsquo;optimiser les possibilit\u00e9s sur les moteurs de recherches d&rsquo;acc\u00e9der \u00e0 mon site.\u00a0<\/span><\/p><p data-renderer-start-pos=\"6267\" data-local-id=\"ea695265-8155-418c-9a6f-1c4555c6f86d\">\u00a0<\/p><p><span style=\"text-decoration: underline;\"><span style=\"font-size: 14pt;\">Comp\u00e9tences techniques<\/span><\/span><\/p><p data-renderer-start-pos=\"6047\" data-local-id=\"73585f77-9d74-452a-84a1-bd1ab77cc4da\"><span style=\"font-size: 14pt;\">-&gt; D\u00e9ployer un site web pour optimiser le r\u00e9f\u00e9rencement de l&rsquo;application d\u00e9ploy\u00e9e<\/span><\/p><p data-renderer-start-pos=\"6047\" data-local-id=\"73585f77-9d74-452a-84a1-bd1ab77cc4da\">\u00a0<\/p><p data-renderer-start-pos=\"6047\" data-local-id=\"73585f77-9d74-452a-84a1-bd1ab77cc4da\"><span style=\"text-decoration: underline;\"><span style=\"font-size: 14pt;\">Comp\u00e9tences associ\u00e9es<\/span><\/span><\/p><p data-renderer-start-pos=\"6047\" data-local-id=\"73585f77-9d74-452a-84a1-bd1ab77cc4da\"><span style=\"font-size: 14pt;\">-&gt; Mobiliser un CSM <\/span><br \/><span style=\"font-size: 14pt;\">Etre attentif au r\u00e9f\u00e9rencement d&rsquo;un site web<\/span><\/p><p data-renderer-start-pos=\"6047\" data-local-id=\"73585f77-9d74-452a-84a1-bd1ab77cc4da\">\u00a0<\/p><p data-renderer-start-pos=\"6267\" data-local-id=\"ea695265-8155-418c-9a6f-1c4555c6f86d\"><span style=\"font-size: 14pt;\"><em><strong>12. Soutenance<\/strong><\/em><\/span><\/p><p data-renderer-start-pos=\"6267\" data-local-id=\"ea695265-8155-418c-9a6f-1c4555c6f86d\"><span style=\"font-size: 14pt;\">Deux types de soutenances ont \u00e9t\u00e9 r\u00e9alis\u00e9es lors de cette \u00e9tape. Lors de la premi\u00e8re, j&rsquo;ai pr\u00e9sent\u00e9 un concept vu dans le fil rouge \u00e0 savoir le principe de l&rsquo;h\u00e9ritage et des interfaces. La seconde soutenance a consist\u00e9 \u00e0 r\u00e9aliser une pr\u00e9sentation du fil rouge en se focalisant sur une th\u00e9matique pr\u00e9cise. Dans mon cas la phase de test effectu\u00e9 sur la composition Labyrinthe.<\/span><\/p><p data-renderer-start-pos=\"6267\" data-local-id=\"ea695265-8155-418c-9a6f-1c4555c6f86d\">\u00a0<\/p><p><span style=\"text-decoration: underline;\"><span style=\"font-size: 14pt;\">Comp\u00e9tences techniques<\/span><\/span><\/p><p data-renderer-start-pos=\"6047\" data-local-id=\"73585f77-9d74-452a-84a1-bd1ab77cc4da\"><span style=\"font-size: 14pt;\">-&gt; <span class=\"fabric-text-color-mark\" data-renderer-mark=\"true\" data-text-custom-color=\"#172b4d\">Pr\u00e9sentation synth\u00e9tique des d\u00e9veloppement fait d&rsquo;un point de vue technique et des fonctionnalit\u00e9s existantes<\/span><\/span><\/p><p data-renderer-start-pos=\"6047\" data-local-id=\"73585f77-9d74-452a-84a1-bd1ab77cc4da\">\u00a0<\/p><p data-renderer-start-pos=\"6047\" data-local-id=\"73585f77-9d74-452a-84a1-bd1ab77cc4da\"><span style=\"text-decoration: underline;\"><span style=\"font-size: 14pt;\">Comp\u00e9tences associ\u00e9es<\/span><\/span><\/p><p data-renderer-start-pos=\"6047\" data-local-id=\"73585f77-9d74-452a-84a1-bd1ab77cc4da\"><span style=\"font-size: 14pt;\">-&gt; <span class=\"fabric-text-color-mark\" data-renderer-mark=\"true\" data-text-custom-color=\"#172b4d\">Savoir pr\u00e9senter oralement un travail r\u00e9alis\u00e9<\/span><\/span><br \/><span class=\"fabric-text-color-mark\" style=\"font-size: 14pt;\" data-renderer-mark=\"true\" data-text-custom-color=\"#172b4d\">-&gt; \u00catre en mesure de d\u00e9finir ce qui est essentiel de montrer pour la compr\u00e9hension<\/span><br \/><span class=\"fabric-text-color-mark\" style=\"font-size: 14pt;\" data-renderer-mark=\"true\" data-text-custom-color=\"#172b4d\">-&gt; Pr\u00e9parer un oral pour maintenir des contraintes de temps<\/span><\/p><p data-renderer-start-pos=\"6047\" data-local-id=\"73585f77-9d74-452a-84a1-bd1ab77cc4da\">\u00a0<\/p><p data-renderer-start-pos=\"6047\" data-local-id=\"73585f77-9d74-452a-84a1-bd1ab77cc4da\"><span style=\"font-size: 14pt;\"><em><strong>13. Optionnel : mise en place d&rsquo;un design pattern (ici Flyweight)<\/strong><\/em><\/span><\/p><p data-renderer-start-pos=\"6047\" data-local-id=\"73585f77-9d74-452a-84a1-bd1ab77cc4da\"><span style=\"font-size: 14pt;\">Afin d&rsquo;optimiser le code et l&rsquo;utilisation de l&rsquo;application, j&rsquo;ai mis en place un design pattern Flyweight. Il permet de r\u00e9duire l&rsquo;utilisation m\u00e9moire en partageant des objets identiques (\u00e9tat intrins\u00e8que) au lieu d&rsquo;en cr\u00e9er de nouveaux pour chaque occurence. L&rsquo;\u00e9tat variable (\u00e9tat extrins\u00e8que) est pass\u00e9 au moment de l&rsquo;utilisation. Il repose sur une usine\/factory qui retourne une instance partag\u00e9e si elle existe, sinon la cr\u00e9e et la stocke. Cela permet, par exemple, de r\u00e9utiliser des mod\u00e8les identiques pour des formes plut\u00f4t que d&rsquo;enregistrer des doublons en base de donn\u00e9es.<\/span><\/p><p data-renderer-start-pos=\"6047\" data-local-id=\"73585f77-9d74-452a-84a1-bd1ab77cc4da\">\u00a0<\/p><p data-renderer-start-pos=\"6047\" data-local-id=\"73585f77-9d74-452a-84a1-bd1ab77cc4da\"><span style=\"font-size: 14pt;\"><span style=\"text-decoration: underline;\">Comp\u00e9tences techniques<\/span>\u00a0<\/span><\/p><p data-renderer-start-pos=\"6047\" data-local-id=\"73585f77-9d74-452a-84a1-bd1ab77cc4da\"><span style=\"font-size: 14pt;\">-&gt; Utilisation d&rsquo;un design pattern pour facilit\u00e9e l&rsquo;\u00e9volution \/ le d\u00e9veloppement d&rsquo;une fonctionnalit\u00e9<\/span><\/p><p data-renderer-start-pos=\"6047\" data-local-id=\"73585f77-9d74-452a-84a1-bd1ab77cc4da\">\u00a0<\/p><p data-renderer-start-pos=\"6267\" data-local-id=\"ea695265-8155-418c-9a6f-1c4555c6f86d\"><span style=\"text-decoration: underline;\"><span style=\"font-size: 14pt;\">Comp\u00e9tences associ\u00e9es<\/span><\/span><\/p><p data-renderer-start-pos=\"6267\" data-local-id=\"ea695265-8155-418c-9a6f-1c4555c6f86d\"><span style=\"font-size: 14pt;\">-&gt; Comprendre l&rsquo;int\u00e9r\u00eat des designs patterns dans un contexte de d\u00e9veloppement logiciel<\/span><br \/><span style=\"font-size: 14pt;\">-&gt; Savoir s\u00e9lectionner le pattern permettant de r\u00e9pondre \u00e0 une probl\u00e9matique sp\u00e9cifique<\/span><br \/><span style=\"font-size: 14pt;\">-&gt; \u00catre capable d&rsquo;adapter le pattern pour le mettre en \u0153uvre dans le contexte propre \u00e0 une une application<\/span><\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-a6b405b e-flex e-con-boxed e-con e-parent\" data-id=\"a6b405b\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-96aa592 elementor-widget elementor-widget-text-editor\" data-id=\"96aa592\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<p style=\"text-align: justify;\">\u00a0<\/p><p style=\"text-align: justify;\"><span style=\"font-size: 14pt;\"><strong>Ce que j&rsquo;en ai tir\u00e9 :\u00a0<\/strong>j&rsquo;ai appris \u00e9norm\u00e9ment de choses dans ce projet individuel, notamment c\u00f4t\u00e9 back-end. J&rsquo;ai eu un vrai coup de c\u0153ur pour Java, mais aussi pour React c\u00f4t\u00e9 front. Cela m&rsquo;a permis d&rsquo;acqu\u00e9rir des bases solides dans la POO. J&rsquo;ai \u00e9galement mis le design pattern Flyweight en place afin d&rsquo;optimiser le code. De fa\u00e7on g\u00e9n\u00e9rale, j&rsquo;ai eu un r\u00e9el plaisir \u00e0 pouvoir mettre en forme mon propre jeu vid\u00e9o, qui sera \u00e0 terme jouable<\/span><\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>Pacwoman : honneur aux femmes ! \u00a0 Second projet personnel r\u00e9alis\u00e9 en deuxi\u00e8me ann\u00e9e. Le but \u00e9tait d&rsquo;apprendre la Programmation Orient\u00e9e Objet (POO). Le choix du sujet \u00e9tait assez libre.\u00a0 Ayant une forte affinit\u00e9 pour le r\u00e9trogaming et voulant mettre \u00e0 l&rsquo;honneur le c\u00f4t\u00e9 f\u00e9minin en informatique, j&rsquo;ai donc d\u00e9cid\u00e9 de cr\u00e9er mon propre jeu [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_regular_price":[],"currency_symbol":[],"footnotes":""},"categories":[1],"tags":[],"class_list":["post-306","post","type-post","status-publish","format-standard","hentry","category-non-classe"],"post_slider_layout_featured_media_urls":{"thumbnail":"","post_slider_layout_landscape_large":"","post_slider_layout_portrait_large":"","post_slider_layout_square_large":"","post_slider_layout_landscape":"","post_slider_layout_portrait":"","post_slider_layout_square":"","full":""},"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.3 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Pacwoman - D\u00e9veloppeuse web full-stack<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/noemieschaendel.fr\/?p=306\" \/>\n<meta property=\"og:locale\" content=\"fr_FR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Pacwoman - D\u00e9veloppeuse web full-stack\" \/>\n<meta property=\"og:description\" content=\"Pacwoman : honneur aux femmes ! \u00a0 Second projet personnel r\u00e9alis\u00e9 en deuxi\u00e8me ann\u00e9e. Le but \u00e9tait d&rsquo;apprendre la Programmation Orient\u00e9e Objet (POO). Le choix du sujet \u00e9tait assez libre.\u00a0 Ayant une forte affinit\u00e9 pour le r\u00e9trogaming et voulant mettre \u00e0 l&rsquo;honneur le c\u00f4t\u00e9 f\u00e9minin en informatique, j&rsquo;ai donc d\u00e9cid\u00e9 de cr\u00e9er mon propre jeu [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/noemieschaendel.fr\/?p=306\" \/>\n<meta property=\"og:site_name\" content=\"D\u00e9veloppeuse web full-stack\" \/>\n<meta property=\"article:published_time\" content=\"2026-04-29T14:17:35+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-07-03T07:43:43+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/noemieschaendel.fr\/wp-content\/uploads\/elementor\/thumbs\/Capture-decran-du-2026-05-05-16-58-58-rn0kq2i427d658lt4k8m3z7xborjahkl6stp6cqeio.png\" \/>\n<meta name=\"author\" content=\"noemie.schaendel\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"\u00c9crit par\" \/>\n\t<meta name=\"twitter:data1\" content=\"noemie.schaendel\" \/>\n\t<meta name=\"twitter:label2\" content=\"Dur\u00e9e de lecture estim\u00e9e\" \/>\n\t<meta name=\"twitter:data2\" content=\"9 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/noemieschaendel.fr\\\/?p=306#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/noemieschaendel.fr\\\/?p=306\"},\"author\":{\"name\":\"noemie.schaendel\",\"@id\":\"https:\\\/\\\/noemieschaendel.fr\\\/#\\\/schema\\\/person\\\/63b7d672ab9d0f15474f73bc1e5dd2eb\"},\"headline\":\"Pacwoman\",\"datePublished\":\"2026-04-29T14:17:35+00:00\",\"dateModified\":\"2026-07-03T07:43:43+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/noemieschaendel.fr\\\/?p=306\"},\"wordCount\":1869,\"image\":{\"@id\":\"https:\\\/\\\/noemieschaendel.fr\\\/?p=306#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/noemieschaendel.fr\\\/wp-content\\\/uploads\\\/elementor\\\/thumbs\\\/Capture-decran-du-2026-05-05-16-58-58-rn0kq2i427d658lt4k8m3z7xborjahkl6stp6cqeio.png\",\"inLanguage\":\"fr-FR\"},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/noemieschaendel.fr\\\/?p=306\",\"url\":\"https:\\\/\\\/noemieschaendel.fr\\\/?p=306\",\"name\":\"Pacwoman - D\u00e9veloppeuse web full-stack\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/noemieschaendel.fr\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/noemieschaendel.fr\\\/?p=306#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/noemieschaendel.fr\\\/?p=306#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/noemieschaendel.fr\\\/wp-content\\\/uploads\\\/elementor\\\/thumbs\\\/Capture-decran-du-2026-05-05-16-58-58-rn0kq2i427d658lt4k8m3z7xborjahkl6stp6cqeio.png\",\"datePublished\":\"2026-04-29T14:17:35+00:00\",\"dateModified\":\"2026-07-03T07:43:43+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/noemieschaendel.fr\\\/#\\\/schema\\\/person\\\/63b7d672ab9d0f15474f73bc1e5dd2eb\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/noemieschaendel.fr\\\/?p=306#breadcrumb\"},\"inLanguage\":\"fr-FR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/noemieschaendel.fr\\\/?p=306\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-FR\",\"@id\":\"https:\\\/\\\/noemieschaendel.fr\\\/?p=306#primaryimage\",\"url\":\"https:\\\/\\\/noemieschaendel.fr\\\/wp-content\\\/uploads\\\/elementor\\\/thumbs\\\/Capture-decran-du-2026-05-05-16-58-58-rn0kq2i427d658lt4k8m3z7xborjahkl6stp6cqeio.png\",\"contentUrl\":\"https:\\\/\\\/noemieschaendel.fr\\\/wp-content\\\/uploads\\\/elementor\\\/thumbs\\\/Capture-decran-du-2026-05-05-16-58-58-rn0kq2i427d658lt4k8m3z7xborjahkl6stp6cqeio.png\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/noemieschaendel.fr\\\/?p=306#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Accueil\",\"item\":\"https:\\\/\\\/noemieschaendel.fr\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Pacwoman\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/noemieschaendel.fr\\\/#website\",\"url\":\"https:\\\/\\\/noemieschaendel.fr\\\/\",\"name\":\"D\u00e9veloppeuse web full-stack\",\"description\":\"\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/noemieschaendel.fr\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"fr-FR\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/noemieschaendel.fr\\\/#\\\/schema\\\/person\\\/63b7d672ab9d0f15474f73bc1e5dd2eb\",\"name\":\"noemie.schaendel\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-FR\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/e4a1a5313d0cf0a9351cba61e0f98172f4681aaa02f11184b3886275a9c070d2?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/e4a1a5313d0cf0a9351cba61e0f98172f4681aaa02f11184b3886275a9c070d2?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/e4a1a5313d0cf0a9351cba61e0f98172f4681aaa02f11184b3886275a9c070d2?s=96&d=mm&r=g\",\"caption\":\"noemie.schaendel\"},\"sameAs\":[\"https:\\\/\\\/noemieschaendel.fr\"],\"url\":\"https:\\\/\\\/noemieschaendel.fr\\\/?author=1\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Pacwoman - D\u00e9veloppeuse web full-stack","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/noemieschaendel.fr\/?p=306","og_locale":"fr_FR","og_type":"article","og_title":"Pacwoman - D\u00e9veloppeuse web full-stack","og_description":"Pacwoman : honneur aux femmes ! \u00a0 Second projet personnel r\u00e9alis\u00e9 en deuxi\u00e8me ann\u00e9e. Le but \u00e9tait d&rsquo;apprendre la Programmation Orient\u00e9e Objet (POO). Le choix du sujet \u00e9tait assez libre.\u00a0 Ayant une forte affinit\u00e9 pour le r\u00e9trogaming et voulant mettre \u00e0 l&rsquo;honneur le c\u00f4t\u00e9 f\u00e9minin en informatique, j&rsquo;ai donc d\u00e9cid\u00e9 de cr\u00e9er mon propre jeu [&hellip;]","og_url":"https:\/\/noemieschaendel.fr\/?p=306","og_site_name":"D\u00e9veloppeuse web full-stack","article_published_time":"2026-04-29T14:17:35+00:00","article_modified_time":"2026-07-03T07:43:43+00:00","og_image":[{"url":"https:\/\/noemieschaendel.fr\/wp-content\/uploads\/elementor\/thumbs\/Capture-decran-du-2026-05-05-16-58-58-rn0kq2i427d658lt4k8m3z7xborjahkl6stp6cqeio.png","type":"","width":"","height":""}],"author":"noemie.schaendel","twitter_card":"summary_large_image","twitter_misc":{"\u00c9crit par":"noemie.schaendel","Dur\u00e9e de lecture estim\u00e9e":"9 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/noemieschaendel.fr\/?p=306#article","isPartOf":{"@id":"https:\/\/noemieschaendel.fr\/?p=306"},"author":{"name":"noemie.schaendel","@id":"https:\/\/noemieschaendel.fr\/#\/schema\/person\/63b7d672ab9d0f15474f73bc1e5dd2eb"},"headline":"Pacwoman","datePublished":"2026-04-29T14:17:35+00:00","dateModified":"2026-07-03T07:43:43+00:00","mainEntityOfPage":{"@id":"https:\/\/noemieschaendel.fr\/?p=306"},"wordCount":1869,"image":{"@id":"https:\/\/noemieschaendel.fr\/?p=306#primaryimage"},"thumbnailUrl":"https:\/\/noemieschaendel.fr\/wp-content\/uploads\/elementor\/thumbs\/Capture-decran-du-2026-05-05-16-58-58-rn0kq2i427d658lt4k8m3z7xborjahkl6stp6cqeio.png","inLanguage":"fr-FR"},{"@type":"WebPage","@id":"https:\/\/noemieschaendel.fr\/?p=306","url":"https:\/\/noemieschaendel.fr\/?p=306","name":"Pacwoman - D\u00e9veloppeuse web full-stack","isPartOf":{"@id":"https:\/\/noemieschaendel.fr\/#website"},"primaryImageOfPage":{"@id":"https:\/\/noemieschaendel.fr\/?p=306#primaryimage"},"image":{"@id":"https:\/\/noemieschaendel.fr\/?p=306#primaryimage"},"thumbnailUrl":"https:\/\/noemieschaendel.fr\/wp-content\/uploads\/elementor\/thumbs\/Capture-decran-du-2026-05-05-16-58-58-rn0kq2i427d658lt4k8m3z7xborjahkl6stp6cqeio.png","datePublished":"2026-04-29T14:17:35+00:00","dateModified":"2026-07-03T07:43:43+00:00","author":{"@id":"https:\/\/noemieschaendel.fr\/#\/schema\/person\/63b7d672ab9d0f15474f73bc1e5dd2eb"},"breadcrumb":{"@id":"https:\/\/noemieschaendel.fr\/?p=306#breadcrumb"},"inLanguage":"fr-FR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/noemieschaendel.fr\/?p=306"]}]},{"@type":"ImageObject","inLanguage":"fr-FR","@id":"https:\/\/noemieschaendel.fr\/?p=306#primaryimage","url":"https:\/\/noemieschaendel.fr\/wp-content\/uploads\/elementor\/thumbs\/Capture-decran-du-2026-05-05-16-58-58-rn0kq2i427d658lt4k8m3z7xborjahkl6stp6cqeio.png","contentUrl":"https:\/\/noemieschaendel.fr\/wp-content\/uploads\/elementor\/thumbs\/Capture-decran-du-2026-05-05-16-58-58-rn0kq2i427d658lt4k8m3z7xborjahkl6stp6cqeio.png"},{"@type":"BreadcrumbList","@id":"https:\/\/noemieschaendel.fr\/?p=306#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Accueil","item":"https:\/\/noemieschaendel.fr\/"},{"@type":"ListItem","position":2,"name":"Pacwoman"}]},{"@type":"WebSite","@id":"https:\/\/noemieschaendel.fr\/#website","url":"https:\/\/noemieschaendel.fr\/","name":"D\u00e9veloppeuse web full-stack","description":"","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/noemieschaendel.fr\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"fr-FR"},{"@type":"Person","@id":"https:\/\/noemieschaendel.fr\/#\/schema\/person\/63b7d672ab9d0f15474f73bc1e5dd2eb","name":"noemie.schaendel","image":{"@type":"ImageObject","inLanguage":"fr-FR","@id":"https:\/\/secure.gravatar.com\/avatar\/e4a1a5313d0cf0a9351cba61e0f98172f4681aaa02f11184b3886275a9c070d2?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/e4a1a5313d0cf0a9351cba61e0f98172f4681aaa02f11184b3886275a9c070d2?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/e4a1a5313d0cf0a9351cba61e0f98172f4681aaa02f11184b3886275a9c070d2?s=96&d=mm&r=g","caption":"noemie.schaendel"},"sameAs":["https:\/\/noemieschaendel.fr"],"url":"https:\/\/noemieschaendel.fr\/?author=1"}]}},"_links":{"self":[{"href":"https:\/\/noemieschaendel.fr\/index.php?rest_route=\/wp\/v2\/posts\/306","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/noemieschaendel.fr\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/noemieschaendel.fr\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/noemieschaendel.fr\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/noemieschaendel.fr\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=306"}],"version-history":[{"count":99,"href":"https:\/\/noemieschaendel.fr\/index.php?rest_route=\/wp\/v2\/posts\/306\/revisions"}],"predecessor-version":[{"id":671,"href":"https:\/\/noemieschaendel.fr\/index.php?rest_route=\/wp\/v2\/posts\/306\/revisions\/671"}],"wp:attachment":[{"href":"https:\/\/noemieschaendel.fr\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=306"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/noemieschaendel.fr\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=306"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/noemieschaendel.fr\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=306"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}