В какой парадигме программирования реализован язык паскаль
Перейти к содержимому

В какой парадигме программирования реализован язык паскаль

  • автор:

Объектно-ориентированное программирование в Pascal

Pascal – один из самых известных существующих языков программирования, изучаемых в школьной программе. Это – «база», с которой рекомендуется начинать всем, кто заинтересован в разработке программного обеспечения.

Паскаль относится к нескольким классам одновременно. Он выступает в виде императивного, структурированного и компилируемого ЯП. Появился в 1970 году, но по сей день не забывается.

На Pascal можно программировать, используя несколько парадигм. Одна из них – это ООП. Такой подход к написанию контента обрел огромную популярность у разработчиков. В данной статье будет рассказано более подробно об объектно-ориентированном программировании, а также об объектах и классах Паскаля.

Ключевые термины

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

Каждый разработчик, планирующий использовать в своей деятельности парадигму ООП, должен запомнить следующие понятия:

  1. Алгоритм – инструкции и правила, которые помогают решать поставленную изначально перед программистом задачу.
  2. Аргументы – значения, передаваемые в функции или существующие команды.
  3. Символ – единица отображения информации. Выражается одной буквенной или символьной записи.
  4. Объект (Object) – комбинация связанных переменных, констант, структур информации, которые могут выбираться и обрабатываться совместно. Позже этому компоненту будет уделено больше внимания.
  5. Класс – набор связанных между собой объектов, к которых есть какие-либо общие свойства.
  6. Код – письменный набор инструкций, который написан с использованием правил выбранного языка разработки. Помогает формировать итоговое приложение.
  7. Константа – значение, которое постоянно остается неизменной. Корректировке оно не подлежит даже при выполнении тех или иных команд в приложении.
  8. Тип данных – классификация данных определенного типа.
  9. Массив – группы, а также списки схожих типов значений. Они предварительно проходят процедуру группировки.
  10. Фреймворк – готовые блоки кода. Необходимы для того, чтобы упрощать процедуру программирования.
  11. Петля – носит название «цикл». Последовательность инструкций, которая выполняется в приложении раз за разом. Происходит это до тех пор, пока система не получит команду на остановку. Прекращение работы цикла также осуществляется, если достигнуто заранее установленное условие.
  12. Итерация – один проход через тот или иной набор операций, работающих с исходным кодом утилиты.
  13. Ключевое слово – специальные слова, которые зарезервированы синтаксисом языка. Нужны для того, чтобы обозначать определенные инструменты, функции и задачи.
  14. Операнд – объект, которым через операторы осуществляется манипулирование.
  15. Оператор – объект, умеющий управлять операндами.
  16. Переменная – место хранения временных данных в программе. Они могут корректироваться, сохраняться, а также отображаться на экране при необходимости.
  17. Указатели – переменные, содержащие адреса мест в памяти.

Это – «база», с которой предстоит познакомиться всем будущим разработчикам. Далее внимание будет сфокусировано на объектах и классах в Pascal. А еще – на особенностях объектно-ориентированного программирования.

ООП – это…

Объектно-ориентированное программирование – подход к написанию контента как к моделированию информационных объектов. На основном уровне здесь будет решаться ключевая задача структурной разработки: структурирование. Этот прием позволяет улучшить управляемость самим процессом моделирования. Как следствие – способствует более грамотному и простому подходу к реализации крупных проектов.

В основе ООП заложено программирование «через объекты». Здесь предполагается минимизация избыточных данных и их целостность. Парадигма базируется на образах и разнообразных элементах. Логика и соответствующие связи здесь второстепенны.

Абстрактный тип данных

Абстрактный тип данных в разработке программного обеспечения – одно из ключевых понятий. Абстракция предусматривает разделение и независимое рассмотрение интерфейсной составляющей и непосредственной реализации.

Абстрактный тип данных – совокупность данных вместе с множеством операций, который можно выполнить над соответствующей информации. Пример – просмотр телевизора:

  1. Пусть телевизор носит название модуля или объекта.
  2. Соответствующий объект обладает пользовательским интерфейсом (совокупностью кнопок), а также воспроизведением изображения и звука.
  3. Переключение программ осуществляется за счет нажатия на определенные «клавиши». О физических процессах, происходящих при смене канала, человек не задумывается. Об этом хорошо осведомлены специалисты.
  4. При выборе телевизора покупателя будут интересовать параметры объекта: стоимость, качество «картинки», звук. То, что находится непосредственно внутри, особой роли для обычного клиента не играет.

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

