กระบวนการคิดเชิงวัตถุคืออะไร? [ปิด]


9

ฉันกำลังศึกษา OOP ร่วมกับการใช้ MVC ของ Zend ในช่วงไม่กี่เดือนที่ผ่านมา โดยทั่วไปฉันค่อนข้างใหม่กับการเขียนโปรแกรม แต่ฉันรู้สึกอย่างยิ่งว่าฉันควรเรียนรู้สิ่งต่าง ๆ ในแบบที่ 'ถูกต้อง' ซึ่งสำหรับฉันหมายถึงการทำให้แน่ใจว่าฉันเข้าใจว่าทำไมสิ่งต่าง ๆ ถึงถูกต้อง คือฉันได้พบว่าในการเรียนรู้วิธีทำบางสิ่ง (พูดอะไรเพลง) วิธีที่ดีที่สุดในการเรียนรู้วิธีทำบางสิ่งคือรู้ว่าทำไมมันถึงทำแบบนั้นตั้งแต่แรก

อย่างไรก็ตามฉันพยายามอย่างหนักกับความเข้าใจในการพัฒนารูปแบบธุรกิจของตัวเอง (เช่น M ของ MVC) และฉันตัดสินใจว่าไม่ใช่เพราะฉันไม่เข้าใจ OOP โดยทั่วไปเพราะฉันศึกษามาหลายครั้ง เดือนและฉันไม่คิดว่าแนวคิดจะยากมากที่จะเข้าใจ ฉันพบตัวอย่างที่ฉันได้ศึกษาอย่างเข้าใจง่าย ฉันคิดว่าปัญหาสำหรับฉันนั้นอยู่ในขั้นตอนการแปลปัญหาของฉันเองไปสู่การแก้ปัญหาเชิงวัตถุ ตัวอย่างในหนังสือ (ที่ฉันอ่านมาแล้ว) ชัดเจนเกินไปดังนั้นกระบวนการแปลปัญหาเป็นวัตถุไม่ยากมาก สิ่งที่ฉันคิดว่าฉันอาจขาดหายไปคือกระบวนการที่เป็นนามธรรมระดับสูง รายการขั้นตอนหรือคำถามบางประเภทที่โซลูชันเชิงวัตถุทุกตัวต้องตอบในระดับสูงสุด

หากคุณต้องอธิบายกระบวนการดังกล่าวในไม่เกินห้าขั้นตอนพวกเขาจะเป็นอย่างไรและเพราะอะไร กระบวนการที่มีประสิทธิภาพที่สุดในการแปลปัญหาใด ๆ ให้เป็นโซลูชันเชิงวัตถุคืออะไร


1
OOP ไม่ได้ทำทุกอย่างที่ ...
งาน

ในการศึกษา OOP คุณอ่านอะไรเกี่ยวกับรูปแบบการออกแบบบ้างหรือยัง
Zoredache

1
ผมขอแนะนำให้คุณอ่านหนังสืออีริคอีวานเกี่ยวกับการขับเคลื่อนโดเมนออกแบบเมื่อคุณมีเวลาที่ยากลำบากในการสร้างแบบจำลอง ดูเพิ่มเติมที่ @Simon Stellings คำตอบ หนังสือเล่มนี้ครอบคลุมรายละเอียดค่อนข้างมาก
Falcon

@ Zoredache ฉันได้พบกับแนวคิดของรูปแบบการออกแบบรวมถึงตัวอย่างของบางตัวอย่างเช่นซิงเกิลโรงงานและ MVC เอง (ซึ่งในการดำเนินการของ Zend ก็เป็นตัวควบคุมด้านหน้าด้วย) อย่างไรก็ตามนั่นคือการย้ายครั้งต่อไปของฉันเพื่อที่จะพูด ฉันหยิบหนังสือของ Martin Fowler เกี่ยวกับรูปแบบองค์กรและฉันได้อ่านเพียงส่วนหนึ่งของบทนำเท่านั้น คำแนะนำที่ชัดเจนและอ่านง่ายที่คุณอยากแนะนำคืออะไร?

@ เหยี่ยวฉันมีคำถามเกี่ยวกับ php / MySQL และการจัดรูปแบบวันที่ดังนั้นเมื่อวันก่อนและฉันจะเลือกคำตอบของคุณ แต่มันเป็นเพียงความคิดเห็นสำหรับสิ่งที่คุ้มค่า

คำตอบ:


10

การค้นหานางแบบที่เหมาะสมนั้นไม่ได้อยู่ตรงหน้าเสมอไป มันเป็นหนึ่งในสิ่งเหล่านี้ที่ต้องการประสบการณ์มากกว่าความรู้ธรรมดา อย่างไรก็ตามสูตรง่ายๆดังต่อไปนี้อาจช่วยให้คุณเอาชนะบล็อกจิตเบื้องต้นได้

แอ๊บบอตมีการอธิบายไว้ในเอกสารนี้เป็นต้นฉบับและมักเรียกกันว่า "การวิเคราะห์ข้อความของแอ๊บบอต"

  1. เขียนสเปคข้อความธรรมดา
  2. ระบุชั้นเรียน: คำนามเป็นตัวเลือกที่ดี
  3. ค้นหาคุณสมบัติ: คำคุณศัพท์ / คำวิเศษณ์เป็นตัวเลือกที่ดี
  4. ค้นหาการดำเนินการ: คำกริยาเป็นตัวเลือกที่ดี
  5. ค้นหาความสัมพันธ์ระหว่างคลาส
  6. ปรับแต่ง.

