OOP Paradigm 1: Abstract Thinking and Programming Paradigm
description
Transcript of OOP Paradigm 1: Abstract Thinking and Programming Paradigm
Object Oriented Programming Paradigm
1. Abstraction Thinking and Programming Paradigm
Outline Programming Paradigm Abstraction Thinking Main Programming Paradigms
Programming Languages
Ruby
Python C#Java
JavaScr
ipt
ScalaErl
ang
F#
Fort
ress
NemerleBoo
Groovy
PHP
Perl
Lua
PowerShell
D
C+
+
Go
Clojure
Design Pattern
Design Principle
Programming Paradigm
Paradigm
Programming Paradigms
Concurrent
Imperative
Meta-Programming
Object- Oriented
Aspect-Oriented
Functional
Example: Database Paradigm
ER•Oracle•MySQL
Key-Value
•BerkeleyDB•BigTable
Full-Text
•Lucene
Object
•Db4O
Outline Programming Paradigm Abstraction Thinking Main Programming Paradigms
The most important ability of programmer
Abstract Thinking
Study
Coding
Communication
What’s is Abstract?
Abstract is Glasses
What is he looking for?
Abstraction is the unchanged in change
Abstraction Dimension
UML: a diagram is a dimension
Abstraction Hierarchy
Summary Abstraction Dimension Abstraction Hierarchy
Outline Programming Paradigm Abstraction Thinking Main Programming Paradigms
Programming Paradigms
Hilbert
Turing
von Neumann
Dijkstra
Knuth
Ritchie
Church
McCarthy
Curry
Algorithm
David Hilbert,1862 –1943
Hilbert 10th Problem
Find an algorithm to determine whether a given polynomial Diophantine equation with integer coefficients has an integer solution
Imperative vs Declarative
Hilbert
Turing
von Neumann
Dijkstra
Knuth
Ritchie
Church
McCarthy
Curry
What’s Computable?
Alan Turing, 1912 – 1954
Turing Machine
Socket State Machine
Von Neumann Architecture
Von Neumann, 1903 –1957
Von Neumann Architecture
Stored Program
Imperative Programming
DataInstructio
ns
Input
Output
Program = Data Structure + Algorithm
Assembly Language
Procedural Programming
Procedure Abstraction
Imperative Programming
Procedural Programming
Procedure Abstraction How to do => What to do, e.g. gcd(int a, int b) Procedure Hierarchy Modular
Structured Programming
Edsger Wybe Dijkstra, 1930 - 2002
Dijkstra: Goto is Harmful
Static Program vs Dynamic Process
Structured Program Theorem
Sequence
Selection
Repetition
Structured Programming
Imperative Programming Paradigm
Imparative
Structured
Procedual
Imperative Programming Languages
CBASICPASCAL
FortanAda
Assembly
Imperative vs Declarative
Hilbert
Turing
von Neumann
Dijkstra
Knuth
Ritchie
Church
McCarthy
Curry
What is computable?
Alonzo Church, 1903 - 1995
Church-Turing Thesis
Lambda Calculus = Turing Machine
Functional Programming
lambda(x, y) => x + y
(x, y) x + y
It’s all about functions
Higher Order Function let f = lambda(x, y) => x + y
f(1, 2) = 1 + 2 = 3 f(5, y) = 5 + y f(5, y)(10) = 5 + 10 = 15
let g = lambda(x, y) = x * y f(x, g) = x + g //lambda(x, y, z) => x + y * z
Type let make_pair = lambda(x, y) => (x, y) let left = lambda(x, y) => x let right = lambda(x, y) => y
left(make_pair(x, y)) = x right(make_pair(x, y)) = y
Dataflow Programming
[x1, x2, x3, …] [y1, y2, y3, …]
Dataflow Programming: Stack
[(push 1), (push 2), pop, pop, …] [2, a, …]
Functional Programming Paradigm
Higher-Order Function
Reference TransparentNo Side Effect
Program = Function Evaluation
Lazy EvaluationClosure
Functional Programming Languages
LISPHaskell
C#3.0
Perl
Ruby
ErlangScala
Imperative vs Declarative
Declarative ProblemImperative Machine
Object Oriented Programming Paradigm
Data Abstraction and Encapsulation
Barbara Liskov, 1939 -
Data Abstraction and Encapsulation
OperationData Object
Everything is object
Data Abstraction and Encapsulation
Closure Object
Everything is object
Lambda
Object Hierarchy
Object Relationship and Interaction
Type and Class
Car
Type Hierarchy
OO Programming Paradigm
Encapsulation
InheritancePolymorphism
Program = Collaborating Objects
OO Programming Languages
JavaC++
C#RubyPython
Smalltalk
Javascript
Summary Abstract Thinking
Imperative vs Functional Programming Paradigms
OO Programming Paradigm