การเขียน program เชิงวัตถุ (Object-Oriented Programming: OOP)
การเขียน program แบบ OOP มีลักษณะ 5 ประการ
1) ทุกสิ่งทุกอย่างคือ object
ในแง่หนึ่งเราก็อาจตีความว่า object เป็นตัวแปรที่มีความพิเศษอยู่ในตัวเอง คือ นอกจากเก็บค่าต่าง ๆ ได้แล้ว เรายังสามารถที่จะสั่ง (request) ให้ object ทำงาน (operation) ต่าง ๆ ที่เกี่ยวกับตัวมันเองด้วย
2) Program ประกอบไปด้วย object ที่ต่างก็ส่งข้อความ (message) บอกให้กันและกันว่าต้องทำอะไร
การส่ง message ก็คือการส่ง request หรือการเรียกใช้ function ของ object นั้น ๆ
3) Object แต่ละตัวมีหน่วยความจำที่เต็มไปด้วย object อื่น ๆเราสร้าง object จาก object ตัวอื่นที่มีอยู่แล้ว
4) Object มี รูปแบบ หรือ ชนิด ของตัวเอง (type/class)
5) Object ที่ต้นตอมาจาก type แบบเดียวกันสามารถที่จะรับข้อมูลซึ่งกันและกันได้
5.1.1 Object
– Object คือ สิ่งที่มีคุณสมบัติและพฤติกรรมตามที่กําหนดไว้ในคลาส
– ออบเจ็กต์(object) แบ่งได้เป็นสองประเภท คือ
1) สิ่งที่เป็นรูปธรรม (tangible) คือสิ่งที่เป็นวัตถุและจับต้องได้อาทิเช่น นักศึกษา ปากกา และรถ เป็นต้น
2) สิ่งที่เป็นนามธรรม (intangible) คือสิ่งที่ไม่สามารถจับต้องได้อาทิเช่น คะแนนรายชื่อวิชา การลงทะเบียน การฝาก-ถอนเงิน และตารางเที่ยวบิน เป็นต้น
Object ประกอบไปด้วย
1) คุณลักษณะ (attribute) หรือข้อมูล (data)
2) เมธอด (method) หรือพฤติกรรม (behavior)
3) คุณลักษณะ (attribute) หรือข้อมูล (data) ข้อมูลของ Object แต่ละ Object อาจมีข้อมูลที่แตกต่างกัน
4) เมธอด (method) หรือพฤติกรรม (behavior) สิ่งที่ Object สามารถกระทำได้
ตัวอย่าง ออบเจ็กต์ คือ
– นักศึกษา
ประกอบไปด้วยคุณลักษณะเช่น รหัส ชื่อ และเกรดเฉลี่ย
มีเมธอดเช่น ลงทะเบียน การสอบ และการเรียน
– รถยนต์
ประกอบไปด้วยคุณลักษณะเช่น ยี่ห้อ รุ่น และสี
มีเมธอดเช่น เคลื่อนที่ หยุดและเลี้ยว
– สุนัข
ประกอบไปด้วยคุณลักษณะเช่น ชื่อ พันธุ์ และสี
มีเมธอดเช่น เห่า คลาน และกระดิกหาง
5.1.2 Class
– Class หมายถึงโครงสร้างของ object โดย class เป็นตัวกำหนดว่า object นั้นจะมี data หรือคุณลักษณะอะไร บ้าง และมี method อะไรบ้าง เปรียบเสมือนพิมพ์เขียว (template) ของออปเจ็ค
– ออปเจ็คที่ถูกสร้างมาจากคลาส (class) บางครั้งเรียกว่าเป็น instance ของคลาส
คลาสหนึ่งคลาสสามารถสร้างออปเจ็คได้หลายออปเจ็ค
– Object นั้นจะถูกสร้างขึ้นตามกระบวนการทำงานของ JVM โดยที่นักพัฒนาจะต้องนิยาม Class ที่ต้องการให้กับ JVM
ตัวอย่าง คลาส เช่น
คลาส Student อาจสร้างออปเจ็ค s1,s2 หรือ s3 ซึ่งเป็นออปเจ็คของคลาส Student
5.1.3 คุณลักษณะเด่นของการเขียนโปรแกรมเชิงวัตถุ
1) การห่อหุ้ม (Encapsulation)
หมายถึงการจะเรียกใช้คุณลักษณะของออปเจ็ค จะทำได้โดยการเรียกผ่านเมธอดเท่านั้น
หลักการของการห่อหุ้ม คือการกำหนดให้คุณลักษณะของออปเจ็คมีคุณสมบัติเป็น private และกำหนดให้เมธอดมีคุณสมบัติเป็น public โดยมีเมธอด get / set ไว้เพื่อเข้าถึง data นั้นๆ จะเรียกว่า class นั้นๆ เป็น Full Encapsulation class
ข้อดีของการห่อหุ้ม (Encapsulation)
– Flexibility
มีความยืดหยุ่นสูง การใช้งาน method ใน OOP นั้นมีความยืดหยุ่นสูงกว่าการใช้งาน Data Fields ใน Object โดยตรงๆ
– Maintainability
การดูแลรักษาง่าย เพราะหากมีการเปลี่ยนแปลงภายใน Object ใดๆ หากว่าส่วนติดต่อกับ Object อื่นยังคงเดิมแล้ว ก็ย่อมไม่ส่งผลกระทบต่องานทั้งระบบ
– Information Hiding
การซ่อนเร้นข้อมูลทำให้ออปเจ็คสามารถติดต่อกับออปเจ็คภายนอกผ่านเมธอดที่เป็นส่วนของ interface เท่านั้น
– Modularity
การพัฒนาโปรแกรมเชิงวัตถุ จะสามารถกำหนดให้ออปเจ็คแต่ละออปเจ็คมีความเป็นอิสระต่อกัน
2) การสืบทอด (Inheritance)
หมายถึงการนิยามคลาสใหม่จากคลาสที่มีอยู่แล้วโดยคลาสใหม่สามารถที่จะนำคุณลักษณะและเมธอดของคลาสเดิมมาใช้ได้
คือ Class หนึ่งๆสามารถสืบทอดคุณสมบัติบางประการจาก Class อื่น แล้วเพิ่มคุณสมบัติเฉพาะของ Class นั้นเข้าไป
– Class ที่ได้รับการสืบทอดคุณสมบัติเรียกว่า Subclasses
– Class ที่เป็นต้นแบบเรียกว่า Superclass
เป็นการช่วยให้ไม่ต้องพัฒนา ส่วนที่ซ้ำหลายๆรอบ (Reusable)
Class หนึ่งๆจะมี Superclass ได้เพียง Class เดียวเท่านั้น (Single Inheritance)
ในภาษาจาวา จะใช้คีย์เวิร์ด extends เพื่อระบุการสืบทอด
3) การมีได้หลายรูปแบบ (Polymorphism)
หมายถึง การที่สามารถตอบสนองต่อข่าวสาร (เมธอด) เดียวกันด้วยวิธีการที่ต่างกัน และสามารถกำหนดออปเจ็คได้หลายรูปแบบ
– Overridden method
– Dynamic Binding