ชนิดข้อมูลที่กำหนดโดยผู้ใช้
| English | ไทย |
|---|---|
| user-defined types/ˈjuːzə dɪˈfaɪnd taɪps/ | ชนิดที่กำหนดโดยผู้ใช้ |
| non-composite/nɒn ˈkɒmpəzɪt/ | แบบไม่ผสม |
| composite/ˈkɒmpəzɪt/ | แบบผสม |
| enumerated type/ɪˈnjuːməreɪtɪd taɪp/ | ชนิดที่ระบุรายการ |
| pointer/ˈpɔɪntə/ | ปอยเตอร์ |
| dereference/ˌdiːˈrefrəns/ | ดีรีเฟอเรนซ์ |
| record/ˈrekɔːd/ | record |
| set/set/ | set |
| class/klæs/ | class |
| attributes/ˈætrɪbjuːts/ | คุณลักษณะ |
| methods/ˈmeθədz/ | methods |
ประเภทที่ทำให้ความผิดพลาดเป็นไปไม่ได้
- ระบบโรงพยาบาลจัดเก็บหมู่เลือดผู้ป่วยเป็น
STRINGHoodie คนหนึ่งพิมพ์ "0+" แทน "O+": ตัวเลขศูนย์แทนตัวอักษร Field นี้ยอมรับมัน เพราะ string ยอมรับทุกอย่าง - ไม่มีอะไรในโปรแกรมบอกได้ว่า "0+" ไม่ใช่หมู่เลือด ดังนั้นความผิดพลาดจึงเดินทางโดยไม่ถูกตรวจจับไปยังจุดที่สำคัญ
- กำหนดประเภทให้กับ field ที่มีค่าตรงกับหมู่เลือดทั้งแปดพอดี และการกำหนดค่าจะถูกปฏิเสธทันทีเมื่อเขียน, โดย编译器, ก่อนที่โปรแกรมจะทำงาน
- นั่นคือสิ่งที่ user-defined types มอบให้คุณ บทเรียนนี้คือสิ่งที่หลักสูตรระบุ,以及如何它们在两者之间进行选择。
ทำไมถึงต้องใช้ user-defined types
- Built-in
STRINGทำให้คุณเก็บสิ่งไร้สาระลงใน field ที่ควรเก็บค่าที่ถูกต้องเพียงไม่กี่ค่า; User-defined type restricts มัน, เพื่อให้编译器จับความผิดพลาดได้มากขึ้น - Real entities มักจะเป็น collection ของค่าหลายประเภท, และ built-in type เก็บได้เพียงอย่างเดียว
DECLARE MyTaxi : Vehicleเป็น self-documenting: มันบอกว่าเป็นอะไร, ในขณะที่DECLARE MyTaxi : STRINGบอกเพียงว่าจัดเก็บอย่างไร
ทำไมต้องใช้ชนิดที่กำหนดโดยผู้ใช้? เลือก ทุก ข้อที่เกี่ยวข้อง
การจำกัด, การรวมกลุ่ม และการอธิบายตนเอง ความเร็วไม่ใช่เหตุผล; ความถูกต้องและความชัดเจนต่างหาก
Non-composite types: enumerated
- Non-composite type เก็บ single value; Composite type รวมหลายค่าเข้าด้วยกัน
- ประเภทที่กำหนดเอง (enumerated type) มีค่าที่เป็น รายการคงที่ที่มีชื่อกำหนด ชื่อเหล่านี้คือค่าของชนิดใหม่ ที่จัดเก็บภายในเป็นจำนวนเต็มขนาดเล็ก
TYPE Vehicle = (M100, M230, T101, T102, T120, T150)
DECLARE MyTaxi : Vehicle
MyTaxi ← T102 // anything outside the list is rejected
- การใช้: วันในสัปดาห์, สี, รหัสสถานะ, กลุ่มเลือด: ทุกสนาม whose ค่าที่ถูกต้องเป็นรายการสั้นๆ ที่ทราบอยู่แล้ว

