การเขียนโปรแกรมเชิงวัตถุ: ทำไมต้อง“ มุ่งเน้น”


14

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

วลีนั้นไม่ได้รบกวนฉันจนกว่าฉันจะได้เรียนรู้เกี่ยวกับกระบวนทัศน์การเขียนโปรแกรมที่แตกต่างกัน (ฉันได้รับรายการนี้จากhttps://en.wikipedia.org/wiki/Comparison_of_programming_paradigms ):

  • ความจำเป็น
  • การทำงาน
  • ขั้นตอน
  • โครงสร้าง
  • เหตุการณ์ที่ขับเคลื่อนด้วย
  • เชิงวัตถุ
  • ที่เปิดเผย
  • ออ-Based

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

ดูที่นี่ ( https://en.wikipedia.org/wiki/Object-oriented_programming ) ไม่มีการใช้คำว่า "เชิง" ที่ระบุเป็นคำของตนเอง อธิบายเฉพาะ "วัตถุ"

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

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

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

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


11
ผมคิดว่า "กรรม" หรือ "Objectional" จะไม่ให้แสดงผลที่เหมาะสมของสิ่งที่มีความหมายจริงๆ ;-)
— หมอสีน้ำตาล

ฉันถือว่า "Objectified" แต่ตัดสินใจว่าอาจให้ความรู้สึกผิดด้วย
— Excrubulent


1
ฉันคิดว่า "วัตถุ" คือความผิดพลาดไม่ใช่ "เชิง" สิ่งที่เราเรียกว่า object-oriented มักจะเป็น class-oriented
— Steve314

1
แฟน ๆ Phoenix Wright ต้องการเรียกมันว่า "OBJECTION !! Programming"?
— Katana314

คำตอบ:


24

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

  • ความจำเป็น
  • การทำงาน
  • ขั้นตอน
  • โครงสร้าง
  • ที่เปิดเผย
  • เหตุการณ์ที่ขับเคลื่อนด้วย
  • ออ-Based
  • เชิงวัตถุ

ทุกคำมีอะไรเหมือนกัน? พวกเขาคือคำคุณศัพท์ทั้งหมดเพราะพวกเขาตั้งใจที่จะแก้ไขคำว่า นอกจากนี้ด้วยข้อยกเว้น "คำสั่ง" พวกเขาไม่ใช่คำคุณศัพท์ "ธรรมชาติ" แต่คำนาม "คำคุณศัพท์" - คำนามที่อธิบายถึงแกนหลักของกระบวนทัศน์: ฟังก์ชั่นโครงสร้างออโตมาตาและวัตถุ

และมีสองวิธีที่แตกต่างกันซึ่งคำนามเป็นคำคุณศัพท์: ผ่านคำต่อท้ายเช่น -al หรือ -ed หรือผ่านการสร้างคำคอมโพสิตโดยใช้เครื่องหมายยัติภังค์ ตอนนี้ Doc Brown ได้ชี้ให้เห็นแล้วคำต่อท้ายที่สามารถใช้เพื่อแสดงคำว่า "object" ส่งผลให้เกิดความหมายที่แตกต่างออกไป ซึ่งออกจากองค์ประกอบ

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


1
(แม้ว่าฉันคิดว่าคุณหมายถึงคำคุณศัพท์ไม่ใช่คำวิเศษณ์ - "การเขียนโปรแกรม" ในบริบทนี้เป็นคำนาม)
— JW01

@ JW01: โอ๊ะคุณพูดถูก
— Michael Borgwardt

นี่เป็นจุดที่ดีมาก - คำว่า "เชิง" ให้ความหมายแตกต่างกับ "การเขียนโปรแกรมวัตถุ" เนื่องจากคำว่า "วัตถุ" ด้วยตัวเองไม่ใช่คำคุณศัพท์ อันที่จริงฉันก็บอกว่าเหตุผลที่ "เน้น" ถูกเลือกมากกว่าคำอื่น ๆ ก็เพื่อการพาดพิง นอกจากนี้ฉันไม่ได้อ่านอะไรเลยฉันพูดเกินจริงเพื่อให้ประเด็นว่ามีคำว่า "เชิง" ซึ่งอยู่ที่นั่นโดยไม่ได้อธิบายและไม่ได้สอบถามในวรรณคดีอย่างสมบูรณ์ซึ่งทำให้ฉันสงสัยว่าจริง ๆ แล้วมันทำอะไรเพื่อหาจุด . : P
— Excrubulent

สงสัยว่าทำไมเขาไม่เลือกที่จะหมกมุ่นกับวัตถุ ... โอ้ใช่นั่นเป็นเพียงความกระตือรือร้นที่ไม่รู้จะหยุดเมื่อไหร่ ;-)
— Deduplicator

