คลาสเมื่อวาน 27 พ.ย. 50 บรรยายเป็นครั้งที่ 4 เรื่อง Interaction Diagram (Sequence & Comunication Digaram) ทำให้นึกย้อนกลับไปถึงบรรยายครั้งที่ผ่าน ๆ มา เริ่มจากครั้งที่ 1 เป็นการแนะนำนำให้รู้จักคุณสมบัติของแนวคิด (กระบวนการคิด) ของ Object-Oriented อะไรคือ Class อะไรคือ Instance มันนิยามต่างกันอย่างไร แต่ที่แน่ ๆ คือ Object จะมีคุณสมบัติอยู่ 3 ข้อใหญ่ ๆ
1.Encapsulation คือ ทำงานได้เบ็ดเสร็จ คือ พูดง่ายลองนึกถึงตัวเรา มีข้อมูล (Attribute) และ เราก็รู้จักจัดการกับข้อมูลของเราด้วยวิธีการ (Method) ของเรา คนอื่นแค่บอกมาว่า อยากได้อะไร หรือ ต้องรู้ว่าเราทำอะไรให้ได้บ้าง สรุปคือ แค่บอกมา (ส่ง message มาตาม public channel) เดี๋ยวจัดให้ (เรื่องของ I You ไม่เกี่ยว จัดการอย่างไร ขอเป็น Private นะ) เห็นม๊ะ แสดงว่ามันต้องมีคนอื่น (Class อื่นๆ) ต้องรู้จักเราด้วย เพราะจะมาใช้ หรือมารู้จักนี่หละ มันก็เกิดเป็นความสัมพันธ์ (Relationship) ไง พอมันสัมพันธ์กันเยอะ เริ่มกิ๊กกันเยอะ ก็ต้องไปเขียน Class Diagram จะได้รู้ว่ากิ๊กไหน รู้จักกันบ้าง ทางไหน อย่างไร จะได้ไม่งง อ้าวก่อนจะออกนอกเรื่อง (นอกแคปซูล) ...ไปไกล ขอหยุดก่อนนะ
2. Inheritance คือ กรรมพันธุ์ ทั้งที่เป็น Physical เช่น อะไรที่ common มันก็จะสืบทอดมาด้วย (ก็พวก Attibute ที่มันมีเหมือนกันไง) รวมถึง Logical อันนี้ดูที่นิสัย (Method) หรือเรียกง่ายๆ ว่า สืบทั้งคุณลักษณะ และสันดานแล้วกันครับ คือ เหมือนเรานี่หละครับ เอกเทศ เป็นตัวเราเอง ที่เรียกว่า Encapsulation แล้วยังไม่พอ เขาพยายามจะบอกว่า บางทีเราก็มี ลักษณะรูปร่าง และสันดาน ที่เป็นกรรมพันธุ์ ที่ยัดเยียดมาให้ ติดมาจาก พ่อ และแม่ของเรา งงหละซิ ... เช่น พ่อ แม่ เป็น นก นกมีลักษณะนิยาม คือ มีปีก 2 ข้าง มีขา 2 ขา มีหางด้วยนะ ส่งเสียงร้องได้ และบินได้ ลูกนก ออกมาอาจจะ สีดำ สีขาว หางยาว หางสั้น หางกุด ร้องเพราะ ร้องไม่เพราะ ไอ้ ดำ ๆ ขาว ๆ ยาวๆ สั้น ๆ เพราะ ไม่เพราะ ที่บอกมามันคือ Value นะ แต่มันก็คือ ลักษณะ (Attributes) เดียวกันเหมือน พ่อ และแม่ของมัน ใช่ไหม จะนกเอี้ยง นกอีเห็น นกกระจอก (Instance) จะแบ่งไปสักกี่ร้อยสายพันธุ์ มันก็ มีปีก 2 ข้าง มีขา 2 ขา มีหางด้วยนะ ส่งเสียงร้องได้ และบินได้ เราเรียกรวมไม่รู้หละไอ้แบบนี้ นก หมด (Class นก) จะเป็นหมาได้อย่างไร
เหมารวม เรียกลักษณะเหมารวมที่นิยาม ๆ ว่า Class ไง
อันนี้มันแล้วแต่นิยามของ คลาส ถ้าบอกว่า สิ่งที่บินได้ (มีปีกสองข้าง ลอยตัวในอากาศได้) ก็อาจจะแยกเป็น สิ่งมีชีวิตที่บินได้ กับ สิ่งไม่มีชีวิตที่บินได้ เห็นม๊ะ เห็นม๊ะ แค่นึกยังนึกว่า บินได้ บินได้ แสดงว่า มันก็สืบสันดานของที่บินได้มา นก ก็จะกลายเป็นคลาสลูก (Sub Class) ของสิ่งที่บินได้ที่มีชีวิต ทันที เครื่องบิน ก็จะกลายเป็น Sub Class ของสิ่งไม่มีชีวิตที่บินได้ แต่มันบินได้เห็นปะ ... การคิดแบบนี้มันทำให้เกิดการ Reuse หรือ ทำให้ไม่ต้องคิดอะไรซ้ำ ๆ ก็ใช้สิ่งที่มีอยู่แล้วให้เกิดประโยชน์
3. Polymorphism เขายังมองลึกซึ้งต่อไปว่า คนเราอะนะ หรือลูก ๆ ที่พ่อแม่เดียวกันนี่หละ สืบสันดานมาจากพ่อแม่ก็จริงอยู่ แสดงพฤติกรรม (Behavior หรือ Method) ได้เหมือนกันก็จริงอยู่ แต่ลองไปดูกระบวนการ (Process) ดิ มันต่างกัน เช่น สิ่งที่บินได้แบบมีชีวิต เวลาบิน (Method บิน) มัน กางปีกสองข้างขยับขึ้น ขยับลง = บิน แต่ ถ้าแบบไม่มีชีวิต เวลาบิน มันกางปีกก่อน แล้ววิ่งไปข้างหน้า เชิดหัวขึ้น = บิน เห็นม๊ะ เห็นม๊ะ บินได้ แต่ว่าขอแอบต่างนิดส์นึง ถ้าเครื่องบินปีกขยับขึ้น ขยับลง เอออันนี้ไม่ต้องคิดอะไร ท่องนะโม 3 จบ ลุ้นกันอีกทีตอนถึงพื้น
จากข้อ 1 สรุปว่า มองตัวเรา ข้อ 2 และ 3 สรุปว่ามองที่ครอบครัวของเรา
พอเรามองแบบนี้ปุ๊ป เอาข้อ 1 ก่อน อยู่คนเดียวได้เหรอ? ถ้าเป็นสิ่งเดียวที่ไม่ต้องยุ่งกะใคร คำตอบคือ แล้วจะไปสนใจมันทำไมให้ปวดหัวคร๊าบบพี่น้อง .. ไอ้เพราะว่าอยู่โดด ๆ ไม่ได้นี่หละครับ มันเลยทำให้เรามีวิชาชีพทำมาหากินทุกวันนี่หละ เอ้ามาดูกัน อยู่คนเดียวไม่ได้ ก็ต้องไปมีความสัมพันธ์ กับ คนอื่น จริงม๊ะ (Relationship ระหว่าง Class เรียกหรู ๆ ว่า Association) ตามธรรมเนียมลากเส้นไปเชื่อมกันซะ แล้วก็บอกว่า สัมพันธภาพระหว่างเรา นะแบบไหน จะมาหลายทีไม่จำกัด (*) หรือว่ามาทีเดียว (1) หรือว่ามาได้จำกัดจำนวนครั้งไม่เกิน 30 ครั้งตามใจ (0..30) หรือไม่รับปากว่าจะมา แต่ถ้ามาขออนุญาตมาหลาย ๆ ที (0..*) ยังไงก็มาแน่ ๆ ที่รัก แล้วจะมาอีกหลาย ๆ ที (1..*) ก็ว่ากันไป เราเรียกการเขียนพวกนี้ว่า Carinality หรือ Multiplicity อ่อ จะใช้ n แทน * ก็ได้ไม่ผิด
มาข้อ 2 ข้อ 3 ความสัมพันธ์กันแบบ ครอบครัวของเรา ของกันและกัน ยกทีมมา อุตส่าห์ทำตัวเทา ๆ ไว้ก่อน ที่เป็น Generalization ก็จะเป็นความสัมพันธ์จากนิยามคุณสมบัติของ Object ในข้อ Inheritance และ Polymorphism ไง ความเป็นเครือญาติ เหล่า ก๊ก กอ แก๊งค์ พวกเดียวกันนี่หละ มันก็จะมีความสัมพันธ์กันแบบใกล้ชิดสนิทแนบ เราเรียกมันว่า Composite หรือ Aggregation ซึ่งจะเกิดจากความสัมพ้นธ์ที่เป็นส่วนหนึ่งของกันและกัน ฉันขาดเธอมิได้ ประมาณนี้ ภาษาอังกฤษเรียกว่า "is-part-of" "is-kind-of" ต้องมาประกอบเข้าด้วยกัน เวลาเขียนเส้นความสัมพันธ์ ก็บอกให้รู้ด้วยสัญลักษณ์ สี่เหลี่ยมข้าวหลามตัดไว้ตรงหัว ถ้าแบบเหนียวแน่นมาก ๆ ก็ทำทึบ ๆ (Composite) ถ้าแบบธรรมดาก็ไม่ต้องไประบายทึบ (Aggregation) ส่วนใหญ่หัวเหลี่ยมจะไปแปะไว้กับคลาสหลัก นึกถึงดอกกุหลาบ มีก้าน มีดอก ดอกคือเหลี่ยม ๆ นั่นหละครับ เวลาที่ยื่นดอกกุหลาบให้แฟน แล้วบอกว่า ขอเป็นส่วนหนึ่งของชีวิตคุณ คงไม่เอาก้านดอกกุหลาบ ชี้ไปที่แฟนหรอกนะครับ เหอๆๆ
จำไว้อย่างว่า "เมื่อ instance ไหน เป็น Subclass ของ Class ใดแล้ว ก็ต้องจงรักภักดี กับหัวหน้า Super Class นั้นตลอดไป ห้ามกระโดดไปมา" ... เช่น นก ถึงจะบินได้ ก็ห้ามไปสังกัด สิ่งไม่มีชีวิตที่บินได้ มันเย้ยหยัน เสียมารยาท เสียการปกครอง
* ข้อความที่เขียนอาจจะไม่ถูกต้องตามหลักเนื้อหาวิชาการ เป็นเพียงความเข้าใจส่วนบุคคล มีวัตถุประสงค์เพื่อสรุปรวบยอดความคิด ซึ่งอาจจะมีข้อบกพร่อง ขอน้อมรับฟังด้วยความยินดี