แก้ไข:
เพื่อหลีกเลี่ยงความสับสนเพิ่มเติม: ฉันไม่ได้พูดถึงบริการเว็บและเช่นนั้น ฉันกำลังพูดถึงการจัดโครงสร้างแอปพลิเคชันภายในไม่ใช่การสื่อสารของคอมพิวเตอร์ มันเกี่ยวกับการเขียนโปรแกรมภาษาคอมไพเลอร์และการขยายกระบวนทัศน์การเขียนโปรแกรมที่จำเป็น
เดิม:
ในฟิลด์การเขียนโปรแกรมที่จำเป็นเราเห็นกระบวนทัศน์สองรายการในช่วง 20 ปีที่ผ่านมา (หรือมากกว่า): object-oriented (OO) และ service-oriented (SO) ส่วนประกอบตาม (CB)
กระบวนทัศน์ทั้งสองขยายกระบวนทัศน์การเขียนโปรแกรมที่จำเป็นโดยการแนะนำแนวคิดของโมดูล OO เรียกวัตถุเหล่านี้ (และคลาส) และให้พวกเขาสรุปข้อมูล (ฟิลด์) และโพรซีเดอร์ (เมธอด) เข้าด้วยกัน ดังนั้นในทางตรงกันข้ามแยกข้อมูล (บันทึก, ถั่ว, ... ) จากรหัส (ส่วนประกอบบริการ)
อย่างไรก็ตามมีเพียง OO เท่านั้นที่มีภาษาการเขียนโปรแกรมซึ่งสนับสนุนกระบวนทัศน์ของมัน: Smalltalk, C ++, Java และอื่น ๆ ทั้งหมดที่เข้ากันได้กับ JVM, C # และอื่น ๆ ที่รองรับ NET., Python ฯลฯ
ดังนั้นจึงไม่มีภาษาพื้นเมืองดังกล่าว มันมีอยู่ในการดำรงอยู่ด้านบนของภาษาขั้นตอนหรือภาษา OO: COM / DCOM (ไบนารี, C, C ++), CORBA, EJB, ฤดูใบไม้ผลิ, Guice (Java ทั้งหมด), ...
กรอบการทำงานของ SO เหล่านี้เห็นได้ชัดจากการสนับสนุนแนวคิดดั้งเดิมของภาษาที่หายไป
- พวกเขาเริ่มใช้คลาส OO เพื่อเป็นตัวแทนบริการและบันทึก สิ่งนี้นำไปสู่การออกแบบที่มีความแตกต่างที่ชัดเจนระหว่างคลาสที่มีวิธีการเท่านั้น (บริการ) และผู้ที่มีสาขาเท่านั้น (บันทึก) มรดกระหว่างบริการหรือบันทึกนั้นจะถูกจำลองโดยการสืบทอดของคลาส ในทางเทคนิคแล้วมันไม่ได้ถูกเก็บไว้อย่างเข้มงวด แต่โดยทั่วไปแล้วโปรแกรมเมอร์แนะนำให้ทำการเล่นเฉพาะหนึ่งในสองบทบาท
- พวกเขาใช้ภาษาภายนอกเพิ่มเติมเพื่อแสดงชิ้นส่วนที่ขาดหายไป: IDL's, การกำหนดค่า XML, คำอธิบายประกอบในรหัส Java หรือแม้แต่ DSL ที่ฝังอยู่เช่นใน Guice สิ่งนี้จำเป็นอย่างยิ่ง แต่ไม่ จำกัด เฉพาะเนื่องจากองค์ประกอบของบริการไม่ได้เป็นส่วนหนึ่งของรหัสบริการ ใน OO วัตถุสร้างวัตถุอื่น ๆ ดังนั้นจึงไม่จำเป็นต้องมีสิ่งอำนวยความสะดวกดังกล่าว แต่สำหรับ SO นั้นเป็นเพราะบริการไม่ได้ยกตัวอย่างหรือกำหนดค่าบริการอื่น ๆ
- พวกเขาสร้างเอฟเฟ็กต์ภายในแพลตฟอร์มที่ด้านบนของ OO (EJB ต้น, CORBA) ที่โปรแกรมเมอร์ต้องเขียนโค้ดทั้งหมดที่จำเป็นในการ "ขับ" ดังนั้น คลาสแสดงถึงส่วนหนึ่งของธรรมชาติของบริการเท่านั้นและจะต้องเขียนคลาสจำนวนมากเพื่อสร้างบริการด้วยกัน จานหม้อไอน้ำทั้งหมดนั้นเป็นสิ่งจำเป็นเพราะไม่มีคอมไพเลอร์ SO ซึ่งจะทำเพื่อโปรแกรมเมอร์ นี่เป็นเหมือนบางคนทำใน C สำหรับ OO เมื่อไม่มี C ++ คุณเพิ่งผ่านการบันทึกซึ่งเก็บข้อมูลของวัตถุเป็นพารามิเตอร์แรกไปยังขั้นตอนซึ่งเป็นวิธีการ ในภาษา OO พารามิเตอร์นี้มีความหมายโดยนัยและคอมไพเลอร์สร้างโค้ดทั้งหมดที่เราต้องการสำหรับฟังก์ชั่นเสมือนเป็นต้นสำหรับ SO นี่จะหายไปอย่างชัดเจน
- โดยเฉพาะอย่างยิ่งเฟรมเวิร์กที่ใหม่กว่านั้นใช้ AOP หรือวิปัสสนาเพื่อเพิ่มส่วนที่ขาดหายไปในภาษา OO สิ่งนี้ไม่นำมาซึ่งการใช้ภาษาที่จำเป็น แต่หลีกเลี่ยงรหัสแพลตฟอร์มของหม้อไอน้ำที่อธิบายไว้ในจุดก่อนหน้า
- เฟรมเวิร์กบางตัวใช้การสร้างรหัสเพื่อสร้างรหัสแผ่นบอยเลอร์ ไฟล์การกำหนดค่าใน XML หรือคำอธิบายประกอบในรหัส OO เป็นแหล่งข้อมูลสำหรับสิ่งนี้
ไม่ใช่ปรากฏการณ์ทั้งหมดที่ฉันกล่าวถึงข้างต้นสามารถนำมาประกอบกับ SO แต่ฉันหวังว่ามันชัดเจนแสดงให้เห็นว่ามีความต้องการภาษา SO เนื่องจากกระบวนทัศน์นี้ได้รับความนิยมมาก: ทำไมจึงไม่มีอย่างนั้น หรืออาจจะมีนักวิชาการบางคน แต่อย่างน้อยอุตสาหกรรมไม่ได้ใช้