การเขียนโปรแกรมเชิงวัตถุ

จากวิกิพีเดีย สารานุกรมเสรี

การเขียนโปรแกรมเชิงวัตถุ (Object-oriented programming, OOP) คือหนึ่งในรูปแบบการเขียนโปรแกรมคอมพิวเตอร์ ที่ให้ความสำคัญกับ วัตถุ ซึ่งสามารถนำมาประกอบกันและนำมาทำงานรวมกันได้ โดยการแลกเปลี่ยนข่าวสารเพื่อนำมาประมวลผลและส่งข่าวสารที่ได้ไปให้ วัตถุ อื่นๆที่เกี่ยวข้องเพื่อให้ทำงานต่อไป

แนวคิดการเขียนโปรแกรมแบบดังเดิมมักนิยมใช้ การเขียนโปรแกรมเชิงกระบวนการ (Procedural Programming) ซึ่งให้ความสำคัญกับขั้นตอนกระบวนการที่ทำ โดยแบ่งโปรแกรมออกเป็นส่วนๆตามลำดับขั้นตอนการทำงาน แต่แนวคิดการเขียนโปรแกรมเชิงวัตถุนั้นให้ความสำคัญกับ ข้อมูล(data) และ พฤติกรรม(behavior) ของวัตถุ และความสัมพันธ์กันระหว่างวัตถุกันมากกว่า

สารบัญ

[แก้] เปรียบเทียบแนวคิดระหว่างการเขียนโปรแกรมเชิงกระบวนการ และเชิงวัตถุ

ตัวอย่างตู้ขายเครื่องดื่มอัตโนมัติ

[แก้] วิธีการคิดแบบการเขียนโปรแกรมเชิงกระบวนการ

เมื่อมีการหยอดเหรียญเข้าตู้:

  1. ตรวจสอบจำนวนเหรียญและชนิดของเหรียญ
  2. แสดงผลชนิดของน้ำที่สามารถเลือกซื้อได้
  3. ตรวจสอบจำนวนน้ำกระป๋องที่มีอยู่ในตู้
  4. รับผลการเลือกชนิดน้ำ
  5. ส่งน้ำที่เลือกออกมาจากช่อง
  6. จัดเก็บเงินเข้าระบบ
  7. หากมีเงินถอน ให้ถอนเงินที่เหลือ ที่ช่องรับเงินทอน

[แก้] วิธีการคิดแบบการเขียนโปรแกรมเชิงวัตถุ

ตู้ขายเครื่องดื่มอัตโนมัติ ประกอบด้วยส่วนประกอบต่างๆได้แก่ หน่วยตรวจสอบและจัดการเรื่องเงิน หน่วยจัดการเครื่องดื่ม หน่วยแสดงผลและรอรับคำสั่ง

  • หน่วยตรวจสอบและจัดการเรื่องเงิน มีข้อมูลเกี่ยวกับเงินที่ได้รับ และเงินที่มีอยู่ในระบบ สามารถรับและตรวจสอบเงินที่หยอดเข้ามาได้ และถอนเงินได้
  • หน่วยจัดการเครื่องดื่ม มีข้อมูลชนิดของเครื่องดื่ม จำนวนเครื่องดื่ม สามารถจัดเตรียมชนิดเครื่องดื่มที่พอกับเงินที่หยอด และสามารถจ่ายเครื่องดื่มออกมาจากตู้ได้
  • หน่วยแสดงผลและรอรับคำสั่ง มีหน้าที่รอรับคำสั่ง และแสดงผลเงินที่หยอดเข้ามา

หมายเหตุ ตัวอย่างนี้เป็นเพียงตัวอย่างโดยสังเขป

