![]() |
|
![]() |
|
![]() |
โมเดลของข้อมูลเป็นการแสดงให้เห็นองค์ประกอบสิ่งต่าง ๆ (objects)ที่เราสนใจ ซึ่งจะมีข้อกำหนดที่กำหนดให้กับองค์ประกอบเหล่านั้น และแสดงความสัมพันธ์ระหว่างองค์ประกอบเหล่านั้น หลักการของโมเดลข้อมูลเชิงวัตถุจะประกอบไปด้วยองค์ประกอบเหล่านี้คือ
แนวทางเชิงวัตถุมีพื้นฐานมาจากการห้อหุ้มข้อมูล และโปรแกรม(encapsulating) ดังนั้นการติดต่อสื่อสารกันระหว่างอ๊อปเจ็กจะทำผ่านทางข่าวสาร(messages)เสมอ โดยทั่วไปแล้ว อ๊อปเจ็กจะเกี่ยวข้องกับ
สิ่งที่ทำให้ต้องมีการใช้ข่าวสารและวิธีการระหว่างอ๊อปเจ็ก พิจารณาเอนตินี้ employee ในระบบธนาคาร ทุก ๆ คนจะมีการคำนวณเงินรายได้ทั้งปี แต่มีความแตกต่างกันในเรื่องของการคำนวณ ตามประเภทของพนักงาน เช่น ผู้จัดการ ได้รับโบนัสตามกำไรที่ธนาคารทำได้ หรือพนักงานเคาเตอร์ จะได้รับโบนัสตามชั่วโมงการทำงาน เป็นต้น เราสามารถซ่อนโปรแกรมในส่วนของการคำนวณเงินเดือน โดยอ๊อปเจ็กจะรู้ว่าต้องคำนวณเงินรายได้ทั้งปีอย่างไร โดยที่อ๊อปเจ็กของพนักงานทุกคนมี interface เดียวกัน ในระบบเชิงวัตถุ เราสามารถที่จะแก้ไขนิยามของวิธีการ ตัวแปร โดยไม่มีผลกระทบต่อระบบ ซึ่งคุณสมบัตินี้เป็นข้อดีของการเขียนโปรแกรมเชิงวัตถุ วิธีการของอ๊อปเจ็กสามารถจำแนกได้ 2 กลุ่มคือ ประเภทอ่านอย่างเดียว หรือ ประเภท Update ถ้าเป็นวิธีการแบบอ่านอย่างเดียวจะไม่มีผลกระทบต่อข้อมูลในอ๊อปเจ็ก ในขณะที่ Update จะทำการเปลี่ยนแปลงข้อมูลภายในอ๊อปเจ็กได้ ซึ่งข่าวสารที่อ๊อปเจ็กจะตอบสนองว่าเป็นแบบอ่านอย่างเดียวหรือแบบ update นั้นขึ้นอยู่กับวิธีการ implement ข่าวสาร สำหรับแอตทริบิวต์ที่ได้จากการคำนวณนั้น ในระบบเชิงวัตถุจะใช้ข่าวสารแบบอ่านอย่างเดียว กล่าวคือทุก ๆ แอตทริบิวต์ของเอนติตี้ต้องประกอบไปด้วยข่าวสาร 2 อันคือ ข่าวสารสำหรับการอ่านข้อมูลของแอตทริบิวต์ และอีกข่าวสารสำหรับการปรับปรุงข้อมูล
โดยปกติ ในฐานข้อมูลจะมีอ๊อปเจ็กที่คล้าย ๆ กัน หมายความว่าอ๊อปเจ็กมีการตอบสนองต่อข่าวสารเดียวกัน ใช้วิธีการเดียวกัน และมีตัวแปรชื่อเดียวกัน ชนิดข้อมูลเดียวกัน ดังนั้นเราจึงจัดกลุ่มของอ๊อปเจ็กที่ลักษณะคล้าย ๆ กัน แล้วกำหนดเป็นคลาส ๆ หนึ่ง และแต่ละอ๊อปเจ็กที่สร้างมาจากคลาสก็เรียกว่า เป็น instance ของคลาส อ๊อปเจ็กทุกตัวจะมีลักษณะเหมือนกัน จะแตกต่างกันตรงข้อมูลที่ถูกกำหนดให้กับตัวแปรในอ๊อปเจ็ก เราจะนิยามคลาส employee ในรูปของคำสั่งลำลอง ซึ่งแสดงตัวแปรและข่าวสารซึ่งอ๊อปเจ็กจะตอบสนอง ในตัวอย่างนี้ยังไม่มีวิธีการที่จะมาจักการกับข่าวสาร class employee { /* Variables */ string name; string address; date start-date; int salary; /* Messages */ int annual-salary(); string get-name(); string get-address(); int set-address(string new-address); int employment-length(); }; จากนิยามของคลาส employee จะประกอบไปด้วยตัวแปร name และ address ซึ่งมีชนิดข้อมูลเป็น string start-date มีชนิดข้อมูลเป็น date และ salary มีชนิดข้อมูลเป็น integer แต่ละอ๊อปเจ็กจะตอบสนองข่าวสาร 5 ข่าวสาร คือ annual-salary get-name get-address set-address และ employment-length ข่าวสารแต่ละอันมีการกำหนดชนิดข้อมูลไว้ด้านหน้า หมายถึงชนิดของการตอบสนองข้อมูลกลับไปยังข่าวสารนั้น
ในระบบฐานข้อมูลเชิงวัตถุจะประกอบไปด้วยคลาสจำนวนมาก อย่างไรก็ตามคลาสหลาย ๆ คลาสจะมีลักษณะคล้าย ๆ กัน ตัวอย่างเช่น พนักงานของธนาคาร จะมีลักษณะที่คล้ายกับลูกค้า เช่น ชื่อ ที่อยู่ โทรศัพท์ เป็นต้น เพื่อแสดงให้เห็นถึงลักษณะที่คล้ายกันของคลาส เราจะแสดง E-R ไดอะแกรมในลักษณะของลำดับชั้นของ specialization (ความสัมพันธ์แบบ ISA) ดังรูปที่ 1 รูปที่ 1 แสดงลำดับชั้นของคลาสแบบ Specialization หลักการของลำดับชั้นของคลาสจะเหมือนกับ specialization ใน E-R โมเดล รูปที่ 2 แสดงลำดับชั้นของคลาสที่เหมือน E-R ไดอะแกรมในรูปที่ 1 รูปที่ 2 แสดงลำดับชั้นของคลาสที่เหมือนกับ E-R ในรูปที่ 1 ลำดับชั้นของคลาสสามารถกำหนดเป็นคำสั่งลำลองได้ดังรูปที่ 3 ในที่นี่ยังไม่ขอกล่าวถึงวิธีการของแต่ละคลาส class person { string name; string address; }; class customer isa person { int credit-rating; }; class employee isa person { date start-date; int salary; }; class officer isa employee { int office-number; int expense-account-number; }; class teller isa employee { int hours-per-week; int station-number; }; class secretary isa employee { int hours-per-week; string manager; }; รูปที่ 3 แสดงคำสั่งลำลองในการนิยามลำดับชั้นของคลาส คำว่า isa ใช้สำหรับบอกว่าคลาสนั้นมีลักษณะเช่นเดียวกันกับอีกคลาสหนึ่ง โดยเราเรียกคลาสที่ specialization ว่า subclasses ตัวอย่างเช่น employee เป็น subclass ของ person และ teller เป็น subclass ของemployee ในทางกลับกัน employee ก็เป็น superclass ของ teller ข้อดีของการสืบทอดคุณสมบัติในระบบเชิงวัตถุคือ มีคุณลักษณะของ code-reuse นั่นคือวิธีการใด ๆ ของคลาส A สามารถที่จะถูกเรียกใช้โดยคลาส B ซึ่งเป็น subclass A ได้ทันที ทำให้ไม่ต้องเขียนคำสั่งในคลาส B อีก
โดยทั่วไปแล้วโครงสร้างของคลาสแบบลำดับชั้นก็เพียงพอต่อการแสดงโมเดลของข้อมูลแล้ว แต่ในบางกรณี เช่นเราต้องการจำแนกระหว่าง teller และ secretaries แบบ full-time และ part-time ในรูปที่ 2 ซึ่งเราก็สามารถสร้าง subclass ของ part-time-teller full-time-teller part-time-secretary และ full-time-secretary ดังรูปที่ 4 รูปที่ 4 แสดงลำดับชั้นของคลาส ของพนักงาน full-time และ part-time แต่จะเกิดปัญหาสองอย่างคือ (1) ปัญหาความไม่สอดคล้องในการปรับปรุงข้อมูล เนื่องมาจาก ตัวแปรและวิธีการของพนักงาน full-time ต้องถูกกำหนดสองครั้ง คือ full-time-teller และ full-time-secretary ในทำนองเดียวกันกับพนักงาน part-time เมื่อไรก็ตามที่ต้องมีการเปลี่ยนแปลงข้อมูลของพนักงาน ก็ต้องมีการเปลี่ยนแปลงสองที่ (2) ลำดับชั้นของคลาสไม่สามารถแสดงพนังงานกลุ่มอื่นที่ไม่ใช่ full-time หรือ part-time ได้ วิธีการ Multiple inheritance เป็นวิธีการที่ยอมให้คลาสหนึ่งสืบทอดคุณสมบัติและวิธีการจากหลาย ๆ คลาสได้ ความสัมพันธ์ระหว่าง class และ subclass แสดงได้โดย directed acyclic graph (DAG) ซึ่งใช้ในกรณีที่คลาส มี superclass มากกว่าหนึ่งคลาส รูปที่ 5 แสดงคลาส DAG จากรูปที่ 5 เรากำหนดคลาส part-time และคลาส full-time ขึ้นมาเพื่อเก็บข้อมูลและวิธีการของพนักงาน part-time และ full-time จากนั้น สร้างคลาส part-time-teller ซึ่งเป็น subclass ของ teller และ part-time คลาส part-time-teller จะสืบทอดคุณสมบัติ และวิธีการของทั้ง teller และ part-time มา ซึ่งจะเห็นว่าไม่เกิดความซ้ำซ้อนอย่างที่เกิดขึ้นในรูปที่4 แล้ว เมื่อมีการสืบทอดแบบหลายคลาส อาจจะมีความคลุมเคลือเกิดขึ้นในกรณีที่ตัวแปรหรือวิธีการที่สืบทอดมาจากหลายคลาสมีชื่อเดียวกัน ตัวอย่างเช่น เรากำหนดการจ่ายเงิน pay ของพนักงานแต่ละประเภทดังนี้
พิจารณาคลาส part-time-secretary ซึ่งสืบทอดตัวแปร pay มาจากคลาส part-time หรือ secretary ผลลัพธ์ที่ได้มีหลายกรณี ขึ้นอยู่กับวิธีการว่าจะจัดการอย่างไร
Object identity: อ๊อปเจ็กจะยังคงรักษาความเป็น identity แม้ว่าข้อมูลของตัวแปรหรือวิธีการของ อ๊อปเจ็กมีการเปลี่ยนแปลง แนวคิดของ identity นี้ไม่ได้นำไปใช้กับทูเปิลของฐานข้อมูลเชิงสัมพันธ์ ซึ่งในระบบเชิงสัมพันธ์นั้น ทูเปิลของรีเลชันจะแตกต่างกันด้วยข้อมูลที่ถูกเก็บอยู่ รูปแบบต่าง ๆ ของ identity
ในทางปฏิบัติ Object identity จะถูกกำหนดให้มีค่าไม่ซ้ำกัน เรียกว่า OID ซึ่งค่าของ OID นี้จะไม่สามารถมองเห็นได้โดยผู้ใช้ทั่วไป แต่จะถูกใช้โดยระบบเพื่อระบุอ๊อปเจ็กแต่ละอ๊อปเจ็ก
อ๊อปเจ็กที่สามารถบรรจุอ๊อปเจ็กอื่น ๆ ได้จะถูกเรียกว่า อ๊อปเจ็กเชิงซ้อน(complex object)หรืออ๊อปเจ็กผสม(composite object) ซึ่งสามารถบรรจุซ้อนกันได้หลายชั้น นั่นคือเป็นลักษณะความสัมพันธ์ที่อ๊อปเจ็กหนึ่งจะประกอบด้วยอ๊อปเจ็กหลาย ๆ อ๊อปเจ็กประกอบเข้าด้วยกัน ตัวอย่าง A bicycle design database รูปที่ 6 แสดงลำดับชั้นความสัมพันธ์ระหว่างอ๊อปเจ็ก รูปที่ 6 แสดงลำดับชั้นความสัมพันธ์ระหว่างอ๊อปเจ็ก ซึ่งความสัมพันธ์ในลักษณะนี้ เป็นลักษณะของ is-part-of ซึ่งเป็นคนละแบบกับ is-a ที่เกิดจากการสืบทอดคลาส ลักษณะการประกอบกันของอ๊อปเจ็กนี้เป็นหลักการที่สำคัญอย่างหนึ่งในระบบเชิงวัตถุ เนื่องจากจะทำให้การมองข้อมูลเริ่มมองจากจุดเล็ก ๆ ก่อน เช่น คนออกแบบล้อ ก็จะมุ่งไปกับการออกแบบล้อ โดยไม่สนใจกับส่วนอื่นเช่น เกียร์หรือ เบรก จากนั้นพนักงานฝ่ายการตลาดก็จะทำการกำหนดราคาจักรยาน โดยนำเอาข้อมูลส่วนต่าง ๆ ที่เป็นส่วนประกอบของจักรยาน มาคำนวณราคาต่อไป
|
||
|
|