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

File System Hierarchy
File System HierarchyFile System Hierarchy
File System Hierarchysritolia
 
Open source software licenses
Open source software licensesOpen source software licenses
Open source software licensesDrexelELC
 
Exploitation of counter overflows in the Linux kernel
Exploitation of counter overflows in the Linux kernelExploitation of counter overflows in the Linux kernel
Exploitation of counter overflows in the Linux kernelVitaly Nikolenko
 
JVM: A Platform for Multiple Languages
JVM: A Platform for Multiple LanguagesJVM: A Platform for Multiple Languages
JVM: A Platform for Multiple LanguagesKris Mok
 
Course 102: Lecture 16: Process Management (Part 2)
Course 102: Lecture 16: Process Management (Part 2) Course 102: Lecture 16: Process Management (Part 2)
Course 102: Lecture 16: Process Management (Part 2) Ahmed El-Arabawy
 
Course 102: Lecture 13: Regular Expressions
Course 102: Lecture 13: Regular Expressions Course 102: Lecture 13: Regular Expressions
Course 102: Lecture 13: Regular Expressions Ahmed El-Arabawy
 
Tiered Compilation in Hotspot JVM
Tiered Compilation in Hotspot JVMTiered Compilation in Hotspot JVM
Tiered Compilation in Hotspot JVMIgor Veresov
 
Dead Lock Analysis of spin_lock() in Linux Kernel (english)
Dead Lock Analysis of spin_lock() in Linux Kernel (english)Dead Lock Analysis of spin_lock() in Linux Kernel (english)
Dead Lock Analysis of spin_lock() in Linux Kernel (english)Sneeker Yeh
 
Introduction to shell scripting
Introduction to shell scriptingIntroduction to shell scripting
Introduction to shell scriptingCorrado Santoro
 
The linux networking architecture
The linux networking architectureThe linux networking architecture
The linux networking architecturehugo lu
 
History Of Linux
History Of LinuxHistory Of Linux
History Of Linuxanand09
 

Mais procurados (20)

Gof design patterns
Gof design patternsGof design patterns
Gof design patterns
 
File System Hierarchy
File System HierarchyFile System Hierarchy
File System Hierarchy
 
Open source software licenses
Open source software licensesOpen source software licenses
Open source software licenses
 
Exploitation of counter overflows in the Linux kernel
Exploitation of counter overflows in the Linux kernelExploitation of counter overflows in the Linux kernel
Exploitation of counter overflows in the Linux kernel
 
Linux Memory Management
Linux Memory ManagementLinux Memory Management
Linux Memory Management
 
Linux And perl
Linux And perlLinux And perl
Linux And perl
 
Microkernel Evolution
Microkernel EvolutionMicrokernel Evolution
Microkernel Evolution
 
JVM: A Platform for Multiple Languages
JVM: A Platform for Multiple LanguagesJVM: A Platform for Multiple Languages
JVM: A Platform for Multiple Languages
 
Course 102: Lecture 16: Process Management (Part 2)
Course 102: Lecture 16: Process Management (Part 2) Course 102: Lecture 16: Process Management (Part 2)
Course 102: Lecture 16: Process Management (Part 2)
 
Volatile
VolatileVolatile
Volatile
 
Course 102: Lecture 13: Regular Expressions
Course 102: Lecture 13: Regular Expressions Course 102: Lecture 13: Regular Expressions
Course 102: Lecture 13: Regular Expressions
 
Tiered Compilation in Hotspot JVM
Tiered Compilation in Hotspot JVMTiered Compilation in Hotspot JVM
Tiered Compilation in Hotspot JVM
 
Dead Lock Analysis of spin_lock() in Linux Kernel (english)
Dead Lock Analysis of spin_lock() in Linux Kernel (english)Dead Lock Analysis of spin_lock() in Linux Kernel (english)
Dead Lock Analysis of spin_lock() in Linux Kernel (english)
 
Introduction to shell scripting
Introduction to shell scriptingIntroduction to shell scripting
Introduction to shell scripting
 
Java History
Java HistoryJava History
Java History
 
The linux networking architecture
The linux networking architectureThe linux networking architecture
The linux networking architecture
 
