Top Banner
Object Oriented Programming in Swift Ch 0 Sai Li @ Yowoo Tech. 2016/11/18
105

Object Oriented Programming in Swift Ch0 - Encapsulation

Jan 09, 2017

Download

Software

Chihyang Li
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Object Oriented Programming in Swift Ch0 - Encapsulation

Object Oriented Programming in Swift

Ch 0

Sai Li @ Yowoo Tech. 2016/11/18

Page 2: Object Oriented Programming in Swift Ch0 - Encapsulation

References

Page 3: Object Oriented Programming in Swift Ch0 - Encapsulation

References • Agile Software Development: Principles, Patterns,

and Practice ( : ) by Robert C. Martin

Page 4: Object Oriented Programming in Swift Ch0 - Encapsulation

References • Agile Software Development: Principles, Patterns,

and Practice ( : ) by Robert C. Martin

• Fundamental Object Oriented Programming by Hsuan-Tien Lin

Page 5: Object Oriented Programming in Swift Ch0 - Encapsulation

References • Agile Software Development: Principles, Patterns,

and Practice ( : ) by Robert C. Martin

• Fundamental Object Oriented Programming by Hsuan-Tien Lin

• by Teddy Chen

Page 6: Object Oriented Programming in Swift Ch0 - Encapsulation

References • Agile Software Development: Principles, Patterns,

and Practice ( : ) by Robert C. Martin

• Fundamental Object Oriented Programming by Hsuan-Tien Lin

• by Teddy Chen

• Essential Object-Oriented Programmingby Josh Ko

Page 7: Object Oriented Programming in Swift Ch0 - Encapsulation

Language

• Java

• Python

• Swift

Page 8: Object Oriented Programming in Swift Ch0 - Encapsulation

How to build an iPhone?

Page 9: Object Oriented Programming in Swift Ch0 - Encapsulation
Page 10: Object Oriented Programming in Swift Ch0 - Encapsulation

System -> Components

Page 11: Object Oriented Programming in Swift Ch0 - Encapsulation

System -> ComponentsDivide and Conquer

Page 12: Object Oriented Programming in Swift Ch0 - Encapsulation

System -> ComponentsDivide and Conquer

Modularization

Page 13: Object Oriented Programming in Swift Ch0 - Encapsulation

Good Modules make good System

Page 14: Object Oriented Programming in Swift Ch0 - Encapsulation

Good Modules make good System

• Easy to debug

Page 15: Object Oriented Programming in Swift Ch0 - Encapsulation

Good Modules make good System

• Easy to debug

• Easy to maintain/ manage

Page 16: Object Oriented Programming in Swift Ch0 - Encapsulation

Good Modules make good System

• Easy to debug

• Easy to maintain/ manage

• Easy to modify/ update

Page 17: Object Oriented Programming in Swift Ch0 - Encapsulation

Good Modules make good System

• Easy to debug

• Easy to maintain/ manage

• Easy to modify/ update

• Easy to reuse

Page 18: Object Oriented Programming in Swift Ch0 - Encapsulation

Good Modules make good System

• Easy to debug

• Easy to maintain/ manage

• Easy to modify/ update

• Easy to reuse

Page 19: Object Oriented Programming in Swift Ch0 - Encapsulation

Good Modules make good System

• Easy to debug

• Easy to maintain/ manage

• Easy to modify/ update

• Easy to reuse

Modularization: Save time in the future

Page 20: Object Oriented Programming in Swift Ch0 - Encapsulation

Save money, save timeNo more disposable programs

Page 21: Object Oriented Programming in Swift Ch0 - Encapsulation

Spaghetti Code

Page 22: Object Oriented Programming in Swift Ch0 - Encapsulation

Spaghetti CodeEdible is enough

Page 23: Object Oriented Programming in Swift Ch0 - Encapsulation

Spaghetti Code

Page 24: Object Oriented Programming in Swift Ch0 - Encapsulation

Spaghetti Code

Page 25: Object Oriented Programming in Swift Ch0 - Encapsulation

