Advanced object oriented design and development with Pharo
Offered By: Inria (French Institute for Research in Computer Science and Automation) via France Université Numerique
Course Description
Overview
Description
This MOOC is aboutAdvanced 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.
Syllabus
Plan de cours
- Module 0: Little Warm up with Pharo
- 0.1 Pharo Object Model in a Nutshell
0.2 Pharo Syntax in a Nutshell
0.3 Class and Method Definitions
0.4 Understanding Messages
0.5 Messages for Java Programmers
0.6 Messages: Composition and Precedence
0.7 Understanding Messages: Sequence and Cascade
0.8 Introduction to Blocks
- 0.1 Pharo Object Model in a Nutshell
- Module 1: Understanding messages
- 1.1 Essence of Dispatch: Taking Pharo Booleans as Example
1.2 Essence of Dispatch: Let the receiver decide
1.3 Inheritance Basics
1.4 Inheritance and Lookup: Self - Understand lookup once for all
1.5 About super
1.6 Reification and delegation - A case study: Microdown in Pillar
- 1.1 Essence of Dispatch: Taking Pharo Booleans as Example
- Module 2: Test-Driven Design
- 2.1 Test 101: The minimum you should know
2.2 Tests: Why testing is Important?
2.3 Test-Driven Development
2.4 Xtreme Test Driven Development: Getting a productivity boost
2.5 Parametrized Tests: Getting more tests out of test cases
- 2.1 Test 101: The minimum you should know
- Module 3: Hooks: support for evolution
- 3.1 An introduction to design patterns
3.2 Message Sends are Plans for Reuse
3.3 Hooks and Template: One of the cornerstones of OOP
3.4 Using well asString and printString: A Pharo code idiom
3.5 Global to parameter
- 3.1 An introduction to design patterns
- Module 4: Objects: state and behavior
- 4.1 Methods: the elementary unit of reuse
4.2 Objects vs. Data - An API perspective studying the class Point
4.3 About global variables
4.4 Fat classes are bad - A large class vs. a class hierarchy
4.5 Singleton: a Highly Misunderstood Pattern
4.6 Decorator Design Pattern
- 4.1 Methods: the elementary unit of reuse
- Module 5: Elementary design patterns
- 5.1 Composite: a Nice and Common Design Pattern
5.2 About State Design Pattern
5.3.1 Command Design Pattern: Actions as objects
5.3.2 Application of Command Design Pattern
5.4 Delegation vs. Inheritance
5.5 Turning Procedures to Objects
5.6 Blocks vs. Objects: Rethinking common abstractions
5.7 Avoid Null Checks
5.8 About Fluid API
- 5.1 Composite: a Nice and Common Design Pattern
- Module 6: About double dispatch
- 6.1 A double dispatch starter: Stone Paper Scissors
6.2 Double dispatch: Does not have to be symmetrical
6.3 a Die + a DieHandle: Practicing dispatch more
6.4 Visitor: Modular and extensible first class actions
6.5 Some discussions on Visitor
6.6 Stone Paper Scissors: The case of results
6.7 Double Dispatch: Adding numbers as a Kata
- 6.1 A double dispatch starter: Stone Paper Scissors
- Module 7: Object creation
- 7.1 About Null Check: The case of lazy initialization
7.2 Customization degree of hooks: Class vs. instance hooks
7.3 DieHandle new vs. self class new: When classes are first class citizen
7.4 Delegation of actions and accumulator: Form validation as an example
7.5 Behavior delegation at work: The case of the class printer
7.6 Builder Design Pattern: Encapsulating object creation
7.7 Builder API variations
7.8 Did You Really Understand Super?
- 7.1 About Null Check: The case of lazy initialization
- Module 8: Sharing objects
- 8.1 Shared variables: A Pharo code idiom
8.2 Sharing with instance specific possibilities
8.3 Shared Pools: Static sharing between hierarchies
8.4 About magic literals
8.5 Flyweight
8.6 TypeObject
8.7 A variation on sharing
- 8.1 Shared variables: A Pharo code idiom
- Module 9: About Inversion of control / Registration
- 9.1 About coupling and encapsulation
9.2 Class Methods At Work
9.3 About Registration: When class method-based registration is too much
9.4 Application settings: From a monolithic to a modular architecture
9.5 Learning from a Sokoban implementation
9.6 Class vs. Object-Oriented Programming
- 9.1 About coupling and encapsulation
- Module 10: About Types
- 10.1 The two interfaces: In presence of delta programming
10.2 Subclassing vs. Subtyping
10.3 About type and method lookup
10.4 Polymorphic objects: Support for software evolution
10.5 About defensive programming
- 10.1 The two interfaces: In presence of delta programming
Tags
Related Courses
Functional Programming Principles in ScalaÉcole Polytechnique Fédérale de Lausanne via Coursera Introduction à la programmation orientée objet (en Java)
École Polytechnique Fédérale de Lausanne via Coursera Functional Program Design in Scala
École Polytechnique Fédérale de Lausanne via Coursera Object-Oriented Programming
Indian Institute of Technology Bombay via edX Orientação a Objetos com Java
Instituto Tecnológico de Aeronáutica via Coursera