SlideShare une entreprise Scribd logo
1  sur  60
Télécharger pour lire hors ligne
OOP is not Dead
or why we should stop seeing FP as its opponent or as silver bullet
Hernán A. Wilkinson
@hernanwilkinson
agile software development & services
This will not be a war!
A little bit of
Context…
Oop is not Dead
Oop is not Dead
A little bit of
History…
Structured Programming,
when?
Oop is not Dead
Oop is not Dead
Oop is not Dead
Object Oriented
Programming, when?
Simula 67
Ole-Johan Dahl y Kristen Nygaard
Simula 67
Ole-Johan Dahl y Kristen Nygaard
OOP before
Structured
Programming??
Oop is not Dead
Oop is not Dead
Oop is not Dead
Oop is not Dead
Oop is not Dead
Oop is not Dead
Functional Programming,
when?
John McCarthy
Oop is not Dead
Oop is not Dead
Oop is not Dead
What does make Lisp great?
(always great! not, “great again”  )
LISP
(define (filtrar lista condicion)
(cond
((esta-vacia? lista) lista-vacia)
((condicion (primero-de lista)) (concatenar (primero-de lista) (filtrar (resto-de lista) condicion)))
(else (filtrar (resto-de lista) condicion))))
(filtrar ‘(1 4) (lambda (x) (< x 3)))
—> ‘(1)
(define smaller-than-three (lambda (x) (< x 3)))
(filtrar ‘(1 4) smaller-than-three)
—> ‘(1)
(define (smaller-than n) (lambda (x) (< x n)))
(filtrar ‘(1 4) (smaller-than 3))
—> ‘(1)
Lambda Functions
Meta-Circular
Meta-Circular
Meta-Circular
Meta-Circular
Meta-Circular
Dynamic! - REPL
What is Object Oriented
Programming?
Alan Kay
Dynabook (1970)
Oop is not Dead
I invented the term
Object-Oriented and I
can tell you I did not
have C++ in mind.
Java and C++ make you
think that the new ideas are
like the old ones. Java is the
most distressing thing to hit
computing since MS-DOS
What is Object Oriented?
• MUST
• Everything is an Object (data is an object, code is an object, classes are
objects, everything is an object!)
• Computation is done sending messages
• EITHER OR BOTH
• Classes and Sub classification as means of knowledge organization
• Objects as prototypes as means of knowledge organization
• REALLY NICE TO HAVE
• Immediate feedback
• Completely Reflective Environment (Meta-Circular)
Dynamic! More than REPL, Inspectors!
What OO is not
• Data types - int, long, double, etc. They are not objects
• Statements - for, while, if, etc. They are not messages
• Static methods - There is no “self/this” on static methods
• Final/Seal methods – There is no message send when used
• When ”code” is not an Object – No Closure or no Lambda, i.e. Java previous
1.8
• JEE is no OO, it is structured programming in Java
• Anemic classes is not OO (Services with DTO, etc)
• Use of Inheritance for Code reuse is not good OO (i.e. ActiveRecord , white
box frameworks, etc)
• Dependency Injection abuse is not OO
• IoC abuse is not OO
This is not OO – Filter in Java
What is Functional
Programming?
Wikipedia’s definition
• […] treats computation as the evaluation of mathematical functions
and avoids changing-state and mutable data.
• It is a declarative programming paradigm, which means programming
is done with expressions[…]instead of statements.
• Missing concepts from Wikipedia:
• Lambda functions (which allow High Order functions)
• Runtime support for recursive implementations (aka: tail recursion
elimination)
• Arguable:
• Lazy evaluation (more or less)
• Macro
Good OO Design favors
Immutable Objects!
This is not OO!
This IS OO!
Real OO Languages represent
“Code” as an object
(Closure  High Order Functions)
• Smalltalk since the ‘70s
• ”Closures got famous because Java don’t have them” (Anonymous)
Oop is not Dead
Some conclusions - Good OO implies:
• Immutable objects when representing immutable
entities
• Closure  “High order functions”
• Message sending all the way (expressions)
• Consistency (everything is an object)
• Knowledge representation and classification
(Programs are Models!)
Some conclusions about FP
• It is a mistake to think that FP is going to solve all the
software design problems.
• Design are made by humans, not by programming languages
(even though they influence design decisions)
• FP will suffer from the same “miss-used” problems as OO
suffers now
• FP does not provide a way to organize the knowledge
represented in the software  data structures are not
enough, we know that from Structured Programming
Some conclusions
•OOP vs. FP is an absurd dichotomy
•OOP and FP complement each other
•Do not act as a “Pop Programmer”
From where “language
programming paradigms shifts”
will come from?
For sure NOT from
• Performance improvements
• Less verbose languages
• Better type system (other complete topic to discuss)
• It is “normal science” (khun-onian way to say “more of
the same”)
They will come from
• Better tools to help human-machine communication
•Better environments to “augment” human intellect
•More dynamic environments to improve immediate
feedback
•…
•Let’s see some examples
Oop is not Dead
Oop is not Dead
Oop is not Dead
For a new
definition of
Programming
Paradigm!
For better tools!
agile software development & services
¡Gracias!