History Of Linux
History Of LinuxHistory Of Linux
History Of Linux
 
Memory management in linux
Memory management in linuxMemory management in linux
Memory management in linux
 
Hibernate I
Hibernate IHibernate I
Hibernate I
 
Linux crontab
Linux crontabLinux crontab
Linux crontab
 

Semelhante a OOP vs COP

OO and Rails...
OO and Rails... OO and Rails...
OO and Rails... adzdavies
 
introduction of Object oriented programming
introduction of Object oriented programmingintroduction of Object oriented programming
introduction of Object oriented programmingRiturajJain8
 
Object Oriented Programming All Unit Notes
Object Oriented Programming All Unit NotesObject Oriented Programming All Unit Notes
Object Oriented Programming All Unit NotesBalamuruganV28
 
What does OOP stand for?
What does OOP stand for?What does OOP stand for?
What does OOP stand for?Colin Riley
 
"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 PriscoFwdays
 
Metaprogramming JavaScript
Metaprogramming  JavaScriptMetaprogramming  JavaScript
Metaprogramming JavaScriptdanwrong
 
Scilab for real dummies
Scilab for real dummiesScilab for real dummies
Scilab for real dummiesSunu Pradana
 
Ruby object model
Ruby object modelRuby object model
Ruby object modelmbeizer
 
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)muhammadmubinmacadad2
 
1 Introduction to JAVA.pptx
1 Introduction to JAVA.pptx1 Introduction to JAVA.pptx
1 Introduction to JAVA.pptxKabiles07
 
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?ColdFusionConference
 
Chapter 1- Introduction.ppt
Chapter 1- Introduction.pptChapter 1- Introduction.ppt
Chapter 1- Introduction.pptTigistTilahun1
 
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.pdfSULTHAN BASHA
 
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?devObjective
 

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

A Gentle introduction to microservices
A Gentle introduction to microservicesA Gentle introduction to microservices
A Gentle introduction to microservicesGianluca Padovani
 
Beam me up, scotty (PUG Roma)
Beam me up, scotty (PUG Roma)Beam me up, scotty (PUG Roma)
Beam me up, scotty (PUG Roma)Gianluca Padovani
 
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)Gianluca Padovani
 
Tdd is not about testing (OOP)
Tdd is not about testing (OOP)Tdd is not about testing (OOP)
Tdd is not about testing (OOP)Gianluca Padovani
 
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 ElixirGianluca Padovani
 
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 systemGianluca Padovani
 
System integration through queues
System integration through queuesSystem integration through queues
System integration through queuesGianluca Padovani
 
La mia prima lezione di pozioni
La mia prima lezione di pozioniLa mia prima lezione di pozioni
La mia prima lezione di pozioniGianluca Padovani
 
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 2015Gianluca Padovani
 
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 ...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

Advanced Views - Calendar View in Odoo 17
Advanced Views - Calendar View in Odoo 17Advanced Views - Calendar View in Odoo 17
Advanced Views - Calendar View in Odoo 17Celine George
 
Measures of Dispersion and Variability: Range, QD, AD and SD
Measures of Dispersion and Variability: Range, QD, AD and SDMeasures of Dispersion and Variability: Range, QD, AD and SD
Measures of Dispersion and Variability: Range, QD, AD and SDThiyagu K
 
SECOND SEMESTER TOPIC COVERAGE SY 2023-2024 Trends, Networks, and Critical Th...
SECOND SEMESTER TOPIC COVERAGE SY 2023-2024 Trends, Networks, and Critical Th...SECOND SEMESTER TOPIC COVERAGE SY 2023-2024 Trends, Networks, and Critical Th...
SECOND SEMESTER TOPIC COVERAGE SY 2023-2024 Trends, Networks, and Critical Th...KokoStevan
 
Explore beautiful and ugly buildings. Mathematics helps us create beautiful d...
Explore beautiful and ugly buildings. Mathematics helps us create beautiful d...Explore beautiful and ugly buildings. Mathematics helps us create beautiful d...
Explore beautiful and ugly buildings. Mathematics helps us create beautiful d...christianmathematics
 
