Проблемы развития теории и методов программирования

NovaInfo 32, скачать PDF
Опубликовано
Раздел: Технические науки
Просмотров за месяц: 2
CC BY-NC

Аннотация

Представлены тенденции развития технологий программирования, современные парадигмы программирования. Дано понятие объектно-ориентированного программирования, паттернов проектирования на его основе. Структурированы наиболее часто применяемые паттерны проектирования систем и дана их характеристика.

Ключевые слова

ТЕХНОЛОГИЯ ПРОГРАММИРОВАНИЯ, ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ, ЯЗЫКИ ПРОГРАММИРОВАНИЯ, ПРОГРАММИРОВАНИЕ, ПАТТЕРНЫ ПРОЕКТИРОВАНИЯ

Текст научной работы

Непрерывное развитие вычислительной техники, информатики и информационно-коммуникационных технологий стимулирует не только процесс появления новых разнообразных знаковых систем для записи алгоритмов – языков программирования, но и поиск принципиально новых приемов и принципов программирования.

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

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

Тем не менее, технологии программирования на сегодняшний день вышли далеко за рамки структурного, и, в связи с этим, следует рассмотреть использование объектно-ориентированной парадигмы программирования.

В истории развития технологий программирования выделяют несколько основных классов языков программирования зависимости от решаемых ими задач, а также от эволюционного этапа развития вычислительной техники.

Рассмотрим тенденции и причины развития языков программирования. Одни из первых вычислительных машин имели ограниченные возможности, соответственно, и программы для них были достаточно простыми и не требовали больших затрат. В процессе эволюции с помощью ЭВМ стали решать все более сложные и разнообразные задачи, что привело к созданию новых языков программирования, новых технологий создания программного обеспечения. Так, низкоуровневые языки – машинные и машинно-ориентированные (ассемблеры), предоставляют разработчику доступ ко всем возможностям процессора, позволяя создать компактные и эффективные программы. Однако, для этого необходимо глубокое знание устройства компьютера, программист должен держать под контролем все команды и ячейки памяти, отладка больших программ затруднена, а окончательная программа может быть использована только на компьютерах с конкретным типом процессора. Поэтому, языки программирования низкого уровня применяют при написании драйверов, небольших системных приложений, библиотек, где главным требованием является компактность, быстродействие и прямой доступ к аппаратным ресурсам.

Увеличение сложности и, соответственно, объема программ породило стремление к повышению эффективности написания программ, что определило возникновение языков высокого уровня, универсальных и не зависящих от ЭВМ. Такие языки не только повышают скорость проектирования, отладки и тестирования программного продукта, но и дают возможность создавать большие проекты, в создании которых принимает участие коллектив разработчиков. В результате становления и развития высокоуровневых языков возникло понятие парадигмы программирования.

В общенаучном смысле парадигма (от греч. παράδειγμα, «пример, модель, образец») – совокупность фундаментальных научных установок, представлений и терминов, принимаемая и разделяемая научным сообществом и объединяющая большинство его членов. Под парадигмой программирования понимают систему идей и понятий, определяющих стиль написания компьютерных программ. Это способ концептуализации, определяющий организацию вычислений и структурирование работы, выполняемой компьютером [1].

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

Директивное программирование довольно легко для понимания, так как в программе пошагово описываются действия, ведущие от исходных данных к конечному результату. В таких программах от входных данных полностью зависит последовательность выполнения команд. Именно в структурном программировании возникла концепция локализации части кода в так называемые подпрограммы (функции, процедуры), с последующим их вызовом из разных мест основной программы. В качестве представителей языков, основанных на директивной парадигме можно назвать Fortran, Pascal, C.

В декларативных программах заявляется (декларируется) конечная цель, важна точная формулировка задачи, при этом программист не задает алгоритм для ее решения. Главное отличие функционального программирования от структурного, использующего функции как подпрограммы, является то, что оно основывается на математическом понятии функции, которая не изменяет свое окружение. В функциональном программировании программный код состоит из множества определений функций, которые, в свою очередь, представляют собой вызовы других функций. Каждая из функций возвращает некоторое значение в вызвавшую ее функцию, и после этого продолжается вычисление до тех пор, пока не будет достигнут конечный результат. Логическое программирование представляет программы с помощью формул математической логики, а результат достигается выводом логических следствий из них. Представители функциональных языков: List, Haskell, представитель логических языков: Prolog [2].

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

Проектировщики объектно-ориентированных систем нередко сталкиваются с задачами, в которых повторно используются удачные проектные и архитектурные решения, реализованные ранее. Это говорит о том, что разработчику не требуется решать каждую новую задачу с нуля, можно воспользоваться готовым шаблоном, состоящим из классов и взаимодействующих объектов. Таким образом, возникло новое понятие в парадигме объектно-ориентированного программирования – паттерн проектирования.