Contenu connexe

Tendances

Zend%20Certification%20REVIEW%20Document
Zend%20Certification%20REVIEW%20DocumentZend%20Certification%20REVIEW%20Document
Zend%20Certification%20REVIEW%20Documenttutorialsruby
 
Framework Design Guidelines
Framework Design GuidelinesFramework Design Guidelines
Framework Design GuidelinesMohamed Meligy
 
Stairway to scala flyer
Stairway to scala flyerStairway to scala flyer
Stairway to scala flyerdickwall
 
CS152 Programming Paradigm
CS152 Programming Paradigm CS152 Programming Paradigm
CS152 Programming Paradigm Kaya Ota
 
Aaa ped-3. Pythond: advanced concepts
Aaa ped-3. Pythond: advanced conceptsAaa ped-3. Pythond: advanced concepts
Aaa ped-3. Pythond: advanced conceptsAminaRepo
 
Type theory in practice
Type theory in practiceType theory in practice
Type theory in practiceGabriel Habryn
 
Keep Code Left - How to write better code in almost any language
Keep Code Left - How to write better code in almost any languageKeep Code Left - How to write better code in almost any language
Keep Code Left - How to write better code in almost any languageMick Andrew
 
A Review of Deep Contextualized Word Representations (Peters+, 2018)
A Review of Deep Contextualized Word Representations (Peters+, 2018)A Review of Deep Contextualized Word Representations (Peters+, 2018)
A Review of Deep Contextualized Word Representations (Peters+, 2018)Shuntaro Yada
 
Java data types, variables and jvm
Java data types, variables and jvm Java data types, variables and jvm
Java data types, variables and jvm Madishetty Prathibha
 
Functional programming ruby mty
Functional programming   ruby mtyFunctional programming   ruby mty
Functional programming ruby mtyAdrianGzz2112
 

Tendances (20)

Zend%20Certification%20REVIEW%20Document
Zend%20Certification%20REVIEW%20DocumentZend%20Certification%20REVIEW%20Document
Zend%20Certification%20REVIEW%20Document
 
Prolog
PrologProlog
Prolog
 
Yes scala can!
Yes scala can!Yes scala can!
Yes scala can!
 
Framework Design Guidelines
Framework Design GuidelinesFramework Design Guidelines
Framework Design Guidelines
 
OOPS Advanced
OOPS AdvancedOOPS Advanced
OOPS Advanced
 
Stairway to scala flyer
Stairway to scala flyerStairway to scala flyer
Stairway to scala flyer
 
Value Objects
Value ObjectsValue Objects
Value Objects
 
CS152 Programming Paradigm
CS152 Programming Paradigm CS152 Programming Paradigm
CS152 Programming Paradigm
 
Java – lexical issues
Java – lexical issuesJava – lexical issues
Java – lexical issues
 
Java tokens
Java tokensJava tokens
Java tokens
 
Aaa ped-3. Pythond: advanced concepts
Aaa ped-3. Pythond: advanced conceptsAaa ped-3. Pythond: advanced concepts
Aaa ped-3. Pythond: advanced concepts
 
Value Types
Value TypesValue Types
Value Types
 
Type theory in practice
Type theory in practiceType theory in practice
Type theory in practice
 
Keep Code Left - How to write better code in almost any language
Keep Code Left - How to write better code in almost any languageKeep Code Left - How to write better code in almost any language
Keep Code Left - How to write better code in almost any language
 
Flow control in Python
Flow control in PythonFlow control in Python
Flow control in Python
 
A Review of Deep Contextualized Word Representations (Peters+, 2018)
A Review of Deep Contextualized Word Representations (Peters+, 2018)A Review of Deep Contextualized Word Representations (Peters+, 2018)
A Review of Deep Contextualized Word Representations (Peters+, 2018)
 
Java data types, variables and jvm
Java data types, variables and jvm Java data types, variables and jvm
Java data types, variables and jvm
 
Lecture 1 oop
Lecture 1 oopLecture 1 oop
Lecture 1 oop
 
Scala’s implicits
Scala’s implicitsScala’s implicits
Scala’s implicits
 
Functional programming ruby mty
Functional programming   ruby mtyFunctional programming   ruby mty
Functional programming ruby mty
 

En vedette (6)

Desarrollo equipos basado en Modelo tuckman #Agiles2017
Desarrollo equipos basado en Modelo tuckman   #Agiles2017Desarrollo equipos basado en Modelo tuckman   #Agiles2017
Desarrollo equipos basado en Modelo tuckman #Agiles2017
 
Energia y Motivacion
Energia y MotivacionEnergia y Motivacion
Energia y Motivacion
 
Deployment Groups con VSTS
Deployment Groups con VSTSDeployment Groups con VSTS
Deployment Groups con VSTS
 
