АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомДругоеЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция

Пример 6.11

Читайте также:
  1. X. примерный перечень вопросов к итоговой аттестации
  2. В некоторых странах, например в США, президента заменяет вице-
  3. Вания. Одной из таких областей является, например, регулирова-
  4. Виды знания. Контрпример стандартному пониманию знания
  5. Власть примера. Влияние с помощью харизмы
  6. Внешний долг (внешняя задолженность): пример России
  7. Вопрос 11. Герои романтических поэм М. Ю. Лермонтова (на примере одного произведения).
  8. Вопрос 2 Проверка и оценка в задачах со случайными процессами на примере решения задач экозащиты, безопасности и риска.
  9. Вопрос 8. Герои романтических поэм А. С. Пушкина (на примере одного произведения).
  10. Второй пример абстрактного синтеза
  11. Выбор канала распределения. Факторы, влияющие на выбор канала распределения.. Пример выбора канала распределения.
  12. Выравнивание производства в системы управления производством на примере фирмы «Тойота».

Задана матрица символов Х(ЮОхЮО), представляющая собой карту ночного неба; звездам на карте соответствуют символы «*». Определить: сколько звезд на карте?

Алгоритм решения задачи достаточно прост, необходимо пере­брать все элементы матрицы и посчитать, сколько среди них симво­лов «*». Обозначим К переменную — счетчик. На рис, 6.20 представ­лена блок-схема решения этой задачи.





У =1,100,1

"


 

К = 0


1=1,100,1

 

с

га

Конец


Рис. 6.20. Алгоритм примера 6.11


6.6, языку программирования

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

Писать программы в машинных кодах очень сложно, причем с ростом размера программы эта задача усложняется. В компьютерах первого поколения использовались программы, написанные в ма­шинных кодах, причем для каждого компьютера существовал свой собственный машинный код. Числовая кодировка команд, адресов ячеек и обрабатываемых данных, зависимость вида программы от ее места в памяти не давали возможность следить за смыслом програм­мы. Это во многом ограничивало область применения компьютеров первого поколения. В тот период (начало 50-х гг.) средства програм­мирования и программное обеспечение только зарождались и были еще не развиты. Для того чтобы сделать программу читабельной и иметь возможность следить за ее смысловой структурой, придумали символический язык ассемблер, близкий к машинному (конец 50-х — начало 60-х гг.), в котором появилось понятие переменной. Ассемб­лер стал первым полноценным языком программирования. Благода­ря этому заметно уменьшилось время разработки и возросла надеж­ность программ. Для записи кодов операций и обрабатываемой информации в ассемблере используются стандартные обозначения, позволяющие записывать числа и текст в общепринятом виде, для кодов команд приняты мнемонические обозначения. Для обозначе­ния величин, размещаемых в памяти, можно поименять имена. После ввода программы ассемблер сам заменяет символические имена на адреса памяти, а символические коды команд на числовые. Исполь­зование ассемблера сделало процесс программирование более нагляд­ным. Дальнейшее развитие этой идеи привело к созданию языков


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

6,6,1, Понятие «с»зы«программирования»

Сегодня практически все программы создаются с помощью язы­ков программирования. Теоретически программу можно написать и на естественном языке (говорят: программирование на метаязыке), но из-за неоднозначности естественного языка автоматически пере­вести такую программу в машинный код пока невозможно.

Языки программирования — это формальные искусственные язы­ки. Как и естественные языки, они имеют алфавит, словарный запас, грамматику и синтаксис, а также семантику.

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

Синтаксис — система правил, определяющих допустимые конст­рукции языка программирования из букв алфавита.

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

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

Языки программирования, ориентированные на команды про­цессора и учитывающие его особенности, называют языками низко­го уровня. «Низкий уровень» не означает неразвитый, имеется в виду, что операторы этого языка близки к машинному коду и ориентиро­ваны на конкретные команды процессора.

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


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

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

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

6,6,2, Компиляторы и интерпретаторы

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

