OOP Paradigm 1: Abstract Thinking and Programming Paradigm

60
Object Oriented Programming Paradigm 1. Abstraction Thinking and Programming Paradigm

description

 

Transcript of OOP Paradigm 1: Abstract Thinking and Programming Paradigm

Page 1: OOP Paradigm 1: Abstract Thinking and Programming Paradigm

Object Oriented Programming Paradigm

1. Abstraction Thinking and Programming Paradigm

Page 2: OOP Paradigm 1: Abstract Thinking and Programming Paradigm

Outline Programming Paradigm Abstraction Thinking Main Programming Paradigms

Page 3: OOP Paradigm 1: Abstract Thinking and Programming Paradigm

Programming Languages

Ruby

Python C#Java

JavaScr

ipt

ScalaErl

ang

F#

Fort

ress

NemerleBoo

Groovy

PHP

Perl

Lua

PowerShell

D

C+

+

Go

Clojure

Page 4: OOP Paradigm 1: Abstract Thinking and Programming Paradigm

Design Pattern

Page 5: OOP Paradigm 1: Abstract Thinking and Programming Paradigm

Design Principle

Page 6: OOP Paradigm 1: Abstract Thinking and Programming Paradigm

Programming Paradigm

Paradigm

Page 7: OOP Paradigm 1: Abstract Thinking and Programming Paradigm

Programming Paradigms

Concurrent

Imperative

Meta-Programming

Object- Oriented

Aspect-Oriented

Functional

Page 8: OOP Paradigm 1: Abstract Thinking and Programming Paradigm

Example: Database Paradigm

ER•Oracle•MySQL

Key-Value

•BerkeleyDB•BigTable

Full-Text

•Lucene

Object

•Db4O

Page 9: OOP Paradigm 1: Abstract Thinking and Programming Paradigm

Outline Programming Paradigm Abstraction Thinking Main Programming Paradigms

Page 10: OOP Paradigm 1: Abstract Thinking and Programming Paradigm

The most important ability of programmer

Abstract Thinking

Study

Coding

Communication

Page 11: OOP Paradigm 1: Abstract Thinking and Programming Paradigm

What’s is Abstract?

Page 12: OOP Paradigm 1: Abstract Thinking and Programming Paradigm

Abstract is Glasses

Page 13: OOP Paradigm 1: Abstract Thinking and Programming Paradigm

What is he looking for?

Page 14: OOP Paradigm 1: Abstract Thinking and Programming Paradigm

Abstraction is the unchanged in change

Page 15: OOP Paradigm 1: Abstract Thinking and Programming Paradigm

Abstraction Dimension

Page 16: OOP Paradigm 1: Abstract Thinking and Programming Paradigm

UML: a diagram is a dimension

Page 17: OOP Paradigm 1: Abstract Thinking and Programming Paradigm

Abstraction Hierarchy

Page 18: OOP Paradigm 1: Abstract Thinking and Programming Paradigm

Summary Abstraction Dimension Abstraction Hierarchy

Page 19: OOP Paradigm 1: Abstract Thinking and Programming Paradigm

Outline Programming Paradigm Abstraction Thinking Main Programming Paradigms

Page 20: OOP Paradigm 1: Abstract Thinking and Programming Paradigm

Programming Paradigms

Hilbert

Turing

von Neumann

Dijkstra

Knuth

Ritchie

Church

McCarthy

Curry

Page 21: OOP Paradigm 1: Abstract Thinking and Programming Paradigm

Algorithm

David Hilbert,1862 –1943

Page 22: OOP Paradigm 1: Abstract Thinking and Programming Paradigm

Hilbert 10th Problem

Find an algorithm to determine whether a given polynomial Diophantine equation with integer coefficients has an integer solution

Page 23: OOP Paradigm 1: Abstract Thinking and Programming Paradigm

Imperative vs Declarative

Hilbert

Turing

von Neumann

Dijkstra

Knuth

Ritchie

Church

McCarthy

Curry

Page 24: OOP Paradigm 1: Abstract Thinking and Programming Paradigm

What’s Computable?

Alan Turing, 1912 – 1954

Page 25: OOP Paradigm 1: Abstract Thinking and Programming Paradigm

Turing Machine

Page 26: OOP Paradigm 1: Abstract Thinking and Programming Paradigm

Socket State Machine

Page 27: OOP Paradigm 1: Abstract Thinking and Programming Paradigm

Von Neumann Architecture

Von Neumann, 1903 –1957

Page 28: OOP Paradigm 1: Abstract Thinking and Programming Paradigm

Von Neumann Architecture

Stored Program

Page 29: OOP Paradigm 1: Abstract Thinking and Programming Paradigm

Imperative Programming

DataInstructio

ns

Input

Output

Program = Data Structure + Algorithm

