SlideShare a Scribd company logo
資訊軟體人才培育推廣計畫
壞味道:重複的程式碼
馬尚彬 臺灣海洋大學資工系
©2017 Software Engineering Consortium
• 最常出現的壞味道。
• 如果一段重複的程式碼在一個或多個類別或函
式中出現,代表未來此段程式若需修改,即需
修改多個地方,增加了維護困難度。
• 設法將他們合而為一,程式會變得更好。
重複的程式碼 (Duplicated Code)
2
©2017 Software Engineering Consortium
• 若在同一個class中有重複的程式碼
透過提取函式(Extract Method)將重複的部分抽出來變
成method。
讓原來的重複程式都呼叫這個新method。
• 若不相干的兩個類別中具有重複的程式碼
透過提取類別(Extract Class)將重複的部分先抽取出來
並獨立成一個新的class。
讓原來的重複程式都使用這個新類別。
重複的程式碼 (Duplicated Code)
-重構方法1
3
©2017 Software Engineering Consortium
• 若在兩個子類別(同一個父類別下)具有重複的程式碼
透過提取函式(Extract Method)將重複的部分先抽取出來。
再用提升函式(Pull Up Method)將新method提升至父類別層
級。
• 若重複的部分相似但不完全相同
透過提取函式(Extract Method)將重複且相同的部分抽出來。
有時需用到模版方法(Form Template Method)。
重複的程式碼 (Duplicated Code)
-重構方法2
4
©2017 Software Engineering Consortium
重複的程式碼 (Duplicated Code)
-壞味道範例-1
5
©2017 Software Engineering Consortium
重複的程式碼 (Duplicated Code)
-重構範例-1
6
重複的程式碼應當
抽取為method,讓
原來的重複程式都
呼叫這個新method
©2017 Software Engineering Consortium
重複的程式碼 (Duplicated Code)
-壞味道範例-2
7
©2017 Software Engineering Consortium
將重複的部分先抽取出來並獨立成一個新的class。
重複的程式碼 (Duplicated Code)
-重構範例-2
8
©2017 Software Engineering Consortium
重複的程式碼 (Duplicated Code)
-壞味道範例-3
9
https://refactoring.com/catalog/formTemplateMethod.html
©2017 Software Engineering Consortium
重複的程式碼 (Duplicated Code)
-重構範例-3
10

More Related Content

More from Shang-Pin Ma

2017-refactoring-06-魔術數字
2017-refactoring-06-魔術數字2017-refactoring-06-魔術數字
2017-refactoring-06-魔術數字
Shang-Pin Ma
 
2017-refactoring-04-過多的參數
2017-refactoring-04-過多的參數2017-refactoring-04-過多的參數
2017-refactoring-04-過多的參數
Shang-Pin Ma
 
物件導向設計原則實習
物件導向設計原則實習物件導向設計原則實習
物件導向設計原則實習
Shang-Pin Ma
 
類別圖實習
類別圖實習類別圖實習
類別圖實習
Shang-Pin Ma
 
物件關係實習
物件關係實習物件關係實習
物件關係實習
Shang-Pin Ma
 
給高中生的Web Programming教材
給高中生的Web Programming教材給高中生的Web Programming教材
給高中生的Web Programming教材
Shang-Pin Ma
 
如何學好Java
如何學好Java如何學好Java
如何學好Java
Shang-Pin Ma
 

More from Shang-Pin Ma (7)

2017-refactoring-06-魔術數字
2017-refactoring-06-魔術數字2017-refactoring-06-魔術數字
2017-refactoring-06-魔術數字
 
2017-refactoring-04-過多的參數
2017-refactoring-04-過多的參數2017-refactoring-04-過多的參數
2017-refactoring-04-過多的參數
 
物件導向設計原則實習
物件導向設計原則實習物件導向設計原則實習
物件導向設計原則實習
 
類別圖實習
類別圖實習類別圖實習
類別圖實習
 
物件關係實習
物件關係實習物件關係實習
物件關係實習
 