Интерпретатор функционирует следующим образом: берет оче-


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

Компиляторы полностью обрабатывают весь текст программы (его называют исходным кодом или зоигсе соёе). Они осуществляют поиск синтаксических ошибок, выполняют семантический анализ и только затем, если текст программы в точности соответствует пра­вилам языка, его автоматически переводят (транслируют) на машин­ный язык (говорят: генерируют объектный код или оЬ)ес1 соде). Не­редко при этом выполняется оптимизация с помощью набора методов, позволяющих повысить быстродействие программы. Сгене­рированный объектный код обрабатывается специальной программой — сборщиком или редактором связей, который производит связыва­ние объектного и машинного кодов. Текст программы преобразует­ся в готовый к исполнению ЕХЕ-файл (исполнимый код), его можно сохранить в памяти компьютера или на диске. Этот файл имеет са­мостоятельное значение и может работать под управлением опера­ционной системы. Его можно перенести на другие компьютеры с процессором, поддерживающим соответствующий машинный код.

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

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

11. Информатика


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

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

6,6,3, Системы программировании

Процесс создания программы включает:

• Составление исходного кода программы (рис. 6.21) на языке про­
граммирования.

• Этап трансляции, необходимый для создания объектного кода
программы.

• Построение загрузочного модуля, готового к исполнению.

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


НИсходный [I код


Трансляция


Объектный код


Редактор

связен


Загрузочный

модуль


Рис. 6.21. Процесс создания программы, готовой к исполнению

Совокупность этих программных средств входит в состав систе­мы программирования:

• Текстовый редактор (необходимый для создания и редактирова­
ния исходного кода программы на языке программирования).

• Компилятор.

• Редактор связей.

• Отладчик.


• Библиотеки функций.

• Справочная система.

6,6.4, Классификация и обзор программирования

Современное состояние языков программирования можно пред­ставить в виде следующей классификации (рис. 6.22).


Операцион -ные   Структурные
Объектные   Визуальные
Процедурные

 

 

 

 

 

  ЯЗЫКИ ПРОГРАММИРОВАНИЯ  
   
Е   ч г    
ше ные) Объектно-ориентированные Декла
               

Функцио­нальные   Логические

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

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

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

Одним из первых процедурных языков программирования высоко-


го уровня стал Фортран (ЮКти\ъ 7ХМЛ/81а1юп), созданный в начале 50-х гг. в США фирмой 1ВМ. Первая публикация о нем появилась в 1954 г. Основное назначение языка — программирование научно-тех­нических задач. Объектами языка являются целые и вещественные числа и числовые переменные. Выражения в нем формируются с помощью четырех арифметических действий: возведения в степень, логических операций И, ИЛИ, НЕ, операций отношения и круглых скобок. Основные операторы Фортрана — ввод, вывод, присваива­ние, условный и безусловный переход, цикл, вызов подпрограмм. Долгие годы он был одним из самых распространенных языков в мире. За это время накоплена огромная библиотека программ, на­писанных на Фортране. И сейчас ведутся работы над очередным стандартом Фортрана. В 2000 г. была реализована версия Фортран Р2к, имеется стандартная версия НРР (НщН РегГогтапсе РоЛгап) для параллельных суперкомпьютеров. Многие средства Фортрана исполь­зованы в языках РЬ-1 и Бейсик.

Кобол (СОттоп 1?и8те88 Опеп1ей Хап§иа§е — общепринятый де­ловой язык) — язык программирования, ориентированный на реше­ние задач обработки данных. Широко используется для решения учетно-экономических и управленческих задач. Разработан в США в 1958—1960 гг. Программа на Коболе имеет вид ряда предложений на английском языке и напоминает обычный текст. Группы после­довательно записанных операторов объединяются в предложения, предложения — в параграфы, параграфы — в секции. Программист присваивает параграфам и секциям имена (метки), что облегчает непосредственное обращение к нужному участку программы. В СССР был принят русский вариант языка. В Коболе были реализованы мощные средства работы с большими объемами данных, хранящи­мися на различных внешних носителях. На этом языке создано много приложений, некоторые из них активно эксплуатируются и сейчас. Достаточно сказать, что одной из высокооплачиваемых категорией граждан в США являются программисты на Коболе.

