В чем состоит особенность процедурно и проблемно ориентированных систем программирования

Что такое процедурное программирование?

Что такое процедурное программирование?

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

Ключевые особенности процедурного программирования

Ключевые особенности процедурного программирования приведены ниже:

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

Преимущества и недостатки процедурного программирования

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

Недостатки

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

Что такое объектно-ориентированное программирование (ООП)

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

Недостатки

Процедурное программирование против объектно-ориентированного программирования: сравнение между собой

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

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

Недостатки

Вывод

Как мы уже говорили в этой статье, процедурное программирование — это больше, чем вы делаете, а не то, как вы это делаете. Это стандартный подход, используемый во многих компьютерных языках, таких как C, Pascal и BASIC. Хотя идеальной парадигмы программирования не существует, важно понимать, что правильная парадигма всегда будет зависеть от типа используемого вами языка и программы, которую вы хотите создать. Рекомендуется, чтобы для достижения максимальных результатов и сильного портфеля, нужно было владеть всеми тремя основными парадигмами программирования. Лучший способ попытаться стать лучше в программировании — это, конечно пройти курсы программирования.

Источник

В чем разница между процедурным программирование и объектно-ориентированным?

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

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

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

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

Источник

Классификация языков программирования

Существует множество критериев, по которым можно классифицировать языки программирования. Частые варианты классификации включают:

Чёткой классификации не существует, по той простой причине, что существуют буквально тысячи ЯП, и в любой категории классификации обнаруживается практически непрерывный спектр.

По системе типов

Наиболее категоричное разделение ЯП по системе типов на типизированные и нетипизированные.

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

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

Типизированные языки определяют типы данных, с которыми работает любая операция. Например, операция деления работает над числами – для строк эта операция не определена.

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

По моменту проверки типов ЯП делятся на статически и динамически типизированные (или просто, статические и динамические).

Статически типизированные языки

При статической типизации, типы всех выражений точно определены до выполнения программы, и обычно проверяются при компиляции. Языки со статической типизацией, в свою очередь могут быть явно типизированными (manifestly typed) или типовыводящими (type-inferred).

Явно типизированные языки

требуют явного указания типов. К ним относятся, например, C, C++, C#, Java.

определяют (выводят) типы большинства выражений автоматически, и требуют явного аннотирования только в сложных и неоднозначных случаях. К ним относятся, например, Haskell и OCaml.

Надо заметить, что многие явно типизированные языки умеют выводить типы в некоторых случаях (например, auto в С++11), поэтому чёткую грань здесь провести можно не всегда.

Динамически типизированные языки

производят проверку типов на этапе выполнения. Иначе говоря, типы связаны со значением при выполнении, а не с текстовым выражением. Как и типовыводящие языки, динамически типизированные не требуют указания типов выражений. Помимо прочего, это позволяет одной переменной иметь значения разных типов в разные моменты исполнения программы. Однако, ошибки типов не могут быть автоматически обнаружены, пока фрагмент кода не будет выполнен. Это усложняет отладку и несколько подрывает идею типобезопасности в целом. Примерами динамически типизированных языков являются Lisp, Perl, Python, JavaScript и Ruby.

По строгости типизации языки делятся на сильно и слабо типизированные.

Слабо типизированные языки

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

Сильно типизированные языки

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

В целом, чёткую грань провести оказывается опять-таки достаточно сложно, поскольку неявное преобразование типов в той или иной мере производится в большинстве языков. Однозначно к слабо типизированным относят Perl, JavaScript и C (в силу свободной конверсии void* ). К сильно типизированным относят C++, Java, Haskell, и другие.

По уровню абстракции

Классификация по уровню абстракции сильно зависит от современных представлений о “высоком уровне абстракции”.

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

Java, Python, Ruby и т.п. сейчас общепринято считаются языками высокого уровня.

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

По модели исполнения

ЯП может быть компилируемым, транс-компилируемым или интерпретируемым.

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

Интерпретируемые языки: PHP, Perl, Bash, Python, JavaScript

Компилируемый язык компилируется, т.е. переводится в исполнимую форму до выполнения.

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

Компилируемые языки (машинный код): С, С++, Algol, Fortran, Haskell Компилируемые языки (байт-код): Python, Java