Noodle Oriented Programming

Page 26: Object Oriented Programming in Swift Ch0 - Encapsulation

Noodle -> Procedure

• More organized than spaghetti code

• Identify the purpose

• Isolate (modularize)

• Reuse

Page 27: Object Oriented Programming in Swift Ch0 - Encapsulation

Noodle -> Procedure

• More organized than spaghetti code

• Identify the purpose

• Isolate (modularize)

• ReuseC language

Page 28: Object Oriented Programming in Swift Ch0 - Encapsulation

OOP• Grouped related data

Page 29: Object Oriented Programming in Swift Ch0 - Encapsulation

OOP• Use Struct/ Class to generate objects

Page 30: Object Oriented Programming in Swift Ch0 - Encapsulation

OOP• Don’t do something on the object

• Let object takes actions

Page 31: Object Oriented Programming in Swift Ch0 - Encapsulation

OOP• Don’t do something on the object

• Let object takes actions

Page 32: Object Oriented Programming in Swift Ch0 - Encapsulation

OOP• Don’t do something on the object

• Let object takes actions

Page 33: Object Oriented Programming in Swift Ch0 - Encapsulation

Noodles -> Procedure -> Object

Page 34: Object Oriented Programming in Swift Ch0 - Encapsulation

• NOP: spaghetti code + (possibly spaghetti) dataAssembly

Noodles -> Procedure -> Object

Page 35: Object Oriented Programming in Swift Ch0 - Encapsulation

• NOP: spaghetti code + (possibly spaghetti) dataAssembly

• POP: organized code + (possibly organized) data C, PASCALbasic modules: procedures

Noodles -> Procedure -> Object

Page 36: Object Oriented Programming in Swift Ch0 - Encapsulation

• NOP: spaghetti code + (possibly spaghetti) dataAssembly

• POP: organized code + (possibly organized) data C, PASCALbasic modules: procedures

• OOP: organized code + organized data (grouped) Swift, Java, Pythonbasic modules: Class / Struct

Noodles -> Procedure -> Object

Page 37: Object Oriented Programming in Swift Ch0 - Encapsulation

OO Levels

Page 38: Object Oriented Programming in Swift Ch0 - Encapsulation

OO Levels• OO Analysis:

what the system does

Page 39: Object Oriented Programming in Swift Ch0 - Encapsulation

OO Levels• OO Analysis:

what the system does• needs -> models

Page 40: Object Oriented Programming in Swift Ch0 - Encapsulation

OO Levels• OO Analysis:

what the system does• needs -> models• Software Engineering

Page 41: Object Oriented Programming in Swift Ch0 - Encapsulation

OO Levels• OO Analysis:

what the system does• needs -> models• Software Engineering

• OO Design:how the system dose it

Page 42: Object Oriented Programming in Swift Ch0 - Encapsulation

OO Levels• OO Analysis:

what the system does• needs -> models• Software Engineering

• OO Design:how the system dose it• model -> class diagrams

Page 43: Object Oriented Programming in Swift Ch0 - Encapsulation

OO Levels• OO Analysis:

what the system does• needs -> models• Software Engineering

• OO Design:how the system dose it• model -> class diagrams• Design Pattern

Page 44: Object Oriented Programming in Swift Ch0 - Encapsulation

OO Levels• OO Analysis:

what the system does• needs -> models• Software Engineering

• OO Design:how the system dose it• model -> class diagrams• Design Pattern

• OO Programminghow to implement it

Page 45: Object Oriented Programming in Swift Ch0 - Encapsulation

OO Levels• OO Analysis:

what the system does• needs -> models• Software Engineering

• OO Design:how the system dose it• model -> class diagrams• Design Pattern

• OO Programminghow to implement it• class diagrams -> implementations

Page 46: Object Oriented Programming in Swift Ch0 - Encapsulation

OO Levels• OO Analysis:

what the system does• needs -> models• Software Engineering

• OO Design:how the system dose it• model -> class diagrams• Design Pattern

