แนวคิด Object-Oriented ในแบบที่พยายามอธิบายให้ง่ายแล้ว …

Object-Oriented Concept

Object-Oriented คือแนวคิดในการวิเคราะห์ทุกสรรพสิ่งในโลกจริง(real-world) นี้ทั้งมองเห็นจับต้องได้(tangible) และมองไม่เห็นจับต้องไม่ได้(intangible) แล้วแสดงมันออกมาเป็น objects ที่มีโครงสร้างที่ประกอบไปด้วยสถานะ(state) หรือลักษณะเฉพาะ(attribute), ความสัมพันธ์(association หรือ dependency หรือ member) และพฤติกรรม(service หรือ behavior หรือ method) ที่เหมือนหรือใกล้เคียงทุกสรรพสิ่งในโลกจริงมากที่สุด หรือได้มากเท่าที่อยู่ในกรอบความสนใจ(domains)ของเราอยู่ในขณะวิเคราะห์โลกจริงนั้นอยู่ (ผมจะเรียก ทั้งสถานะ, ความสัมพันธ์ และพฤติกรรม รวมกันว่า คุณสมบัติ(feature) ของ object)

และจากกลุ่มของ objects ที่เป็นตัวแทน(instance)ของทุกสรรพสิ่งในโลกจริงนั้น Object-Oriented ยังมีแนวคิดของการจัดกลุ่ม(classification) objects ทั้งหมด โดยพิจารณาจากคุณสมบัติ(feature)คล้ายๆกัน ไว้ในกลุ่มเดียวกัน แล้วนิยามไว้เป็น metastructure ของ objects กลุ่มนี้ที่เรียกว่า Class ดังนั้นเราจึงกล่าวได้ว่า objects กลุ่มนี้เป็น Class ชนิดใดได้ เราจึงใช้ Class เป็นโครงสร้างเพื่ออธิบาย objects ได้นั่นเอง

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

… แบบจำลองใดๆที่ประยุกต์ใช้แนวคิดแบบ Object-Oriented แล้วนั้นแบบจำลองนั้นก็สามารถที่จะแสดงโครงสร้างของทุกสรรพสิ่งบนโลกนี้ได้ด้วยเช่นกัน…” แบบจำลองใดๆ อย่างเช่น UML Diagram

ดังนั้นถ้ากล่าวแบบนี้ก็จะได้อีกการประยุกต์หนึ่ง ด้วยเช่นกัน ก็คือ

… ภาษา programming ใดๆที่ประยุกต์ใช้แนวคิดแบบ Object-Oriented แล้วนั้นภาษานั้นก็สามารถที่จะแสดงโครงสร้างของทุกสรรพสิ่งบนโลกนี้ได้ด้วยเช่นกัน … ” ภาษา programming ใดๆ อย่างเช่น ภาษา C++, Java, VB.NET/C#/F#, Ruby, Python, Clojure

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

1. คุณสมบัติการสืบทอดหรือขยายต่อจากสิ่งต้นแบบ หรือบรรพบุรุษ(inheritance) ซึ่ง objects เป็นตัวแทนของโลกจริงทุกสรรพสิ่ง ดังนั้นสิ่งมีชีวิต หรือไม่มีชีวิตก็ต้องมีวิวัฒนาการเช่นกันหมด

2. คุณสมบัติการปกป้อง และทำหน้าที่ของตนเอง(encapsulation) ปกป้องตนเองบางอย่างไว้เป็นความลับเพื่อความปลอดภัยจากสิ่งอื่น หรือเปิดเผยให้บริการ หรือทำหน้าที่บางอย่าง ที่มันมีความสัมพันธ์กับสิ่งอื่นตามกฏที่มันถูกกำหนดไว้ตามธรรมชาติที่เป็นจริง หรือกล่าวได้ว่า objects มันรู้ว่ามันมีสังคมอยู่ไม่ได้อยู่โดดเดี่ยว เหมือนกับสิ่งใดๆในโลกจริงที่มันเป็นอยู่ อยากจะเปิดเผย หรืออยากจะปกปิดเพื่อจุดประสงค์อะไรก็ทำได้หมด มันมีหน้าที่ของมัน และมันอยู่ภายใต้กฏตามธรรมชาติเหมือนกันหมด

