จากบล็อกของคุณดูเหมือนว่าคุณคุ้นเคยกับการเขียนโปรแกรมที่จำเป็นและใช้งานได้ดีและคุณคุ้นเคยกับแนวคิดพื้นฐานที่เกี่ยวข้องกับการเขียนโปรแกรมเชิงวัตถุ แต่คุณไม่เคยได้คลิกเลย ทำให้มีประโยชน์ ฉันจะพยายามอธิบายในแง่ของความรู้นั้นและหวังว่าจะเป็นประโยชน์กับคุณ
ที่เป็นแกนหลัก OOP เป็นวิธีการใช้กระบวนทัศน์ที่จำเป็นเพื่อจัดการความซับซ้อนระดับสูงได้ดีขึ้นโดยการสร้างโครงสร้างข้อมูลที่ "ฉลาด" ซึ่งเป็นแบบจำลองโดเมนปัญหา ในโปรแกรม (เชิงกระบวนการแบบไม่เน้นวัตถุ) คุณมีสองสิ่งพื้นฐาน: ตัวแปรและรหัสที่รู้ว่าต้องทำอะไรกับพวกเขา รหัสจะรับอินพุตจากผู้ใช้และแหล่งอื่น ๆ เก็บไว้ในตัวแปรดำเนินการกับมันและสร้างข้อมูลเอาต์พุตที่ไปยังผู้ใช้หรือที่อื่น ๆ
การเขียนโปรแกรมเชิงวัตถุเป็นวิธีการทำให้โปรแกรมของคุณง่ายขึ้นโดยใช้รูปแบบพื้นฐานนั้นและทำซ้ำในระดับที่เล็กลง เช่นเดียวกับโปรแกรมคือชุดของข้อมูลขนาดใหญ่ที่มีรหัสซึ่งรู้ว่าจะทำอย่างไรกับมันวัตถุแต่ละชิ้นเป็นข้อมูลชิ้นเล็ก ๆ ที่ถูกผูกไว้กับรหัสที่รู้ว่าจะทำอย่างไรกับมัน
โดยการแบ่งโดเมนปัญหาออกเป็นชิ้นเล็ก ๆ และทำให้แน่ใจว่าข้อมูลมากที่สุดเท่าที่จะเป็นไปได้นั้นถูกผูกไว้โดยตรงกับโค้ดที่รู้ว่าจะทำอย่างไรกับมันคุณทำให้มันง่ายขึ้นมากที่จะให้เหตุผลเกี่ยวกับกระบวนการโดยรวม ปัญหาที่ทำขึ้นกระบวนการ
โดยการจัดกลุ่มข้อมูลลงในคลาสอ็อบเจ็กต์คุณสามารถรวมโค้ดที่เกี่ยวข้องกับข้อมูลนั้นไว้ที่ส่วนกลางทำให้โค้ดที่เกี่ยวข้องง่ายขึ้นทั้งในการค้นหาและตรวจแก้จุดบกพร่อง และโดยการห่อหุ้มข้อมูลที่อยู่เบื้องหลังตัวระบุการเข้าถึงและการเข้าถึงโดยใช้วิธีการ (หรือคุณสมบัติหากภาษาของคุณรองรับ) คุณจะลดโอกาสเกิดความเสียหายของข้อมูลหรือการละเมิดค่าใช้จ่าย
และด้วยการใช้การสืบทอดและความหลากหลายคุณสามารถนำคลาสที่มีอยู่ก่อนมาใช้ใหม่ปรับแต่งให้เหมาะสมกับความต้องการเฉพาะของคุณโดยไม่ต้องดัดแปลงต้นฉบับหรือเขียนทุกอย่างใหม่ (ซึ่งเป็นสิ่งที่คุณไม่ควรทำถ้าคุณสามารถหลีกเลี่ยงมัน.) เพียงระมัดระวังคุณเข้าใจวัตถุฐานของคุณหรือคุณอาจจะจบลงด้วยจิงโจ้นักฆ่า
สำหรับฉันนี่คือหลักการพื้นฐานของการเขียนโปรแกรมเชิงวัตถุ: การจัดการความซับซ้อนการรวมศูนย์โค้ดและการสร้างแบบจำลองปัญหาโดเมนที่ดีขึ้นผ่านการสร้างคลาสวัตถุการสืบทอดและความหลากหลายและความปลอดภัยที่เพิ่มขึ้นโดยไม่ต้องเสียสละอำนาจหรือการควบคุม คุณสมบัติ. ฉันหวังว่าสิ่งนี้จะช่วยให้คุณเข้าใจว่าทำไมโปรแกรมเมอร์จำนวนมากจึงเห็นว่ามีประโยชน์
แก้ไข: เพื่อตอบสนองต่อคำถามของ Joel ในความคิดเห็น
คุณสามารถอธิบายสิ่งที่ "โปรแกรมเชิงวัตถุ" มี (นอกเหนือจากข้อบกพร่องแฟนซีเหล่านี้ที่คุณระบุไว้) ซึ่งแตกต่างจากโปรแกรมพื้นฐานที่จำเป็นหรือไม่ คุณจะ "รับลูกบอลกลิ้งได้อย่างไร"
ข้อจำกัดความรับผิดชอบเล็กน้อยที่นี่ โมเดลของฉันของ "โปรแกรมเชิงวัตถุ" นั้นเป็นแบบจำลองเดลฟี่ซึ่งคล้ายกับโมเดล C # /. NET มากเนื่องจากถูกสร้างขึ้นโดยอดีตสมาชิกทีมเดลฟาย สิ่งที่ฉันพูดที่นี่อาจใช้ไม่ได้หรือไม่ได้ใช้มากในภาษา OO อื่น ๆ
โปรแกรมเชิงวัตถุเป็นหนึ่งในตรรกะทั้งหมดที่มีโครงสร้างรอบวัตถุ ของหลักสูตรนี้จะต้องมีการ bootstrapped ที่ไหนสักแห่ง โปรแกรม Delphi Application
ของคุณโดยทั่วไปมีการเริ่มต้นรหัสที่สร้างวัตถุเดี่ยวที่เรียกว่า ที่จุดเริ่มต้นของโปรแกรมจะเรียกใช้Application.Initialize
จากนั้นเรียกใช้Application.CreateForm
สำหรับทุกรูปแบบที่คุณต้องการโหลดลงในหน่วยความจำตั้งแต่เริ่มต้นและจากนั้นApplication.Run,
จะแสดงรูปแบบหลักบนหน้าจอและเริ่มการทำงานวนเข้า / เหตุการณ์ที่เป็นแกนหลักของ โปรแกรมคอมพิวเตอร์เชิงโต้ตอบ
แอปพลิเคชันและแบบฟอร์มของคุณโพลสำหรับกิจกรรมที่เข้ามาจากระบบปฏิบัติการและแปลเป็นการเรียกใช้เมธอดบนวัตถุของคุณ สิ่งหนึ่งที่พบได้บ่อยคือการใช้ตัวจัดการเหตุการณ์หรือ "ผู้รับมอบสิทธิ์" ใน. NET-speak วัตถุมีวิธีการที่ระบุว่า "ทำ X และ Y แต่ตรวจสอบเพื่อดูว่ามีการกำหนดตัวจัดการเหตุการณ์เฉพาะหรือไม่และเรียกมันว่าเป็นหรือไม่" ตัวจัดการเหตุการณ์เป็นตัวชี้เมธอดซึ่งเป็นการปิดแบบง่าย ๆ ที่มีการอ้างอิงถึงเมธอดและการอ้างอิงไปยังอินสแตนซ์ของวัตถุ - ที่ใช้เพื่อขยายลักษณะการทำงานของวัตถุ ตัวอย่างเช่นถ้าฉันมีวัตถุปุ่มในแบบฟอร์มของฉันฉันปรับแต่งพฤติกรรมของมันโดยการแนบการจัดการเหตุการณ์ OnClick ซึ่งทำให้วัตถุอื่น ๆ ที่จะดำเนินการวิธีการเมื่อมีการคลิกปุ่ม
ดังนั้นในโปรแกรมเชิงวัตถุงานส่วนใหญ่ทำโดยการกำหนดวัตถุด้วยความรับผิดชอบบางอย่างและเชื่อมโยงเข้าด้วยกันไม่ว่าจะด้วยวิธีการชี้หรือโดยวัตถุหนึ่งเรียกวิธีการที่กำหนดในอินเทอร์เฟซสาธารณะของวัตถุอื่นโดยตรง (และตอนนี้เรากลับไปห่อหุ้ม) นี่เป็นความคิดที่ฉันไม่มีแนวคิดเรื่องการย้อนกลับก่อนที่ฉันจะเข้าชั้นเรียน OOP ในวิทยาลัย