หกลิสต์ที่มีชื่อกำหนด และไม่มีอะไรอื่นที่ระบุได้
ชนิด enumerated เก็บ:
ชนิด enumerated จำกัดตัวแปรให้เป็นหนึ่งในชุดค่าที่มีชื่อที่กำหนดไว้ (เช่น วันในสัปดาห์)
ประเภทที่ไม่รวมองค์ประกอบ: ปอยเตอร์
- ปอยเตอร์ (pointer) เก็บ ที่อยู่หน่วยความจำของตัวแปรอื่น, หรือ
NULLความหมายว่า "ไม่มีเป้าหมาย" - การ ดีรีERENCE (dereference) ปอยเตอร์, เขียนว่า
p^, คือการเข้าถึงตัวแปรที่มันชี้ไป
TYPE PNode = ^TNode // a pointer to a TNode
DECLARE p : PNode
p ← NEW TNode
p^.Value ← 42 // dereference, then reach the field
- ปอยเตอร์คือสิ่งที่ทำให้โครงสร้างแบบ พลวัต (dynamic) เป็นไปได้: รายการเชื่อมโยง (linked list) คือโหนดที่เชื่อมด้วยปอยเตอร์, และต้นไม้คือโหนดที่มีสองอัน พวก它还ส่งเรคอร์ดขนาดใหญ่ไปยังโปรซิเดอร์โดยไม่คัดลอกมัน

ตัวแปรเก็บตำแหน่งที่ข้อมูลอยู่ ไม่ใช่ข้อมูลเอง
พอยเตอร์เก็บที่อยู่หน่วยความจำของตัวแปรอื่น และการดีรีเฟอเรนซ์มัน (เช่น p^) จะเข้าถึงตัวแปรที่ชี้ไปยัง
พอยเตอร์ (พร้อม NULL ที่ระบุว่า "ไม่ชี้ไปที่อะไร") คือวิธีสร้างโครงสร้างแบบไดนามิกเช่นลิงค์ลิสต์และต้นไม้
การเข้าถึงตัวแปรที่พอยเตอร์ชี้ไป ซึ่งเขียนว่า p^เรียกว่า ____.
พอยเตอร์เก็บที่อยู่; การดีรีเฟอเรนซ์ติดตามไปตามที่อยู่นั้นเพื่อเข้าถึงข้อมูล นั่นคือวิธีสร้างลิงค์ลิสต์และต้นไม้
ประเภทที่รวมองค์ประกอบ
- เรคอร์ด (record) รวมฟิลด์ของ ชนิดที่แตกต่างกัน ภายใต้ชื่อเดียว, ใน
TYPE … ENDTYPEบล็อก คุณเคยพบมันในหัวข้อ 10 - เซต (set) คือกลุ่ม ไม่เรียงลำดับ ของ ค่าที่ไม่ซ้ำกัน, พร้อมการดำเนินการเพิ่ม, ลบ, ตรวจสอบสมาชิกภาพ, ยูเนียน และอินเตอร์เซกชัน
DECLARE Available : SET OF Colour
Available ← {Red, Blue}
IF Green IN Available THEN
…
ENDIF
- คลาส (class) และอินสแตนซ์ของมัน, ออบเจ็กต์ (objects), รวมฟิลด์ข้อมูล, แอททริบิวต์ (attributes) เข้ากับการดำเนินการกับมัน, เมทოდ (methods)

