Архив метки: интерфейсы

Лекция 26. Сервисная архитектура приложений. Веб-сервисы

Веб-сервисы — один из способов достижения интероперабельности в распределенных приложениях, основанный на использовании в качестве промежуточного слоя (middleware) стандартные протоколы передачи данных (например, HTTP). Под сервисом подразумевается программная система с возможностью взаимодействия с другими программами через сеть, для которой заданы интерфейс и протокол сообщений для обмена данными. Благодаря относительной простоте реализации веб-сервисов по сравнению с другими распределенными архитектурами, они пользуются большой популярностью при разработке программных систем, состоящих из слабо связанных компонентов.

Выделяют два основных типа веб-сервисов в зависимости от используемых технологий:

  • SOAP-сервисы, основанные на стандартах для веб-сервисов, разработанных международным консорциумом W3C. Этот вид сервисов более сложен в разработке и использовании, поэтому применяется в тех случаях, когда важно соблюдение стандартов и высокая степень формализации. Одна из основных областей применения SOAP-сервисов — коммерческие (enterprise) системы.
  • REST-сервисы, использующие для передачи данных методы протокола HTTP (GET, PUT, POST и DELETE). В отличие от SOAP-сервисов, интерфейс REST-сервисов чаще всего определяется неформально; при передаче данных используются стандарты (де)сериализации XML, JSON, YAML и другие. Характерный вариант применения REST-сервисов — доступ к API в веб-приложениях; простота сервисов упрощает их интеграцию (web mashup).

Презентация: Лекция 26.

Continue reading

Лекция 20. Интероперабельность

Важный аспект спецификации интерфейсов — это возможность объединять в единое целое компоненты программной системы, разработанные на разных языках программирования и выполняющиеся в различных средах. Технологии для объединения разнородных модулей программы называют в программной инженерии интероперабельностью или межпроцессным взаимодействием (inter-process communication, IPC).

В крупных программных проектах интероперабельность зачастую необходима:

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

Презентация: Лекция 20.

Демонстрация интероперабельности через CORBA на примере целочисленных последовательностей здесь.

Continue reading

Лекция 19. Интерфейсы и типы данных (часть 2)

Основное применение систем типов данных в языках программирования — минимизация появления ошибок, связанных с неправильной интерпретацией данных. В «идеальном» языке с точки зрения типобезопасности результат любой операции — корректное значение типа данных, который может быть определен заранее (например, во время компиляции). На практике каждый язык программирования устанавливает свои рамки безопасности типов:

  • Языки со слабой типизацией, такие как C и C++, позволяют интерпретировать данные предельно широко. С одной стороны, это может повысить эффективность работы приложения, с другой — приводит к трудно находимым дефектам.
  • Языки с сильной типизацией накладывают ограничения на потенциально опасные операции, например, неявные преобразования типов. Например, в Python, в отличие от большинства языков программирования, не выполняется автоматического приведения чисел к строкам.

К сожалению, обеспечение абсолютного отсутствия ошибок типов — чрезвычайно трудоемкая задача (фактически, частный случай верификации исходного кода программы), поэтому в современных языках программирования роль системы типов состоит в устранении наиболее тривиальных ошибок; их дальнейший поиск — задача, решаемая в процессе тестирования. В этом плане видна тенденция к увеличению роли человеческого фактора: большинство современных языков программирования (Python, Ruby, JavaScript) обладают динамической типизацией, то есть проверка ошибок типов происходит во время выполнения программы.

Презентация: Лекция 19.

Continue reading

Лекция 18. Интерфейсы и типы данных (часть 1)

Одно из базовых средств при определении интерфейсов в программировании — типы данных. Тип позволяет понять, каким образом следует интерпретировать данные в памяти компьютера и какие операции к этим данным применимы. Роль типов в определении интерфейсов различается в зависимости от выбранной парадигмы программирования:

  • В функциональных языках программирования типы определяют допустимые аргументы функций и возвращаемые функциями результаты.
  • В процедурных ЯП типы используются не только для спецификации функций, но и для задания глобального состояния программы.
  • В объектно-ориентированном программировании типы (классы) задают методы для работы с данными, которые, как правило, скрыты от пользователя. В зависимости от модели данных языка программирования, обычные методы могут дополняться свойствами, событиями, операторами и так далее.

Презентация: Лекция 18.

Continue reading

Лекция 17. Интерфейсы в программировании

При разработке любой программы непременно приходится использовать «чужие» компоненты, такие как встроенная библиотека типов и стандартных функций или сторонние библиотеки. Более сложные приложения могут сами состоять из многих компонентов, которые надо интегрировать между собой; зачастую эта задача усложняется тем, что взаимодействующие модули написаны на различных языках программирования и функционируют в различных операционных средах.

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

Презентация: Лекция 17.

Continue reading