จากบทความที่แล้ว ทำไมเราใช้ nil ฉันคิดว่าควรถามคำถามนี้สำหรับสิ่งอื่น ๆ ที่เรามองข้ามไป
ชอบ…
เหตุใดเราจึงใช้คลาสแทนที่จะมีโค้ดน่าเกลียดเพียงหยดเดียว
ในระดับพื้นฐาน เราใช้คลาสเพื่อจัดระเบียบโค้ดและข้อมูลให้เป็นหน่วยทางลอจิคัล
แต่มันมีอะไรมากกว่านั้น
ชั้นเรียนช่วยให้คุณสร้างนามธรรม .
สิ่งที่เป็นนามธรรมคืออะไร
คุณใช้นามธรรมทุกวัน ทุกนาที
แป้นพิมพ์ ฉันกำลังพิมพ์สิ่งนี้ทำจาก:
- สายเคเบิล
- สวิตช์ Cherry MX สีดำ
- เคสพลาสติกที่ยึดทุกอย่างไว้ด้วยกัน
- แผงวงจรที่ส่งสัญญาณไฟฟ้าไปยังคอมพิวเตอร์ของฉัน
แป้นพิมพ์เป็นเพียงแนวคิดที่เกิดจากการรวมสิ่งเหล่านี้เข้าด้วยกันอย่างถูกวิธี
มันเป็นนามธรรมเพราะ คุณไม่จำเป็นต้องรู้วิธีการทำงานภายใน ที่จะใช้มัน คุณไม่จำเป็นต้องรู้ด้วยซ้ำว่าส่วนประกอบนั้นทำมาจากอะไร!
คุณเพียงแค่เสียบปลั๊กและเริ่มพิมพ์
นั่นคือสิ่งที่ชั้นเรียนอนุญาตให้คุณทำ
เหตุใดสิ่งที่เป็นนามธรรมจึงสำคัญ
นามธรรมช่วยให้คุณจัดการความซับซ้อน .
ดังที่ Steve McConnell พูดว่า:
“ซิงเกิ้ล สำคัญที่สุด เหตุผลในการสร้างคลาสคือ ลดความซับซ้อนของโปรแกรม ”
สิ่งที่เป็นนามธรรมบรรลุสิ่งนี้ได้อย่างไร
โดยซ่อนรายละเอียด เกี่ยวกับวิธีการทำงานและการเปิดเผยบริการด้วยอินเทอร์เฟซสาธารณะ
ในคลาส Ruby อินเทอร์เฟซประกอบด้วยเมธอดสาธารณะ ขณะที่รายละเอียดถูกซ่อนไว้ด้วยวิธีส่วนตัว
พร้อมรายละเอียด ฉันหมายถึง:
- ตัวแปรตัวอย่าง
- วิธีการภายใน
- อัลกอริทึมและโครงสร้างข้อมูล
เมื่อซ่อนไว้ คุณสามารถเปลี่ยนได้ทุกเมื่อที่ต้องการ โดยไม่กระทบต่อผู้ใช้ในชั้นเรียนของคุณ
ตัวอย่างเช่น :
หากคุณมี GPS
คลาสที่ใช้อาร์เรย์ในการเก็บข้อมูล และคุณต้องรู้ว่าใน ดัชนี 0 ของอาร์เรย์นั้น คุณจะพบละติจูด &ดัชนี 1 คือลองจิจูด นี่คือรายละเอียดที่คุณไม่ควรต้องรู้ ในฐานะผู้ใช้คลาส
วิธีการเขียนชั้นเรียนที่ดี
นี่เป็น หัวข้อใหญ่ .
มีหลายสิ่งหลายอย่างที่นำไปสู่การสร้างชั้นเรียนที่ดี เช่น การปฏิบัติตามหลักการ SOLID
แต่ที่สำคัญที่สุด ชั้นเรียนของคุณต้องมี บทบาท และไม่ประกอบด้วยวิธีการสุ่ม
ตัวอย่างเช่น คุณต้องการแยกตรรกะทางธุรกิจ (การคำนวณ กฎ) ออกจากตรรกะการนำเสนอ (การจัดรูปแบบ) เนื่องจากเป็นบทบาทที่แตกต่างกัน
ดูรหัสนี้ :
require 'rest-client' require 'nokogiri' class ImageCounter def initialize(url) @url = url end def find_images_and_report data = RestClient.get(@url).body html = Nokogiri::HTML.parse(data) images = html.css("img") report = "" report << "=" * 40 << "\n" report << "Found #{images.size} images on #{@url} \n" report << "=" * 40 << "\n" end end reporter = ImageCounter.new("rubyguides.com") report = reporter.find_images_and_report
คุณสามารถดูว่าชั้นเรียนนี้เกี่ยวข้องกับการคำนวณและการนำเสนออย่างไร นี่เป็นเรื่องปกติหากคุณกำลังเขียนสคริปต์ที่ "รวดเร็วและสกปรก" แต่สำหรับแอปพลิเคชันที่จริงจังกว่านี้ คุณต้องการแยกสคริปต์ออกจากกัน
เมื่อคุณแยกความรับผิดชอบ คุณสามารถเพิ่มเลเยอร์การนำเสนออื่น หรือเปลี่ยนกฎเกณฑ์ทางธุรกิจและนำงานนำเสนอเดิมกลับมาใช้ใหม่ได้
รหัสนี้ใช้ซ้ำ แง่มุมของชั้นเรียนก็เป็นอีกเหตุผลหนึ่งที่ดีที่จะเขียนเรื่องนี้ให้มากขึ้น
มีแนวคิดเพิ่มเติมที่จะช่วยให้คุณเขียนชั้นเรียนได้ดีขึ้น
ต่อไปนี้จะช่วยคุณสำรวจเพิ่มเติม:
- การเกาะติดกันและการมีเพศสัมพันธ์
- บอกไม่ต้องถาม
- กฎแห่งดีมิเตอร์
การรู้ว่าทำไมเราถึงเขียนชั้นเรียนตั้งแต่แรกจึงเป็นจุดเริ่มต้นที่ดี ดังนั้นทำได้ดีมาก ถ้าคุณอ่านบทความทั้งหมด!
สรุป
คุณได้เรียนรู้ว่าเหตุใดเราจึงเขียนชั้นเรียน อะไรคือสิ่งที่เป็นนามธรรม และเหตุใดจึงสำคัญ คุณยังได้เรียนรู้พื้นฐานของการเขียนชั้นเรียนดีๆ และฉันได้ให้คำแนะนำเกี่ยวกับสิ่งที่ควรอ่านเพิ่มเติม
เว้นแต่คุณต้องการให้รหัสของคุณกลายเป็น ก้อนโคลนก้อนใหญ่ เริ่มใช้แนวคิดเหล่านี้เพื่อปรับปรุงการออกแบบชั้นเรียนของคุณ 🙂
อย่าลืมแชร์บทความนี้บน Twitter หากคุณพบว่ามีประโยชน์!