[แก้] แนวคิดที่สำคัญของการเขียนโปรแกรมเชิงวัตถุ

  • คลาส (Class) - ประเภทของวัตถุ เป็นการกำหนดว่า วัตถุ จะประกอบไปด้วย ข้อมูล(data) หรือคุณสมบัติ(property) และ พฤติกรรม(behavior)หรือการกระทำ(method) อะไรบ้าง ซึ่ง คลาส (เช่น มนุษย์) เป็นโครงสร้างพื้นฐานของการเขียนโปรแกรมเชิงวัตถุ
  • วัตถุ (Object) - โดยมากจะเรียกว่า อ็อบเจกต์ คือ ตัวตน(instance) ของ คลาส(เช่น นายทักษิณ, นายสนธิ) ซึ่งจะเกิดขึ้นระหว่าง run-time โดยแต่ละ อ็อบเจกต์ จะมีข้อมูลเฉพาะของตัวเอง ทำให้ อ็อบเจกต์ แต่ละ อ็อบเจกต์ ของ คลาส ซึ่งใช้ source code เดียวกันมีคุณลักษณะและคุณสมบัติที่แตกต่างกัน
  • Encapsulation - การปิดบังข้อมูล เป็นวิธีการกำหนดสิทธิในการเข้าถึงข้อมูล หรือการกระทำกับ อ็อบเจกต์ ของ คลาสนั้นๆ ทำให้แน่ใจได้ว่าข้อมูลของอ็อบเจกต์นั้นจะถูกเปลี่ยนแปลงแก้ไขผ่านทาง methods หรือ properties ที่อนุญาตเท่านั้น (เช่น การกำหนดตำแหน่งทางการเมือง เป็น public method ที่ผู้อื่นสามารกระทำได้ ส่วนการลาออกจากตำแหน่ง เป็น private method ที่มีแต่ อ็อบเจกต์ ของ คลาส เท่านั้นที่จะสามารถทำได้ แต่การกดดันและการขับไล่สามารถสร้าง data ที่อาจจะส่งผลเกิดการลาออกได้เช่นกัน)
  • Inheritance - การสืบทอดคุณสมบัติ เป็นวิธีการสร้าง คลาสย่อย ที่เรียกว่าซับคลาส (subclass) ซึ่งจะเป็นกำหนดประเภทของวัตถุให้จำเพาะเจาะจงขึ้น ซึ่ง ซับคลาส จะได้รับถ่ายทอดคุณสมบัติต่างๆมาจากคลาสหลักด้วย (เช่น คลาส มนุษย์ สืบทอดมากจาก คลาส สิ่งมีชีวิต)
  • Abstraction - นามธรรม เป็นการแสดงถึงคุณลักษณะและพฤติกรรมของ object เท่าที่จำเป็นต้องรับรู้และใช้งาน โดยซ่อนส่วนที่เหลือเอาไว้เพื่อไม่ให้เกิดความสับสน เช่น ตามปกติแล้ว นายทักษิณ จัดเป็นตัวตนของ คลาส มนุษย์ ซึ่งจะมีพฤติกรรม การกระทำทุกอย่างที่ตามที่กำหนดไว้ตามโครงสร้างของ คลาส มนุษย์ แต่ในบางกรณีที่นำไปใช้งาน เราไม่ต้องการให้เกิดการสับสนต่อการใช้งานหรือการจัดประเภทมากเราสามารถจัดการหรือใช้งาน อ็อบเจกต์ นายทักษิณ ให้อยู่ในรูปของสิ่งมีชิวิต ก็ได้
  • Polymorphism - ภาวะที่มีหลายรูปแบบ เป็นวิธีการกำหนดรูปแบบการกระทำที่เหมือนกันแต่ได้ผลที่แตกต่างการ เช่น การเปล่งเสียง เป็น method หลักของ คลาส สิ่งมีชีวิต ซึ่งมีคลาส มนุษย์ และคลาสสุนัข เป็น ซับคลาส แต่ผลของการเปล่งเสียงของอ็อบเจกต์จากคลาสทั้งสองจะออกมาไม่เหมือนกัน

[แก้] แนวทางการออกแบบและแก้ปัญหา

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

[แก้] ดีไซน์แพตเทิร์น - แบบแผนและแนวทางการออกแบบ

ในการออกแบบและการพัฒนาโปรแกรมเชิงวัตถุ ได้มีการรวบรวมบันทึกวิธีการแก้ปัญหาที่ใช้ได้ผลสำหรับปัญหาที่เกิดขึ้นซ้ำๆ เสมอๆ วิธีการแก้ไขเหล่านี้สามารถนำมาใช้ได้บ่อยๆ ในสถานการณ์ที่หลากหลาย บันทึกรวบรวมนี้มีชื่อเรียกเฉพาะว่า ดีไซน์แพตเทิร์น (Design Patterns)

Design Patterns ซึ่งเป็นหนังสือที่ออกจัดจำหน่ายเมื่อปี 2538 โดยผู้แต่งร่วม 4 คนได้แก่ Erich Gamma, Richard Helm, Ralph Johnson และ John Vlissides หรือที่รู้จักในนามของ GoF (Gang of four) ถือว่าเป็น แบบแผนและแนวทางการออกแบบ ที่ได้รับความนิยมและเป็นที่รู้จักอย่างกว้างขวางในการนำมาประยุกต์ใช้งานจริง

[แก้] การเขียนโปรแกรมเชิงวัตถุและฐานข้อมูล

การเขียนโปรแกรมเชิงวัตถุและระบบจัดการฐานข้อมูลเชิงสัมพันธ์ (Relational Database Management Systems) ได้ถูกใช้งานร่วมกันอย่างแพร่หลายในปัจจุบัน แต่เนื่องจากฐานข้อมูลเชิงสัมพันธ์ไม่สามารถเก็บข้อมูลเชิงวัตถุได้โดยตรง จึงมีความจำเป็นที่จะต้องเชื่อมต่อเทคโนโลยีทั้งสองเข้าด้วยกัน การแก้ปัญหาสองแบบที่ได้รับความนิยมแพร่หลายคือการใช้ตัวส่งระหว่างโมเดลเชิงวัตถุและเชิงสัมพันธ์ (Object-Relational Mapping: ORM)

อีกวิธีการคือการใช้งานระบบจัดการฐานข้อมูลเชิงวัตถุ (Object-Relational Database Management Systems) แทนที่ระบบจัดการฐานข้อมูลเชิงสัมพันธ์ แต่วิธีการนี้ก็ยังไม่ได้รับความนิยมมากนัก

[แก้] โปรแกรมเชิงวัตถุและการเทียบเคียงกับโลกของความเป็นจริง

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

ปัจจุบันวิธีการมาตรฐานที่ใช้ในการเทียบเคียงกับโลกของความเป็นจริง ตามแนวทางของคณิตศาสตร์คือ Circle-ellipse problem

[แก้] ตัวอย่างภาษาที่สนับสนุนการเขียนโปรแกรมเชิงวัตถุ

[แก้] ดูเพิ่ม

[แก้] แหล่งข้อมูลอื่น


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