ฟิลด์ของชนิดต่างกัน, ตัวระบุชื่อเดียว
จับคู่ชนิดที่กำหนดโดยผู้ใช้แต่ละชนิดกับสิ่งที่มันเก็บ
Enumerated = ค่าที่มีชื่อที่กำหนดไว้; Poynter = ที่อยู่; Class = ข้อมูล + พฤติกรรม; Set = ค่าที่ไม่ซ้ำ且不เรียงลำดับ
Set เป็นชุดที่เรียงลำดับซึ่งค่าอาจปรากฏซ้ำได้
Set ไม่เรียงลำดับและมีค่าซ้ำไม่ได้ Array คือโครงสร้างที่เรียงลำดับซึ่งอนุญาตให้ซ้ำได้
คลาส
CLASS Taxi
PRIVATE Capacity : INTEGER
PUBLIC FUNCTION GetCapacity() RETURNS INTEGER
RETURN Capacity
ENDFUNCTION
ENDCLASS
- คลัสคือ นิยาม; ออบเจ็กต์คือ อินสแตนซ์ ของมัน, TAXI จริงหนึ่งคันที่มีความจุของตัวเอง
- สิ่งที่แตกต่างจากเรคอร์ดคือ เมทอด: เรคอร์ดเป็นข้อมูลเพียงอย่างเดียว, คลัสคือข้อมูล และ พฤติกรรมที่ควรอยู่กับมัน
Class รวม:
Class รวบรวมคุณลักษณะและメธود; Object คือinstance ของclass
อะไรแตกต่าง class ออกจาก record?
ทั้งฟิลด์ของกลุ่ม; มีเพียงคลาสที่ควบคุมพฤติกรรม วัตถุคือตัวอย่างหนึ่งจากคลาส
ตัวอย่างฝึกทำ: เลือกชนิดและอธิบายเหตุผล
- ระบบจองเก็บสถานะสำหรับแต่ละการจอง必须是其中之一 Requested, Confirmed หรือ Cancelled. User-defined type ใด, และทำไม?
- ประเภทที่กำหนดเอง: ค่าที่ถูกต้องเป็นรายการสั้นคงที่ ดังนั้นชนิดนี้จะป้องกันไม่ให้ค่าอื่นถูกกำหนด และโค้ดอ่านได้เหมือนโดเมน
- และสำหรับการจองเอง: อ้างอิง, วันที่, จำนวนผู้โดยสาร และราคา? เรคอร์ด, เพราะค่าเป็นชนิดต่างกันและอธิบายการจองหนึ่งครั้งด้วยกันเสมอ
- และสำหรับชุดที่นั่งที่ยังว่าง? เซต: ไม่เรียงลำดับ, ไม่มีซ้ำ, และการตรวจสอบสมาชิกภาพคือการดำเนินการที่คุณต้องการ
การเลือกระหว่างทั้งสอง
| ความต้องการ | ชนิด |
|---|---|
| ค่าจากรายการสั้นคงที่ | type ที่กำหนดเอง |
| การอ้างอิงทางอ้อม, หรือโครงสร้างที่ขยายขนาดได้ | ปอยเตอร์ |
| ฟิลด์หลายชนิด不同类型อธิบายสิ่งเดียวกัน | เรคอร์ด |
| กลุ่มไม่เรียงลำดับของค่าที่ไม่ซ้ำกัน | เซต |
| สถานะ และ พฤติกรรมที่ทำต่อมัน | คลาส |
ห้องปฏิบัติการแนวคิดการเขียนโปรแกรม
เชื่อมโยงตัวอย่างเข้ากับแนวคิดการเขียนโปรแกรมที่แสดงออก
สำหรับตัวแปรที่ต้องเป็น {Red, Green, Blue}其中一个, ประเภทที่ดีที่สุดคือ:
รายการค่าที่กำหนดไว้ล่วงหน้าอย่างชัดเจน คือสิ่งที่ประเภท枚举 ใช้เพื่อจัดการ
คะแนนที่หลุดหายไป
- ค่าของ type ที่กำหนดเองคือ ค่าคงที่มีชื่อ, ไม่ใช่สตริง.
MyTaxi ← "T102"เป็นอีกอย่างหนึ่งและไม่ถูกต้อง - ปอยเตอร์เก็บ ที่อยู่, ไม่ใช่ค่า. การดีรีERENCEคือขั้นตอนที่เข้าถึงค่า
- เซต ไม่เรียงลำดับและไม่มีซ้ำ; แอร์เรย์ เรียงลำดับและอาจซ้ำ. คำใช้คำถามบอกคุณว่าอันไหน
- สิ่งที่ทำให้คลัสมากกว่าเรคอร์ดคือ เมทอด. บอกเมื่อถูกถามถึงความแตกต่าง
คุณเข้าใจแล้ว
- user-defined types จำกัดสิ่งที่สามารถจัดเก็บ, รวมค่าที่เกี่ยวข้องด้วยกัน, และทำให้โค้ดอธิบายตัวเองได้
- non-composite: type ที่กำหนดเอง (รายการคงที่มีชื่อกำหนด) และ ปอยเตอร์ (ที่อยู่, เข้าถึงได้โดยการ ดีรีERENCE)
- composite: เรคอร์ด (ฟิลด์ชนิดต่างกัน), เซต (ไม่เรียงลำดับ, ไม่ซ้ำ), คลาส/ออบเจ็กต์ (แอททริบิวต์ plus メソッド)
- เลือกจากความจำเป็น, และอธิบายด้วยคุณสมบัติที่ตรง: รายการคงที่, การอ้างอิงทางอ้อม, ฟิลด์ผสม, ความไม่ซ้ำ, หรือสถานะพร้อมพฤติกรรม