3/11/2553

ชนิดของข้อมูลแบบคัดย่อ ( Abstract Data Type )

เรื่องที่ 1.3.1 ชนิดของข้อมูลแบบคัดย่อ ( Abstract Data Type )

ในเรื่องที่ 1.1.1 เราได้กล่าวถึงชนิดของข้อมูลมาตรฐานโดยใช้การอธิบายด้วยหลักการของชนิดข้อมูลแบบคัดย่อในระดับหนึ่ง เช่น เมื่อเราพูดถึงชนิดของข้อมูลจำนวนเต็ม จริงๆ แล้ว ข้อมูลทุกอย่างที่เกี่ยวกับคอมพิวเตอร์จะอยู่ในระดับของการคัดย่อ (level of abstraction) ระดับใดระยะหนึ่ง โดยถ้าเราเริ่มที่ชนิดของข้อมูลนี้เราจะเรียกว่าอยู่ในระดับของชนิดข้อมูลแบบเสมือน (virtual data type) เพราะเมื่อเราพูดถึงชนิดของข้อมูล integer เราจะเข้าใจกันว่ามันคืออะไร ไม่ต้องอธิบายในรายละเอียดถึงระดับการแทนที่ข้อมูลของชนิดข้อมูลเหล่านั้นในหน่วยความจำจริง ๆ ของเครื่องคอมพิวเตอร์ (physical data type )

การที่เราสามารถจะเข้าใจบางสิ่งบางอย่างโดยไม่ต้องสนใจในรายละเอียดของสิ่งที่ไม่จำเป็น ทำให้เราสามารถจะสร้างชนิดของข้อมูลอะไรก็ได้ตามจินตนาการของเราและเราสามารถนำมันไปใช้งานได้ ชนิดข้อมูลแบบคัดย่อคือการสร้างข้อมูลชนิดใหม่ตามที่เราต้องการโดยสร้างจากชนิดของข้อมูลที่มีอยู่แล้วในภาษาคอมพิวเตอร์ภาษาสูง (virtual data type)

โดยสรุประดับของการคัดย่อ (abstraction level) แบ่งเป็น 3 ระดับ คือ

    1. ระดับเครื่อง (physical level) เช่น การแทนที่ข้อมูลในเครื่อง เป็นต้น
    2. ระดับเสมือน (virtual level) เช่น ชนิดของข้อมูลที่มีในภาษาสูงต่าง ๆ และภาษาแอสแซมบลี
    3. ระดับการคัดย่อ (abstraction level) เช่น การสร้างชนิดของข้อมูลขึ้นใช้เองตามความต้องการของผู้ใช้ โดยใช้ชนิดของข้อมูลมาตรฐานที่มีในภาษาสูงต่าง ๆ เป็นต้น

ในการสร้างข้อมูลแบบคัดย่อ เราจะแบ่งการสร้างออกเป็นสองส่วน ส่วนแรกคือ การนิยาม หรือการออกแบบชนิดข้อมูลแบบคัดย่อ ซึ่งเราจะเรียกว่า การกำหนดคุณลักษณะเฉพาะ (specification) และส่วนที่สองคือ การสร้างจริง (implementation) โดยใช้เครื่องมือที่เรามีอยู่เช่น ภาษาคอมพิวเตอร์ภาษาสูงภาษาใด ภาษาหนึ่ง

คุณลักษณะเฉพาะของข้อมูลแบบคัดย่อ (Specification of an Abstract Data Type)

การกำหนดคุณลักษณะเฉพาะของข้อมูลแบบคัดย่อ เปรียบเสมือนการออกแบบหรือการสร้างพิมพ์เขียวของสถาปนิกในการสร้างอาคาร คนส่วนใหญ่จะเข้าใจดีว่าคืออะไร ไม่ต้องอธิบายในรายละเอียด (ซึ่งก็เป็นระดับของการคัดย่อ หรือ abstraction ระดับหนึ่ง)

การกำหนดคุณลักษณะเฉพาะของข้อมูลแบบคัดย่อแบ่งเป็นสามส่วนใหญ่ ๆ คือ

    1. การกำหนดค่าของข้อมูล (Data Value หรือ Data Element)
    2. การกำหนดโครงสร้างข้อมูลหรือความสัมพันธ์ของข้อมูล (Data Structure)
    3. การกำหนดการดำเนินงานกับข้อมูล (Set of Operations)

หมายเหตุ หากกล่าวถึง 1 และ 2 โดยรวม จะเรียกว่าขอบเขตของข้อมูล (domain)

ในที่นี้จะนำเสนอตัวอย่างคุณลักษณะเฉพาะของชนิดข้อมูลเชิงเดี่ยว 1 ตัวอย่าง และตัวอย่างชนิดข้อมูลเชิงโครงสร้าง 1 ตัวอย่าง โดยจะนำเสนอเป็นภาษาอังกฤษ เพื่อให้นักศึกษาเข้าใจศัพท์ที่ใช้

คุณลักษณะเฉพาะ 1.1 คุณลักษณะเฉพาะของชนิดข้อมูลเชิงเดี่ยว Color