Алгол (АШОп\&т\с /лп§иа§е) разработан группой зарубежных специалистов в 1960 г., явился результатом международного сотруд­ничества конца 50-х гг. (Алгол-60). Алгол предназначался для запи­си алгоритмов, построенных в виде последовательности процедур, применяемых при решении поставленных задач. Специалисты-прак­тики воспринимали этот язык неоднозначно, но тем не менее он как


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

В середине 60-х гг. сотрудники математического факультета Дар-тмутского колледжа Томас Курц и Джон Кемени создали специали­зированный язык программирования, который состоял из простых английских слов. Новый язык назвали универсальным символическим кодом для начинающих (/?е§тпег$ ЛИ-ригрозе 5УтЪоНс /П51шс1юп Соде) или сокращенно ВА81С (Бейсик). 1964 г. считают годом рождения этого языка. Он получил самое широкое распространение при рабо­те на персональных компьютерах в режиме интерактивного диалога. Популярность Бейсика объясняется как простотой его освоения, так и наличием достаточно мощных универсальных средств, пригодных для решения научных, технических и экономических задач, а также задач бытового характера, игровых и т.д. Согласно концепциям, за­ложенным в Бейсике, в нем широко распространены различные пра­вила умолчания, что считается плохим тоном в большинстве языков программирования подобного типа. Возникло множество версий язы­ка, зачастую мало совместимых друг с другом. Однако, зная одну из


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

В начале 60-х гг. каждый из существующих языков программи­рования был ориентирован на разные классы задач, но в той или иной мере привязан к конкретной архитектуре ЭВМ. Были предпри­няты попытки преодолеть этот недостаток путем создания универ­сального языка программирования. ПЛ/1 (РЬ/1 — Рго§гатт1пё Хап§иа§е Опе) — первый многоцелевой универсальный язык, разра­ботан в США фирмой 1ВМ в 1963—1966 гг. Это один из наиболее рас­пространенных универсальных языков, он хорошо приспособлен для решения задач в области вычислительной техники: исследования и планирования вычислительных процессов, моделирования, решения логических задач и исследования логических схем, разработки сис­тем математического обеспечения. При разработке РЬ/1 были ши­роко использованы основные понятия и средства языков Фортран, Алгол-60, Кобол. РЬ/1 — богатый и гибкий язык, дает возможность производить вставки, исправлять текст программы в процессе ее от­ладки. Язык получил широкое распространение, трансляторы с него имеются для многих типов компьютеров. Компания 1ВМ и сегодня продолжает поддерживать этот язык.

Паскаль (Ра$са1) является одним из наиболее популярных про­цедурных языков программирования, особенно для персональных компьютеров. Созданный как учебный язык программирования в 1968—1971 гг. Никлаусом Виртом в Высшей технической школе (ЕТН) в Цюрихе (Швейцария), он был назван в честь французского ма­тематика и философа Блеза Паскаля (1623—1662). Задачей Н. Вирта было создание языка, базирующегося на простом синтаксисе и не­большом количестве базовых конструкций, переводимого в машин­ный код простым компилятором.

В основе языковой концепции Паскаля лежит системный под­ход, предполагающий переход от общей задачи к частным (более простым и меньшим по объему). К основным принципам Паскаля следует отнести: • Структурное программирование. Его методология основана на

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


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

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

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

