Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Ruby

ทำไมเราถึงสร้างชั้นเรียน?

จากบทความที่แล้ว ทำไมเราใช้ 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 หากคุณพบว่ามีประโยชน์!