Unit-IV; Professional Sales Representative (PSR).pptx
Unit-IV; Professional Sales Representative (PSR).pptxUnit-IV; Professional Sales Representative (PSR).pptx
Unit-IV; Professional Sales Representative (PSR).pptxVishalSingh1417
 
Paris 2024 Olympic Geographies - an activity
Paris 2024 Olympic Geographies - an activityParis 2024 Olympic Geographies - an activity
Paris 2024 Olympic Geographies - an activityGeoBlogs
 
Application orientated numerical on hev.ppt
Application orientated numerical on hev.pptApplication orientated numerical on hev.ppt
Application orientated numerical on hev.pptRamjanShidvankar
 
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.pptxAreebaZafar22
 
An Overview of Mutual Funds Bcom Project.pdf
An Overview of Mutual Funds Bcom Project.pdfAn Overview of Mutual Funds Bcom Project.pdf
An Overview of Mutual Funds Bcom Project.pdfSanaAli374401
 
Presentation by Andreas Schleicher Tackling the School Absenteeism Crisis 30 ...
Presentation by Andreas Schleicher Tackling the School Absenteeism Crisis 30 ...Presentation by Andreas Schleicher Tackling the School Absenteeism Crisis 30 ...
Presentation by Andreas Schleicher Tackling the School Absenteeism Crisis 30 ...EduSkills OECD
 
microwave assisted reaction. General introduction
microwave assisted reaction. General introductionmicrowave assisted reaction. General introduction
microwave assisted reaction. General introductionMaksud Ahmed
 
fourth grading exam for kindergarten in writing
fourth grading exam for kindergarten in writingfourth grading exam for kindergarten in writing
fourth grading exam for kindergarten in writingTeacherCyreneCayanan
 
How to Give a Domain for a Field in Odoo 17
How to Give a Domain for a Field in Odoo 17How to Give a Domain for a Field in Odoo 17
How to Give a Domain for a Field in Odoo 17Celine George
 
1029-Danh muc Sach Giao Khoa khoi 6.pdf
1029-Danh muc Sach Giao Khoa khoi  6.pdf1029-Danh muc Sach Giao Khoa khoi  6.pdf
1029-Danh muc Sach Giao Khoa khoi 6.pdfQucHHunhnh
 
Mixin Classes in Odoo 17 How to Extend Models Using Mixin Classes
Mixin Classes in Odoo 17  How to Extend Models Using Mixin ClassesMixin Classes in Odoo 17  How to Extend Models Using Mixin Classes
Mixin Classes in Odoo 17 How to Extend Models Using Mixin ClassesCeline George
 
Accessible design: Minimum effort, maximum impact
Accessible design: Minimum effort, maximum impactAccessible design: Minimum effort, maximum impact
Accessible design: Minimum effort, maximum impactdawncurless
 
1029 - Danh muc Sach Giao Khoa 10 . pdf
1029 -  Danh muc Sach Giao Khoa 10 . pdf1029 -  Danh muc Sach Giao Khoa 10 . pdf
1029 - Danh muc Sach Giao Khoa 10 . pdfQucHHunhnh
 
SOCIAL AND HISTORICAL CONTEXT - LFTVD.pptx
SOCIAL AND HISTORICAL CONTEXT - LFTVD.pptxSOCIAL AND HISTORICAL CONTEXT - LFTVD.pptx
SOCIAL AND HISTORICAL CONTEXT - LFTVD.pptxiammrhaywood
 

Último (20)

Advanced Views - Calendar View in Odoo 17
Advanced Views - Calendar View in Odoo 17Advanced Views - Calendar View in Odoo 17
Advanced Views - Calendar View in Odoo 17
 
Measures of Dispersion and Variability: Range, QD, AD and SD
Measures of Dispersion and Variability: Range, QD, AD and SDMeasures of Dispersion and Variability: Range, QD, AD and SD
Measures of Dispersion and Variability: Range, QD, AD and SD
 
SECOND SEMESTER TOPIC COVERAGE SY 2023-2024 Trends, Networks, and Critical Th...
SECOND SEMESTER TOPIC COVERAGE SY 2023-2024 Trends, Networks, and Critical Th...SECOND SEMESTER TOPIC COVERAGE SY 2023-2024 Trends, Networks, and Critical Th...
SECOND SEMESTER TOPIC COVERAGE SY 2023-2024 Trends, Networks, and Critical Th...
 
