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


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.