Submit Search
Upload
SOLID Principles
•
4 likes
•
459 views
Jamie (Taka) Wang
Follow
Review SOLID principles in Chinese.
Read less
Read more
Education
Report
Share
Report
Share
1 of 23
Recommended
Solid Principle
Solid Principle
Murali Pachiyappan
物件導向設計原則:SOLID + DI
物件導向設計原則:SOLID + DI
Jeff Chu
Solid Principles
Solid Principles
Thiago Dos Santos Hora
如何寫好程式
如何寫好程式
Chris Wang
S.O.L.I.D. Principles for Software Architects
S.O.L.I.D. Principles for Software Architects
Ricardo Wilkins
Strings in Java
Strings in Java
Hitesh-Java
Learning solid principles using c#
Learning solid principles using c#
Aditya Kumar Rajan
Clean Code I - Best Practices
Clean Code I - Best Practices
Theo Jungeblut
Recommended
Solid Principle
Solid Principle
Murali Pachiyappan
物件導向設計原則:SOLID + DI
物件導向設計原則:SOLID + DI
Jeff Chu
Solid Principles
Solid Principles
Thiago Dos Santos Hora
如何寫好程式
如何寫好程式
Chris Wang
S.O.L.I.D. Principles for Software Architects
S.O.L.I.D. Principles for Software Architects
Ricardo Wilkins
Strings in Java
Strings in Java
Hitesh-Java
Learning solid principles using c#
Learning solid principles using c#
Aditya Kumar Rajan
Clean Code I - Best Practices
Clean Code I - Best Practices
Theo Jungeblut
Object Oriented Programming Concepts
Object Oriented Programming Concepts
thinkphp
Clean code
Clean code
Achintya Kumar
Clean code
Clean code
Mahmoud Zizo
Solid principles
Solid principles
Dmitry Kandalov
Oop
Oop
志明 陳
リーンなコードを書こう:実践的なオブジェクト指向設計
リーンなコードを書こう:実践的なオブジェクト指向設計
増田 亨
Jakarta CDI 4.0
Jakarta CDI 4.0
Satoshi Kubo
Solid principles
Solid principles
Toan Nguyen
設計をする上で役にたった制約について
設計をする上で役にたった制約について
Ikki Takahashi
Are You a SOLID Coder?
Are You a SOLID Coder?
Steve Green
ちいさなオブジェクトでドメインモデルを組み立てる
ちいさなオブジェクトでドメインモデルを組み立てる
増田 亨
Concepts In Object Oriented Programming Languages
Concepts In Object Oriented Programming Languages
ppd1961
SOLID
SOLID
Panos Pnevmatikatos
Java 11 to 17 : What's new !?
Java 11 to 17 : What's new !?
Jérôme Tamborini
リレーショナルな正しいデータベース設計
リレーショナルな正しいデータベース設計
Mikiya Okuno
SOLID PRINCIPLES
SOLID PRINCIPLES
Luciano Queiroz
SOLID Design Principles
SOLID Design Principles
Samuel Breed
SOLID Design Principles
SOLID Design Principles
Andreas Enbohm
Software development best practices & coding guidelines
Software development best practices & coding guidelines
Ankur Goyal
Let's Learn Ruby - Basic
Let's Learn Ruby - Basic
Eddie Kao
Memory profiler and garbage collector in C#
Memory profiler and garbage collector in C#
Wipro
臉書廣告提案 完整版
臉書廣告提案 完整版
Sammy Cheng
More Related Content
What's hot
Object Oriented Programming Concepts
Object Oriented Programming Concepts
thinkphp
Clean code
Clean code
Achintya Kumar
Clean code
Clean code
Mahmoud Zizo
Solid principles
Solid principles
Dmitry Kandalov
Oop
Oop
志明 陳
リーンなコードを書こう:実践的なオブジェクト指向設計
リーンなコードを書こう:実践的なオブジェクト指向設計
増田 亨
Jakarta CDI 4.0
Jakarta CDI 4.0
Satoshi Kubo
Solid principles
Solid principles
Toan Nguyen
設計をする上で役にたった制約について
設計をする上で役にたった制約について
Ikki Takahashi
Are You a SOLID Coder?
Are You a SOLID Coder?
Steve Green
ちいさなオブジェクトでドメインモデルを組み立てる
ちいさなオブジェクトでドメインモデルを組み立てる
増田 亨
Concepts In Object Oriented Programming Languages
Concepts In Object Oriented Programming Languages
ppd1961
SOLID
SOLID
Panos Pnevmatikatos
Java 11 to 17 : What's new !?
Java 11 to 17 : What's new !?
Jérôme Tamborini
リレーショナルな正しいデータベース設計
リレーショナルな正しいデータベース設計
Mikiya Okuno
SOLID PRINCIPLES
SOLID PRINCIPLES
Luciano Queiroz
SOLID Design Principles
SOLID Design Principles
Samuel Breed
SOLID Design Principles
SOLID Design Principles
Andreas Enbohm
Software development best practices & coding guidelines
Software development best practices & coding guidelines
Ankur Goyal
Let's Learn Ruby - Basic
Let's Learn Ruby - Basic
Eddie Kao
What's hot
(20)
Object Oriented Programming Concepts
Object Oriented Programming Concepts
Clean code
Clean code
Clean code
Clean code
Solid principles
Solid principles
Oop
Oop
リーンなコードを書こう:実践的なオブジェクト指向設計
リーンなコードを書こう:実践的なオブジェクト指向設計
Jakarta CDI 4.0
Jakarta CDI 4.0
Solid principles
Solid principles
設計をする上で役にたった制約について
設計をする上で役にたった制約について
Are You a SOLID Coder?
Are You a SOLID Coder?
ちいさなオブジェクトでドメインモデルを組み立てる
ちいさなオブジェクトでドメインモデルを組み立てる
Concepts In Object Oriented Programming Languages
Concepts In Object Oriented Programming Languages
SOLID
SOLID
Java 11 to 17 : What's new !?
Java 11 to 17 : What's new !?
リレーショナルな正しいデータベース設計
リレーショナルな正しいデータベース設計
SOLID PRINCIPLES
SOLID PRINCIPLES
SOLID Design Principles
SOLID Design Principles
SOLID Design Principles
SOLID Design Principles
Software development best practices & coding guidelines
Software development best practices & coding guidelines
Let's Learn Ruby - Basic
Let's Learn Ruby - Basic
Viewers also liked
Memory profiler and garbage collector in C#
Memory profiler and garbage collector in C#
Wipro
臉書廣告提案 完整版
臉書廣告提案 完整版
Sammy Cheng
6 Ways to Cook Your Capability On Slides Preparation
6 Ways to Cook Your Capability On Slides Preparation
Perpa Hsieh
用社群形塑品牌形象 Social Media Marketing & Branding
用社群形塑品牌形象 Social Media Marketing & Branding
Norika
What is ux?
What is ux?
Géraud de LAVAL
Open erp python-快速数据库应用开发
Open erp python-快速数据库应用开发
Yan Junyi
X tuple open erp system
X tuple open erp system
amiteshg
20170212 從法國反思台灣的民主審議(家華)
20170212 從法國反思台灣的民主審議(家華)
Chia Hua Lu
廣告策略 海尼根
廣告策略 海尼根
HU, PU-SYUAN
IXDC BEIJING 2015
IXDC BEIJING 2015
Henk Haaima
《大廟興學》十週年台江廟口文化沙龍─ 公共治理的實踐反思: 從法國公共辯論委員會 反思台灣開放政府困境
《大廟興學》十週年台江廟口文化沙龍─ 公共治理的實踐反思: 從法國公共辯論委員會 反思台灣開放政府困境
Chia Hua Lu
From 1 to 164 (new)
From 1 to 164 (new)
美棻Nancy 魏Wei
功夫微講堂02
功夫微講堂02
美棻Nancy 魏Wei
經管班分享
經管班分享
基欽 劉
Facebook 建置班_羅浮DOC
Facebook 建置班_羅浮DOC
基欽 劉
e-Participation for Socially Disadvantaged People : Inclusion and diversity i...
e-Participation for Socially Disadvantaged People : Inclusion and diversity i...
Chia Hua Lu
Mozilla Webmaker: Intro
Mozilla Webmaker: Intro
Irvin Chen
零秒思考力20161216
零秒思考力20161216
美棻Nancy 魏Wei
Docker compose
Docker compose
Oxalide
Hello from mark・馬克說哈囉
Hello from mark・馬克說哈囉
YI Fei Tseng
Viewers also liked
(20)
Memory profiler and garbage collector in C#
Memory profiler and garbage collector in C#
臉書廣告提案 完整版
臉書廣告提案 完整版
6 Ways to Cook Your Capability On Slides Preparation
6 Ways to Cook Your Capability On Slides Preparation
用社群形塑品牌形象 Social Media Marketing & Branding
用社群形塑品牌形象 Social Media Marketing & Branding
What is ux?
What is ux?
Open erp python-快速数据库应用开发
Open erp python-快速数据库应用开发
X tuple open erp system
X tuple open erp system
20170212 從法國反思台灣的民主審議(家華)
20170212 從法國反思台灣的民主審議(家華)
廣告策略 海尼根
廣告策略 海尼根
IXDC BEIJING 2015
IXDC BEIJING 2015
《大廟興學》十週年台江廟口文化沙龍─ 公共治理的實踐反思: 從法國公共辯論委員會 反思台灣開放政府困境
《大廟興學》十週年台江廟口文化沙龍─ 公共治理的實踐反思: 從法國公共辯論委員會 反思台灣開放政府困境
From 1 to 164 (new)
From 1 to 164 (new)
功夫微講堂02
功夫微講堂02
經管班分享
經管班分享
Facebook 建置班_羅浮DOC
Facebook 建置班_羅浮DOC
e-Participation for Socially Disadvantaged People : Inclusion and diversity i...
e-Participation for Socially Disadvantaged People : Inclusion and diversity i...
Mozilla Webmaker: Intro
Mozilla Webmaker: Intro
零秒思考力20161216
零秒思考力20161216
Docker compose
Docker compose
Hello from mark・馬克說哈囉
Hello from mark・馬克說哈囉
More from Jamie (Taka) Wang
20200606_insight_Ignition
20200606_insight_Ignition
Jamie (Taka) Wang
20200727_Insight workstation
20200727_Insight workstation
Jamie (Taka) Wang
20200723_insight_release_plan
20200723_insight_release_plan
Jamie (Taka) Wang
20210105_量產技轉
20210105_量產技轉
Jamie (Taka) Wang
20200808自營電商平台策略討論
20200808自營電商平台策略討論
Jamie (Taka) Wang
20200427_hardware
20200427_hardware
Jamie (Taka) Wang
20200429_ec
20200429_ec
Jamie (Taka) Wang
20200607_insight_sync
20200607_insight_sync
Jamie (Taka) Wang
20220113_product_day
20220113_product_day
Jamie (Taka) Wang
20200429_software
20200429_software
Jamie (Taka) Wang
20200602_insight_business
20200602_insight_business
Jamie (Taka) Wang
20200408_gen11_sequence_diagram
20200408_gen11_sequence_diagram
Jamie (Taka) Wang
20190827_activity_diagram
20190827_activity_diagram
Jamie (Taka) Wang
20150722 - AGV
20150722 - AGV
Jamie (Taka) Wang
20161220 - microservice
20161220 - microservice
Jamie (Taka) Wang
20160217 - Overview of Vortex Intelligent Data Sharing Platform
20160217 - Overview of Vortex Intelligent Data Sharing Platform
Jamie (Taka) Wang
20151111 - IoT Sync Up
20151111 - IoT Sync Up
Jamie (Taka) Wang
20151207 - iot strategy
20151207 - iot strategy
Jamie (Taka) Wang
20141210 - Microservice Container
20141210 - Microservice Container
Jamie (Taka) Wang
20161027 - edge part2
20161027 - edge part2
Jamie (Taka) Wang
More from Jamie (Taka) Wang
(20)
20200606_insight_Ignition
20200606_insight_Ignition
20200727_Insight workstation
20200727_Insight workstation
20200723_insight_release_plan
20200723_insight_release_plan
20210105_量產技轉
20210105_量產技轉
20200808自營電商平台策略討論
20200808自營電商平台策略討論
20200427_hardware
20200427_hardware
20200429_ec
20200429_ec
20200607_insight_sync
20200607_insight_sync
20220113_product_day
20220113_product_day
20200429_software
20200429_software
20200602_insight_business
20200602_insight_business
20200408_gen11_sequence_diagram
20200408_gen11_sequence_diagram
20190827_activity_diagram
20190827_activity_diagram
20150722 - AGV
20150722 - AGV
20161220 - microservice
20161220 - microservice
20160217 - Overview of Vortex Intelligent Data Sharing Platform
20160217 - Overview of Vortex Intelligent Data Sharing Platform
20151111 - IoT Sync Up
20151111 - IoT Sync Up
20151207 - iot strategy
20151207 - iot strategy
20141210 - Microservice Container
20141210 - Microservice Container
20161027 - edge part2
20161027 - edge part2
Recently uploaded
educ6506presentationtc3302771-240427173057-06a46de5.pptx
educ6506presentationtc3302771-240427173057-06a46de5.pptx
mekosin001123
哪里可以购买日本筑波学院大学学位记/做个假的文凭可认证吗/仿制日本大学毕业证/意大利语CELI证书定制
哪里可以购买日本筑波学院大学学位记/做个假的文凭可认证吗/仿制日本大学毕业证/意大利语CELI证书定制
jakepaige317
泽兰应用科学大学毕业证制作/定制国外大学录取通知书/购买一个假的建国科技大学硕士学位证书
泽兰应用科学大学毕业证制作/定制国外大学录取通知书/购买一个假的建国科技大学硕士学位证书
jakepaige317
1.🎉“入侵大学入学考试中心修改成绩”来袭!ALEVEL替考大揭秘,轻松搞定考试成绩! 💥你还在为无法进入大学招生系统而烦恼吗?想知道如何通过技术手段更改...
1.🎉“入侵大学入学考试中心修改成绩”来袭!ALEVEL替考大揭秘,轻松搞定考试成绩! 💥你还在为无法进入大学招生系统而烦恼吗?想知道如何通过技术手段更改...
黑客 接单【TG/微信qoqoqdqd】
EDUC6506(001)_ClassPresentation_2_TC330277 (1).pptx
EDUC6506(001)_ClassPresentation_2_TC330277 (1).pptx
mekosin001123
EDUC6506_ClassPresentation_TC330277 (1).pptx
EDUC6506_ClassPresentation_TC330277 (1).pptx
mekosin001123
Recently uploaded
(6)
educ6506presentationtc3302771-240427173057-06a46de5.pptx
educ6506presentationtc3302771-240427173057-06a46de5.pptx
哪里可以购买日本筑波学院大学学位记/做个假的文凭可认证吗/仿制日本大学毕业证/意大利语CELI证书定制
哪里可以购买日本筑波学院大学学位记/做个假的文凭可认证吗/仿制日本大学毕业证/意大利语CELI证书定制
泽兰应用科学大学毕业证制作/定制国外大学录取通知书/购买一个假的建国科技大学硕士学位证书
泽兰应用科学大学毕业证制作/定制国外大学录取通知书/购买一个假的建国科技大学硕士学位证书
1.🎉“入侵大学入学考试中心修改成绩”来袭!ALEVEL替考大揭秘,轻松搞定考试成绩! 💥你还在为无法进入大学招生系统而烦恼吗?想知道如何通过技术手段更改...
1.🎉“入侵大学入学考试中心修改成绩”来袭!ALEVEL替考大揭秘,轻松搞定考试成绩! 💥你还在为无法进入大学招生系统而烦恼吗?想知道如何通过技术手段更改...
EDUC6506(001)_ClassPresentation_2_TC330277 (1).pptx
EDUC6506(001)_ClassPresentation_2_TC330277 (1).pptx
EDUC6506_ClassPresentation_TC330277 (1).pptx
EDUC6506_ClassPresentation_TC330277 (1).pptx
SOLID Principles
1.
SOLID 回顧 2016/12/27 Taka Wang
2.
SINGLE RESPONSIBILITY PRINCIPLE 單⼀一職責 •
A class shouldn't have more than one responsibility • ⽩白話:⼀一個 Class 只做好⼀一件事情 • 注意:並不是說,Class 只有⼀一個 method
3.
EXAMPLE +getTitle(): String +getAuthor(): String +turnPage() +printCurrentPage():
String Book 包含了了顯⽰示的邏輯
4.
EXAMPLE +getTitle(): String +getAuthor(): String +turnPage() +printCurrentPage():
String Book 包含了了顯⽰示的邏輯 +getTitle(): String +getAuthor(): String +turnPage() +getCurrentPage(): String Book +printPage(String): String <<Interface>> Printer +printPage(String): String PlainTextPrinter +printPage(String): String HtmlPrinter
5.
EXAMPLE +getTitle(): String +getAuthor(): String +turnPage() +printCurrentPage():
String Book 包含了了顯⽰示的邏輯 +getTitle(): String +getAuthor(): String +turnPage() +getCurrentPage(): String Book +printPage(String): String <<Interface>> Printer +printPage(String): String PlainTextPrinter +printPage(String): String HtmlPrinter
6.
FAVOR OBJECT COMPOSITION
OVER CLASS INHERITANCE +openDoor() +closeDoor() -light: bool -doorOpen: bool DoorLight Car +accelerate() +slowDown() -speed: float Engine GoF Page20
7.
OPEN CLOSED PRINCIPLE 開放封閉 •
⽩白話1:軟體要很容易易擴充功能,且擴充時原有的code都不需修改。 • ⽩白話2:軟體設計,應該對擴充開放,對修改封閉。
8.
+ HandleProcess(client:Client)() + ClientType:
CLient BankHandle + Deposit() + Transfer() + DrawMoney() BankProcess 添加⽅方法需要修改 BankProcess
9.
+ HandleProcess(client:Client)() + ClientType:
CLient BankHandle + Deposit() + Transfer() + DrawMoney() BankProcess + HandleProcess(client:Client)() + ClientType: CLient BankHandle + Process() <<Interface>> IBankProcess + Process() TransferProcess + Process() DrawMoneyProcess + Process() DepositProcess 添加⽅方法需要修改 BankProcess 增加新的Process只需要符 合IBackProcess Interface, BankHandle與IBackProcess 都不⽤用修改。
10.
LISKOV SUBSTITUTION PRINCIPLE 裡⽒氏替換 •
⽩白話1:⼦子類必須能夠替換其⽗父類別。 • 思路路:設計⽗父類別時,只把所有的⼦子類都有的東⻄西放進來來(抽出來來)。 • ⽩白話2:如果有⼀一個類別(class)實作(implements)了了⼀一個介⾯面(interface),那任何使⽤用這個介⾯面 (interface)的地⽅方,底下的實作類別(class)應該都可以被抽換成另⼀一個有實作(implements)該 介⾯面(interface)的類別(class),⽽而不需要修改原本的程式碼就能正常運作。呼叫⽅方不⽤用修改
11.
抽出共同的屬性 + Fly() + Fly()+
Fly()
12.
+run() <<Interface>> Toy +run() ToyCar +run() ToyPlane
13.
+run() <<Interface>> Toy +run() ToyCar +run() ToyPlane +on() +off() <<Interface>> Toy +on() +off() +run() ToyCar +on() +off() +fly() ToyPlane
14.
+run() <<Interface>> Toy +run() ToyCar +run() ToyPlane +on() +off() <<Interface>> Toy +on() +off() +run() ToyCar +on() +off() +fly() ToyPlane 無法⽤用⼦子類別取代⽗父類別
15.
+run() <<Interface>> Toy +run() ToyCar +run() ToyPlane +on() +off() <<Interface>> Toy +on() +off() +run() ToyCar +on() +off() +fly() ToyPlane +on() +off() +start() <<Interface>> Toy +on() +off() +start() // runs ToyCar +on() +off() +start()
// fly ToyPlane +on() +off() +start() // talk ToyBear 無法⽤用⼦子類別取代⽗父類別
16.
INTERFACE SEGREGATION PRINCIPLE 介⾯面隔離 •
⽩白話1:設計介⾯面儘量量簡單,別把不相關的東⻄西放進來來。 • ⽩白話2:使⽤用多個專⾨門的介⾯面比使⽤用單⼀一的總介⾯面要好,否則會造成對介 ⾯面的污染。⼀一個類別對另⼀一個類別的依賴性應當是建立在最⼩小的介⾯面上。
17.
每個交易易都要實作全部method https://byrontech.wordpress.com/2015/01/15/the-interface-segregation-principle-explained/ Deposit Transaction Withdrawal Transaction Transfer Transaction +RequestDepositAmt() +RequestWithdrawalAmt() +RequestTransferAmt() +InforminsufficientFunds() <<Interface>> UI +Execute() Transaction (abstract)
18.
每個交易易都要實作全部method https://byrontech.wordpress.com/2015/01/15/the-interface-segregation-principle-explained/ Deposit Transaction Withdrawal Transaction Transfer Transaction +RequestDepositAmt() +RequestWithdrawalAmt() +RequestTransferAmt() +InforminsufficientFunds() <<Interface>> UI +Execute() Transaction (abstract) Deposit Transaction Withdrawal Transaction Transfer Transaction +RequestDepositAmt() +RequestWithdrawalAmt() +RequestTransferAmt() +InforminsufficientFunds() <<Interface>> UI +Execute() Transaction (abstract) +RequestDepositAmt() <<Interface>> Deposit UI +RequestWithdrawalAmt() +InforminsufficientFunds() <<Interface>> Withdrawal UI +RequestTransferAmt() <<Interface>> Transfer
UI
19.
DEPENDENCY INVERSION PRINCIPLE 依賴倒轉 •
不要具體的指明物件的關係,⽽而要抽象觀念念替代之。
20.
• 這個原則包含兩兩點: • ⾼高階模組不應該依賴低階模組,兩兩者應依賴於抽象類別。 •
抽象類別不應該依賴實作類別,⽽而實作類別則應該依賴抽象類別。 • 所謂的不依賴,簡單來來說就是,低階模組被替換或修改後,⾼高階模組不應該 被迫修改;反過來來說,如果抽象類別被修改了了,則實作類別被迫修改則是合 理理的。⽽而如何區分⾼高階跟低階?通常低階模組會是⾼高階模組的⼀一部份。 • DI (Dependency Injection, 依賴注入) 為其實作的⽅方法之⼀一。
21.
Policy Module (SimpleCopy, Synchronize,
etc) Mechanism Module (File://) http://teddy-chen-tw.blogspot.tw/2012/01/5dependency-inversion-principle.html
22.
Policy Module (SimpleCopy, Synchronize,
etc) Mechanism Module (File://) (SimpleCopy, Synchronize, etc) <<interface>> IFileManipulate HTTP:// FTP://File:// Mechanism Module Policy Module http://teddy-chen-tw.blogspot.tw/2012/01/5dependency-inversion-principle.html
23.
參參考⽂文獻 • ⽩白話- OO設計原則
(SOLID原則) - 附⽣生活實例例 • SOLID 原則(3) Liskov Substitution Principle • The Single Responsibility Principle • 物件導向中常⾒見見的幾個設計原則 – Some Principle of Object Oriented Design • 物件導向程式設計基本原則 - SOLID • SOLID:五則皆變