Период с конца 60-х до начала 80-х гг. характеризуется бурным ростом числа различных языков программирования, сопровождав­шим, как это ни парадоксально, кризис программного обеспечения. Этот кризис особенно остро переживало военное ведомство США. В январе 1975 г. Пентагон решил навести порядок среди бесчисленного множества трансляторов и создал комитет для разработки одного уни­версального языка. На конкурсной основе комитет рассмотрел сотни проектов и выяснил, что ни один из существующих языков не может удовлетворить их требованиям, для окончательного рассмотрения было оставлено два проекта. В мае 1979 г. был объявлен победитель — группа ученых во главе с Жаном Ихбиа. Победивший язык назва­ли АДА, в честь Ады Лавлейс, дочери великого поэта Байрона. Она в юности была увлечена идеями Чарльза Бэббиджа и помогала ему со­ставлять описание машины, а в начале 40-х гг. XIX в. разработала пер­вую в мире программу для вычислительной машины. Язык АДА — прямой наследник Паскаля. Он предназначен для создания и длитель­ного сопровождения больших программных систем, управления про­цессами в реальном масштабе времени. В языке четко выражена мо­дульность его конструкций, причем обеспечивается удобство организации разнообразных связей между модулями. Важным его до­стоинством является возможность параллельного программирования


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

Язык программирования С (Си) был разработан в лаборатории Ве11 для реализации операционной системы 1Ж1Х в начале 70-х гг. и не рассматривался как массовый. Он планировался для замены Ассемблера, чтобы иметь возможность создавать столь же эффектив­ные и компактные программы, и в то же время не зависеть от конк­ретного типа процессора. По набору управляющих конструкций и структур данных С имеет возможности, присущие высокоуровневым языкам, и вместе с тем он располагает средствами прямого обраще­ния к функциональным узлам компьютера. Синтаксис языка С по­зволяет создавать лаконичный программный код. Одна из существен­ных особенностей С, приближающая его к функциональным языкам, состоит в том, что различия между выражениями и операторами сгла­живаются. Например, выражения, являющиеся операторами про­граммы, могут выполнять дополнительно операции присваивания. Использование подпрограмм основано на понятии функции, которая может также сочетать в себе возможности процедуры. Понятие про­цедуры в языке С отсутствует. Синтаксис языка затрудняет читаемость программы. Отсутствие строгой типизации данных, возможность в одном выражении сочетать несколько действий делает этот язык при­влекательным для программистов, предоставляя им дополнительные возможности, но не способствует надежности создаваемых программ. Язык С популярен и широко используется профессиональными про­граммистами. В настоящее время он реализован для большинства компьютерных платформ.

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

Суть функционального (аппликативного) программирования опре­делена А.П. Ершовым как «способ составления программ, в которых единственным действием является вызов функции, единственным спо­собом расчленения программы на части является введение имени фун­кции, а единственным правилом композиции — оператор суперпозиции функций. Никаких ячеек памяти, ни операторов присва­ивания, ни циклов, ни, тем более, блок-схем, ни передачи управления».

Ключевым понятием в функциональных языках является выра­жение. К ним относятся константы, структурированные объекты,


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

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

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

Первым таким языком стал Лисп (Ы5Р, Ы81 Ргосе88Ш§ — обра­ботка списков), созданный в 1959 г. Джоном Маккарти. Этот язык ориентирован на структуру данных в форме списка и позволяет орга­низовать эффективную обработку больших объемов текстовой ин­формации. Существенная черта языка — единообразие программных структур и структур данных: все выражения записываются в виде списков.

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

Создание языка искусственного интеллекта Пролог (РКОШС, РЛ0§гаттт§ т ШС\с — программирование в терминах логики) в 1973 г. французским ученым Аланом Кольмероэ открыло новую об­ласть — логическое или реляционное программирование.


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

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

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

Пионером данного направления явился язык Смолток (ЗтаШаШ), первоначально предназначенный для реализаций функций машин­ной графики. Работа над языком началась в 1970 г. в исследователь­ской лаборатории ХЕКОХ (США), а закончилась в 1980 г. оконча­тельным вариантом интерпретатора 8та111а11<-80. Данный язык оригинален тем, что его синтаксис очень компактен и базируется ис­ключительно на понятии объекта. В нем отсутствуют операторы или данные, все, что входит в Смолток, является объектами, а объекты общаются друг с другом исключительно с помощью сообщений. В настоящее время версия У18иа1А&е (ог ЗтаШаИс активно развивает­ся компанией 1ВМ.

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


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

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

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

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

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


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

К наиболее распространенным современным языкам программи­рования относятся С++ и ]а\а.