Об объектах и классах

В разработке базовыми блоками, если говорить об ООП, выступают объекты и классы. Первый «компонент»:

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

Object – часть окружающей человека реальности. Он существует во времени и пространстве. Формальное определение дать здесь трудно. Это можно сделать через определенные свойства. Objects имеют состояние, поведение, могут быть идентифицированы в системе однозначно (обладают уникальными именами).

Класс – множество объектов, обладающих общей структурой и поведением. Класс – описание (или абстракция), которая демонстрирует то, как построить уже существующую во времени и пространстве переменную соответствующего класса (object).

В классе описывается поведение «компонентов» приложения. Тут же прописывается положенная структура. Стоит обратить внимание на несколько ключевых определений:

  1. Состояние объекта. Объединяет все его поля данных и текущие значения каждого поля.
  2. Поведение – отражает динамику корректировки состояний «элемента» и его реакцию на поступающие сообщения. То, как ведет себя «компонент», а также как взаимодействует с остальными составляющими кода.
  3. Идентификация – это распознавание. Свойство, позволяющее определить элемент из числа других компонентов или в пределах того же класса. Происходит при помощи уникального имени (паспорта), которое устанавливается написанным контентом.

Объектно-ориентированная парадигма, реализовываемая в Паскале, позволяет представить приложения в виде набора определенных компонентов, которые взаимодействуют друг с другом. А классы помогают составлять описания соответствующих «элементов».

Принципы

В объектно-ориентированном программировании выделяют несколько ключевых принципов структурирования. Обратить внимание стоит на:

  • проектирование – инкапсуляцию;
  • наследование;
  • полиморфизм;
  • передачу сообщений.

Все это требует в Паскале и иных ЯП, базирующихся на объектно-ориентированной разработке, более детального изучения.

Инкапсуляция

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

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

В пределах ООП различают поля и методы. Первый компонент – это данные, второй – действующие алгоритмы.

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

Наследование

Методология ООП предусматривает построение древа иерархии, которое будет отражать взаимосвязи между составляющими (подзадачами) приложения. Здесь осуществляется наследование свойств родительских (вышележащих) типов объектов дочерними (нижележащими).

Наследование – отношение между objects, когда один компонент будет повторять структуру и поведение другого. В жизни данная составляющая встречается повсеместно. Пример – млекопитающие и птицы. Они наследуют признаки живых организмов.

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

Конкретные экземпляры есть у нижних уровней иерархии в ООП. Пример – это «Крокодил Гена». Он относится к классу «крокодилы». Еще один вариант – известный из мультфильмов Матроскин. Его можно отнести к классу «кошачьи».

  1. Применять библиотеки классов. Допускается их дальнейшее развитие в конкретной программе.
  2. Создавать new objects путем изменения или дополнения свойства прежних. Наследник получит все поля и методы родителя, но может предусматривать и собственные.
  3. Решить проблемы модификации свойств.
  4. Придает гибкость всей парадигме ООП.

При построении нового класса, наследуя его из уже существующего класса, можно:

  • добавить в новый класс новые компоненты-информацию;
  • добавить в новый класс новые функции;
  • осуществить замену в новом классе наследуемые из старого компоненты-функции.

Все это значительно упрощает процедуру программирования.

Полиморфизм

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

Полиморфизм – свойство родственных «элементов» решать схожие по смыслу проблемы посредством самых разных способов. Пример – «бежать» могут почти все животные. Но слон, лев и черепаха делают это по-разному.

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

В приведенном примере с бегом действие «бежать» — это полиморфическое действие. Многообразие форм его проявления – непосредственный полиморфизм.

Объектный тип

Класс или объект – это структура данных содержащая в себе поля и методы. Она начинается при помощи ключа, а заканчивается оператором end. Формальный синтаксис достаточно простой – описание объектного типа осуществляется, если в описании заменить record на object или класс (class). Далее – требуется добавить объявление функций и процедур над полями:

В ObjectPascal есть ключевое слово class. Оно помогает описывать objects, которые заимствованы из C++:

У ObjectPascal существуют две модели, помогающие описывать objects. Компонент объекта – поле или метод. Поле включает в себя имя и тип данных. Метод – процедура или функция, объявленная в пределах декларации объектного типа. Сюда можно отнести особые процедуры при помощи которых создаются и уничтожаются «компоненты» программы.

Объявление метода внутри описания объектного типа включает в себя только заголовок. Это – предварительное описание подпрограммы. Тело метода приводится после объявленного объектного типа:

Стоит запомнить следующее:

  1. Тексты подпрограмм, отвечающих за реализацию методов объекта, приводятся в разделе описания процедур и функций.
  2. Заголовки при описании реализации метода будут повторять заголовки, которые приведены в описании типа. Они дополняются именем object, которое отделяется точкой.
  3. В пределах описания методов на поля и методы соответствующего типа будет происходить ссылка просто по имени. Метод MyName из примера использует поле Name без явного указания его принадлежности к «компоненту» так, как если бы применялся неявный оператор with…do.
  4. Под objects можно понимать и переменные объектного типа. Они носят название экземпляров. Каждая переменная и экземпляр имеет имя и тип. Они предусматривают предварительное объявление, как и класс.
  5. При использовании поля данных «элемента» v1 будут применяться те же алгоритмы, что и в случае с работой с полями записи. Вызов методов экземпляра указывает на то, что соответствующий метод вызывается данными object v1. На экране появится такой результат:.

К полям переменных объектного типа можно обращаться при помощи уточненных идентификаторов. Еще один вариант – применение оператора with.

Иерархия типов

Типы предусматривают построение в иерархию. Объект способен наследовать компоненты из другого объектного типа. Наследующий object – это потоком. Объект, которому наследуют – предок или родитель. Стоит обратить внимание на то, что наследование относится только к типам. К экземплярам никакого отношения не имеет.

Если был введен объектный тип (родительский), но его нужно дополнить молями или методами, нужно ввести новый тип. Он объявляется в качестве наследника (дочернего типа). Предусматривает описание полей и методов, которые считаются новыми.

Потомок включает в себя все поля типа предка (особенности класса). Поля и методы родителя наследнику доступны без специальных инструкций. Если в описании дочернего класса повторяются имена «родителя», то новые описания будут переопределять поля и методы «наследодателя».

Объектно-ориентированное программирование всегда начинается с базового класса. Это – шаблон для базового объекта. Следующий этап – определение нового класса, который носит название производного. Он выступает расширением «базы».

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

Наследование может продолжаться. Класс, который произведен от базового, может выступать в виде «базы» для других производных. Так программы образовывают иерархии классов:

Здесь стоит запомнить следующие правила:

  1. Информационные поля и методы родителя наследуются всеми его дочерними типами. Число промежуточных уровней иерархии не важно.
  2. Доступ к полям и методам родительских типов в рамках описания наследников выполняет так, словно они описаны в дочерних типах.
  3. Идентификаторы родительского класса не могут встречаться в дочерних.
  4. Наследники могут доопределять произвольное количество собственных методов. Сюда же относят информационные поля.
  5. Любые корректировки текста в родительских методах – это автоматическое влияние на все методы у наследников.

Также важно, что в дочерних типах идентификаторы методов могут совпадать с именами методов у «родителей». Тогда целесообразно говорить о том, что наследник перекрывает (подавляет) одноименный родительский метод.

Полиморфизм и виртуальные методы

Говоря о классах и objects в Паскале, стоит обратить внимание на полиморфизм и виртуальные methods. Полиморфизм – свойство родственных объектов (произошедших от одного и того же родителя) решать схожие по смыслу проблемы разного рода способами.

Два и более класса, выступающие в виде производных одного и того же базового класса, носят название полиморфными. Это значит, что они могут обладать общими характеристиками. А вот свойства у таких классов различаются.

В ООП поведенческие свойства объекта определяются набором включенных в его пределы методов. При помощи корректировки алгоритмов программист сможет придавать потомкам отсутствующие у родителя новые свойства.