Транс-компилируемые языки – это языки, которые для компиляции или выполнения транслируются в другой язык. Частой целью для транс-компилируемых языков является C. Также последнее время популярной целью является JavaScript (как единственный язык, исполняемый в браузере).

Транс-компилируемые языки: C++ (исторически, в C), Haskell (исторически, в С), Fortran (иногда, в С), Fay (в JavaScript)

Линии сильно размыты, поскольку существуют компиляторы для традиционно интерпретируемых языков, и, напротив, интерпретаторы для традиционно компилируемых.

Классификация по “поколению”

Поколение – несколько условная характеристика, которая в значительной мере связана с историей появления современных языков программирования.

Языки первого поколения

1GL – это машинные языки. Исторически, программы на этих языках вводились при помощи переключателей на передней панели ЭВМ, либо “писались” на перфокартах и позже перфолентах. Программа на 1GL состоит из 0 и 1 и сильно привязана к конкретному железу, на котором она должна исполняться.

Языки второго поколения

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

Языки третьего поколения

Более абстрактные, чем 2GL, это языки, которые перекладывают заботу о непринципиальных деталях с плеч программиста на плечи компьютера. Fortran, ALGOL и COBOL являются первыми 2GL. C, C++, Java, BASIC и Pascal так же могут быть отнесены к 3GL, хотя в общем 3GL подразумевает только структурную парадигму (в то время как C++, Java работают в том числе в ООП)

Языки четвертого поколения

Определение несколько расплывчато, однако в целом сводится к еще более высокому уровню абстракции, чем 3GL. Однако, подобный уровень абстракции часто требует сужения области применения. Так, например, FoxPro, LabView G, SQL, Simulink являются 4GL, однако находят применение в узкой специфической области. Некоторые исследователи считают, что 4GL являются подмножеством DSL (domain specific language, язык, специфичный к области).

Языки пятого поколения

В конце 80-х – начале 90-х была попытка разработать класс языков, которые “пишут программы сами”. По идее, программист должен был описывать как программа должна себя вести, а остальное должен был делать компьютер. К примерам можно отнести Prolog, OPS5, Mercury. Хотя эти языки остаются интересными с теоретической точки зрения, широкого практического применения они не нашли.

Парадигмы программирования

Определение

Вообще строгого определения нет, но по сути “парадигма программирования” определяет стиль написания исходного кода программ.

В некоторой степени “стиль” диктует так же способ формализации алгоритмов.

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

Императивное программирование характеризуется в основном:

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

Практически всё аппаратное обеспечение в основе своей императивное.

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

Характерно для наиболее ранних языков программирования.

В основном характеризуется:

Характерной особенностью неструктурного программирования является сложность реализации рекурсии.

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

В отличие от неструктурного программирования, характеризуется:

Концепция структурного программирования основана на теореме Бёма-Якопини:

Любая вычислимая функция может быть представлена комбинацией трёх управляющих структур:

Последовательность – это выполнение сначала одной подпрограммы, затем другой.

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

Итерация – это многократное выполнение подпрограммы пока некое булево выражение истинно.

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

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

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

Оба этих пункта реализуются за счёт использования стека вызовов.

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

Объектно-ориентированное программирование основано на концепции “объекта”.

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

Наиболее популярной формой ООП является ООП на основе классов. В данном подходе, все объекты являются экземплярами классов, и классы определяют так же тип объектов.

Одной из альтернатив является прототипное наследование. Прототипное наследование не использует классов. Вместо этого, одни объекты могут быть объявлены “прототипами” других объектов – при этом методы и поля прототипа становятся доступны как методы и поля нового объекта (если, конечно, новый объект их не переопределяет)

Декларативное программирование

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

Как следствие, декларативные программы не используют понятия состояния, то есть не содержат переменных и операторов присваивания.

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

“Чисто декларативные” компьютерные языки зачастую не полны по Тьюрингу — примерами служат SQL и HTML — так как теоретически не всегда возможно порождение исполняемого кода по декларативному описанию. Это иногда приводит к спорам о корректности термина “декларативное программирование”.

Функциональное программирование

Основано на лямбда-исчислении

