Проблемы развития теории и методов программирования
Тенденции развития вычислительной техники, информатики и информационно-коммуникационных технологий. Понятие объектно-ориентированного программирования, паттернов проектирования на его основе. Отличие функционального программирования от структурного.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | статья |
Язык | русский |
Дата добавления | 31.07.2018 |
Размер файла | 19,1 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
Проблемы развития теории и методов программирования
Крайнова Екатерина Анатольевна, кандидат наук, доцент
Самарский государственный технический университет
Представлены тенденции развития технологий программирования, современные парадигмы программирования. Дано понятие объектно-ориентированного программирования, паттернов проектирования на его основе. Структурированы наиболее часто применяемые паттерны проектирования систем и дана их характеристика.
Непрерывное развитие вычислительной техники, информатики и информационно-коммуникационных технологий стимулирует не только процесс появления новых разнообразных знаковых систем для записи алгоритмов - языков программирования, но и поиск принципиально новых приемов и принципов программирования.
Компьютерная программа - это четкий план в виде последовательности действий, необходимых для решения поставленной задачи, то умение программировать выводит человека на уровень управленца, в чьи функции традиционно входило составление планов. Работа компьютерной программы по своей сути мало чем отличается от работы любой системы, в обоих случаях это последовательность специфических структурно организованных действий.
Компьютерная программа является обычной организационной структурой, в рамках которой координируется деятельность отдельных специфических исполнительных элементов для решения поставленной задачи. Поэтому структурное программирование является аналогом структурной деятельности управленца по организации и координации взаимодействию людей в организации. Навыки структурного программирования дают человеку понимание вопросов структурной организации общественных систем.
Тем не менее, технологии программирования на сегодняшний день вышли далеко за рамки структурного, и, в связи с этим, следует рассмотреть использование объектно-ориентированной парадигмы программирования.
В истории развития технологий программирования выделяют несколько основных классов языков программирования зависимости от решаемых ими задач, а также от эволюционного этапа развития вычислительной техники.
Рассмотрим тенденции и причины развития языков программирования. Одни из первых вычислительных машин имели ограниченные возможности, соответственно, и программы для них были достаточно простыми и не требовали больших затрат. В процессе эволюции с помощью ЭВМ стали решать все более сложные и разнообразные задачи, что привело к созданию новых языков программирования, новых технологий создания программного обеспечения. Так, низкоуровневые языки - машинные и машинно-ориентированные (ассемблеры), предоставляют разработчику доступ ко всем возможностям процессора, позволяя создать компактные и эффективные программы. Однако, для этого необходимо глубокое знание устройства компьютера, программист должен держать под контролем все команды и ячейки памяти, отладка больших программ затруднена, а окончательная программа может быть использована только на компьютерах с конкретным типом процессора. Поэтому, языки программирования низкого уровня применяют при написании драйверов, небольших системных приложений, библиотек, где главным требованием является компактность, быстродействие и прямой доступ к аппаратным ресурсам.
Увеличение сложности и, соответственно, объема программ породило стремление к повышению эффективности написания программ, что определило возникновение языков высокого уровня, универсальных и не зависящих от ЭВМ. Такие языки не только повышают скорость проектирования, отладки и тестирования программного продукта, но и дают возможность создавать большие проекты, в создании которых принимает участие коллектив разработчиков. В результате становления и развития высокоуровневых языков возникло понятие парадигмы программирования.
В общенаучном смысле парадигма (от греч. ??????????, «пример, модель, образец») - совокупность фундаментальных научных установок, представлений и терминов, принимаемая и разделяемая научным сообществом и объединяющая большинство его членов. Под парадигмой программирования понимают систему идей и понятий, определяющих стиль написания компьютерных программ. Это способ концептуализации, определяющий организацию вычислений и структурирование работы, выполняемой компьютером [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. Cristofer Alexandr, Sara Ishikawa, Murray Silverstein, Max Jacobson, Ingrid Fiksdahl-King and Shlomo Angel. A Pattern Language/ Oxford University Press, New York, 1977.
3. Erich Gamma. Object-Oriented Software Development based on ET++: Design Patterns, Class Library, Tools (in German). Springer-Verlag, Berlin, 1991.
4. Э. Гамма, Р. Хелм, Р. Джонсон, Дж. Влиссидес. Приемы объектно-ориентированного проектирования. Паттерны проектирования. -- «Питер», 2010. -- 366 с.
Размещено на Allbest.ur
...Подобные документы
Использование объектно-ориентированного программирования - хорошее решение при разработке крупных программных проектов. Объект и класс как основа объектно-ориентированного языка. Понятие объектно-ориентированных языков. Языки и программное окружение.
контрольная работа [60,1 K], добавлен 17.01.2011Понятие объектно-ориентированного программирования, характеристика используемых языков. Практическая разработка средств объектно-ориентированного программирования в задачах защиты информации: программная реализация на языке С++, а также Turbo Pascal.
курсовая работа [275,9 K], добавлен 22.12.2011Анализ объектно-ориентированного программирования, имитирующего способы выполнения предметов. Основные принципы объектно-ориентированного программирования: инкапсуляция, наследование, полиморфизм. Понятие классов, полей, методов, сообщений, событий.
контрольная работа [51,7 K], добавлен 22.01.2013Применение объектно-ориентированного программирования для написания нескольких модулей программы. Вычисление алгебраического уравнения методом половинного деления. Применение метода Эйлера в теории численных методов общих дифференциальных уравнений.
курсовая работа [398,1 K], добавлен 26.02.2015Исследование принципов объектно-ориентированного программирования на базе языка программирования С++. Разработка программного комплекса для ведения учёта памятников города. Описание процессов сортировки, поиска, формирования статистики по памятникам.
курсовая работа [782,4 K], добавлен 26.05.2014Появление первых вычислительных машин и возникновение "стихийного" программирования. Структурный подход к декомпозиции сложных систем. Развитие модульного и объектно-ориентированного программирования. Особенности компонентного подхода и CASE-технологий.
презентация [1,5 M], добавлен 14.10.2013История формирования традиционной технологии программирования. Задачи и предмет структурного программирования, как одного из крупнейших достижений в технологии программирования. Подпрограмма, типы управляющих структур. Понятие модульного программирования.
презентация [1,8 M], добавлен 05.11.2016Анализ методов объектно-ориентированного программирования на примере численных. Детальная характеристика модулей и связь их в одну общую программу. Принципы интегрирования по общей формуле трапеции и решение дифференциального уравнения методом Эйлера.
курсовая работа [511,6 K], добавлен 25.03.2015Основные сведения о языках программирования и их состав. Программа для компьютера. Использование компилятора и операторы. Языки программирования высокого уровня. Концепции объектно-ориентированного программирования. Языки искусственного интеллекта.
презентация [6,3 M], добавлен 14.08.2013Характеристики и свойства языков программирования. Исследование эволюции объектно-ориентированных языков программирования. Построение эволюционной карты механизмов ООП. Разработка концептуальной модели функционирования пользовательского интерфейса.
курсовая работа [2,6 M], добавлен 17.11.2014Разработка приложения "Калькулятор с переходом в строковый калькулятор" с применением объектно-ориентированного программирования. Концепция и понятия объектно-ориентированного программирования. Язык программирования Java. Листинг программы "Калькулятор".
курсовая работа [966,9 K], добавлен 11.02.2016Изучение основных стилей программирования: процедурного, функционального, логического, объектно-ориентированного. Язык Ассемблера, предназначенный для представления в символической форме программ, записанных на машинном языке. Многоцелевой язык Basic.
презентация [905,2 K], добавлен 23.03.2011История развития языков программирования; создание и распространение языка С++; новый подход к разработке объектно-ориентированного программного обеспечения. Применение моделирования предметных областей для структуризации их информационных отражений.
реферат [29,1 K], добавлен 06.12.2010История развития, характеристика, предназначение и особенности языка программирования Delphi. Разработка проекта создания кроссворда на объектно-ориентированном языке Delphi, который состоит из 19 вопросов по горизонтали и 16 вопросов по вертикали.
курсовая работа [970,5 K], добавлен 15.05.2014Основные операции с АВЛ-деревьями, добавление и удаление элемента из сбалансированного дерева. Эффективность сортировки вставкой в АВЛ–дерево и итераторы. Алгоритм реализации АВЛ–деревьев через классы объектно–ориентированного программирования.
курсовая работа [281,1 K], добавлен 29.11.2010Использование скриптового языка программирования для разработки web-приложений (сценариев). Изучение основ объектно-ориентированного программирования в языке PHP. Ознакомление со специальными методами для работы с классами. Назначение интерфейсов.
контрольная работа [25,1 K], добавлен 14.03.2015Знакомство с наиболее известными технологиями программирования. Особенности разработки программ для вычисления интеграла по формуле средних прямоугольников. Общая характеристика методов структурного программирования. Рассмотрение формулы Симпсона.
курсовая работа [1,3 M], добавлен 03.03.2015Концепция объектно-ориентированного программирования. Объектно-ориентированные языки программирования: Smalltalk, Object Pascal, CLOS и C++. Понятие "Объект" и "Класс". Управление доступом к элементам данных классов. Определение функций-членов класса.
реферат [24,5 K], добавлен 28.10.2011Выдающиеся люди в истории информатики. Ада Лавлейс. Деяния Грэйс Хоппер. Сэнди Лернер. Ющенко Екатерина Логвиновна. История научной школы теоретического программирования в Украине. Эти женщины - яркие лица в истории развития вычислительной техники.
реферат [40,1 K], добавлен 19.12.2003Общая характеристика объектно-ориентированного подхода в программировании, его основные свойства и принципы. Разработка программы для автоматизация деятельности кафе на основе объектно-ориентированного подхода, проектирования и реализации схемы данных.
курсовая работа [1,2 M], добавлен 22.01.2012