~~~~~~~~~~~~~~~~~~~~ Arc.Ask3.Ru ~~~~~~~~~~~~~~~~~~~~~ 
Номер скриншота №:
✰ E4316630AA8E2BBCF8E023739396FA48__1706819340 ✰
Заголовок документа оригинал.:
✰ Multitier programming - Wikipedia ✰
Заголовок документа перевод.:
✰ Многоуровневое программирование — Википедия ✰
Снимок документа находящегося по адресу (URL):
✰ https://en.wikipedia.org/wiki/Multitier_programming ✰
Адрес хранения снимка оригинал (URL):
✰ https://arc.ask3.ru/arc/aa/e4/48/e4316630aa8e2bbcf8e023739396fa48.html ✰
Адрес хранения снимка перевод (URL):
✰ https://arc.ask3.ru/arc/aa/e4/48/e4316630aa8e2bbcf8e023739396fa48__translat.html ✰
Дата и время сохранения документа:
✰ 16.06.2024 10:27:43 (GMT+3, MSK) ✰
Дата и время изменения документа (по данным источника):
✰ 1 February 2024, at 23:29 (UTC). ✰ 

~~~~~~~~~~~~~~~~~~~~~~ Ask3.Ru ~~~~~~~~~~~~~~~~~~~~~~ 
Сервисы Ask3.ru: 
 Архив документов (Снимки документов, в формате HTML, PDF, PNG - подписанные ЭЦП, доказывающие существование документа в момент подписи. Перевод сохраненных документов на русский язык.)https://arc.ask3.ruОтветы на вопросы (Сервис ответов на вопросы, в основном, научной направленности)https://ask3.ru/answer2questionТоварный сопоставитель (Сервис сравнения и выбора товаров) ✰✰
✰ https://ask3.ru/product2collationПартнерыhttps://comrades.ask3.ru


Совет. Чтобы искать на странице, нажмите Ctrl+F или ⌘-F (для MacOS) и введите запрос в поле поиска.
Arc.Ask3.ru: далее начало оригинального документа

Многоуровневое программирование — Википедия Jump to content

Многоуровневое программирование

Из Википедии, бесплатной энциклопедии

Многоуровневое программирование (или бесуровневое программирование ) — это парадигма программирования для распределенного программного обеспечения , которая обычно следует многоуровневой архитектуре , физически разделяя различные функциональные аспекты программного обеспечения на разные уровни (например, клиент, сервер и база данных в веб-приложении). [1] ). Многоуровневое программирование позволяет разрабатывать функциональные возможности, охватывающие несколько таких уровней, в одном модуле компиляции с использованием одного языка программирования . Без многоуровневого программирования уровни разрабатываются с использованием разных языков, например JavaScript для веб-клиента, PHP для веб-сервера и SQL для базы данных. [2] Многоуровневое программирование часто интегрируется в языки общего назначения путем расширения их поддержки распространения. [3]

Концепции многоуровневого программирования были впервые предложены Хопом. [4] и ссылки [5] языки и нашли промышленное применение в таких решениях, как Ocsigen, [6] Опа , [7] ВебШарпер , [8] Метеор [9] или ГВТ . [10]

Многоуровневое программирование обеспечивает глобальное представление о распределенной системе. Этот аспект был показан аналогично другим парадигмам программирования, таким как хореографическое программирование . [11] макропрограммирование , [12] и совокупные вычисления . [13] [14]

Контекст [ править ]

Код разных уровней может выполняться распределенно на разных сетевых компьютерах . Например, в трехуровневой архитектуре система разделена на три основных уровня — обычно уровень представления, бизнес-уровень и уровень данных. Преимущество этого подхода заключается в том, что за счет разделения системы на уровни функциональность, реализованная на одном из уровней, может быть изменена независимо от других уровней. С другой стороны, такое архитектурное решение разбрасывает сквозную функциональность, принадлежащую нескольким уровням, по нескольким модулям компиляции.

В многоуровневом программировании разные уровни реализуются с использованием одного языка программирования. Различные серверные части компиляции учитывают уровень назначения (например, Java для сервера и JavaScript для веб-браузера). Следовательно, функциональность, распределенная по уровням, может быть реализована в одной единице компиляции многоуровневой программы.

Пример [ править ]