Developing Scrum Masters
Developing Scrum MastersDeveloping Scrum Masters
Developing Scrum Masters
 
En búsqueda del DevOps perdido
En búsqueda del DevOps perdidoEn búsqueda del DevOps perdido
En búsqueda del DevOps perdido
 
Hablemos de Contratos Ágiles
Hablemos de Contratos ÁgilesHablemos de Contratos Ágiles
Hablemos de Contratos Ágiles
 

Similaire à Oop is not Dead

Java Closures
Java ClosuresJava Closures
Java ClosuresBen Evans
 
Functional programming
Functional programmingFunctional programming
Functional programmingPrateek Jain
 
Are High Level Programming Languages for Multicore and Safety Critical Conver...
Are High Level Programming Languages for Multicore and Safety Critical Conver...Are High Level Programming Languages for Multicore and Safety Critical Conver...
Are High Level Programming Languages for Multicore and Safety Critical Conver...InfinIT - Innovationsnetværket for it
 
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
 
Introduction to Software - Coder Forge - John Mulhall
Introduction to Software - Coder Forge - John MulhallIntroduction to Software - Coder Forge - John Mulhall
Introduction to Software - Coder Forge - John MulhallJohn Mulhall
 
Chapter1_ObjectOrientedProgramming.pptx
Chapter1_ObjectOrientedProgramming.pptxChapter1_ObjectOrientedProgramming.pptx
Chapter1_ObjectOrientedProgramming.pptxpamyasstos
 
introduction of Object oriented programming
introduction of Object oriented programmingintroduction of Object oriented programming
introduction of Object oriented programmingRiturajJain8
 
The Rise of Functional Programming
The Rise of Functional ProgrammingThe Rise of Functional Programming
The Rise of Functional ProgrammingTjerk Wolterink
 
Fp for the oo programmer
Fp for the oo programmerFp for the oo programmer
Fp for the oo programmerShawn Button
 
Trends in programming languages
Trends in programming languagesTrends in programming languages
Trends in programming languagesAntya Dev
 
Introduction to functional programming (In Arabic)
Introduction to functional programming (In Arabic)Introduction to functional programming (In Arabic)
Introduction to functional programming (In Arabic)Omar Abdelhafith
 
Polyglot and Functional Programming (OSCON 2012)
Polyglot and Functional Programming (OSCON 2012)Polyglot and Functional Programming (OSCON 2012)
Polyglot and Functional Programming (OSCON 2012)Martijn Verburg
 
Natural Language Processing
Natural Language ProcessingNatural Language Processing
Natural Language ProcessingGeeks Anonymes
 
Into the Land of lambda, One Programmer's Journey Into Functional Programming
Into the Land of lambda, One Programmer's Journey Into Functional ProgrammingInto the Land of lambda, One Programmer's Journey Into Functional Programming
Into the Land of lambda, One Programmer's Journey Into Functional ProgrammingMike Pence
 
LISP: How I Learned To Stop Worrying And Love Parantheses
LISP: How I Learned To Stop Worrying And Love ParanthesesLISP: How I Learned To Stop Worrying And Love Parantheses
LISP: How I Learned To Stop Worrying And Love ParanthesesDominic Graefen
 
Functional solid
Functional solidFunctional solid
Functional solidMatt Stine
 

Similaire à Oop is not Dead (20)

Java Closures
Java ClosuresJava Closures
Java Closures
 
Functional programming
Functional programmingFunctional programming
Functional programming
 
Are High Level Programming Languages for Multicore and Safety Critical Conver...
Are High Level Programming Languages for Multicore and Safety Critical Conver...Are High Level Programming Languages for Multicore and Safety Critical Conver...
Are High Level Programming Languages for Multicore and Safety Critical Conver...
 
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)
 
Introduction to Software - Coder Forge - John Mulhall
Introduction to Software - Coder Forge - John MulhallIntroduction to Software - Coder Forge - John Mulhall
Introduction to Software - Coder Forge - John Mulhall
 
Chapter1_ObjectOrientedProgramming.pptx
Chapter1_ObjectOrientedProgramming.pptxChapter1_ObjectOrientedProgramming.pptx
Chapter1_ObjectOrientedProgramming.pptx
 
Presentation
PresentationPresentation
Presentation
 
introduction of Object oriented programming
introduction of Object oriented programmingintroduction of Object oriented programming
introduction of Object oriented programming
 
The Rise of Functional Programming
The Rise of Functional ProgrammingThe Rise of Functional Programming
The Rise of Functional Programming
 
Fp for the oo programmer
Fp for the oo programmerFp for the oo programmer
Fp for the oo programmer
 
Trends in programming languages
Trends in programming languagesTrends in programming languages
Trends in programming languages
 
Introduction to functional programming (In Arabic)
Introduction to functional programming (In Arabic)Introduction to functional programming (In Arabic)
Introduction to functional programming (In Arabic)
 
