The Mooc: Advanced Object-Oriented Design and Development with Pharo
Testimonies
What the participants are saying :)
I love this course so much. I remember how difficult it was to understand OOD concepts in the early 2000s. There were a lot of aphorisms flowing around, but when I asked the people stating them to explain it, no one really did. It is so satisfying to see lecture after lecture explaining those object-oriented principles while refactoring examples. This is the course I wanted 24 years ago. So happy that it exists today. bambooer
Hi, thank you for the excellent MOOC. I just completed Module 1. The quizzes really help.
I am going to say this a lot. I am warning you. What a great course this is. The lectures are solid. I am working through the first exercise, and I have been learning so much and consolidating the information from the lectures along with practicing pharo. I believe this course will be my model whenever I write training in the future. stfan10
In my opinion, this MOOC is a must-learn for any developer using Object-Oriented Programming. It teaches the essential concepts common to most OOP languages in a concise and well-paced way. The choice of Pharo as an illustrative language definitely felt appropriate, and was never an obstacle to understanding the content of the course. I would definitely recommend completing the companion exercises, whether in Pharo or your OOP language of choice.
High-level course stimulate your brain and gives you lots of inputs to go on learning more and more...
The knowledge, syllabus and pacing are excellent. Recording is of good quality (minus the occasional typos), even at an accelerated speed (I used 1.5x). Thank you so much for giving me the rationales to finally understand the OOP paradigm after years of working with it using heuristics and half-understood notions. It feels like a new beginning for me.
Modules 1-4 should be taught to and understood by anyone programming with an OOP language. I appreciate that these pieces of invaluable knowledge keep being repeated in the other modules.
My most sincere compliments. It is rare to find a course that is so specialized and practical at the same time.
About this MOOC
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:
Understanding messages
Test-Driven Design
Hooks: support for evolution
Objects: state and behavior
Elementary design patterns
Double dispatch
Object creation
Sharing objects
Inversion of control
About types
The Mooc proposes several design exercises ranging from little interpreters to games and quizzes.
Why the Pharo programming language?
This MOOC uses Pharo as a pedagogical vehicle but all the concepts you will learn are language independent and can be applied to any object-oriented language.
We use Pharo because it is a pure object-oriented programming language.
It offers a unique developing experience in constant interaction with live objects.
Pharo is elegant, fun to use, and very powerful. It is very easy to learn and enables to understand advanced concepts in a natural way.
When programming in Pharo, you are immersed in a world of live objects.
You have immediate feedback at any moment of your development on objects representing web applications, code itself, graphics, and network.
So Pharo is the perfect environment to teach deep object-oriented programming.
Note that there is a full MOOC on Pharo but it is not a requirement.
If you already followed it and liked it, this MOOC on Advanced Object-Oriented Design will bring you to the next level ;-)
The following picture shows the different modules.
You can see the mooc overview PDF / VIDEO
Module 0: Little Warm up with Pharo
This first optional module presents some lectures from the Pharo Mooc.
It helps the reader who wants to follow the syntax used in the slides and do the exercises to learn fast Pharo. We suggest to execute the expression ProfStef new go and perform the proposed exercises.
Teaching objectives
Pharo syntax
Pharo object model
Core elements
The following short videos explain the full language.
M0-1 LecturePharo Object Model in a Nutshell PDF / VIDEO
M0-2 LecturePharo Syntax in a Nutshell PDF / VIDEO
M0-3 LectureClass and Method Definitions PDF / VIDEO
This first module revisits elementary concepts around self, super, and the power of dispatching to dedicated objects.
The case study shows how to go from a monolithic design with one kind of format to the handling of optional different formats in the Pillar document compilation chain.
Teaching objectives
Completely rethink what it means to send a message
Explain that sending a message is making a choice based on classes
Distinguish between static and dynamic approaches to inheritance
Understand what is to send a message and how lookup works
Understand deeply what super is
Apply the mechanics of a transformation that makes implicit behavior explicit
Sessions
M1-1 LectureEssence of Dispatch: Taking Pharo Booleans as Example PDF / VIDEO
M1-2 LectureEssence of Dispatch: Let the receiver decide PDF / VIDEO
M1-6 LectureReification and delegation - A case study: Microdown in Pillar PDF / VIDEO
Module 2: Tests
This module covers an important aspect: testing applications and how to take advantage of test driven design. It shows in particular the power of eXtreme Test Driven Design and how writing tests first and coding in the debugger is empowering the designer.
Teaching objectives
Understand the structure and benefits of a test and specify a proper automated test
Identify the benefits and characteristics of a good test suite
Identify the benefits and apply a Test Driven Development workflow
Specify and apply the Xtrem Test Driven Development method with Pharo tools
Create a parameterized test and reuse it with specific values
Sessions
M2-1 LectureTest 101: The minimum you should know PDF / VIDEO
M2-2 LectureTests: Why testing is Important? PDF / VIDEO
M2-4 LectureXtreme Test Driven Development: Getting a productivity boost PDF / VIDEO
M2-5 LectureParametrized Tests: Getting more tests out of test cases PDF / VIDEO
Module 3: Hooks
In this module we will start to look at design patterns. In parallel, we will discuss a key point of object-oriented design which is how to design abstractions that are extensible using hooks. The case study is about going from monolithic to parametrized objects.
Teaching objectives
Get exposed to design patterns
Use hooks to extend code
Analyze hook and template methods
Use a stream and avoid creating spurious objects
Move from a monolithic global design to one that can be parameterized
Sessions
M3-1 LectureAn introduction to design patterns PDF / VIDEO
M3-2 LectureMessage Sends are Plans for Reuse PDF / VIDEO
M3-3 LectureHooks and Template: One of the cornerstones of OOP PDF / VIDEO
M3-4 LectureUsing well asString and printString: A Pharo code idiom PDF / VIDEO
In this module we will focus on basic principle showing for example the difference between data and objects. We will start also to present some design patterns such as Singleton and Decorator.
Teaching objectives
Rethink object API
Distinguish between an object and a data structure
Identify the different syntactic forms of global variables
Identify the disadvantages of fat classes and replace them with class hierarchies and delegation
Implement the Singleton pattern, with its advantages and disadvantages
Apply the Decorator design pattern and identify when to use it
Sessions
M4-1 LectureMethods: the elementary unit of reuse PDF / VIDEO
M4-2 LectureObjects vs. Data - An API perspective studying the class Point PDF / VIDEO
In this module we will present some important and simple design patterns such as composite or state. We will then propose to compare use versus inheritance a way to understand the forces in presence.
Teaching objectives
Understand the Composite design pattern and identify when to use it
Use the State design pattern to design objects with many states, complex transitions
between states and operations that depend on each state
Understand the Command design pattern and identify when to use it
Use a design pattern in the real world
Compare inheritance-based and delegation-based designs
Identify the benefits of using objects to represent complex algos
Recognize when it is preferable to use objects rather than lexical closures
Identify the use of NullObject design pattern and the benefit of object state initialization
Manage methods with a large number of arguments and design fluid APIs
Sessions
M5-1 LectureComposite: a Nice and Common Design Pattern PDF / VIDEO
M5-2 LectureAbout State Design Pattern PDF / VIDEO
M5-3 LectureCommand Design Pattern: Actions as objects PDF / VIDEO
M5-3 LectureApplication of Command Design Pattern PDF / VIDEO
M5-4 LectureDelegation vs. Inheritance PDF / VIDEO
M5-5 LectureTurning Procedures to Objects PDF / VIDEO
M5-6 LectureBlocks vs. Objects: Rethinking common abstractions PDF / VIDEO
You can find free and online resources in the Documentation page.
We recommend the Updated Pharo by Example book, the Pharo cheat-sheet, and the new book Learning Object-Oriented Programming, Design and
TDD with Pharo on http://books.pharo.org
Stéphane Ducasse is directeur de
recherche at Inria. He leads the RMoD
team. He is expert in two domains:
object-oriented language design and
reengineering. His works on traits
have been introduced in AmbientTalk,
Slate, Pharo, Perl-6, PHP 5.4 and
Squeak. They have also
influenced JavaScript, Scala and
Fortress. Stéphane is also expert on
software quality, program
understanding, program visualisations,
reengineering and metamodeling. He is
one of the developers of Pharo. He is
also one of the developers of Moose,
an open-source software analysis
platform. He created Synectique a
company building dedicated tools for
advanced software analysis. Stéphane
wrote several books on programming
learning and other topics such as web
programming.
Luc Fabresse
Luc Fabresse is currently professor in computer science at IMT Nord Europe.
His researches focus on dynamic and reflective languages such as Pharo to better support programming in the context of mobile robotics and IoT.
It involves deployment, code update, memory management and bootstrapping.
He also works on fleet of collaborating mobile robots involving challenges such as: localization, navigation and distributed coordination.
Luc's long-term vision is to be able to use Jedi mind trick on mobile robots ;-)
Meanwhile, Luc gives many computer science lectures, co-organizes events (technical days, conferences, ...), promotes Smalltalk (ESUG board member) and participates to its open-source implementation Pharo.
Guillermo Polito
Guille Polito is a permanent researcher at Inria of the University of Lille, within the EVREF team. Guille’s main research interests are programming language implementations, Virtual machines, testing, programming tools, and modular systems. He has more than 15 years in teaching advanced OOP.
Pablo Tesone
Pablo Tesone is Pharo consortium engineer. He holds a PhD in Computer Science from the University of Lille. Prior to that, Pablo was during 10 years an engineer in large corporates. Pablo has a large spectrum of skills ranging from low-level assembly to high-level reflective systems. He is one of the engineers behind the Pharo Virtual machines. He is the father of stateful traits as available in Pharo.
He has more than 15 years in teaching advanced OOP.