Please enable JavaScript.
Coggle requires JavaScript to display documents.
Object-Oriented Programming (ตัวอย่างภาษาที่สนับสนุนการเขียนโปรแกรมเชิงวัต…
Object-Oriented Programming
OOP ก็ใช้วิธีเลียนแบบวิธีคิดของวัตถุในชีวิตจริง โดยระบุ “สถานะ” และ “พฤติกรรม” สำหรับวัตถุของซอฟต์แวร์
โดยวัตถุ (Object) จะเก็บสถานะใน ฟิล์ด (field) (ตัวแปลในบางภาษา) และเปิดเผยพฤติกรรมผ่าน เมธอด (method) (ฟังก์ชันในบางภาษา) โดยที่ method จะดำเนินการกับสถานะภายในของ object นั้น และเป็นกลไกหลักในการสื่อสารระหว่าง object กับ object ซึ่งจะมีการซ้อนสถานะภายใน และการติดต่อกับ object ทั้งหมดจำเป็นต้องกระทำผ่าน method ของ object นั้น
ซึ่ง OOP จะมีหลักการที่เป็นเสาหลักอยู่ 4 ข้อ ดังนี้
Abstraction
เป็นหลักการนามธรรมของ object ซึ่งเป็นกระบวนการในการเอาส่วน concrete ของ class หรือส่วนที่มีการ implementation ของ object ออกมา โดยรักษาลักษณะร่วมกัน หรือคุณลักษณะให้กับ concreate object ต่างๆ ซึ่งจะเป็นการใช้หลักการอื่นๆ ของ OOP ในการทำให้เกิด abstaction โดยเฉพาะอย่างยิ่ง Polymorphism และในบางภาษาจะมี abstract/interface keyword มาให้เพื่อระบุ class ที่ต้องการให้มีคุณสมบัติ abstraction
Encapsulation
เป็นหลักการการห่อหุ้มสถานะหรือข้อมูลของ object จากภายนอกให้ไม่สามารถเข้าถึงสถานะของ object ได้ ดั้งนั้นการเข้าถึงจะต้องกระทำผ่านทาง method เท่านั้น (เรียกว่า setter/getter) ซึ่งการซ้อนข้อมูลก็มีหลายระดับ private จำกัดการเข้าถึงอย่างสิ้นเชิง, protected จำกัดการเข้าถึงจากภายนอกแต่ class ลูกสามารถเข้าถึงได้ หรือ public ไม่จำกัดดารเข้าถึงเลยภายนอกสามารถเข้าถึงได้ เป็นต้น บางภาษาอาจจะมีมากกว่านี้
Inheritance
เป็นหลักการสืบทอดคุณสมบัติของ object ซึ่ง class (subclass) ที่สืบทอดจาก class อื่น (superclass) จะได้รับสถานะและพฤติกรรมของ class นั้นทั้งหมด และยังสามารถเปลี่ยนพฤติกรรมของบาง method (overriding) ที่ได้สืบทอดมาได้ อีกทั้งสามารถขยายความสามารถเพิ่มเติมได้อีก ทำให้เราสามารถนำโค้ดที่มีอยู่แล้วมาใช้ใหม่ได้ (code reuse)
Polymorphism
เป็นหลักการพ้องรูปหรือการมีหลายรูปของ object คล้ายๆ กับหลักการของชีววิทยาที่สิ่งมีชีวิตสามารถมีหลายรูปแบบ หรือหลายสายพันธุ์ (เช่น มนุษย์ มี มองโกลลอยด์, คอเคซอยด์ หรือนิกรอยด์ เป็นตั้น ซึ่งทั้งหมดก็เป็น มนุษย์ เหมือนกัน) โดย subclass ของ class สามารถกำหนดพฤติกรรมที่เป็นเอกลักษณ์ของตนเองได้ และยังแชร์บางส่วนของฟังก์ชันการทำงานเดียวกันกับ superclass
อาลัน เคย์ (Alan Kay) ได้เสนอกฎ 5 ข้อ ที่เป็นแนวทางของภาษาคอมพิวเตอร์เชิงวัตถุ หรือที่เรียกว่า Object-Oriented Programming (OOP) ไว้ดังนี้
ทุก ๆ สิ่งเป็นวัตถุ (Everything is an Object)
โปรแกรม ก็คือ กลุ่มของวัตถุที่ส่งข่าวสารบอกกันและกันให้ทำงาน (A Program is a Bunch of Object Telling Each Other What to do by Sending Messages)
ในวัตถุแต่ละวัตถุจะต้องมีหน่วยความจำและประกอบไปด้วยวัตถุอื่น ๆ (Each Object has Its Own Memory Made Up of Other Objects)
วัตถุทุกชนิดจะต้องจัดอยู่ในประเภทใดประเภทหนึ่ง (Every Object has a Type)
วัตถุที่จัดอยู่ในประเภทเดียวกันย่อมได้รับข่าวสารเสมือนกัน (All Object of a Particular Type Can Receive the Same Messages)
แนวคิดแบบ OOP
OOP ก็คือ “ธรรมชาติของวัตถุ” หมายความว่า OOP จะมองสิ่งแต่ละสิ่งถือเป็น “วัตถุชิ้นหนึ่ง” (Object) มันจะมีสีแดงหรือสีเขียว ยาวหรือสั้น มันก็คือวัตถุชิ้นหนึ่งเหมือนกัน และเราสามารถกำหนดประเภทหรือคลาสให้กับวัตถุเหล่านั้นได้
นอกจากนี้ เมื่อ OOP มองทุกสิ่งถือเป็นวัตถุชิ้นหนึ่งแล้ว ยังสามารถคิดต่อไปอีกว่า “วัตถุแต่ละอย่างนั้น ต่างก็มีลักษณะและวิธีการใช้งานเป็นของตัวเอง” หมายความว่า วัตถุแต่ละชนิดหรือแต่ละชิ้นต่างก็มีรูปร่าง ลักษณะ และการใช้งาน (การกระทำ) ที่แตกต่างกันออกไป เราจะเรียกคุณลักษณะของวัตถุว่า แอตทริบิวต์ (Attribute) และจะเรียกวิธีการใช้งานวัตถุว่า เมธทอด
ตัวอย่างเช่น “ดินสอเป็นวัตถุที่มีลักษณะเรียวยาว ภายในเป็นไส้ถ่านใช้สำหรับเขียน การใช้ดินสอทำได้โดยใช้มือจับและเขียนลงบนวัสดุรองรับ” จากข้อความข้างต้น สามารถจับใจความได้ว่า คุณลักษณะของวัตถุ (Attribute) ก็คือ “ยาวเรียว ภายในเป็นไส้ถ่าน” ส่วนการใช้งาน (Method) ก็คือ “ใช้มือจับและเขียนลงบนวัสดุรองรับ”
object: วัตถุที่สร้างจากแม่พิมพ์ มีได้หลายชิ้น แต่ละชิ้นไม่ต้องเหมือนกัน
หมายถึง "วัตถุ" ที่สร้างขึ้นมาจากคลาสต้นแบบ ซึ่งสามารถเอาไปใช้งานได้จริงๆ
วิธีการคิดแบบการเขียนโปรแกรมเชิงกระบวนการ
เมื่อมีการหยอดเหรียญเข้าตู้
ตรวจสอบจำนวนน้ำกระป๋องที่มีอยู่ในตู้
รับผลการเลือกชนิดน้ำ
ส่งน้ำที่เลือกออกมาจากช่อง
จัดเก็บเงินเข้าระบบ
หากมีเงินทอน ให้ทอนเงินที่เหลือ ที่ช่องรับเงินทอน
ตู้ขายเครื่องดื่มอัตโนมัติ ประกอบด้วยส่วนประกอบต่างๆได้แก่ หน่วยตรวจสอบและจัดการเรื่องเงิน หน่วยจัดการเครื่องดื่ม หน่วยแสดงผลและรอรับคำสั่ง
หน่วยตรวจสอบและจัดการเรื่องเงิน มีข้อมูลเกี่ยวกับเงินที่ได้รับ และเงินที่มีอยู่ในระบบ สามารถรับและตรวจสอบเงินที่หยอดเข้ามาได้ และทอนเงินได้
หน่วยจัดการเครื่องดื่ม มีข้อมูลชนิดของเครื่องดื่ม จำนวนเครื่องดื่ม สามารถจัดเตรียมชนิดเครื่องดื่มที่พอกับเงินที่หยอด และสามารถจ่ายเครื่องดื่มออกมาจากตู้ได้
หน่วยแสดงผลและรอรับคำสั่ง มีหน้าที่รอรับคำสั่ง และแสดงผลเงินที่หยอดเข้ามา
แนวทางการออกแบบและแก้ปัญหา
ดีไซน์แพตเทิร์น - แบบแผนและแนวทางการออกแบบ ดีไซน์
ในการออกแบบและการพัฒนาโปรแกรมเชิงวัตถุ ได้มีการรวบรวมบันทึกวิธีการแก้ปัญหาที่ใช้ได้ผลสำหรับปัญหาที่เกิดขึ้นซ้ำๆ เสมอๆ วิธีการแก้ไขเหล่านี้สามารถนำมาใช้ได้บ่อยๆ ในสถานการณ์ที่หลากหลาย บันทึกรวบรวมนี้มีชื่อเรียกเฉพาะว่า ดีไซน์แพตเทิร์น (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)
โปรแกรมเชิงวัตถุและการเทียบเคียงกับโลกของความเป็นจริง
การเขียนโปรแกรมเชิงวัตถุสามารถนำมาใช้จำลองการทำงานตามโลกของความเป็นจริงได้ แต่ไม่ได้เป็นที่นิยมนักเนื่องจากมีนักวิชาการจำนวนหนึ่งที่ไม่เห็นด้วยและมองว่าไม่ใช่วิธีการที่ถูกต้อง
ปัจจุบันวิธีการมาตรฐานที่ใช้ในการเทียบเคียงกับโลกของความเป็นจริง ตามแนวทางของคณิตศาสตร์คือ Circle-ellipse problem ซึ่งก็ถูกต้องบางส่วน แต่แนวคิดการสร้างยังคงต้องให้สอดคล้องกับความเป็นจริงของพื้นฐาน
ตัวอย่างภาษาที่สนับสนุนการเขียนโปรแกรมเชิงวัตถุ
ABAP
Ada 95
C#
C++
Common Lisp Object System
Delphi++
Eiffel
Fortran 2003
JADE
Java
Javascript
Modula-3
Nice
Oberon
Objective-C
Objective Modula-2
OCaml
Object Pascal
Perl
PHP
Python
REALbasic
Ruby
Simula
Sleep
Smalltalk
Specman
SystemVerilog
UnrealScript
Visual Basic
Visual Basic.NET
Visual C#.NET
Visual FoxPro