Polyglot and Functional Programming (OSCON 2012)
Polyglot and Functional Programming (OSCON 2012)Polyglot and Functional Programming (OSCON 2012)
Polyglot and Functional Programming (OSCON 2012)
 
PARADIGM IT.pptx
PARADIGM IT.pptxPARADIGM IT.pptx
PARADIGM IT.pptx
 
Metamorphic Domain-Specific Languages
Metamorphic Domain-Specific LanguagesMetamorphic Domain-Specific Languages
Metamorphic Domain-Specific Languages
 
Natural Language Processing
Natural Language ProcessingNatural Language Processing
Natural Language Processing
 
Into the Land of lambda, One Programmer's Journey Into Functional Programming
Into the Land of lambda, One Programmer's Journey Into Functional ProgrammingInto the Land of lambda, One Programmer's Journey Into Functional Programming
Into the Land of lambda, One Programmer's Journey Into Functional Programming
 
LISP: How I Learned To Stop Worrying And Love Parantheses
LISP: How I Learned To Stop Worrying And Love ParanthesesLISP: How I Learned To Stop Worrying And Love Parantheses
LISP: How I Learned To Stop Worrying And Love Parantheses
 
Functional solid
Functional solidFunctional solid
Functional solid
 
Scala Days NYC 2016
Scala Days NYC 2016Scala Days NYC 2016
Scala Days NYC 2016
 

Plus de Hernan Wilkinson

Hacia una síntesis de diseño a partir de entender qué es modelar con software
Hacia una síntesis de diseño a partir de entender qué es modelar con softwareHacia una síntesis de diseño a partir de entender qué es modelar con software
Hacia una síntesis de diseño a partir de entender qué es modelar con softwareHernan Wilkinson
 
Live Typing - California Smalltalkers
Live Typing - California SmalltalkersLive Typing - California Smalltalkers
Live Typing - California SmalltalkersHernan Wilkinson
 
Buenos Aires vs. (London vs. Chicago) Agiles 2020
Buenos Aires vs. (London vs. Chicago) Agiles 2020Buenos Aires vs. (London vs. Chicago) Agiles 2020
Buenos Aires vs. (London vs. Chicago) Agiles 2020Hernan Wilkinson
 
LiveTyping - Anotación automática de tipos para lenguajes dinámicos
LiveTyping - Anotación automática de tipos para lenguajes dinámicosLiveTyping - Anotación automática de tipos para lenguajes dinámicos
LiveTyping - Anotación automática de tipos para lenguajes dinámicosHernan Wilkinson
 
LiveTyping: Update and What is next
LiveTyping: Update and What is nextLiveTyping: Update and What is next
LiveTyping: Update and What is nextHernan Wilkinson
 
Cuis smalltalk past present and future
Cuis smalltalk past present and futureCuis smalltalk past present and future
Cuis smalltalk past present and futureHernan Wilkinson
 
Live Typing - Automatic Type Annotation that improves the Programming eXperie...
Live Typing- Automatic Type Annotation that improves the Programming eXperie...Live Typing- Automatic Type Annotation that improves the Programming eXperie...
Live Typing - Automatic Type Annotation that improves the Programming eXperie...Hernan Wilkinson
 
El Desarrollo de Software como debería Ser - PyConAr 2018
El Desarrollo de Software como debería Ser - PyConAr 2018El Desarrollo de Software como debería Ser - PyConAr 2018
El Desarrollo de Software como debería Ser - PyConAr 2018Hernan Wilkinson
 
Lessons Learned Implementing Refactorings
Lessons Learned Implementing RefactoringsLessons Learned Implementing Refactorings
Lessons Learned Implementing RefactoringsHernan Wilkinson
 
El Desarrollo de Software como debería Ser - Nerdear.la 2018
El Desarrollo de Software como debería Ser - Nerdear.la 2018El Desarrollo de Software como debería Ser - Nerdear.la 2018
El Desarrollo de Software como debería Ser - Nerdear.la 2018Hernan Wilkinson
 
El Desarrollo de Software como debería Ser
El Desarrollo de Software como debería SerEl Desarrollo de Software como debería Ser
El Desarrollo de Software como debería SerHernan Wilkinson
 
Go/Ruby/Java: What's next?
Go/Ruby/Java: What's next?Go/Ruby/Java: What's next?
Go/Ruby/Java: What's next?Hernan Wilkinson
 
Exceptions: Why, When, How and Where!
Exceptions: Why, When, How and Where!Exceptions: Why, When, How and Where!
Exceptions: Why, When, How and Where!Hernan Wilkinson
 
Augmenting Smalltalk Syntax
Augmenting Smalltalk SyntaxAugmenting Smalltalk Syntax
Augmenting Smalltalk SyntaxHernan Wilkinson
 
Growing an open participative horizontal and based on trust company
Growing an open participative horizontal and based on trust companyGrowing an open participative horizontal and based on trust company
Growing an open participative horizontal and based on trust companyHernan Wilkinson
 
