ฉันไม่สามารถนึกถึงสถานที่ที่ดีขึ้นในหมู่พี่น้อง SO เพื่อตั้งคำถามเช่นนี้ เดิมทีฉันอยากถามว่า "python เป็นภาษา OO บริสุทธิ์หรือไม่" แต่เมื่อพิจารณาถึงปัญหาและประสบการณ์ที่ไม่สะดวกสบายของผู้คนในขณะที่พยายามกำหนดคำศัพท์ฉันตัดสินใจเริ่มต้นด้วยการได้คำจำกัดความที่ชัดเจนสำหรับคำนั้น ๆ
มันค่อนข้างยุติธรรมที่จะเริ่มต้นด้วยการโต้ตอบโดยดร. อลันเคย์ซึ่งเป็นคนบัญญัติศัพท์ (สังเกตแรงบันดาลใจในการเปรียบเทียบทางชีววิทยากับเซลล์หรือสิ่งมีชีวิตอื่น ๆ )
มีวิธีการดังต่อไปนี้ในการเข้าถึงภารกิจ:
- ให้การวิเคราะห์เชิงเปรียบเทียบโดยการแสดงรายการภาษาการเขียนโปรแกรมที่สามารถแสดง (หรือไม่สามารถทำได้) คุณสมบัติบางอย่างที่ไม่ซ้ำกันและเพียงพอที่จะกำหนดคำศัพท์ (แม้ว่า Smalltalk, Scala,
Javaและอื่น ๆ ) เป็นตัวอย่างที่เป็นไปได้ แต่ IMO ไม่เกิดผล ) - ให้คำจำกัดความอย่างเป็นทางการ (หรือใกล้เคียงกับมันเช่นในเชิงวิชาการหรือเชิงคณิตศาสตร์มากขึ้น)
- ให้คำนิยามเชิงปรัชญาที่ต้องพึ่งพาบริบทเชิงความหมายของภาษาที่เป็นรูปธรรมหรือประสบการณ์การเขียนโปรแกรมเบื้องต้น (ต้องมีโอกาสในการอธิบายที่ประสบความสำเร็จโดยชุมชน)
รุ่นปัจจุบันของฉัน: "ถ้าเขียนโปรแกรมบางอย่าง ( อย่างเป็นทางการ ) ภาษาที่สามารถ ( หลักไวยากรณ์ ) ความแตกต่างระหว่างการดำเนินงานและถูกดำเนินการเช่นเดียวกับการสรุปเกี่ยวกับประเภทของแต่ละตัวถูกดำเนินการไม่ว่าจะเป็นประเภทนี้เป็นวัตถุ (ในความรู้สึกของ OOP) หรือไม่นั้นเราเรียกว่า ภาษาดังกล่าวเป็นภาษา OO ตราบใดที่มีอย่างน้อยหนึ่งประเภทในภาษานี้ซึ่งเป็นวัตถุในที่สุดหากทุกประเภทของภาษาเป็นวัตถุที่เรากำหนดให้ภาษาดังกล่าวจะบริสุทธิ์ (strong) OO-language "
จะขอบคุณการปรับปรุงใด ๆ ที่เป็นไปได้ของมัน อย่างที่คุณเห็นฉันเพิ่งนิยามขึ้นอยู่กับคำว่า "วัตถุ" (มักจะอ้างถึงอย่างเต็มที่ว่าเป็นคลาสของวัตถุ)
[แก้ไข]
นอกจากนี้ฉันใช้ (ความเข้าใจโชคดี) ความคิดของประเภทในภาษาที่พิมพ์ การเขียนโปรแกรมชนิดข้อมูลหรือการวางโปรแกรมเชิงประเภทไม่เพียง แต่การตีความทางไวยากรณ์ (ของข้อความโปรแกรมเช่นวิธีการรักษาค่าบางอย่างของตัวอักษรและตัวแปรข้อมูล - สิ่งที่วิวัฒนาการไปสู่ความปลอดภัยของประเภท) แต่สามารถนำมาประกอบกับไวยากรณ์ภาษา (โดยใช้ตรรกะทางคณิตศาสตร์) รวมเรียกว่าระบบการพิมพ์ ขอให้สังเกตว่าการกำหนดให้ระบบประเภทใดประเภทหนึ่งมีประเภทสากลที่เรียกว่าหนึ่งในวิธีที่กำหนดความบริสุทธิ์ของภาษา OO (มีวิธีที่จะขยายความหมายนี้)
NB
วิธีตอบ :
- ช่วยถ้าคุณระบุหนังสือหรือข้อมูลอ้างอิงที่สนับสนุน / อธิบายความเข้าใจของคุณเกี่ยวกับคำศัพท์และแนวคิด (โดยปกติแล้วจะครอบคลุมคำจำกัดความที่ดีหรืออ้างอิงแนวคิดที่ขึ้นอยู่ทั้งหมดยกเว้นระดับประถมศึกษา)
- ถ้าเป็นไปได้ให้ระบุหมวดหมู่ที่เยื้องของคำตอบ / คำนิยามของคุณหากไม่ชัดเจนเป็นอย่างอื่น (ดูด้านบน: 1 - ตามตัวอย่างภาษา, 2 - ตรรกะทางคณิตศาสตร์, 3 - คำอธิบายทางเทคนิคและปรัชญาการเขียนโปรแกรม)
- การจัดหมวดหมู่เป็นสิ่งสำคัญ (และยังเป็นเพราะระยะบริสุทธิ์ OO จะถูกรวมอยู่ใน OO สั้น) ในขณะที่ตอบลองกับองค์ประกอบ unmix ของกระบวนทัศน์การ OO จากวิธีการที่รู้จักกันดีอื่น ๆ (และโดยไม่สับสน / ทับซ้อนพวกเขาเช่นมักจะองค์ประกอบของการเขียนโปรแกรมแบบแยกส่วนสามารถครอบคลุม / รวมกับการเขียนโปรแกรม OO): พยายามแยก OOP จาก (รวมถึงหรือเป็นส่วนหนึ่งของ) การเขียนโปรแกรมเชิงปฏิบัติการ, การเขียนโปรแกรมเชิงตรรกะ (โดยเฉพาะอย่างยิ่งความเชี่ยวชาญอย่างยิ่ง), Abstarct Data Types (ADT), Modular, Metaprogramming (generics และ สัญญา (เช่นหอไอเฟล), มุมมองเชิง (AO), (ความแตกต่างระหว่างการประกาศและการจำแนกการทำงานเช่นเดียวกับคำจำกัดความทางประวัติศาสตร์ของโครงสร้าง Dijkstra มีความชัดเจน)
ในความยากลำบากของการให้คำนิยามอย่างเป็นทางการ : น่าแปลกใจที่มันง่ายมากที่จะให้คำอธิบายทางคณิตศาสตร์ของ OOP ในรูปแบบของระบบตรรกะ (เป็นทางการ) บางอย่าง (ตามประเภทที่เป็นไปได้มากที่สุด) และการกำหนดแนวคิดหนึ่งหลังจากนั้น เราสามารถลองทำอะไรที่เป็นประโยชน์ได้มากกว่าเดิมโดยใช้วิธีการแบบนั้นเพื่อพิมพ์การตรวจสอบความปลอดภัยหรือการออกแบบภาษาใหม่กว่าเพียงแค่ความบันเทิงนามธรรมหรือการออกกำลังกาย (เช่นการค้นหาสูตร OOP ในทฤษฎีประเภท Intuitionistic , Dependent Type , อิสระใน FOL และเพียงแค่ใช้ทฤษฎีหมวดหมู่) ประเด็นหลักที่นี่ก็แปลกใจสูตรดังกล่าว IMO จะลำเอียงอย่างยิ่ง (สมบูรณ์) โดยส่วนใหญ่มีแนวโน้มที่แรกที่ไม่สมบูรณ์การทำความเข้าใจของ OOP (วิศวกรรมคอมพิวเตอร์) และจบลงด้วยการไม่สามารถเข้าถึงได้เกือบหลังจากนั้น (จึงแทบจะไม่เอื้อข้างหลังเพื่อการเขียนโปรแกรมโลก - อาจยกเว้นพบอัตราร้อยละการใช้งานกลับมาจากโลกอย่างเป็นทางการโดยการ รวมเข้ากับภาษายอดนิยม )
ใช่มันเป็นเรื่องยากที่จะให้คำจำกัดความที่ "ดี" ไม่ใช่แค่นิยาม แต่ฉันรู้สึกดีที่ได้ถามสิ่งนี้ที่นี่เพราะประสบการณ์และการมีส่วนร่วมโดยตรงของคุณ