3. คุณสมบัติของการแสดงพฤติกรรมตามลักษณะเฉพาะตัวที่หลากหลาย(polymorphism) คือจากทุกสรรพสิ่งในโลกจริงทั้งๆที่เป็นสิ่ง(class)เดียวกันก็ตาม มันจะแสดงพฤติกรรมได้หลายลักษณะทั้งนี้ขึ้นอยู่กับสภาวะแวดล้อม มีเหตุมีผลในการแสดงพฤติกรรมเฉพาะของมัน ที่ทำให้มันมีลักษณะเฉพาะตัวที่แตกต่างกัน จึงทำให้มันมีพฤติกรรมที่แตกต่างกันออกไปได้หลากหลาย เช่น ถ้าเราแบ่งคนออกเป็น 2 ประเภทตามลักษณะเฉพาะตัวบางประการแต่ก็ยังเป็นคนเหมือนกัน ได้เป็นคนดี กับคนชั่ว เมื่อให้เขาแสดงพฤติกรรมอย่าง เก็บเงินได้ เหมือนกันคุณคิดว่าผลลัพย์ที่ออกมาจาก คนดี กับคนชั่ว จะต่างกันมั้ย? แน่นอนโดยส่วนใหญ่ย่อมต่างกัน แต่คนดี กับคนชั่วแสดงพฤติกรรม เก็บเงินได้ เหมือนกัน ทำไมถึงได้ผลลัพย์ต่างกันเพราะว่า logic ข้างใน method  เก็บเงินได้ ของคนดีจะส่งคืนเจ้าของดังนั้นเงินในกระเป๋าเขาจะไม่เพิ่มขึ้น แต่ logic ข้างใน method  เก็บเงินได้ ของคนชั่วนั้นจะบวกเงินที่เก็บได้ใส่กระเป๋าตนเอง ดังนั้นเงินในกระเป๋าเขาจึงเพิ่มขึ้น

4. คุณสมบัติที่เป็นหนึ่งเดียวเท่านั้น(identification)หรือความมีเอกลักษ์ คือว่าในโลกแห่งความจริงทุกสรรพสิ่งเมื่อมันเกิด ขึ้นมาบนโลกแล้วมันจะมีลักษณะบางอย่างที่ไม่มีทางซ้ำกันได้(DNA, ลายนิ้วมือ อื่นๆอีกเยอะ) เช่น รถคันนี้ กับรถคันนั้น เป็นคนละคันกันทั้งๆที่ทุกอย่างเหมือนกัน สี ยี่ห้อ รุ่นเดียวกันหมด(เป็น Class เดียวกัน) แต่มันก็ยังคงเป็นคนละคันกัน นั่นคือมันมีสิ่งที่ต่างกันอยู่สิ่งหนึ่งก็คือเลขตัวถังเครื่องยนต์ ดังนั้นรถที่มีเลขตัวถังเครื่องยนต์แบบนี้จึงมีแค่ 1 เดียวเท่านั้น (ไม่รู้คุณเคยดู The One มั้ย ถ้าหลักการของ Objects ที่เราสร้างเป็นเหมือน The One คุณก็ลองจินตนาการถึงตอนที่คุณสร้าง object ที่มี id ซ้ำเกิดขึ้นในระบบของคุณดูก็ได้) แต่ในการออกแบบ software บาง objects ก็ไม่มี id เพื่อแยกความแตกต่างจากกันได้ เราจะเรียก objects ชนิดนี้ว่า Value Objects  แต่เมื่อไรก็ตามที่คุณต้องการคงสภาพมันไว้กับระบบ หรือโลกของคุณ ในที่สุดมันก็จะต้องมีอะไรที่บอกความต่างกันได้ขึ้นมาโดยอัตโนมัติ เช่น rowid, sequence id หรือ memory address location

ขอบคุณครับ

#:P

Advertisements

#design, #pattenrs