Como escribir buenos tests al hacer TDD
Como escribir buenos tests al hacer TDDComo escribir buenos tests al hacer TDD
Como escribir buenos tests al hacer TDDHernan Wilkinson
 
Desarrollando sistemas con metodologías y técnicas agiles
Desarrollando sistemas con metodologías y técnicas agilesDesarrollando sistemas con metodologías y técnicas agiles
Desarrollando sistemas con metodologías y técnicas agilesHernan Wilkinson
 

Plus de Hernan Wilkinson (20)

Hacia una síntesis de diseño a partir de entender qué es modelar con software
Hacia una síntesis de diseño a partir de entender qué es modelar con softwareHacia una síntesis de diseño a partir de entender qué es modelar con software
Hacia una síntesis de diseño a partir de entender qué es modelar con software
 
Live Typing - California Smalltalkers
Live Typing - California SmalltalkersLive Typing - California Smalltalkers
Live Typing - California Smalltalkers
 
Buenos Aires vs. (London vs. Chicago) Agiles 2020
Buenos Aires vs. (London vs. Chicago) Agiles 2020Buenos Aires vs. (London vs. Chicago) Agiles 2020
Buenos Aires vs. (London vs. Chicago) Agiles 2020
 
LiveTyping - Anotación automática de tipos para lenguajes dinámicos
LiveTyping - Anotación automática de tipos para lenguajes dinámicosLiveTyping - Anotación automática de tipos para lenguajes dinámicos
LiveTyping - Anotación automática de tipos para lenguajes dinámicos
 
LiveTyping: Update and What is next
LiveTyping: Update and What is nextLiveTyping: Update and What is next
LiveTyping: Update and What is next
 
Cuis smalltalk past present and future
Cuis smalltalk past present and futureCuis smalltalk past present and future
Cuis smalltalk past present and future
 
Live Typing - Automatic Type Annotation that improves the Programming eXperie...
Live Typing- Automatic Type Annotation that improves the Programming eXperie...Live Typing- Automatic Type Annotation that improves the Programming eXperie...
Live Typing - Automatic Type Annotation that improves the Programming eXperie...
 
El Desarrollo de Software como debería Ser - PyConAr 2018
El Desarrollo de Software como debería Ser - PyConAr 2018El Desarrollo de Software como debería Ser - PyConAr 2018
El Desarrollo de Software como debería Ser - PyConAr 2018
 
Lessons Learned Implementing Refactorings
Lessons Learned Implementing RefactoringsLessons Learned Implementing Refactorings
Lessons Learned Implementing Refactorings
 
Dynamic Type Information
Dynamic Type InformationDynamic Type Information
Dynamic Type Information
 
El Desarrollo de Software como debería Ser - Nerdear.la 2018
El Desarrollo de Software como debería Ser - Nerdear.la 2018El Desarrollo de Software como debería Ser - Nerdear.la 2018
El Desarrollo de Software como debería Ser - Nerdear.la 2018
 
El Desarrollo de Software como debería Ser
El Desarrollo de Software como debería SerEl Desarrollo de Software como debería Ser
El Desarrollo de Software como debería Ser
 
TDD & Refactoring
TDD & RefactoringTDD & Refactoring
TDD & Refactoring
 
Go/Ruby/Java: What's next?
Go/Ruby/Java: What's next?Go/Ruby/Java: What's next?
Go/Ruby/Java: What's next?
 
Exceptions: Why, When, How and Where!
Exceptions: Why, When, How and Where!Exceptions: Why, When, How and Where!
Exceptions: Why, When, How and Where!
 
CuisUniversity
CuisUniversityCuisUniversity
CuisUniversity
 
Augmenting Smalltalk Syntax
Augmenting Smalltalk SyntaxAugmenting Smalltalk Syntax
Augmenting Smalltalk Syntax
 
Growing an open participative horizontal and based on trust company
Growing an open participative horizontal and based on trust companyGrowing an open participative horizontal and based on trust company
Growing an open participative horizontal and based on trust company
 
Como escribir buenos tests al hacer TDD
Como escribir buenos tests al hacer TDDComo escribir buenos tests al hacer TDD
Como escribir buenos tests al hacer TDD
 
Desarrollando sistemas con metodologías y técnicas agiles
Desarrollando sistemas con metodologías y técnicas agilesDesarrollando sistemas con metodologías y técnicas agiles
Desarrollando sistemas con metodologías y técnicas agiles
 

Dernier

Optimizing Business Potential: A Guide to Outsourcing Engineering Services in...
Optimizing Business Potential: A Guide to Outsourcing Engineering Services in...Optimizing Business Potential: A Guide to Outsourcing Engineering Services in...
Optimizing Business Potential: A Guide to Outsourcing Engineering Services in...Jaydeep Chhasatia
 