Термин «паттерн» впервые в 1970-е годы применил архитектор Кристофер Александр, описав шаблоны, возникающие при проектировании зданий и городов. По его словам «любой паттерн описывает задачу, которая снова и снова возникает в нашей работе, а также принцип ее решения, причем таким образом, что это решение можно потом использовать миллион раз, ничего не изобретая заново» [3]. Несмотря на то, что автор имел ввиду архитектурные решения, его слова верны и в отношении объектно-ориентированного программирования.

В 1987 году идеи Александра развили американские программисты Уорд Каннингем и Кент Бэк, разработав шаблоны для классов MVC (Model/View/Controller) для разработки графических оболочек на языке Smalltalk

Причиной роста популярности применения паттернов проектирования стал выход книги Эриха Гамма «Design Patterns — Elements of Reusable Object-Oriented Software», основанной на результатах докторской диссертации об общей переносимости паттерной методики на разработку программ. В настоящее время команда авторов книги занимает лидирующую позицию в области паттерного проектирования.

Паттерн проектирования в общем случае состоит из следующих элементов:

  • Имя. Ссылка на имя позволяет описать проблему, способы ее решения и их последствия. Использование имен повышает уровень абстракции проектирования.
  • Задача. Описывает ситуации, в которых применяется паттерн. Формулируется задача и ее контекст, описывается конкретная проблема и условия применения данного паттерна.
  • Решение. Содержит элементы дизайна, их описание, взаимодействие, функции, при этом не рассматриваются конкретные дизайн или реализация, так как паттерн – это шаблон, применяемый в различных ситуациях. В решении дается абстрактное описание задачи и способов ее решения с помощью обобщенного набора классов и объектов.
  • Результаты. Представляют собой последствия применения паттерна, знание которых способствуют правильному выбору паттерна, выбору языка реализации, что влияет на степень гибкости системы, ее расширяемости и переносимости.

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

Описание и документирование основных паттернов объектно-ориентированного проектирования дано в книге [5], согласно которой паттерны классифицируются (табл. 1) по двум критериям:

  1. цель – назначение паттерна;
  2. уровень – применение паттерна к определенному иерархическому уровню: классу или объекту.

Таблица 1 - Классификация паттернов проектирования

Уровень

Назначение

Порождающие паттерны

Структурные паттерны

Паттерны поведения

Класс

Фабричный метод

 

Интерпретатор

Шаблонный метод

Объект

Абстрактная фабрика

Одиночка

Прототип

Строитель

Адаптер (объекта)

Декоратор

Заместитель

Компоновщик

Мост

Приспособленец

Фасад

Итератор

Команда

Наблюдатель

Посетитель

Посредник

Состояние

Стратегия

Хранитель

Цепочка обязанностей

Знание паттернов проектирования облегчает понимание существующих объектно-ориентированных систем, помогает начинающему проектировщику работать на уровне эксперта. Обычно метод проектирования определяет символы для моделирования различных аспектов проекта и набор правил применения этих символов. Опытные проектировщики описывают типичные проблемы, способы их разрешения и способы оценки полученного результата.

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

В лучших проектах используется много различных паттернов проектирования. Единое целое образуется в результате их согласованных взаимных действий. В заключение приведем цитату одного из основателей теории паттерного проектирования Кристофера Александра: «Можно строить здания, нанизывая паттерны в достаточно произвольном порядке. Такое здание будет просто собранием паттернов. В нем нет плотности. Нет основательности. Но можно объединять паттерны и так, что в одном и том же физическом объеме они будут перекрывать друг друга. Тогда здание получается очень плотным, в небольшом пространстве сосредотачивается много функций. За счет такой плотности здание приобретает основательность» [3].

Читайте также

Список литературы

  1. Роганов Е. А. Основы информатики и программирования. — М.: МГИУ, 2001.
  2. Программирование. URL http://www.inf1.info/book/export/html/216
  3. Cristofer Alexandr, Sara Ishikawa, Murray Silverstein, Max Jacobson, Ingrid Fiksdahl-King and Shlomo Angel. A Pattern Language/ Oxford University Press, New York, 1977.
  4. Erich Gamma. Object-Oriented Software Development based on ET++: Design Patterns, Class Library, Tools (in German). Springer-Verlag, Berlin, 1991.
  5. Э. Гамма, Р. Хелм, Р. Джонсон, Дж. Влиссидес. Приемы объектно-ориентированного проектирования. Паттерны проектирования. — «Питер», 2010. — 366 с.

Цитировать

Крайнова, Е.А. Проблемы развития теории и методов программирования / Е.А. Крайнова. — Текст : электронный // NovaInfo, 2015. — № 32. — URL: https://novainfo.ru/article/3396 (дата обращения: 26.06.2022).

Поделиться