oop ch2 polymorphism, ocp, lsp

37
Object Oriented Programming in Swift Ch 2: Polymorphism Sai Li @ Yowoo Tech. 2016/12/23

Upload: chihyang-li

Post on 09-Jan-2017

42 views

Category:

Software


2 download

TRANSCRIPT

Page 1: OOP ch2 polymorphism, OCP, LSP

Object Oriented Programming in Swift

Ch 2: Polymorphism

Sai Li @ Yowoo Tech. 2016/12/23

Page 2: OOP ch2 polymorphism, OCP, LSP

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 3: OOP ch2 polymorphism, OCP, LSP

OOP

• Encapsulation • Inheritance • Polymorphism

Page 4: OOP ch2 polymorphism, OCP, LSP

Polymorphism

One Thing, Many shapes….

Page 5: OOP ch2 polymorphism, OCP, LSP
Page 6: OOP ch2 polymorphism, OCP, LSP

Strawberry

Page 7: OOP ch2 polymorphism, OCP, LSP

Strawberry

Page 8: OOP ch2 polymorphism, OCP, LSP
Page 9: OOP ch2 polymorphism, OCP, LSP

Polymorphism in Swift

1. Class Inheritance 2. Protocol Interface

Fruit

Orange Strawberry

Playable

CD Piano

Page 10: OOP ch2 polymorphism, OCP, LSP

Polymorphism

Polymorphism means that the sender of a stimulus does not need to know the receiving instance’s class. The receiving instance can belong to an arbitrary class.

Page 11: OOP ch2 polymorphism, OCP, LSP

S.O.L.I.D

Page 12: OOP ch2 polymorphism, OCP, LSP

S.O.L.I.D

• SRP: Single Responsibility Principle

• OCP: Open Closed Principle• LSP: Liskov Substitution Principle • ISP: Interface Segregation Principle • DIP: Dependency Inversion Principle

Page 13: OOP ch2 polymorphism, OCP, LSP

Open Closed Principle

Page 14: OOP ch2 polymorphism, OCP, LSP

– Ivar Jacobson

“All systems change during their life cycles.

This must be born in mind when devloping systems expected to last longer than the first version.”

Page 15: OOP ch2 polymorphism, OCP, LSP

Open Closed Principle

Software entities (classes, modules, functions, etc.) should be open for extension, but closed for modification

- Bertrand Meyer (1988)

Page 16: OOP ch2 polymorphism, OCP, LSP

• Open for extension

• Closed for modification

Page 17: OOP ch2 polymorphism, OCP, LSP

Triangle?

Page 18: OOP ch2 polymorphism, OCP, LSP

• No ripple effect

• further changes of that kind are achieved by adding new code, not by changing old code that already works.

• Elastic

Page 19: OOP ch2 polymorphism, OCP, LSP
Page 20: OOP ch2 polymorphism, OCP, LSP

<Design Pattern > GoF

“Program to an interface,

not an implementation.”

Page 21: OOP ch2 polymorphism, OCP, LSP
Page 22: OOP ch2 polymorphism, OCP, LSP

What you can do rather than who you are.

Black Cat & White Cat

Page 23: OOP ch2 polymorphism, OCP, LSP

How ?

Page 24: OOP ch2 polymorphism, OCP, LSP

Barbara Liskov(1939 - )

• UCB, Stanford • 1st female CS PhD • CLU • von Neumann Award • Turing Award

Page 25: OOP ch2 polymorphism, OCP, LSP

Liskov Substitution Principle

Let Φ(x) be a property provable about objects x of type T.

Then Φ(y) should be true for objects y of type S where S is a subtype of T

Page 26: OOP ch2 polymorphism, OCP, LSP

Liskov Substitution Principle

Subtypes must be substitutable for their base types.

Page 27: OOP ch2 polymorphism, OCP, LSP

Liskov Substitution Principle

Subtypes must be substitutable for their base types.

Let Φ(x) be a property provable about objects x of type T. Then Φ(y) should be true for objects y of type S where S

is a subtype of T

( )

Page 28: OOP ch2 polymorphism, OCP, LSP
Page 29: OOP ch2 polymorphism, OCP, LSP

LSP Violation

p.s: Circle Ellipse Problem

Page 30: OOP ch2 polymorphism, OCP, LSP

LSP Violation

Page 31: OOP ch2 polymorphism, OCP, LSP

LSP Violation

Why?

Page 32: OOP ch2 polymorphism, OCP, LSP

Design By Contract

Class Invariant

Page 33: OOP ch2 polymorphism, OCP, LSP

Postcondition

Page 34: OOP ch2 polymorphism, OCP, LSP

Subtype func precondition can’t be stronger than base type

Subtype func postcondition can't be weaker than base type

Page 35: OOP ch2 polymorphism, OCP, LSP

Recap

• Polymorphism • Open Closed Principle • Liskov Substitution Principle

Page 36: OOP ch2 polymorphism, OCP, LSP

To be continued …

Page 37: OOP ch2 polymorphism, OCP, LSP

References

• https://zh.wikipedia.org/wiki/File:Barbara_Liskov.PNG

• http://www.relatably.com/m/img/wtf-memes/grandma-finds-the-internet-meme-generator-wtf-b12499.jpg

• http://i.imgur.com/BTpuqPX.jpg • wiki: https://en.wikipedia.org/wiki/Circle-

ellipse_problem