ARM Talk @ Rejekts - Will ARM be the new Mainstream in our Data Centers_.pdf
ARM Talk @ Rejekts - Will ARM be the new Mainstream in our Data Centers_.pdfARM Talk @ Rejekts - Will ARM be the new Mainstream in our Data Centers_.pdf
ARM Talk @ Rejekts - Will ARM be the new Mainstream in our Data Centers_.pdfTobias Schneck
 
20240319 Car Simulator Plan.pptx . Plan for a JavaScript Car Driving Simulator.
20240319 Car Simulator Plan.pptx . Plan for a JavaScript Car Driving Simulator.20240319 Car Simulator Plan.pptx . Plan for a JavaScript Car Driving Simulator.
20240319 Car Simulator Plan.pptx . Plan for a JavaScript Car Driving Simulator.Sharon Liu
 
How Does the Epitome of Spyware Differ from Other Malicious Software?
How Does the Epitome of Spyware Differ from Other Malicious Software?How Does the Epitome of Spyware Differ from Other Malicious Software?
How Does the Epitome of Spyware Differ from Other Malicious Software?AmeliaSmith90
 
Cybersecurity Challenges with Generative AI - for Good and Bad
Cybersecurity Challenges with Generative AI - for Good and BadCybersecurity Challenges with Generative AI - for Good and Bad
Cybersecurity Challenges with Generative AI - for Good and BadIvo Andreev
 
Introduction-to-Software-Development-Outsourcing.pptx
Introduction-to-Software-Development-Outsourcing.pptxIntroduction-to-Software-Development-Outsourcing.pptx
Introduction-to-Software-Development-Outsourcing.pptxIntelliSource Technologies
 
IA Generativa y Grafos de Neo4j: RAG time
IA Generativa y Grafos de Neo4j: RAG timeIA Generativa y Grafos de Neo4j: RAG time
IA Generativa y Grafos de Neo4j: RAG timeNeo4j
 
Leveraging DxSherpa's Generative AI Services to Unlock Human-Machine Harmony
Leveraging DxSherpa's Generative AI Services to Unlock Human-Machine HarmonyLeveraging DxSherpa's Generative AI Services to Unlock Human-Machine Harmony
Leveraging DxSherpa's Generative AI Services to Unlock Human-Machine Harmonyelliciumsolutionspun
 
Webinar_050417_LeClair12345666777889.ppt
Webinar_050417_LeClair12345666777889.pptWebinar_050417_LeClair12345666777889.ppt
Webinar_050417_LeClair12345666777889.pptkinjal48
 
Enterprise Document Management System - Qualityze Inc
Enterprise Document Management System - Qualityze IncEnterprise Document Management System - Qualityze Inc
Enterprise Document Management System - Qualityze Incrobinwilliams8624
 
Why Choose Brain Inventory For Ecommerce Development.pdf
Why Choose Brain Inventory For Ecommerce Development.pdfWhy Choose Brain Inventory For Ecommerce Development.pdf
Why Choose Brain Inventory For Ecommerce Development.pdfBrain Inventory
 
Generative AI for Cybersecurity - EC-Council
Generative AI for Cybersecurity - EC-CouncilGenerative AI for Cybersecurity - EC-Council
Generative AI for Cybersecurity - EC-CouncilVICTOR MAESTRE RAMIREZ
 
Big Data Bellevue Meetup | Enhancing Python Data Loading in the Cloud for AI/ML
Big Data Bellevue Meetup | Enhancing Python Data Loading in the Cloud for AI/MLBig Data Bellevue Meetup | Enhancing Python Data Loading in the Cloud for AI/ML
Big Data Bellevue Meetup | Enhancing Python Data Loading in the Cloud for AI/MLAlluxio, Inc.
 
Deep Learning for Images with PyTorch - Datacamp
Deep Learning for Images with PyTorch - DatacampDeep Learning for Images with PyTorch - Datacamp
Deep Learning for Images with PyTorch - DatacampVICTOR MAESTRE RAMIREZ
 
Fields in Java and Kotlin and what to expect.pptx
Fields in Java and Kotlin and what to expect.pptxFields in Java and Kotlin and what to expect.pptx
Fields in Java and Kotlin and what to expect.pptxJoão Esperancinha
 
online pdf editor software solutions.pdf
online pdf editor software solutions.pdfonline pdf editor software solutions.pdf
online pdf editor software solutions.pdfMeon Technology
 
Streamlining Your Application Builds with Cloud Native Buildpacks
Streamlining Your Application Builds  with Cloud Native BuildpacksStreamlining Your Application Builds  with Cloud Native Buildpacks
Streamlining Your Application Builds with Cloud Native BuildpacksVish Abrams
 
Growing Oxen: channel operators and retries
Growing Oxen: channel operators and retriesGrowing Oxen: channel operators and retries
Growing Oxen: channel operators and retriesSoftwareMill
 
Your Vision, Our Expertise: TECUNIQUE's Tailored Software Teams
Your Vision, Our Expertise: TECUNIQUE's Tailored Software TeamsYour Vision, Our Expertise: TECUNIQUE's Tailored Software Teams
Your Vision, Our Expertise: TECUNIQUE's Tailored Software TeamsJaydeep Chhasatia
 
