"มุมฉาก" หมายถึงอะไรเมื่อพูดถึงภาษาโปรแกรม?
อะไรคือตัวอย่างของ Orthogonality?
"มุมฉาก" หมายถึงอะไรเมื่อพูดถึงภาษาโปรแกรม?
อะไรคือตัวอย่างของ Orthogonality?
คำตอบ:
Orthogonalityคือคุณสมบัติที่หมายถึง "การเปลี่ยน A ไม่เปลี่ยน B" ตัวอย่างของระบบมุมฉากจะเป็นวิทยุซึ่งการเปลี่ยนสถานีจะไม่เปลี่ยนระดับเสียงและในทางกลับกัน
ระบบที่ไม่ตั้งฉากจะเหมือนกับเฮลิคอปเตอร์ที่การเปลี่ยนความเร็วสามารถเปลี่ยนทิศทางได้
ในภาษาโปรแกรมหมายความว่าเมื่อคุณดำเนินการคำสั่งจะไม่มีอะไรเกิดขึ้นนอกจากคำสั่งนั้น (สำคัญมากสำหรับการดีบัก)
จาก"Art of UNIX programming" ของ Eric S. Raymond
Orthogonality เป็นคุณสมบัติที่สำคัญที่สุดอย่างหนึ่งที่สามารถช่วยให้การออกแบบที่ซับซ้อนมีขนาดกะทัดรัด ในการออกแบบที่ตั้งฉากกันหมดจดการดำเนินการไม่มีผลข้างเคียง แต่ละการกระทำ (ไม่ว่าจะเป็นการเรียก API การเรียกมาโครหรือการทำงานของภาษา) จะเปลี่ยนแปลงเพียงสิ่งเดียวโดยไม่ส่งผลกระทบต่อผู้อื่น มีวิธีเดียวและวิธีเดียวในการเปลี่ยนแปลงคุณสมบัติของระบบที่คุณควบคุมอยู่
คิดว่ามันสามารถเปลี่ยนแปลงสิ่งหนึ่งโดยไม่ส่งผลกระทบที่มองไม่เห็นในอีกส่วนหนึ่ง
หากคุณมีชุดของโครงสร้าง ภาษาจะกล่าวว่าเป็นมุมฉากหากอนุญาตให้โปรแกรมเมอร์ผสมโครงสร้างเหล่านี้ได้อย่างอิสระ ตัวอย่างเช่นใน C คุณไม่สามารถส่งคืนอาร์เรย์ (อาร์เรย์แบบคงที่) C ถูกกล่าวว่าไม่เป็นพิษในกรณีนี้:
int[] fun(); // you can't return a static array.
// Of course you can return a pointer, but the langauge allows passing arrays.
// So, it is unorthognal in case.
โดยทั่วไปมุมฉากคือความสัมพันธ์ระหว่างสองสิ่งที่มีผลกระทบต่อกันและกันน้อยที่สุด
คำศัพท์นี้มาจากคณิตศาสตร์โดยเวกเตอร์สองตัวตั้งฉากกันถ้ามันตัดกันเป็นมุมฉาก
ลองนึกถึงสเปซคาร์ทีเซียน 2 มิติทั่วไป (กริดทั่วไปที่มีแกน X / Y) พล็อตสองบรรทัด: x = 1 และ y = 1 เส้นสองเส้นตั้งฉากกัน คุณสามารถเปลี่ยน x = 1 ได้โดยการเปลี่ยน x ซึ่งจะไม่มีผลกับอีกบรรทัดและในทางกลับกัน
ในซอฟต์แวร์สามารถใช้คำนี้ได้อย่างเหมาะสมในสถานการณ์ที่คุณกำลังพูดถึงสองส่วนของระบบที่ทำงานเป็นอิสระจากกัน
คำตอบส่วนใหญ่ยืดยาวและคลุมเครือด้วยซ้ำ ประเด็นคือ: ถ้าเครื่องมือตั้งฉากกันก็สามารถเพิ่มเปลี่ยนหรือถอดออกได้เพื่อประโยชน์ของเครื่องมือที่ดีกว่าโดยไม่ต้องขันทุกอย่างให้หมด
ความแตกต่างระหว่างช่างไม้ที่มีค้อนและเลื่อยซึ่งสามารถใช้สำหรับการตอกหรือเลื่อยหรือมีคำสั่งผสมค้อน / เลื่อยแบบใหม่ซึ่งออกแบบมาเพื่อเลื่อยไม้แล้วตอกเข้าด้วยกัน อย่างใดอย่างหนึ่งจะใช้ได้กับการเลื่อยแล้วตอกเข้าด้วยกัน แต่ถ้าคุณได้รับงานบางอย่างที่ต้องใช้เลื่อย แต่ไม่ใช้ค้อนก็จะใช้ได้เฉพาะเครื่องมือที่ตั้งฉากกันเท่านั้น ในทำนองเดียวกันหากคุณต้องการใช้สกรูแทนการใช้ค้อนคุณไม่จำเป็นต้องทิ้งเลื่อยหากค้อนของคุณตั้งฉากกัน (ไม่ปะปนกับ)
ตัวอย่างคลาสสิกคือเครื่องมือบรรทัดคำสั่ง unix: คุณมีเครื่องมือหนึ่งสำหรับรับเนื้อหาของดิสก์ (dd) อีกตัวสำหรับกรองบรรทัดจากไฟล์ (grep) อีกอันสำหรับเขียนบรรทัดเหล่านั้นไปยังไฟล์ (cat) เป็นต้นสิ่งเหล่านี้ ทั้งหมดสามารถผสมและจับคู่ได้ตามต้องการ
ในขณะที่พูดถึงการตัดสินใจโครงการเกี่ยวกับภาษาโปรแกรมอาจมองว่ามุมฉากเป็นเรื่องง่ายเพียงใดที่คุณจะคาดเดาสิ่งอื่น ๆ เกี่ยวกับภาษานั้นสำหรับสิ่งที่คุณเคยเห็นในอดีต
ตัวอย่างเช่นในหนึ่งภาษาคุณสามารถมี:
str.split
สำหรับการแยกสตริงและ
len (STR)
สำหรับการรับความยาว
ในภาษาที่มีมุมฉากมากขึ้นคุณจะใช้ str.x หรือ x (str) เสมอ
เมื่อคุณจะโคลนวัตถุหรือทำสิ่งอื่นใดคุณจะรู้ว่าควรใช้หรือไม่
โคลน (obj)
หรือ
obj.clone
นั่นเป็นหนึ่งในประเด็นหลักของภาษาโปรแกรมที่ตั้งฉากกัน นั่นเป็นการหลีกเลี่ยงไม่ให้คุณปรึกษาคู่มือหรือถามใครสักคน
บทความวิกิพีเดียพูดเพิ่มเติมเกี่ยวกับมุมฉากในการออกแบบที่ซับซ้อนหรือภาษาระดับต่ำ ตามที่มีคนแนะนำไว้ข้างต้นในความคิดเห็นหนังสือ Sebesta พูดถึงมุมฉาก
ถ้าฉันจะใช้เพียงประโยคเดียวฉันจะบอกว่าภาษาโปรแกรมนั้นตั้งฉากกันเมื่อส่วนที่ไม่รู้จักทำหน้าที่ตามที่คาดไว้ตามสิ่งที่คุณเห็น หรือ ... ไม่น่าแปลกใจ
;)
จากวิกิพีเดีย :
วิทยาศาสตร์คอมพิวเตอร์
Orthogonality เป็นคุณสมบัติในการออกแบบระบบที่เอื้อต่อความเป็นไปได้และความกะทัดรัดของการออกแบบที่ซับซ้อน Orthogonality รับประกันว่าการปรับเปลี่ยนเอฟเฟกต์ทางเทคนิคที่เกิดจากส่วนประกอบของระบบทั้งไม่สร้างหรือแพร่กระจายผลข้างเคียงไปยังส่วนประกอบอื่น ๆ ของระบบ พฤติกรรมที่เกิดขึ้นใหม่ของระบบที่ประกอบด้วยส่วนประกอบควรได้รับการควบคุมอย่างเคร่งครัดโดยคำจำกัดความที่เป็นทางการของตรรกะและไม่ใช่จากผลข้างเคียงที่เกิดจากการผสานรวมที่ไม่ดีเช่นการออกแบบโมดูลและอินเทอร์เฟซที่ไม่เป็นมุมฉาก Orthogonality ช่วยลดเวลาในการทดสอบและการพัฒนาเนื่องจากง่ายต่อการตรวจสอบการออกแบบที่ไม่ก่อให้เกิดผลข้างเคียงหรือขึ้นอยู่กับพวกเขา
ตัวอย่างเช่นรถยนต์มีส่วนประกอบและส่วนควบคุมที่ตั้งฉากกัน (เช่นการเร่งความเร็วของรถจะไม่ส่งผลต่อสิ่งอื่นใดนอกจากส่วนประกอบที่เกี่ยวข้องกับฟังก์ชันเร่งความเร็วเท่านั้น) ในทางกลับกันการออกแบบที่ไม่ตั้งฉากกันอาจทำให้พวงมาลัยมีผลต่อการเบรก (เช่นระบบควบคุมเสถียรภาพแบบอิเล็กทรอนิกส์) หรือปรับความเร็วของระบบกันสะเทือน 1ดังนั้นการใช้งานนี้จึงถูกมองว่ามาจากการใช้มุมฉากในคณิตศาสตร์: เราอาจฉายเวกเตอร์ไปยังพื้นที่ย่อยโดยการฉายภาพลงบนสมาชิกแต่ละชุดของเวกเตอร์พื้นฐานแยกกันและเพิ่มเส้นโครงถ้าเป็นเวกเตอร์พื้นฐานเท่านั้น มีมุมฉากซึ่งกันและกัน
ชุดคำสั่งถูกกล่าวว่าเป็นมุมฉากหากคำสั่งใด ๆ สามารถใช้รีจิสเตอร์ในโหมดการกำหนดแอดเดรสใด ๆ คำศัพท์นี้เป็นผลมาจากการพิจารณาคำสั่งเป็นเวกเตอร์ที่มีส่วนประกอบเป็นฟิลด์คำสั่ง ฟิลด์หนึ่งระบุการลงทะเบียนที่จะดำเนินการและอีกฟิลด์หนึ่งระบุโหมดการกำหนดแอดเดรส ชุดคำสั่งมุมฉากจะเข้ารหัสชุดค่าผสมของรีจิสเตอร์และโหมดแอดเดรสทั้งหมดโดยไม่ซ้ำกัน
จากWikipedia :
Orthogonality เป็นคุณสมบัติในการออกแบบระบบที่เอื้อต่อความเป็นไปได้และความกะทัดรัดของการออกแบบที่ซับซ้อน Orthogonality รับประกันว่าการปรับเปลี่ยนเอฟเฟกต์ทางเทคนิคที่เกิดจากส่วนประกอบของระบบทั้งไม่สร้างหรือแพร่กระจายผลข้างเคียงไปยังส่วนประกอบอื่น ๆ ของระบบ พฤติกรรมที่เกิดขึ้นใหม่ของระบบที่ประกอบด้วยส่วนประกอบควรได้รับการควบคุมอย่างเคร่งครัดโดยคำจำกัดความที่เป็นทางการของตรรกะและไม่ใช่จากผลข้างเคียงที่เกิดจากการผสานรวมที่ไม่ดีเช่นการออกแบบโมดูลและอินเทอร์เฟซที่ไม่เป็นมุมฉาก Orthogonality ช่วยลดเวลาในการทดสอบและการพัฒนาเนื่องจากง่ายต่อการตรวจสอบการออกแบบที่ไม่ก่อให้เกิดผลข้างเคียงหรือขึ้นอยู่กับพวกเขา
ตัวอย่างเช่นรถยนต์มีส่วนประกอบและส่วนควบคุมที่ตั้งฉากกัน (เช่นการเร่งความเร็วของรถจะไม่ส่งผลต่อสิ่งอื่นใดนอกจากส่วนประกอบที่เกี่ยวข้องกับฟังก์ชันเร่งความเร็วเท่านั้น) ในทางกลับกันการออกแบบที่ไม่ตั้งฉากกันอาจทำให้พวงมาลัยมีผลต่อการเบรก (เช่นระบบควบคุมเสถียรภาพแบบอิเล็กทรอนิกส์) หรือปรับความเร็วของระบบกันสะเทือน [1] ดังนั้นการใช้งานนี้จึงถูกมองว่ามาจากการใช้มุมฉากในคณิตศาสตร์: หนึ่งอาจฉายเวกเตอร์ไปยังพื้นที่ย่อยโดยการฉายภาพไปยังสมาชิกแต่ละชุดของเวกเตอร์พื้นฐานแยกกันและเพิ่มเส้นโครงถ้าเวกเตอร์พื้นฐานเป็น มุมฉากซึ่งกันและกัน
ชุดคำสั่งถูกกล่าวว่าเป็นมุมฉากหากคำสั่งใด ๆ สามารถใช้รีจิสเตอร์ในโหมดการกำหนดแอดเดรสใด ๆ คำศัพท์นี้เป็นผลมาจากการพิจารณาคำสั่งเป็นเวกเตอร์ที่มีส่วนประกอบเป็นฟิลด์คำสั่ง ฟิลด์หนึ่งระบุการลงทะเบียนที่จะดำเนินการและอีกฟิลด์หนึ่งระบุโหมดการกำหนดแอดเดรส ชุดคำสั่งมุมฉากจะเข้ารหัสชุดค่าผสมของรีจิสเตอร์และโหมดแอดเดรสทั้งหมดโดยไม่ซ้ำกัน
ในแง่ที่ง่ายที่สุดเท่าที่จะเป็นไปได้สองสิ่งคือการตั้งฉากกันถ้าการเปลี่ยนแปลงอย่างใดอย่างหนึ่งไม่มีผลต่ออีกสิ่งหนึ่ง
ในฐานะตัวอย่างของการขาดมุมฉากในภาษาระดับสูงให้พิจารณากฎและข้อยกเว้นต่อไปนี้ในภาษา C แม้ว่า C จะมีประเภทข้อมูลที่มีโครงสร้างอยู่ 2 ประเภทอาร์เรย์และระเบียน (โครงสร้าง) สามารถส่งคืนระเบียนจากฟังก์ชันได้ แต่อาร์เรย์ไม่สามารถส่งคืนได้ สมาชิกของโครงสร้างสามารถเป็นชนิดข้อมูลใดก็ได้ยกเว้นโมฆะหรือโครงสร้างประเภทเดียวกัน องค์ประกอบอาร์เรย์สามารถเป็นชนิดข้อมูลใดก็ได้ยกเว้นโมฆะหรือฟังก์ชัน พารามิเตอร์จะถูกส่งผ่านด้วยค่าเว้นแต่ว่าจะเป็นอาร์เรย์ซึ่งในกรณีนี้จะมีผลส่งต่อโดยการอ้างอิง (เนื่องจากลักษณะของชื่ออาร์เรย์ที่ไม่มีตัวห้อยในโปรแกรม C ถูกตีความว่าเป็นที่อยู่ขององค์ประกอบแรกของอาร์เรย์)
ในภาษาโปรแกรมจะกล่าวถึงคุณลักษณะของภาษาในการเขียนโปรแกรมว่าตั้งฉากกันหากมีขอบเขตโดยไม่มีข้อ จำกัด (หรือข้อยกเว้น) ตัวอย่างเช่นในฟังก์ชัน Pascal ไม่สามารถส่งคืนประเภทที่มีโครงสร้างได้ นี่คือข้อ จำกัด ในการส่งคืนค่าจากฟังก์ชัน ดังนั้นเราจึงถือว่าเป็นลักษณะที่ไม่ตั้งฉากกัน ;)
Orthogonality ในการเขียนโปรแกรม:
Orthogonality เป็นแนวคิดที่สำคัญโดยกล่าวถึงวิธีการรวมส่วนประกอบจำนวนค่อนข้างน้อยในหลายวิธีเพื่อให้ได้ผลลัพธ์ที่ต้องการ มันเกี่ยวข้องกับความเรียบง่าย ยิ่งการออกแบบตั้งฉากกันมากเท่าไหร่ข้อยกเว้นก็ยิ่งน้อยลงเท่านั้น ทำให้ง่ายต่อการเรียนรู้อ่านและเขียนโปรแกรมในภาษาโปรแกรม ความหมายของลักษณะมุมฉากนั้นไม่ขึ้นกับบริบท พารามิเตอร์หลักคือความสมมาตรและความสม่ำเสมอ (ตัวอย่างเช่นตัวชี้เป็นแนวคิดที่ตั้งฉากกัน)
จากWikipedia
Orthogonality ในภาษาโปรแกรมหมายความว่าชุดของโครงสร้างดั้งเดิมที่ค่อนข้างเล็กสามารถรวมเข้าด้วยกันได้หลายวิธีในการสร้างโครงสร้างการควบคุมและข้อมูลของภาษา นอกจากนี้การรวมกันของสิ่งดั้งเดิมที่เป็นไปได้ทุกอย่างล้วนถูกกฎหมายและมีความหมาย ตัวอย่างเช่นพิจารณาประเภทข้อมูล สมมติว่าภาษาหนึ่งมีประเภทข้อมูลดั้งเดิมสี่ประเภท (จำนวนเต็มทศนิยมคู่และอักขระ) และตัวดำเนินการสองประเภท (อาร์เรย์และตัวชี้) หากสามารถนำตัวดำเนินการสองประเภทไปใช้กับตัวเองและประเภทข้อมูลดั้งเดิมทั้งสี่ชนิดสามารถกำหนดโครงสร้างข้อมูลจำนวนมากได้ ความหมายของคุณลักษณะภาษามุมฉากนั้นไม่ขึ้นอยู่กับบริบทของลักษณะที่ปรากฏในโปรแกรม (คำว่ามุมฉากมาจากแนวคิดทางคณิตศาสตร์ของเวกเตอร์มุมฉากซึ่งเป็นอิสระจากกัน ) Orthogonality ตามมาจากความสมมาตรของความสัมพันธ์ระหว่างพื้นฐาน การขาดมุมฉากนำไปสู่ข้อยกเว้นของกฎของภาษา ตัวอย่างเช่นในภาษาโปรแกรมที่รองรับพอยน์เตอร์ควรกำหนดพอยน์เตอร์เพื่อชี้ไปยังประเภทเฉพาะที่กำหนดในภาษานั้น ๆ อย่างไรก็ตามหากพอยน์เตอร์ไม่ได้รับอนุญาตให้ชี้ไปที่อาร์เรย์ก็ไม่สามารถกำหนดโครงสร้างข้อมูลที่ผู้ใช้กำหนดที่เป็นประโยชน์ได้ เราสามารถแสดงให้เห็นถึงการใช้มุมฉากเป็นแนวคิดในการออกแบบโดยเปรียบเทียบลักษณะหนึ่งของภาษาแอสเซมบลีของคอมพิวเตอร์เมนเฟรม IBM และมินิคอมพิวเตอร์ซีรีส์ VAX เราพิจารณาสถานการณ์ง่ายๆเพียงอย่างเดียว: การเพิ่มค่าจำนวนเต็ม 32 บิตสองค่าที่อยู่ในหน่วยความจำหรือรีจิสเตอร์และแทนที่หนึ่งในสองค่าด้วยผลรวม เมนเฟรมของ IBM มีคำสั่งสองคำสั่งสำหรับวัตถุประสงค์นี้
A Reg1, memory_cell
AR Reg1, Reg2
โดยที่ Reg1 และ Reg2 แสดงถึงการลงทะเบียน ความหมายของสิ่งเหล่านี้คือ
Reg1 ← contents(Reg1) + contents(memory_cell)
Reg1 ← contents(Reg1) + contents(Reg2)
คำสั่งเพิ่มเติม VAX สำหรับค่าจำนวนเต็ม 32 บิตคือ
ADDL operand_1, operand_2
ซึ่งความหมายคือ
operand_2 ← contents(operand_1) + contents(operand_2)
ในกรณีนี้ตัวถูกดำเนินการอาจเป็นรีจิสเตอร์หรือเซลล์หน่วยความจำ การออกแบบคำสั่ง VAX เป็นแบบตั้งฉากโดยที่คำสั่งเดียวสามารถใช้รีจิสเตอร์หรือเซลล์หน่วยความจำเป็นตัวถูกดำเนินการ มีสองวิธีในการระบุตัวถูกดำเนินการซึ่งสามารถรวมกันได้ทุกวิธี การออกแบบของ IBM ไม่ได้ตั้งฉากกัน ความเป็นไปได้ในการรวมตัวถูกดำเนินการเพียงสองในสี่รายการเท่านั้นที่ถูกกฎหมายและทั้งสองต้องการคำแนะนำที่แตกต่างกันคือ A และ AR การออกแบบของ IBM มีข้อ จำกัด มากกว่าจึงเขียนได้น้อยลง ตัวอย่างเช่นคุณไม่สามารถเพิ่มสองค่าและเก็บผลรวมไว้ในตำแหน่งหน่วยความจำ นอกจากนี้การออกแบบของ IBM ยังเรียนรู้ได้ยากกว่าเนื่องจากข้อ จำกัด และคำสั่งเพิ่มเติม Orthogonality มีความสัมพันธ์อย่างใกล้ชิดกับความเรียบง่าย: ยิ่งการออกแบบภาษามีมุมฉากมากเท่าไหร่กฎของภาษาก็ยิ่งต้องการข้อยกเว้นน้อยลงเท่านั้น ข้อยกเว้นที่น้อยลงหมายถึงความสม่ำเสมอในการออกแบบในระดับที่สูงขึ้นซึ่งทำให้ภาษาเรียนรู้อ่านและเข้าใจได้ง่ายขึ้น ใครก็ตามที่ได้เรียนรู้ส่วนสำคัญของภาษาอังกฤษสามารถเป็นพยานถึงความยากลำบากในการเรียนรู้ข้อยกเว้นกฎมากมาย (เช่น i ก่อน e ยกเว้นหลัง c)
Orthogonality หมายถึงระดับที่ภาษาประกอบด้วยชุดของโครงสร้างดั้งเดิมที่เป็นอิสระซึ่งสามารถรวมกันได้ตามความจำเป็นเพื่อแสดงโปรแกรม คุณลักษณะต่างๆจะตั้งฉากกันหากไม่มีข้อ จำกัด ว่าจะรวมเข้าด้วยกันอย่างไร
Example : non-orthogonality
PASCAL: ฟังก์ชันไม่สามารถส่งคืนประเภทที่มีโครงสร้างได้ ภาษาที่ใช้งานได้มีมุมฉากสูง
แนวคิดพื้นฐานของการตั้งฉากคือสิ่งที่ไม่เกี่ยวข้องกับแนวคิดไม่ควรเกี่ยวข้องในระบบ บางส่วนของสถาปัตยกรรมที่ไม่มีส่วนเกี่ยวข้องกับส่วนอื่น ๆ เช่นฐานข้อมูลและ UI ไม่จำเป็นต้องเปลี่ยนแปลงร่วมกัน การเปลี่ยนแปลงหนึ่งไม่ควรทำให้เกิดการเปลี่ยนแปลงไปสู่อีกสิ่งหนึ่ง
ตรวจสอบความตรงของเมทริกซ์:
Orthogonality อาจเกี่ยวข้องกับเมทริกซ์
Matrix *(transpose of matrix)= identity matrix.
คลิกลิงก์ด้านล่างเพื่อดูวิดีโอ YouTube เกี่ยวกับ Orthogonality
https://youtu.be/tNekLaxnfW8