Specification 1.1 Abstract Atomic Data Type “ Color “

Domain: The set of possible values is {Red,Yellow, Blue, Green, Orange, Violet}

Operations: We define four operations:

Mix (C1, C2 : Color) : Color {Make a color from C1 and C2}

Pre: C1 and C2 are primary colors and are not the same color.

Post: Mix is the color formed by mixing colors C1 and C2 in equal amounts.

Primary (C : Color) : boolean {Is C a primary color}

Pre: None

Post: If C is a primary color, then Primary is true else Primary is false.

Primary (C : Color) : boolean {Is C a primary color}

Pre: None

Post: If C is a primary color, then Primary is true else Primary is false.

Form (C : Color; VAR C1, C2 :Color) {Which colors form color C ?}

Pre: C is not a primary color

Post: C1 and C2 are the two primary colors that form the color C.

Assign (C1 : Color ; VAR C2 : Color) {Assign value C1 to C2}

Pre: None

Post: C2 has the value of C1.

คำอธิบายเกี่ยวกับการเขียนคุณลักษณะเฉพาะ

ในที่นี้ Domain รวมถึงค่าของข้อมูลและโครงสร้างของข้อมูลในตัว ในตัวอย่างนี้ ค่าของข้อมูลคือสีต่าง ๆ 6 สี (Red, Yellow, Blue, Green, Orange, Violet) และสีต่าง ๆ เหล่านี้มีโครงสร้างแบบเซต

มีการดำเนินงานกับข้อมูล ได้ 4 แบบ คือ Mix, Primary, Form, Assign โดยที่ pre (ย่อมาจาก precondition) จะแสดงถึงสถานะเริ่มต้นที่ต้องเป็นจริงก่อนที่จะเรียกใช้การดำเนินงานนั้น ๆ post (ย่อมาจาก postcondition) คือ ผลลัพธ์จากการดำเนินงานนั้น ๆ จะเห็นได้ว่าเราได้นิยามหรือกำหนดการดำเนินงานที่เป็นไปได้หรือที่ต้องการออกเป็นส่วน ๆ (module)

ในการดำเนินงานของ Form เรากำหนดเงื่อนไขเริ่มต้น (pre) ว่า C ต้องไม่เป็นแม่สี แต่ถ้าเราไม่กำหนดเงื่อนไขดังนี้ เราต้องนิยามผลลัพธ์ของการดำเนินงาน (post) ใหม่ ก็ย่อมทำได้ดังนี้

Form (C : Color ; VAR C1, C2 : Color)

Pre: None

Post: If C is primary then C1 = C2 = C

else C1 and C2 are the two primary colors that form color C

คุณลักษณะเฉพาะ 1.2 คุณลักษณะเฉพาะของข้อมูลแบบคัดย่อเชิงโครงสร้าง “Letterstring”

Specification 1.2 Abstract Data Type “Letterstring”

Elements : The component elements are the characters ‘a’ - ‘z’, ‘A’ -‘Z”, and the space character. We refer to them as “Letters".

Structure : There is a linear relationship (structure) among the letters in each value of the Letterstring.

Domain : There are between 0 and 80 letters in any such Letterstring. The domain of the type Letter string is all such letterstrings that satisfy these rules.

Operations : In specifying the operations, we occasionally have to refer to the value of a Letterstring before and after execution of an operations. We call the former S-pre and the Letter S-post.

LeftLetter (VAR S : Letterstring ) : Letter

Pre : The number of letters in the input letter string is greater than 0.

Post : Leftletter is the first (leftmost) letter in the input Letterstring (S-pre). S-post is S-pre less its leftmost letter.

Append (L : Letter, VAR S : Letterstring)

Pre : None

Post : The string S ( S-post) is longer by one letter than S-pre, and the letter in L is its new last (rightmost) letter.

Empty (S : Letterstring) : boolean

Pre : None.

Post : If S contains 0 letters then Empty is true else Empty is false.

Full (S : Letterstring) : boolean

Pre : None.

Post: If S contains 80 letters then Full is true else Full is false.

Reverse (Var S : Letterstring)

Pre : None.

Post : The sequence of the letters in the string is reversed so that the first and last have changed places, the second and next-to-last have changed places, and so on.

คำอธิบายเกี่ยวกับการเขียนคุณลักษณะเฉพาะ

  1. Letterstring เป็นข้อมูลเชิงโครงสร้างโดยประกอบด้วยหน่วยย่อย (component element) คือ Letter และ Letter เหล่านี้มีความสัมพันธ์หรือโครงสร้าง (structure) แบบเชิงเส้น (linear)
  2. Component element + structure ประกอบกันเป็น Domain

การสร้างข้อมูลแบบคัดย่อ (Implementation)

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

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