По своей сути многоуровневые языки позволяют разработчикам определять для разных частей кода уровни, к которым принадлежит код. Возможности языка, которые позволяют это определение, весьма разнообразны в разных многоуровневых языках: от промежуточного уровня до аннотаций и типов . В следующем примере показано клиент-серверное приложение Echo, иллюстрирующее различные подходы. В этом примере клиент отправляет сообщение на сервер, а сервер возвращает то же сообщение клиенту, где оно добавляется в список полученных сообщений.

Приложение Echo в Hop.js [ править ]

service   echo  ()   { 
   var   input   =   <input   type=  "text"   /> 
   return   <html> 
     <body   onload=~{ 
       var   ws   =   new   WebSocket  (  "ws://localhost:"   +   ${hop.port}   +   " /hop/ws"  ) 
       ws.onmessage   =   function  (  событие  )   {   document.getElementetById  (  "список"  )  .   AppendChild  (  <li>${event.data}</li>  )   } 
     }> 
       <div> 
         ${input} 
         <button   onclick=~{   ws.send  (  ${input}.value  )   }>Echo!</button > 
       </div> 
       <ul   id=  "list"   /> 
     </body> 
   </html> 
 } 

 вар   wss   =   новый   WebSocketServer  (  "ws"  ) 
 wss.onconnection   =   функция  (  событие  )  { 
   вар   ws   =   event.value 
   ws. onmessage   =   функция  (  событие  )   {   ws.send  (  event.value  )   } 
 } 

Hop использует промежуточную обработку для встраивания кода, который должен быть запущен на клиенте, в серверную программу: используя нотацию ~{…}, код обработчиков onload (строка 4) и onclick (строка 10) не выполняется немедленно, но сервер генерирует код для последующего выполнения на клиенте. С другой стороны, нотация ${…} позволяет избежать одного уровня генерации программы. Выражения hop.port (строка 5), event.data (строка 6) и input (строки 9 и 10) оцениваются внешней серверной программой, и значения, которые они оценивают, вводятся в сгенерированную клиентскую программу. Hop поддерживает полноэтапное программирование , т. е. выражения ~{…} могут быть произвольно вложены, так что не только программы на стороне сервера могут генерировать программы на стороне клиента, но и программы на стороне клиента могут генерировать другие программы на стороне клиента.

HTML может быть встроен непосредственно в код Hop. HTML, сгенерированный на сервере (строки 2–14), передается клиенту. HTML, сгенерированный на клиенте, можно добавить на страницу с помощью стандартного DOM API (строка 6). Hop поддерживает двустороннюю связь между работающим сервером и работающим экземпляром клиента через свою стандартную библиотеку. Клиент подключается к серверу WebSocket через стандартный API HTML5 (строка 5) и отправляет текущее входное значение (строка 10). Сервер открывает сервер WebSocket (строка 17), который возвращает значение обратно клиенту (строка 20). Так называемые службы, которые выполняются на сервере и создают значение, которое возвращается клиенту, вызвавшему службу. Например, служба echo (строка 1) создает HTML-страницу, передаваемую веб-клиенту приложения Echo. Таким образом, код служебного блока выполняется на сервере.

Приложение Echo в ссылках [ править ]

fun   echo  (  item  )   server   { 
   item 
 } 

 fun   main  ()   server   { 
   page 
     <  html  > 
       <  body  > 
         <  form   l  :  onsubmit  =  "{appendChildren(<li>{stringToXml(echo(item))}</li>, getNodeById ("  list  ")}"  > 
           <  input   l  :  name  =  "item"   /> 
           <  button   type  =  "submit"  >  Echo  !</  button  > 
         </  form  > 
         <  ul   id  =  "list"   /> 
       </  body  > 
     </  html  > 
 } 

 основной  () 

Links использует аннотации к функциям, чтобы указать, выполняются ли они на клиенте или на сервере (строки 1 и 5). По запросу клиента сервер выполняет основную функцию (строка 18), которая формирует код, отправляемый клиенту. Links позволяет встраивать XML-код (строки 7–15). Атрибуты XML с префиксом l: обрабатываются особым образом. Атрибут l:name (строка 10) объявляет идентификатор, к которому привязано значение поля ввода. Идентификатор можно использовать где угодно (строка 9). Код, который должен быть выполнен для обработчика l:onsubmit (строка 9), не выполняется сразу, а компилируется в JavaScript для выполнения на стороне клиента. Фигурные скобки обозначают код ссылок, встроенный в XML. Обработчик l:onsubmit отправляет текущий элемент входного значения на сервер, вызывая echo. Элемент возвращается сервером и добавляется в список полученных элементов с использованием стандартных API-интерфейсов DOM. Обращение к серверу (строка 9) не блокирует клиента. Вместо этого продолжение на клиенте вызывается, когда доступен результат вызова. Взаимодействие клиент-сервер основано на стиле передачи возобновления: стиля передачи продолжения Преобразование и дефункционализация . Удаленные вызовы реализуются путем передачи имени функции для продолжения и данных, необходимых для продолжения вычислений.