Язык С++ был разработан в начале 80-х гг. Бьярном Страустру-пом в лаборатории Ве11 корпорации АТ&Т. Им была создана компак­тная компилирующая система, в основе которой лежал язык С, до­полненный элементами языков ВСРЬ, 5итш1а-67 и Алгол-68. Более ранние версии языка были известны как «С с классами». В июле 1983 г. С++ был впервые использован за пределами исследовательской груп­пы автора, однако тогда еще многие особенности языка не были придуманы. К 1990 г. была выпущена третья версия языка С++, стан­дартизированная американским государственным комитетом стан­дартов А^1. В 1990 г. сотрудник корпорации 8ип Д. Гослинг на ос­нове расширения С++ разработал объектно-ориентированный язык ОаК, основным достоинством которого было обеспечение сетевого взаимодействия различных по типу устройств. Новая интегрируемая в 1п1егпе1 версия языка получила название ]а\а. С января 1995 г. За\а получает распространение в 1п(егпе1.

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

Синтаксис языков С++ и За\а практически полностью совпада­ет. Принципиальным различием является то, что язык С++ компи­лируемый в машинный код, а За\а — в платформо-независимый байт-код (каждая команда занимает один байт), этот байт-код может выполняться с помощью интерпретатора — виртуальной 1ауа-маши-ны (За\а УМиа! МасЫпе), версии которой созданы сегодня для лю­бых платформ. С точки зрения возможностей объектно-ориентируе­мых средств, За\а имеет ряд преимуществ перед С++. Язык За\а имеет более гибкую и мощную систему инкапсуляции информации. Механизм наследования, реализованный в За\а, обязывает к более строгому подходу к программированию, что способствует надежнос­ти и читабельности кода. Язык С++ обладает сложной неадекватной и трудной для понимания системой наследования. Возможности ди­намического связывания объектов одинаково хорошо представлены


в обоих языках, но синтаксическая избыточность С++ и здесь при­нуждает к выбору языка 1ауа. Сегодня ]а\а по популярности зани­мает второе место в мире после Бейсика.

Идеи ООП проникли во многие процедурные языки. Например, в состав интегрированной системы программирования Паскаль (кор­порации Войапй 1п1егпа1юпа1), начиная с версии 5.5, входит специ­альная библиотека ООП ТигЬо У1§юп.

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

УВА (У18иа1 Ва§1с Гог АррИсаИоп) является общей языковой плат­формой для приложений мюгобой ОШсе (Ехсе1, \\Ьг<1, Родуег Рот1 и др.). УВА соблюдает основной синтаксис и правила программирова­ния языков Бейсик-диалектов. УВА помогает довольно сильно рас­ширить возможности приложений за счет написания макросов — программ, предназначенных для автоматизации выполнения многих операций. УВА позволяет создавать объекты управления графичес­кого интерфейса пользователя, задавать и изменять свойства объек­тов, подключать к ним необходимый для конкретного случая про­граммный код. С помощью УВА можно производить интеграцию между различными программными продуктами. Программы на язы­ке УВА для приложений создаются двумя способами: в автоматичес-


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

языку программирования баз Эаннын

