Download - OOP ch2 polymorphism, OCP, LSP
![Page 1: OOP ch2 polymorphism, OCP, LSP](https://reader033.vdocuments.site/reader033/viewer/2022052705/58735cda1a28abe7648b4c65/html5/thumbnails/1.jpg)
Object Oriented Programming in Swift
Ch 2: Polymorphism
Sai Li @ Yowoo Tech. 2016/12/23
![Page 2: OOP ch2 polymorphism, OCP, LSP](https://reader033.vdocuments.site/reader033/viewer/2022052705/58735cda1a28abe7648b4c65/html5/thumbnails/2.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022052705/58735cda1a28abe7648b4c65/html5/thumbnails/3.jpg)
OOP
• Encapsulation • Inheritance • Polymorphism
![Page 4: OOP ch2 polymorphism, OCP, LSP](https://reader033.vdocuments.site/reader033/viewer/2022052705/58735cda1a28abe7648b4c65/html5/thumbnails/4.jpg)
Polymorphism
One Thing, Many shapes….
![Page 5: OOP ch2 polymorphism, OCP, LSP](https://reader033.vdocuments.site/reader033/viewer/2022052705/58735cda1a28abe7648b4c65/html5/thumbnails/5.jpg)
![Page 6: OOP ch2 polymorphism, OCP, LSP](https://reader033.vdocuments.site/reader033/viewer/2022052705/58735cda1a28abe7648b4c65/html5/thumbnails/6.jpg)
Strawberry
![Page 7: OOP ch2 polymorphism, OCP, LSP](https://reader033.vdocuments.site/reader033/viewer/2022052705/58735cda1a28abe7648b4c65/html5/thumbnails/7.jpg)
Strawberry
![Page 8: OOP ch2 polymorphism, OCP, LSP](https://reader033.vdocuments.site/reader033/viewer/2022052705/58735cda1a28abe7648b4c65/html5/thumbnails/8.jpg)
![Page 9: OOP ch2 polymorphism, OCP, LSP](https://reader033.vdocuments.site/reader033/viewer/2022052705/58735cda1a28abe7648b4c65/html5/thumbnails/9.jpg)
Polymorphism in Swift
1. Class Inheritance 2. Protocol Interface
Fruit
Orange Strawberry
Playable
CD Piano
![Page 10: OOP ch2 polymorphism, OCP, LSP](https://reader033.vdocuments.site/reader033/viewer/2022052705/58735cda1a28abe7648b4c65/html5/thumbnails/10.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022052705/58735cda1a28abe7648b4c65/html5/thumbnails/11.jpg)
S.O.L.I.D
![Page 12: OOP ch2 polymorphism, OCP, LSP](https://reader033.vdocuments.site/reader033/viewer/2022052705/58735cda1a28abe7648b4c65/html5/thumbnails/12.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022052705/58735cda1a28abe7648b4c65/html5/thumbnails/13.jpg)
Open Closed Principle
![Page 14: OOP ch2 polymorphism, OCP, LSP](https://reader033.vdocuments.site/reader033/viewer/2022052705/58735cda1a28abe7648b4c65/html5/thumbnails/14.jpg)
– 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](https://reader033.vdocuments.site/reader033/viewer/2022052705/58735cda1a28abe7648b4c65/html5/thumbnails/15.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022052705/58735cda1a28abe7648b4c65/html5/thumbnails/16.jpg)
• Open for extension
• Closed for modification
![Page 17: OOP ch2 polymorphism, OCP, LSP](https://reader033.vdocuments.site/reader033/viewer/2022052705/58735cda1a28abe7648b4c65/html5/thumbnails/17.jpg)
Triangle?
![Page 18: OOP ch2 polymorphism, OCP, LSP](https://reader033.vdocuments.site/reader033/viewer/2022052705/58735cda1a28abe7648b4c65/html5/thumbnails/18.jpg)
• 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](https://reader033.vdocuments.site/reader033/viewer/2022052705/58735cda1a28abe7648b4c65/html5/thumbnails/19.jpg)
![Page 20: OOP ch2 polymorphism, OCP, LSP](https://reader033.vdocuments.site/reader033/viewer/2022052705/58735cda1a28abe7648b4c65/html5/thumbnails/20.jpg)
<Design Pattern > GoF
“Program to an interface,
not an implementation.”
![Page 21: OOP ch2 polymorphism, OCP, LSP](https://reader033.vdocuments.site/reader033/viewer/2022052705/58735cda1a28abe7648b4c65/html5/thumbnails/21.jpg)
![Page 22: OOP ch2 polymorphism, OCP, LSP](https://reader033.vdocuments.site/reader033/viewer/2022052705/58735cda1a28abe7648b4c65/html5/thumbnails/22.jpg)
What you can do rather than who you are.
Black Cat & White Cat
![Page 23: OOP ch2 polymorphism, OCP, LSP](https://reader033.vdocuments.site/reader033/viewer/2022052705/58735cda1a28abe7648b4c65/html5/thumbnails/23.jpg)
How ?
![Page 24: OOP ch2 polymorphism, OCP, LSP](https://reader033.vdocuments.site/reader033/viewer/2022052705/58735cda1a28abe7648b4c65/html5/thumbnails/24.jpg)
Barbara Liskov(1939 - )
• UCB, Stanford • 1st female CS PhD • CLU • von Neumann Award • Turing Award
![Page 25: OOP ch2 polymorphism, OCP, LSP](https://reader033.vdocuments.site/reader033/viewer/2022052705/58735cda1a28abe7648b4c65/html5/thumbnails/25.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022052705/58735cda1a28abe7648b4c65/html5/thumbnails/26.jpg)
Liskov Substitution Principle
Subtypes must be substitutable for their base types.
![Page 27: OOP ch2 polymorphism, OCP, LSP](https://reader033.vdocuments.site/reader033/viewer/2022052705/58735cda1a28abe7648b4c65/html5/thumbnails/27.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022052705/58735cda1a28abe7648b4c65/html5/thumbnails/28.jpg)
![Page 29: OOP ch2 polymorphism, OCP, LSP](https://reader033.vdocuments.site/reader033/viewer/2022052705/58735cda1a28abe7648b4c65/html5/thumbnails/29.jpg)
LSP Violation
p.s: Circle Ellipse Problem
![Page 30: OOP ch2 polymorphism, OCP, LSP](https://reader033.vdocuments.site/reader033/viewer/2022052705/58735cda1a28abe7648b4c65/html5/thumbnails/30.jpg)
LSP Violation
![Page 31: OOP ch2 polymorphism, OCP, LSP](https://reader033.vdocuments.site/reader033/viewer/2022052705/58735cda1a28abe7648b4c65/html5/thumbnails/31.jpg)
LSP Violation
Why?
![Page 32: OOP ch2 polymorphism, OCP, LSP](https://reader033.vdocuments.site/reader033/viewer/2022052705/58735cda1a28abe7648b4c65/html5/thumbnails/32.jpg)
Design By Contract
Class Invariant
![Page 33: OOP ch2 polymorphism, OCP, LSP](https://reader033.vdocuments.site/reader033/viewer/2022052705/58735cda1a28abe7648b4c65/html5/thumbnails/33.jpg)
Postcondition
![Page 34: OOP ch2 polymorphism, OCP, LSP](https://reader033.vdocuments.site/reader033/viewer/2022052705/58735cda1a28abe7648b4c65/html5/thumbnails/34.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022052705/58735cda1a28abe7648b4c65/html5/thumbnails/35.jpg)
Recap
• Polymorphism • Open Closed Principle • Liskov Substitution Principle
![Page 36: OOP ch2 polymorphism, OCP, LSP](https://reader033.vdocuments.site/reader033/viewer/2022052705/58735cda1a28abe7648b4c65/html5/thumbnails/36.jpg)
To be continued …
![Page 37: OOP ch2 polymorphism, OCP, LSP](https://reader033.vdocuments.site/reader033/viewer/2022052705/58735cda1a28abe7648b4c65/html5/thumbnails/37.jpg)
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