oop is not dead

60
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

Upload: hernan-wilkinson

Post on 23-Jan-2018

801 views

Category:

Software


2 download

TRANSCRIPT

Page 1: Oop is not Dead

OOP is not Deador why we should stop seeing FP as its opponent or as silver bullet

Hernán A. Wilkinson

@hernanwilkinson

agile software development & services

Page 2: Oop is not Dead

This will not be a war!

Page 3: Oop is not Dead

A little bit of Context…

Page 4: Oop is not Dead
Page 5: Oop is not Dead
Page 6: Oop is not Dead

A little bit of History…

Page 7: Oop is not Dead

Structured Programming, when?

Page 8: Oop is not Dead
Page 9: Oop is not Dead
Page 10: Oop is not Dead
Page 11: Oop is not Dead

Object Oriented Programming, when?

Page 12: Oop is not Dead

Simula 67Ole-Johan Dahl y Kristen Nygaard

Page 13: Oop is not Dead

Simula 67Ole-Johan Dahl y Kristen Nygaard

Page 14: Oop is not Dead

OOP before Structured Programming??

Page 15: Oop is not Dead
Page 16: Oop is not Dead
Page 17: Oop is not Dead
Page 18: Oop is not Dead
Page 19: Oop is not Dead
Page 20: Oop is not Dead
Page 21: Oop is not Dead

Functional Programming, when?

Page 22: Oop is not Dead

John McCarthy

Page 23: Oop is not Dead
Page 24: Oop is not Dead
Page 25: Oop is not Dead
Page 26: Oop is not Dead

What does make Lisp great?(always great! not, “great again” )

LISP

Page 27: Oop is not Dead

(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

Page 28: Oop is not Dead

Meta-Circular

Page 29: Oop is not Dead

Meta-Circular

Page 30: Oop is not Dead

Meta-Circular

Page 31: Oop is not Dead

Meta-Circular

Page 32: Oop is not Dead

Meta-Circular

Page 33: Oop is not Dead

Dynamic! - REPL

Page 34: Oop is not Dead

What is Object Oriented Programming?

Page 35: Oop is not Dead

Alan Kay

Page 36: Oop is not Dead

Dynabook (1970)

Page 37: Oop is not Dead
Page 38: 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

Page 39: Oop is not Dead

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)

Page 40: Oop is not Dead

Dynamic! More than REPL, Inspectors!

Page 41: Oop is not Dead

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

Page 42: Oop is not Dead

This is not OO – Filter in Java

Page 43: Oop is not Dead

What is Functional Programming?

Page 44: Oop is not Dead

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

Page 45: Oop is not Dead

Good OO Design favors Immutable Objects!

Page 46: Oop is not Dead

This is not OO!

Page 47: Oop is not Dead

This IS OO!

Page 48: Oop is not Dead

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)

Page 49: Oop is not Dead
Page 50: 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!)

Page 51: Oop is not Dead

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

Page 52: Oop is not Dead

Some conclusions

•OOP vs. FP is an absurd dichotomy

•OOP and FP complement each other

•Do not act as a “Pop Programmer”

Page 53: Oop is not Dead

From where “language programming paradigms shifts”

will come from?

Page 54: Oop is not Dead

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”)

Page 55: Oop is not Dead

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

Page 56: Oop is not Dead
Page 57: Oop is not Dead
Page 58: Oop is not Dead
Page 59: Oop is not Dead

For a new definition of

Programming Paradigm!

For better tools!

Page 60: Oop is not Dead

agile software development & services

¡Gracias!