Статический «подход»

Methods в программировании бывают статическими. Они включены в исходный код приложения в момент компиляции. Это указывает на то, что еще до начала работы приложения определено, какая процедура вызывается к заданной точке. Компилятор определит, какого типа объект задействован, а затем подставит соответствующий method.

Объекты разных типов могут иметь одноименные статические «приемы». Тогда method будет определен при помощи типа экземпляра объекта. Статическое перекрытие – первый шаг полиморфизма. Но одинаковые имена являются лишь удобством в разработке, а не ключевым принципом.

Виртуальные методы

Подключаются в момент выполнения программы. Позволяют определять тип и конкретизировать экземпляр объекта во время исполнения. Далее – вызывать методы этого самого объекта.

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

https://amdy.su/wp-admin/options-general.php?page=ad-inserter.php#tab-8

Для того, чтобы использовать виртуальный метод, нужно использовать ключевое слово virtual:

Иерархия типов объектов предусматривает определенные ограничения, связанные с virtual methods:

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

Конструктор обычно выполняет роль инициализатора объектного экземпляра. А еще – связывает virtual methods.

Как быстро освоить направление

Pascal – язык программирования, который изучается преимущественно в старших классах общеобразовательных школ. Он даст «базу», которая поможет продвинуться далее в разработке, особенно в ООП.

Для того, чтобы быстрее и лучше разобраться в классах, а также иных компонентах Паскаля, стоит посетить дистанционные компьютерные курсы. Это – лучшее решение для тех, кто не хочет тратить много времени, денег и сил на быстрое погружение в IT и разработку программного обеспечения.

У такого подхода к получению образования есть множество преимуществ:

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

При успешном завершении курсов клиент получит электронный сертификат. Он поможет подтвердить полученные знаний документально.

Хотите освоить современную IT-специальность? Огромный выбор курсов по востребованным IT-направлениям есть в Otus!

Технология программирования (pascal)

7. Парадигма объектно-ориентированного программирования (ооп)

7.1. Программно-ориентированное программирование и абстракция данных.

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

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

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

Основной недостаток ООП состоит в некотором снижении быстродействия из-за более сложной организации программного средства.

Одним из основных понятий современной технологии программирования является понятие абстракции данных, которое предусматривает создание новых типов данных.

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

Данные определяют состояние объекта.

Подпрограммы определяют поведение объекта, выражающееся в допустимых для него действиях.

Паскаль-язык структурного программирования

Нажмите, чтобы узнать подробности

В 1950 г. Возникает направление, которое получило название « автоматизация программирования» Основная цель – создание средств, ускоряющих процесс создания программы для ЭВМ. Появление первых языков программирования, машинно- ориентированные автокоды. Позднее за языками такого уровня появились ассемблеры .( первоначально программа – переводчик) Программирование на ассемблере снимает с программиста заботу о распределении памяти под данные и команды программы. Программист не должен помнить внутренние колы всех команд процессора. Команды сложения. ADD a, b, c Слово ADD обозначает команду « сложить», a и b – имена переменных слагаемых, с – переменная, куда помещается результат.

Ассемблер Машинно- ориентированным (команды процессора существует свой аналог команд) Составление программы на ассемблере проще, чем на языке команд процессора. Работу по распределению памяти под данные и команды, перевод команд ассемблера в машинные команды берет на себя специальная программа- транслятор . Макроассемблер (макрокоманды, соответствующие сериям команд ( подпрограммам) на языке процессора)

(команды процессора существует

свой аналог команд)

Составление программы на

ассемблере проще, чем на

языке команд процессора.

Работу по распределению

памяти под данные и команды,

перевод команд ассемблера

в машинные команды берет

на себя специальная

программа- транслятор .

( подпрограммам) на языке процессора)

Высокий уровень программирования ЯПВУ: Паскаль Бейсик Фортран Java Все названные ЯПВУ относятся к так называемой процедурной парадигме программирования. Поэтому их называют процедурными языками программирования.

Высокий уровень программирования ЯПВУ:

Все названные ЯПВУ относятся к так называемой

процедурной парадигме программирования.

Поэтому их называют процедурными