• OO Programminghow to implement it• class diagrams -> implementations• OOP, this one

Page 47: Object Oriented Programming in Swift Ch0 - Encapsulation

How to build an iPhone?

Page 48: Object Oriented Programming in Swift Ch0 - Encapsulation

Decomposition

Page 49: Object Oriented Programming in Swift Ch0 - Encapsulation

Decomposition

System

Page 50: Object Oriented Programming in Swift Ch0 - Encapsulation

Decomposition

Systemobject

objectobject

Page 51: Object Oriented Programming in Swift Ch0 - Encapsulation

Decomposition

System

abstractionobject

objectobject

Page 52: Object Oriented Programming in Swift Ch0 - Encapsulation

Decomposition

System

abstractionobject

objectobject

Page 53: Object Oriented Programming in Swift Ch0 - Encapsulation

Decomposition

System

abstractionobject

Modeling

objectobject

Page 54: Object Oriented Programming in Swift Ch0 - Encapsulation

Data Abstraction

Object

Page 55: Object Oriented Programming in Swift Ch0 - Encapsulation

Data Abstraction

Object

method

Page 56: Object Oriented Programming in Swift Ch0 - Encapsulation

Data Abstraction

Object

method

Page 57: Object Oriented Programming in Swift Ch0 - Encapsulation

Data Abstraction

Object

method

Page 58: Object Oriented Programming in Swift Ch0 - Encapsulation

Data Abstraction

Object

method

Interface

Page 59: Object Oriented Programming in Swift Ch0 - Encapsulation

Data Abstraction

Object

method

Interface

Implementation

Page 60: Object Oriented Programming in Swift Ch0 - Encapsulation

Data Abstraction

Abstraction is selective ignorance. by Andrew Koenig

Page 61: Object Oriented Programming in Swift Ch0 - Encapsulation

Data Abstraction

Abstraction is selective ignorance. by Andrew Koenig

Others care about the interface and ignore the implementation

Page 62: Object Oriented Programming in Swift Ch0 - Encapsulation

EncapsulationAccess Control: public and private

Page 63: Object Oriented Programming in Swift Ch0 - Encapsulation

EncapsulationAccess Control: public and private

Page 64: Object Oriented Programming in Swift Ch0 - Encapsulation

EncapsulationAccess Control: public and private

Page 65: Object Oriented Programming in Swift Ch0 - Encapsulation

Design by Contract

Page 66: Object Oriented Programming in Swift Ch0 - Encapsulation

Design by Contract• Class Invariant

Page 67: Object Oriented Programming in Swift Ch0 - Encapsulation

Design by Contract• Class Invariant

• Valid State

Page 68: Object Oriented Programming in Swift Ch0 - Encapsulation

Design by Contract• Class Invariant

• Valid State

Page 69: Object Oriented Programming in Swift Ch0 - Encapsulation

Design by Contract• Class Invariant

• Valid Stateprivate(set)private(set)

Page 70: Object Oriented Programming in Swift Ch0 - Encapsulation

Design by Contract• Class Invariant

• Valid State

• 1 <= day <= 310 <= hour <= 24

private(set)private(set)

Page 71: Object Oriented Programming in Swift Ch0 - Encapsulation

Design by Contract• Preconditions, postconditions

Page 72: Object Oriented Programming in Swift Ch0 - Encapsulation

Design by Contract• Preconditions, postconditions

First class invariant ?

Page 73: Object Oriented Programming in Swift Ch0 - Encapsulation

Design by Contract• Preconditions, postconditions

First class invariant ?Constructor

Page 74: Object Oriented Programming in Swift Ch0 - Encapsulation
Page 75: Object Oriented Programming in Swift Ch0 - Encapsulation
Page 76: Object Oriented Programming in Swift Ch0 - Encapsulation
Page 77: Object Oriented Programming in Swift Ch0 - Encapsulation
Page 78: Object Oriented Programming in Swift Ch0 - Encapsulation
Page 79: Object Oriented Programming in Swift Ch0 - Encapsulation
Page 80: Object Oriented Programming in Swift Ch0 - Encapsulation
Page 81: Object Oriented Programming in Swift Ch0 - Encapsulation
Page 82: Object Oriented Programming in Swift Ch0 - Encapsulation

