Раздел 4Разработка современных программных систем

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

Лекции

21. Интерфейсы в программировании

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

22. Интерфейсы и типы данных: общие положения

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

23. Интерфейсы и типы данных: системы типов данных

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

24. Интероперабельность

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

25. Хранение данных в приложениях

В самых разнообразных приложениях часто возникает задача хранения данных вне оперативной памяти (data persistence), чтобы информация оставалась доступной после завершения работы программы, ее породившей. Также требуется, чтобы из сохраненных данных можно было восстановить объект, эквивалентный сохраненному. Детальнее→

26. Сервисная архитектура приложений

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

27. Введение в облачные вычисления

Облачные вычисления (cloud computing) — быстро развивающаяся область распределенных вычислений. Основная идея облачных вычислений — это предоставление потребителям готовой распределенной инфраструктуры, которая является прозрачной для выполняющихся приложений. Таким образом, при разработке облачных приложений можно игнорировать наиболее сложные для имплементации моменты, связанные с организацией распределенных вычислений, и вместо этого использовать высокоуровневые программные интерфейсы. Детальнее→

Темы для самостоятельной работы

  • Инверсия управления в современных платформах разработки.
  • Интерфейсы внешних функций в средах программирования.
  • Агрегационные типы данных в языках программирования.
  • Функции первого класса.
  • Смеси (traits, mixins) как промежуточное звено между интерфейсами и наследованием.
  • Ковариантность и контравариантность типов данных в языках программирования.
  • Средства межпроцессного взаимодействия в операционных системах.
  • Особенности повторного использования ПО с открытым исходным кодом.
  • Средства инженерии КПИ в современных средах разработки.
  • Системы типа ActiveRecord и DataMapper в современных платформах разработки ПО.
  • Децентрализованные сети. Internet of Things. Блокчейн.
  • Платформы для разработки SOAP- и REST-сервисов.
  • Асинхронный обмен данными с веб-сервисами. Веб-сокеты. Фреймворк Node.js.
  • Анализ современных платформ IaaS, PaaS, SaaS.
  • Знакомство с каркасами для распределенных вычислений (Hadoop, Spark).
  • Базы данных NoSQL.

Контрольные вопросы

  • Использование интерфейсов в программировании. Аппаратные и программные (в широком понимании) интерфейсы.
  • Отличия и общие черты бинарных и программных интерфейсов (ABI и API).
  • Бинарные программные интерфейсы: характеристика и области применения.
  • Инверсия управления.
  • Виртуализация как способ взаимодействия разноязычных программ.
  • Интерфейс внешних функций.
  • Взаимосвязь между интерфейсами и типами данных.
  • Интерфейсы типов в парадигме ООП.
  • Стандарт ISO 11404. Классификация типов данных.
  • Генерируемые та агрегигрованные типы данных.
  • Иерархии типов данных в языках программирования.
  • Функции как тип данных.
  • Безопасность типов и безопасность памяти.
  • Сильная и слабая типизация.
  • Статическая и динамическая типизация.
  • Совместимость типов. Виды типизации по совместимости: структурная, номинальная, утиная.
  • Приведения типов данных.
  • Виды полиморфизма.
  • Полиморфизм подтипов. Принцип подстановки Барбары Лисков.
  • Полиморфизм и наследование в ООП.
  • Ковариантность, контравариантность и инвариантность типов данных.
  • Понятие интероперабельности. Проблемы, решаемые за счет интероперабельности.
  • Межпроцессное взаимодействие в POSIX / System V.
  • Общая характеристика и классификация промежуточного ПО (middleware).
  • Удаленный вызов процедур (RPC) и его реализации.
  • Общая структура системы CORBA.
  • Язык описания интерфейсов OMG IDL.
  • Очереди сообщений.
  • Сервис-ориентированная архитектура, ее преимущества и недостатки.
  • Понятие веб-сервисов. Разработка с веб-сервисами. Интеграция сервисов.
  • SOAP-сервисы. Язык спецификации WSDL.
  • Основные принципы архитектури REST.
  • Особенности реализации REST-сервисов.
  • Интерфейсы SOAP- та REST-сервисов в средах программирования. Синхронный и асинхронный вызов методов сервисов.
  • Основные положения облачной архитектуры.
  • Технологии, от которых зависит облачная архитектура.
  • Уровни облачной архитектуры.
  • Модели развертывания облачной архитектуры. Примеры открытых облачных сервисов.
  • Обзор понятия BigData.
  • Шаблон распределенной обработки данных MapReduce.
  • Облачные файловые системы.
  • Введение в облачные базы данных. Понятие NoSQL.
  • Применение NoSQL-баз данных в облачных вычислениях.
  • Каркасы облачных приложений. Apache Hadoop.

