อ่าน 3 นาที
การกำหนดปริมาณแบบมีขอบเขต
ใน ทฤษฎีประเภท (type theory ) การกำหนดปริมาณแบบจำกัด (bounded quantification) (หรือเรียกอีกอย่างว่า polymorphism แบบจำกัด หรือ genericity แบบจำกัด ) หมายถึง ตัวกำหนดปริมาณ แบบสากล...
การกำหนดปริมาณแบบมีขอบเขต
ในทฤษฎีประเภท (type theory ) การกำหนดปริมาณแบบจำกัด (bounded quantification) (หรือเรียกอีกอย่างว่าpolymorphism แบบจำกัดหรือgenericity แบบจำกัด ) หมายถึง ตัวกำหนดปริมาณ แบบสากลหรือ แบบ มีอยู่จริงซึ่งถูกจำกัด ("จำกัด") ให้ครอบคลุมเฉพาะ subtype ของประเภทใดประเภทหนึ่งเท่านั้น การกำหนดปริมาณแบบจำกัดเป็นปฏิสัมพันธ์ระหว่างpolymorphism แบบพารามิเตอร์กับsubtyping การกำหนดปริมาณแบบจำกัดได้รับการศึกษามาอย่างยาวนานในบริบทของ ภาษา เชิงฟังก์ชัน เช่น System F <:แต่ก็มีให้ใช้ในภาษาเชิงวัตถุ สมัยใหม่ ที่รองรับpolymorphism แบบพารามิเตอร์ ( generics )เช่นJava , C#และScala
ภาพรวม
จุดประสงค์ของการกำหนดปริมาณแบบจำกัด (bounded quantification) คือการอนุญาตให้ฟังก์ชันแบบโพลีมอร์ฟิกขึ้นอยู่กับพฤติกรรมเฉพาะบางอย่างของอ็อบเจ็กต์ แทนที่จะเป็นการสืบทอดประเภทโดยสมมติว่าคลาสของอ็อบเจ็กต์ใช้โมเดลแบบเรคอร์ด (record-based model) ซึ่งสมาชิกทุกตัวของคลาสเป็นองค์ประกอบของเรคอร์ด และสมาชิกทั้งหมดของคลาสเป็นฟังก์ชันที่มีชื่อ คุณสมบัติของอ็อบเจ็กต์จะถูกแทนด้วยฟังก์ชันที่ไม่มีอาร์กิวเมนต์และส่งคืนค่าเป็นอ็อบเจ็กต์ พฤติกรรมเฉพาะนั้นจะเป็นชื่อฟังก์ชันพร้อมกับประเภทของอาร์กิวเมนต์และประเภทของค่าที่ส่งคืน การกำหนดปริมาณแบบจำกัดจะพิจารณาอ็อบเจ็กต์ทั้งหมดที่มีฟังก์ชันดังกล่าว ตัวอย่างเช่นminฟังก์ชันแบบโพลีมอร์ฟิกที่พิจารณาอ็อบเจ็กต์ทั้งหมดที่สามารถเปรียบเทียบกันได้
การหาปริมาณแบบจำกัด F
การกำหนดปริมาณแบบจำกัดFหรือการกำหนดปริมาณแบบจำกัดแบบเรียกซ้ำซึ่งนำเสนอในปี 1989 ช่วยให้สามารถกำหนดประเภทของฟังก์ชันที่ใช้กับประเภทแบบเรียกซ้ำได้อย่างแม่นยำยิ่งขึ้น ประเภทแบบเรียกซ้ำคือประเภทที่มีฟังก์ชันเป็นตัวสร้างที่ใช้เป็นประเภทสำหรับอาร์กิวเมนต์บางตัว หรือค่าส่งคืนของอาร์กิวเมนต์ฟังก์ชัน หรืออาร์กิวเมนต์บางตัวของค่าส่งคืนฟังก์ชันของอาร์กิวเมนต์ฟังก์ชัน หรืออื่นๆ กล่าวคือ อยู่ในตำแหน่งบวก [ 1 ]
ตัวอย่าง
ข้อจำกัดประเภทแบบนี้สามารถแสดงได้ในJavaด้วยอินเทอร์เฟซทั่วไป ตัวอย่างต่อไปนี้แสดงวิธีการอธิบายประเภทที่สามารถเปรียบเทียบกันได้ และใช้ข้อมูลนี้เป็นข้อมูลการกำหนดประเภทในฟังก์ชันโพลีมอร์ฟิก ฟังก์ชัน นี้Test::minใช้การกำหนดปริมาณแบบจำกัดอย่างง่าย และไม่ได้ตรวจสอบว่าวัตถุนั้นเปรียบเทียบกันได้หรือไม่ ซึ่งแตกต่างจากTest::fMinฟังก์ชันที่ใช้การกำหนดปริมาณแบบจำกัด F
ในสัญลักษณ์ทางคณิตศาสตร์ ประเภทของฟังก์ชันทั้งสองคือ
ที่ไหน
พิจารณาการประกาศที่เป็นไปได้ต่อไปนี้ในjava.lang:
แพ็คเกจjava.lang ;อิน เทอร์เฟซสาธารณะComparable < T > { int compareTo ( T other ); }public class Integer implements Comparable < Integer > { @Override public int compareTo ( Integer other ) { // ... } }public class String implements Comparable < String > { @Override public int compareTo ( String other ) { // ... } }จากนั้น มาดูวิธีการใช้งานกัน:
แพ็คเกจorg.wikipedia.examples ;public class Test { public static < S extends Comparable > S min ( S a , S b ) { if ( a . compareTo ( b ) <= 0 ) { return a ; } else { return b ; } }public static < T extends Comparable < T >> T fMin ( T a , T b ) { if ( a . compareTo ( b ) <= 0 ) { return a ; } else { return b ; } }public static void main ( String [] args ) { String a = min ( "cat" , "dog" ); Integer b = min ( 10 , 3 ); Comparable c = min ( "cat" , 3 ); // เกิด ClassCastException ขณะรันไทม์String str = fMin ( "cat" , "dog" ); Integer i = fMin ( 10 , 3 ); // Object o = fMin("cat", 3); // คอมไพล์ไม่ผ่าน} }ดูเพิ่มเติม
- ความแปรปรวนร่วมและความแปรปรวนผกผัน (วิทยาการคอมพิวเตอร์)
- รูปแบบแม่แบบที่เกิดขึ้นซ้ำอย่างน่าประหลาดใจ
- ไวลด์การ์ด (Java)
หมายเหตุ
ลิงก์ภายนอก
- โพลีมอร์ฟิซึมแบบจำกัดขอบเขตที่คลังเก็บรูปแบบพอร์ตแลนด์
- "F-bounded Polymorphism"ในThe Cecil Language: Specification and Rationale
สรุปเนื้อหา
ข้อมูลสำคัญจากบทความ
ข้อมูลสำคัญเกี่ยวกับ การกำหนดปริมาณแบบมีขอบเขต
ใน ทฤษฎีประเภท (type theory ) การกำหนดปริมาณแบบจำกัด (bounded quantification) (หรือเรียกอีกอย่างว่า polymorphism แบบจำกัด หรือ genericity แบบจำกัด ) หมายถึง ตัวกำหนดปริมาณ แบบสากล...
ภาพรวม
จุดประสงค์ของการกำหนดปริมาณแบบจำกัด (bounded quantification) คือการอนุญาตให้ ฟังก์ชันแบบโพลีมอร์ฟิก ขึ้นอยู่กับพฤติกรรมเฉพาะบางอย่างของอ็อบเจ็กต์ แทนที่จะเป็นการ สืบทอดประเภท โดยสมมติว่าคลาสของอ็อบเจ็กต์ใช้โมเดลแบบเรคอร์ด (record-based model)...
การหาปริมาณแบบจำกัด F
การกำหนดปริมาณแบบจำกัด F หรือ การกำหนดปริมาณแบบจำกัดแบบเรียกซ้ำ ซึ่งนำเสนอในปี 1989 ช่วยให้สามารถกำหนดประเภทของฟังก์ชันที่ใช้กับประเภทแบบเรียกซ้ำได้อย่างแม่นยำยิ่งขึ้น ประเภทแบบเรียกซ้ำคือประเภทที่มีฟังก์ชันเป็นตัวสร้างที่ใช้เป็นประเภทสำหรับอาร์กิวเมนต์บางตัว...
ตัวอย่าง
ข้อจำกัดประเภทแบบนี้สามารถแสดงได้ใน Java ด้วยอินเทอร์เฟซทั่วไป ตัวอย่างต่อไปนี้แสดงวิธีการอธิบายประเภทที่สามารถเปรียบเทียบกันได้ และใช้ข้อมูลนี้เป็นข้อมูลการกำหนดประเภทใน ฟังก์ชันโพลีมอร์ฟิก ฟังก์ชัน นี้ Test::min ใช้การกำหนดปริมาณแบบจำกัดอย่างง่าย...