ตัวอย่าง:

คำนาม , คำกริยาและadjectivesมีการทำเครื่องหมาย

ห้องสมุด มี หนังสือและวารสาร มันอาจจะมีหลายเล่มของที่ได้รับหนังสือ หนังสือบางเล่ม ใช้สำหรับการshort-term ยืมเท่านั้น หนังสือห้องสมุดอื่น ๆสามารถ ยืมได้โดยสมาชิกห้องสมุดเป็นเวลาสามสัปดาห์ ปกติสมาชิกของห้องสมุดสามารถยืมได้สูงสุดหก รายการต่อครั้ง แต่สมาชิกของเจ้าหน้าที่อาจยืม ได้สูงสุด 12 รายการในคราวเดียว เฉพาะสมาชิกของพนักงาน อาจยืม วารสาร

การวิเคราะห์ซ้ำครั้งแรกจะให้:

ชั้นเรียน:

  • ห้องสมุด
  • หนังสือวารสาร
  • สำเนา
  • เงินกู้
  • สมาชิกห้องสมุด
  • สิ่งของ
  • พนักงานสมาชิก

จากที่นี่คุณสามารถคิดได้ว่าคลาสใดต้องการคุณลักษณะและวิธีการที่จะใช้พฤติกรรมแล้วปรับแต่งโมเดลนั้นมากขึ้น


1
คำตอบที่ดี. นอกเหนือไปจากกระดาษแอ๊บบอตผมขอแนะนำหนังสือเอริคอีวานในการออกแบบขับเคลื่อนโดเมน มันสอนวิธีการสร้างภาษา ubiqitous สำหรับโครงการและวิธีการกลั่นแบบที่มีประสิทธิภาพจากมัน
เหยี่ยว

ฉันถูกดึงไปที่คำตอบนี้เพราะฉันศึกษาภาษาศาสตร์นิดหน่อยและมันก็เป็นเรื่องที่เข้าใจง่ายสำหรับฉันโดยไม่ต้องใช้ความพยายามมาก แต่ฉันก็กลัวด้วยเหตุผลเดียวกันเพราะฉันพบว่าการเปรียบเทียบมากเกินไปทำให้ฉันหลงทาง .

@Falcon +1 สำหรับแนะนำหนังสือด้วย Kandinsky cover

@ tbj1982: ถูกต้องแน่นอน มันเป็นฮิวริสติกแบบง่ายและผลลัพธ์ควรได้รับการพิจารณาด้วย มันไม่ใช่กระสุนสีทอง แต่อาจเป็นตัวเริ่มต้นที่เป็นประโยชน์
blubb

4

ในความคิดของฉันการใช้แนวทาง TDD เป็นธรรมชาติและมีประสิทธิภาพ:

  1. เขียนข้อกำหนดเฉพาะ (ให้, เมื่อ, จากนั้น)
  2. แปลความต้องการแต่ละข้อ (สำคัญที่สุดก่อน) เป็นการทดสอบหน่วย
  3. เขียนจำนวนรหัสน้อยที่สุดเพื่อผ่านการทดสอบที่เขียนใน # 2
  4. หลังจากผ่านการทดสอบแล้วให้ทำการ refactor รหัสของคุณตามหลักการออกแบบของ SOLIDD
  5. หลังจาก # 4 ตรวจสอบให้แน่ใจว่ารหัสของคุณยังคงผ่านการทดสอบทั้งหมดที่เขียน
  6. ทำซ้ำ 2-5

ด้วยกระบวนการนี้คุณสามารถสร้างรหัสที่สามารถทดสอบได้ด้วยการออกแบบเสียง คุณอาจคิดในตอนแรกว่าการทดสอบการเขียนไม่จำเป็น แต่กิจกรรมนั้นช่วยให้คุณสร้างสถาปัตยกรรมเสียงได้จริง


3

นี่คือขั้นตอนที่ฉันใช้ในรหัส c ++:

  1. ตัดสินใจชื่อชั้น
  2. ตัดสินใจพารามิเตอร์คอนสตรัคและสมาชิกข้อมูล
  3. ตัดสินใจชื่อฟังก์ชั่นและต้นแบบของสมาชิก
  4. ทำให้มันเป็นอิสระจากชั้นเรียนอื่น ๆ
  5. การออกแบบเสร็จสิ้นและทุกอย่างก็เป็นเพียงการนำไปใช้งาน

เหตุผลสำหรับ (1) คือมันกำหนดขอบเขตของฟังก์ชั่นที่เป็นของชั้นเรียน เหตุผลสำหรับ (2) คือมันกำหนดวิธีที่ชั้นเรียนสื่อสารกับโลกภายนอก เหตุผลสำหรับ (3) คือมันกำหนดวิธีการเลือกฟังก์ชันการทำงานของคลาสที่จำเป็นในแต่ละสถานการณ์ เหตุผลสำหรับ (4) คือมันอนุญาตให้ใช้คลาสในสถานการณ์ต่างๆ เหตุผลสำหรับ (5) คือมันกำหนดขอบเขตระหว่างการออกแบบและการใช้งาน


+1 สำหรับการตั้งชื่อ มันวิเศษมากเพียงแค่เพิ่มชื่อสามารถจัดระเบียบกระบวนการคิดเนื่องจากคุณนำความรู้ทั้งหมดเกี่ยวกับ "โลกแห่งความจริง" มาด้วย
Mark Brackett
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.