Приложение Echo в ScalaLoci [ править ]

@multitier   object   Application   { 
   @peer   type   Server   <:   {   type   Tie   <:   Single  [  Client  ]   } 
   @peer   type   Client   <:   {   type   Tie   <:   Single  [  Server  ]   } 

   val   message   =   on  [  Client  ]   {   Event  [  String  ]( )   } 
   val   echoMessage   =   на  [  сервере  ]   {   message  .   asLocal   } 

   Def   main  ()   =   on  [  Клиент  ]   { 
     val   items   =   echoMessage  .   asLocal  .   список 
     val   список   =   Сигнал   {   ол  (  элементы  ()   карта   {   сообщение   =>   li  (  сообщение  )   })   } 
     val   inp   =   input  .   рендерить 
     дом  .   документ  .   body   =   body  ( 
       div  ( 
         inp  , 
         button  (  onclick   =   {   )   =>   message.fire  (  )  ,  inp.value  :  )  )   })(  "Echo!  ) 
       list.asFrag  (  "  .   оказывать 
   } 
 } 

ScalaLoci — это язык, предназначенный для общих распределенных систем, а не только для Интернета, т. е. он не ограничивается архитектурой клиент-сервер. С этой целью ScalaLoci поддерживает одноранговые типы для кодирования различных уровней на уровне типа . Типы размещения используются для назначения местоположений данным и вычислениям. ScalaLoci поддерживает многоуровневые реактивы — языковые абстракции для реактивного программирования, которые размещаются в определенных местах — для формирования потоков данных, пересекающих разные узлы.

Приложение сначала определяет поле ввода (строка 11) с помощью библиотеки ScalaTags. [15] Значение этого поля используется в обработчике событий нажатия кнопки (строка 15) для запуска события сообщения с текущим значением поля ввода. Затем значение передается на сервер (строка 6) и обратно клиенту (строка 9). На клиенте значение события накапливается с помощью функции list и сопоставляется со списком HTML (строка 10). Этот список затем используется в HTML (строка 16) для отображения предыдущих входных данных.

Список многоуровневых языков программирования [ править ]

Ссылки [ править ]

