SlideShare a Scribd company logo
1 of 23
SOLID 回顧
2016/12/27
Taka Wang
SINGLE RESPONSIBILITY PRINCIPLE
單⼀一職責
• A class shouldn't have more than one responsibility
• ⽩白話:⼀一個 Class 只做好⼀一件事情
• 注意:並不是說,Class 只有⼀一個 method
EXAMPLE
+getTitle(): String
+getAuthor(): String
+turnPage()
+printCurrentPage(): String
Book
包含了了顯⽰示的邏輯
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
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
FAVOR OBJECT COMPOSITION OVER
CLASS INHERITANCE
+openDoor()
+closeDoor()
-light: bool
-doorOpen: bool
DoorLight
Car
+accelerate()
+slowDown()
-speed: float
Engine
GoF Page20
OPEN CLOSED PRINCIPLE
開放封閉
• ⽩白話1:軟體要很容易易擴充功能,且擴充時原有的code都不需修改。
• ⽩白話2:軟體設計,應該對擴充開放,對修改封閉。
+ HandleProcess(client:Client)()
+ ClientType: CLient
BankHandle
+ Deposit()
+ Transfer()
+ DrawMoney()
BankProcess
添加⽅方法需要修改
BankProcess
+ 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
都不⽤用修改。
LISKOV SUBSTITUTION PRINCIPLE
裡⽒氏替換
• ⽩白話1:⼦子類必須能夠替換其⽗父類別。
• 思路路:設計⽗父類別時,只把所有的⼦子類都有的東⻄西放進來來(抽出來來)。
• ⽩白話2:如果有⼀一個類別(class)實作(implements)了了⼀一個介⾯面(interface),那任何使⽤用這個介⾯面
(interface)的地⽅方,底下的實作類別(class)應該都可以被抽換成另⼀一個有實作(implements)該
介⾯面(interface)的類別(class),⽽而不需要修改原本的程式碼就能正常運作。呼叫⽅方不⽤用修改
抽出共同的屬性
+ Fly()
+ Fly()+ Fly()
+run()
<<Interface>>
Toy
+run()
ToyCar
+run()
ToyPlane
+run()
<<Interface>>
Toy
+run()
ToyCar
+run()
ToyPlane
+on()
+off()
<<Interface>>
Toy
+on()
+off()
+run()
ToyCar
+on()
+off()
+fly()
ToyPlane
+run()
<<Interface>>
Toy
+run()
ToyCar
+run()
ToyPlane
+on()
+off()
<<Interface>>
Toy
+on()
+off()
+run()
ToyCar
+on()
+off()
+fly()
ToyPlane
無法⽤用⼦子類別取代⽗父類別
+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
無法⽤用⼦子類別取代⽗父類別
INTERFACE SEGREGATION PRINCIPLE
介⾯面隔離
• ⽩白話1:設計介⾯面儘量量簡單,別把不相關的東⻄西放進來來。
• ⽩白話2:使⽤用多個專⾨門的介⾯面比使⽤用單⼀一的總介⾯面要好,否則會造成對介
⾯面的污染。⼀一個類別對另⼀一個類別的依賴性應當是建立在最⼩小的介⾯面上。
每個交易易都要實作全部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)
每個交易易都要實作全部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
DEPENDENCY INVERSION PRINCIPLE
依賴倒轉
• 不要具體的指明物件的關係,⽽而要抽象觀念念替代之。
• 這個原則包含兩兩點:
• ⾼高階模組不應該依賴低階模組,兩兩者應依賴於抽象類別。
• 抽象類別不應該依賴實作類別,⽽而實作類別則應該依賴抽象類別。
• 所謂的不依賴,簡單來來說就是,低階模組被替換或修改後,⾼高階模組不應該
被迫修改;反過來來說,如果抽象類別被修改了了,則實作類別被迫修改則是合
理理的。⽽而如何區分⾼高階跟低階?通常低階模組會是⾼高階模組的⼀一部份。
• DI (Dependency Injection, 依賴注入) 為其實作的⽅方法之⼀一。
Policy Module
(SimpleCopy, Synchronize, etc)
Mechanism Module
(File://)
http://teddy-chen-tw.blogspot.tw/2012/01/5dependency-inversion-principle.html
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
參參考⽂文獻
• ⽩白話- OO設計原則 (SOLID原則) - 附⽣生活實例例
• SOLID 原則(3) Liskov Substitution Principle
• The Single Responsibility Principle
• 物件導向中常⾒見見的幾個設計原則 – Some Principle of Object Oriented Design
• 物件導向程式設計基本原則 - SOLID
• SOLID:五則皆變

More Related Content

What's hot

Object Oriented Programming Concepts
Object Oriented Programming ConceptsObject Oriented Programming Concepts
Object Oriented Programming Conceptsthinkphp
 
リーンなコードを書こう:実践的なオブジェクト指向設計
リーンなコードを書こう:実践的なオブジェクト指向設計リーンなコードを書こう:実践的なオブジェクト指向設計
リーンなコードを書こう:実践的なオブジェクト指向設計増田 亨
 
Solid principles
Solid principlesSolid principles
Solid principlesToan Nguyen
 
設計をする上で役にたった制約について
設計をする上で役にたった制約について設計をする上で役にたった制約について
設計をする上で役にたった制約についてIkki Takahashi
 
Are You a SOLID Coder?
Are You a SOLID Coder?Are You a SOLID Coder?
Are You a SOLID Coder?Steve Green
 
ちいさなオブジェクトでドメインモデルを組み立てる
ちいさなオブジェクトでドメインモデルを組み立てるちいさなオブジェクトでドメインモデルを組み立てる
ちいさなオブジェクトでドメインモデルを組み立てる増田 亨
 
Concepts In Object Oriented Programming Languages
Concepts In Object Oriented Programming LanguagesConcepts In Object Oriented Programming Languages
Concepts In Object Oriented Programming Languagesppd1961
 
リレーショナルな正しいデータベース設計
リレーショナルな正しいデータベース設計リレーショナルな正しいデータベース設計
リレーショナルな正しいデータベース設計Mikiya Okuno
 
SOLID Design Principles
SOLID Design PrinciplesSOLID Design Principles
SOLID Design PrinciplesSamuel Breed
 
SOLID Design Principles
SOLID Design PrinciplesSOLID Design Principles
SOLID Design PrinciplesAndreas Enbohm
 
Software development best practices & coding guidelines
Software development best practices & coding guidelinesSoftware development best practices & coding guidelines
Software development best practices & coding guidelinesAnkur Goyal
 
Let's Learn Ruby - Basic
Let's Learn Ruby - BasicLet's Learn Ruby - Basic
Let's Learn Ruby - BasicEddie Kao
 

What's hot (20)

Object Oriented Programming Concepts
Object Oriented Programming ConceptsObject Oriented Programming Concepts
Object Oriented Programming Concepts
 
Clean code
Clean code Clean code
Clean code
 
Clean code
Clean codeClean code
Clean code
 
Solid principles
Solid principlesSolid principles
Solid principles
 
Oop
OopOop
Oop
 
リーンなコードを書こう:実践的なオブジェクト指向設計
リーンなコードを書こう:実践的なオブジェクト指向設計リーンなコードを書こう:実践的なオブジェクト指向設計
リーンなコードを書こう:実践的なオブジェクト指向設計
 
Jakarta CDI 4.0
Jakarta CDI 4.0Jakarta CDI 4.0
Jakarta CDI 4.0
 
Solid principles
Solid principlesSolid principles
Solid principles
 
設計をする上で役にたった制約について
設計をする上で役にたった制約について設計をする上で役にたった制約について
設計をする上で役にたった制約について
 
Are You a SOLID Coder?
Are You a SOLID Coder?Are You a SOLID Coder?
Are You a SOLID Coder?
 
ちいさなオブジェクトでドメインモデルを組み立てる
ちいさなオブジェクトでドメインモデルを組み立てるちいさなオブジェクトでドメインモデルを組み立てる
ちいさなオブジェクトでドメインモデルを組み立てる
 
Concepts In Object Oriented Programming Languages
Concepts In Object Oriented Programming LanguagesConcepts In Object Oriented Programming Languages
Concepts In Object Oriented Programming Languages
 
SOLID
SOLIDSOLID
SOLID
 
Java 11 to 17 : What's new !?
Java 11 to 17 : What's new !?Java 11 to 17 : What's new !?
Java 11 to 17 : What's new !?
 
リレーショナルな正しいデータベース設計
リレーショナルな正しいデータベース設計リレーショナルな正しいデータベース設計
リレーショナルな正しいデータベース設計
 
SOLID PRINCIPLES
SOLID PRINCIPLESSOLID PRINCIPLES
SOLID PRINCIPLES
 
SOLID Design Principles
SOLID Design PrinciplesSOLID Design Principles
SOLID Design Principles
 
SOLID Design Principles
SOLID Design PrinciplesSOLID Design Principles
SOLID Design Principles
 
Software development best practices & coding guidelines
Software development best practices & coding guidelinesSoftware development best practices & coding guidelines
Software development best practices & coding guidelines
 
Let's Learn Ruby - Basic
Let's Learn Ruby - BasicLet'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#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 Preparation6 Ways to Cook Your Capability On Slides Preparation
6 Ways to Cook Your Capability On Slides PreparationPerpa Hsieh
 
用社群形塑品牌形象 Social Media Marketing & Branding
用社群形塑品牌形象 Social Media Marketing & Branding用社群形塑品牌形象 Social Media Marketing & Branding
用社群形塑品牌形象 Social Media Marketing & BrandingNorika
 
Open erp python-快速数据库应用开发
Open erp python-快速数据库应用开发Open erp python-快速数据库应用开发
Open erp python-快速数据库应用开发Yan Junyi
 
X tuple open erp system
X tuple open erp system X tuple open erp system
X tuple open erp system amiteshg
 
20170212 從法國反思台灣的民主審議(家華)
20170212 從法國反思台灣的民主審議(家華)20170212 從法國反思台灣的民主審議(家華)
20170212 從法國反思台灣的民主審議(家華)Chia Hua Lu
 
廣告策略 海尼根
廣告策略 海尼根廣告策略 海尼根
廣告策略 海尼根HU, PU-SYUAN
 
IXDC BEIJING 2015
IXDC BEIJING 2015IXDC BEIJING 2015
IXDC BEIJING 2015Henk Haaima
 
《大廟興學》十週年台江廟口文化沙龍─ 公共治理的實踐反思: 從法國公共辯論委員會 反思台灣開放政府困境
《大廟興學》十週年台江廟口文化沙龍─ 公共治理的實踐反思: 從法國公共辯論委員會 反思台灣開放政府困境《大廟興學》十週年台江廟口文化沙龍─ 公共治理的實踐反思: 從法國公共辯論委員會 反思台灣開放政府困境
《大廟興學》十週年台江廟口文化沙龍─ 公共治理的實踐反思: 從法國公共辯論委員會 反思台灣開放政府困境Chia Hua Lu
 
經管班分享
經管班分享經管班分享
經管班分享基欽 劉
 
Facebook 建置班_羅浮DOC
Facebook 建置班_羅浮DOCFacebook 建置班_羅浮DOC
Facebook 建置班_羅浮DOC基欽 劉
 
e-Participation for Socially Disadvantaged People : Inclusion and diversity i...
e-Participation for Socially Disadvantaged People : Inclusion and diversity i...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: IntroMozilla Webmaker: Intro
Mozilla Webmaker: IntroIrvin Chen
 
Docker compose
Docker composeDocker compose
Docker composeOxalide
 
Hello from mark・馬克說哈囉
Hello from mark・馬克說哈囉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#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 Preparation6 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用社群形塑品牌形象 Social Media Marketing & Branding
用社群形塑品牌形象 Social Media Marketing & Branding
 
What is ux?
What is ux?What is ux?
What is ux?
 
Open erp python-快速数据库应用开发
Open erp python-快速数据库应用开发Open erp python-快速数据库应用开发
Open erp python-快速数据库应用开发
 
X tuple open erp system
X tuple open erp system X tuple open erp system
X tuple open erp system
 
20170212 從法國反思台灣的民主審議(家華)
20170212 從法國反思台灣的民主審議(家華)20170212 從法國反思台灣的民主審議(家華)
20170212 從法國反思台灣的民主審議(家華)
 
廣告策略 海尼根
廣告策略 海尼根廣告策略 海尼根
廣告策略 海尼根
 
IXDC BEIJING 2015
IXDC BEIJING 2015IXDC BEIJING 2015
IXDC BEIJING 2015
 
《大廟興學》十週年台江廟口文化沙龍─ 公共治理的實踐反思: 從法國公共辯論委員會 反思台灣開放政府困境
《大廟興學》十週年台江廟口文化沙龍─ 公共治理的實踐反思: 從法國公共辯論委員會 反思台灣開放政府困境《大廟興學》十週年台江廟口文化沙龍─ 公共治理的實踐反思: 從法國公共辯論委員會 反思台灣開放政府困境
《大廟興學》十週年台江廟口文化沙龍─ 公共治理的實踐反思: 從法國公共辯論委員會 反思台灣開放政府困境
 
From 1 to 164 (new)
From 1 to 164 (new)From 1 to 164 (new)
From 1 to 164 (new)
 
功夫微講堂02
功夫微講堂02功夫微講堂02
功夫微講堂02
 
經管班分享
經管班分享經管班分享
經管班分享
 
Facebook 建置班_羅浮DOC
Facebook 建置班_羅浮DOCFacebook 建置班_羅浮DOC
Facebook 建置班_羅浮DOC
 
e-Participation for Socially Disadvantaged People : Inclusion and diversity i...
e-Participation for Socially Disadvantaged People : Inclusion and diversity i...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: IntroMozilla Webmaker: Intro
Mozilla Webmaker: Intro
 
零秒思考力20161216
零秒思考力20161216零秒思考力20161216
零秒思考力20161216
 
Docker compose
Docker composeDocker compose
Docker compose
 
Hello from mark・馬克說哈囉
Hello from mark・馬克說哈囉Hello from mark・馬克說哈囉
Hello from mark・馬克說哈囉
 

More from Jamie (Taka) Wang

More from Jamie (Taka) Wang (20)

20200606_insight_Ignition
20200606_insight_Ignition20200606_insight_Ignition
20200606_insight_Ignition
 
20200727_Insight workstation
20200727_Insight workstation20200727_Insight workstation
20200727_Insight workstation
 
20200723_insight_release_plan
20200723_insight_release_plan20200723_insight_release_plan
20200723_insight_release_plan
 
20210105_量產技轉
20210105_量產技轉20210105_量產技轉
20210105_量產技轉
 
20200808自營電商平台策略討論
20200808自營電商平台策略討論20200808自營電商平台策略討論
20200808自營電商平台策略討論
 
20200427_hardware
20200427_hardware20200427_hardware
20200427_hardware
 
20200429_ec
20200429_ec20200429_ec
20200429_ec
 
20200607_insight_sync
20200607_insight_sync20200607_insight_sync
20200607_insight_sync
 
20220113_product_day
20220113_product_day20220113_product_day
20220113_product_day
 
20200429_software
20200429_software20200429_software
20200429_software
 
20200602_insight_business
20200602_insight_business20200602_insight_business
20200602_insight_business
 
20200408_gen11_sequence_diagram
20200408_gen11_sequence_diagram20200408_gen11_sequence_diagram
20200408_gen11_sequence_diagram
 
20190827_activity_diagram
20190827_activity_diagram20190827_activity_diagram
20190827_activity_diagram
 
20150722 - AGV
20150722 - AGV20150722 - AGV
20150722 - AGV
 
20161220 - microservice
20161220 - microservice20161220 - microservice
20161220 - microservice
 
20160217 - Overview of Vortex Intelligent Data Sharing Platform
20160217 - Overview of Vortex Intelligent Data Sharing Platform20160217 - Overview of Vortex Intelligent Data Sharing Platform
20160217 - Overview of Vortex Intelligent Data Sharing Platform
 
20151111 - IoT Sync Up
20151111 - IoT Sync Up20151111 - IoT Sync Up
20151111 - IoT Sync Up
 
20151207 - iot strategy
20151207 - iot strategy20151207 - iot strategy
20151207 - iot strategy
 
20141210 - Microservice Container
20141210 - Microservice Container20141210 - Microservice Container
20141210 - Microservice Container
 
20161027 - edge part2
20161027 - edge part220161027 - edge part2
20161027 - edge part2
 

Recently uploaded

educ6506presentationtc3302771-240427173057-06a46de5.pptx
educ6506presentationtc3302771-240427173057-06a46de5.pptxeduc6506presentationtc3302771-240427173057-06a46de5.pptx
educ6506presentationtc3302771-240427173057-06a46de5.pptxmekosin001123
 
哪里可以购买日本筑波学院大学学位记/做个假的文凭可认证吗/仿制日本大学毕业证/意大利语CELI证书定制
哪里可以购买日本筑波学院大学学位记/做个假的文凭可认证吗/仿制日本大学毕业证/意大利语CELI证书定制哪里可以购买日本筑波学院大学学位记/做个假的文凭可认证吗/仿制日本大学毕业证/意大利语CELI证书定制
哪里可以购买日本筑波学院大学学位记/做个假的文凭可认证吗/仿制日本大学毕业证/意大利语CELI证书定制jakepaige317
 
泽兰应用科学大学毕业证制作/定制国外大学录取通知书/购买一个假的建国科技大学硕士学位证书
泽兰应用科学大学毕业证制作/定制国外大学录取通知书/购买一个假的建国科技大学硕士学位证书泽兰应用科学大学毕业证制作/定制国外大学录取通知书/购买一个假的建国科技大学硕士学位证书
泽兰应用科学大学毕业证制作/定制国外大学录取通知书/购买一个假的建国科技大学硕士学位证书jakepaige317
 
1.🎉“入侵大学入学考试中心修改成绩”来袭!ALEVEL替考大揭秘,轻松搞定考试成绩! 💥你还在为无法进入大学招生系统而烦恼吗?想知道如何通过技术手段更改...
1.🎉“入侵大学入学考试中心修改成绩”来袭!ALEVEL替考大揭秘,轻松搞定考试成绩! 💥你还在为无法进入大学招生系统而烦恼吗?想知道如何通过技术手段更改...1.🎉“入侵大学入学考试中心修改成绩”来袭!ALEVEL替考大揭秘,轻松搞定考试成绩! 💥你还在为无法进入大学招生系统而烦恼吗?想知道如何通过技术手段更改...
1.🎉“入侵大学入学考试中心修改成绩”来袭!ALEVEL替考大揭秘,轻松搞定考试成绩! 💥你还在为无法进入大学招生系统而烦恼吗?想知道如何通过技术手段更改...黑客 接单【TG/微信qoqoqdqd】
 
EDUC6506(001)_ClassPresentation_2_TC330277 (1).pptx
EDUC6506(001)_ClassPresentation_2_TC330277 (1).pptxEDUC6506(001)_ClassPresentation_2_TC330277 (1).pptx
EDUC6506(001)_ClassPresentation_2_TC330277 (1).pptxmekosin001123
 
EDUC6506_ClassPresentation_TC330277 (1).pptx
EDUC6506_ClassPresentation_TC330277 (1).pptxEDUC6506_ClassPresentation_TC330277 (1).pptx
EDUC6506_ClassPresentation_TC330277 (1).pptxmekosin001123
 

Recently uploaded (6)

educ6506presentationtc3302771-240427173057-06a46de5.pptx
educ6506presentationtc3302771-240427173057-06a46de5.pptxeduc6506presentationtc3302771-240427173057-06a46de5.pptx
educ6506presentationtc3302771-240427173057-06a46de5.pptx
 
哪里可以购买日本筑波学院大学学位记/做个假的文凭可认证吗/仿制日本大学毕业证/意大利语CELI证书定制
哪里可以购买日本筑波学院大学学位记/做个假的文凭可认证吗/仿制日本大学毕业证/意大利语CELI证书定制哪里可以购买日本筑波学院大学学位记/做个假的文凭可认证吗/仿制日本大学毕业证/意大利语CELI证书定制
哪里可以购买日本筑波学院大学学位记/做个假的文凭可认证吗/仿制日本大学毕业证/意大利语CELI证书定制
 
泽兰应用科学大学毕业证制作/定制国外大学录取通知书/购买一个假的建国科技大学硕士学位证书
泽兰应用科学大学毕业证制作/定制国外大学录取通知书/购买一个假的建国科技大学硕士学位证书泽兰应用科学大学毕业证制作/定制国外大学录取通知书/购买一个假的建国科技大学硕士学位证书
泽兰应用科学大学毕业证制作/定制国外大学录取通知书/购买一个假的建国科技大学硕士学位证书
 
1.🎉“入侵大学入学考试中心修改成绩”来袭!ALEVEL替考大揭秘,轻松搞定考试成绩! 💥你还在为无法进入大学招生系统而烦恼吗?想知道如何通过技术手段更改...
1.🎉“入侵大学入学考试中心修改成绩”来袭!ALEVEL替考大揭秘,轻松搞定考试成绩! 💥你还在为无法进入大学招生系统而烦恼吗?想知道如何通过技术手段更改...1.🎉“入侵大学入学考试中心修改成绩”来袭!ALEVEL替考大揭秘,轻松搞定考试成绩! 💥你还在为无法进入大学招生系统而烦恼吗?想知道如何通过技术手段更改...
1.🎉“入侵大学入学考试中心修改成绩”来袭!ALEVEL替考大揭秘,轻松搞定考试成绩! 💥你还在为无法进入大学招生系统而烦恼吗?想知道如何通过技术手段更改...
 
EDUC6506(001)_ClassPresentation_2_TC330277 (1).pptx
EDUC6506(001)_ClassPresentation_2_TC330277 (1).pptxEDUC6506(001)_ClassPresentation_2_TC330277 (1).pptx
EDUC6506(001)_ClassPresentation_2_TC330277 (1).pptx
 
EDUC6506_ClassPresentation_TC330277 (1).pptx
EDUC6506_ClassPresentation_TC330277 (1).pptxEDUC6506_ClassPresentation_TC330277 (1).pptx
EDUC6506_ClassPresentation_TC330277 (1).pptx
 

SOLID Principles