Pascal Паскаль был разработан швейцарским ученым Никлаусом Виртом. ( см. ) Паскаль считается важнейшим инструментом для обучения методам структурного программирования и с 1983 г. введен в учебные курсы в школах для учащихся, которые специализируются в области информатики . В дальнейшем язык Паскаль совершенствовался и приобрел новые свойства, отличные от авторского варианта . Французский математик, механик, физик, литератор и философ. Классик французской литературы, один из основателей математического анализа, теории вероятностей и проективной геометрии, создатель первых образцов счётной техники, автор основного закона гидростатики . Блез Паска́ль

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

Французский математик, механик, физик,

литератор и философ. Классик французской

литературы, один из основателей

математического анализа, теории вероятностей и

создатель первых образцов счётной техники,

автор основного закона гидростатики .

Блез Паска́ль

- Язык Паскаль относительно прост в изучении, довольно ясен и логичен и, будучи первым изучаемым языком программирования, приучает к хорошему стилю. - Как и естественные языки, каждый язык программирования имеет свой стиль и свои правила. Синтаксис языка программирования – это набор правил, которые определяют способы построения правильных программ из символов алфавита. - Алфавит языка Паскаль 26 латинских строчных и 26 латинских прописных букв: A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z подчеркивание _ 10 цифр: 0 1 2 3 4 5 6 7 8 9 знаки операций: + - * / = = := @ ограничители (разделители): . ,

— Язык Паскаль относительно прост в изучении, довольно ясен и логичен и, будучи первым изучаемым языком программирования, приучает к хорошему стилю. — Как и естественные языки, каждый язык программирования имеет свой стиль и свои правила. Синтаксис языка программирования – это набор правил, которые определяют способы построения правильных программ из символов алфавита. — Алфавит языка Паскаль 26 латинских строчных и 26 латинских прописных букв: A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z подчеркивание _ 10 цифр: 0 1 2 3 4 5 6 7 8 9 знаки операций: + — * / = = := @ ограничители (разделители): . , ‘ ( ) [ ] (. .) < >(* *) .. : ; спецификаторы: ^ # $

- Структура программы <1. заголовок программы>program Имя_Программы; <2. раздел указания используемых модулей>uses Список_Используемых_Модулей; <3. Раздел описаний>label Описания_меток; const Описания_Констант; type Описания_Типов; var Описания_Переменных; procedure Описания_Процедур_и_функций; function exports Описания_Экспортируемых_Имен; <4. Раздел операторов>begin Операторы end. — Упрощенная структура программы <1. заголовок программы>program Имя_Программы; <2. раздел указания используемых модулей>uses Список_Используемых_Модулей; <3. Раздел описаний>const Описания_Констант; var Описания_Переменных; <4. Раздел операторов>begin Операторы программы end. — Команды языка программирования называются операторами Разделителем операторов в Паскале является ; (точка с запятой) » width=»640″ /></p>
<p><b>— Структура программы</b> <1. заголовок программы>program Имя_Программы; <2. раздел указания используемых модулей>uses Список_Используемых_Модулей; <3. Раздел описаний>label Описания_меток; const Описания_Констант; type Описания_Типов; var Описания_Переменных; procedure Описания_Процедур_и_функций; function exports Описания_Экспортируемых_Имен; <4. Раздел операторов>begin Операторы end. — <b>Упрощенная структура</b> программы <1. заголовок программы>program Имя_Программы; <2. раздел указания используемых модулей>uses Список_Используемых_Модулей; <3. Раздел описаний>const Описания_Констант; var Описания_Переменных; <4. Раздел операторов>begin Операторы программы end. — <b>Команды языка</b> программирования называются операторами Разделителем операторов в Паскале является ; (точка с запятой)</p>
<h2>«Забытые» парадигмы программирования</h2>
<p><img decoding=

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

Ладно. Введение это очень весело, но вы его все равно не читаете, так что кому интересно — добро пожаловать под кат!

Императивное программирование


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

Это были машинные коды, языки ассемблера и ранние высокоуровневые языки, вроде Fortran.

Ключевые моменты:

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

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

