ฉันกำลังนำเสนอที่แสดงความแตกต่างระหว่างการเขียนโปรแกรมเชิงโครงสร้างและเชิงวัตถุและฉันต้องการแสดงให้เห็นว่าทำไมผู้คนต้องการ OOP ด้วยตัวอย่างที่การใช้แนวคิด OOP จะทำให้การเข้ารหัสง่ายขึ้นมากเพื่อให้ผู้ชมรู้สึกว่าต้องการ OOP
ความคิดใด ๆ ??
ฉันกำลังนำเสนอที่แสดงความแตกต่างระหว่างการเขียนโปรแกรมเชิงโครงสร้างและเชิงวัตถุและฉันต้องการแสดงให้เห็นว่าทำไมผู้คนต้องการ OOP ด้วยตัวอย่างที่การใช้แนวคิด OOP จะทำให้การเข้ารหัสง่ายขึ้นมากเพื่อให้ผู้ชมรู้สึกว่าต้องการ OOP
ความคิดใด ๆ ??
คำตอบ:
คุณอาจต้องการดูบล็อกวิดีโอด่วนนี้ ผลที่สุดคือความแตกต่างระหว่างการเขียนโปรแกรมที่มีโครงสร้างและการเขียนโปรแกรม OO เป็นเรื่องของสิ่งที่พวกเขานำออกจากการเขียนโปรแกรมไม่ใช่เกี่ยวกับสิ่งที่พวกเขาเพิ่ม สาขาวิชาซอฟต์แวร์เช่นการเขียนโปรแกรมแบบโครงสร้างและการเขียนโปรแกรมเชิงวัตถุจะมีข้อ จำกัด ไม่เปิดใช้งาน นี่คือคำจำกัดความบางอย่าง คำเตือน: คุณจะไม่ชอบพวกเขา
การเขียนโปรแกรมที่มีโครงสร้างเป็นวินัยที่กำหนดเมื่อข้ามไป (โอนโดยตรงของการควบคุม)
การเขียนโปรแกรม OO เป็นวินัยที่กำหนดตามตัวชี้ไปยังฟังก์ชัน (การถ่ายโอนการควบคุมทางอ้อม)
ฟังก์ชั่นการเขียนโปรแกรมเป็นวินัยที่กำหนดเมื่อได้รับมอบหมาย
ครั้งแรกไม่ยากเกินไปที่จะเข้าใจ Dijkstra พบว่ามันเป็นไปไม่ได้ที่จะสร้างหลักฐานทั่วไปของความถูกต้องเมื่อข้ามไปได้รับอนุญาตในอัลกอริทึม แต่ถ้าโครงสร้างการควบคุมถูก จำกัด ให้ลำดับการเลือกและซ้ำพิสูจน์แล้วของความถูกต้องเป็นไปได้ แน่นอนว่าเราไม่ได้พยายามพิสูจน์สิ่งที่ถูกต้องในปัจจุบัน แต่เราชอบความเรียบง่ายและความสง่างามของการเขียนโปรแกรมที่มีโครงสร้าง
มันยากกว่าที่จะเข้าใจ OO เล็กน้อย เรามักจะนิยาม OO เป็น encapsulation การสืบทอดและ polymorphism อะไรคือสิ่งที่น้อยคนรู้ก็คือว่าทั้งสามของแอตทริบิวต์เหล่านี้จะทำได้และมักได้รับการประสบความสำเร็จใน C. แท้จริง c ++ เริ่มต้นเป็นเพียง preprocessor ที่รวบรวมลงไปซีมันไม่ได้เป็นจริงยากที่จะแค็ปซูลใน C. หรือมันยากที่จะสร้าง โครงสร้างข้อมูลที่เป็นส่วนย่อยของกันและกันจำลองการสืบทอด อย่างไรก็ตามความแตกต่างนั้นค่อนข้างยาก มันต้องการตัวชี้ไปยังฟังก์ชั่นซึ่งใน C เป็นเรื่องยากที่จะจัดการได้ดี ภาษาใดที่ C ++ ให้เราคือวินัยที่บังคับให้พอยน์เตอร์เหล่านั้นทำงาน คอมไพเลอร์ C ++ สร้าง vtables สำหรับเราและเริ่มต้นพอยน์เตอร์ภายในพวกมันตามระเบียบที่เคร่งครัด ดังนั้นในความรู้สึกที่แท้จริง OO เป็นเพียงการกำหนดวินัยการถ่ายโอนการควบคุมทางอ้อมเช่นตัวชี้ไปยังฟังก์ชัน
การเขียนโปรแกรมที่มีโครงสร้างเป็นเรื่องเกี่ยวกับวิธีที่จะไม่ใช้ goto OO เป็นเรื่องเกี่ยวกับวิธีที่จะไม่ใช้พอยน์เตอร์กับฟังก์ชั่น และการเขียนโปรแกรมฟังก์ชั่นก็เป็นเรื่องเกี่ยวกับสิ่งที่ไม่ควรทำ ในการเขียนโปรแกรมการทำงานเราไม่ได้กำหนดตัวแปรยกเว้นในกรณีที่ควบคุมอย่างเข้มงวดที่สุด
ดังนั้นในที่สุดแล้วเทคโนโลยี "การเขียนโปรแกรม" เหล่านี้ล้วน แต่ จำกัด สาขามากกว่าการเปิดใช้งานเทคโนโลยี พวกเขาบอกเราว่าไม่ต้องทำมากขึ้นกว่าที่พวกเขาบอกเราว่าสิ่งที่จะทำ และนั่นหมายความว่าการพัฒนาซอฟต์แวร์ยังไม่ได้เติบโตในช่วง 40 ปีที่ผ่านมา ค่อนข้างจะมีการหดตัว มันถูก จำกัด มากขึ้นเรื่อย ๆ เนื่องจากเราได้เรียนรู้ทุกสิ่งที่เราไม่ควรทำ
การเรียนรู้สิ่งที่ไม่ควรทำเป็นสิ่งที่ดี แต่นี่เป็นคำถามรบกวน: สิ่งใหม่ ๆ ที่เราได้เรียนรู้ที่จะทำอย่างไร
มีวิธีพื้นฐาน 3 วิธีในการเขียนโปรแกรมคอมพิวเตอร์:
goto
s เช่นในล่าม BASIC เก่าหรือในภาษาแอสเซมบลี มีคนไม่กี่คนที่ตั้งโปรแกรมด้วยวิธีนี้อีกต่อไปในมุมมองของฉันการเขียนโปรแกรมเชิงวัตถุเป็นสิ่งที่แตกต่าง มันเกี่ยวกับวิธีการจัดระเบียบโปรแกรมของคุณในระดับที่ใหญ่ขึ้น ไม่ได้แทนที่หรือล้าสมัยกระบวนทัศน์ 3 ข้อที่ฉันกล่าวถึงข้างต้น - ภายในตัววิธีการคุณยังต้องเลือกหนึ่งในสามกระบวนทัศน์จากรายการที่จะเขียน
ทุกอย่างเกี่ยวกับวิธีที่คุณคาดหวังการเปลี่ยนแปลง
แนวคิดทั้งสองยืมตัวเองไปสู่ reusablility แต่ OOP เปิดประตูสู่การเปลี่ยนแปลงที่ง่ายขึ้น OOP มีความสามารถในการนำกลับมาใช้ใหม่ได้ที่การเขียนโปรแกรมโครงสร้าง แต่คุณสามารถใช้เพื่อสร้างฟังก์ชันการทำงานใหม่โดยใช้ความพยายามน้อยลง
คุณสามารถพูดได้ว่า OOP สืบทอดการทำงานทั้งหมดของการเขียนโปรแกรมโครงสร้างด้วยฟังก์ชันเพิ่มเติมของการสืบทอด! :-D
แนวคิดที่มีมุมฉาก การเขียนโปรแกรมที่มีโครงสร้างเป็นเรื่องเกี่ยวกับการสร้างรหัสภายในขั้นตอน / ฟังก์ชัน / วิธี เป็นไปได้อย่างสมบูรณ์ (และเป็นที่พึงปรารถนา) เพื่อปฏิบัติตามหลักการของการเขียนโปรแกรมที่มีโครงสร้างภายในวิธีการเรียนเมื่อทำ OOP
นั่นเป็นถ้อยคำที่เป็นอัตวิสัย - การเขียนโปรแกรมที่มีโครงสร้างและ OOP เป็นรูปแบบของการแก้ปัญหาและสิ่งหนึ่งไม่ได้ดีไปกว่าสิ่งอื่นเสมอไป การเขียนไลบรารี่เมธอดเชิงตัวเลขนั้นสมเหตุสมผลถ้าทำในรูปแบบที่มีโครงสร้างซึ่งคุณกำลังทำการแปลงข้อมูลอินพุต แม้ว่าจะมีเอเจนต์แบบง่ายที่ขับเคลื่อนด้วยเครื่องสถานะสามารถแสดงเป็นคลาสที่มีในตัวเองใน Java หรือ C ++ OOP อาจเป็นวิธีธรรมชาติในการแสดงภาชนะที่เก็บข้อมูลสำหรับโครงสร้างข้อมูล
การพูดคุยเกี่ยวกับการซ่อนข้อมูลและโมดุลเป็นวิธีที่ดีในการสร้างแรงจูงใจให้ OOP อย่างมีสไตล์
สิ่งที่น่าสนใจในเรื่องนี้ถูกเขียนขึ้นโดยSteve Yegge - ในบางแง่มุมซึ่งเป็นหนึ่งในคำอธิบายที่ดีกว่าของความแตกต่างในแนวทางระหว่างสองสไตล์
OOP นั้นง่ายต่อการเข้าใจเมื่อคุณสร้างโมเดลธุรกิจ เมื่อคุณคิดถึงองค์ประกอบของแอปพลิเคชันคุณใช้ OBJECTS และความสัมพันธ์บางอย่างระหว่างหนังสือเช่น Book มีผู้แต่งชื่อเรื่อง ISBN หนังสือคือการให้ในห้องสมุดและนักเรียนสามารถยืมได้ การเขียนโปรแกรมโครงสร้างบังคับให้คิดเกี่ยวกับกระบวนการเฉพาะการใช้งานที่ไม่เป็นนามธรรม
OOP ออกแบบมาเพื่อให้ง่ายต่อการเปลี่ยนแปลง การเปลี่ยนแปลงโครงสร้างของโปรแกรมสามารถทำได้ แต่ต้องอธิบายด้วยรหัส การเปลี่ยนแปลงในโปรแกรม OO สามารถอธิบายได้ด้วยการเปลี่ยนรูปแบบนามธรรม
ขอบเขตตัวแปร:
ฉันคิดว่าหลักการของภาษาเพื่อให้แน่ใจว่าการเขียนโปรแกรมที่ดีคือการจำกัดขอบเขตของตัวแปร ในภาษาที่มีโครงสร้างเช่น C ขอบเขตเป็นส่วนใหญ่สองประเภท -
เราทุกคนรู้ว่าขอบเขตทั่วโลกเป็นอันตราย แต่บางครั้งขอบเขตภายในเครื่องไม่เพียงพอที่จะเรียกใช้โปรแกรม การหลีกเลี่ยงขอบเขตทั่วโลกนั้นมีแนวโน้มที่จะใช้ตัวชี้ที่กว้างขึ้นซึ่งช่วยให้สามารถใช้ตัวแปรนอกขอบเขตได้ แต่พอยน์เตอร์นั้นเข้าใจและใช้ยาก
ภาษา OOP เช่น C ++ เพิ่มขอบเขตขอบเขตคลาส / วัตถุชนิดใหม่ผ่านการห่อหุ้ม การกำหนดขอบเขตนี้ได้รับการปรับปรุงเพิ่มเติมโดยรูปแบบส่วนตัว / สาธารณะ และนี่ช่วยแก้ปัญหามากมายของการกำหนดขอบเขตตัวแปร ขอบเขตถูกกำหนดเพิ่มเติมใน OOP และตัวชี้มีความต้องการน้อยกว่า
นี่เป็นหนึ่งในคุณสมบัติที่ยอดเยี่ยมของ OOP