Аппликативное

Аппликативное программирование — один из видов декларативного программирования, в котором написание программы состоит в систематическом осуществлении применения одного объекта к другому. Результатом такого применения вновь является объект, который может участвовать в применениях как в роли функции, так и в роли аргумента и так далее. Это делает запись программы математически ясной. Тот факт, что функция обозначается выражением, свидетельствует о возможности использования значений-функций — функциональных объектов — на равных правах с прочими объектами, которые можно передавать как аргументы, либо возвращать как результат вычисления других функций.

Комбинаторное

Комбинаторное программирование (англ. function-level programming) — парадигма программирования, использующая принципы комбинаторной логики.

Является особой разновидностью функционального программирования, но, в отличие от основного его направления, комбинаторное программирование не использует λ-абстракцию.

На практике это выливается в отсутствие “переменных”, содержащих данные.

Логическое программирование

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

Самым известным языком логического программирования является Prolog.

Источник

Языки программирования высокого уровня

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

Теоретическую основу языков программирования составляют алгоритмические языки. В настоящее время для ЭВМ разработано значительное количество языков программирования. Они отличаются друг от друга различными свойствами, а значит, и областью применения. Существуют разные подходы к классификации языков программирования. На рис. 1.11 представлена схема, в которой языки программирования систематизированы по возможностям и ориентации на конкретную сферу применения.

Рис. 1.11. Классификация языков программирования

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

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

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

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

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

Большинство современных языков программирования ориентировано на тот или иной круг задач. Языки программирования, используемые в мировой практике:

– Кобол и PL/1 – для обработки экономической информации;

– Фортран – для решения инженерных и научных задач;

– Бейсик, Паскаль – для обучения программированию;

– Пролог, Лисп – для задач искусственного интеллекта;

– Симула – для описания задач моделирования дискретных событий;

– Модула-2, Ада для управления реальными объектами;

– Снобол – для манипуляции с текстами и др.

Наиболее широко представлен класс универсальных языков программирования. Среди них можно выделить такие популярные языки высокого уровня, как Бейсик, Паскаль, Фортран, Кобол, Модула-2, PL/1 и ряд других.

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

Для различных типов ПК, которые существенно отличаются друг от друга, были разработаны соответствующие версии языка. Для ПК типа IBM PC и совместимых с ними ПК наиболее удачной считается версия фирмы Microsoft. Она обеспечивает использование Бейсика для решения задач обработки больших массивов данных (работа с файлами), инженерно-технических и научных расчетов (с помощью большого набора математических функций), обработки текстов (за счет эффективной работы со знаковыми последовательностями), а также решения комплексных задач (за счет отдания оверлейных программных структур). Появление мощных компиляторов, таких, например, как Quick Basic и Visual Basic фирмы Microsoft, поставило этот язык в ряд с другими языками высокого уровня и придает ему дополнительную популярность.

Язык Паскаль считается одним из самых распространенных языков программирования. Со временем Паскаль зарекомендовал себя как инструмент для решения сложных задач, так как его разработчик специально конструировал язык, позволяющий создавать хорошо структурированные программы. Причиной популярности этого языка у пользователей IBM PC и совместимых с ними ПК стало появление версии языка Паскаль – Турбо Паскаль фирмы Borland International. Турбо Паскаль характеризуется такими важными особенностями, как полноэкранное редактирование, графика, звуковое сопровождение. Система программирования на Турбо-Паскале сама является резидентной программой. Она позволяет пользователю вводить его программы и выполнять их немедленно, не тратя время на компилирование. Турбо-Паскаль создан как инструмент быстрой разработки не очень больших программ (с числом строк до 500). Более длинные программы приходится сегментировать и использовать оверлейные структуры.

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

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

Язык Кобол был разработан специально для решения экономических задач. В отличие от Фортрана Кобол дает возможность составлять более удобочитаемые программы, понятные даже непрограммисту. В программах на Коболе особенно проявляется самодокументируемость, что облегчает их исправление и усовершенствование, а при обработке данных сложной структуры он бывает эффективнее Паскаля. Кобол, будучи широко распространенным на больших и средних машинах, на ПК используется мало, хотя фирмой Microsoft разработано несколько версий языка для операционных систем MS DOS и UNIX.