給高中生的Web Programming教材
給高中生的Web Programming教材給高中生的Web Programming教材
給高中生的Web Programming教材
 
如何學好Java
如何學好Java如何學好Java
如何學好Java
 

Recently uploaded

🎓挂科?不存在的! 想修改成绩却怕麻烦?别担心,我们有绝招! 💡🌟一分钟内搞定,轻松0元就能改好哦~ #快速修复#省心省力#技术爆棚#简单易操作【微信:o...
🎓挂科?不存在的! 想修改成绩却怕麻烦?别担心,我们有绝招! 💡🌟一分钟内搞定,轻松0元就能改好哦~ #快速修复#省心省力#技术爆棚#简单易操作【微信:o...🎓挂科?不存在的! 想修改成绩却怕麻烦?别担心,我们有绝招! 💡🌟一分钟内搞定,轻松0元就能改好哦~ #快速修复#省心省力#技术爆棚#简单易操作【微信:o...
🎓挂科?不存在的! 想修改成绩却怕麻烦?别担心,我们有绝招! 💡🌟一分钟内搞定,轻松0元就能改好哦~ #快速修复#省心省力#技术爆棚#简单易操作【微信:o...
微信 tytyqqww业务接单
 
澳大利亚大学成绩单修改 GPA修改 G5研究生保录英国大学成绩修单改 GPA修改 G5研究生保录实时手机定位app有哪些?【微信:oojjiijj】
澳大利亚大学成绩单修改 GPA修改 G5研究生保录英国大学成绩修单改 GPA修改 G5研究生保录实时手机定位app有哪些?【微信:oojjiijj】澳大利亚大学成绩单修改 GPA修改 G5研究生保录英国大学成绩修单改 GPA修改 G5研究生保录实时手机定位app有哪些?【微信:oojjiijj】
澳大利亚大学成绩单修改 GPA修改 G5研究生保录英国大学成绩修单改 GPA修改 G5研究生保录实时手机定位app有哪些?【微信:oojjiijj】
微信 tytyqqww业务接单
 
113學年度國中教育會考寫作測驗六級分樣卷、113學年度國中教育會考寫作測驗六級分樣卷
113學年度國中教育會考寫作測驗六級分樣卷、113學年度國中教育會考寫作測驗六級分樣卷113學年度國中教育會考寫作測驗六級分樣卷、113學年度國中教育會考寫作測驗六級分樣卷
113學年度國中教育會考寫作測驗六級分樣卷、113學年度國中教育會考寫作測驗六級分樣卷
ssuserd66db11
 
前置学历问题应该怎么处理?GPA低申硕困难,可以修改成绩单吗?毕业难?学历认证来帮忙!留服中心授权机构🎓【微信:oojjiijj】
前置学历问题应该怎么处理?GPA低申硕困难,可以修改成绩单吗?毕业难?学历认证来帮忙!留服中心授权机构🎓【微信:oojjiijj】前置学历问题应该怎么处理?GPA低申硕困难,可以修改成绩单吗?毕业难?学历认证来帮忙!留服中心授权机构🎓【微信:oojjiijj】
前置学历问题应该怎么处理?GPA低申硕困难,可以修改成绩单吗?毕业难?学历认证来帮忙!留服中心授权机构🎓【微信:oojjiijj】
微信 tytyqqww业务接单
 
🔥黑客改成绩,你想知道的都在这里! 🌟[爆炸头] 大胆尝试新方法?试试这个吧~ 💡 提高效率,不再拖延。一键优化,成绩瞬间飙升! #学习动力源泉 #神奇改...
🔥黑客改成绩,你想知道的都在这里! 🌟[爆炸头] 大胆尝试新方法?试试这个吧~ 💡 提高效率,不再拖延。一键优化,成绩瞬间飙升! #学习动力源泉 #神奇改...🔥黑客改成绩,你想知道的都在这里! 🌟[爆炸头] 大胆尝试新方法?试试这个吧~ 💡 提高效率,不再拖延。一键优化,成绩瞬间飙升! #学习动力源泉 #神奇改...
🔥黑客改成绩,你想知道的都在这里! 🌟[爆炸头] 大胆尝试新方法?试试这个吧~ 💡 提高效率,不再拖延。一键优化,成绩瞬间飙升! #学习动力源泉 #神奇改...
微信 tytyqqww业务接单
 