В более высокоуровневых (таких как Си) состояние — это только память, инструкции могут быть сложнее и вызывать выделение и освобождение памяти в процессе своей работы.

В совсем высокоуровневых (таких как Python, если на нем программировать императивно) состояние ограничивается лишь переменными, а команды могут представлять собой комплексные операции, которые на ассемблере занимали бы сотни строк.

Основные понятия:
Порожденные понятия:

— Присваивание
— Переход
— Память
— Указатель

Языки поддерживающие данную парадигму:
Как основную:

— Языки ассемблера
— Fortran
— Algol
— Cobol
— Pascal
— C
— C++
— Ada

Как вспомогательную:

— Python
— Ruby
— Java
— C#
— PHP
— Haskell (через монады)

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

Структурное программирование


Структурное программирование — парадигма программирования (также часто встречающееся определение — методология разработки), которая была первым большим шагом в развитии программирования.

Основоположниками структурного программирования были такие знаменитые люди как Э. Дейкстра и Н. Вирт.

Языками-первопроходцами в этой парадигме были Fortran, Algol и B, позже их приемниками стали Pascal и C.

Ключевые моменты:

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

В структурном программировании мы по прежнему оперируем состоянием и инструкциями, однако вводится понятие составной инструкции (блока), инструкций ветвления и цикла.

Благодаря этим простым изменениям возможно отказаться от оператора goto в большинстве случаев, что упрощает код.

Иногда goto все-же делает код читабельнее, благодаря чему он до сих пор широко используется, несмотря на все заявления его противников.

Основные понятия:

— Блок
— Цикл
— Ветвление

Языки поддерживающие данную парадигму:
Как основную:

— C
— Pascal
— Basic

Как вспомогательную:

— C#
— Java
— Python
— Ruby
— JavaScript

Поддерживают частично:
— Некоторые макроассемблеры (через макросы)

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

Процедурное программирование


Опять-же возрастающая сложность программного обеспечения заставила программистов искать другие способы описывать вычисления.

Собственно еще раз были введены дополнительные понятия, которые позволили по-новому взглянуть на программирование.

Этим понятием на этот раз была процедура.

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

Ключевые моменты:

Процедура — самостоятельный участок кода, который можно выполнить как одну инструкцию.

В современном программировании процедура может иметь несколько точек выхода (return в C-подобных языках), несколько точек входа (с помощью yield в Python или статических локальных переменных в C++), иметь аргументы, возвращать значение как результат своего выполнения, быть перегруженной по количеству или типу параметров и много чего еще.

Основные понятия:
Порожденные понятия:

— Вызов
— Аргументы
— Возврат
— Рекурсия
— Перегрузка

Языки поддерживающие данную парадигму:
Как основную:

— C
— C++
— Pascal
— Object Pascal

Как вспомогательную:

— C#
— Java
— Ruby
— Python
— JavaScript

Поддерживают частично:
— Ранний Basic

Стоит отметить, что несколько точек входа из всех этих языков поддерживаются только в Python.

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


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

Забегая вперед скажу, что модули тоже оказались неспособны сдержать с невероятной скоростью растущую сложность ПО и в последствии появились пакеты (это тоже модульное программирование), классы (это уже ООП), шаблоны (обобщенное программирование).

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

Благодаря модулям впервые в программировании появилась серьезная инкапсуляция — возможно использовать какие-либо сущности внутри модуля, но не показывать их внешнему миру.

Ключевые моменты:

Модуль — это отдельная именованная сущность программы, которая объединяет в себе другие программные единицы, близкие по функциональности.

Например файл List.mod включающий в себя класс List
и функции для работы с ним — модуль.

Папка Geometry, содержащая модули Shape, Rectangle и Triangle — тоже модуль, хоть и некоторые языки разделяют понятие модуля и пакета (в таких языках пакет — набор модулей и/или набор других пакетов).

Модули можно импортировать (подключать), для того, чтобы использовать объявленные в них сущности.

Основные понятия:
Порожденные понятия:
Языки поддерживающие данную парадигму:
Как основную:

— Haskell
— Pascal
— Python

Как вспомогательную:

— Java
— C#
— ActionScript 3

Поддерживают частично:
— C/C++

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

Вместо заключения

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

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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *