วันนี้คุณรู้จัก SOLID
หลักการออกแบบโปรแกรมเชิงวัตถุ ที่ดีหรือยัง ว่าเป็นยังไง?
.
SOLID เป็นหลักการออกแบบการเขียนโปรแกรมเชิงวัตถุที่ดี (Object Oriented Design) นำเสนอโดย Robert C. Martin (ลุง Bob. )
:
SOLID ไม่ได้หมายถึง "ของแข็ง"
แต่มันมาจากชื่อพยัญชนะแรกของ 5 คำต่อไปนี้
- Single-responsibility Principle
- Open-closed Principle
- Liskov substitution principle
- Interface segregation principle
- Dependency Inversion principle
:
รายละเอียดก็จะประมาณเนี่ย สรุปให้คร่าวๆ
👉 1) Single-responsibility Principle
หลักการนี้ จะให้คลาส 1 อัน รับผิดชอบงานเดียว
ถ้าอนาคตจะมี change เกิดขึ้น
ก็เปลี่ยนเฉพาะงานนี้งานเดียว ที่คลาสนี้ที่เดียวเท่านั้น
จะไม่มีการ change มากกว่า 2 งานภายในคลาสเดียวกันประมาณเนี่ย
มิฉะนั้นจะตีกันตายได้
:
👉 2) Open-closed Principle
หลักการนี้ อ็อบเจ็กต์ หรือพวก คลาส มอดูล ฟังก์ชั่น แพ็กเกจ ไลบรารี่
เมื่อสร้างแล้วก็ควรฟิกไว้ ไม่ควรแก้ไข (เพราะมันอาจเทสเรียบร้อยแล้ว)
ถ้ามี change เกิดขึ้นมา ก็ต้องเปิดโอกาสให้ขยายต่อเติมได้
โดยเราจะไม่ไปแตะต้องโค้ดที่เคยเขียนขึ้นมาเด็ดขาด
:
👉 3) Liskov substitution principle
มันพัฒนามาจากหลักการข้อ 2 อีกที กล่าวคือ
คลาสแม่ควรจะฟิกไว้ ไม่ควรแก้ไข ไม่ควร change อีกแล้ว
(เพราะอาจเทสเรียบร้อย หรือออกแบบมาเรียบร้อย)
ถ้าจะ change ก็ให้ไปลงที่คลาสลูกเลย
โดยให้สร้างคลาสลูก ที่ขยายมาจากคลาสแม่อีกที
.
สำหรับหลักการข้อ 3 นี้ คลาสลูกจะสามารถเสียบแทนที่คลาสแม่ได้
โดยจะไม่ไปแก้ไขหน้าที่ (functionality) ของโค้ดหลักทั้งหมด
:
👉 4) Interface segregation principle
การออกแบบ interface ที่ดี ควรมีเมธอดที่จำเป็นเท่านั้น
คลาสลูกที่มา implement ไม่ควรได้เมธอดที่ไม่จำเป็นเกินมา
.
กล่าวอีกนัยหนึ่งการออกแบบ interface ที่ดี
ไม่ควรให้ interface มันทำงานครอบจักราล
ไม่ต้องใจดี เผื่อเมธอดเกินมา
ให้มีพอเพียง พอดีกับคลาสลูกก็พอนะครัช
:
👉 5) Dependency Inversion principle
หลักการนี้จะกล่าวถึง
- High level classess (อาจมองว่าเป็นมอดูลที่มีแต่ business logic ที่ซับซ้อนก็ได้)
- กับ Low Level Classes (อาจมองว่าเป็นมอดูลที่มีแต่ logic พื้นฐาน ทำงานระดับล่างๆ)
.
ซึ่ง class ทั้งสองระดับดังกล่าว
เวลาจะติดต่อกัน ก็ให้ทำผ่านทาง Abstraction Layer เท่านั้น
ไม่ควรติดต่อกันตรงๆ โต้งๆ
.
Abstraction Layer ก็คิดง่ายๆ
มันก็คือ Interface หรือ abstraction class นั่นแหละ
คือมีแต่รายละเอียดให้รู้เฉยๆ ยังไม่มีส่วน implements
เพราะเดียวจะมีคลาสมา implements แล้วมา plugin เสียบเข้าภายหลัง
.
..เขียนเป็นภาพก็ประมาณเนี่ย
High Level Classes --> Abstraction Layer --> Low Level Classes
:
++++++++
สำหรับคอนเซปต์ SOLID อาจยากต่อการเข้าใจนิดหนึ่งนะ
มันต้องเห็นโค้ดตัวอย่างด้วย
ยิ่งถ้าใครไม่เชียวชาญการเขียนโปรแกรมเชิงวัตถุ (Object Oriented programming)
หรือไม่ได้ลงมือเขียนจริงๆ จังเท่าไร
ก็อาจสงสัยมีมันทำไม?
.
แต่ทว่าการเขียนโปรแกรมเชิงวัตถุ ถ้าออกแบบไม่ดีนี้ ....บอกตรงๆ
..โค้ดจะเละ เทอะทะ ใหญ่โต
..อ่านโค้ดก็ยาก ย๊าก คลาสเยอะแยะมากมาย
.
ยังไงอ่านเพิ่มเติม ดูโค้ดตัวอย่างที่ออกแบบตามหลัก SOLID
ตามลิงค์นี้เขียนดี
https://www.oodesign.com/design-principles.html
https://scotch.io/…/s-o-l-i-d-the-first-five-principles-of-…
.
😘 โชคดีทุกท่านครับ ไปแหละ
เขียนโดยโปรแกรมเมอร์ไทย thai programmer
同時也有2部Youtube影片,追蹤數超過4萬的網紅TechaLook 中文台,也在其Youtube影片中提到,是鍵盤也是觸控板! 桌上型電腦也可以當筆電玩? 今年Computex 中Yuki 發現Synaptics 推出一個新奇的設計 Smartbar「觸控鍵盤」,只要一組鍵盤就可以取代滑鼠,並享有觸控板的功能! 你只要把想像成它是筆記型電腦鍵盤下方的觸控板,只是跟空白鍵合而為一,使用者可以在鍵盤的空白...
「interface implement」的推薦目錄:
- 關於interface implement 在 โปรแกรมเมอร์ไทย Thai programmer Facebook 的最讚貼文
- 關於interface implement 在 โปรแกรมเมอร์ไทย Thai programmer Facebook 的最讚貼文
- 關於interface implement 在 โปรแกรมเมอร์ไทย Thai programmer Facebook 的最讚貼文
- 關於interface implement 在 TechaLook 中文台 Youtube 的精選貼文
- 關於interface implement 在 prasertcbs Youtube 的精選貼文
interface implement 在 โปรแกรมเมอร์ไทย Thai programmer Facebook 的最讚貼文
วันนี้คุณรู้จัก SOLID
หลักการออกแบบโปรแกรมเชิงวัตถุ ที่ดีหรือยัง ว่าเป็นยังไง?
.
SOLID เป็นหลักการออกแบบการเขียนโปรแกรมเชิงวัตถุที่ดี (Object Oriented Design) นำเสนอโดย Robert C. Martin (ลุง Bob. )
:
SOLID ไม่ได้หมายถึง "ของแข็ง"
แต่มันมาจากชื่อพยัญชนะแรกของ 5 คำต่อไปนี้
- Single-responsibility Principle
- Open-closed Principle
- Liskov substitution principle
- Interface segregation principle
- Dependency Inversion principle
:
รายละเอียดก็จะประมาณเนี่ย สรุปให้คร่าวๆ
👉 1) Single-responsibility Principle
หลักการนี้ จะให้คลาส 1 อัน รับผิดชอบงานเดียว
ถ้าอนาคตจะมี change เกิดขึ้น
ก็เปลี่ยนเฉพาะงานนี้งานเดียว ที่คลาสนี้ที่เดียวเท่านั้น
จะไม่มีการ change มากกว่า 2 งานภายในคลาสเดียวกันประมาณเนี่ย
มิฉะนั้นจะตีกันตายได้
:
👉 2) Open-closed Principle
หลักการนี้ อ็อบเจ็กต์ หรือพวก คลาส มอดูล ฟังก์ชั่น แพ็กเกจ ไลบรารี่
เมื่อสร้างแล้วก็ควรฟิกไว้ ไม่ควรแก้ไข (เพราะมันอาจเทสเรียบร้อยแล้ว)
ถ้ามี change เกิดขึ้นมา ก็ต้องเปิดโอกาสให้ขยายต่อเติมได้
โดยเราจะไม่ไปแตะต้องโค้ดที่เคยเขียนขึ้นมาเด็ดขาด
:
👉 3) Liskov substitution principle
มันพัฒนามาจากหลักการข้อ 2 อีกที กล่าวคือ
คลาสแม่ควรจะฟิกไว้ ไม่ควรแก้ไข ไม่ควร change อีกแล้ว
(เพราะอาจเทสเรียบร้อย หรือออกแบบมาเรียบร้อย)
ถ้าจะ change ก็ให้ไปลงที่คลาสลูกเลย
โดยให้สร้างคลาสลูก ที่ขยายมาจากคลาสแม่อีกที
.
สำหรับหลักการข้อ 3 นี้ คลาสลูกจะสามารถเสียบแทนที่คลาสแม่ได้
โดยจะไม่ไปแก้ไขหน้าที่ (functionality) ของโค้ดหลักทั้งหมด
:
👉 4) Interface segregation principle
การออกแบบ interface ที่ดี ควรมีเมธอดที่จำเป็นเท่านั้น
คลาสลูกที่มา implement ไม่ควรได้เมธอดที่ไม่จำเป็นเกินมา
.
กล่าวอีกนัยหนึ่งการออกแบบ interface ที่ดี
ไม่ควรให้ interface มันทำงานครอบจักราล
ไม่ต้องใจดี เผื่อเมธอดเกินมา
ให้มีพอเพียง พอดีกับคลาสลูกก็พอนะครัช
:
👉 5) Dependency Inversion principle
หลักการนี้จะกล่าวถึง
- High level classess (อาจมองว่าเป็นมอดูลที่มีแต่ business logic ที่ซับซ้อนก็ได้)
- กับ Low Level Classes (อาจมองว่าเป็นมอดูลที่มีแต่ logic พื้นฐาน ทำงานระดับล่างๆ)
.
ซึ่ง class ทั้งสองระดับดังกล่าว
เวลาจะติดต่อกัน ก็ให้ทำผ่านทาง Abstraction Layer เท่านั้น
ไม่ควรติดต่อกันตรงๆ โต้งๆ
.
Abstraction Layer ก็คิดง่ายๆ
มันก็คือ Interface หรือ abstraction class นั่นแหละ
คือมีแต่รายละเอียดให้รู้เฉยๆ ยังไม่มีส่วน implements
เพราะเดียวจะมีคลาสมา implements แล้วมา plugin เสียบเข้าภายหลัง
.
..เขียนเป็นภาพก็ประมาณเนี่ย
High Level Classes --> Abstraction Layer --> Low Level Classes
:
++++++++
สำหรับคอนเซปต์ SOLID อาจยากต่อการเข้าใจนิดหนึ่งนะ
มันต้องเห็นโค้ดตัวอย่างด้วย
ยิ่งถ้าใครไม่เชียวชาญการเขียนโปรแกรมเชิงวัตถุ (Object Oriented programming)
หรือไม่ได้ลงมือเขียนจริงๆ จังเท่าไร
ก็อาจสงสัยมีมันทำไม?
.
แต่ทว่าการเขียนโปรแกรมเชิงวัตถุ ถ้าออกแบบไม่ดีนี้ ....บอกตรงๆ
..โค้ดจะเละ เทอะทะ ใหญ่โต
..อ่านโค้ดก็ยาก ย๊าก คลาสเยอะแยะมากมาย
.
ยังไงอ่านเพิ่มเติม ดูโค้ดตัวอย่างที่ออกแบบตามหลัก SOLID
ตามลิงค์นี้เขียนดี
https://www.oodesign.com/design-principles.html
https://scotch.io/…/s-o-l-i-d-the-first-five-principles-of-…
.
😘 โชคดีทุกท่านครับ ไปแหละ
เขียนโดยโปรแกรมเมอร์ไทย thai programmer
interface implement 在 โปรแกรมเมอร์ไทย Thai programmer Facebook 的最讚貼文
วันนี้คุณรู้จัก SOLID
หลักการออกแบบโปรแกรมเชิงวัตถุ ที่ดีหรือยัง ว่าเป็นยังไง?
.
SOLID เป็นหลักการออกแบบการเขียนโปรแกรมเชิงวัตถุที่ดี (Object Oriented Design) นำเสนอโดย Robert C. Martin (ลุง Bob. )
:
SOLID ไม่ได้หมายถึง "ของแข็ง"
แต่มันมาจากชื่อพยัญชนะแรกของ 5 คำต่อไปนี้
- Single-responsibility Principle
- Open-closed Principle
- Liskov substitution principle
- Interface segregation principle
- Dependency Inversion principle
:
รายละเอียดก็จะประมาณเนี่ย สรุปให้คร่าวๆ
👉 1) Single-responsibility Principle
หลักการนี้ จะให้คลาส 1 อัน รับผิดชอบงานเดียว
ถ้าอนาคตจะมี change เกิดขึ้น
ก็เปลี่ยนเฉพาะงานนี้งานเดียว ที่คลาสนี้ที่เดียวเท่านั้น
จะไม่มีการ change มากกว่า 2 งานภายในคลาสเดียวกันประมาณเนี่ย
มิฉะนั้นจะตีกันตายได้
:
👉 2) Open-closed Principle
หลักการนี้ อ็อบเจ็กต์ หรือพวก คลาส มอดูล ฟังก์ชั่น แพ็กเกจ ไลบรารี่
เมื่อสร้างแล้วก็ควรฟิกไว้ ไม่ควรแก้ไข (เพราะมันอาจเทสเรียบร้อยแล้ว)
ถ้ามี change เกิดขึ้นมา ก็ต้องเปิดโอกาสให้ขยายต่อเติมได้
โดยเราจะไม่ไปแตะต้องโค้ดที่เคยเขียนขึ้นมาเด็ดขาด
:
👉 3) Liskov substitution principle
มันพัฒนามาจากหลักการข้อ 2 อีกที กล่าวคือ
คลาสแม่ควรจะฟิกไว้ ไม่ควรแก้ไข ไม่ควร change อีกแล้ว
(เพราะอาจเทสเรียบร้อย หรือออกแบบมาเรียบร้อย)
ถ้าจะ change ก็ให้ไปลงที่คลาสลูกเลย
โดยให้สร้างคลาสลูก ที่ขยายมาจากคลาสแม่อีกที
.
สำหรับหลักการข้อ 3 นี้ คลาสลูกจะสามารถเสียบแทนที่คลาสแม่ได้
โดยจะไม่ไปแก้ไขหน้าที่ (functionality) ของโค้ดหลักทั้งหมด
:
👉 4) Interface segregation principle
การออกแบบ interface ที่ดี ควรมีเมธอดที่จำเป็นเท่านั้น
คลาสลูกที่มา implement ไม่ควรได้เมธอดที่ไม่จำเป็นเกินมา
.
กล่าวอีกนัยหนึ่งการออกแบบ interface ที่ดี
ไม่ควรให้ interface มันทำงานครอบจักราล
ไม่ต้องใจดี เผื่อเมธอดเกินมา
ให้มีพอเพียง พอดีกับคลาสลูกก็พอนะครัช
:
👉 5) Dependency Inversion principle
หลักการนี้จะกล่าวถึง
- High level classess (อาจมองว่าเป็นมอดูลที่มีแต่ business logic ที่ซับซ้อนก็ได้)
- กับ Low Level Classes (อาจมองว่าเป็นมอดูลที่มีแต่ logic พื้นฐาน ทำงานระดับล่างๆ)
.
ซึ่ง class ทั้งสองระดับดังกล่าว
เวลาจะติดต่อกัน ก็ให้ทำผ่านทาง Abstraction Layer เท่านั้น
ไม่ควรติดต่อกันตรงๆ โต้งๆ
.
Abstraction Layer ก็คิดง่ายๆ
มันก็คือ Interface หรือ abstraction class นั่นแหละ
คือมีแต่รายละเอียดให้รู้เฉยๆ ยังไม่มีส่วน implements
เพราะเดียวจะมีคลาสมา implements แล้วมา plugin เสียบเข้าภายหลัง
.
..เขียนเป็นภาพก็ประมาณเนี่ย
High Level Classes --> Abstraction Layer --> Low Level Classes
:
++++++++
สำหรับคอนเซปต์ SOLID อาจยากต่อการเข้าใจนิดหนึ่งนะ
มันต้องเห็นโค้ดตัวอย่างด้วย
ยิ่งถ้าใครไม่เชียวชาญการเขียนโปรแกรมเชิงวัตถุ (Object Oriented programming)
หรือไม่ได้ลงมือเขียนจริงๆ จังเท่าไร
ก็อาจสงสัยมีมันทำไม?
.
แต่ทว่าการเขียนโปรแกรมเชิงวัตถุ ถ้าออกแบบไม่ดีนี้ ....บอกตรงๆ
..โค้ดจะเละ เทอะทะ ใหญ่โต
..อ่านโค้ดก็ยาก ย๊าก คลาสเยอะแยะมากมาย
.
ยังไงอ่านเพิ่มเติม ดูโค้ดตัวอย่างที่ออกแบบตามหลัก SOLID
ตามลิงค์นี้เขียนดี
https://www.oodesign.com/design-principles.html
https://scotch.io/…/s-o-l-i-d-the-first-five-principles-of-…
.
😘 โชคดีทุกท่านครับ ไปแหละ
เขียนโดยโปรแกรมเมอร์ไทย thai programmer
interface implement 在 TechaLook 中文台 Youtube 的精選貼文
是鍵盤也是觸控板! 桌上型電腦也可以當筆電玩?
今年Computex 中Yuki 發現Synaptics 推出一個新奇的設計 Smartbar「觸控鍵盤」,只要一組鍵盤就可以取代滑鼠,並享有觸控板的功能!
你只要把想像成它是筆記型電腦鍵盤下方的觸控板,只是跟空白鍵合而為一,使用者可以在鍵盤的空白鍵上用手指作雙點觸控、左右滑移等操作,就可以執行快速捲動、放大縮小、快速啟動等功能。
除了鍵盤的空白鍵上加上觸控,也可以依照鍵盤製造商的軟體設計,讓使用者設定成不同的操作方式,在會場中Synaptics就展示了與曜越合作的設計,加入了可讓電競玩家自行定義觸控行為的巨集指令,對於需要快速下指令的電競玩家來說,這樣的設計的確方便許多。
Computex 2015 Synaptics SmartBar Hands-on
This year at Computex, human interface company Synaptics demonstrated its SmartBar technology, incorporating touch input sensors from their trackpads into keyboards.
With SmartBar technology, manufacturers can implement capacitive touch sensors into the spacebar of a keyboard for productivity-boosting gestures or macros for gamers. Gestures include swiping left and right between typed words, pinch zoom, or quick start.
ThermalTake will be among the first adopters with its Tt eSports product line; expect to see new gaming keyboards featuring this clever new technology!
Help us caption & translate this video!
http://amara.org/v/KSlg/
![post-title](https://i.ytimg.com/vi/zgmdeg0bzDQ/hqdefault.jpg)
interface implement 在 prasertcbs Youtube 的精選貼文
============
ดาวน์โหลดไฟล์ตัวอย่างได้ที่ http://goo.gl/bqDOfm
============
playlist สอนการเขียนโปรแกรมเชิงวัตถุด้วย Java เบื้องต้น
https://www.youtube.com/watch?v=zC_0xOSX1dY&list=PLoTScYm9O0GEvHKqqib-AdVFwVe_2ln8W
============
playlist สอนภาษาจาวา Java เบื้องต้น
https://www.youtube.com/watch?v=O3rW9JvADfU&list=PLoTScYm9O0GF26yW0zVc2rzjkygafsILN
============
playlist สอนจาวา Java FileIO การอ่านเขียนไฟล์
https://www.youtube.com/watch?v=y4dfsuShUaw&list=PLoTScYm9O0GEsSpaLgFDuPWzUEZdtnuWs
============
playlist สอนจาวา Java การใช้ Collections ต่าง ๆ เช่น ArrayList, Map, Set, Stack
https://www.youtube.com/watch?v=JYTIQip_pak&list=PLoTScYm9O0GEskLFgdC02Swit1fcDWspM
============
playlist สอนการทำ Unit Test ภาษาจาวา Java
https://www.youtube.com/watch?v=R11yg8hKApU&list=PLoTScYm9O0GHiK3KNdH_PrNB0G3-kb1Bi
============
playlist สอนภาษา C เบื้องต้น
https://www.youtube.com/watch?v=Z_u8Nh_Zlqc&list=PLoTScYm9O0GHHgz0S1tSyIl7vkG0y105z
============
playlist สอนภาษา C# เบื้องต้น
https://www.youtube.com/watch?v=hhl49jwOIZI&list=PLoTScYm9O0GE4trr-XPozJRwaY7V9hx8K
============
playlist สอนภาษา C++ เบื้องต้น
https://www.youtube.com/watch?v=_NHyJBIxc40&list=PLoTScYm9O0GEfZwqM2KyCBcPTVsc6cU_i
============
playlist สอนภาษาไพธอน Python เบื้องต้น
https://www.youtube.com/watch?v=DI7eca5Kzdc&list=PLoTScYm9O0GH4YQs9t4tf2RIYolHt_YwW
============
playlist สอนภาษาไพธอน Python การเขียนโปรแกรมเชิงวัตถุ (OOP: Object-Oriented Programming)
https://www.youtube.com/watch?v=4bVBSluxJNI&list=PLoTScYm9O0GF_wbU-7layLaSuHjzhIRc9
============
playlist สอนภาษา R เบื้องต้น
https://www.youtube.com/watch?v=oy4qViQLXsI&list=PLoTScYm9O0GF6qjrRuZFSHdnBXD2KVICp
============
playlist สอนภาษา PHP เบื้องต้น
https://www.youtube.com/watch?v=zlRDiXjYVo4&list=PLoTScYm9O0GH_6LARFxozL_viEsXV2wgO
============
เชิญสมัครเป็นสมาชิกของช่องนี้ได้ที่
https://www.youtube.com/subscription_center?add_user=prasertcbs
![post-title](https://i.ytimg.com/vi/pGIt-yYojsQ/hqdefault.jpg?sqp=-oaymwEbCKgBEF5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLAr9HUhSSS7B0ii47aQVRF5gx5IkQ)