การเขียนโปรแกรมเชิงวัตถุ
ในบทนี้ เราจะแนะนำให้คุณรู้จักกับการเขียนโปรแกรมเชิงวัตถุ (Object-oriented programming, OOP) ในภาษา Java ซึ่งเป็นรูปแบบในการเขียนโปรแกรมที่สำคัญในปัจจุบัน หรือเป็นการพัฒนาจากการเขียนโปรแกรมแบบเดิมที่เราคุณเคยกันคือ Procedural programming และเราจะแนะนำให้คุณรู้จักกับสมบัติหลักที่สำคัญในการเขียนโปรแกรมเชิงวัตถุในภาษา Java เช่น Inheritance Encapsulation และ Polymorphism
การเขียนโปรแกรมเชิงวัตถุ คืออะไร
การเขียนโปรแกรมเชิงวัตถุ เป็นรูปแบบการเขียนโปรแกรมที่ใช้แนวคิดของออบเจ็ค ซึ่งในออบเจ็คนั้นจะประกอบไปด้วยสมาชิก 2 แบบ คือ ตัวแปรซึ่งเป็นข้อมูลหรือกำหนดคุณลักษณะของออบเจ็ค และเมธอด เป็นฟังก์ชันการทำงานที่อ็อบเจ็คสามารถทำได้ ในการสร้างออบเจ็คนั้นจะอยู่ภายใต้การกำหนดของคลาส โดยคลาสคือการกำหนดว่าออบเจ็คจะมีสมาชิกอะไรบ้าง และกำหนดการทำงานของเมธอด ดังนั้นออบเจ็คจะสร้างจากคลาส เราเรียกออบเจ็คว่า instances ของคลาส
ภาษาต่างๆ เป็นจำนวนมากสนับสนุนการเขียนโปรแกรมเชิงวัตถุ เช่น Java C++C# Python PHP Ruby และภาษาอื่นๆ ซึ่ง Java ถือว่าเป็นภาษาของออบเจ็คอย่างเต็มรูปแบบ การเขียนโปรแกรมเชิงวัตถุนั้นเป็นการพัฒนารูปแบบของการเขียนโปรแกรมไปอีกขั้นจากการเขียนโปรแกรมแบบเดิมที่เราเคยเขียนคือ Procedural programming
คุณสมบัติของ OOP
การเขียนโปรแกรมเชิงวัตถุ มีข้อดีและข้อได้เปรียบจากการเขียนโปรแกรมแบบเดิมมากมาย ซึ่งสิ่งที่สำคัญที่สุดของมันคือการนำโค้ดของโปรแกรมกลับมาใช้ใหม่ และคุณสมบัติอื่นๆ ดังนี้
- Code reuse: การนำโค้ดกลับมาใช้ใหม่ ได้อย่างมีประสิทธิภาพ
- Maintenance: ง่ายต่อการบำรุงรักษาและปรับปรุง แต่ละคลาสจะมีขอบเขตการทำงานและเมธอดของมันเอง
- Classes: คลาสที่สร้างขึ้นนั้น สามารถนำไปสร้างเป็นออบเจ็คได้ไม่จำกัด และแต่ละออบเจ็คมีสมาชิกเป็นของมันเอง
- Inheritance: คุณสมบัติการสืบทอด คลาสสามารถสืบทอดจากคลาสอื่นได้ ซึ่งเป็นการ reuse code และพัฒนาต่อเดิมความสามารถจากคลาสเดิมที่มีอยู่
- Polymorphism: คุณสมบัติของออบเจ็คที่หลากหลายรูปแบบ ซึ่งสามารถจัดการได้จาก Base คลาสของมัน
- Encapsulation: เป็นคุณสมบัติการห่อหุ้ม เป็นแนวคิดแบบนามธรรมที่ว่าคุณไม่จำเป็นต้องรู้ว่าเมธอดหรือในคลาสนั้นทำงานยังไง แต่มันสามารถทำงานได้สำเร็จและให้ผลลัพธ์แก่คุณได้
- Abstraction: คือการอธิบายการทำงานของคลาสและเมธอดในแบบนามธรรม เพื่อนำไปใช้สำหรับออบเจ็คที่มีการทำงานแตกต่างกัน เช่น เราบอกว่าสัตว์สามารถเคลื่อนที่ การเคลื่อนที่คือการบอกอย่างเป็นนามธรรม เพราะวา่สัตว์แต่ละตัวมีวิธีการเคลื่อนที่ที่แตกต่างกัน เช่น สุนัขจะเดิน นกจะบิน ส่วนเต่าจะคลาน เป็นต้น
ข้างบนนั้นเป็นคุณสมบัติของการเขียนโปรแกรมแบบออบเจ็ค ที่มีความสำคัญและมันใช้กับการเขียนโปรแกรมในขั้นสูง อย่างไรก็ตามในบทนี้ คุณจะได้เรียนรู้เกี่ยวกับมันทั้งหมด
คลาสและออบเจ็ค
ส่วนประกอบของการเขียนโปรแกรมเชิงวัตถุที่สำคัญคือ คลาสและออบเจ็ค ในตอนแรกเราต้องสร้างหรือประกาศคลาสขึ้นมา ซึ่งประกอบไปด้วยตัวแปร และเมธอดในการทำงาน หลังจากนั้นเราจะนำไปสร้างออบเจ็ค การสร้างคลาสก็เหมือนการออกแบบรูปแบบของวัตุอย่างหนึ่งที่เราจะสร้างขึ้นมา เช่น คุณจะสร้างรถขึ้นมาเราก็ต้องเขียนแบบ เราเรียกสิ่งนี้ว่าคลาส และเรานำไปสร้างรถ ซึ่งก็คือออบเจ็ค
ในตัวอย่างเป็นรูปที่แสดงให้เห็นถึงรายละเอียดของรถที่นำมาสร้างเป็นคลาส จะเห็นได้ว่าจะมี attribute เมธอดเพื่ออธิบายเกี่ยวกับรถ ซึ่งรถก็จะมีคุณสมบัติของมัน เช่น จำนวนเชื้อเพลิง ความเร็วสูงสุด และอื่น และส่วนของการทำงาน จะเป็นการเติมน้ำมัน การเพิ่มและลดความเร็ว การขับเคลื่อนรถออกไป และสตาร์ทหรือหยุดเครื่องยนต์ เป็นต้น ซึ่งสิ่งเหล่านี้จะถูกกำหนดไว้ในคลาส
มาดูตัวอย่างของการประกาศคลาสในภาษา Java เราจะประกาศคลาส Car
ซึ่งจะประกอบไปด้วยคุณสมบัติ และเมธอดการทำงาน
public class Car {
public float fuel;
public int maxSpeed;
public int currentSpeed = 0;
public String color;
public void reFuel() {
fuel = 100;
}
public float getFuel() {
return fuel;
}
private void setSpeed(int speed) {
currentSpeed = speed;
}
public void drive() {
setSpeed(currentSpeed + 1);
if(currentSpeed >= maxSpeed) {
currentSpeed = maxSpeed;
}
}
}
ในตัวอย่าง เป็นรูปแบบของการประกาศคลาสในภาษา ๋Java ที่มีชื่ของคลาสคือ Car
และภายในคลาสจะประกอบไปด้วยตัวแปร สำหรับเก็บค่าคุณสมบัติต่างของรถยนต์ และเมธอดเป็นฟังก์การทำงานที่รถยนต์สามารถทำได้ มีเพียงแค่คลาสนั้นโปรแกรมยังไม่สามารถทำได้ ดังนั้นเราจึงต้องนำคลาสนี้ไปสร้างออบเจ็คก่อน ซึ่งคุณจะได้เรียนเกี่ยวกับคลาสและออบเจ็คในบทต่อไป
ในบทนี้ เราได้แนะนำให้คุณรู้จักกับการเขียนโปรแกรมเชิงวัตถุในภาษา Java และคุณสมบัติที่สำคัญของ OOP รวมถึงรูปแบบของการประกาศคลาสสำหรับใช้ในการสร้างออบเจ็ค ในบทต่อไป คุณจะได้เรียนรู้เกี่ยวกับการสร้างคลาสในภาษา Java และนำคลาสไปสร้างออบเจ็ค ซึ่งจะเป็นการเริ่มเข้าสู่เนื้อหาของการเขียนโปรแกรมเชิงวัตถุ