GPA不高,申硕有点困难。想问问能不能改一下成绩单呢?留学生学历认证为什么不通过美国成绩单办理|修改美国大学成绩单|美国假成绩单定制【微信:oojjiijj】
GPA不高,申硕有点困难。想问问能不能改一下成绩单呢?留学生学历认证为什么不通过美国成绩单办理|修改美国大学成绩单|美国假成绩单定制【微信:oojjiijj】GPA不高,申硕有点困难。想问问能不能改一下成绩单呢?留学生学历认证为什么不通过美国成绩单办理|修改美国大学成绩单|美国假成绩单定制【微信:oojjiijj】
GPA不高,申硕有点困难。想问问能不能改一下成绩单呢?留学生学历认证为什么不通过美国成绩单办理|修改美国大学成绩单|美国假成绩单定制【微信:oojjiijj】
微信 tytyqqww业务接单
 
流體力學講義 流體力學講義 流體力學講義 流體力學講義 流體力學講義 流體力學講義
流體力學講義 流體力學講義 流體力學講義 流體力學講義 流體力學講義 流體力學講義流體力學講義 流體力學講義 流體力學講義 流體力學講義 流體力學講義 流體力學講義
流體力學講義 流體力學講義 流體力學講義 流體力學講義 流體力學講義 流體力學講義
LinPhil
 
APII - interview notes 2024 for ogcio latest version
APII - interview notes 2024 for ogcio latest versionAPII - interview notes 2024 for ogcio latest version
APII - interview notes 2024 for ogcio latest version
digimen08
 
加拿大大学成绩单修改 GPA修改 G5研究生保录黑客常用的入侵方式,邮件成主要攻击对象大学成绩修改,找黑客改分,修改成绩单,挂科修改,GPA成绩提高,找黑...
加拿大大学成绩单修改 GPA修改 G5研究生保录黑客常用的入侵方式,邮件成主要攻击对象大学成绩修改,找黑客改分,修改成绩单,挂科修改,GPA成绩提高,找黑...加拿大大学成绩单修改 GPA修改 G5研究生保录黑客常用的入侵方式,邮件成主要攻击对象大学成绩修改,找黑客改分,修改成绩单,挂科修改,GPA成绩提高,找黑...
加拿大大学成绩单修改 GPA修改 G5研究生保录黑客常用的入侵方式,邮件成主要攻击对象大学成绩修改,找黑客改分,修改成绩单,挂科修改,GPA成绩提高,找黑...
微信 tytyqqww业务接单
 
