วันเสาร์ที่ 20 มิถุนายน พ.ศ. 2558

ชวนคุยจาวา part 4 : คำว่า OOP

สิ่งที่อาจารย์ผมมักบอก จาวานั้นต้องเข้าใจความคิด OOP

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

1) คลาส ก็คือ นิยาม การนิยามมีสองแบบ เขานิยามให้ กับ เรานิยามเอง, เขานิยามให้ก็คือคลาสไลบรารี่จัดเตรียมมาให้ ภาษาจาวาจัดเตรียมให้ใช้ ส่วนเรานิยามเองคือเราเขียนเอง วางจุดมุ่งหมายและออกแบบเอง

2) คลาส ก็คือ ไทป์ หรือก็คือชนิดของตัวแปรตามการนิยามข้างต้น ภาษาจาวาประกอบไปด้วยไทป์มากมาย คุ้นๆเช่น int double float String วันนี้สร้างเอง เช่น Dog Student เป็นต้น

3) คลาส ก็คือ พิมพ์เขียว แม่แบบของวัตถุหรือแม่แบบของออบเจ็กต์นั่นแหละ มีคลาสจึงสร้างออบเจ็กต์ได้ และสร้างผ่านตัวสร้างที่เรียกว่า คอนสตรัคเตอร์

4) คอนสตรัคเตอร์ มีหน้าที่จัดเตรียมวัตถุหรือออบเจ็กต์ให้พร้อมใช้งานอย่างสมบูรณ์ที่สุด เพื่อที่หลังจากนี้ ชีวิตของพวกมัน (วัตถุหรือออบเจ็กต์เหล่านั้น) จะต้องดำเนินไปจนกว่าจะตาย (เซตค่าให้เป็น null)

5) Encapsulation คือความคิดเพื่อจัดการการเข้าถึงข้อมูล มักใช้ควบคู่กับความคิดในการซ่อนข้อมูล (information hiding) เมื่อเกิดการซ่อนข้อมูลเนื่องจากข้อมูลนั้นอ่อนไหวหรือเป็นสิ่งสำคัญ การเข้าถึงข้อมูลก็จะถูกจำกัดไว้เพียงในคลาส ทว่ายังมีข้อมูลบางอย่างที่จำเป็นต้องถูกเรียกใช้ภายนอกคลาสหรือแม้แต่ส่งต่อไปยังคลาสลูก จึงต้องมีวิธีในการเข้าใช้หรือเข้าถึงข้อมูลนั้นตามมา (encapsulation) สำหรับภาษาจาวา ระดับการเข้าใช้หรือเข้าถึงข้อมูลดังกล่าวได้แก่ private, protected, package (default) และ public ครับ

6) Inheritance คือแนวคิดเพื่อการขยาย (extends : เติม s เพราะประธานเป็นเอกพจน์บุรุษที่สาม) ให้มีคุณสมบัติและความสามารถตั้งแต่อดีตจนถึงปัจจุบัน เป็นแนวคิดที่ทำให้เกิดกระบวนการค้นหา (pursuance) ตามหาสิ่งที่เป็นของผู้ถ่ายทอด (มักเรียกคลาสพ่อหรือคลาสแม่) ตลอดจนคลาสบรรพบุรุษที่ได้ขยายมาทั้งหมด ผมชอบตัวอย่างนี้มาก เมื่อเทียบว่าการ inheritance คือการถ่ายถอดหรือสืบทอดแบบลูกได้รับจากพ่อแม่ นั่นหมายความว่าพ่อแม่คลาสกระทั่งปู่ย่าตายายคลาสสามารถฟื้นคืนชีพได้ เพียงแค่มีคลาสรุ่นหลานเกิดขึ้น (ถูก new) ประดาผู้ส่งต่อทั้งหลายจะถูกเรียกให้มีชีวิตด้วยตลอดสายการสืบทอดนั้นๆ พอเข้าใจแล้วสยองมาก

7) Polymorphism คือแนวคิดให้คลาสมีรูปแบบ (form) หรือขั้นตอน (stage) อันหลากหลายไม่ว่าจะในทางสืบทอด (extends) หรือไม่ก็ตาม
- ในทางสืบทอด เช่น การ override เมธอดของคลาสพ่อแม่ การระบุคุณลักษณะทั่วไปหรือที่เรียกกันว่า interface เป็นต้น
- ส่วนในทางไม่สืบทอด เช่น การทำ method overloading ให้รับพารามิเตอร์ต่างชนิด ต่างจำนวน เพื่อทำงานอย่างเดียวกัน, การ override เมธอดของคลาสเพื่อให้เกิดการทำงานที่ต่างจากเดิมโดยไม่มีกระบวนการสืบทอด เป็นต้น

8) Interface หรือคุณลักษณะทั่วไปที่จำกัดบทบาทของคลาส หรือใช้นิยามบทบาทของคลาสให้สามารถทำสิ่งใดๆได้บ้าง เพื่อให้ไทป์มีความยืดหยุ่น ทำให้เกิดกระบวนการค้นหาหรือตามหาสมบัติแท้จริงของออบเจ็กต์ในขณะ run time ได้ ยกตัวอย่างง่ายๆ ให้ผู้ชายฉี่ได้ ผู้หญิงฉี่ได้ เมื่อคลาสผู้ชายรับเอา interface ไปฉี่ ผู้ชายก็จะไปยืนฉี่ เมื่อคลาสผู้หญิงรับเอา interface ไปฉี่ ผู้หญิงก็จะไปนั่งฉี่ เป็นต้น (ตัวอย่างนี้ผมคิดเอง ขออภัยที่ต่ำทราม แต่คิดว่าคงเห็นภาพกันชัดเจน คือฉี่ได้ทั้งผู้ชายและผู้หญิง แต่จะฉี่อย่างไรก็ขึ้นอยู่กับคลาสนั้นๆจะเลือกกระทำ)

>> จะเห็นว่าเรื่องราวของออบเจ็กต์มี เกิด (constructor) มีใช้ชีวิต (พฤติกรรมหรือบริการ) และตาย (สิ้นอายุโดยขอบเขตใดๆหรือถูกเซตค่าเป็น null) และเป็นเรื่องราวที่น่าสนุก เสียดายก็แต่เวลาศึกษาเรื่องพวกนี้กลับนำไปใช้ในเรื่องอื่น ความเข้าใจต้องได้รับการต่อยอด ความต่อเนื่องจึงเป็นสิ่งสำคัญที่ขาดไม่ได้ ขอบคุณมากครับพี่ ขอบคุณสาวสวยที่มาเรียนด้วยกัน ขอบคุณครับ

ไม่มีความคิดเห็น:

แสดงความคิดเห็น