[{"data":1,"prerenderedAt":532},["ShallowReactive",2],{"navigation-en":3,"mooc-advanced-ood-en":222},[4,96,126,130,196,200,204,214,218],{"title":5,"path":6,"stem":7,"children":8},"Blog","/blog","blog",[9,12,16,20,24,28,32,36,40,44,48,52,56,60,64,68,72,76,80,84,88,92],{"title":10,"path":6,"stem":11},"News","blog/index",{"title":13,"path":14,"stem":15},"100 000+ people registered to Inria's MOOCs on FUN","/blog/100000-mooc-users","blog/100000-mooc-users",{"title":17,"path":18,"stem":19},"AI in education : A Mooc and learning resources for teachers","/blog/ai4t","blog/ai4t",{"title":21,"path":22,"stem":23},"MOOC \"Binaural hearing for robots\"","/blog/binaural","blog/binaural",{"title":25,"path":26,"stem":27},"MOOC \"Bioinformatics: genomes and algorithms\"","/blog/bioinfo","blog/bioinfo",{"title":29,"path":30,"stem":31},"MOOC \"Code-based Cryptography\"","/blog/crypto","blog/crypto",{"title":33,"path":34,"stem":35},"[Infographic] MOOC Code-Based Cryptography 2","/blog/crypto-2-infographic","blog/crypto-2-infographic",{"title":37,"path":38,"stem":39},"MOOC Environmental impacts of digital technologies","/blog/impact-num","blog/impact-num",{"title":41,"path":42,"stem":43},"Mooc \"Internet Measurements: a Hands-on Introduction\"","/blog/int-measure","blog/int-measure",{"title":45,"path":46,"stem":47},"[Infographic] MOOC Internet Measurements","/blog/int-measure-infographie","blog/int-measure-infographie",{"title":49,"path":50,"stem":51},"MOOC Introduction to a Web of Linked Data","/blog/introduction-to-a-web-of-linked-data","blog/introduction-to-a-web-of-linked-data",{"title":53,"path":54,"stem":55},"MOOC \"Internet of Things with Microcontrollers: a hands-on course\"","/blog/iot","blog/iot",{"title":57,"path":58,"stem":59},"MOOC \"Mobile Robots and Autonomous Vehicles\"","/blog/mob-robots","blog/mob-robots",{"title":61,"path":62,"stem":63},"[Infographic] MOOC Mobile Robots 2","/blog/mob-robots-2-infographic","blog/mob-robots-2-infographic",{"title":65,"path":66,"stem":67},"MOOC \"Introduction to functional programming in OCaml\"","/blog/ocaml","blog/ocaml",{"title":69,"path":70,"stem":71},"MOOC «Live Object Programming in Pharo» : new edition based on Pharo v8.0 !","/blog/pharo-8","blog/pharo-8",{"title":73,"path":74,"stem":75},"[Infographic] Pharo MOOC through figures","/blog/pharo-infographie","blog/pharo-infographie",{"title":77,"path":78,"stem":79},"Mooc Reproducible research: new self-paced session from March 20, 2020!","/blog/rr","blog/rr",{"title":81,"path":82,"stem":83},"Reproducible Research II","/blog/rr2","blog/rr2",{"title":85,"path":86,"stem":87},"Mooc Smart cities: Take up the challenges of cities in the digital era.","/blog/smart-cities","blog/smart-cities",{"title":89,"path":90,"stem":91},"MOOC Teaching Digital Sciences and Technology","/blog/snt","blog/snt",{"title":93,"path":94,"stem":95},"ePoc release: Fundamentals of Manipulation Robotics","/blog/sortie-epocrobotique","blog/sortie-ePocRobotique",{"title":97,"path":98,"stem":99,"children":100},"All our ePocs","/epocs","epocs/1.index",[101,102,106,110,114,118,122],{"title":97,"path":98,"stem":99},{"title":103,"path":104,"stem":105},"Internet des objets et vie privée","/epocs/internet-des-objets-et-vie-privee","epocs/Internet-des-objets-et-vie-privee",{"title":107,"path":108,"stem":109},"Produire mon 1er ePoc","/epocs/produire-mon-premier-epoc","epocs/Produire-mon-premier-epoc",{"title":111,"path":112,"stem":113},"Smartphone et vie privée","/epocs/smartphone-et-vie-privee","epocs/Smartphone-et-vie-privee",{"title":115,"path":116,"stem":117},"Le smartphone et la planète","/epocs/smartphone-planete","epocs/Smartphone-planete",{"title":119,"path":120,"stem":121},"B.A.-BA des data","/epocs/babadata","epocs/babadata",{"title":123,"path":124,"stem":125},"C'est quoi l'IA ?","/epocs/c-est-quoi-ia","epocs/c-est-quoi-ia",{"title":127,"path":128,"stem":129},"","/","index",{"title":131,"path":132,"stem":133,"children":134},"All of our MOOCs","/moocs","moocs/1.index",[135,136,140,144,148,152,156,160,164,168,172,176,180,184,188,192],{"title":131,"path":132,"stem":133},{"title":137,"path":138,"stem":139},"Advanced object oriented design and development with Pharo","/moocs/advanced-ood","moocs/advanced-ood",{"title":141,"path":142,"stem":143},"Binaural hearing for robots","/moocs/binauralhearing","moocs/binauralhearing",{"title":145,"path":146,"stem":147},"Bioinformatics, Genomes and Algorithms","/moocs/bioinfo-en","moocs/bioinfo-en",{"title":149,"path":150,"stem":151},"Code-based Cryptography","/moocs/cryptography","moocs/cryptography",{"title":153,"path":154,"stem":155},"Environmental impacts of digital technologies","/moocs/impactnum","moocs/impactnum",{"title":157,"path":158,"stem":159},"Internet Measurements - A Hands-on Introduction","/moocs/internetmesure","moocs/internetmesure",{"title":161,"path":162,"stem":163},"Internet of Things with Microcontrollers: a hands-on course","/moocs/iotmicrocontroleur","moocs/iotmicrocontroleur",{"title":165,"path":166,"stem":167},"Mobile Robots and Autonomous Vehicles","/moocs/mob-robots","moocs/mob-robots",{"title":169,"path":170,"stem":171},"Live Object Programming in Pharo","/moocs/pharo-programming","moocs/pharo-programming",{"title":173,"path":174,"stem":175},"Machine learning in Python with scikit-learn","/moocs/pythonsckitlearn","moocs/pythonsckitlearn",{"title":177,"path":178,"stem":179},"Reproducible research - methodological principles for transparent science","/moocs/recherchereproductible","moocs/recherchereproductible",{"title":181,"path":182,"stem":183},"Reproducible Research II - Practices and tools for managing computations and data","/moocs/rr2","moocs/rr2",{"title":185,"path":186,"stem":187},"Technological challenges of participatory smart cities","/moocs/smartcitychallenge","moocs/smartcitychallenge",{"title":189,"path":190,"stem":191},"Nom du MOOC","/moocs/template","moocs/template",{"title":193,"path":194,"stem":195},"Introduction to a Web of Linked Data","/moocs/weblinkdata","moocs/weblinkdata",{"title":197,"path":198,"stem":199},"Privacy Policy","/privacy","privacy",{"title":201,"path":202,"stem":203},"All our productions","/productions","productions",{"title":205,"path":206,"stem":207,"children":208},"Our serious games","/serious-games","serious-games/1.index",[209,210],{"title":205,"path":206,"stem":207},{"title":211,"path":212,"stem":213},"Phone Impact","/serious-games/phone-impact","serious-games/phone-impact",{"title":215,"path":216,"stem":217},"Inria Learning Lab","/team","team",{"title":219,"path":220,"stem":221},"Legal Notice","/terms","terms",{"id":223,"title":137,"assesment":224,"body":225,"date":515,"description":516,"draft":517,"extension":518,"image":519,"investment":520,"lang":521,"licence":523,"meta":524,"navigation":525,"path":138,"seo":526,"status":527,"stem":139,"trailer":528,"type":529,"url":530,"__hash__":531},"moocs_en/moocs/advanced-ood.md","Open Badge",{"type":226,"value":227,"toc":505},"minimark",[228,233,237,271,274,278,281,316,320,331,334,337,341,403,407,410,436,439,457,461,492,496],[229,230,232],"h2",{"id":231},"course-description","Course description",[234,235,236],"p",{},"This MOOC is about Advanced Object-Oriented Design. You will get to know and understand the key mechanisms and the essence of OOD. Either you are a beginner or an expert in object-oriented programming, this MOOC immerses you in advanced object-oriented design. We are sure that you will not develop the same way after following this unique lecture. It is built on more than 60 years of expert teaching object-oriented design. This MOOC invites you to a journey around 10 modules (with over 60 videos) covering the following topics:",[238,239,240,244,247,250,253,256,259,262,265,268],"ul",{},[241,242,243],"li",{},"Understanding messages",[241,245,246],{},"Test-Driven Design",[241,248,249],{},"Hooks: support for evolution",[241,251,252],{},"Objects: state and behavior",[241,254,255],{},"Elementary design patterns",[241,257,258],{},"Double dispatch",[241,260,261],{},"Object creation",[241,263,264],{},"Sharing objects",[241,266,267],{},"Inversion of control",[241,269,270],{},"About types",[234,272,273],{},"The MOOC proposes several design exercises ranging from little interpreters to games and quizzes.",[229,275,277],{"id":276},"course-objectives","Course objectives",[234,279,280],{},"At the end of this course, you will know:",[238,282,283,286,289,292,295,298,301,304,307,310,313],{},[241,284,285],{},"elementary concepts around self, super, and the power of dispatching to dedicated objects.",[241,287,288],{},"how to test applications and how to take advantage of test driven design.",[241,290,291],{},"how to design abstractions that are extensible using hooks.",[241,293,294],{},"to make the difference between data, objects and classes, based on basic principles.",[241,296,297],{},"important design patterns such as composite and state.",[241,299,300],{},"how to compare usage versus inheritance a way to understand the forces in presence in a design.",[241,302,303],{},"the double dispatch mechanism and the visitor design pattern which is based on it.",[241,305,306],{},"patterns to create and initialize objects.",[241,308,309],{},"different techniques and design patterns to share objects.",[241,311,312],{},"the law of demeter and different techniques to achieve Inversion of control.",[241,314,315],{},"typing and its relation with object-oriented design.",[229,317,319],{"id":318},"who-is-this-course-for","Who is this course for?",[238,321,322,325,328],{},[241,323,324],{},"Students, beginners and experienced developers",[241,326,327],{},"IT teachers",[241,329,330],{},"Anyone interested in agile methods",[234,332,333],{},"Having a first knowledge on object-oriented programming is better to fully understand the advanced topics of this MOOC.",[234,335,336],{},"To understand the Pharo syntax, start by taking Module 0: Warm up. If you want to learn more, you can follow the MOOC \"Live Object Programming in Pharo\" in speed mode.",[229,338,340],{"id":339},"course-outline","Course outline",[238,342,343,350,355,360,365,370,375,381,386,391,397],{},[241,344,345,346],{},"Module 0: ",[347,348,349],"strong",{},"Little Warm up with Pharo",[241,351,352,353],{},"Module 1: ",[347,354,243],{},[241,356,357,358],{},"Module 2: ",[347,359,246],{},[241,361,362,363],{},"Module 3: ",[347,364,249],{},[241,366,367,368],{},"Module 4: ",[347,369,252],{},[241,371,372,373],{},"Module 5: ",[347,374,255],{},[241,376,377,378],{},"Module 6: ",[347,379,380],{},"About double dispatch",[241,382,383,384],{},"Module 7: ",[347,385,261],{},[241,387,388,389],{},"Module 8: ",[347,390,264],{},[241,392,393,394],{},"Module 9: ",[347,395,396],{},"About Inversion of control / Registration",[241,398,399,400],{},"Module 10: ",[347,401,402],{},"About Types",[229,404,406],{"id":405},"educational-team","Educational team",[234,408,409],{},"Authors:",[238,411,412,418,424,430],{},[241,413,414,417],{},[347,415,416],{},"Stéphane Ducasse",", Research director, University of Lille, Inria",[241,419,420,423],{},[347,421,422],{},"Luc Fabresse",", Professor, University of Lille, IMT Nord Europe, Inria",[241,425,426,429],{},[347,427,428],{},"Guillermo Polito",", permanent researcher, University of Lille, Inria",[241,431,432,435],{},[347,433,434],{},"Pablo Tesone",", engineer, University of Lille, Inria",[234,437,438],{},"Pedagogical support:",[238,440,441,447,452],{},[241,442,443,446],{},[347,444,445],{},"Sherazade Djeballah",", Learning Designer, Inria Learning Lab",[241,448,449,446],{},[347,450,451],{},"Sabah Khalfa",[241,453,454,446],{},[347,455,456],{},"Marie Collin",[229,458,460],{"id":459},"additional-resources","Additional resources",[238,462,463,472,479,485],{},[241,464,465],{},[466,467,471],"a",{"href":468,"rel":469},"https://www.youtube.com/playlist?list=PL2okA_2qDJ-k9qaQomNEoAo_sA2LsE2Y3",[470],"nofollow","YouTube playlist of Advanced Design MOOC videos",[241,473,474],{},[466,475,478],{"href":476,"rel":477},"https://advanced-design-mooc.pharo.org",[470],"Advanced Design MOOC videos & slides",[241,480,481],{},[466,482,484],{"href":483},"hhttps://github.com/pharo-mooc","Advanced Design MOOC on github",[241,486,487],{},[466,488,491],{"href":489,"rel":490},"https://discord.gg/QewZMZa",[470],"Pharo Discord Channel",[229,493,495],{"id":494},"partner","Partner",[238,497,498],{},[241,499,500],{},[466,501,504],{"href":502,"rel":503},"https://imt-nord-europe.fr",[470],"IMT Nord Europe",{"title":127,"searchDepth":506,"depth":506,"links":507},2,[508,509,510,511,512,513,514],{"id":231,"depth":506,"text":232},{"id":276,"depth":506,"text":277},{"id":318,"depth":506,"text":319},{"id":339,"depth":506,"text":340},{"id":405,"depth":506,"text":406},{"id":459,"depth":506,"text":460},{"id":494,"depth":506,"text":495},"2024-06-17","Advanced Object-Oriented Design from a programming perspective. In particular it stresses Test-Driven Design (TDD).",false,"md","/images/mooc/pcoopharo.png","40 hours",[522],"en","CC BY NC",{},true,{"title":137,"description":516},"open","https://www.youtube.com/embed/9HMYS-mzDKQ?si=Xxc1e0fMi71Vh5CB",null,"https://www.fun-mooc.fr/fr/cours/advanced-object-oriented-design-and-development-with-pharo/","iYQQzvz8JQxxHn_lVHiXcYvDDLIzn2c4OajrWxby5mg",1775223070748]