มีหนังสือเล่มหนึ่งที่เขียนโดยนักเขียนชาวโปแลนด์ชื่อ Jerzy Gręboszชื่อ "Symfonia C ++" ("The Symphony in C ++") ซึ่งผู้เขียนพยายามทำให้เข้าใจถึงวลีนั้นด้วยวิธีที่น่าสนใจ: เขาบอกว่ามันถูกเรียกว่า " object-oriented "เพราะความจริงที่ว่ารหัสสามารถ" ปรับทิศทางตัวเอง "ตามวัตถุที่กำลังทำงานกับ (พฤติกรรม polymorphic) เขาแยกความแตกต่างนี้จากภาษาที่มีเพียงแนวคิดของ "วัตถุ" เป็นชิ้นส่วนของข้อมูล ไม่มีหลักฐานทางประวัติศาสตร์ว่านี่เป็นความหมายดั้งเดิม แต่มันค่อนข้างอธิบายได้แม้จะเป็นคำอธิบายหลังพฤตินัย
— BarbaraKwarc

18

แต่เมื่อเราพูดถึงการเขียนโปรแกรมกับวัตถุเราต้องชี้แจงว่าเราให้ความสำคัญกับวัตถุเหล่านั้น เราใช้วัตถุไม่ได้เหรอ? เราไม่สามารถมีสิ่งของได้หรือ

ตรงไปตรงมามันเป็นเรื่องของประวัติศาสตร์ ฟังก์ชั่นการเขียนโปรแกรมฟังก์ชั่นการเขียนโปรแกรมเชิงฟังก์ชั่นการเขียนโปรแกรมเชิงประกาศเป็นจริงการเขียนโปรแกรมเชิงประกาศ ... หลังจากทั้งหมดเราไม่เพียงแค่ใช้ฟังก์ชั่น? เรามีฟังก์ชั่นไม่ได้ใช่ไหม

"Object oriented" ทำให้ลิ้นดีขึ้นและติดแน่นในอดีต

'การวางแนว' มาเพราะเราไม่ได้พูดถึงการเขียนโปรแกรม แต่ออกแบบ เพียงเพราะเราใช้วัตถุหรือใช้ฟังก์ชั่นหรือใช้เหตุการณ์ไม่ได้หมายความว่าวิธีการออกแบบของเราจะทำโดยการสร้างแบบจำลองทั้งสาม ด้วยการระบุการวางแนวของวิธีการออกแบบมันจะช่วยสื่อสารกับโปรแกรมเมอร์ว่าพวกเขาควรตีความและขยายการออกแบบนั้นอย่างไร - การสร้างแบบจำลองมุ่งเน้นไปที่การปรับใช้สี


ดูเหมือนว่าคุณกำลังบอกว่า "เชิงวัตถุ" เป็นคำแถลงนโยบายที่มีการใช้ถ้อยคำซ้ำซ้อนเช่นเดียวกับ "เชิงรุก" ที่มีความหมายเดียวกับ "คล่องแคล่ว" มันเป็นคำเสริมหน้าซ้ำซ้อนเพื่อให้ ผู้ฟังต้องไม่พลาดความหมาย
— Excrubulent

1
ฉันคิดว่าคุณประทับใจกับสิ่งนั้นมาก: เราทำการออกแบบเชิงวัตถุและนั่นเป็นเหตุผลว่าทำไมภาษาจึงเป็นวัตถุเชิงวัตถุ - เพื่อให้เราสามารถแสดงการออกแบบนี้
— K.Steff

1
@Excrubulent ไม่การเพิ่ม "oriented" ทำให้เฉพาะเจาะจงมากขึ้น "การวางวัตถุ" หมายความว่าเราไม่ได้พูดถึงเฉพาะเกี่ยวกับการเขียนโปรแกรมวัตถุ แต่เป็นการออกแบบโปรแกรมเพื่อให้พวกเขาใช้วัตถุอย่างมีความหมายแทน "การเขียนโปรแกรมวัตถุ", "การเขียนโปรแกรมฟังก์ชั่น" หรือ "การเขียนโปรแกรมการประกาศ" จะหมายถึงการพูดคุยเฉพาะเกี่ยวกับการใช้แนวคิดที่เฉพาะเจาะจงเหล่านั้นแทนหลักการออกแบบ "การทำงาน" และ "การประกาศ" เป็นคำที่มีคำต่อท้ายที่พยายามสื่อความหมายเดียวกัน แต่สำหรับวัตถุ "เชิงวัตถุ" หรือ "วัตถุประสงค์" จะไม่สมเหตุสมผล
— Ilari Kajaste

