System.out.println() ในภาษา Java ถือว่าออกแบบผิดหลักการข้อใด?
.
อันนี้อ้างอิงตามตำรา
Head First Design Patterns (2008) หน้า 268 📗 📗
(ใครมีตำราก็ไปกางเปิดดูได้)
.
👧 คำตอบ การออกแบบคำสั่งชุดนี้ในภาษา Java
จะถือว่าผิดหลักการออกแบบโปรแกรมเรื่อง
"Principle of Least Knowledge"
แปลเป็นไทย "หลักการของความรู้น้อยที่สุด"
.
Principle of Least Knowledge
เป็นหลักการออกแบบ Object ให้รู้จักเพื่อนๆ ที่ใกล้ชิดไม่กี่คน 👩❤️💋👨
.
.
จากประโยคคำสั่ง System.out.println()
System กว่าจะรู้จัก println() ก็ต้องผ่าน out มันไกลเกินไปลูกพี่
ซึ่งข้อเสียมันทำให้โค้ดมีลักษณะยึดติดกันเกินไป
.
ศัพท์ทาง Object Oriented Programming โค้ดจะมีอาการเรียกว่า "coupling" โค้ดเป็นคู่สามีภรรยา เกี่ยวดองกันแนบแน่น
เช่น ถ้าเกิด out มีการแก้ไขก็จะกระเทือนต่อ println() และ System ไปด้วย (อันนี้แค่ยกตัวอย่างนะ ของจริงอาจไม่กระทบเลยก็ได้)
.
ในขณะที่ภาษาสมัยใหม่พวก Swift, Kotlin
จะเขียนสั้นๆ print(), println() ตามลำดับ
ไม่ต้องมาทำพิธีกรรมเรียกหลายชั้น หลายซ้อนแบบนี้
ก็เราแค่แสดงผลออกทางหน้าคอนโซลนี้น่า
มันจะทำอะไรให้มันวุ่นวายไปใย
.
จะขอยกตัวอย่างโค้ดในหนังสือเช่น
station.getThermometer().getTemperature();
เขียนแบบนี้ จะเห็นว่ามันยาวเหยียด
ถ้าเขียนครั้งเดียวพอทนได้
แต่ถ้าให้เขียนซ้ำๆ มันขี้เกียจเหมือนกันเนอะ
.
สำหรับวิธีแก้ไขปัญหาโค้ดที่ละเมิดหลัก
"Principle of Least Knowledge"
ไม่ยากเลย เราสามารถใช้หลักของดีไซน์แพทเทิร์นตัวหนึ่ง
นั้นก็คือ "เดอะเฟสไทยแลนด์"
...เฮยไม่ใช่แหละ 😜 😜
.
ใช้แพทเทิร์นที่เรียกว่า "The Facade"
เพื่อแก้ไขโค้ดลักษณะนี้
สนใจก็อย่าลืมไปทบทวน
ดีไซน์แพทร์นของ GOF นะ (ขอไม่ลงรายละเอียด)
.
แต่จะว่าไปมันก็เป็นแค่แนวคิดและหลักการเฉยๆ
แล้วแต่เราแหละ เขียนผิดหลักการยังไง
โค้ดก็รันได้ ปกติอยู่แล้ว
มันเป็นแนวคิด ไม่ใช้กฏหมายบังคับซะเมื่อไร
.
เพราะถ้าคนออกแบบเขาจะเอาแบบนี้
ชอบแบบนี้ ชอบที่เป็นแบบนี้ ชอบแววตาแบบนี้
ชอบรอยยิ้มแบบนี้ ก็ชอบคนนี้ ...โฮ้ว~~~
.
ถ้าทำแล้วโค้ดไร้บั๊ก ลูกค้าแฮปปี้พอใจ จ่ายเงินให้เรา ก็คือโอเคสองฝ่าย
ส่วนโปรแกรมเมอร์ที่มารับไม้ต่อ ไม่ชอบดีไซน์โค้ดแบบนี้
ก็จับ refactoring เอาเองแล้วกันเด้อ
.
อีกอย่างที่ยกตัวอย่างมาเป็นภาษา Java
ซึ่ง System.out.println() ใช้กันเป็นเรื่องปกติ
บิดา Java เขาจัดวาง println() ให้อยู่เป็นสัดเป็นส่วนอย่างนี้เอง
.
แต่เราต้องยอมรับว่า IDE ปัจจุบันมันฉลาดมาก
บางตัวแค่พิมพ์ S ก็แสนรู้
เดาใจเราออกว่าเราจะพิมพ์ System.out.println();
IDE สมัยนี้มันช่วยเราได้เยอะเลยทีเดียว
ไม่ต้องเสียเวลาพิมพ์ยาวเมื่อยมือ เสียเวลา
แต่ถ้ายังใช้ notepad อยู่ ก็ต้องทนเหนื่อยเอา
.
.
.
.
.
.
.
.
.
.
.
.
ทิ้งท้ายก่อนจากกันไป
<ประชาสัมพันธ์ขายของ>
หนังสือ "โปรแกรมเมอร์ก็รวยได้ ด้วยเส้นทางเอาท์ซอร์สสายดำ"
หนังสือที่จะเล่าเส้นทางสายเอาท์ซอร์สเงินดีรายได้งาม
✔ สำหรับตัวอย่างหนังสือ 👇
PDF: https://drive.google.com/file/d/1tAnMozeYd63dcbBGTQmT_ZrpSaamZS3e/edit
หรือดูจาก youtube: https://youtu.be/Ljf9iJhLcIs
.
รายละเอียดอ่านเพิ่มเติมได้ที่่ 👇
https://www.patanasongsivilai.com/blog/sale_book_rich_with_outsource/
.
✍ เขียนโดย โปรแกรมเมอร์ไทย thai programmer
เราจะผ่านโควิด-19 ไปกันนะทุกคคนนน
同時也有315部Youtube影片,追蹤數超過12萬的網紅prasertcbs,也在其Youtube影片中提到,เทคนิคการใช้ random module ในการสร้าง 1) รหัสบัตร ATM 2) รหัสผ่านที่ประกอบด้วยตัว A-Z ตามความยาวที่ระบุ 3) รหัสผ่านที่ประกอบด้วยตัวอักษรตามที่กำหนด เช...
「object-oriented programming java」的推薦目錄:
- 關於object-oriented programming java 在 โปรแกรมเมอร์ไทย Thai programmer Facebook 的精選貼文
- 關於object-oriented programming java 在 โปรแกรมเมอร์ไทย Thai programmer Facebook 的最佳貼文
- 關於object-oriented programming java 在 โปรแกรมเมอร์ไทย Thai programmer Facebook 的最佳解答
- 關於object-oriented programming java 在 prasertcbs Youtube 的最佳貼文
- 關於object-oriented programming java 在 prasertcbs Youtube 的精選貼文
- 關於object-oriented programming java 在 prasertcbs Youtube 的最讚貼文
object-oriented programming java 在 โปรแกรมเมอร์ไทย Thai programmer Facebook 的最佳貼文
การเขียนโปรแกรมเชิงวัตถุ หรือ Object Oriented Programming (OOP)
ข้อมูลกับฟังก์ชั่น จะห่อรวมกันเป็นก้อนเดียวกัน เรียกว่า "encapsulation"
ซึ่งข้อมูลกับฟังก์ชั่น ที่เก็บรวมกันเป็นก้อนๆ จะเก็บไว้ในหน่วยความจำ
ก้อนดังกล่าวในหน่วยความจำจะเรียกว่า อ็อบเจ็กต์ (Object)
.
ภาษาเขียนโปรแกรมส่วนใหญ่จะเก็บอ็อบเจ็กต์
ไว้ในหน่วยความจำที่เรียกว่า heap memory
แยกต่างหาจาก stack memory
แต่บางภาษาเช่น C++ เก็บอ็อบเจ็กต์ใน Stack memory ได้ด้วย
.
ส่วนข้อมูลที่อยู่ในก้อนอ็อบเจ็กต์
ก็จะจำไว้ ไม่ได้หายไปไหน
แก้ไขได้เปลี่ยนข้อมูล
จึงอาจเรียกข้อมูลว่าเป็น state (ของอ็อบเจ็กต์)
ถ้าก้อนอ็อบเจ็กต์โดยเคลียร์ทิ้งจากหน่วยความจำ
ข้อมูลภายในก็จะหายไปเช่นกัน
.
ใน JavaScript
มันจะมีท่าพิเศษ ใช้ inner function
ซึ่งมีความสามารถจำข้อมูลของแปรของฟังก์ชั่นข้างนอก
ที่มาห่อฟังก์ชั่นข้างในได้
สามารถจำตัวแปรใน stack memory ของฟังก์ชั่นข้างนอกที่มาห่อ
จำได้ว่ามันเก็บอะไร
สามารถแก้ไข เปลี่ยนข้อมูลได้เช่นกัน
เลยสามารถมาเขียนเลียนแบบเขียนโปรแกรมเชิงวัตถุได้เล่นๆ
.
.
++++ขอประชาสัมพันธ์++++++
ใครสนใจศึกษาจาวาสคริปต์ (JavaScript)
คนละภาษากับ Java
เผื่ออนาคตจะเอาไปต่อยอด
พัฒนาเว็บไซต์
ก็อุดหนุนหนังสือเล่มนี้ได้ ที่ซีเอ็ด
https://www.se-ed.com/product-search/จตุรพัชร์-พัฒนทรงศิวิไล.aspx?keyword=จตุรพัชร์+พัฒนทรงศิวิไล
.
✍เขียนโดย โปรแกรมเมอร์ไทย thai programmer
.
.
object-oriented programming java 在 โปรแกรมเมอร์ไทย Thai programmer Facebook 的最佳解答
https://github.com/…/java-design-patt…/blob/master/README.md
ลิงค์ที่แปะไว้เป็นลิงค์บน Gitbub
ที่เขารวบรวม design patterns
เอาไว้ใช้แก้โจทย์ปัญหาที่พบเจอบ่อยๆ
ในการเขียนโปรแกรม
โดยตัวอย่างโค้ดเขียนด้วยภาษา Java
พร้อมคำอธิบายแต่ละ pattern
ไว้อย่างครบถ้วน (ไลเซ่นเป็น MIT)
ที่สำคัญไม่ใช้มีแค่ design pattern ตระกูล GOF (Gang of Four) จำนวน 23 ตัวซะเมื่อไร มันมีมากกว่านั้นให้ศึกษาเยอะมากจริงๆ นับดูคร่าวๆ 90 กว่าตัวด้วยมั่ง (บางอันยังไม่รู้จักเลยครับ แฮๆๆ)
แต่ก่อนจะศึกษา Design pattern ไม่ว่าจะรูปแบบใด
ก็แนะนำให้อ่านหลักการออกแบบและพัฒนาซอฟต์แวร์ แนวคิดจะอิงกับวิธีเขียนโปรแกรมแบบ Object oriented (โปรแกรมเชิงวัตถุ) ก็ลองเข้าไปอ่านศึกษาดูลิงค์นี้นะครับ http://java-design-patterns.com/principles/
.
✍เขียนโดย โปรแกรมเมอร์ไทย thai programmer
https://github.com/iluwatar/java-design-patterns/blob/master/README.md
Links posted as links on Gitbub
Where he gathered the design pattern
It's for solving common problems.
In programming.
By example, code written in Java language
With a description of each pattern
Completely (Lysen is MIT)
The important thing is that I don't use. I have only design pattern of the GOF (Gang of Four) family. When it's more than that, I study a lot. I counted over 90 of them. (I don't know it yet. Haha. )
But before studying Design Pattern in any form.
It's recommended to read the design and software development principles. The concept is based on how to write Object oriented programming (Objective programming). Try to read this link. http://java-design-patterns.com/principles/
.
✍ Written by Thai programmer thai coderTranslated
object-oriented programming java 在 prasertcbs Youtube 的最佳貼文
เทคนิคการใช้ random module ในการสร้าง
1) รหัสบัตร ATM
2) รหัสผ่านที่ประกอบด้วยตัว A-Z ตามความยาวที่ระบุ
3) รหัสผ่านที่ประกอบด้วยตัวอักษรตามที่กำหนด เช่น A-Z, 0-9 และเครื่องหมายวรรคตอน
====ดาวน์โหลดไฟล์ตัวอย่างได้ที่ http://goo.gl/6K8DyJ
============
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 สอนภาษาจาวา Java เบื้องต้น
https://www.youtube.com/watch?v=O3rW9JvADfU&list=PLoTScYm9O0GF26yW0zVc2rzjkygafsILN
============
playlist สอนการเขียนโปรแกรมเชิงวัตถุด้วย Java เบื้องต้น
https://www.youtube.com/watch?v=zC_0xOSX1dY&list=PLoTScYm9O0GEvHKqqib-AdVFwVe_2ln8W
============
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 สอนภาษา PHP เบื้องต้น
https://www.youtube.com/watch?v=zlRDiXjYVo4&list=PLoTScYm9O0GH_6LARFxozL_viEsXV2wgO
============
เชิญสมัครเป็นสมาชิกของช่องนี้ได้ที่
https://www.youtube.com/subscription_center?add_user=prasertcbs
object-oriented programming java 在 prasertcbs Youtube 的精選貼文
การประยุกต์ใช้ % (mod) หรือเศษที่ได้จากการหาร เพื่อหาว่าปีที่ระบุตรงกับปีนักษัตรใด
=== ดาวน์โหลดไฟล์ตัวอย่างได้ที่ https://goo.gl/9QVGt5
============
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 สอนภาษาจาวา Java เบื้องต้น
https://www.youtube.com/watch?v=O3rW9JvADfU&list=PLoTScYm9O0GF26yW0zVc2rzjkygafsILN
============
playlist สอนการเขียนโปรแกรมเชิงวัตถุด้วย Java เบื้องต้น
https://www.youtube.com/watch?v=zC_0xOSX1dY&list=PLoTScYm9O0GEvHKqqib-AdVFwVe_2ln8W
============
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 สอนภาษา PHP เบื้องต้น
https://www.youtube.com/watch?v=zlRDiXjYVo4&list=PLoTScYm9O0GH_6LARFxozL_viEsXV2wgO
============
เชิญสมัครเป็นสมาชิกของช่องนี้ได้ที่
https://www.youtube.com/subscription_center?add_user=prasertcbs
object-oriented programming java 在 prasertcbs Youtube 的最讚貼文
ดาวน์โหลดไฟล์ตัวอย่างได้ที่ https://goo.gl/4by4K5
============
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 สอนภาษาจาวา Java เบื้องต้น
https://www.youtube.com/watch?v=O3rW9JvADfU&list=PLoTScYm9O0GF26yW0zVc2rzjkygafsILN
============
playlist สอนการเขียนโปรแกรมเชิงวัตถุด้วย Java เบื้องต้น
https://www.youtube.com/watch?v=zC_0xOSX1dY&list=PLoTScYm9O0GEvHKqqib-AdVFwVe_2ln8W
============
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 สอนภาษา PHP เบื้องต้น
https://www.youtube.com/watch?v=zlRDiXjYVo4&list=PLoTScYm9O0GH_6LARFxozL_viEsXV2wgO
============
เชิญสมัครเป็นสมาชิกของช่องนี้ได้ที่
https://www.youtube.com/subscription_center?add_user=prasertcbs