Page 30: OOP Paradigm 1: Abstract Thinking and Programming Paradigm

Assembly Language

Page 31: OOP Paradigm 1: Abstract Thinking and Programming Paradigm

Procedural Programming

Procedure Abstraction

Imperative Programming

Procedural Programming

Page 32: OOP Paradigm 1: Abstract Thinking and Programming Paradigm

Procedure Abstraction How to do => What to do, e.g. gcd(int a, int b) Procedure Hierarchy Modular

Page 33: OOP Paradigm 1: Abstract Thinking and Programming Paradigm

Structured Programming

Edsger Wybe Dijkstra, 1930 - 2002

Page 34: OOP Paradigm 1: Abstract Thinking and Programming Paradigm

Dijkstra: Goto is Harmful

Static Program vs Dynamic Process

Page 35: OOP Paradigm 1: Abstract Thinking and Programming Paradigm

Structured Program Theorem

Sequence

Selection

Repetition

Page 36: OOP Paradigm 1: Abstract Thinking and Programming Paradigm

Structured Programming

Page 37: OOP Paradigm 1: Abstract Thinking and Programming Paradigm

Imperative Programming Paradigm

Imparative

Structured

Procedual

Page 38: OOP Paradigm 1: Abstract Thinking and Programming Paradigm

Imperative Programming Languages

CBASICPASCAL

FortanAda

Assembly

Page 39: OOP Paradigm 1: Abstract Thinking and Programming Paradigm

Imperative vs Declarative

Hilbert

Turing

von Neumann

Dijkstra

Knuth

Ritchie

Church

McCarthy

Curry

Page 40: OOP Paradigm 1: Abstract Thinking and Programming Paradigm

What is computable?

Alonzo Church, 1903 - 1995

Page 41: OOP Paradigm 1: Abstract Thinking and Programming Paradigm

Church-Turing Thesis

Lambda Calculus = Turing Machine

Page 42: OOP Paradigm 1: Abstract Thinking and Programming Paradigm

Functional Programming

lambda(x, y) => x + y

(x, y) x + y

It’s all about functions

Page 43: OOP Paradigm 1: Abstract Thinking and Programming Paradigm

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

Page 44: OOP Paradigm 1: Abstract Thinking and Programming Paradigm

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

Page 45: OOP Paradigm 1: Abstract Thinking and Programming Paradigm

Dataflow Programming

[x1, x2, x3, …] [y1, y2, y3, …]

Page 46: OOP Paradigm 1: Abstract Thinking and Programming Paradigm

Dataflow Programming: Stack

[(push 1), (push 2), pop, pop, …] [2, a, …]

Page 47: OOP Paradigm 1: Abstract Thinking and Programming Paradigm

Functional Programming Paradigm

Higher-Order Function

Reference TransparentNo Side Effect

Program = Function Evaluation

Lazy EvaluationClosure

Page 48: OOP Paradigm 1: Abstract Thinking and Programming Paradigm

Functional Programming Languages

LISPHaskell

C#3.0

Perl

Ruby

ErlangScala

Page 49: OOP Paradigm 1: Abstract Thinking and Programming Paradigm

Imperative vs Declarative

Declarative ProblemImperative Machine

Page 50: OOP Paradigm 1: Abstract Thinking and Programming Paradigm

Object Oriented Programming Paradigm

Page 51: OOP Paradigm 1: Abstract Thinking and Programming Paradigm

Data Abstraction and Encapsulation

Barbara Liskov, 1939 -

Page 52: OOP Paradigm 1: Abstract Thinking and Programming Paradigm

Data Abstraction and Encapsulation

OperationData Object

Everything is object

Page 53: OOP Paradigm 1: Abstract Thinking and Programming Paradigm

Data Abstraction and Encapsulation

Closure Object

Everything is object

Lambda

Page 54: OOP Paradigm 1: Abstract Thinking and Programming Paradigm

Object Hierarchy

Page 55: OOP Paradigm 1: Abstract Thinking and Programming Paradigm

Object Relationship and Interaction

Page 56: OOP Paradigm 1: Abstract Thinking and Programming Paradigm

Type and Class

Car

Page 57: OOP Paradigm 1: Abstract Thinking and Programming Paradigm

Type Hierarchy

Page 58: OOP Paradigm 1: Abstract Thinking and Programming Paradigm

OO Programming Paradigm

Encapsulation

InheritancePolymorphism

Program = Collaborating Objects

Page 59: OOP Paradigm 1: Abstract Thinking and Programming Paradigm

OO Programming Languages

JavaC++

C#RubyPython

Smalltalk

Javascript

Page 60: OOP Paradigm 1: Abstract Thinking and Programming Paradigm

Summary Abstract Thinking

Imperative vs Functional Programming Paradigms

OO Programming Paradigm