黑客常用的邮件入侵方式如何破解Instagram帐户和密码,留才认证和留服认证的区别中留服认证•海外学历认证•国外学历学位认证留才认证和留信认证(留信认证...
黑客常用的邮件入侵方式如何破解Instagram帐户和密码,留才认证和留服认证的区别中留服认证•海外学历认证•国外学历学位认证留才认证和留信认证(留信认证...黑客常用的邮件入侵方式如何破解Instagram帐户和密码,留才认证和留服认证的区别中留服认证•海外学历认证•国外学历学位认证留才认证和留信认证(留信认证...
黑客常用的邮件入侵方式如何破解Instagram帐户和密码,留才认证和留服认证的区别中留服认证•海外学历认证•国外学历学位认证留才认证和留信认证(留信认证...
微信 tytyqqww业务接单
 
GPA低,申硕困难。想问一下是否能修改成绩单?希望得到您的帮助申请美国大学改成绩单可以吗?如何增加申请成功几率【微信:oojjiijj】
GPA低,申硕困难。想问一下是否能修改成绩单?希望得到您的帮助申请美国大学改成绩单可以吗?如何增加申请成功几率【微信:oojjiijj】GPA低,申硕困难。想问一下是否能修改成绩单?希望得到您的帮助申请美国大学改成绩单可以吗?如何增加申请成功几率【微信:oojjiijj】
GPA低,申硕困难。想问一下是否能修改成绩单?希望得到您的帮助申请美国大学改成绩单可以吗?如何增加申请成功几率【微信:oojjiijj】
微信 tytyqqww业务接单
 
Lesson 3 Self-Introduction New words 1 .pptx
Lesson 3 Self-Introduction New words 1 .pptxLesson 3 Self-Introduction New words 1 .pptx
Lesson 3 Self-Introduction New words 1 .pptx
priscilleng1
 
Unit 3 Self-Introduction New words 3.pptx
Unit 3 Self-Introduction New words 3.pptxUnit 3 Self-Introduction New words 3.pptx
Unit 3 Self-Introduction New words 3.pptx
priscilleng1
 

Recently uploaded (13)

🎓挂科?不存在的! 想修改成绩却怕麻烦?别担心,我们有绝招! 💡🌟一分钟内搞定,轻松0元就能改好哦~ #快速修复#省心省力#技术爆棚#简单易操作【微信:o...
🎓挂科?不存在的! 想修改成绩却怕麻烦?别担心,我们有绝招! 💡🌟一分钟内搞定,轻松0元就能改好哦~ #快速修复#省心省力#技术爆棚#简单易操作【微信:o...🎓挂科?不存在的! 想修改成绩却怕麻烦?别担心,我们有绝招! 💡🌟一分钟内搞定,轻松0元就能改好哦~ #快速修复#省心省力#技术爆棚#简单易操作【微信:o...
🎓挂科?不存在的! 想修改成绩却怕麻烦?别担心,我们有绝招! 💡🌟一分钟内搞定,轻松0元就能改好哦~ #快速修复#省心省力#技术爆棚#简单易操作【微信:o...
 
澳大利亚大学成绩单修改 GPA修改 G5研究生保录英国大学成绩修单改 GPA修改 G5研究生保录实时手机定位app有哪些?【微信:oojjiijj】
澳大利亚大学成绩单修改 GPA修改 G5研究生保录英国大学成绩修单改 GPA修改 G5研究生保录实时手机定位app有哪些?【微信:oojjiijj】澳大利亚大学成绩单修改 GPA修改 G5研究生保录英国大学成绩修单改 GPA修改 G5研究生保录实时手机定位app有哪些?【微信:oojjiijj】
澳大利亚大学成绩单修改 GPA修改 G5研究生保录英国大学成绩修单改 GPA修改 G5研究生保录实时手机定位app有哪些?【微信:oojjiijj】
 
113學年度國中教育會考寫作測驗六級分樣卷、113學年度國中教育會考寫作測驗六級分樣卷
113學年度國中教育會考寫作測驗六級分樣卷、113學年度國中教育會考寫作測驗六級分樣卷113學年度國中教育會考寫作測驗六級分樣卷、113學年度國中教育會考寫作測驗六級分樣卷
113學年度國中教育會考寫作測驗六級分樣卷、113學年度國中教育會考寫作測驗六級分樣卷
 
前置学历问题应该怎么处理?GPA低申硕困难,可以修改成绩单吗?毕业难?学历认证来帮忙!留服中心授权机构🎓【微信:oojjiijj】
前置学历问题应该怎么处理?GPA低申硕困难,可以修改成绩单吗?毕业难?学历认证来帮忙!留服中心授权机构🎓【微信:oojjiijj】前置学历问题应该怎么处理?GPA低申硕困难,可以修改成绩单吗?毕业难?学历认证来帮忙!留服中心授权机构🎓【微信:oojjiijj】
前置学历问题应该怎么处理?GPA低申硕困难,可以修改成绩单吗?毕业难?学历认证来帮忙!留服中心授权机构🎓【微信:oojjiijj】
 
🔥黑客改成绩,你想知道的都在这里! 🌟[爆炸头] 大胆尝试新方法?试试这个吧~ 💡 提高效率,不再拖延。一键优化,成绩瞬间飙升! #学习动力源泉 #神奇改...
🔥黑客改成绩,你想知道的都在这里! 🌟[爆炸头] 大胆尝试新方法?试试这个吧~ 💡 提高效率,不再拖延。一键优化,成绩瞬间飙升! #学习动力源泉 #神奇改...🔥黑客改成绩,你想知道的都在这里! 🌟[爆炸头] 大胆尝试新方法?试试这个吧~ 💡 提高效率,不再拖延。一键优化,成绩瞬间飙升! #学习动力源泉 #神奇改...
🔥黑客改成绩,你想知道的都在这里! 🌟[爆炸头] 大胆尝试新方法?试试这个吧~ 💡 提高效率,不再拖延。一键优化,成绩瞬间飙升! #学习动力源泉 #神奇改...
 
GPA不高,申硕有点困难。想问问能不能改一下成绩单呢?留学生学历认证为什么不通过美国成绩单办理|修改美国大学成绩单|美国假成绩单定制【微信:oojjiijj】
GPA不高,申硕有点困难。想问问能不能改一下成绩单呢?留学生学历认证为什么不通过美国成绩单办理|修改美国大学成绩单|美国假成绩单定制【微信:oojjiijj】GPA不高,申硕有点困难。想问问能不能改一下成绩单呢?留学生学历认证为什么不通过美国成绩单办理|修改美国大学成绩单|美国假成绩单定制【微信:oojjiijj】
GPA不高,申硕有点困难。想问问能不能改一下成绩单呢?留学生学历认证为什么不通过美国成绩单办理|修改美国大学成绩单|美国假成绩单定制【微信:oojjiijj】
 
流體力學講義 流體力學講義 流體力學講義 流體力學講義 流體力學講義 流體力學講義
流體力學講義 流體力學講義 流體力學講義 流體力學講義 流體力學講義 流體力學講義流體力學講義 流體力學講義 流體力學講義 流體力學講義 流體力學講義 流體力學講義
流體力學講義 流體力學講義 流體力學講義 流體力學講義 流體力學講義 流體力學講義
 
APII - interview notes 2024 for ogcio latest version
APII - interview notes 2024 for ogcio latest versionAPII - interview notes 2024 for ogcio latest version
APII - interview notes 2024 for ogcio latest version
 
加拿大大学成绩单修改 GPA修改 G5研究生保录黑客常用的入侵方式,邮件成主要攻击对象大学成绩修改,找黑客改分,修改成绩单,挂科修改,GPA成绩提高,找黑...
加拿大大学成绩单修改 GPA修改 G5研究生保录黑客常用的入侵方式,邮件成主要攻击对象大学成绩修改,找黑客改分,修改成绩单,挂科修改,GPA成绩提高,找黑...加拿大大学成绩单修改 GPA修改 G5研究生保录黑客常用的入侵方式,邮件成主要攻击对象大学成绩修改,找黑客改分,修改成绩单,挂科修改,GPA成绩提高,找黑...
加拿大大学成绩单修改 GPA修改 G5研究生保录黑客常用的入侵方式,邮件成主要攻击对象大学成绩修改,找黑客改分,修改成绩单,挂科修改,GPA成绩提高,找黑...
 
黑客常用的邮件入侵方式如何破解Instagram帐户和密码,留才认证和留服认证的区别中留服认证•海外学历认证•国外学历学位认证留才认证和留信认证(留信认证...
黑客常用的邮件入侵方式如何破解Instagram帐户和密码,留才认证和留服认证的区别中留服认证•海外学历认证•国外学历学位认证留才认证和留信认证(留信认证...黑客常用的邮件入侵方式如何破解Instagram帐户和密码,留才认证和留服认证的区别中留服认证•海外学历认证•国外学历学位认证留才认证和留信认证(留信认证...
黑客常用的邮件入侵方式如何破解Instagram帐户和密码,留才认证和留服认证的区别中留服认证•海外学历认证•国外学历学位认证留才认证和留信认证(留信认证...
 
GPA低,申硕困难。想问一下是否能修改成绩单?希望得到您的帮助申请美国大学改成绩单可以吗?如何增加申请成功几率【微信:oojjiijj】
GPA低,申硕困难。想问一下是否能修改成绩单?希望得到您的帮助申请美国大学改成绩单可以吗?如何增加申请成功几率【微信:oojjiijj】GPA低,申硕困难。想问一下是否能修改成绩单?希望得到您的帮助申请美国大学改成绩单可以吗?如何增加申请成功几率【微信:oojjiijj】
GPA低,申硕困难。想问一下是否能修改成绩单?希望得到您的帮助申请美国大学改成绩单可以吗?如何增加申请成功几率【微信:oojjiijj】
 
Lesson 3 Self-Introduction New words 1 .pptx
Lesson 3 Self-Introduction New words 1 .pptxLesson 3 Self-Introduction New words 1 .pptx
Lesson 3 Self-Introduction New words 1 .pptx
 
Unit 3 Self-Introduction New words 3.pptx
Unit 3 Self-Introduction New words 3.pptxUnit 3 Self-Introduction New words 3.pptx
Unit 3 Self-Introduction New words 3.pptx
 

2017-refactoring-02-重複的程式碼

  • 2. ©2017 Software Engineering Consortium • 最常出現的壞味道。 • 如果一段重複的程式碼在一個或多個類別或函 式中出現,代表未來此段程式若需修改,即需 修改多個地方,增加了維護困難度。 • 設法將他們合而為一,程式會變得更好。 重複的程式碼 (Duplicated Code) 2
  • 3. ©2017 Software Engineering Consortium • 若在同一個class中有重複的程式碼 透過提取函式(Extract Method)將重複的部分抽出來變 成method。 讓原來的重複程式都呼叫這個新method。 • 若不相干的兩個類別中具有重複的程式碼 透過提取類別(Extract Class)將重複的部分先抽取出來 並獨立成一個新的class。 讓原來的重複程式都使用這個新類別。 重複的程式碼 (Duplicated Code) -重構方法1 3
  • 4. ©2017 Software Engineering Consortium • 若在兩個子類別(同一個父類別下)具有重複的程式碼 透過提取函式(Extract Method)將重複的部分先抽取出來。 再用提升函式(Pull Up Method)將新method提升至父類別層 級。 • 若重複的部分相似但不完全相同 透過提取函式(Extract Method)將重複且相同的部分抽出來。 有時需用到模版方法(Form Template Method)。 重複的程式碼 (Duplicated Code) -重構方法2 4
  • 5. ©2017 Software Engineering Consortium 重複的程式碼 (Duplicated Code) -壞味道範例-1 5
  • 6. ©2017 Software Engineering Consortium 重複的程式碼 (Duplicated Code) -重構範例-1 6 重複的程式碼應當 抽取為method,讓 原來的重複程式都 呼叫這個新method
  • 7. ©2017 Software Engineering Consortium 重複的程式碼 (Duplicated Code) -壞味道範例-2 7
  • 8. ©2017 Software Engineering Consortium 將重複的部分先抽取出來並獨立成一個新的class。 重複的程式碼 (Duplicated Code) -重構範例-2 8
  • 9. ©2017 Software Engineering Consortium 重複的程式碼 (Duplicated Code) -壞味道範例-3 9 https://refactoring.com/catalog/formTemplateMethod.html
  • 10. ©2017 Software Engineering Consortium 重複的程式碼 (Duplicated Code) -重構範例-3 10

Editor's Notes

  1. https://refactoring.com/catalog/extractMethod.html https://refactoring.com/catalog/pullUpField.html
  2. https://refactoring.com/catalog/formTemplateMethod.html
  3. https://www.codepile.net/pile/w7obNzAr
  4. https://www.codepile.net/pile/10wdr8Vm
  5. https://www.codepile.net/pile/bP2enpXm https://www.codepile.net/pile/d3ELb9rB
  6. https://www.codepile.net/pile/5Nmk0ygj https://www.codepile.net/pile/alg1ZdYR
  7. https://refactoring.com/catalog/formTemplateMethod.html