Top Software Development Trends in 2024
Top Software Development Trends in  2024Top Software Development Trends in  2024
Top Software Development Trends in 2024Mind IT Systems
 

Dernier (20)

Optimizing Business Potential: A Guide to Outsourcing Engineering Services in...
Optimizing Business Potential: A Guide to Outsourcing Engineering Services in...Optimizing Business Potential: A Guide to Outsourcing Engineering Services in...
Optimizing Business Potential: A Guide to Outsourcing Engineering Services in...
 
ARM Talk @ Rejekts - Will ARM be the new Mainstream in our Data Centers_.pdf
ARM Talk @ Rejekts - Will ARM be the new Mainstream in our Data Centers_.pdfARM Talk @ Rejekts - Will ARM be the new Mainstream in our Data Centers_.pdf
ARM Talk @ Rejekts - Will ARM be the new Mainstream in our Data Centers_.pdf
 
20240319 Car Simulator Plan.pptx . Plan for a JavaScript Car Driving Simulator.
20240319 Car Simulator Plan.pptx . Plan for a JavaScript Car Driving Simulator.20240319 Car Simulator Plan.pptx . Plan for a JavaScript Car Driving Simulator.
20240319 Car Simulator Plan.pptx . Plan for a JavaScript Car Driving Simulator.
 
How Does the Epitome of Spyware Differ from Other Malicious Software?
How Does the Epitome of Spyware Differ from Other Malicious Software?How Does the Epitome of Spyware Differ from Other Malicious Software?
How Does the Epitome of Spyware Differ from Other Malicious Software?
 
Cybersecurity Challenges with Generative AI - for Good and Bad
Cybersecurity Challenges with Generative AI - for Good and BadCybersecurity Challenges with Generative AI - for Good and Bad
Cybersecurity Challenges with Generative AI - for Good and Bad
 
Introduction-to-Software-Development-Outsourcing.pptx
Introduction-to-Software-Development-Outsourcing.pptxIntroduction-to-Software-Development-Outsourcing.pptx
Introduction-to-Software-Development-Outsourcing.pptx
 
IA Generativa y Grafos de Neo4j: RAG time
IA Generativa y Grafos de Neo4j: RAG timeIA Generativa y Grafos de Neo4j: RAG time
IA Generativa y Grafos de Neo4j: RAG time
 
Leveraging DxSherpa's Generative AI Services to Unlock Human-Machine Harmony
Leveraging DxSherpa's Generative AI Services to Unlock Human-Machine HarmonyLeveraging DxSherpa's Generative AI Services to Unlock Human-Machine Harmony
Leveraging DxSherpa's Generative AI Services to Unlock Human-Machine Harmony
 
Webinar_050417_LeClair12345666777889.ppt
Webinar_050417_LeClair12345666777889.pptWebinar_050417_LeClair12345666777889.ppt
Webinar_050417_LeClair12345666777889.ppt
 
Enterprise Document Management System - Qualityze Inc
Enterprise Document Management System - Qualityze IncEnterprise Document Management System - Qualityze Inc
Enterprise Document Management System - Qualityze Inc
 
Why Choose Brain Inventory For Ecommerce Development.pdf
Why Choose Brain Inventory For Ecommerce Development.pdfWhy Choose Brain Inventory For Ecommerce Development.pdf
Why Choose Brain Inventory For Ecommerce Development.pdf
 
Generative AI for Cybersecurity - EC-Council
Generative AI for Cybersecurity - EC-CouncilGenerative AI for Cybersecurity - EC-Council
Generative AI for Cybersecurity - EC-Council
 
Big Data Bellevue Meetup | Enhancing Python Data Loading in the Cloud for AI/ML
Big Data Bellevue Meetup | Enhancing Python Data Loading in the Cloud for AI/MLBig Data Bellevue Meetup | Enhancing Python Data Loading in the Cloud for AI/ML
Big Data Bellevue Meetup | Enhancing Python Data Loading in the Cloud for AI/ML
 
Deep Learning for Images with PyTorch - Datacamp
Deep Learning for Images with PyTorch - DatacampDeep Learning for Images with PyTorch - Datacamp
Deep Learning for Images with PyTorch - Datacamp
 
Fields in Java and Kotlin and what to expect.pptx
Fields in Java and Kotlin and what to expect.pptxFields in Java and Kotlin and what to expect.pptx
Fields in Java and Kotlin and what to expect.pptx
 
online pdf editor software solutions.pdf
online pdf editor software solutions.pdfonline pdf editor software solutions.pdf
online pdf editor software solutions.pdf
 
Streamlining Your Application Builds with Cloud Native Buildpacks
Streamlining Your Application Builds  with Cloud Native BuildpacksStreamlining Your Application Builds  with Cloud Native Buildpacks
Streamlining Your Application Builds with Cloud Native Buildpacks
 