Encapsulation

Page 83: Object Oriented Programming in Swift Ch0 - Encapsulation

• Separate implementation and use

Encapsulation

Page 84: Object Oriented Programming in Swift Ch0 - Encapsulation

• Separate implementation and use

• Don’t trust other people including you(3 months after)

Encapsulation

Page 85: Object Oriented Programming in Swift Ch0 - Encapsulation

• Separate implementation and use

• Don’t trust other people including you(3 months after)

• Hide unnecessary details

Encapsulation

Page 86: Object Oriented Programming in Swift Ch0 - Encapsulation

• Separate implementation and use

• Don’t trust other people including you(3 months after)

• Hide unnecessary details

• One more oz

Encapsulation

Page 87: Object Oriented Programming in Swift Ch0 - Encapsulation

• Separate implementation and use

• Don’t trust other people including you(3 months after)

• Hide unnecessary details

• One more oz

Encapsulation

Page 88: Object Oriented Programming in Swift Ch0 - Encapsulation

• Separate implementation and use

• Don’t trust other people including you(3 months after)

• Hide unnecessary details

• One more ozThink about incorrect use about your class

Encapsulation

Page 89: Object Oriented Programming in Swift Ch0 - Encapsulation

As a designer, you should avoid giving the users of your code too much freedom to do bad and/or make bugs

Page 90: Object Oriented Programming in Swift Ch0 - Encapsulation
Page 91: Object Oriented Programming in Swift Ch0 - Encapsulation
Page 92: Object Oriented Programming in Swift Ch0 - Encapsulation

accessor (getter)

Page 93: Object Oriented Programming in Swift Ch0 - Encapsulation

accessor (getter)

Page 94: Object Oriented Programming in Swift Ch0 - Encapsulation

accessor (getter)

mutator (setter)

Page 95: Object Oriented Programming in Swift Ch0 - Encapsulation

OOP

• Encapsulation: Security

• Inheritance: Reusability

• Polymorphism: Flexibility

Page 96: Object Oriented Programming in Swift Ch0 - Encapsulation

Q & ATo be continued…

Page 97: Object Oriented Programming in Swift Ch0 - Encapsulation

References

Page 103: Object Oriented Programming in Swift Ch0 - Encapsulation

References • Agile Software Development: Principles, Patterns, and Practice (

: )

• Fundamental Object Oriented Programming

• Essential Object-Oriented Programming

• images.techtimes.com/data/images/full/11234/tangled-earbuds.jpg

• spaghetticrunch.com/wp-content/uploads/2014/12/spaghetti-bolognaise-1.png

Page 104: Object Oriented Programming in Swift Ch0 - Encapsulation

References • Agile Software Development: Principles, Patterns, and Practice (

: )

• Fundamental Object Oriented Programming

• Essential Object-Oriented Programming

• images.techtimes.com/data/images/full/11234/tangled-earbuds.jpg

• spaghetticrunch.com/wp-content/uploads/2014/12/spaghetti-bolognaise-1.png

• upload.wikimedia.org/wikipedia/commons/thumb/e/ea/Design_by_contract.svg/220px-Design_by_contract.svg.png

Page 105: Object Oriented Programming in Swift Ch0 - Encapsulation

References • Agile Software Development: Principles, Patterns, and Practice (

: )

• Fundamental Object Oriented Programming

• Essential Object-Oriented Programming

• images.techtimes.com/data/images/full/11234/tangled-earbuds.jpg

• spaghetticrunch.com/wp-content/uploads/2014/12/spaghetti-bolognaise-1.png

• upload.wikimedia.org/wikipedia/commons/thumb/e/ea/Design_by_contract.svg/220px-Design_by_contract.svg.png

• www.linuxdigest.org/wp-content/uploads/2012/06/09fig091.gif