[{"data":1,"prerenderedAt":3519},["ShallowReactive",2],{"navigation":3,"\u002Fnsi-tale\u002Fta-structures-donnees\u002Finterface-implementation":585,"\u002Fnsi-tale\u002Fta-structures-donnees\u002Finterface-implementation__counterpart":1941,"\u002Fnsi-tale\u002Fta-structures-donnees\u002Finterface-implementation__slides":2371,"annexes-memo:\u002Fnsi-tale\u002Fta-structures-donnees\u002Finterface-implementation":2810,"annexes-slides:\u002Fnsi-tale\u002Fta-structures-donnees\u002Finterface-implementation":3166},[4,224,440],{"title":5,"path":6,"stem":7,"children":8},"SNT — Seconde","\u002Fsnt-2nde","0.snt-2nde\u002F0.index",[9,10,14,36,66,92,118,144,162,184,206],{"title":5,"path":6,"stem":7},{"title":11,"path":12,"stem":13},"REVIEW pédagogique — SNT 2nde","\u002Fsnt-2nde\u002Freview","0.snt-2nde\u002FREVIEW",{"title":15,"path":16,"stem":17,"children":18},"Internet","\u002Fsnt-2nde\u002Fsa-internet","0.snt-2nde\u002Fsa-internet\u002F0.index",[19,20,24,28,32],{"title":15,"path":16,"stem":17},{"title":21,"path":22,"stem":23},"Adresses symboliques et DNS","\u002Fsnt-2nde\u002Fsa-internet\u002Fadresses-dns","0.snt-2nde\u002Fsa-internet\u002F1.adresses-dns",{"title":25,"path":26,"stem":27},"Internet et les réseaux physiques","\u002Fsnt-2nde\u002Fsa-internet\u002Freseaux-physiques","0.snt-2nde\u002Fsa-internet\u002F2.reseaux-physiques",{"title":29,"path":30,"stem":31},"Protocoles TCP\u002FIP et routage des paquets","\u002Fsnt-2nde\u002Fsa-internet\u002Ftcp-ip-routage","0.snt-2nde\u002Fsa-internet\u002F3.tcp-ip-routage",{"title":33,"path":34,"stem":35},"Réseaux pair-à-pair","\u002Fsnt-2nde\u002Fsa-internet\u002Fpair-a-pair","0.snt-2nde\u002Fsa-internet\u002F4.pair-a-pair",{"title":37,"path":38,"stem":39,"children":40},"Le Web","\u002Fsnt-2nde\u002Fsb-web","0.snt-2nde\u002Fsb-web\u002F0.index",[41,42,46,50,54,58,62],{"title":37,"path":38,"stem":39},{"title":43,"path":44,"stem":45},"Histoire du Web","\u002Fsnt-2nde\u002Fsb-web\u002Fhistoire-web","0.snt-2nde\u002Fsb-web\u002F1.histoire-web",{"title":47,"path":48,"stem":49},"URL et hypertexte","\u002Fsnt-2nde\u002Fsb-web\u002Furl-hypertexte","0.snt-2nde\u002Fsb-web\u002F2.url-hypertexte",{"title":51,"path":52,"stem":53},"HTML et CSS — le contenu et la présentation","\u002Fsnt-2nde\u002Fsb-web\u002Fhtml-css","0.snt-2nde\u002Fsb-web\u002F3.html-css",{"title":55,"path":56,"stem":57},"Client-serveur et requêtes HTTP","\u002Fsnt-2nde\u002Fsb-web\u002Fclient-serveur-http","0.snt-2nde\u002Fsb-web\u002F4.client-serveur-http",{"title":59,"path":60,"stem":61},"Moteurs de recherche","\u002Fsnt-2nde\u002Fsb-web\u002Fmoteurs-recherche","0.snt-2nde\u002Fsb-web\u002F5.moteurs-recherche",{"title":63,"path":64,"stem":65},"Sécurité du navigateur et notions juridiques","\u002Fsnt-2nde\u002Fsb-web\u002Fsecurite-droits","0.snt-2nde\u002Fsb-web\u002F6.securite-droits",{"title":67,"path":68,"stem":69,"children":70},"Les réseaux sociaux","\u002Fsnt-2nde\u002Fsc-reseaux-sociaux","0.snt-2nde\u002Fsc-reseaux-sociaux\u002F0.index",[71,72,76,80,84,88],{"title":67,"path":68,"stem":69},{"title":73,"path":74,"stem":75},"Panorama des réseaux sociaux","\u002Fsnt-2nde\u002Fsc-reseaux-sociaux\u002Fpanorama-rs","0.snt-2nde\u002Fsc-reseaux-sociaux\u002F1.panorama-rs",{"title":77,"path":78,"stem":79},"Identité numérique et authentification","\u002Fsnt-2nde\u002Fsc-reseaux-sociaux\u002Fidentite-numerique","0.snt-2nde\u002Fsc-reseaux-sociaux\u002F2.identite-numerique",{"title":81,"path":82,"stem":83},"Le modèle économique des réseaux sociaux","\u002Fsnt-2nde\u002Fsc-reseaux-sociaux\u002Fmodele-economique","0.snt-2nde\u002Fsc-reseaux-sociaux\u002F3.modele-economique",{"title":85,"path":86,"stem":87},"Petit monde et graphes","\u002Fsnt-2nde\u002Fsc-reseaux-sociaux\u002Fpetit-monde-graphes","0.snt-2nde\u002Fsc-reseaux-sociaux\u002F4.petit-monde-graphes",{"title":89,"path":90,"stem":91},"La cyberviolence","\u002Fsnt-2nde\u002Fsc-reseaux-sociaux\u002Fcyberviolence","0.snt-2nde\u002Fsc-reseaux-sociaux\u002F5.cyberviolence",{"title":93,"path":94,"stem":95,"children":96},"Les données structurées et leur traitement","\u002Fsnt-2nde\u002Fsd-donnees-structurees","0.snt-2nde\u002Fsd-donnees-structurees\u002F0.index",[97,98,102,106,110,114],{"title":93,"path":94,"stem":95},{"title":99,"path":100,"stem":101},"Données et formats","\u002Fsnt-2nde\u002Fsd-donnees-structurees\u002Fdonnees-formats","0.snt-2nde\u002Fsd-donnees-structurees\u002F1.donnees-formats",{"title":103,"path":104,"stem":105},"Données structurées","\u002Fsnt-2nde\u002Fsd-donnees-structurees\u002Fdonnees-structurees","0.snt-2nde\u002Fsd-donnees-structurees\u002F2.donnees-structurees",{"title":107,"path":108,"stem":109},"Métadonnées","\u002Fsnt-2nde\u002Fsd-donnees-structurees\u002Fmetadonnees","0.snt-2nde\u002Fsd-donnees-structurees\u002F3.metadonnees",{"title":111,"path":112,"stem":113},"Traitement de tables","\u002Fsnt-2nde\u002Fsd-donnees-structurees\u002Ftraitement-tables","0.snt-2nde\u002Fsd-donnees-structurees\u002F4.traitement-tables",{"title":115,"path":116,"stem":117},"Le cloud","\u002Fsnt-2nde\u002Fsd-donnees-structurees\u002Fcloud","0.snt-2nde\u002Fsd-donnees-structurees\u002F5.cloud",{"title":119,"path":120,"stem":121,"children":122},"Localisation, cartographie et mobilité","\u002Fsnt-2nde\u002Fse-localisation-cartographie","0.snt-2nde\u002Fse-localisation-cartographie\u002F0.index",[123,124,128,132,136,140],{"title":119,"path":120,"stem":121},{"title":125,"path":126,"stem":127},"GPS et Galileo — se situer grâce aux satellites","\u002Fsnt-2nde\u002Fse-localisation-cartographie\u002Fgps-galileo","0.snt-2nde\u002Fse-localisation-cartographie\u002F1.gps-galileo",{"title":129,"path":130,"stem":131},"Décoder une trame NMEA","\u002Fsnt-2nde\u002Fse-localisation-cartographie\u002Ftrame-nmea","0.snt-2nde\u002Fse-localisation-cartographie\u002F2.trame-nmea",{"title":133,"path":134,"stem":135},"Cartes numériques — GeoPortail et OpenStreetMap","\u002Fsnt-2nde\u002Fse-localisation-cartographie\u002Fcartes-numeriques","0.snt-2nde\u002Fse-localisation-cartographie\u002F3.cartes-numeriques",{"title":137,"path":138,"stem":139},"Itinéraires et graphes","\u002Fsnt-2nde\u002Fse-localisation-cartographie\u002Fitineraires-graphes","0.snt-2nde\u002Fse-localisation-cartographie\u002F4.itineraires-graphes",{"title":141,"path":142,"stem":143},"Confidentialité de la position","\u002Fsnt-2nde\u002Fse-localisation-cartographie\u002Fconfidentialite-position","0.snt-2nde\u002Fse-localisation-cartographie\u002F5.confidentialite-position",{"title":145,"path":146,"stem":147,"children":148},"Informatique embarquée et objets connectés","\u002Fsnt-2nde\u002Fsf-info-embarquee","0.snt-2nde\u002Fsf-info-embarquee\u002F0.index",[149,150,154,158],{"title":145,"path":146,"stem":147},{"title":151,"path":152,"stem":153},"Systèmes informatiques embarqués","\u002Fsnt-2nde\u002Fsf-info-embarquee\u002Fsystemes-embarques","0.snt-2nde\u002Fsf-info-embarquee\u002F1.systemes-embarques",{"title":155,"path":156,"stem":157},"Capteurs et actionneurs","\u002Fsnt-2nde\u002Fsf-info-embarquee\u002Fcapteurs-actionneurs","0.snt-2nde\u002Fsf-info-embarquee\u002F2.capteurs-actionneurs",{"title":159,"path":160,"stem":161},"IHM et objets connectés","\u002Fsnt-2nde\u002Fsf-info-embarquee\u002Fihm-objet-connecte","0.snt-2nde\u002Fsf-info-embarquee\u002F3.ihm-objet-connecte",{"title":163,"path":164,"stem":165,"children":166},"Photographie numérique","\u002Fsnt-2nde\u002Fsg-photo-numerique","0.snt-2nde\u002Fsg-photo-numerique\u002F0.index",[167,168,172,176,180],{"title":163,"path":164,"stem":165},{"title":169,"path":170,"stem":171},"Photosites, pixels et résolution","\u002Fsnt-2nde\u002Fsg-photo-numerique\u002Fpixels-resolution","0.snt-2nde\u002Fsg-photo-numerique\u002F1.pixels-resolution",{"title":173,"path":174,"stem":175},"Les algorithmes de l'appareil photo","\u002Fsnt-2nde\u002Fsg-photo-numerique\u002Falgorithmes-photo","0.snt-2nde\u002Fsg-photo-numerique\u002F2.algorithmes-photo",{"title":177,"path":178,"stem":179},"Les métadonnées EXIF","\u002Fsnt-2nde\u002Fsg-photo-numerique\u002Fmetadonnees-exif","0.snt-2nde\u002Fsg-photo-numerique\u002F3.metadonnees-exif",{"title":181,"path":182,"stem":183},"Traiter une image en Python","\u002Fsnt-2nde\u002Fsg-photo-numerique\u002Ftraitement-rgb","0.snt-2nde\u002Fsg-photo-numerique\u002F4.traitement-rgb",{"title":185,"path":186,"stem":187,"children":188},"Notions transversales de programmation","\u002Fsnt-2nde\u002Fsh-prog-notions","0.snt-2nde\u002Fsh-prog-notions\u002F0.index",[189,190,194,198,202],{"title":185,"path":186,"stem":187},{"title":191,"path":192,"stem":193},"Séquences d'instructions et variables","\u002Fsnt-2nde\u002Fsh-prog-notions\u002Fsequences-affectations","0.snt-2nde\u002Fsh-prog-notions\u002F1.sequences-affectations",{"title":195,"path":196,"stem":197},"Instructions conditionnelles","\u002Fsnt-2nde\u002Fsh-prog-notions\u002Fconditionnelles","0.snt-2nde\u002Fsh-prog-notions\u002F2.conditionnelles",{"title":199,"path":200,"stem":201},"Boucles bornées et non bornées","\u002Fsnt-2nde\u002Fsh-prog-notions\u002Fboucles","0.snt-2nde\u002Fsh-prog-notions\u002F3.boucles",{"title":203,"path":204,"stem":205},"Définitions et appels de fonctions","\u002Fsnt-2nde\u002Fsh-prog-notions\u002Ffonctions","0.snt-2nde\u002Fsh-prog-notions\u002F4.fonctions",{"title":207,"path":208,"stem":209,"children":210},"Démo des widgets MDC","\u002Fsnt-2nde\u002Fzz-demo-widgets","0.snt-2nde\u002Fzz-demo-widgets\u002F0.index",[211,212,216,220],{"title":207,"path":208,"stem":209},{"title":213,"path":214,"stem":215},"Démo statique — callouts, code, BO, illustration","\u002Fsnt-2nde\u002Fzz-demo-widgets\u002Fstatique","0.snt-2nde\u002Fzz-demo-widgets\u002F1.statique",{"title":217,"path":218,"stem":219},"Démo interactive — self-eval et python-snippet","\u002Fsnt-2nde\u002Fzz-demo-widgets\u002Finteractif","0.snt-2nde\u002Fzz-demo-widgets\u002F2.interactif",{"title":221,"path":222,"stem":223},"Démo · 14 widgets de manipulation NSI","\u002Fsnt-2nde\u002Fzz-demo-widgets\u002Fwidgets-manipulation","0.snt-2nde\u002Fzz-demo-widgets\u002F3.widgets-manipulation",{"title":225,"path":226,"stem":227,"children":228},"NSI — Première","\u002Fnsi-1ere","1.nsi-1ere\u002F0.index",[229,230,234,256,282,304,328,354,380,410],{"title":225,"path":226,"stem":227},{"title":231,"path":232,"stem":233},"Relecture pédagogique — 8 chapitres NSI 1ère (PA → PH)","\u002Fnsi-1ere\u002Freview","1.nsi-1ere\u002FREVIEW",{"title":235,"path":236,"stem":237,"children":238},"Histoire de l'informatique","\u002Fnsi-1ere\u002Fpa-histoire-info","1.nsi-1ere\u002Fpa-histoire-info\u002F0.index",[239,240,244,248,252],{"title":235,"path":236,"stem":237},{"title":241,"path":242,"stem":243},"De la préantiquité aux machines à calculer","\u002Fnsi-1ere\u002Fpa-histoire-info\u002Fpreantiquite-aux-machines","1.nsi-1ere\u002Fpa-histoire-info\u002F1.preantiquite-aux-machines",{"title":245,"path":246,"stem":247},"La machine universelle (1930-1950)","\u002Fnsi-1ere\u002Fpa-histoire-info\u002Fmachine-universelle","1.nsi-1ere\u002Fpa-histoire-info\u002F2.machine-universelle",{"title":249,"path":250,"stem":251},"Les ordinateurs modernes (1947-1990)","\u002Fnsi-1ere\u002Fpa-histoire-info\u002Fordinateurs-modernes","1.nsi-1ere\u002Fpa-histoire-info\u002F3.ordinateurs-modernes",{"title":253,"path":254,"stem":255},"Réseaux, Web et IA (1969 à aujourd'hui)","\u002Fnsi-1ere\u002Fpa-histoire-info\u002Freseaux-et-web","1.nsi-1ere\u002Fpa-histoire-info\u002F4.reseaux-et-web",{"title":257,"path":258,"stem":259,"children":260},"Représentation des données — types et valeurs","\u002Fnsi-1ere\u002Fpb-types-valeurs","1.nsi-1ere\u002Fpb-types-valeurs\u002F0.index",[261,262,266,270,274,278],{"title":257,"path":258,"stem":259},{"title":263,"path":264,"stem":265},"Bases de numération et entiers positifs","\u002Fnsi-1ere\u002Fpb-types-valeurs\u002Fbases-entiers-positifs","1.nsi-1ere\u002Fpb-types-valeurs\u002F1.bases-entiers-positifs",{"title":267,"path":268,"stem":269},"Entiers relatifs et complément à deux","\u002Fnsi-1ere\u002Fpb-types-valeurs\u002Fentiers-relatifs","1.nsi-1ere\u002Fpb-types-valeurs\u002F2.entiers-relatifs",{"title":271,"path":272,"stem":273},"Nombres flottants et virgule flottante","\u002Fnsi-1ere\u002Fpb-types-valeurs\u002Fflottants","1.nsi-1ere\u002Fpb-types-valeurs\u002F3.flottants",{"title":275,"path":276,"stem":277},"Textes et encodages — ASCII, ISO-8859-1, Unicode","\u002Fnsi-1ere\u002Fpb-types-valeurs\u002Ftextes-encodages","1.nsi-1ere\u002Fpb-types-valeurs\u002F4.textes-encodages",{"title":279,"path":280,"stem":281},"Valeurs booléennes et opérateurs logiques","\u002Fnsi-1ere\u002Fpb-types-valeurs\u002Fbooleens","1.nsi-1ere\u002Fpb-types-valeurs\u002F5.booleens",{"title":283,"path":284,"stem":285,"children":286},"Représentation des données : types construits","\u002Fnsi-1ere\u002Fpc-types-construits","1.nsi-1ere\u002Fpc-types-construits\u002F0.index",[287,288,292,296,300],{"title":283,"path":284,"stem":285},{"title":289,"path":290,"stem":291},"Tableaux et listes","\u002Fnsi-1ere\u002Fpc-types-construits\u002Ftableaux-listes","1.nsi-1ere\u002Fpc-types-construits\u002F1.tableaux-listes",{"title":293,"path":294,"stem":295},"Listes en compréhension","\u002Fnsi-1ere\u002Fpc-types-construits\u002Fcomprehension","1.nsi-1ere\u002Fpc-types-construits\u002F2.comprehension",{"title":297,"path":298,"stem":299},"Tuples et p-uplets nommés","\u002Fnsi-1ere\u002Fpc-types-construits\u002Ftuples","1.nsi-1ere\u002Fpc-types-construits\u002F3.tuples",{"title":301,"path":302,"stem":303},"Dictionnaires","\u002Fnsi-1ere\u002Fpc-types-construits\u002Fdictionnaires","1.nsi-1ere\u002Fpc-types-construits\u002F4.dictionnaires",{"title":305,"path":306,"stem":307,"children":308},"Traitement de données en tables","\u002Fnsi-1ere\u002Fpd-tables-donnees","1.nsi-1ere\u002Fpd-tables-donnees\u002F0.index",[309,310,314,318,322],{"title":305,"path":306,"stem":307},{"title":311,"path":312,"stem":313},"Tables et CSV","\u002Fnsi-1ere\u002Fpd-tables-donnees\u002Ftables-csv","1.nsi-1ere\u002Fpd-tables-donnees\u002F1.tables-csv",{"title":315,"path":316,"stem":317},"Recherche et filtrage","\u002Fnsi-1ere\u002Fpd-tables-donnees\u002Frecherche","1.nsi-1ere\u002Fpd-tables-donnees\u002F2.recherche",{"title":319,"path":320,"stem":321},"Trier une table","\u002Fnsi-1ere\u002Fpd-tables-donnees\u002Ftri","1.nsi-1ere\u002Fpd-tables-donnees\u002F3.tri",{"title":323,"path":324,"stem":325,"children":326},"Fusion et indexation","\u002Fnsi-1ere\u002Fpd-tables-donnees\u002Ffusion-indexation","1.nsi-1ere\u002Fpd-tables-donnees\u002F4.fusion-indexation",[327],{"title":323,"path":324,"stem":325},{"title":329,"path":330,"stem":331,"children":332},"IHM sur le Web","\u002Fnsi-1ere\u002Fpe-ihm-web","1.nsi-1ere\u002Fpe-ihm-web\u002F0.index",[333,334,338,342,346,350],{"title":329,"path":330,"stem":331},{"title":335,"path":336,"stem":337},"HTML et CSS — rappel de structure","\u002Fnsi-1ere\u002Fpe-ihm-web\u002Fhtml-css-bases","1.nsi-1ere\u002Fpe-ihm-web\u002F1.html-css-bases",{"title":339,"path":340,"stem":341},"Formulaires HTML","\u002Fnsi-1ere\u002Fpe-ihm-web\u002Fformulaires","1.nsi-1ere\u002Fpe-ihm-web\u002F2.formulaires",{"title":343,"path":344,"stem":345},"Événements JavaScript","\u002Fnsi-1ere\u002Fpe-ihm-web\u002Fevenements-js","1.nsi-1ere\u002Fpe-ihm-web\u002F3.evenements-js",{"title":347,"path":348,"stem":349},"Manipulation du DOM","\u002Fnsi-1ere\u002Fpe-ihm-web\u002Fdom-interaction","1.nsi-1ere\u002Fpe-ihm-web\u002F4.dom-interaction",{"title":351,"path":352,"stem":353},"Client, serveur et HTTP","\u002Fnsi-1ere\u002Fpe-ihm-web\u002Fclient-serveur-http","1.nsi-1ere\u002Fpe-ihm-web\u002F5.client-serveur-http",{"title":355,"path":356,"stem":357,"children":358},"Architectures matérielles et systèmes d'exploitation","\u002Fnsi-1ere\u002Fpf-archi-os","1.nsi-1ere\u002Fpf-archi-os\u002F0.index",[359,360,364,368,372,376],{"title":355,"path":356,"stem":357},{"title":361,"path":362,"stem":363},"Le modèle de von Neumann","\u002Fnsi-1ere\u002Fpf-archi-os\u002Fvon-neumann","1.nsi-1ere\u002Fpf-archi-os\u002F1.von-neumann",{"title":365,"path":366,"stem":367},"Périphériques et interface homme-machine","\u002Fnsi-1ere\u002Fpf-archi-os\u002Fperipheriques-ihm","1.nsi-1ere\u002Fpf-archi-os\u002F2.peripheriques-ihm",{"title":369,"path":370,"stem":371},"Les systèmes d'exploitation","\u002Fnsi-1ere\u002Fpf-archi-os\u002Fsystemes-exploitation","1.nsi-1ere\u002Fpf-archi-os\u002F3.systemes-exploitation",{"title":373,"path":374,"stem":375},"Linux et le shell","\u002Fnsi-1ere\u002Fpf-archi-os\u002Flinux-shell","1.nsi-1ere\u002Fpf-archi-os\u002F4.linux-shell",{"title":377,"path":378,"stem":379},"Réseaux et protocoles","\u002Fnsi-1ere\u002Fpf-archi-os\u002Freseaux","1.nsi-1ere\u002Fpf-archi-os\u002F5.reseaux",{"title":381,"path":382,"stem":383,"children":384},"Langages et programmation","\u002Fnsi-1ere\u002Fpg-langages-prog","1.nsi-1ere\u002Fpg-langages-prog\u002F0.index",[385,386,390,394,398,402,406],{"title":381,"path":382,"stem":383},{"title":387,"path":388,"stem":389},"Diversité et unité des langages de programmation","\u002Fnsi-1ere\u002Fpg-langages-prog\u002Fdiversite-langages","1.nsi-1ere\u002Fpg-langages-prog\u002F1.diversite-langages",{"title":391,"path":392,"stem":393},"Constructions élémentaires","\u002Fnsi-1ere\u002Fpg-langages-prog\u002Fconstructions-elementaires","1.nsi-1ere\u002Fpg-langages-prog\u002F2.constructions-elementaires",{"title":395,"path":396,"stem":397},"Fonctions","\u002Fnsi-1ere\u002Fpg-langages-prog\u002Ffonctions","1.nsi-1ere\u002Fpg-langages-prog\u002F3.fonctions",{"title":399,"path":400,"stem":401},"Spécification d'une fonction","\u002Fnsi-1ere\u002Fpg-langages-prog\u002Fspecification","1.nsi-1ere\u002Fpg-langages-prog\u002F4.specification",{"title":403,"path":404,"stem":405},"Mise au point des programmes","\u002Fnsi-1ere\u002Fpg-langages-prog\u002Fmise-au-point","1.nsi-1ere\u002Fpg-langages-prog\u002F5.mise-au-point",{"title":407,"path":408,"stem":409},"Utilisation de bibliothèques","\u002Fnsi-1ere\u002Fpg-langages-prog\u002Fbibliotheques","1.nsi-1ere\u002Fpg-langages-prog\u002F6.bibliotheques",{"title":411,"path":412,"stem":413,"children":414},"Algorithmique","\u002Fnsi-1ere\u002Fph-algorithmique","1.nsi-1ere\u002Fph-algorithmique\u002F0.index",[415,416,420,424,428,432,436],{"title":411,"path":412,"stem":413},{"title":417,"path":418,"stem":419},"Parcours séquentiel d'un tableau","\u002Fnsi-1ere\u002Fph-algorithmique\u002Fparcours-sequentiel","1.nsi-1ere\u002Fph-algorithmique\u002F1.parcours-sequentiel",{"title":421,"path":422,"stem":423},"Bases de la complexité","\u002Fnsi-1ere\u002Fph-algorithmique\u002Fcomplexite-bases","1.nsi-1ere\u002Fph-algorithmique\u002F2.complexite-bases",{"title":425,"path":426,"stem":427},"Tris par sélection et par insertion","\u002Fnsi-1ere\u002Fph-algorithmique\u002Ftris","1.nsi-1ere\u002Fph-algorithmique\u002F3.tris",{"title":429,"path":430,"stem":431},"Recherche dichotomique","\u002Fnsi-1ere\u002Fph-algorithmique\u002Fdichotomie","1.nsi-1ere\u002Fph-algorithmique\u002F4.dichotomie",{"title":433,"path":434,"stem":435},"Algorithmes gloutons","\u002Fnsi-1ere\u002Fph-algorithmique\u002Fgloutons","1.nsi-1ere\u002Fph-algorithmique\u002F5.gloutons",{"title":437,"path":438,"stem":439},"Les k plus proches voisins (k-NN)","\u002Fnsi-1ere\u002Fph-algorithmique\u002Fknn","1.nsi-1ere\u002Fph-algorithmique\u002F6.knn",{"title":441,"path":442,"stem":443,"children":444},"NSI — Terminale","\u002Fnsi-tale","2.nsi-tale\u002F0.index",[445,446,450,476,498,536,560],{"title":441,"path":442,"stem":443},{"title":447,"path":448,"stem":449},"Review pédagogique — chapitres NSI Terminale (TA, TB, TC, TD, TE)","\u002Fnsi-tale\u002Freview","2.nsi-tale\u002FREVIEW",{"title":451,"path":452,"stem":453,"children":454},"Structures de données","\u002Fnsi-tale\u002Fta-structures-donnees","2.nsi-tale\u002Fta-structures-donnees\u002F0.index",[455,456,460,464,468,472],{"title":451,"path":452,"stem":453},{"title":457,"path":458,"stem":459},"Objet, classe, interface","\u002Fnsi-tale\u002Fta-structures-donnees\u002Finterface-implementation","2.nsi-tale\u002Fta-structures-donnees\u002F1.interface-implementation",{"title":461,"path":462,"stem":463},"Implémenter une structure — l'exemple de la file FIFO","\u002Fnsi-tale\u002Fta-structures-donnees\u002Fimplementer-une-structure","2.nsi-tale\u002Fta-structures-donnees\u002F2.implementer-une-structure",{"title":465,"path":466,"stem":467},"Listes, piles, files, dictionnaires","\u002Fnsi-tale\u002Fta-structures-donnees\u002Flistes-piles-files-dict","2.nsi-tale\u002Fta-structures-donnees\u002F3.listes-piles-files-dict",{"title":469,"path":470,"stem":471},"Arbres binaires","\u002Fnsi-tale\u002Fta-structures-donnees\u002Farbres-binaires","2.nsi-tale\u002Fta-structures-donnees\u002F4.arbres-binaires",{"title":473,"path":474,"stem":475},"Graphes","\u002Fnsi-tale\u002Fta-structures-donnees\u002Fgraphes","2.nsi-tale\u002Fta-structures-donnees\u002F5.graphes",{"title":477,"path":478,"stem":479,"children":480},"Bases de données","\u002Fnsi-tale\u002Ftb-bases-de-donnees","2.nsi-tale\u002Ftb-bases-de-donnees\u002F0.index",[481,482,486,490,494],{"title":477,"path":478,"stem":479},{"title":483,"path":484,"stem":485},"Le modèle relationnel","\u002Fnsi-tale\u002Ftb-bases-de-donnees\u002Fmodele-relationnel","2.nsi-tale\u002Ftb-bases-de-donnees\u002F1.modele-relationnel",{"title":487,"path":488,"stem":489},"Bases de données relationnelles et anomalies de schéma","\u002Fnsi-tale\u002Ftb-bases-de-donnees\u002Fbase-relationnelle","2.nsi-tale\u002Ftb-bases-de-donnees\u002F2.base-relationnelle",{"title":491,"path":492,"stem":493},"Le langage SQL","\u002Fnsi-tale\u002Ftb-bases-de-donnees\u002Fsql","2.nsi-tale\u002Ftb-bases-de-donnees\u002F3.sql",{"title":495,"path":496,"stem":497},"Les systèmes de gestion de bases de données","\u002Fnsi-tale\u002Ftb-bases-de-donnees\u002Fsgbd","2.nsi-tale\u002Ftb-bases-de-donnees\u002F4.sgbd",{"title":499,"path":500,"stem":501,"children":502},"Architectures matérielles, systèmes d'exploitation et réseaux","\u002Fnsi-tale\u002Ftc-archi-os-reseaux","2.nsi-tale\u002Ftc-archi-os-reseaux\u002F0.index",[503,504,508,512,516,520,524,528,532],{"title":499,"path":500,"stem":501},{"title":505,"path":506,"stem":507},"Le système sur puce (SoC)","\u002Fnsi-tale\u002Ftc-archi-os-reseaux\u002Fsysteme-sur-puce","2.nsi-tale\u002Ftc-archi-os-reseaux\u002F1.systeme-sur-puce",{"title":509,"path":510,"stem":511},"Processus et ordonnancement par l'OS","\u002Fnsi-tale\u002Ftc-archi-os-reseaux\u002Fprocessus-os","2.nsi-tale\u002Ftc-archi-os-reseaux\u002F2.processus-os",{"title":513,"path":514,"stem":515},"L'interblocage (deadlock)","\u002Fnsi-tale\u002Ftc-archi-os-reseaux\u002Finterblocage","2.nsi-tale\u002Ftc-archi-os-reseaux\u002F3.interblocage",{"title":517,"path":518,"stem":519},"Principes du routage","\u002Fnsi-tale\u002Ftc-archi-os-reseaux\u002Froutage-principes","2.nsi-tale\u002Ftc-archi-os-reseaux\u002F4.routage-principes",{"title":521,"path":522,"stem":523},"Protocoles de routage RIP et OSPF","\u002Fnsi-tale\u002Ftc-archi-os-reseaux\u002Fprotocoles-rip-ospf","2.nsi-tale\u002Ftc-archi-os-reseaux\u002F5.protocoles-rip-ospf",{"title":525,"path":526,"stem":527},"Chiffrement symétrique","\u002Fnsi-tale\u002Ftc-archi-os-reseaux\u002Fchiffrement-symetrique","2.nsi-tale\u002Ftc-archi-os-reseaux\u002F6.chiffrement-symetrique",{"title":529,"path":530,"stem":531},"Chiffrement asymétrique","\u002Fnsi-tale\u002Ftc-archi-os-reseaux\u002Fchiffrement-asymetrique","2.nsi-tale\u002Ftc-archi-os-reseaux\u002F7.chiffrement-asymetrique",{"title":533,"path":534,"stem":535},"HTTPS — l'échange de clé symétrique","\u002Fnsi-tale\u002Ftc-archi-os-reseaux\u002Fhttps-tls","2.nsi-tale\u002Ftc-archi-os-reseaux\u002F8.https-tls",{"title":381,"path":537,"stem":538,"children":539},"\u002Fnsi-tale\u002Ftd-langages-prog","2.nsi-tale\u002Ftd-langages-prog\u002F0.index",[540,541,544,548,552,556],{"title":381,"path":537,"stem":538},{"title":403,"path":542,"stem":543},"\u002Fnsi-tale\u002Ftd-langages-prog\u002Fmise-au-point","2.nsi-tale\u002Ftd-langages-prog\u002F1.mise-au-point",{"title":545,"path":546,"stem":547},"Modularité","\u002Fnsi-tale\u002Ftd-langages-prog\u002Fmodularite","2.nsi-tale\u002Ftd-langages-prog\u002F2.modularite",{"title":549,"path":550,"stem":551},"Récursivité","\u002Fnsi-tale\u002Ftd-langages-prog\u002Frecursivite","2.nsi-tale\u002Ftd-langages-prog\u002F3.recursivite",{"title":553,"path":554,"stem":555},"Paradigmes de programmation","\u002Fnsi-tale\u002Ftd-langages-prog\u002Fparadigmes","2.nsi-tale\u002Ftd-langages-prog\u002F4.paradigmes",{"title":557,"path":558,"stem":559},"Programme comme donnée — calculabilité et indécidabilité","\u002Fnsi-tale\u002Ftd-langages-prog\u002Fprogramme-comme-donnee","2.nsi-tale\u002Ftd-langages-prog\u002F5.programme-comme-donnee",{"title":411,"path":561,"stem":562,"children":563},"\u002Fnsi-tale\u002Fte-algorithmique","2.nsi-tale\u002Fte-algorithmique\u002F0.index",[564,565,569,573,577,581],{"title":411,"path":561,"stem":562},{"title":566,"path":567,"stem":568},"Algorithmes sur les arbres binaires","\u002Fnsi-tale\u002Fte-algorithmique\u002Farbres-binaires-algos","2.nsi-tale\u002Fte-algorithmique\u002F1.arbres-binaires-algos",{"title":570,"path":571,"stem":572},"Parcours de graphes — DFS, BFS, cycles, chemins","\u002Fnsi-tale\u002Fte-algorithmique\u002Fgraphes-parcours","2.nsi-tale\u002Fte-algorithmique\u002F2.graphes-parcours",{"title":574,"path":575,"stem":576},"Diviser pour régner","\u002Fnsi-tale\u002Fte-algorithmique\u002Fdiviser-pour-regner","2.nsi-tale\u002Fte-algorithmique\u002F3.diviser-pour-regner",{"title":578,"path":579,"stem":580},"Programmation dynamique","\u002Fnsi-tale\u002Fte-algorithmique\u002Fprogrammation-dynamique","2.nsi-tale\u002Fte-algorithmique\u002F4.programmation-dynamique",{"title":582,"path":583,"stem":584},"Recherche textuelle — l'algorithme de Boyer-Moore","\u002Fnsi-tale\u002Fte-algorithmique\u002Frecherche-textuelle","2.nsi-tale\u002Fte-algorithmique\u002F5.recherche-textuelle",{"id":586,"title":457,"bo":587,"body":590,"description":1923,"eval":1924,"extension":1925,"labo":1924,"meta":1926,"navigation":728,"path":458,"quizzes":1927,"readingTime":703,"seo":1939,"stem":459,"tp":1924,"__hash__":1940},"cours\u002F2.nsi-tale\u002Fta-structures-donnees\u002F1.interface-implementation.md",[588,589],"TA04","TA05",{"type":591,"value":592,"toc":1914},"minimark",[593,598,615,630,669,683,687,690,770,773,818,829,864,875,928,959,963,980,1112,1118,1164,1185,1211,1232,1236,1258,1314,1324,1331,1341,1350,1354,1365,1400,1407,1615,1618,1661,1678,1703,1707,1786,1790,1798,1878,1906,1908,1910],[594,595,597],"h2",{"id":596},"pourquoi-des-objets","Pourquoi des objets ?",[599,600,601,602,606,607,610,611,614],"p",{},"Les structures de données du chapitre — files, piles, arbres, graphes — ont une\nparticularité commune : elles ",[603,604,605],"strong",{},"regroupent un état"," (les éléments stockés) ",[603,608,609],{},"et\nun comportement"," (les opérations qu'on peut faire dessus). Tant qu'on ne\nmanipule qu'une seule pile ou une seule file dans un programme jouet, on peut s'en\nsortir avec une liste Python et quelques fonctions libres. Dès qu'on en a\nplusieurs, ou qu'on veut ",[603,612,613],{},"protéger"," la cohérence interne, cette approche\ncraque : rien n'empêche un appelant distrait de modifier la liste interne et de\ncasser l'invariant.",[616,617,618],"note",{},[599,619,620,621,625,626,629],{},"Considérez un compte bancaire dont on suit le solde. Avec un simple dictionnaire\n",[622,623,624],"code",{},"{\"solde\": 100}",", n'importe qui peut écrire ",[622,627,628],{},"compte[\"solde\"] = -1000"," sans\nqu'aucune règle métier n'intervienne. Le compte n'a plus aucun garde-fou.",[599,631,632,633,636,637,640,641,644,645,648,649,652,653,656,657,660,661,664,665,668],{},"Le ",[603,634,635],{},"paradigme objet"," offre un cadre linguistique parfaitement adapté à cette\nsituation. Une ",[603,638,639],{},"classe"," réunit en un même bloc le ",[603,642,643],{},"plan"," des données internes\n(les ",[603,646,647],{},"attributs",") et le ",[603,650,651],{},"catalogue"," des opérations disponibles (les\n",[603,654,655],{},"méthodes","). Un ",[603,658,659],{},"objet"," est une instance concrète de ce plan — une analogie\nutile : la classe est le ",[603,662,663],{},"plan d'architecte",", l'objet est la ",[603,666,667],{},"maison\nconstruite",". Plusieurs maisons peuvent être bâties depuis un même plan, chacune\navec ses meubles à elle.",[599,670,671,672,675,676,679,680,682],{},"Cet item ",[673,674],"bo-ref",{"code":589}," ne demande ",[603,677,678],{},"ni"," l'héritage ",[603,681,678],{}," le\npolymorphisme. L'objectif est plus modeste : savoir écrire une définition de\nclasse Python, l'instancier, accéder à ses attributs et appeler ses méthodes.",[594,684,686],{"id":685},"classe-et-instance","Classe et instance",[599,688,689],{},"Reprenons le compte bancaire. Une définition minimale en Python :",[691,692,697],"pre",{"className":693,"code":694,"language":695,"meta":696,"style":696},"language-python shiki shiki-themes github-light github-light github-dark","class CompteBancaire:\n    \"\"\"Compte bancaire avec un solde et des opérations de dépôt\u002Fretrait.\"\"\"\n\n    def __init__(self, solde_initial=0):\n        self.solde = solde_initial          # attribut d'instance\n","python","",[622,698,699,716,723,730,752],{"__ignoreMap":696},[700,701,704,708,712],"span",{"class":702,"line":703},"line",1,[700,705,707],{"class":706},"s8jYJ","class",[700,709,711],{"class":710},"snPdu"," CompteBancaire",[700,713,715],{"class":714},"sxrX7",":\n",[700,717,719],{"class":702,"line":718},2,[700,720,722],{"class":721},"sIIMD","    \"\"\"Compte bancaire avec un solde et des opérations de dépôt\u002Fretrait.\"\"\"\n",[700,724,726],{"class":702,"line":725},3,[700,727,729],{"emptyLinePlaceholder":728},true,"\n",[700,731,733,736,740,743,746,749],{"class":702,"line":732},4,[700,734,735],{"class":706},"    def",[700,737,739],{"class":738},"sBjJW"," __init__",[700,741,742],{"class":714},"(self, solde_initial",[700,744,745],{"class":706},"=",[700,747,748],{"class":738},"0",[700,750,751],{"class":714},"):\n",[700,753,755,758,761,763,766],{"class":702,"line":754},5,[700,756,757],{"class":738},"        self",[700,759,760],{"class":714},".solde ",[700,762,745],{"class":706},[700,764,765],{"class":714}," solde_initial          ",[700,767,769],{"class":768},"sCsY4","# attribut d'instance\n",[599,771,772],{},"Trois éléments à comprendre :",[774,775,776,794,806],"ul",{},[777,778,779,780,784,785,789,790,793],"li",{},"Le mot-clé ",[603,781,782],{},[622,783,707],{}," introduit la définition, suivi du nom de la classe en\n",[786,787,788],"em",{},"PascalCase"," (",[622,791,792],{},"CompteBancaire",").",[777,795,796,801,802,805],{},[603,797,798],{},[622,799,800],{},"__init__"," est une méthode spéciale appelée à la création d'un objet — on\nl'appelle ",[603,803,804],{},"constructeur",". Son rôle : initialiser les attributs.",[777,807,808,813,814,817],{},[603,809,810],{},[622,811,812],{},"self"," est la convention Python pour désigner l'",[603,815,816],{},"objet courant"," au sein\nd'une méthode. C'est obligatoirement le premier paramètre.",[599,819,820,821,824,825,828],{},"L'",[603,822,823],{},"instanciation"," consiste à ",[603,826,827],{},"appeler la classe comme une fonction"," :",[691,830,832],{"className":693,"code":831,"language":695,"meta":696,"style":696},"c = CompteBancaire(100)   # appel implicite de __init__(self, solde_initial=100)\nprint(c.solde)            # 100\n",[622,833,834,853],{"__ignoreMap":696},[700,835,836,839,841,844,847,850],{"class":702,"line":703},[700,837,838],{"class":714},"c ",[700,840,745],{"class":706},[700,842,843],{"class":714}," CompteBancaire(",[700,845,846],{"class":738},"100",[700,848,849],{"class":714},")   ",[700,851,852],{"class":768},"# appel implicite de __init__(self, solde_initial=100)\n",[700,854,855,858,861],{"class":702,"line":718},[700,856,857],{"class":738},"print",[700,859,860],{"class":714},"(c.solde)            ",[700,862,863],{"class":768},"# 100\n",[599,865,866,867,870,871,874],{},"Chaque appel ",[622,868,869],{},"CompteBancaire(...)"," crée un objet ",[603,872,873],{},"indépendant"," : ses attributs\nlui sont propres.",[691,876,878],{"className":693,"code":877,"language":695,"meta":696,"style":696},"c1 = CompteBancaire(100)\nc2 = CompteBancaire(50)\nc1.solde = 200\nprint(c1.solde, c2.solde)   # 200 50 — c2 n'a pas bougé\n",[622,879,880,894,908,918],{"__ignoreMap":696},[700,881,882,885,887,889,891],{"class":702,"line":703},[700,883,884],{"class":714},"c1 ",[700,886,745],{"class":706},[700,888,843],{"class":714},[700,890,846],{"class":738},[700,892,893],{"class":714},")\n",[700,895,896,899,901,903,906],{"class":702,"line":718},[700,897,898],{"class":714},"c2 ",[700,900,745],{"class":706},[700,902,843],{"class":714},[700,904,905],{"class":738},"50",[700,907,893],{"class":714},[700,909,910,913,915],{"class":702,"line":725},[700,911,912],{"class":714},"c1.solde ",[700,914,745],{"class":706},[700,916,917],{"class":738}," 200\n",[700,919,920,922,925],{"class":702,"line":732},[700,921,857],{"class":738},[700,923,924],{"class":714},"(c1.solde, c2.solde)   ",[700,926,927],{"class":768},"# 200 50 — c2 n'a pas bougé\n",[929,930,933,946],"self-eval-qcm",{"correct":931,"slug":932},"1","interface-implementation-c1",[934,935,936],"template",{"v-slot:question":696},[599,937,938,939,942,943,945],{},"Dans ",[622,940,941],{},"c = CompteBancaire(100)",", à quel paramètre du ",[622,944,800],{}," la valeur 100 est-elle passée ?",[934,947,948],{"v-slot:choices":696},[774,949,950,953,956],{},[777,951,952],{},"à self",[777,954,955],{},"à solde_initial",[777,957,958],{},"aucun, c'est ignoré",[594,960,962],{"id":961},"méthodes-donner-un-comportement-aux-objets","Méthodes — donner un comportement aux objets",[599,964,965,966,969,970,973,974,976,977,979],{},"Une ",[603,967,968],{},"méthode"," est une fonction définie ",[603,971,972],{},"dans la classe"," ; elle agit sur les\nattributs de l'objet via ",[622,975,812],{},". Ajoutons à ",[622,978,792],{}," les opérations\nattendues d'un vrai compte :",[691,981,983],{"className":693,"code":982,"language":695,"meta":696,"style":696},"class CompteBancaire:\n    def __init__(self, solde_initial=0):\n        self.solde = solde_initial\n\n    def deposer(self, montant):\n        self.solde = self.solde + montant\n\n    def retirer(self, montant):\n        self.solde = self.solde - montant\n\n    def consulter(self):\n        return self.solde\n",[622,984,985,993,1007,1018,1022,1032,1052,1057,1067,1085,1090,1101],{"__ignoreMap":696},[700,986,987,989,991],{"class":702,"line":703},[700,988,707],{"class":706},[700,990,711],{"class":710},[700,992,715],{"class":714},[700,994,995,997,999,1001,1003,1005],{"class":702,"line":718},[700,996,735],{"class":706},[700,998,739],{"class":738},[700,1000,742],{"class":714},[700,1002,745],{"class":706},[700,1004,748],{"class":738},[700,1006,751],{"class":714},[700,1008,1009,1011,1013,1015],{"class":702,"line":725},[700,1010,757],{"class":738},[700,1012,760],{"class":714},[700,1014,745],{"class":706},[700,1016,1017],{"class":714}," solde_initial\n",[700,1019,1020],{"class":702,"line":732},[700,1021,729],{"emptyLinePlaceholder":728},[700,1023,1024,1026,1029],{"class":702,"line":754},[700,1025,735],{"class":706},[700,1027,1028],{"class":710}," deposer",[700,1030,1031],{"class":714},"(self, montant):\n",[700,1033,1035,1037,1039,1041,1044,1046,1049],{"class":702,"line":1034},6,[700,1036,757],{"class":738},[700,1038,760],{"class":714},[700,1040,745],{"class":706},[700,1042,1043],{"class":738}," self",[700,1045,760],{"class":714},[700,1047,1048],{"class":706},"+",[700,1050,1051],{"class":714}," montant\n",[700,1053,1055],{"class":702,"line":1054},7,[700,1056,729],{"emptyLinePlaceholder":728},[700,1058,1060,1062,1065],{"class":702,"line":1059},8,[700,1061,735],{"class":706},[700,1063,1064],{"class":710}," retirer",[700,1066,1031],{"class":714},[700,1068,1070,1072,1074,1076,1078,1080,1083],{"class":702,"line":1069},9,[700,1071,757],{"class":738},[700,1073,760],{"class":714},[700,1075,745],{"class":706},[700,1077,1043],{"class":738},[700,1079,760],{"class":714},[700,1081,1082],{"class":706},"-",[700,1084,1051],{"class":714},[700,1086,1088],{"class":702,"line":1087},10,[700,1089,729],{"emptyLinePlaceholder":728},[700,1091,1093,1095,1098],{"class":702,"line":1092},11,[700,1094,735],{"class":706},[700,1096,1097],{"class":710}," consulter",[700,1099,1100],{"class":714},"(self):\n",[700,1102,1104,1107,1109],{"class":702,"line":1103},12,[700,1105,1106],{"class":706},"        return",[700,1108,1043],{"class":738},[700,1110,1111],{"class":714},".solde\n",[599,1113,1114,1115,828],{},"Une méthode s'appelle sur un objet avec la ",[603,1116,1117],{},"notation pointée",[691,1119,1121],{"className":693,"code":1120,"language":695,"meta":696,"style":696},"c = CompteBancaire(100)\nc.deposer(50)\nc.retirer(20)\nprint(c.consulter())   # 130\n",[622,1122,1123,1135,1144,1154],{"__ignoreMap":696},[700,1124,1125,1127,1129,1131,1133],{"class":702,"line":703},[700,1126,838],{"class":714},[700,1128,745],{"class":706},[700,1130,843],{"class":714},[700,1132,846],{"class":738},[700,1134,893],{"class":714},[700,1136,1137,1140,1142],{"class":702,"line":718},[700,1138,1139],{"class":714},"c.deposer(",[700,1141,905],{"class":738},[700,1143,893],{"class":714},[700,1145,1146,1149,1152],{"class":702,"line":725},[700,1147,1148],{"class":714},"c.retirer(",[700,1150,1151],{"class":738},"20",[700,1153,893],{"class":714},[700,1155,1156,1158,1161],{"class":702,"line":732},[700,1157,857],{"class":738},[700,1159,1160],{"class":714},"(c.consulter())   ",[700,1162,1163],{"class":768},"# 130\n",[599,1165,1166,1167,1170,1171,1174,1175,1178,1179,1181,1182,1184],{},"Quand vous écrivez ",[622,1168,1169],{},"c.deposer(50)",", Python traduit en\n",[622,1172,1173],{},"CompteBancaire.deposer(c, 50)"," — l'objet ",[622,1176,1177],{},"c"," est passé en premier argument, qui\nporte le nom ",[622,1180,812],{}," par convention. C'est tout le mystère de ",[622,1183,812],{},".",[929,1186,1188,1198],{"correct":931,"slug":1187},"interface-implementation-c2",[934,1189,1190],{"v-slot:question":696},[599,1191,938,1192,1194,1195,1197],{},[622,1193,1169],{},", à quoi correspond le paramètre ",[622,1196,812],{}," ?",[934,1199,1200],{"v-slot:choices":696},[774,1201,1202,1205,1208],{},[777,1203,1204],{},"à l'entier 50",[777,1206,1207],{},"à l'objet c",[777,1209,1210],{},"à la classe CompteBancaire",[1212,1213,1214],"tip",{},[599,1215,965,1216,1219,1220,1223,1224,1226,1227,1229,1230,1184],{},[603,1217,1218],{},"fonction libre"," vit hors de toute classe ; on l'appelle par son nom\n(",[622,1221,1222],{},"carre(5)","). Une ",[603,1225,968],{}," est définie dans une classe ; on l'appelle sur un\nobjet (",[622,1228,1169],{},") et elle a accès aux attributs de cet objet via ",[622,1231,812],{},[594,1233,1235],{"id":1234},"linterface-dune-classe","L'interface d'une classe",[599,1237,1238,1239,1242,1243,1246,1247,1250,1251,1254,1255,1257],{},"Une classe ",[603,1240,1241],{},"expose"," vers l'extérieur un ensemble d'opérations — son\n",[603,1244,1245],{},"interface"," — et ",[603,1248,1249],{},"cache"," vers l'intérieur les détails de réalisation — son\n",[603,1252,1253],{},"implémentation",". Pour ",[622,1256,792],{},", l'interface naturelle est :",[1259,1260,1261,1274],"table",{},[1262,1263,1264],"thead",{},[1265,1266,1267,1271],"tr",{},[1268,1269,1270],"th",{},"Méthode",[1268,1272,1273],{},"Effet attendu",[1275,1276,1277,1291,1304],"tbody",{},[1265,1278,1279,1285],{},[1280,1281,1282],"td",{},[622,1283,1284],{},"deposer(montant)",[1280,1286,1287,1288,1184],{},"Augmente le solde de ",[622,1289,1290],{},"montant",[1265,1292,1293,1298],{},[1280,1294,1295],{},[622,1296,1297],{},"retirer(montant)",[1280,1299,1300,1301,1303],{},"Diminue le solde de ",[622,1302,1290],{},", à condition qu'il reste positif.",[1265,1305,1306,1311],{},[1280,1307,1308],{},[622,1309,1310],{},"consulter()",[1280,1312,1313],{},"Renvoie le solde courant.",[599,1315,1316,1317,1320,1321,1323],{},"Cette spécification — le ",[603,1318,1319],{},"contrat"," que la classe promet de respecter — est\nindépendante de la façon dont elle est codée. C'est elle que voit l'utilisateur\nde la classe ; lui n'a pas à savoir si le solde est stocké dans un entier, dans\nun flottant, ou dans une base de données distante. Tant que ",[622,1322,1310],{},"\nrenvoie le bon nombre, le contrat est tenu.",[599,1325,1326,1327,1330],{},"Une analogie utile : l'interface est un ",[603,1328,1329],{},"contrat de sous-traitance",". Le\ndonneur d'ordre liste ce qu'il veut recevoir (les opérations et leur\ncomportement) ; peu lui importe quelle usine fabrique, ni avec quelle machine.\nTant que le contrat est respecté, on peut changer d'usine sans rien renégocier\nen amont.",[599,1332,1333,1334,1336,1337,1340],{},"Cette séparation est au cœur de ",[673,1335],{"code":588},". Elle vous permet de\nraisonner sur un programme sans dépendre du code interne d'une classe, et\nd'",[603,1338,1339],{},"échanger une implémentation par une autre"," sans rien casser ailleurs.",[616,1342,1343],{},[599,1344,1345,1346,1349],{},"Au cours suivant, on verra que la ",[603,1347,1348],{},"file FIFO"," admet plusieurs implémentations\nqui exposent toutes la même interface — c'est l'illustration canonique de cette\nrègle. Pour l'instant, on reste sur le compte bancaire pour poser le\nvocabulaire.",[594,1351,1353],{"id":1352},"encapsulation-protéger-les-invariants","Encapsulation — protéger les invariants",[599,1355,1356,1357,1360,1361,1364],{},"Un ",[603,1358,1359],{},"invariant"," est une propriété que les attributs d'un objet doivent\ntoujours vérifier. Pour notre compte : « le solde reste positif ou nul ». La\nversion actuelle de ",[622,1362,1363],{},"retirer"," ne protège rien :",[691,1366,1368],{"className":693,"code":1367,"language":695,"meta":696,"style":696},"c = CompteBancaire(50)\nc.retirer(200)\nprint(c.consulter())   # -150  — invariant brisé\n",[622,1369,1370,1382,1391],{"__ignoreMap":696},[700,1371,1372,1374,1376,1378,1380],{"class":702,"line":703},[700,1373,838],{"class":714},[700,1375,745],{"class":706},[700,1377,843],{"class":714},[700,1379,905],{"class":738},[700,1381,893],{"class":714},[700,1383,1384,1386,1389],{"class":702,"line":718},[700,1385,1148],{"class":714},[700,1387,1388],{"class":738},"200",[700,1390,893],{"class":714},[700,1392,1393,1395,1397],{"class":702,"line":725},[700,1394,857],{"class":738},[700,1396,1160],{"class":714},[700,1398,1399],{"class":768},"# -150  — invariant brisé\n",[599,1401,1402,1403,1406],{},"Le rôle de l'",[603,1404,1405],{},"encapsulation"," est de placer le contrôle dans la méthode, à\nl'unique endroit où la modification se fait :",[691,1408,1410],{"className":693,"code":1409,"language":695,"meta":696,"style":696},"class CompteBancaire:\n    def __init__(self, solde_initial=0):\n        self._solde = solde_initial   # attribut \"interne\", préfixe _ par convention\n\n    def deposer(self, montant):\n        if montant \u003C= 0:\n            raise ValueError(\"le montant doit être strictement positif\")\n        self._solde = self._solde + montant\n\n    def retirer(self, montant):\n        if montant \u003C= 0:\n            raise ValueError(\"le montant doit être strictement positif\")\n        if montant > self._solde:\n            raise ValueError(\"solde insuffisant\")\n        self._solde = self._solde - montant\n\n    def consulter(self):\n        return self._solde\n",[622,1411,1412,1420,1434,1449,1453,1461,1477,1493,1509,1513,1521,1533,1545,1560,1574,1591,1596,1605],{"__ignoreMap":696},[700,1413,1414,1416,1418],{"class":702,"line":703},[700,1415,707],{"class":706},[700,1417,711],{"class":710},[700,1419,715],{"class":714},[700,1421,1422,1424,1426,1428,1430,1432],{"class":702,"line":718},[700,1423,735],{"class":706},[700,1425,739],{"class":738},[700,1427,742],{"class":714},[700,1429,745],{"class":706},[700,1431,748],{"class":738},[700,1433,751],{"class":714},[700,1435,1436,1438,1441,1443,1446],{"class":702,"line":725},[700,1437,757],{"class":738},[700,1439,1440],{"class":714},"._solde ",[700,1442,745],{"class":706},[700,1444,1445],{"class":714}," solde_initial   ",[700,1447,1448],{"class":768},"# attribut \"interne\", préfixe _ par convention\n",[700,1450,1451],{"class":702,"line":732},[700,1452,729],{"emptyLinePlaceholder":728},[700,1454,1455,1457,1459],{"class":702,"line":754},[700,1456,735],{"class":706},[700,1458,1028],{"class":710},[700,1460,1031],{"class":714},[700,1462,1463,1466,1469,1472,1475],{"class":702,"line":1034},[700,1464,1465],{"class":706},"        if",[700,1467,1468],{"class":714}," montant ",[700,1470,1471],{"class":706},"\u003C=",[700,1473,1474],{"class":738}," 0",[700,1476,715],{"class":714},[700,1478,1479,1482,1485,1488,1491],{"class":702,"line":1054},[700,1480,1481],{"class":706},"            raise",[700,1483,1484],{"class":738}," ValueError",[700,1486,1487],{"class":714},"(",[700,1489,1490],{"class":721},"\"le montant doit être strictement positif\"",[700,1492,893],{"class":714},[700,1494,1495,1497,1499,1501,1503,1505,1507],{"class":702,"line":1059},[700,1496,757],{"class":738},[700,1498,1440],{"class":714},[700,1500,745],{"class":706},[700,1502,1043],{"class":738},[700,1504,1440],{"class":714},[700,1506,1048],{"class":706},[700,1508,1051],{"class":714},[700,1510,1511],{"class":702,"line":1069},[700,1512,729],{"emptyLinePlaceholder":728},[700,1514,1515,1517,1519],{"class":702,"line":1087},[700,1516,735],{"class":706},[700,1518,1064],{"class":710},[700,1520,1031],{"class":714},[700,1522,1523,1525,1527,1529,1531],{"class":702,"line":1092},[700,1524,1465],{"class":706},[700,1526,1468],{"class":714},[700,1528,1471],{"class":706},[700,1530,1474],{"class":738},[700,1532,715],{"class":714},[700,1534,1535,1537,1539,1541,1543],{"class":702,"line":1103},[700,1536,1481],{"class":706},[700,1538,1484],{"class":738},[700,1540,1487],{"class":714},[700,1542,1490],{"class":721},[700,1544,893],{"class":714},[700,1546,1548,1550,1552,1555,1557],{"class":702,"line":1547},13,[700,1549,1465],{"class":706},[700,1551,1468],{"class":714},[700,1553,1554],{"class":706},">",[700,1556,1043],{"class":738},[700,1558,1559],{"class":714},"._solde:\n",[700,1561,1563,1565,1567,1569,1572],{"class":702,"line":1562},14,[700,1564,1481],{"class":706},[700,1566,1484],{"class":738},[700,1568,1487],{"class":714},[700,1570,1571],{"class":721},"\"solde insuffisant\"",[700,1573,893],{"class":714},[700,1575,1577,1579,1581,1583,1585,1587,1589],{"class":702,"line":1576},15,[700,1578,757],{"class":738},[700,1580,1440],{"class":714},[700,1582,745],{"class":706},[700,1584,1043],{"class":738},[700,1586,1440],{"class":714},[700,1588,1082],{"class":706},[700,1590,1051],{"class":714},[700,1592,1594],{"class":702,"line":1593},16,[700,1595,729],{"emptyLinePlaceholder":728},[700,1597,1599,1601,1603],{"class":702,"line":1598},17,[700,1600,735],{"class":706},[700,1602,1097],{"class":710},[700,1604,1100],{"class":714},[700,1606,1608,1610,1612],{"class":702,"line":1607},18,[700,1609,1106],{"class":706},[700,1611,1043],{"class":738},[700,1613,1614],{"class":714},"._solde\n",[599,1616,1617],{},"Deux changements méritent un commentaire :",[774,1619,1620,1653],{},[777,1621,1622,1623,1628,1629,1632,1633,1636,1637,1640,1641,1644,1645,1648,1649,1652],{},"L'attribut s'appelle désormais ",[603,1624,1625],{},[622,1626,1627],{},"_solde"," avec un préfixe ",[622,1630,1631],{},"_",". Cette\n",[603,1634,1635],{},"convention"," signale au lecteur que l'attribut est ",[603,1638,1639],{},"interne à la classe","\net qu'on ne doit pas le toucher de l'extérieur. Python n'impose ",[603,1642,1643],{},"aucune","\nprotection technique — vous pouvez écrire ",[622,1646,1647],{},"c._solde = -1000"," et cela marchera.\nLe préfixe est un ",[603,1650,1651],{},"engagement social"," entre le rédacteur de la classe et\nson utilisateur.",[777,1654,1655,1656,1660],{},"L'accès à la valeur passe par la méthode ",[603,1657,1658],{},[622,1659,1310],{}," plutôt que par\nl'attribut. Si demain on stocke le solde différemment (en centimes au lieu\nd'euros, par exemple), l'utilisateur ne s'en rendra pas compte — seule la\nméthode change.",[1662,1663,1664],"warning",{},[599,1665,1666,1667,1669,1670,1673,1674,1677],{},"Le préfixe ",[622,1668,1631],{}," n'est ",[603,1671,1672],{},"pas"," une protection technique. Python n'empêche pas\nl'accès. C'est une convention. Si vous lisez ",[622,1675,1676],{},"c._solde"," depuis l'extérieur,\nvous brisez l'abstraction même si Python vous laisse faire — et vous perdez\nla garantie que les invariants tiennent.",[929,1679,1681,1690],{"correct":931,"slug":1680},"interface-implementation-c3",[934,1682,1683],{"v-slot:question":696},[599,1684,1685,1686,1689],{},"Que se passe-t-il à l'exécution de ",[622,1687,1688],{},"c.retirer(200)"," sur un compte au solde 50, dans la version encapsulée ?",[934,1691,1692],{"v-slot:choices":696},[774,1693,1694,1697,1700],{},[777,1695,1696],{},"le solde devient -150",[777,1698,1699],{},"une exception ValueError est levée",[777,1701,1702],{},"le retrait est ignoré silencieusement",[594,1704,1706],{"id":1705},"conventions-et-notations","Conventions et notations",[774,1708,1709,1726,1738,1759],{},[777,1710,1711,1714,1715,789,1717,1719,1720,1719,1723,793],{},[603,1712,1713],{},"Nom de classe"," : ",[786,1716,788],{},[622,1718,792],{},", ",[622,1721,1722],{},"Pile",[622,1724,1725],{},"Noeud",[777,1727,1728,1731,1732,1734,1735,793],{},[603,1729,1730],{},"Attribut interne"," : préfixe ",[622,1733,1631],{}," indiquant « privé par convention »\n(",[622,1736,1737],{},"self._solde",[777,1739,1740,1743,1744,789,1747,1719,1749,1719,1752,1755,1756,1758],{},[603,1741,1742],{},"Méthode magique"," : encadrée par ",[622,1745,1746],{},"__",[622,1748,800],{},[622,1750,1751],{},"__len__",[622,1753,1754],{},"__repr__",").\nVous verrez ",[622,1757,800],{}," partout dans le chapitre ; les autres sont optionnelles.",[777,1760,1761,1714,1764,1719,1767,1719,1769,1719,1772,1775,1776,1779,1780,1719,1783,793],{},[603,1762,1763],{},"Une méthode = un verbe",[622,1765,1766],{},"deposer",[622,1768,1363],{},[622,1770,1771],{},"consulter",[622,1773,1774],{},"enfiler",",\n",[622,1777,1778],{},"defiler",". L'attribut est un nom (",[622,1781,1782],{},"solde",[622,1784,1785],{},"valeur",[594,1787,1789],{"id":1788},"pour-aller-plus-loin","Pour aller plus loin",[599,1791,1792,1793,1795,1796,828],{},"La méthode spéciale ",[622,1794,1754],{}," permet de définir comment un objet s'affiche\nquand on le ",[622,1797,857],{},[691,1799,1801],{"className":693,"code":1800,"language":695,"meta":696,"style":696},"class CompteBancaire:\n    # ... reste de la classe inchangé ...\n\n    def __repr__(self):\n        return f\"CompteBancaire(solde={self._solde})\"\n\nc = CompteBancaire(150)\nprint(c)   # CompteBancaire(solde=150)\n",[622,1802,1803,1811,1816,1820,1829,1851,1855,1868],{"__ignoreMap":696},[700,1804,1805,1807,1809],{"class":702,"line":703},[700,1806,707],{"class":706},[700,1808,711],{"class":710},[700,1810,715],{"class":714},[700,1812,1813],{"class":702,"line":718},[700,1814,1815],{"class":768},"    # ... reste de la classe inchangé ...\n",[700,1817,1818],{"class":702,"line":725},[700,1819,729],{"emptyLinePlaceholder":728},[700,1821,1822,1824,1827],{"class":702,"line":732},[700,1823,735],{"class":706},[700,1825,1826],{"class":738}," __repr__",[700,1828,1100],{"class":714},[700,1830,1831,1833,1836,1839,1842,1845,1848],{"class":702,"line":754},[700,1832,1106],{"class":706},[700,1834,1835],{"class":706}," f",[700,1837,1838],{"class":721},"\"CompteBancaire(solde=",[700,1840,1841],{"class":738},"{self",[700,1843,1844],{"class":714},"._solde",[700,1846,1847],{"class":738},"}",[700,1849,1850],{"class":721},")\"\n",[700,1852,1853],{"class":702,"line":1034},[700,1854,729],{"emptyLinePlaceholder":728},[700,1856,1857,1859,1861,1863,1866],{"class":702,"line":1054},[700,1858,838],{"class":714},[700,1860,745],{"class":706},[700,1862,843],{"class":714},[700,1864,1865],{"class":738},"150",[700,1867,893],{"class":714},[700,1869,1870,1872,1875],{"class":702,"line":1059},[700,1871,857],{"class":738},[700,1873,1874],{"class":714},"(c)   ",[700,1876,1877],{"class":768},"# CompteBancaire(solde=150)\n",[599,1879,1880,1881,1884,1885,1888,1889,1891,1892,1895,1896,1898,1899,1884,1902,1905],{},"Vous reverrez les classes dans tout le reste du chapitre : ",[622,1882,1883],{},"FileTableau"," et\n",[622,1886,1887],{},"FileDeuxPiles"," au cours suivant pour illustrer la pluralité des\nimplémentations ; ",[622,1890,1722],{}," (LIFO) et ",[622,1893,1894],{},"File"," (FIFO) au cours 3 pour les structures\nlinéaires canoniques ; ",[622,1897,1725],{}," au cours 4 pour les arbres ; ",[622,1900,1901],{},"GrapheMatrice",[622,1903,1904],{},"GrapheListe"," au cours 5 pour les graphes. Le vocabulaire posé ici sera utilisé\npartout.",[673,1907],{"code":589},[673,1909],{"code":588},[1911,1912,1913],"style",{},"html pre.shiki code .s8jYJ, html code.shiki .s8jYJ{--shiki-light:#D73A49;--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .snPdu, html code.shiki .snPdu{--shiki-light:#6F42C1;--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sxrX7, html code.shiki .sxrX7{--shiki-light:#24292E;--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sIIMD, html code.shiki .sIIMD{--shiki-light:#032F62;--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sBjJW, html code.shiki .sBjJW{--shiki-light:#005CC5;--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sCsY4, html code.shiki .sCsY4{--shiki-light:#6A737D;--shiki-default:#6A737D;--shiki-dark:#6A737D}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":696,"searchDepth":718,"depth":718,"links":1915},[1916,1917,1918,1919,1920,1921,1922],{"id":596,"depth":718,"text":597},{"id":685,"depth":718,"text":686},{"id":961,"depth":718,"text":962},{"id":1234,"depth":718,"text":1235},{"id":1352,"depth":718,"text":1353},{"id":1705,"depth":718,"text":1706},{"id":1788,"depth":718,"text":1789},"Introduire d'un seul tenant la programmation orientée objet et la distinction interface \u002F implémentation — l'outillage qui structurera tout le chapitre.",null,"md",{},[1928,1933,1936],{"slug":932,"kind":1929,"question":1930,"choices":1931,"correct":931,"multi":1932,"explanation":696},"qcm","Dans c = CompteBancaire(100), à quel paramètre du __init__ la valeur 100 est-elle passée ?",[952,955,958],false,{"slug":1187,"kind":1929,"question":1934,"choices":1935,"correct":931,"multi":1932,"explanation":696},"Dans c.deposer(50), à quoi correspond le paramètre self ?",[1204,1207,1210],{"slug":1680,"kind":1929,"question":1937,"choices":1938,"correct":931,"multi":1932,"explanation":696},"Que se passe-t-il à l'exécution de c.retirer(200) sur un compte au solde 50, dans la version encapsulée ?",[1696,1699,1702],{"title":457,"description":1923},"C76MMYvwhVXf-XIF9u9kpRgCqjxbkeIiY7BeOrTpfFQ",{"id":1942,"title":1943,"bo":1944,"body":1945,"description":2364,"eval":1924,"extension":1925,"labo":1924,"meta":2365,"navigation":1932,"path":2366,"quizzes":2367,"readingTime":703,"seo":2368,"stem":2369,"tp":1924,"__hash__":2370},"coursMemo\u002F2.nsi-tale\u002Fta-structures-donnees\u002F1.interface-implementation.memo.md","Objet, classe, interface — l'essentiel",[588,589],{"type":591,"value":1946,"toc":2357},[1947,1951,1956,1960,2033,2037,2121,2125,2153,2157,2354],[594,1948,1950],{"id":1949},"en-une-phrase","En une phrase",[599,1952,1953],{},[603,1954,1955],{},"Une classe regroupe un état (attributs) et un comportement (méthodes) ; son interface est le contrat qu'elle expose, son implémentation est le code qui le réalise — l'utilisateur d'une classe dépend de l'interface, jamais de l'implémentation.",[594,1957,1959],{"id":1958},"à-mémoriser","À mémoriser",[774,1961,1962,1971,1980,1991,1998,2004,2010,2018],{},[777,1963,1964,1967,1968,1970],{},[603,1965,1966],{},"Classe"," = plan, ",[603,1969,659],{}," = instance concrète issue de ce plan.",[777,1972,1973,1976,1977,1979],{},[603,1974,1975],{},"Attribut"," = variable d'objet ; ",[603,1978,968],{}," = fonction d'objet.",[777,1981,1982,1986,1987,1990],{},[603,1983,1984],{},[622,1985,800],{}," = constructeur appelé à la création (",[622,1988,1989],{},"Classe(...)"," → objet).",[777,1992,1993,1997],{},[603,1994,1995],{},[622,1996,812],{}," = objet courant, premier paramètre implicite de toute méthode d'instance.",[777,1999,2000,2003],{},[603,2001,2002],{},"Interface"," = ensemble des méthodes publiques avec leur signature et leur sémantique.",[777,2005,2006,2009],{},[603,2007,2008],{},"Implémentation"," = représentation interne en mémoire + code des méthodes.",[777,2011,2012,2015,2016,793],{},[603,2013,2014],{},"Encapsulation"," = on accède aux données via les méthodes, jamais directement aux attributs internes (préfixe ",[622,2017,1631],{},[777,2019,2020,2021,2024,2025,2028,2029,2032],{},"Chaque objet a ",[603,2022,2023],{},"ses propres"," attributs — ",[622,2026,2027],{},"c1"," et ",[622,2030,2031],{},"c2"," n'interfèrent pas.",[594,2034,2036],{"id":2035},"à-savoir-reconnaître","À savoir reconnaître",[1259,2038,2039,2049],{},[1262,2040,2041],{},[1265,2042,2043,2046],{},[1268,2044,2045],{},"Syntaxe \u002F situation",[1268,2047,2048],{},"Sens",[1275,2050,2051,2061,2070,2080,2090,2099,2108],{},[1265,2052,2053,2058],{},[1280,2054,2055],{},[622,2056,2057],{},"class CompteBancaire:",[1280,2059,2060],{},"définition d'une classe",[1265,2062,2063,2068],{},[1280,2064,2065],{},[622,2066,2067],{},"def __init__(self, ...):",[1280,2069,804],{},[1265,2071,2072,2077],{},[1280,2073,2074],{},[622,2075,2076],{},"self._solde = 0",[1280,2078,2079],{},"initialisation d'un attribut interne",[1265,2081,2082,2087],{},[1280,2083,2084],{},[622,2085,2086],{},"def deposer(self, x):",[1280,2088,2089],{},"définition d'une méthode",[1265,2091,2092,2096],{},[1280,2093,2094],{},[622,2095,941],{},[1280,2097,2098],{},"création d'un objet",[1265,2100,2101,2105],{},[1280,2102,2103],{},[622,2104,1169],{},[1280,2106,2107],{},"appel d'une méthode",[1265,2109,2110,2115],{},[1280,2111,2112,2113],{},"Le code accède à ",[622,2114,1676],{},[1280,2116,2117,2118,1184],{},"viole l'encapsulation — utiliser ",[622,2119,2120],{},"c.consulter()",[594,2122,2124],{"id":2123},"pièges-courants","Pièges courants",[774,2126,2127,2133,2136,2143],{},[777,2128,2129,2130,2132],{},"Oublier ",[622,2131,812],{}," en premier paramètre d'une méthode.",[777,2134,2135],{},"Croire que deux objets d'une même classe partagent leurs attributs.",[777,2137,2138,2139,2142],{},"Accéder à ",[622,2140,2141],{},"obj._attribut"," depuis l'extérieur — brise l'abstraction.",[777,2144,2145,2146,2149,2150,793],{},"Confondre interface (le ",[603,2147,2148],{},"quoi",") et implémentation (le ",[603,2151,2152],{},"comment",[594,2154,2156],{"id":2155},"syntaxe-python","Syntaxe Python",[691,2158,2160],{"className":693,"code":2159,"language":695,"meta":696,"style":696},"class CompteBancaire:\n    def __init__(self, solde_initial=0):\n        self._solde = solde_initial\n\n    def deposer(self, montant):\n        if montant \u003C= 0:\n            raise ValueError(\"montant invalide\")\n        self._solde += montant\n\n    def retirer(self, montant):\n        if montant \u003C= 0 or montant > self._solde:\n            raise ValueError(\"retrait invalide\")\n        self._solde -= montant\n\n    def consulter(self):\n        return self._solde\n\nc = CompteBancaire(100)\nc.deposer(50)\nprint(c.consulter())   # 150\n",[622,2161,2162,2170,2184,2194,2198,2206,2218,2231,2242,2246,2254,2275,2288,2299,2303,2311,2319,2323,2335,2344],{"__ignoreMap":696},[700,2163,2164,2166,2168],{"class":702,"line":703},[700,2165,707],{"class":706},[700,2167,711],{"class":710},[700,2169,715],{"class":714},[700,2171,2172,2174,2176,2178,2180,2182],{"class":702,"line":718},[700,2173,735],{"class":706},[700,2175,739],{"class":738},[700,2177,742],{"class":714},[700,2179,745],{"class":706},[700,2181,748],{"class":738},[700,2183,751],{"class":714},[700,2185,2186,2188,2190,2192],{"class":702,"line":725},[700,2187,757],{"class":738},[700,2189,1440],{"class":714},[700,2191,745],{"class":706},[700,2193,1017],{"class":714},[700,2195,2196],{"class":702,"line":732},[700,2197,729],{"emptyLinePlaceholder":728},[700,2199,2200,2202,2204],{"class":702,"line":754},[700,2201,735],{"class":706},[700,2203,1028],{"class":710},[700,2205,1031],{"class":714},[700,2207,2208,2210,2212,2214,2216],{"class":702,"line":1034},[700,2209,1465],{"class":706},[700,2211,1468],{"class":714},[700,2213,1471],{"class":706},[700,2215,1474],{"class":738},[700,2217,715],{"class":714},[700,2219,2220,2222,2224,2226,2229],{"class":702,"line":1054},[700,2221,1481],{"class":706},[700,2223,1484],{"class":738},[700,2225,1487],{"class":714},[700,2227,2228],{"class":721},"\"montant invalide\"",[700,2230,893],{"class":714},[700,2232,2233,2235,2237,2240],{"class":702,"line":1059},[700,2234,757],{"class":738},[700,2236,1440],{"class":714},[700,2238,2239],{"class":706},"+=",[700,2241,1051],{"class":714},[700,2243,2244],{"class":702,"line":1069},[700,2245,729],{"emptyLinePlaceholder":728},[700,2247,2248,2250,2252],{"class":702,"line":1087},[700,2249,735],{"class":706},[700,2251,1064],{"class":710},[700,2253,1031],{"class":714},[700,2255,2256,2258,2260,2262,2264,2267,2269,2271,2273],{"class":702,"line":1092},[700,2257,1465],{"class":706},[700,2259,1468],{"class":714},[700,2261,1471],{"class":706},[700,2263,1474],{"class":738},[700,2265,2266],{"class":706}," or",[700,2268,1468],{"class":714},[700,2270,1554],{"class":706},[700,2272,1043],{"class":738},[700,2274,1559],{"class":714},[700,2276,2277,2279,2281,2283,2286],{"class":702,"line":1103},[700,2278,1481],{"class":706},[700,2280,1484],{"class":738},[700,2282,1487],{"class":714},[700,2284,2285],{"class":721},"\"retrait invalide\"",[700,2287,893],{"class":714},[700,2289,2290,2292,2294,2297],{"class":702,"line":1547},[700,2291,757],{"class":738},[700,2293,1440],{"class":714},[700,2295,2296],{"class":706},"-=",[700,2298,1051],{"class":714},[700,2300,2301],{"class":702,"line":1562},[700,2302,729],{"emptyLinePlaceholder":728},[700,2304,2305,2307,2309],{"class":702,"line":1576},[700,2306,735],{"class":706},[700,2308,1097],{"class":710},[700,2310,1100],{"class":714},[700,2312,2313,2315,2317],{"class":702,"line":1593},[700,2314,1106],{"class":706},[700,2316,1043],{"class":738},[700,2318,1614],{"class":714},[700,2320,2321],{"class":702,"line":1598},[700,2322,729],{"emptyLinePlaceholder":728},[700,2324,2325,2327,2329,2331,2333],{"class":702,"line":1607},[700,2326,838],{"class":714},[700,2328,745],{"class":706},[700,2330,843],{"class":714},[700,2332,846],{"class":738},[700,2334,893],{"class":714},[700,2336,2338,2340,2342],{"class":702,"line":2337},19,[700,2339,1139],{"class":714},[700,2341,905],{"class":738},[700,2343,893],{"class":714},[700,2345,2347,2349,2351],{"class":702,"line":2346},20,[700,2348,857],{"class":738},[700,2350,1160],{"class":714},[700,2352,2353],{"class":768},"# 150\n",[1911,2355,2356],{},"html pre.shiki code .s8jYJ, html code.shiki .s8jYJ{--shiki-light:#D73A49;--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .snPdu, html code.shiki .snPdu{--shiki-light:#6F42C1;--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sxrX7, html code.shiki .sxrX7{--shiki-light:#24292E;--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sBjJW, html code.shiki .sBjJW{--shiki-light:#005CC5;--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sIIMD, html code.shiki .sIIMD{--shiki-light:#032F62;--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sCsY4, html code.shiki .sCsY4{--shiki-light:#6A737D;--shiki-default:#6A737D;--shiki-dark:#6A737D}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":696,"searchDepth":718,"depth":718,"links":2358},[2359,2360,2361,2362,2363],{"id":1949,"depth":718,"text":1950},{"id":1958,"depth":718,"text":1959},{"id":2035,"depth":718,"text":2036},{"id":2123,"depth":718,"text":2124},{"id":2155,"depth":718,"text":2156},"Mémo de révision sur la POO de base et la distinction interface \u002F implémentation.",{},"\u002Fnsi-tale\u002Fta-structures-donnees\u002Finterface-implementation.memo",[],{"title":1943,"description":2364},"2.nsi-tale\u002Fta-structures-donnees\u002F1.interface-implementation.memo","ODQqZlj8yGCmsCBhG9q-u7xduLUXPyqvwgYLSlZ34dc",{"id":2372,"title":2373,"body":2374,"description":2804,"extension":1925,"meta":2805,"navigation":1932,"path":2806,"seo":2807,"stem":2808,"__hash__":2809},"coursSlides\u002F2.nsi-tale\u002Fta-structures-donnees\u002F1.interface-implementation.slides.md","Objet, classe, interface — diapositives",{"type":591,"value":2375,"toc":2802},[2376,2380,2388,2391,2393,2418,2420,2424,2454,2456,2460,2539,2541,2545,2578,2593,2595,2601,2619,2621,2625,2644,2651,2653,2656,2707,2726,2728,2732,2765,2767,2771,2782,2788,2790,2794,2799],[2377,2378,457],"h1",{"id":2379},"objet-classe-interface",[599,2381,2382,2383,2028,2385,2387],{},"Items ",[673,2384],{"code":589},[673,2386],{"code":588}," — l'outillage du chapitre.",[2389,2390],"hr",{},[2377,2392,597],{"id":596},[774,2394,2395,2400,2412],{},[777,2396,2397,2398,1184],{},"Une donnée + un comportement qui lui est lié → ",[603,2399,659],{},[777,2401,2402,2403,2405,2406,1714,2409,2411],{},"Un dict ",[622,2404,624],{}," ne protège ",[603,2407,2408],{},"rien",[622,2410,628],{}," fonctionne.",[777,2413,1238,2414,2417],{},[603,2415,2416],{},"encapsule"," l'état et impose ses méthodes.",[2389,2419],{},[2377,2421,2423],{"id":2422},"vocabulaire-de-base","Vocabulaire de base",[774,2425,2426,2431,2437,2442,2447],{},[777,2427,2428,2430],{},[603,2429,1966],{}," : plan d'architecte.",[777,2432,2433,2436],{},[603,2434,2435],{},"Objet"," : maison bâtie selon ce plan.",[777,2438,2439,2441],{},[603,2440,1975],{}," : donnée d'un objet.",[777,2443,2444,2446],{},[603,2445,1270],{}," : action qu'un objet sait faire.",[777,2448,2449,2453],{},[603,2450,2451],{},[622,2452,800],{}," : constructeur, appelé à la création.",[2389,2455],{},[2377,2457,2459],{"id":2458},"une-classe-en-python","Une classe en Python",[691,2461,2463],{"className":693,"code":2462,"language":695,"meta":696,"style":696},"class CompteBancaire:\n    def __init__(self, solde_initial=0):\n        self._solde = solde_initial\n\n    def deposer(self, montant):\n        self._solde += montant\n\n    def consulter(self):\n        return self._solde\n",[622,2464,2465,2473,2487,2497,2501,2509,2519,2523,2531],{"__ignoreMap":696},[700,2466,2467,2469,2471],{"class":702,"line":703},[700,2468,707],{"class":706},[700,2470,711],{"class":710},[700,2472,715],{"class":714},[700,2474,2475,2477,2479,2481,2483,2485],{"class":702,"line":718},[700,2476,735],{"class":706},[700,2478,739],{"class":738},[700,2480,742],{"class":714},[700,2482,745],{"class":706},[700,2484,748],{"class":738},[700,2486,751],{"class":714},[700,2488,2489,2491,2493,2495],{"class":702,"line":725},[700,2490,757],{"class":738},[700,2492,1440],{"class":714},[700,2494,745],{"class":706},[700,2496,1017],{"class":714},[700,2498,2499],{"class":702,"line":732},[700,2500,729],{"emptyLinePlaceholder":728},[700,2502,2503,2505,2507],{"class":702,"line":754},[700,2504,735],{"class":706},[700,2506,1028],{"class":710},[700,2508,1031],{"class":714},[700,2510,2511,2513,2515,2517],{"class":702,"line":1034},[700,2512,757],{"class":738},[700,2514,1440],{"class":714},[700,2516,2239],{"class":706},[700,2518,1051],{"class":714},[700,2520,2521],{"class":702,"line":1054},[700,2522,729],{"emptyLinePlaceholder":728},[700,2524,2525,2527,2529],{"class":702,"line":1059},[700,2526,735],{"class":706},[700,2528,1097],{"class":710},[700,2530,1100],{"class":714},[700,2532,2533,2535,2537],{"class":702,"line":1069},[700,2534,1106],{"class":706},[700,2536,1043],{"class":738},[700,2538,1614],{"class":714},[2389,2540],{},[2377,2542,2544],{"id":2543},"instancier-et-utiliser","Instancier et utiliser",[691,2546,2548],{"className":693,"code":2547,"language":695,"meta":696,"style":696},"c = CompteBancaire(100)\nc.deposer(50)\nprint(c.consulter())   # 150\n",[622,2549,2550,2562,2570],{"__ignoreMap":696},[700,2551,2552,2554,2556,2558,2560],{"class":702,"line":703},[700,2553,838],{"class":714},[700,2555,745],{"class":706},[700,2557,843],{"class":714},[700,2559,846],{"class":738},[700,2561,893],{"class":714},[700,2563,2564,2566,2568],{"class":702,"line":718},[700,2565,1139],{"class":714},[700,2567,905],{"class":738},[700,2569,893],{"class":714},[700,2571,2572,2574,2576],{"class":702,"line":725},[700,2573,857],{"class":738},[700,2575,1160],{"class":714},[700,2577,2353],{"class":768},[774,2579,2580,2585],{},[777,2581,2582,2583,1184],{},"L'instanciation appelle automatiquement ",[622,2584,800],{},[777,2586,2020,2587,2590,2591,1184],{},[603,2588,2589],{},"son propre"," ",[622,2592,1627],{},[2389,2594],{},[2377,2596,2598,2599],{"id":2597},"le-rôle-de-self","Le rôle de ",[622,2600,812],{},[774,2602,2603,2606,2612],{},[777,2604,2605],{},"Premier paramètre de toute méthode d'instance.",[777,2607,2608,2609,1184],{},"Désigne ",[603,2610,2611],{},"l'objet courant",[777,2613,2614,2616,2617,1184],{},[622,2615,1169],{}," ≡ ",[622,2618,1173],{},[2389,2620],{},[2377,2622,2624],{"id":2623},"interface-vs-implémentation","Interface vs implémentation",[774,2626,2627,2632,2637],{},[777,2628,2629,2631],{},[603,2630,2002],{}," = méthodes publiques + contrat de comportement.",[777,2633,2634,2636],{},[603,2635,2008],{}," = attributs internes + code des méthodes.",[777,2638,2639,2640,2643],{},"Une interface, ",[603,2641,2642],{},"plusieurs"," implémentations possibles.",[2645,2646],"illustration",{"alt":2647,"kind":2648,"src":2649,"svg":2650},"Objet CompteBancaire : à gauche l'interface publique (deposer, retirer, consulter), à droite la zone cachée (_solde, validations).","schema","\u002Fillustrations\u002F2.nsi-tale\u002Fta-structures-donnees\u002Finterface-cachee.svg","\u003Csvg class=\"illustration-svg\" xmlns=\"http:\u002F\u002Fwww.w3.org\u002F2000\u002Fsvg\" viewBox=\"0 0 480 250\" role=\"img\" aria-label=\"Objet CompteBancaire : à gauche l'interface publique (deposer, retirer, consulter) accessible de l'extérieur, à droite l'implémentation cachée (_solde, validations) inaccessible\">\n  \u003Ctitle>Interface publique vs implémentation cachée\u003C\u002Ftitle>\n  \u003Cstyle>\n    .ic-svg { font-family: Geist, Inter, system-ui, sans-serif; }\n    .ic-frame   { fill: none; stroke: var(--diagram-border); stroke-width: 1.5; }\n    .ic-name    { fill: var(--diagram-text); font-size: 13px; font-weight: 600; }\n    .ic-pub     { fill: var(--diagram-node-bg); stroke: var(--diagram-node-border); stroke-width: 1.5; }\n    .ic-priv    { fill: var(--diagram-surface-alt); stroke: var(--diagram-border); stroke-width: 1.5; stroke-dasharray: 5 4; }\n    .ic-divider { stroke: var(--diagram-border); stroke-width: 1.5; stroke-dasharray: 4 4; }\n    .ic-eyebrow { fill: var(--diagram-line); font-family: 'JetBrains Mono', monospace; font-size: 10px; letter-spacing: 1.2px; }\n    .ic-method  { fill: var(--diagram-text); font-family: 'JetBrains Mono', monospace; font-size: 12px; font-weight: 500; }\n    .ic-hidden  { fill: var(--diagram-line); font-family: 'JetBrains Mono', monospace; font-size: 12px; }\n  \u003C\u002Fstyle>\n\n  \u003Cg class=\"ic-svg\">\n    \u003C!-- cadre de l'objet -->\n    \u003Crect x=\"20\" y=\"38\" width=\"440\" height=\"194\" rx=\"8\" class=\"ic-frame\"\u002F>\n    \u003Ctext x=\"40\" y=\"28\" class=\"ic-eyebrow\">CLASSE\u003C\u002Ftext>\n    \u003Ctext x=\"40\" y=\"60\" class=\"ic-name\">CompteBancaire\u003C\u002Ftext>\n    \u003Cline x1=\"240\" y1=\"74\" x2=\"240\" y2=\"216\" class=\"ic-divider\"\u002F>\n\n    \u003C!-- gauche : interface publique -->\n    \u003Ctext x=\"40\" y=\"96\" class=\"ic-eyebrow\">INTERFACE PUBLIQUE\u003C\u002Ftext>\n    \u003Crect x=\"40\" y=\"106\" width=\"172\" height=\"30\" rx=\"4\" class=\"ic-pub\"\u002F>\n    \u003Ctext x=\"56\" y=\"125\" class=\"ic-method\">deposer()\u003C\u002Ftext>\n    \u003Crect x=\"40\" y=\"142\" width=\"172\" height=\"30\" rx=\"4\" class=\"ic-pub\"\u002F>\n    \u003Ctext x=\"56\" y=\"161\" class=\"ic-method\">retirer()\u003C\u002Ftext>\n    \u003Crect x=\"40\" y=\"178\" width=\"172\" height=\"30\" rx=\"4\" class=\"ic-pub\"\u002F>\n    \u003Ctext x=\"56\" y=\"197\" class=\"ic-method\">consulter()\u003C\u002Ftext>\n\n    \u003C!-- droite : zone cachée -->\n    \u003Ctext x=\"268\" y=\"96\" class=\"ic-eyebrow\">CACHÉ (INTERNE)\u003C\u002Ftext>\n    \u003Crect x=\"268\" y=\"106\" width=\"172\" height=\"30\" rx=\"4\" class=\"ic-priv\"\u002F>\n    \u003Ctext x=\"284\" y=\"125\" class=\"ic-hidden\">_solde\u003C\u002Ftext>\n    \u003Crect x=\"268\" y=\"142\" width=\"172\" height=\"66\" rx=\"4\" class=\"ic-priv\"\u002F>\n    \u003Ctext x=\"284\" y=\"161\" class=\"ic-hidden\">validations\u003C\u002Ftext>\n    \u003Ctext x=\"284\" y=\"179\" class=\"ic-hidden\">(solde &gt;= 0…)\u003C\u002Ftext>\n  \u003C\u002Fg>\n\u003C\u002Fsvg>\n",[2389,2652],{},[2377,2654,2655],{"id":1352},"Encapsulation = protéger les invariants",[691,2657,2659],{"className":693,"code":2658,"language":695,"meta":696,"style":696},"def retirer(self, montant):\n    if montant > self._solde:\n        raise ValueError(\"solde insuffisant\")\n    self._solde -= montant\n",[622,2660,2661,2670,2683,2696],{"__ignoreMap":696},[700,2662,2663,2666,2668],{"class":702,"line":703},[700,2664,2665],{"class":706},"def",[700,2667,1064],{"class":710},[700,2669,1031],{"class":714},[700,2671,2672,2675,2677,2679,2681],{"class":702,"line":718},[700,2673,2674],{"class":706},"    if",[700,2676,1468],{"class":714},[700,2678,1554],{"class":706},[700,2680,1043],{"class":738},[700,2682,1559],{"class":714},[700,2684,2685,2688,2690,2692,2694],{"class":702,"line":725},[700,2686,2687],{"class":706},"        raise",[700,2689,1484],{"class":738},[700,2691,1487],{"class":714},[700,2693,1571],{"class":721},[700,2695,893],{"class":714},[700,2697,2698,2701,2703,2705],{"class":702,"line":732},[700,2699,2700],{"class":738},"    self",[700,2702,1440],{"class":714},[700,2704,2296],{"class":706},[700,2706,1051],{"class":714},[774,2708,2709,2714],{},[777,2710,2711,2712,1184],{},"L'invariant « solde >= 0 » est garanti par la ",[603,2713,968],{},[777,2715,2716,2717,2719,2720,2723,2724,793],{},"L'attribut ",[622,2718,1627],{}," est ",[603,2721,2722],{},"interne"," par convention (préfixe ",[622,2725,1631],{},[2389,2727],{},[2377,2729,2731],{"id":2730},"conventions","Conventions",[774,2733,2734,2739,2745,2755],{},[777,2735,2736,2738],{},[622,2737,788],{}," pour les classes.",[777,2740,2741,2744],{},[622,2742,2743],{},"_attribut"," = privé par convention.",[777,2746,2747,2750,2751,1719,2753,793],{},[622,2748,2749],{},"__methode__"," = méthode spéciale (",[622,2752,800],{},[622,2754,1754],{},[777,2756,2757,2758,2761,2762,1184],{},"Une méthode est un ",[603,2759,2760],{},"verbe",", un attribut est un ",[603,2763,2764],{},"nom",[2389,2766],{},[2377,2768,2770],{"id":2769},"ce-quon-ne-fait-pas-au-lycée","Ce qu'on ne fait PAS au lycée",[774,2772,2773,2776,2779],{},[777,2774,2775],{},"Héritage entre classes.",[777,2777,2778],{},"Polymorphisme.",[777,2780,2781],{},"Attributs de classe vs d'instance.",[599,2783,2784,2785,1184],{},"Au programme : ",[603,2786,2787],{},"définir, instancier, encapsuler",[2389,2789],{},[2377,2791,2793],{"id":2792},"à-retenir","À retenir",[599,2795,2796],{},[603,2797,2798],{},"Une classe encapsule un état et un comportement. Un programme client dépend de l'interface, jamais des attributs internes.",[1911,2800,2801],{},"html pre.shiki code .s8jYJ, html code.shiki .s8jYJ{--shiki-light:#D73A49;--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .snPdu, html code.shiki .snPdu{--shiki-light:#6F42C1;--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sxrX7, html code.shiki .sxrX7{--shiki-light:#24292E;--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sBjJW, html code.shiki .sBjJW{--shiki-light:#005CC5;--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sCsY4, html code.shiki .sCsY4{--shiki-light:#6A737D;--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sIIMD, html code.shiki .sIIMD{--shiki-light:#032F62;--shiki-default:#032F62;--shiki-dark:#9ECBFF}",{"title":696,"searchDepth":718,"depth":718,"links":2803},[],"Deck pour la séance d'introduction à la POO et à la séparation interface \u002F implémentation.",{},"\u002Fnsi-tale\u002Fta-structures-donnees\u002Finterface-implementation.slides",{"title":2373,"description":2804},"2.nsi-tale\u002Fta-structures-donnees\u002F1.interface-implementation.slides","FfGC3Z-V23cNG4ULZLTbRBEAcljJbK_d0iHxgMJqK3g",{"id":1942,"title":1943,"bo":2811,"body":2812,"description":2364,"eval":1924,"extension":1925,"labo":1924,"meta":3163,"navigation":1932,"path":2366,"quizzes":3164,"readingTime":703,"seo":3165,"stem":2369,"tp":1924,"__hash__":2370},[588,589],{"type":591,"value":2813,"toc":3156},[2814,2816,2820,2822,2872,2874,2944,2946,2964,2966,3154],[594,2815,1950],{"id":1949},[599,2817,2818],{},[603,2819,1955],{},[594,2821,1959],{"id":1958},[774,2823,2824,2830,2836,2844,2850,2854,2858,2864],{},[777,2825,2826,1967,2828,1970],{},[603,2827,1966],{},[603,2829,659],{},[777,2831,2832,1976,2834,1979],{},[603,2833,1975],{},[603,2835,968],{},[777,2837,2838,1986,2842,1990],{},[603,2839,2840],{},[622,2841,800],{},[622,2843,1989],{},[777,2845,2846,1997],{},[603,2847,2848],{},[622,2849,812],{},[777,2851,2852,2003],{},[603,2853,2002],{},[777,2855,2856,2009],{},[603,2857,2008],{},[777,2859,2860,2015,2862,793],{},[603,2861,2014],{},[622,2863,1631],{},[777,2865,2020,2866,2024,2868,2028,2870,2032],{},[603,2867,2023],{},[622,2869,2027],{},[622,2871,2031],{},[594,2873,2036],{"id":2035},[1259,2875,2876,2884],{},[1262,2877,2878],{},[1265,2879,2880,2882],{},[1268,2881,2045],{},[1268,2883,2048],{},[1275,2885,2886,2894,2902,2910,2918,2926,2934],{},[1265,2887,2888,2892],{},[1280,2889,2890],{},[622,2891,2057],{},[1280,2893,2060],{},[1265,2895,2896,2900],{},[1280,2897,2898],{},[622,2899,2067],{},[1280,2901,804],{},[1265,2903,2904,2908],{},[1280,2905,2906],{},[622,2907,2076],{},[1280,2909,2079],{},[1265,2911,2912,2916],{},[1280,2913,2914],{},[622,2915,2086],{},[1280,2917,2089],{},[1265,2919,2920,2924],{},[1280,2921,2922],{},[622,2923,941],{},[1280,2925,2098],{},[1265,2927,2928,2932],{},[1280,2929,2930],{},[622,2931,1169],{},[1280,2933,2107],{},[1265,2935,2936,2940],{},[1280,2937,2112,2938],{},[622,2939,1676],{},[1280,2941,2117,2942,1184],{},[622,2943,2120],{},[594,2945,2124],{"id":2123},[774,2947,2948,2952,2954,2958],{},[777,2949,2129,2950,2132],{},[622,2951,812],{},[777,2953,2135],{},[777,2955,2138,2956,2142],{},[622,2957,2141],{},[777,2959,2145,2960,2149,2962,793],{},[603,2961,2148],{},[603,2963,2152],{},[594,2965,2156],{"id":2155},[691,2967,2968],{"className":693,"code":2159,"language":695,"meta":696,"style":696},[622,2969,2970,2978,2992,3002,3006,3014,3026,3038,3048,3052,3060,3080,3092,3102,3106,3114,3122,3126,3138,3146],{"__ignoreMap":696},[700,2971,2972,2974,2976],{"class":702,"line":703},[700,2973,707],{"class":706},[700,2975,711],{"class":710},[700,2977,715],{"class":714},[700,2979,2980,2982,2984,2986,2988,2990],{"class":702,"line":718},[700,2981,735],{"class":706},[700,2983,739],{"class":738},[700,2985,742],{"class":714},[700,2987,745],{"class":706},[700,2989,748],{"class":738},[700,2991,751],{"class":714},[700,2993,2994,2996,2998,3000],{"class":702,"line":725},[700,2995,757],{"class":738},[700,2997,1440],{"class":714},[700,2999,745],{"class":706},[700,3001,1017],{"class":714},[700,3003,3004],{"class":702,"line":732},[700,3005,729],{"emptyLinePlaceholder":728},[700,3007,3008,3010,3012],{"class":702,"line":754},[700,3009,735],{"class":706},[700,3011,1028],{"class":710},[700,3013,1031],{"class":714},[700,3015,3016,3018,3020,3022,3024],{"class":702,"line":1034},[700,3017,1465],{"class":706},[700,3019,1468],{"class":714},[700,3021,1471],{"class":706},[700,3023,1474],{"class":738},[700,3025,715],{"class":714},[700,3027,3028,3030,3032,3034,3036],{"class":702,"line":1054},[700,3029,1481],{"class":706},[700,3031,1484],{"class":738},[700,3033,1487],{"class":714},[700,3035,2228],{"class":721},[700,3037,893],{"class":714},[700,3039,3040,3042,3044,3046],{"class":702,"line":1059},[700,3041,757],{"class":738},[700,3043,1440],{"class":714},[700,3045,2239],{"class":706},[700,3047,1051],{"class":714},[700,3049,3050],{"class":702,"line":1069},[700,3051,729],{"emptyLinePlaceholder":728},[700,3053,3054,3056,3058],{"class":702,"line":1087},[700,3055,735],{"class":706},[700,3057,1064],{"class":710},[700,3059,1031],{"class":714},[700,3061,3062,3064,3066,3068,3070,3072,3074,3076,3078],{"class":702,"line":1092},[700,3063,1465],{"class":706},[700,3065,1468],{"class":714},[700,3067,1471],{"class":706},[700,3069,1474],{"class":738},[700,3071,2266],{"class":706},[700,3073,1468],{"class":714},[700,3075,1554],{"class":706},[700,3077,1043],{"class":738},[700,3079,1559],{"class":714},[700,3081,3082,3084,3086,3088,3090],{"class":702,"line":1103},[700,3083,1481],{"class":706},[700,3085,1484],{"class":738},[700,3087,1487],{"class":714},[700,3089,2285],{"class":721},[700,3091,893],{"class":714},[700,3093,3094,3096,3098,3100],{"class":702,"line":1547},[700,3095,757],{"class":738},[700,3097,1440],{"class":714},[700,3099,2296],{"class":706},[700,3101,1051],{"class":714},[700,3103,3104],{"class":702,"line":1562},[700,3105,729],{"emptyLinePlaceholder":728},[700,3107,3108,3110,3112],{"class":702,"line":1576},[700,3109,735],{"class":706},[700,3111,1097],{"class":710},[700,3113,1100],{"class":714},[700,3115,3116,3118,3120],{"class":702,"line":1593},[700,3117,1106],{"class":706},[700,3119,1043],{"class":738},[700,3121,1614],{"class":714},[700,3123,3124],{"class":702,"line":1598},[700,3125,729],{"emptyLinePlaceholder":728},[700,3127,3128,3130,3132,3134,3136],{"class":702,"line":1607},[700,3129,838],{"class":714},[700,3131,745],{"class":706},[700,3133,843],{"class":714},[700,3135,846],{"class":738},[700,3137,893],{"class":714},[700,3139,3140,3142,3144],{"class":702,"line":2337},[700,3141,1139],{"class":714},[700,3143,905],{"class":738},[700,3145,893],{"class":714},[700,3147,3148,3150,3152],{"class":702,"line":2346},[700,3149,857],{"class":738},[700,3151,1160],{"class":714},[700,3153,2353],{"class":768},[1911,3155,2356],{},{"title":696,"searchDepth":718,"depth":718,"links":3157},[3158,3159,3160,3161,3162],{"id":1949,"depth":718,"text":1950},{"id":1958,"depth":718,"text":1959},{"id":2035,"depth":718,"text":2036},{"id":2123,"depth":718,"text":2124},{"id":2155,"depth":718,"text":2156},{},[],{"title":1943,"description":2364},{"id":2372,"title":2373,"body":3167,"description":2804,"extension":1925,"meta":3517,"navigation":1932,"path":2806,"seo":3518,"stem":2808,"__hash__":2809},{"type":591,"value":3168,"toc":3515},[3169,3171,3177,3179,3181,3199,3201,3203,3227,3229,3231,3309,3311,3313,3345,3357,3359,3363,3377,3379,3381,3395,3397,3399,3401,3447,3461,3463,3465,3489,3491,3493,3501,3505,3507,3509,3513],[2377,3170,457],{"id":2379},[599,3172,2382,3173,2028,3175,2387],{},[673,3174],{"code":589},[673,3176],{"code":588},[2389,3178],{},[2377,3180,597],{"id":596},[774,3182,3183,3187,3195],{},[777,3184,2397,3185,1184],{},[603,3186,659],{},[777,3188,2402,3189,2405,3191,1714,3193,2411],{},[622,3190,624],{},[603,3192,2408],{},[622,3194,628],{},[777,3196,1238,3197,2417],{},[603,3198,2416],{},[2389,3200],{},[2377,3202,2423],{"id":2422},[774,3204,3205,3209,3213,3217,3221],{},[777,3206,3207,2430],{},[603,3208,1966],{},[777,3210,3211,2436],{},[603,3212,2435],{},[777,3214,3215,2441],{},[603,3216,1975],{},[777,3218,3219,2446],{},[603,3220,1270],{},[777,3222,3223,2453],{},[603,3224,3225],{},[622,3226,800],{},[2389,3228],{},[2377,3230,2459],{"id":2458},[691,3232,3233],{"className":693,"code":2462,"language":695,"meta":696,"style":696},[622,3234,3235,3243,3257,3267,3271,3279,3289,3293,3301],{"__ignoreMap":696},[700,3236,3237,3239,3241],{"class":702,"line":703},[700,3238,707],{"class":706},[700,3240,711],{"class":710},[700,3242,715],{"class":714},[700,3244,3245,3247,3249,3251,3253,3255],{"class":702,"line":718},[700,3246,735],{"class":706},[700,3248,739],{"class":738},[700,3250,742],{"class":714},[700,3252,745],{"class":706},[700,3254,748],{"class":738},[700,3256,751],{"class":714},[700,3258,3259,3261,3263,3265],{"class":702,"line":725},[700,3260,757],{"class":738},[700,3262,1440],{"class":714},[700,3264,745],{"class":706},[700,3266,1017],{"class":714},[700,3268,3269],{"class":702,"line":732},[700,3270,729],{"emptyLinePlaceholder":728},[700,3272,3273,3275,3277],{"class":702,"line":754},[700,3274,735],{"class":706},[700,3276,1028],{"class":710},[700,3278,1031],{"class":714},[700,3280,3281,3283,3285,3287],{"class":702,"line":1034},[700,3282,757],{"class":738},[700,3284,1440],{"class":714},[700,3286,2239],{"class":706},[700,3288,1051],{"class":714},[700,3290,3291],{"class":702,"line":1054},[700,3292,729],{"emptyLinePlaceholder":728},[700,3294,3295,3297,3299],{"class":702,"line":1059},[700,3296,735],{"class":706},[700,3298,1097],{"class":710},[700,3300,1100],{"class":714},[700,3302,3303,3305,3307],{"class":702,"line":1069},[700,3304,1106],{"class":706},[700,3306,1043],{"class":738},[700,3308,1614],{"class":714},[2389,3310],{},[2377,3312,2544],{"id":2543},[691,3314,3315],{"className":693,"code":2547,"language":695,"meta":696,"style":696},[622,3316,3317,3329,3337],{"__ignoreMap":696},[700,3318,3319,3321,3323,3325,3327],{"class":702,"line":703},[700,3320,838],{"class":714},[700,3322,745],{"class":706},[700,3324,843],{"class":714},[700,3326,846],{"class":738},[700,3328,893],{"class":714},[700,3330,3331,3333,3335],{"class":702,"line":718},[700,3332,1139],{"class":714},[700,3334,905],{"class":738},[700,3336,893],{"class":714},[700,3338,3339,3341,3343],{"class":702,"line":725},[700,3340,857],{"class":738},[700,3342,1160],{"class":714},[700,3344,2353],{"class":768},[774,3346,3347,3351],{},[777,3348,2582,3349,1184],{},[622,3350,800],{},[777,3352,2020,3353,2590,3355,1184],{},[603,3354,2589],{},[622,3356,1627],{},[2389,3358],{},[2377,3360,2598,3361],{"id":2597},[622,3362,812],{},[774,3364,3365,3367,3371],{},[777,3366,2605],{},[777,3368,2608,3369,1184],{},[603,3370,2611],{},[777,3372,3373,2616,3375,1184],{},[622,3374,1169],{},[622,3376,1173],{},[2389,3378],{},[2377,3380,2624],{"id":2623},[774,3382,3383,3387,3391],{},[777,3384,3385,2631],{},[603,3386,2002],{},[777,3388,3389,2636],{},[603,3390,2008],{},[777,3392,2639,3393,2643],{},[603,3394,2642],{},[2645,3396],{"alt":2647,"kind":2648,"src":2649,"svg":2650},[2389,3398],{},[2377,3400,2655],{"id":1352},[691,3402,3403],{"className":693,"code":2658,"language":695,"meta":696,"style":696},[622,3404,3405,3413,3425,3437],{"__ignoreMap":696},[700,3406,3407,3409,3411],{"class":702,"line":703},[700,3408,2665],{"class":706},[700,3410,1064],{"class":710},[700,3412,1031],{"class":714},[700,3414,3415,3417,3419,3421,3423],{"class":702,"line":718},[700,3416,2674],{"class":706},[700,3418,1468],{"class":714},[700,3420,1554],{"class":706},[700,3422,1043],{"class":738},[700,3424,1559],{"class":714},[700,3426,3427,3429,3431,3433,3435],{"class":702,"line":725},[700,3428,2687],{"class":706},[700,3430,1484],{"class":738},[700,3432,1487],{"class":714},[700,3434,1571],{"class":721},[700,3436,893],{"class":714},[700,3438,3439,3441,3443,3445],{"class":702,"line":732},[700,3440,2700],{"class":738},[700,3442,1440],{"class":714},[700,3444,2296],{"class":706},[700,3446,1051],{"class":714},[774,3448,3449,3453],{},[777,3450,2711,3451,1184],{},[603,3452,968],{},[777,3454,2716,3455,2719,3457,2723,3459,793],{},[622,3456,1627],{},[603,3458,2722],{},[622,3460,1631],{},[2389,3462],{},[2377,3464,2731],{"id":2730},[774,3466,3467,3471,3475,3483],{},[777,3468,3469,2738],{},[622,3470,788],{},[777,3472,3473,2744],{},[622,3474,2743],{},[777,3476,3477,2750,3479,1719,3481,793],{},[622,3478,2749],{},[622,3480,800],{},[622,3482,1754],{},[777,3484,2757,3485,2761,3487,1184],{},[603,3486,2760],{},[603,3488,2764],{},[2389,3490],{},[2377,3492,2770],{"id":2769},[774,3494,3495,3497,3499],{},[777,3496,2775],{},[777,3498,2778],{},[777,3500,2781],{},[599,3502,2784,3503,1184],{},[603,3504,2787],{},[2389,3506],{},[2377,3508,2793],{"id":2792},[599,3510,3511],{},[603,3512,2798],{},[1911,3514,2801],{},{"title":696,"searchDepth":718,"depth":718,"links":3516},[],{},{"title":2373,"description":2804},1788035584216]