Growing Oxen: channel operators and retries
Growing Oxen: channel operators and retriesGrowing Oxen: channel operators and retries
Growing Oxen: channel operators and retries
 
Your Vision, Our Expertise: TECUNIQUE's Tailored Software Teams
Your Vision, Our Expertise: TECUNIQUE's Tailored Software TeamsYour Vision, Our Expertise: TECUNIQUE's Tailored Software Teams
Your Vision, Our Expertise: TECUNIQUE's Tailored Software Teams
 
Top Software Development Trends in 2024
Top Software Development Trends in  2024Top Software Development Trends in  2024
Top Software Development Trends in 2024
 

Oop is not Dead

  • 1. OOP is not Dead or why we should stop seeing FP as its opponent or as silver bullet Hernán A. Wilkinson @hernanwilkinson agile software development & services
  • 2. This will not be a war!
  • 3. A little bit of Context…
  • 6. A little bit of History…
  • 12. Simula 67 Ole-Johan Dahl y Kristen Nygaard
  • 13. Simula 67 Ole-Johan Dahl y Kristen Nygaard
  • 26. What does make Lisp great? (always great! not, “great again”  ) LISP
  • 27. (define (filtrar lista condicion) (cond ((esta-vacia? lista) lista-vacia) ((condicion (primero-de lista)) (concatenar (primero-de lista) (filtrar (resto-de lista) condicion))) (else (filtrar (resto-de lista) condicion)))) (filtrar ‘(1 4) (lambda (x) (< x 3))) —> ‘(1) (define smaller-than-three (lambda (x) (< x 3))) (filtrar ‘(1 4) smaller-than-three) —> ‘(1) (define (smaller-than n) (lambda (x) (< x n))) (filtrar ‘(1 4) (smaller-than 3)) —> ‘(1) Lambda Functions
  • 34. What is Object Oriented Programming?
  • 38. I invented the term Object-Oriented and I can tell you I did not have C++ in mind. Java and C++ make you think that the new ideas are like the old ones. Java is the most distressing thing to hit computing since MS-DOS
  • 39. What is Object Oriented? • MUST • Everything is an Object (data is an object, code is an object, classes are objects, everything is an object!) • Computation is done sending messages • EITHER OR BOTH • Classes and Sub classification as means of knowledge organization • Objects as prototypes as means of knowledge organization • REALLY NICE TO HAVE • Immediate feedback • Completely Reflective Environment (Meta-Circular)
  • 40. Dynamic! More than REPL, Inspectors!
  • 41. What OO is not • Data types - int, long, double, etc. They are not objects • Statements - for, while, if, etc. They are not messages • Static methods - There is no “self/this” on static methods • Final/Seal methods – There is no message send when used • When ”code” is not an Object – No Closure or no Lambda, i.e. Java previous 1.8 • JEE is no OO, it is structured programming in Java • Anemic classes is not OO (Services with DTO, etc) • Use of Inheritance for Code reuse is not good OO (i.e. ActiveRecord , white box frameworks, etc) • Dependency Injection abuse is not OO • IoC abuse is not OO
  • 42. This is not OO – Filter in Java
  • 44. Wikipedia’s definition • […] treats computation as the evaluation of mathematical functions and avoids changing-state and mutable data. • It is a declarative programming paradigm, which means programming is done with expressions[…]instead of statements. • Missing concepts from Wikipedia: • Lambda functions (which allow High Order functions) • Runtime support for recursive implementations (aka: tail recursion elimination) • Arguable: • Lazy evaluation (more or less) • Macro
  • 45. Good OO Design favors Immutable Objects!
  • 46. This is not OO!
  • 48. Real OO Languages represent “Code” as an object (Closure  High Order Functions) • Smalltalk since the ‘70s • ”Closures got famous because Java don’t have them” (Anonymous)
  • 50. Some conclusions - Good OO implies: • Immutable objects when representing immutable entities • Closure  “High order functions” • Message sending all the way (expressions) • Consistency (everything is an object) • Knowledge representation and classification (Programs are Models!)
  • 51. Some conclusions about FP • It is a mistake to think that FP is going to solve all the software design problems. • Design are made by humans, not by programming languages (even though they influence design decisions) • FP will suffer from the same “miss-used” problems as OO suffers now • FP does not provide a way to organize the knowledge represented in the software  data structures are not enough, we know that from Structured Programming
  • 52. Some conclusions •OOP vs. FP is an absurd dichotomy •OOP and FP complement each other •Do not act as a “Pop Programmer”
  • 53. From where “language programming paradigms shifts” will come from?
  • 54. For sure NOT from • Performance improvements • Less verbose languages • Better type system (other complete topic to discuss) • It is “normal science” (khun-onian way to say “more of the same”)
  • 55. They will come from • Better tools to help human-machine communication •Better environments to “augment” human intellect •More dynamic environments to improve immediate feedback •… •Let’s see some examples
  • 59. For a new definition of Programming Paradigm! For better tools!
  • 60. agile software development & services ¡Gracias!