Литература

  • Лаврищева Е.М. Программная инженерия. Учебник. — К.: Академпериодика. — 2008. — 319 с.
  • Sommerville I. Software engineering, 9th ed. — Boston, Massachusetts: Addison-Wesley. — 2011. — 790 p.
  • Gamma E., Helm R., Johnson R., Vlissides J. Design patterns. — Upper Saddle River, New Jersey: Pearson Education. — 1994. — 395 p.
  • Heineman G.T., Councill W.T. Component-based software engineering. — Boston, Massachusetts: Addison-Wesley. — 2001. — 818 p.
  • Pressman R.S. Software engineering: a practitioner’s approach. — Basingstoke: Palgrave Macmillan. — 2005. — 880 p.
  • Ахо А.В., Хопкрофт Дж., Ульман Дж.Д. Структуры данных и алгоритмы. — Изд. дом «Вильямс». — 2000. — 384 с.
  • Object-oriented analysis and design with applications / Booch G., Maksimchuck R.A., Engle M.W. et al. — Upper Saddle River, New Jersey: Pearson Education. — 2007. — 720 p.
  • Pfleeger S.L., Atlee J.M. Software engineering: theory and practice. — Upper Saddle River, New Jersey: Prentice Hall. — 2010. — 756 p.
  • Szyperski C. Component software: beyond object-oriented programming. — Upper Saddle River, New Jersey: Pearson Education. — 2002. — 589 p.
  • Abelson H., Sussman G.J., Sussman J. Structure and interpretation of computer programs. — Cambridge, Massachusetts: MIT Press. — 1996. — 684 p.
  • Ho C., Harrop R., Schaefer C. Pro Spring. — Apress. — 2014. — 728 p.
  • Aleksy M., Korthaus A., Schader M. Implementing distributed systems with Java and CORBA. — Springer. — 2005. — 346 p.
  • Coulouris G.F., Dollimore J., Kindberg T. Distributed systems: concepts and design. — Upper Saddle River, New Jersey: Pearson Education. — 2011. — 927 p.
  • Bell M. Service-oriented modeling. — Hoboken, New Jersey: John Wiley & Sons. — 2008. — 368 p.
  • Fowler M. Patterns of enterprise application architecture. — Boston, Massachusetts: Addison-Wesley. — 2012. — 557 p.
  • Buyya R., Broberg J., Goscinski A.M. Cloud computing: principles and paradigms. — Hoboken, New Jersey: John Wiley & Sons. — 2010. — 664 p.
  • Krafzig D., Banke K., Slama D. Enterprise SOA: service-oriented architecture best practices. — Upper Saddle River, New Jersey: Prentice Hall. — 2005. — 382 p.
  • Ho C., Harrop R., Schaefer C. Pro Spring. — Apress. — 2014. — 728 p.
  • White T. Hadoop: the definitive guide, 4th ed. — O’Reilly Media. — 2015. — 756 p.
  • CouchDB: the definitive guide. — O’Reilly Media. — 2010. — 272 p.
  • Java EE at a glance
  • Apache Spark — lightning-fast cluster computing
  • Redis
  • Heroku
  • Goldt S., var der Meer S., Burkett S., Welsh M. The Linux Programmer’s Guide.