เมื่อได้วิธีการแทนข้อมูล (representation) แล้ว ขั้นต่อมาโปรแกรมเมอร์ต้องหาวิธีการสร้าง (find an algorithm) ที่เหมาะสมสำหรับการดำเนินงานของข้อมูล ซึ่งก็คือการเขียนโพรซีเจอร์หรือฟังก์ชันในภาษาสูงนั่นเอง ขั้นตอนนี้เปรียบเสมือนการเลือกวิธีการสร้างอาคารของวิศวกร

      โดยสรุป ในการสร้างข้อมูลแบบคัดย่อเราต้องคำนึงถึงสองสิ่ง คือ

    1. วิธีการแทนข้อมูลที่เหมาะสม (representation)
    2. วิธีการสร้างการดำเนินงานของข้อมูลที่เหมาะสม (algorithm)

จะเห็นได้ว่าสำหรับคุณลักษณะเฉพาะหนึ่ง ๆ ที่กำหนด จะมีวิธีเลือกการแทนที่ข้อมูล หรือวิธีการสร้างได้หลายวิธี ขึ้นอยู่กับเครื่องมือที่มีอยู่ ข้อควรคำนึงในการเลือกก็คือความจำกัดของทรัพยากร (resources) ที่มีอยู่ และประสิทธิภาพ (efficiency) ของการใช้ ความจำกัดของทรัพยากรมักจะคิดถึงหน่วยความจำหลัก (main memories) ซึ่งการเลือกวิธีการแทนที่ข้อมูลจะมีผลโดยตรง ส่วนประสิทธิภาพของการใช้ขึ้นอยู่กับหลาย ๆ องค์ประกอบ เช่น วิธีการแทนที่ข้อมูล (data representation) วิธีการสร้างการดำเนินงาน (algorithm) เป็นต้น มาตรวัดสำหรับประสิทธิภาพของวิธีการสร้าง จะได้กล่าวถึงในรายละเอียดต่อไปในบทเรียนที่ 2 ตอนที่ 2.3

เมื่อสร้างข้อมูลแบบคัดย่อเสร็จแล้ว ผู้ใช้ก็เพียงแต่เอาไปใช้ได้ตามคุณลักษณะที่กำหนด โดยไม่ต้องสนใจว่าสร้างมาอย่างไร ถึงแม้ต่อไปผู้สร้างจะเปลี่ยนวิธีการแทนที่ข้อมูลหรือวิธีการสร้าง การเปลี่ยนแปลงนี้จะไม่กระทบต่อผู้ใช้เลย สำหรับผู้ใช้สิ่งที่ผู้ใช้เห็นสำหรับข้อมูลแบบคัดย่อ คือ กล่องดำ (black box) อันหนึ่งซึ่งเรียกว่า ชนิดข้อมูลแบบคัดย่อ และผู้ใช้เพียงแต่ทราบว่าจะดำเนินงานอะไรกับมันได้บ้าง (operation) โดยที่ถ้าจะทำกิจกรรมอันนี้จะต้องมีข้อมูลอะไรเป็นข้อมูลเข้า (input) และผลลัพธ์ที่ได้ (output) จะเป็นอย่างไร

ในการนำเสนอโค้ตของการสร้างชนิดข้อมูลต่าง ๆ ที่จะกล่าวถึงต่อไปในเอกสารประกอบการสอนชุดวิชานี้ จะใช้ Turbo Pascal เป็นเครื่องมือในการสร้าง ซึ่งถ้าลองมาพิจารณา UNIT ใน Turbo Pascal ดู UNIT นี้ อาจจะเปรียบเสมือนเครื่องมือใน Turbo Pascal ที่ช่วยในการสร้างข้อมูลแบบคัดย่อ แต่ UNIT ใน Turbo Pascal ไม่สามารถจะซ่อนข้อมูล (information hiding) ทุกอย่างจากผู้ใช้ได้สมบูรณ์ ซ่อนได้เพียงบางส่วนเท่านั้น เช่น ส่วนการดำเนินงานของโพรซีเจอร์ หรือฟังก์ชัน (implementation of procedure or function) ส่วนการแทนที่ข้อมูล (representation) ยังซ่อนไม่ได้ ตัวอย่างของภาษาโปรแกรมที่มีชนิดของข้อมูลแบบคัดย่อ คือภาษา Ada ซึ่งสามารถสร้างข้อมูลแบบคัดย่อให้มีคุณสมบัติซ่อนข้อมูล (information hiding) ทั้งส่วนของการแทนที่ข้อมูล (representation) และส่วนของการสร้างข้อมูล (implementation) ได้อย่างสมบูรณ์

เพื่อให้นักศึกษาได้มีประสบการณ์ตรงในการสร้างและการใช้ข้อมูลแบบคัดย่อ จะได้มีการนำเสนอในรายละเอียดต่อไปในบทเรียนที่ 2 ตอนที่ 2.1 สำหรับการสร้างและการใช้ข้อมูลแบบคัดย่อเชิงเดี่ยว “Color” และในตอนที่ 2.2 สำหรับการสร้างและการใช้ข้อมูลแบบคัดย่อเชิงโครงสร้าง “LetterString”

กิจกรรม 1.6 ฝึกหลักการของข้อมูลแบบคัดย่อ

จงใช้หลักการของข้อมูลแบบคัดย่อ (Abstract Data Type) อธิบายหรือนิยามชนิดของข้อมูล integer, real, pointer ของภาษาปาสคาล

0 ความคิดเห็น:

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