SlideShare uma empresa Scribd logo
1 de 42
Baixar para ler offline
OOP vs COP
Objects against Classes
The beginning ...
About a year ago, I said to a friend:

"Why is it called 'OOP'? It should be called
'COP' as the classes are more important!"

...my friend stopped saying "ciao" to me for a
month...he works in Python and Javascript!
The beginning ...
Some time later I saw this post of Uncle Bob
"The Last programming Language" where he
talks about Clojure and I read a phrase that left
a strong impression on me:

Inheritance is not the only way to do polymorphism
The beginning ...
            Then I discovered this book. At
            the moment this is the best
            book that I have ever read
            about TDD and design ...
The beginning ...
Then I began to study Ruby and work in
Javascript.

In Javascript the concept of class does not
exist!

In Ruby the objects are softer than in C# or
Java.
OOP - Ruby
irb(main):001:0> a = [1, 2]
=> [1, 2]
irb(main):002:0> a.somma()
NoMethodError: undefined method `somma' for [1, 2]:Array
     from (irb):2
     from C:/Ruby192/bin/irb:12:in `<main>'
irb(main):003:0> def a.somma()
irb(main):004:1> self.inject(:+)
irb(main):005:1> end
=> nil
irb(main):006:0> a.somma
=> 3
irb(main):007:0>
OOP - Javascript
var obj = {
   type: "xxx",
   color: "red",
   getInfo: function () {
      return this.type + ' is ' + this.color;
   }
};

obj.color = "black";
alert(obj.getInfo());
Language matters!?
Is it just a language problem or is there
something else?




     Let's start from the beginning ...
Object Oriented Programming
What is it ?
OOP - Is it this?
OOP - or this?
OOP - OR THIS ????
Let's ask "Dad"...
http://en.wikiquote.org/wiki/Alan_Kay
"OOP to me means only
messaging, local retention and
protection and hiding of state-
process, and extreme late-
binding of all things. It can be
done in Smalltalk and in LISP.
There are possibly other
systems in which this is
possible, but I'm not aware of
them."
So OOP is:
●   Messaging
●   Local retention & protection
●   Hiding of State-process
●   Extreme late binding
Where are the classes????
Where are the objects ?????
Let's ask Alan again...
http://userpage.fu-berlin.
de/~ram/pub/pub_jf47ht81Ht/doc_kay_oo
p_en


"It was probably in 1967 when someone asked me what
I was doing, and I said: 'It's object-oriented programming'."
[...]
"I thought of objects being like biological cells and/or
individual computers on a network, only able to
communicate with messages (so messaging came at the
very beginning -- it took a while to see how to do
messaging in a programming language efficiently enough
to be useful)."
Let's ask Alan again...
http://lists.squeakfoundation.org/pipermail/squeak-
dev/1998-October/017019.html

"Just a gentle reminder that I took some pains at the last
OOPSLA to try to remind everyone that Smalltalk is not
only NOT its syntax or the class library, it is not even
about classes. I'm sorry that I long ago coined the term
"objects" for this topic because it gets many people to
focus on the lesser idea."


The big idea is "messaging" [ ... ]
Why OOP ...
OOP creates a modular design that is easily
modified without having to restructure the entire
system.
Why OOP ...
Keeps large software projects manageable for
human programmers
Why OOP ...
Keeps large software projects manageable for
human programmers via:

Modularization - Decompose problem into
smaller subproblems that can be solved
independently.
Why OOP ...
Keeps large software projects manageable for
human programmers via:

Abstraction -- Understandability - Terminology
of the problem domain is reflected in the
software solution. Individual modules are
understandable by human readers.
Why OOP ...
Keeps large software projects manageable for
human programmers via:

Encapsulation -- Information Hiding - Hide
complexity from the user of a software or SDK.
Protect low-level functionality
Why OOP ...
Keeps large software projects manageable for
human programmers via:

Composability -- Structured Design - Interfaces
allow modules to combine freely in order to
produce new systems.
Why OOP ...
Keeps large software projects manageable for
human programmers via:

Hierarchy - Incremental development from
small and simple to more complex modules.
Why OOP ...
Keeps large software projects manageable for
human programmers via:

Continuity - Changes and maintenance in only
a few modules does not affect the overall
architecture.
Why OOP ...
Modularization
Abstraction
Encapsulation
Composability
Hierarchy
Continuity
etc ...
OOP could be this?
OOP
The strongest concept of OOP is "messaging",
so while we are developing we should
concentrate on how the objects communicate
between themselves
OOP - System Level
When we develop a system we should focus
on:

● Separation of concern
● High level of abstraction
OOP - System Level
We obtain a Hexagonal Architecture
OOP - Object Level
How can we discover ports and adapters?

●   Encapsulation
●   Information Hiding
●   Low Coupling
●   High Cohesion
●   Composite Simpler Than The Sum
●   Context Independence
●   Hide the correct information
OOP - Object Level
The objects should have:

●   Low Coupling
●   High Cohesion
●   Composite Simpler Than The Sum
●   Context Independence
●   Hide the correct information
OOP - Object Level
We should compose the objects to describe the
system, so we have:

● Declarative Layer - Where the objects are
  created and composed
● Application Layer - Where the object
  communicates
And the classes???
The classes are "the declarative layer of the
declarative layer". The classes are "factories"
for the objects. So you could have other
factories for the objects...
OOP - Ruby
irb(main):001:0> a = [1, 2]
=> [1, 2]
irb(main):002:0> a.somma()
NoMethodError: undefined method `somma' for [1, 2]:Array
     from (irb):2
     from C:/Ruby192/bin/irb:12:in `<main>'
irb(main):003:0> def a.somma()
irb(main):004:1> self.inject(:+)
irb(main):005:1> end
=> nil
irb(main):006:0> a.somma
=> 3
irb(main):007:0>
OOP - Javascript
var obj = {
   type: "xxx",
   color: "red",
   getInfo: function () {
      return this.type + ' is ' + this.color;
   }
};