Mattingly "AI & Prompt Design: The Basics of Prompt Design"
Mattingly "AI & Prompt Design: The Basics of Prompt Design"Mattingly "AI & Prompt Design: The Basics of Prompt Design"
Mattingly "AI & Prompt Design: The Basics of Prompt Design"
 
Explore beautiful and ugly buildings. Mathematics helps us create beautiful d...
Explore beautiful and ugly buildings. Mathematics helps us create beautiful d...Explore beautiful and ugly buildings. Mathematics helps us create beautiful d...
Explore beautiful and ugly buildings. Mathematics helps us create beautiful d...
 
Unit-IV; Professional Sales Representative (PSR).pptx
Unit-IV; Professional Sales Representative (PSR).pptxUnit-IV; Professional Sales Representative (PSR).pptx
Unit-IV; Professional Sales Representative (PSR).pptx
 
Advance Mobile Application Development class 07
Advance Mobile Application Development class 07Advance Mobile Application Development class 07
Advance Mobile Application Development class 07
 
Paris 2024 Olympic Geographies - an activity
Paris 2024 Olympic Geographies - an activityParis 2024 Olympic Geographies - an activity
Paris 2024 Olympic Geographies - an activity
 
Application orientated numerical on hev.ppt
Application orientated numerical on hev.pptApplication orientated numerical on hev.ppt
Application orientated numerical on hev.ppt
 
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
 
An Overview of Mutual Funds Bcom Project.pdf
An Overview of Mutual Funds Bcom Project.pdfAn Overview of Mutual Funds Bcom Project.pdf
An Overview of Mutual Funds Bcom Project.pdf
 
Presentation by Andreas Schleicher Tackling the School Absenteeism Crisis 30 ...
Presentation by Andreas Schleicher Tackling the School Absenteeism Crisis 30 ...Presentation by Andreas Schleicher Tackling the School Absenteeism Crisis 30 ...
Presentation by Andreas Schleicher Tackling the School Absenteeism Crisis 30 ...
 
microwave assisted reaction. General introduction
microwave assisted reaction. General introductionmicrowave assisted reaction. General introduction
microwave assisted reaction. General introduction
 
fourth grading exam for kindergarten in writing
fourth grading exam for kindergarten in writingfourth grading exam for kindergarten in writing
fourth grading exam for kindergarten in writing
 
How to Give a Domain for a Field in Odoo 17
How to Give a Domain for a Field in Odoo 17How to Give a Domain for a Field in Odoo 17
How to Give a Domain for a Field in Odoo 17
 
1029-Danh muc Sach Giao Khoa khoi 6.pdf
1029-Danh muc Sach Giao Khoa khoi  6.pdf1029-Danh muc Sach Giao Khoa khoi  6.pdf
1029-Danh muc Sach Giao Khoa khoi 6.pdf
 
Mixin Classes in Odoo 17 How to Extend Models Using Mixin Classes
Mixin Classes in Odoo 17  How to Extend Models Using Mixin ClassesMixin Classes in Odoo 17  How to Extend Models Using Mixin Classes
Mixin Classes in Odoo 17 How to Extend Models Using Mixin Classes
 
Accessible design: Minimum effort, maximum impact
Accessible design: Minimum effort, maximum impactAccessible design: Minimum effort, maximum impact
Accessible design: Minimum effort, maximum impact
 
1029 - Danh muc Sach Giao Khoa 10 . pdf
1029 -  Danh muc Sach Giao Khoa 10 . pdf1029 -  Danh muc Sach Giao Khoa 10 . pdf
1029 - Danh muc Sach Giao Khoa 10 . pdf
 
SOCIAL AND HISTORICAL CONTEXT - LFTVD.pptx
SOCIAL AND HISTORICAL CONTEXT - LFTVD.pptxSOCIAL AND HISTORICAL CONTEXT - LFTVD.pptx
SOCIAL AND HISTORICAL CONTEXT - LFTVD.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