Эти языки отличаются от алгоритмических прежде всего своим функциональным назначением. При работе с базами данных (БД) наиболее часто выполняются следующие операции: создание, преоб­разование, удаление таблиц в БД; поиск, отбор, сортировка по зап­росам пользователя; добавление новых записей или модификация существующих; удаление записей и др. Для обработки больших мас­сивов информации и выборки записей по определенным признакам был создан структурированный язык запросов 5рЬ (51шсШге(1 риегу Ьагщиаёе). Он был впервые создан фирмой 1ВМ в начале 70-х гг., назывался §(гис1ше<1 Еп§Н5Ь риегу Ьап§иа§е (5Е(31ШЬ) и предназна­чался для управления прототипом реляционной базы данных 1ВМ — 8у§1ет К. В дальнейшем ЗС^Ь стал стандартом языка работы с реля­ционными базами данных, что зафиксировано американским наци­ональным комитетом стандартов АН51 в 1986 г.

Практически в каждой СУБД имеется свой универсальный язык, ориентированный на ее особенности. Сегодня в мире ведущие про­изводители СУБД: М1сго8ой (8рЬ Зегуег), 1ВМ (ОВ2), Огас1е, 8ой\уаге АС (АйаЬаз), 1пГоггшх и 5уЪа§е. Их продукты предназначены для со­вместной параллельной работы тысяч пользователей в сети, а базы данных могут храниться в распределенном виде на нескольких сер­верах. В Огас1е имеется встроенный язык РЬ/8(2Ь, в 1пГопшх -ШРСЖМ1Х 4СЬ, в АйаЬаз - №Шга1 и т.д.

Языки программировании Эла компьютерный сетей

Появление и активное развитие компьютерных сетей стало при­чиной создания многочисленных версий популярных языков про­граммирования, адаптированных для использования в сети. Отличи­тельные особенности, присущие сетевым языкам: они являются интерпретируемыми. Интерпретаторы для них распространяются бес­платно, а сами программы — в исходных текстах. Такие языки полу­чили название скрипт-языков.


НТМЬ (Нурег Тех1 Майшр Ьап§иа§е) — универсальный язык раз­метки гипертекста, используемый для подготовки \УеЪ-документов для сети 1п1егпе1. Язык представляет собой набор элементарных ко­манд форматирования текста, добавления графических объектов (ри­сунков), задания шрифтов и цвета, организации ссылок и таблиц. В соответствии с командами НТМЬ броузер отображает содержимое документа, команды языка не отображаются. В основе языка НТМЬ лежит механизм гипертекстовых ссылок, обеспечивающий связь од­ного документа с другим. В НТМЬ текст кодируется в А8СИ и по­этому может быть создан и отредактирован в любом текстовом ре­дакторе. Все \УеЪ-страницы написаны на НТМЬ или используют его расширение.

РеН. В 80-х гг. Ларри Уолл разработал язык Рег1, который пред­назначался для эффективной обработки больших текстовых файлов, создания текстовых отчетов и управления задачами. В его состав вхо­дят многочисленные функции работы со строками, массивами, все­возможные средства преобразования данных, управления процесса­ми, работы с системной информацией и др.

Тс1/Т1с. В конце 80-х гг. Джон Аустираут придумал скрипт-язык Тс1 и библиотеку Т1с. Тс1 — это попытка создания идеального скрипт-языка. Он ориентирован на автоматизацию рутинных операций и со­стоит из мощных команд, выполняющих обработку нетипизирован­ных объектов.

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

языку моЭелироВашт

При моделировании систем применяются формальные способы их описания — формальные нотации, с помощью которых можно представить объекты и взаимосвязи между ними в системе. Такие системы называют СА8Е-системами.


6.7. Этапы поЭготоВки и решений ЗаЭач на компьютере

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

1. Постановка задачи — формулируется цель решения задачи, под­
робно описывается ее содержание; проводится анализ условий,
при которых решается поставленная задача, выявляется область
определения входных параметров задачи.

2. Формальное построение модели задачи — предполагает построение
модели с характеристиками, адекватными оригиналу, на основе
какого-либо его физического или информационного принципа;
анализируется характер и сущность величин, используемых в
задаче.

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

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

5. Построение алгоритма — на данном этапе составляется алгоритм
решения задачи, в соответствии с выбранным методом решения.
Процесс обработки данных разбивается на отдельные относи­
тельно самостоятельные блоки, определяется последовательность
выполнения этих блоков.


6. Составление программы — алгоритм решения переводится на кон-
кретный язык программирования.

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

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

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

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


1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 |

Поиск по сайту:



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