Наиболее удачной версией языка Кобол на сегодняшний день является Кобол/U, в который встроены средства генерации отчетов с использованием языка RPG. Фирмой IBM в развитие идей Фортрана, Алгола и Кобола был предложен язык PL/1, который получил наибольшее расспространение на больших машинах. PL/1 разрабатывался как универсальный язык программирования, поэтому располагает большим набором средств обработки цифровой и текстовой информации. Однако эти достоинства делают его сложным для изучения и использования.

Класс проблемно-ориентированных языков представлен гораздо скромнее, чем класс универсальных языков программирования. К этому классу можно отнести языки Лого, RPG и систему программирования GPSS.

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

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

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

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

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

К функциональным языкам программирования можно отнести языки Лисп, Пролог и Снобол. Язык Лисп является прекрасным инструментальным средством для построения программ с использованием методов искусственного интеллекта. Имеется несколько реализаций лисп-трансляторов для ПК различных классов. Особенность этого языка заключается в удобстве динамического создания новых объектов. В качестве порождаемых программой объектов могут фигурировать и сами программы, которые внешне ничем не отличаются от данных. Это обусловливает возможность построения адаптирующихся и самоизменяющихся программ. Память в языке Лисп используется динамически; когда создается новый объект, то для него из незанятой памяти берется столько ячеек, сколько нужно для хранения всех элементов. При этом не требуется никакого заблаговременного резервирования памяти, как в других языках (например, в Паскале). При уничтожении объекта занятая им память автоматически освобождается. Если язык Лисп известен давно, то язык Пролог получил широкую известность в связи с японским проектом создания вычислительных систем пятого поколения. Одной из первых реализаций был интерпретатор микроПролог фирмы Programming Logic Associates для машин фирмы IBM. Затем появилась мощная система программирования Турбо Пролог, разработанная фирмой Borland International для этих же машин. Она предназначалась для создания широкого класса систем искусственного интеллекта, в том числе персональных экспертных систем. Версия Турбо Пролог значительно отличается от стандартного Пролога. Отличия, прежде всего, касаются наличия в нем встроенных средств типизации данных и большей структурированности исходных текстов программ.

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

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

– назначение разрабатываемой программы (будет ли она использоваться временно или постоянно, будет ли она модернизироваться и развиваться);

– время выполнения программы (имеется в виду соотношение вычислительных процедур и процедур ввода-вывода);

– ожидаемый размер программы (хватит ли памяти для реализации целиком всей программы или следует ее разделить на отдельные взаимодействующие модули);

– необходимость сопряжения разрабатываемой программы с другими пакетами или программами, в том числе составленными на других языках программирования;

– предусматривается ли возможность переноса программы на другие типы ЭВМ;

– основные типы данных, с которыми будет работать программа (целые и вещественные числа, строки, списки и другие типы структур);

– характер и уровень использования аппаратных средств (дисплея, клавиатуры, накопители на магнитных дисках и др.);

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

С учетом этих критериев возможности языков могут весьма сильно различаться, поэтому правильный выбор алгоритмического языка высокого уровня является непростой задачей. Для программиста или даже коллектива программистов характерно начинать использование ПК с языка Бейсик или Паскаль. На Бейсике (и его разновидностях) реализовано довольно много хороших прикладных систем. Появление компиляторов для Бейсика делает этот язык еще более привлекательным, так как позволяет быстро переходить от экспериментальной, интерпретируемой версии программы к ее окончательной версии. В последнее время появились разработки программ на этом языке для систем искусственного интеллекта и экспертных систем.

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

Источник

Понравилась статья? Поделиться с друзьями:

Не пропустите наши новые статьи:

  • В чем состоит особенность процедурно и проблемно ориентированных систем программирования ответ
  • В чем состоит особенность процедурно и проблемно ориентированных систем программирования кратко
  • В чем состоит особенность модульного программирования
  • В чем состоит особенность логического программирования
  • В чем состоит основное различие между операционной системой и прикладными программами

  • Операционные системы и программное обеспечение
    0 0 голоса
    Рейтинг статьи
    Подписаться
    Уведомить о
    guest
    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии