Редагувати:
Щоб уникнути подальшої плутанини: я не говорю про веб-сервіси та інше. Я говорю про внутрішнє структурування додатків, а не про те, як спілкуються комп'ютери. Йдеться про мови програмування, компілятори та про те, як розширюється імперативна парадигма програмування.
Оригінал:
В області імперативного програмування ми бачили дві парадигми за останні 20 років (або більше): об'єктно-орієнтовану (ОО) та службово орієнтовану (SO). на основі компонентів (КБ).
Обидві парадигми розширюють імперативну парадигму програмування, вводячи власне поняття модулів. ОО називає їх об'єктами (і класами) і дозволяє їм інкапсулювати як дані (поля), так і процедури (методи) разом. ТАК, навпаки, відокремлює дані (записи, боби, ...) від коду (компоненти, послуги).
Однак лише у OO є мови програмування, які в основному підтримують її парадигму: Smalltalk, C ++, Java та всі інші сумісність з JVM, C # та всі інші .NET-сумісність, Python тощо.
Так немає такої рідної мови. Він з'являється лише на основі процедурних мов або мов OO: COM / DCOM (бінарний, C, C ++), CORBA, EJB, Spring, Guice (всі Java), ...
Ці рамки ПС явно страждають від відсутності підтримки рідною мовою своїх концепцій.
- Вони починають використовувати класи OO для представлення служб та записів. Це призводить до розробок, де чітко розмежовано класи, у яких є лише методи (послуги), і ті, у яких є лише поля (записи). Потім спадкування між службами або записами моделюється успадкуванням класів. Технічно його не дотримується так суворо, але загалом програмістам рекомендується робити класи, щоб грати лише одну з двох ролей.
- Вони використовують додаткові зовнішні мови для представлення відсутніх частин: IDL, XML-конфігурації, Анотації в коді Java або навіть вбудований DSL, як у Guice. Це особливо потрібно, але не обмежується цим, оскільки склад послуг не входить до самого коду послуги. В OO об'єкти створюють інші об'єкти, тому немає необхідності в таких об'єктах, але в SO це так, оскільки служби не інстанціюють і не налаштовують інші служби.
- Вони встановлюють внутрішньоплатформенний ефект поверх OO (ранній EJB, CORBA), де програміст повинен записати весь код, необхідний для "приводу" SO. Заняття представляють лише частину характеру послуги, і багато класів повинні бути написані, щоб формувати послугу разом. Вся ця плита котла необхідна, оскільки немає компілятора SO, який би це зробив для програміста. Це так само, як деякі люди робили це в C для OO, коли не було C ++. Ви просто передаєте запис, який містить дані об'єкта в якості першого параметра, до процедури, що є методом. У мові ОО цей параметр неявний, і компілятор виробляє весь код, який нам потрібен для віртуальних функцій тощо. Для ТА цього явно відсутнє.
- Особливо новіші рамки широко використовують AOP або самоаналіз для додавання відсутніх частин до мови OO. Це не приносить необхідної виразності мови, але уникає коду платформи котла, описаного в попередньому пункті.
- Деякі рамки використовують генерацію коду для створення коду пластини котла. Файли конфігурації в XML або примітки в коді OO є джерелом інформації для цього.
Не всі явища, про які я згадував вище, можна віднести до SO, але я сподіваюся, що це чітко свідчить про необхідність мови SO. Оскільки ця парадигма настільки популярна: чому її немає? Або, можливо, є деякі академічні, але принаймні галузь не використовує.