obj.color = "black";
alert(obj.getInfo());
OOP - Scheme
(define (make-from-real-imag x y)
 (define (dispatch op)
  (cond ((eq? op 'real-part) x)
       ((eq? op 'imag-part) y)
       ((eq? op 'magnitude)
        (sqrt (+ (square x) (square y))))
       ((eq? op 'angle) (atan y x))
       (else
        (error "Unknown op -- MAKE-FROM-REAL-IMAG"
op))))
 dispatch)
OOP - Scheme
es:
> (define x (make-from-real-imag 1 2))
>x
#<procedure:dispatch>
> (x 'real-part)
1
> (x 'imag-part)
2
>
Example
There is a web server that exposes some APIs
to manage playlists of images. We create a
desktop program to manage these playlists ...

server: https://github.com/gpad/rms
client: https://github.com/gpad/PlayListManager
OOP vs COP


            Thank YOU !!!

twitter: https://twitter.com/#!/GPad619
github: https://github.com/gpad
e-mail: gpadovani@gmail.com

Mais conteúdo relacionado

Mais procurados

Exception handling
Exception handlingException handling
Exception handling
Iblesoft
 

Mais procurados (20)

Advanced Trees
Advanced TreesAdvanced Trees
Advanced Trees
 
Zabbix 介紹
Zabbix 介紹Zabbix 介紹
Zabbix 介紹
 
Servlet Filters
Servlet FiltersServlet Filters
Servlet Filters
 
Linked list
Linked listLinked list
Linked list
 
Waterfall model ppt final
Waterfall model ppt  finalWaterfall model ppt  final
Waterfall model ppt final
 
Binary Search - Design & Analysis of Algorithms
Binary Search - Design & Analysis of AlgorithmsBinary Search - Design & Analysis of Algorithms
Binary Search - Design & Analysis of Algorithms
 
Python Programming Essentials - M19 - Namespaces, Global Variables and Docstr...
Python Programming Essentials - M19 - Namespaces, Global Variables and Docstr...Python Programming Essentials - M19 - Namespaces, Global Variables and Docstr...
Python Programming Essentials - M19 - Namespaces, Global Variables and Docstr...
 
Design principle vs design patterns
Design principle vs design patternsDesign principle vs design patterns
Design principle vs design patterns
 
Tree and binary tree
Tree and binary treeTree and binary tree
Tree and binary tree
 
Binary Search Tree and AVL
Binary Search Tree and AVLBinary Search Tree and AVL
Binary Search Tree and AVL
 
1.1 binary tree
1.1 binary tree1.1 binary tree
1.1 binary tree
 
Object Oriented Design
Object Oriented DesignObject Oriented Design
Object Oriented Design
 
Binary Search Tree in Data Structure
Binary Search Tree in Data StructureBinary Search Tree in Data Structure
Binary Search Tree in Data Structure
 
1.5 binary search tree
1.5 binary search tree1.5 binary search tree
1.5 binary search tree
 
Exception handling
Exception handlingException handling
Exception handling
 
Java threading
Java threadingJava threading
Java threading
 
Patterns
PatternsPatterns
Patterns
 
Linked List
Linked ListLinked List
Linked List
 
Binary search tree operations
Binary search tree operationsBinary search tree operations
Binary search tree operations
 
Doubly linked list
Doubly linked listDoubly linked list
Doubly linked list
 

Semelhante a OOP vs COP

OO and Rails...
OO and Rails... OO and Rails...
OO and Rails...
adzdavies
 
Object Oriented Programming All Unit Notes
Object Oriented Programming All Unit NotesObject Oriented Programming All Unit Notes
Object Oriented Programming All Unit Notes
BalamuruganV28
 
Ruby object model
Ruby object modelRuby object model
Ruby object model
mbeizer
 
1 Introduction to JAVA.pptx
1 Introduction to JAVA.pptx1 Introduction to JAVA.pptx
1 Introduction to JAVA.pptx
Kabiles07
 

Semelhante a OOP vs COP (20)

OO and Rails...
OO and Rails... OO and Rails...
OO and Rails...
 
introduction of Object oriented programming
introduction of Object oriented programmingintroduction of Object oriented programming
introduction of Object oriented programming
 
Twins: OOP and FP
Twins: OOP and FPTwins: OOP and FP
Twins: OOP and FP
 
Object Oriented Programming All Unit Notes
Object Oriented Programming All Unit NotesObject Oriented Programming All Unit Notes
Object Oriented Programming All Unit Notes
 
What does OOP stand for?
What does OOP stand for?What does OOP stand for?
What does OOP stand for?
 
All of Javascript
All of JavascriptAll of Javascript
All of Javascript
 
Solid principes
Solid principesSolid principes
Solid principes
 
"Leveraging the Event Loop for Blazing-Fast Applications!", Michael Di Prisco
"Leveraging the Event Loop for Blazing-Fast Applications!",  Michael Di Prisco"Leveraging the Event Loop for Blazing-Fast Applications!",  Michael Di Prisco
"Leveraging the Event Loop for Blazing-Fast Applications!", Michael Di Prisco
 
Metaprogramming JavaScript
Metaprogramming  JavaScriptMetaprogramming  JavaScript
Metaprogramming JavaScript
 
Scilab for real dummies
Scilab for real dummiesScilab for real dummies
Scilab for real dummies
 
Ruby object model
Ruby object modelRuby object model
Ruby object model
 
Object-Oriented Programming in Java (Module 1)
Object-Oriented Programming in Java (Module 1)Object-Oriented Programming in Java (Module 1)
Object-Oriented Programming in Java (Module 1)
 
OOP Java
OOP JavaOOP Java
OOP Java
 
Scilabpdf
ScilabpdfScilabpdf
Scilabpdf
 
1 Introduction to JAVA.pptx
1 Introduction to JAVA.pptx1 Introduction to JAVA.pptx
1 Introduction to JAVA.pptx
 
Dependency Injection Why is it awesome and Why should I care?
Dependency Injection Why is it awesome and Why should I care?Dependency Injection Why is it awesome and Why should I care?
Dependency Injection Why is it awesome and Why should I care?
 
Chapter 1- Introduction.ppt
Chapter 1- Introduction.pptChapter 1- Introduction.ppt
Chapter 1- Introduction.ppt
 
Sulthan's_JAVA_Material_for_B.Sc-CS.pdf
Sulthan's_JAVA_Material_for_B.Sc-CS.pdfSulthan's_JAVA_Material_for_B.Sc-CS.pdf
Sulthan's_JAVA_Material_for_B.Sc-CS.pdf
 
Dependency Injection: Why is awesome and why should I care?
Dependency Injection: Why is awesome and why should I care?Dependency Injection: Why is awesome and why should I care?
Dependency Injection: Why is awesome and why should I care?
 
Dependency Injection
Dependency InjectionDependency Injection
Dependency Injection
 

Mais de Gianluca Padovani

Mais de Gianluca Padovani (16)

A Gentle introduction to microservices
A Gentle introduction to microservicesA Gentle introduction to microservices
A Gentle introduction to microservices
 
Beam me up, scotty (PUG Roma)
Beam me up, scotty (PUG Roma)Beam me up, scotty (PUG Roma)
Beam me up, scotty (PUG Roma)
 
Tdd is not about testing (C++ version)
Tdd is not about testing (C++ version)Tdd is not about testing (C++ version)
Tdd is not about testing (C++ version)
 
Tdd is not about testing (OOP)
Tdd is not about testing (OOP)Tdd is not about testing (OOP)
Tdd is not about testing (OOP)
 
DDD loves Actor Model and Actor Model loves Elixir
DDD loves Actor Model and Actor Model loves ElixirDDD loves Actor Model and Actor Model loves Elixir
DDD loves Actor Model and Actor Model loves Elixir
 
Tdd is not about testing
Tdd is not about testingTdd is not about testing
Tdd is not about testing
 
From a web application to a distributed system
From a web application to a distributed systemFrom a web application to a distributed system
From a web application to a distributed system
 
Beam way of life
Beam way of lifeBeam way of life
Beam way of life
 
Cook your KV
Cook your KVCook your KV
Cook your KV
 
System integration through queues
System integration through queuesSystem integration through queues
System integration through queues
 
Beam me up, Scotty
Beam me up, ScottyBeam me up, Scotty
Beam me up, Scotty
 
Docker e git lab
Docker e git labDocker e git lab
Docker e git lab
 
La mia prima lezione di pozioni
La mia prima lezione di pozioniLa mia prima lezione di pozioni
La mia prima lezione di pozioni
 
Keynote meetup Elixir/Erlang 17 ottobre 2015
Keynote meetup Elixir/Erlang 17 ottobre 2015Keynote meetup Elixir/Erlang 17 ottobre 2015
Keynote meetup Elixir/Erlang 17 ottobre 2015
 
C++ Actor Model - You’ve Got Mail ...
C++ Actor Model - You’ve Got Mail ...C++ Actor Model - You’ve Got Mail ...
C++ Actor Model - You’ve Got Mail ...
 
Ferrara Linux Day 2011
Ferrara Linux Day 2011Ferrara Linux Day 2011
Ferrara Linux Day 2011
 

Último

Salient Features of India constitution especially power and functions
Salient Features of India constitution especially power and functionsSalient Features of India constitution especially power and functions
Salient Features of India constitution especially power and functions
KarakKing
 

Último (20)

Sociology 101 Demonstration of Learning Exhibit
Sociology 101 Demonstration of Learning ExhibitSociology 101 Demonstration of Learning Exhibit
Sociology 101 Demonstration of Learning Exhibit
 
TỔNG ÔN TẬP THI VÀO LỚP 10 MÔN TIẾNG ANH NĂM HỌC 2023 - 2024 CÓ ĐÁP ÁN (NGỮ Â...
TỔNG ÔN TẬP THI VÀO LỚP 10 MÔN TIẾNG ANH NĂM HỌC 2023 - 2024 CÓ ĐÁP ÁN (NGỮ Â...TỔNG ÔN TẬP THI VÀO LỚP 10 MÔN TIẾNG ANH NĂM HỌC 2023 - 2024 CÓ ĐÁP ÁN (NGỮ Â...
TỔNG ÔN TẬP THI VÀO LỚP 10 MÔN TIẾNG ANH NĂM HỌC 2023 - 2024 CÓ ĐÁP ÁN (NGỮ Â...
 
On National Teacher Day, meet the 2024-25 Kenan Fellows
On National Teacher Day, meet the 2024-25 Kenan FellowsOn National Teacher Day, meet the 2024-25 Kenan Fellows
On National Teacher Day, meet the 2024-25 Kenan Fellows
 
UGC NET Paper 1 Mathematical Reasoning & Aptitude.pdf
UGC NET Paper 1 Mathematical Reasoning & Aptitude.pdfUGC NET Paper 1 Mathematical Reasoning & Aptitude.pdf
UGC NET Paper 1 Mathematical Reasoning & Aptitude.pdf
 
SOC 101 Demonstration of Learning Presentation
SOC 101 Demonstration of Learning PresentationSOC 101 Demonstration of Learning Presentation
SOC 101 Demonstration of Learning Presentation
 
Holdier Curriculum Vitae (April 2024).pdf
Holdier Curriculum Vitae (April 2024).pdfHoldier Curriculum Vitae (April 2024).pdf
Holdier Curriculum Vitae (April 2024).pdf
 
REMIFENTANIL: An Ultra short acting opioid.pptx
REMIFENTANIL: An Ultra short acting opioid.pptxREMIFENTANIL: An Ultra short acting opioid.pptx
REMIFENTANIL: An Ultra short acting opioid.pptx
 
Google Gemini An AI Revolution in Education.pptx
Google Gemini An AI Revolution in Education.pptxGoogle Gemini An AI Revolution in Education.pptx
Google Gemini An AI Revolution in Education.pptx
 
Sensory_Experience_and_Emotional_Resonance_in_Gabriel_Okaras_The_Piano_and_Th...
Sensory_Experience_and_Emotional_Resonance_in_Gabriel_Okaras_The_Piano_and_Th...Sensory_Experience_and_Emotional_Resonance_in_Gabriel_Okaras_The_Piano_and_Th...
Sensory_Experience_and_Emotional_Resonance_in_Gabriel_Okaras_The_Piano_and_Th...
 
Unit 3 Emotional Intelligence and Spiritual Intelligence.pdf
Unit 3 Emotional Intelligence and Spiritual Intelligence.pdfUnit 3 Emotional Intelligence and Spiritual Intelligence.pdf
Unit 3 Emotional Intelligence and Spiritual Intelligence.pdf
 
This PowerPoint helps students to consider the concept of infinity.
This PowerPoint helps students to consider the concept of infinity.This PowerPoint helps students to consider the concept of infinity.
This PowerPoint helps students to consider the concept of infinity.
 
80 ĐỀ THI THỬ TUYỂN SINH TIẾNG ANH VÀO 10 SỞ GD – ĐT THÀNH PHỐ HỒ CHÍ MINH NĂ...
80 ĐỀ THI THỬ TUYỂN SINH TIẾNG ANH VÀO 10 SỞ GD – ĐT THÀNH PHỐ HỒ CHÍ MINH NĂ...80 ĐỀ THI THỬ TUYỂN SINH TIẾNG ANH VÀO 10 SỞ GD – ĐT THÀNH PHỐ HỒ CHÍ MINH NĂ...
80 ĐỀ THI THỬ TUYỂN SINH TIẾNG ANH VÀO 10 SỞ GD – ĐT THÀNH PHỐ HỒ CHÍ MINH NĂ...
 
Salient Features of India constitution especially power and functions
Salient Features of India constitution especially power and functionsSalient Features of India constitution especially power and functions
Salient Features of India constitution especially power and functions
 
2024-NATIONAL-LEARNING-CAMP-AND-OTHER.pptx
2024-NATIONAL-LEARNING-CAMP-AND-OTHER.pptx2024-NATIONAL-LEARNING-CAMP-AND-OTHER.pptx
2024-NATIONAL-LEARNING-CAMP-AND-OTHER.pptx
 
ICT Role in 21st Century Education & its Challenges.pptx
ICT Role in 21st Century Education & its Challenges.pptxICT Role in 21st Century Education & its Challenges.pptx
ICT Role in 21st Century Education & its Challenges.pptx
 
Single or Multiple melodic lines structure
Single or Multiple melodic lines structureSingle or Multiple melodic lines structure
Single or Multiple melodic lines structure
 
Accessible Digital Futures project (20/03/2024)
Accessible Digital Futures project (20/03/2024)Accessible Digital Futures project (20/03/2024)
Accessible Digital Futures project (20/03/2024)
 
How to setup Pycharm environment for Odoo 17.pptx
How to setup Pycharm environment for Odoo 17.pptxHow to setup Pycharm environment for Odoo 17.pptx
How to setup Pycharm environment for Odoo 17.pptx
 
NO1 Top Black Magic Specialist In Lahore Black magic In Pakistan Kala Ilam Ex...
NO1 Top Black Magic Specialist In Lahore Black magic In Pakistan Kala Ilam Ex...NO1 Top Black Magic Specialist In Lahore Black magic In Pakistan Kala Ilam Ex...
NO1 Top Black Magic Specialist In Lahore Black magic In Pakistan Kala Ilam Ex...
 
Towards a code of practice for AI in AT.pptx
Towards a code of practice for AI in AT.pptxTowards a code of practice for AI in AT.pptx
Towards a code of practice for AI in AT.pptx
 

OOP vs COP

  • 1. OOP vs COP Objects against Classes
  • 2. The beginning ... About a year ago, I said to a friend: "Why is it called 'OOP'? It should be called 'COP' as the classes are more important!" ...my friend stopped saying "ciao" to me for a month...he works in Python and Javascript!
  • 3. The beginning ... Some time later I saw this post of Uncle Bob "The Last programming Language" where he talks about Clojure and I read a phrase that left a strong impression on me: Inheritance is not the only way to do polymorphism
  • 4. The beginning ... Then I discovered this book. At the moment this is the best book that I have ever read about TDD and design ...
  • 5. The beginning ... Then I began to study Ruby and work in Javascript. In Javascript the concept of class does not exist! In Ruby the objects are softer than in C# or Java.
  • 6. OOP - Ruby irb(main):001:0> a = [1, 2] => [1, 2] irb(main):002:0> a.somma() NoMethodError: undefined method `somma' for [1, 2]:Array from (irb):2 from C:/Ruby192/bin/irb:12:in `<main>' irb(main):003:0> def a.somma() irb(main):004:1> self.inject(:+) irb(main):005:1> end => nil irb(main):006:0> a.somma => 3 irb(main):007:0>
  • 7. OOP - Javascript var obj = { type: "xxx", color: "red", getInfo: function () { return this.type + ' is ' + this.color; } }; obj.color = "black"; alert(obj.getInfo());
  • 8. Language matters!? Is it just a language problem or is there something else? Let's start from the beginning ...
  • 10. OOP - Is it this?
  • 11. OOP - or this?
  • 12. OOP - OR THIS ????
  • 13. Let's ask "Dad"... http://en.wikiquote.org/wiki/Alan_Kay "OOP to me means only messaging, local retention and protection and hiding of state- process, and extreme late- binding of all things. It can be done in Smalltalk and in LISP. There are possibly other systems in which this is possible, but I'm not aware of them."
  • 14. So OOP is: ● Messaging ● Local retention & protection ● Hiding of State-process ● Extreme late binding
  • 15. Where are the classes????
  • 16. Where are the objects ?????
  • 17. Let's ask Alan again... http://userpage.fu-berlin. de/~ram/pub/pub_jf47ht81Ht/doc_kay_oo p_en "It was probably in 1967 when someone asked me what I was doing, and I said: 'It's object-oriented programming'." [...] "I thought of objects being like biological cells and/or individual computers on a network, only able to communicate with messages (so messaging came at the very beginning -- it took a while to see how to do messaging in a programming language efficiently enough to be useful)."
  • 18. Let's ask Alan again... http://lists.squeakfoundation.org/pipermail/squeak- dev/1998-October/017019.html "Just a gentle reminder that I took some pains at the last OOPSLA to try to remind everyone that Smalltalk is not only NOT its syntax or the class library, it is not even about classes. I'm sorry that I long ago coined the term "objects" for this topic because it gets many people to focus on the lesser idea." The big idea is "messaging" [ ... ]
  • 19. Why OOP ... OOP creates a modular design that is easily modified without having to restructure the entire system.
  • 20. Why OOP ... Keeps large software projects manageable for human programmers
  • 21. Why OOP ... Keeps large software projects manageable for human programmers via: Modularization - Decompose problem into smaller subproblems that can be solved independently.
  • 22. Why OOP ... Keeps large software projects manageable for human programmers via: Abstraction -- Understandability - Terminology of the problem domain is reflected in the software solution. Individual modules are understandable by human readers.
  • 23. Why OOP ... Keeps large software projects manageable for human programmers via: Encapsulation -- Information Hiding - Hide complexity from the user of a software or SDK. Protect low-level functionality
  • 24. Why OOP ... Keeps large software projects manageable for human programmers via: Composability -- Structured Design - Interfaces allow modules to combine freely in order to produce new systems.
  • 25. Why OOP ... Keeps large software projects manageable for human programmers via: Hierarchy - Incremental development from small and simple to more complex modules.
  • 26. Why OOP ... Keeps large software projects manageable for human programmers via: Continuity - Changes and maintenance in only a few modules does not affect the overall architecture.
  • 28. OOP could be this?
  • 29. OOP The strongest concept of OOP is "messaging", so while we are developing we should concentrate on how the objects communicate between themselves
  • 30. OOP - System Level When we develop a system we should focus on: ● Separation of concern ● High level of abstraction
  • 31. OOP - System Level We obtain a Hexagonal Architecture
  • 32. OOP - Object Level How can we discover ports and adapters? ● Encapsulation ● Information Hiding ● Low Coupling ● High Cohesion ● Composite Simpler Than The Sum ● Context Independence ● Hide the correct information
  • 33. OOP - Object Level The objects should have: ● Low Coupling ● High Cohesion ● Composite Simpler Than The Sum ● Context Independence ● Hide the correct information
  • 34. OOP - Object Level We should compose the objects to describe the system, so we have: ● Declarative Layer - Where the objects are created and composed ● Application Layer - Where the object communicates
  • 35. And the classes??? The classes are "the declarative layer of the declarative layer". The classes are "factories" for the objects. So you could have other factories for the objects...
  • 36. OOP - Ruby irb(main):001:0> a = [1, 2] => [1, 2] irb(main):002:0> a.somma() NoMethodError: undefined method `somma' for [1, 2]:Array from (irb):2 from C:/Ruby192/bin/irb:12:in `<main>' irb(main):003:0> def a.somma() irb(main):004:1> self.inject(:+) irb(main):005:1> end => nil irb(main):006:0> a.somma => 3 irb(main):007:0>
  • 37. OOP - Javascript var obj = { type: "xxx", color: "red", getInfo: function () { return this.type + ' is ' + this.color; } }; obj.color = "black"; alert(obj.getInfo());
  • 38. OOP - Scheme (define (make-from-real-imag x y) (define (dispatch op) (cond ((eq? op 'real-part) x) ((eq? op 'imag-part) y) ((eq? op 'magnitude) (sqrt (+ (square x) (square y)))) ((eq? op 'angle) (atan y x)) (else (error "Unknown op -- MAKE-FROM-REAL-IMAG" op)))) dispatch)
  • 39. OOP - Scheme es: > (define x (make-from-real-imag 1 2)) >x #<procedure:dispatch> > (x 'real-part) 1 > (x 'imag-part) 2 >
  • 40. Example There is a web server that exposes some APIs to manage playlists of images. We create a desktop program to manage these playlists ... server: https://github.com/gpad/rms client: https://github.com/gpad/PlayListManager
  • 41.
  • 42. OOP vs COP Thank YOU !!! twitter: https://twitter.com/#!/GPad619 github: https://github.com/gpad e-mail: gpadovani@gmail.com