และอย่างที่Michael Borgwardt ตอบว่าคำว่า "oriented" นั้นไม่ได้พิเศษอะไร มันอาจเป็น "ตัวขับเคลื่อน" หรือ "ตาม" เช่นกัน จุดสำคัญคือมันไม่สามารถเป็น "การเขียนโปรแกรมวัตถุ" (laguange ดีเสมอของเหลวดังนั้นจึงทำได้แต่เพียง woud ไม่ได้อธิบาย)
— Ilari Kajaste

ฉันได้เปลี่ยนคำตอบเพราะคำตอบของ Michael Borgwardt จริง ๆ แล้วอธิบายความหมายของคำและวิธีปรับเปลี่ยนวลี
— Excrubulent

2

เรียกมันว่าช่วยอธิบายวัตถุเป็นส่วนสำคัญของกระบวนทัศน์

การเขียนโปรแกรมเชิงวัตถุมีรากฐานมาจากSimulaซึ่งเป็นหลัก ALGOL บวกกับคุณสมบัติการเขียนโปรแกรมวัตถุใหม่ และในการรักษาประวัติศาสตร์นั้นแม้กระทั่งทุกวันนี้ก็เป็นไปได้ในหลาย ๆ ภาษา (แม้แต่ "ภาษา OO บริสุทธิ์") ในการเขียนโปรแกรมบางอย่างที่เป็นเพียงโปรแกรมขั้นตอนที่มีวัตถุบางอย่างอยู่ในนั้น แต่นี่ถือว่าเป็นรูปแบบที่ไม่ดีโดยนักพัฒนาที่มีประสบการณ์มากกว่า

จริงๆแล้วการทำอะไรบางอย่าง "วิธีเชิงวัตถุ" นั้นแตกต่างจาก "ขั้นตอนวิธีการ" มาก แนวคิดที่สำคัญที่สุดคือการใช้การสืบทอดและความหลากหลาย เมื่อคุณเข้าใจอย่างแท้จริงและinternalizeเรียนวิธีและวิธีการทำงานเสมือนมันเป็นประสบการณ์ที่เปิดตาที่มีการเปลี่ยนแปลงวิธีการที่คุณเขียนโค้ดในหลายกรณีการปรับเปลี่ยนกระบวนทัศน์ที่แท้จริง (แน่นอนว่าคุณเริ่มเขียนโค้ดขั้นตอนก่อนนักเรียนจำนวนมากในวันนี้ตรงไปที่ Java หรือ C # เป็นภาษาแรกและ IMO ที่พวกเขาพลาดในการเข้าใจถึงประโยชน์ของ OO จริงๆ)

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


นี่เป็นคำตอบที่คล้ายคลึงกับของ Telastyn ยกเว้นคุณดูเหมือนจะบอกเป็นนัยว่า "การเขียนโปรแกรมเชิงวัตถุ" เนื่องจากคำนี้แตกต่างจาก "การเขียนโปรแกรมวัตถุ" อย่างแท้จริง คุณอธิบายได้ไหมว่ามันต่างกันอย่างไร ฉันหมายความว่าดูเหมือนว่าฉัน OOP เป็นคำที่หลวมพอที่ OP จะให้บริการฟังก์ชั่นเดียวกันเช่นกัน
— Excrubulent

2
นักเรียนจำนวนมากวันนี้ตรงไปที่ Java หรือ C # เป็นภาษาแรกและ IMO พวกเขาพลาดที่จะเข้าใจถึงประโยชน์ของ OO โดยการทำเช่นนั้น - จริง ๆ แล้วฉันเริ่มต้นที่ C ++ และในการมอบหมายครั้งแรกของฉันฉันใช้การผสมผสานของวัตถุและฟังก์ชั่น แต่ถูกทำเครื่องหมายลงสำหรับการใช้ฟังก์ชั่นของฉัน บางส่วนของฟังก์ชั่นเหล่านี้ทำงานได้อย่างหมดจดและไม่ได้รับประโยชน์อะไรเลยจากการห่อหุ้มในวัตถุ แต่ส่วนอื่น ๆ ที่นำพอยน์เตอร์ไปยังตัวแปรเพื่อทำงาน (เช่น: แก้ไขข้อมูลรัฐ) กลายเป็นเรื่องง่ายกว่า ในวัตถุดังนั้นฉันเห็นทั้งสองด้าน
— Excrubulent
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.