  1. ^ Халл, Ричард; Тиманн, Питер; Уодлер, Филип (2007). «Результаты рабочей группы 07051 – Парадигмы программирования для Интернета: веб-программирование и веб-сервисы» . Парадигмы программирования для Интернета: веб-программирование и веб-сервисы . Материалы семинара Дагштуля. 07051 . Дагштуль, Германия: Международный центр встреч и исследований в области компьютерных наук (IBFI).
  2. ^ Вайзенбургер, Паскаль; Вирт, Йоханнес; Сальванески, Гвидо (2020). «Обзор многоуровневого программирования» (PDF) . АКМ Компьютер. Сурв . 53 (4): 81:1–81:35. дои : 10.1145/3397495 . S2CID   218517772 .
  3. ^ Колдуэлл, Сэм (2016). «Языки общего назначения, расширенные для распространения» . Миллер, Хизер (ред.). Модели программирования для распределенных вычислений .
  4. ^ Перейти обратно: а б Серрано, Мануэль (2012). «Многоуровневое программирование в Hop» . Коммун. АКМ . 55 (8): 53–59. дои : 10.1145/2240236.2240253 . S2CID   2152326 .
  5. ^ Перейти обратно: а б Купер, Эзра (2006). «Ссылки: веб-программирование без уровней». Формальные методы для компонентов и объектов . Конспекты лекций по информатике. Том. 4709. стр. 266–296. дои : 10.1007/978-3-540-74792-5_12 . hdl : 20.500.11820/ef5f100a-0366-4b85-8ef1-622fd7fbb53a . ISBN  978-3-540-74791-8 . S2CID   16397220 .
  6. ^ Перейти обратно: а б Балат, Винсент (2006). «Ocsigen: ввод веб-взаимодействия с объективным Caml» : 84–94. дои : 10.1145/1159876.1159889 . S2CID   6131454 . {{cite journal}}: Для цитирования журнала требуется |journal= ( помощь )
  7. ^ Перейти обратно: а б Райхенбах-Теллер Д. и Сино Франсуа-Режи. (2010). Opa: языковая поддержка для разумного, безопасного и надежного Интернета. Материалы исследования OWASP AppSec , 2010 г. (1).
  8. ^ Перейти обратно: а б Бьорнсон, Джоэл; Таяновский, Антон; Гранич, Адам (2010). «Составление реактивных графических интерфейсов в F # с использованием WebSharper». Реализация и применение функциональных языков . Конспекты лекций по информатике. Том. 6647. Берлин, Гейдельберг: Springer-Verlag. п. 49. дои : 10.1007/978-3-642-24276-2_13 . ISBN  978-3-642-24275-5 .
  9. ^ Перейти обратно: а б Стрэк, Исаак (январь 2012 г.). Начало работы с фреймворком Meteor JavaScript . Бирмингем. ISBN  978-1-78216-083-0 . OCLC   823718999 . {{cite book}}: CS1 maint: отсутствует местоположение издателя ( ссылка )
  10. ^ Перейти обратно: а б Кереки, Федерико, 1960- (2011). Essential GWT: создание веб-приложений с помощью набора инструментов Google Web 2 . Река Аппер-Сэддл, Нью-Джерси: Аддисон-Уэсли. ISBN  978-0-321-70563-1 . OCLC   606556208 . {{cite book}}: CS1 maint: несколько имен: список авторов ( ссылка ) CS1 maint: числовые имена: список авторов ( ссылка )
  11. ^ Джяллоренцо, Саверио; Монтези, Фабрицио; Перессотти, Марко; Судья Дэвид; Сальванески, Гвидо; Вайзенбургер, Паскаль (2021). Мёллер, Андерс; Шридхаран, Ману (ред.). «Многопартийные языки: хореографические и многоуровневые случаи» . 35-я Европейская конференция по объектно-ориентированному программированию (ECOOP 2021) . Международные труды Лейбница по информатике (LIPIcs). 194 . Дагштуль, Германия: Замок Дагштуль – Центр информатики Лейбница: 22:1–22:27. doi : 10.4230/LIPIcs.ECOOP.2021.22 . ISBN  978-3-95977-190-0 . S2CID   235748561 .
  12. ^ Касадеи, Роберто (11 января 2023 г.). «Макропрограммирование: концепции, современное состояние и возможности макроскопического моделирования поведения» . Обзоры вычислительной техники ACM . 55 (13с). Ассоциация вычислительной техники (ACM): 1–37. arXiv : 2201.03473 . дои : 10.1145/3579353 . ISSN   0360-0300 . S2CID   245837830 .
  13. ^ Бил, Джейкоб; Пианини, Данило; Вироли, Мирко (2015). «Агрегатное программирование для Интернета вещей». Компьютер . 48 (9). Институт инженеров по электротехнике и электронике (IEEE): 22–30. дои : 10.1109/mc.2015.261 . hdl : 11585/520779 . ISSN   0018-9162 . S2CID   26413 .
  14. ^ Одрито, Джорджио; Касадеи, Роберто; Дамиани, Ферруччо; Сальванески, Гвидо; Вироли, Мирко (2022). Али, Карим; Витек, Ян (ред.). «Функциональное программирование для распределенных систем с помощью XC» . 36-я Европейская конференция по объектно-ориентированному программированию (ECOOP 2022) . Международные труды Лейбница по информатике (LIPIcs). 222 . Дагштуль, Германия: Schloss Dagstuhl – Leibniz-Zentrum für Informatik: 20:1–20:28. doi : 10.4230/LIPIcs.ECOOP.2022.20 . ISBN  978-3-95977-225-9 . S2CID   249961384 .
  15. ^ «СкалаТеги» . www.lihaoyi.com . Проверено 11 октября 2021 г.
  16. ^ Серрано, Мануэль (2006). «Хоп: язык программирования для Интернета 2.0» : 975–985. дои : 10.1145/1176617.1176756 . S2CID   14306230 . {{cite journal}}: Для цитирования журнала требуется |journal= ( помощь )
  17. ^ Серрано, Мануэль (2016). «Взгляд на Hopjs». Материалы 21-й Международной конференции ACM SIGPLAN по функциональному программированию . стр. 180–192. дои : 10.1145/2951913.2951916 . ISBN  9781450342193 . S2CID   18393160 .
  18. ^ Фаулер, Саймон (2019). «Исключительные типы асинхронных сеансов: типы сеансов без уровней» . Учеб. Программа АКМ. Ланг . 3 (ПОПЛ): 28:1–28:29. дои : 10.1145/3290341 . hdl : 1808/27512 . S2CID   57757469 .
  19. ^ Члипала, Адам (2015). «Ur/Web: простая модель веб-программирования» : 153–165. дои : 10.1145/2676726.2677004 . S2CID   9440677 . {{cite journal}}: Для цитирования журнала требуется |journal= ( помощь )
  20. ^ Раданн, Габриэль (2018). «Бесуровневое веб-программирование в целом». Спутник веб-конференции 2018 на веб-конференции 2018 — WWW '18 . стр. 681–689. дои : 10.1145/3184558.3185953 . ISBN  9781450356404 . S2CID   3304415 .
  21. ^ Вайзенбургер, Паскаль (2018). «Разработка распределенных систем с помощью ScalaLoci» . Учеб. Программа АКМ. Ланг . 2 (OOPSLA): 129:1–129:30. дои : 10.1145/3276499 . S2CID   53090153 .
  22. ^ Филипс, Лора (2014). «К бесуровневой веб-разработке без многоуровневых языков». Материалы Международного симпозиума ACM 2014 года по новым идеям, новым парадигмам и размышлениям о программировании и программном обеспечении . стр. 69–81. дои : 10.1145/2661136.2661146 . ISBN  9781450332101 . S2CID   15774367 .
  23. ^ Филипс, Лора (2018). «Назначение уровней на основе поиска для оптимизации автономной доступности в многоуровневых веб-приложениях» . Журнал программирования . 2 (2): 3. arXiv : 1712.01161 . doi : 10.22152/programming-journal.org/2018/2/3 . S2CID   11256561 .
  24. ^ Рейндерс, Боб (2014). «Многоуровневое функциональное реактивное программирование для Интернета». Материалы Международного симпозиума ACM 2014 года по новым идеям, новым парадигмам и размышлениям о программировании и программном обеспечении . стр. 55–68. дои : 10.1145/2661136.2661140 . ISBN  9781450332101 . S2CID   16761616 .
  25. ^ Карретон, Андони Ломбиде (2010). «Слабосвязанное распределенное реактивное программирование в мобильных одноранговых сетях». Объекты, модели, компоненты, шаблоны . Конспекты лекций по информатике. Том. 6141. стр. 41–60. дои : 10.1007/978-3-642-13953-6_3 . ISBN  978-3-642-13952-9 .
  26. ^ Дедекер, Джесси (2006). «Амбиентно-ориентированное программирование в Ambient Talk » . Ambient-ориентированное программирование в AmbientTalk . Конспекты лекций по информатике. Том. 4067. стр. 230–254. дои : 10.1007/11785477_16 . ISBN  978-3-540-35726-1 .
  27. ^ VII, Том Мерфи (2007). «Типобезопасное распределенное программирование с использованием ML5». Надежные глобальные вычисления . Конспекты лекций по информатике. Том. 4912. стр. 108–123. дои : 10.1007/978-3-540-78663-4_9 . ISBN  978-3-540-78662-7 . S2CID   12534714 .
  28. ^ Экблад, Антон; Классен, Коэн (11 мая 2015 г.). «Бесшовная, ориентированная на клиента модель программирования для типобезопасных веб-приложений» . Уведомления ACM SIGPLAN . 49 (12): 79–89. дои : 10.1145/2775050.2633367 . ISSN   0362-1340 .
  29. ^ «Fun (язык программирования для Интернета в реальном времени)» . marcuswest.in . Проверено 4 мая 2020 г.
  30. ^ Лейен, Даан (2014). «Кока: программирование с использованием типов полиморфных эффектов строк» ​​. Электронные труды по теоретической информатике . 153 : 100–126. arXiv : 1406.2061 . дои : 10.4204/EPTCS.153.8 . S2CID   14902937 .
  31. ^ Нойбауэр, Матиас (2005). «От последовательных программ к многоуровневым приложениям путем преобразования программ». Материалы 32-го симпозиума ACM SIGPLAN-SIGACT по принципам языков программирования . стр. 221–232. дои : 10.1145/1040305.1040324 . ISBN  158113830X . S2CID   10338936 .
  32. ^ ЧонгСтивен; ЛюДжед; С, МайерсЭндрю; ЦиСинь; ВикрамК; ЧжэнЛантиан; ЧжэнСинь (14 октября 2007 г.). «Защита веб-приложений с помощью автоматического разделения» . Обзор операционных систем ACM SIGOPS . 41 (6): 31–44. дои : 10.1145/1323293.1294265 . hdl : 1813/5769 .
  33. ^ Манолеску, Драгош (2008). «Вольта: разработка распределенных приложений путем перекомпиляции» . Программное обеспечение IEEE . 25 (5): 53–59. дои : 10.1109/MS.2008.131 . S2CID   24360031 .
  34. ^ Тилевич, Эли (2002). «J-Orchestra: автоматическое разделение приложений Java». ЭКООП 2002 — Объектно-ориентированное программирование . Конспекты лекций по информатике. Том. 2374. стр. 178–204. дои : 10.1007/3-540-47993-7_8 . hdl : 1853/6531 . ISBN  978-3-540-43759-8 .
  35. ^ Берри, Жерар; Николя, Сиприен; Серрано, Мануэль (2011). "Хип-хоп" . Материалы 1-го международного семинара ACM SIGPLAN по языкам программирования и системным технологиям для интернет-клиентов . Нью-Йорк, Нью-Йорк, США: ACM Press. п. 49. дои : 10.1145/2093328.2093337 . ISBN  978-1-4503-1171-7 . S2CID   1280230 .
  36. ^ Тайвиссен, Джон А. (2016). «Неявное распространение повсеместно параллельных программ: расширенное резюме» : 1. doi : 10.1145/2957319.2957370 . S2CID   6124391 . {{cite journal}}: Для цитирования журнала требуется |journal= ( помощь )
  37. ^ Зданцевич, Стив (2002). «Безопасное разбиение программ» . АКМ Транс. Вычислить. Сист . 20 (3): 283–328. дои : 10.1145/566340.566343 . S2CID   1776939 .
  38. ^ Гуха, Арджун; Жаннен, Жан-Батист; Нигам, Рахит; Танген, Джейн; Шамбо, Риан (2017). Лернер, Бенджамин С.; Бодик, Растислав; Кришнамурти, Шрирам (ред.). «Fision: безопасное динамическое разделение кода для JavaScript» . 2-й саммит по достижениям в языках программирования (SNAPL 2017) . Международные труды Лейбница по информатике (LIPIcs). 71 . Дагштуль, Германия: Schloss Dagstuhl–Leibniz-Zentrum fuer Informatik: 5:1–5:13. doi : 10.4230/LIPIcs.SNAPL.2017.5 . ISBN  978-3-95977-032-3 .
  39. ^ Чонг, Стивен (2007). «SIF: Обеспечение конфиденциальности и целостности веб-приложений» . {{cite journal}}: Для цитирования журнала требуется |journal= ( помощь )
  40. ^ Гроневеген, Дэнни М. (2008). «WebDSL: предметно-ориентированный язык для динамических веб-приложений» : 779–780. дои : 10.1145/1449814.1449858 . S2CID   8073129 . {{cite journal}}: Для цитирования журнала требуется |journal= ( помощь )
  41. ^ Сьюэлл, Питер (2005). «Острый: разработка языка программирования высокого уровня для распределенных вычислений» : 15–26. дои : 10.1145/1086365.1086370 . S2CID   1308126 . {{cite journal}}: Для цитирования журнала требуется |journal= ( помощь )
  42. ^ Хемель, Зеф (2011). «Декларативное программирование мобильного Интернета с помощью Mobl». Материалы международной конференции ACM 2011 года по языкам и приложениям объектно-ориентированных систем программирования . стр. 695–712. дои : 10.1145/2048066.2048121 . ISBN  9781450309400 . S2CID   10480906 .
  43. ^ Ричард-Фой, Жюльен (2013). «Эффективные абстракции высокого уровня для веб-программирования». Материалы 12-й международной конференции «Генераторное программирование: концепции и опыт» . стр. 53–60. дои : 10.1145/2517208.2517227 . ISBN  9781450323734 . S2CID   14305623 .
Arc.Ask3.Ru: конец оригинального документа.
Arc.Ask3.Ru
Номер скриншота №: E4316630AA8E2BBCF8E023739396FA48__1706819340
URL1:https://en.wikipedia.org/wiki/Multitier_programming
Заголовок, (Title) документа по адресу, URL1:
Multitier programming - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть, любые претензии не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, денежную единицу можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)