Файл: Основы программирования на языке Pascal (Исследование предметной области).pdf
Добавлен: 30.03.2023
Просмотров: 257
Скачиваний: 2
Имеются следующие преимущества функционального программирования:
1. Высокий уровень абстракции, особенно когда используются чистые функции, которые исключают многие нюансы программирования и, таким образом, устраняют возможность совершения многих классов ошибок;
2. Отсутствие зависимости от операций присваивания. Эта независимость в отношении оценки делает функционально-ориентированные языки хорошими кандидатами для программирования параллельных компьютерных систем;
3. Отсутствие операций присваивания делает функционально-ориентированные программы гораздо более пригодными для математического доказательства и анализа, чем настольные программы, поскольку функциональные программы обладают ссылочной прозрачностью. [4, 10, 13]
К недостаткам можно отнести следующие:
1. Возможно, менее эффективно.
2. Проблемы, связанные с множеством переменных или много последовательной деятельности, иногда легче обрабатывать императивно или с объектно-ориентированным подходом.
Объектно-ориентированное программирование (ООП) — это парадигма, в которой объекты реального мира рассматриваются как отдельные сущности, имеющие собственное состояние, которое модифицируется только встроенными процедурами, называемыми методами.
Объектно-ориентированное программирование — это подход программирования, который использует классы и объекты для создания моделей, основанных на реальной среде. Объектно-ориентированное программирование может использовать коллекцию объектов, которые будут передавать сообщения при запросе конкретной услуги или информации. Объекты могут передавать, получать сообщения или обрабатывать информацию в виде данных.
Поскольку объекты работают независимо, они инкапсулируются в модули, которые содержат как локальные среды, так и методы. Связь с объектом осуществляется путем передачи сообщений.
Объекты организованы в классы, из которых они наследуют методы и эквивалентные переменные. Объектно-ориентированная парадигма обеспечивает ключевые преимущества многоразового кода и расширяемости.
Новый класс (называемый производным классом или подклассом) может быть получен из другого класса (называемого базовым классом или суперклассом) с помощью механизма, называемого наследованием. Производный класс наследует все функции базового класса: его структуру и поведение. Кроме того, производный класс может содержать дополнительное состояние (переменные экземпляра) и может проявлять дополнительное поведение. Примечательно, что производный класс может также переопределить поведение, соответствующее некоторым методам базового класса. Кроме того, механизм наследования разрешен даже без доступа к исходному коду базового класса.
Возможность использования наследования является самой отличительной особенностью парадигмы ООП. Наследование дает ООП главное преимущество над другими парадигмами программирования — относительно простое повторное использование кода и расширение без необходимости изменения существующего исходного кода. [7]
Механизм моделирования программы как совокупности объектов различных классов и, кроме того, использование классов как в качестве модификаций других классов, обеспечивает высокую степень модульности.
Инкапсуляция — в объектно-ориентированном программировании - сокрытие внутренней структуры данных и реализации методов объекта от остальной программы. В идеале, состояние объекта инкапсулируется и получает доступ только к методам этого объекта. Таким образом, инкапсуляция и скрытие информации являются неотъемлемыми преимуществами ООП. [12, 14]
Одной из причин использования объектно-ориентированного программирования является то, что оно упрощает сохранение и изменение существующего кода при создании новых объектов, наследующих характеристики от существующих. Это значительно сокращает время разработки и упрощает настройку программы.
Еще одной причиной использования объектно-ориентированного программирования является простота разработки и способность хорошей поддержки в дальнейшем, когда, например, разработчикам необходимо будет внести корректировки в код. Хорошо прокомментированные объекты и классы могут рассказать разработчику о том, что пытается делать та или иная функция программы.
1.3 Процедурное программирование
Процедурное программирование — это парадигма программирования, полученная из структурированного программирования, основанная на концепции вызова процедуры. Процедуры, также известные как подпрограммы или функции, просто содержат ряд вычислительных шагов, которые должны быть выполнены.
Процедурное программирование — есть отражение фон Неймановской архитектуры компьютера. Программа, написанная на процедурном языке, представляет собой последовательность команд, определяющих алгоритм решения задачи.
Модульность обычно желательна, особенно в крупных сложных программах. Входы обычно указываются синтаксически в форме аргументов, а выходы передаются как возвращаемые значения. [8]
Область видимости — еще один метод, который помогает сохранять процедуры модульными. Это не позволяет процедуре получить доступ к переменным других процедур (и наоборот), включая предыдущие экземпляры, без явного разрешения.
Менее модульные процедуры, часто используемые в небольших или быстро написанных программах, имеют тенденцию взаимодействовать с большим количеством переменных в среде выполнения, которые могут также изменить другие процедуры.
Из-за способности указывать простой интерфейс, быть автономным и повторно использоваться, процедуры являются удобным средством для создания фрагментов кода, написанных разными людьми или различными группами, в том числе через библиотеки программирования. [4, 11]
Процедурное программирование, которое порой упоминается как встроенное программирование, требует более глубокого подхода к программированию. Объектно-ориентированное программирование использует классы и объекты, процедурное программирование принимает приложения, решая проблемы с верхней части кода к нижней.
Это происходит, когда программа запускается с проблемой, а затем разбивает эту проблему на более мелкие суб-проблемы или подпроцедуры. Эти подпроцедуры непрерывно разрушаются в процессе, называемом функциональной декомпозицией, до тех пор, пока подпроцедура не будет достаточно простой, чтобы ее можно было решить. [7]
Проблема, очевидная в процедурном программировании, заключается в том, что, если редактирование требуется программе, разработчик должен отредактировать каждую строку кода. Например, если в начале программы переменная была установлена равной значению 1. Если другие подпроцедуры программы полагаются на эту переменную равным 1 для правильной работы, их также необходимо будет отредактировать. Поскольку для кода может потребоваться все больше изменений, становится все труднее находить и редактировать все связанные элементы в программе. [3, 9]
В данной главе были раскрыты такие понятия как объектно-ориентированное программирование, процедурно-ориентированное программирование и рассмотрены другие парадигмы программирования.
2. Особенности языка Pascal
2.1 История появления языка Pascal
Паскаль, Pascal — высокоуровневый язык программирования общего назначения (3GL). Один из наиболее известных языков программирования, используется для обучения программированию в старших классах и на первых курсах вузов, является базой для ряда других языков, таких как Ада, Модула-2, Delphi, однако, уже устарел для использования в промышленном программировании. [4]
Язык Паскаль был создан Никлаусом Виртом в 1968—1969 годах после его участия в работе комитета разработки стандарта языка Алгол-68. Язык назван в честь французского математика, физика, литератора и философа Блеза Паскаля, который создал первую в мире механическую машину, складывающую два числа. Первая публикация Вирта о языке датирована 1970 годом, представляя язык, автор указывал в качестве цели его создания — построение небольшого и эффективного языка, способствующего хорошему стилю программирования, использующему структурное программирование и структурированные данные.
В 1978 году в Калифорнийском университете в Сан-Диего была разработана система UCSD p-System, включавшая порт компилятора Вирта с языка Паскаль в переносимый p-код, редактор исходных кодов, файловую систему и прочее, а также реализовывавшая значительное число расширений языка Паскаль, такие как модули, строки символов переменной длины, директивы трансляции, обработка ошибок ввода-вывода, обращение к файлам по именам и другое. Впоследствии основные реализации языка Паскаль основывались на этом диалекте. [1]
В 1983 году появилась первая версия интегрированной среды разработки Turbo Pascal фирмы Borland, основывавшаяся на одноимённой реализации Паскаля.
В 1989 году объектное расширение языка было добавлено в Turbo Pascal версии 5.5.
Последняя версия (7.0) была переименована в Borland Pascal.
Объектные средства были позаимствованы из Object Pascal от Apple, языковые различия между объектным Turbo Pascal 5.5 и Object Pascal от Apple крайне незначительны.
Почти в то же самое время, что и Borland, Microsoft выпустил свою версию объектно-ориентированного языка Паскаль. Эта версия Паскаля не получила широкого распространения.
Дальнейшее развитие реализации Паскаля от Borland породило вариант Object Pascal от Borland, впоследствии, в ходе развития среды программирования Delphi, получивший одноимённое название. [8]
Важным шагом в развитии языка является появление свободных реализаций языка Паскаль Free Pascal и GNU Pascal, которые не только вобрали в себя черты множества других диалектов языка, но и обеспечили чрезвычайно широкую переносимость написанных на нём программ (например GNU Pascal поддерживает более 20 различных платформ, под более чем 10 различными операционными системами, Free Pascal обеспечивает специальные режимы совместимости с различными распространёнными диалектами языка, такими как Turbo Pascal (полная совместимость), Delphi и другими).
Начиная с Delphi 2003, создана реализация языка для платформы Net, хотя разработчики продолжают использовать Delphi более ранних версий.
О коммерческих разработках на Free Pascal, GNU Pascal и TMT Pascal на данный момент известно мало.
Кроме того, в Южном федеральном университете разрабатывается язык и система программирования PascalABC.NET, ориентированная на обучение современному программированию. Язык системы — это Object Pascal для платформы Microsoft .NET, который содержит все основные элементы современных языков программирования: модули, классы, перегрузку операций, интерфейсы, исключения, обобщённые классы, сборку мусора, а также некоторые средства параллельного программирования.
Особенностями языка являются строгая типизация и наличие средств структурного (процедурного) программирования. Паскаль был одним из первых таких языков. По мнению Вирта, язык должен способствовать дисциплинированному программированию, поэтому, наряду со строгой типизацией, в Паскале сведены к минимуму возможные синтаксические неоднозначности, а сам синтаксис автор постарался сделать интуитивно понятным даже при первом знакомстве с языком. [14]
Тем не менее, первоначально язык имел ряд ограничений: невозможность передачи функциям массивов переменной длины, отсутствие нормальных средств работы с динамической памятью, ограниченная библиотека ввода-вывода, отсутствие средств для подключения функций написанных на других языках, отсутствие средств раздельной компиляции и т. п. Подробный разбор недостатков языка Паскаль того времени был выполнен Брайаном Керниганом в статье "Почему Паскаль не является моим любимым языком программирования?" (эта статья вышла в начале 1980-х, когда уже существовал язык Модула-2, потомок Паскаля, избавленный от большинства его пороков, а также более развитые диалекты Паскаля). Некоторые недостатки Паскаля были исправлены в ISO-стандарте 1982 года, в частности, в языке появились открытые массивы, давшие возможность использовать одни и те же процедуры для обработки одномерных массивов различных размеров.
Однако многие недостатки языка не проявляются или даже становятся достоинствами при обучении программированию. Кроме того, по сравнению с основным языком программирования в академической среде 1970-х (которым был Фортран, обладавший гораздо более существенными недостатками), Паскаль представлял собой значительный шаг вперёд. К 1980-м годам Паскаль стал основой для многочисленных учебных программ, в отдельных случаях на его основе были созданы специализированные обучающие языки программирования, так, в начале 1980-х годов в СССР для обучения школьников основам информатики и вычислительной техники Андрей Ершов разработал алголо-паскалеподобный «учебный алгоритмический язык». [12]