Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Лекции 140400

.pdf
Скачиваний:
31
Добавлен:
22.05.2015
Размер:
1.47 Mб
Скачать

Лекция 6 140400

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

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

Вместе с тем число интенсивно применяемых языков программирования относительно невелико.

Язык программирования это искусственный язык с ограниченным числом слов, значения которых строго и однозначно фиксированы транслятором и подчинены строгим правилам записи команд, задающих алгоритм в форме, понятной для исполнителя (например, компьютера). Каждый язык программирования, как и «естественный» язык, имеет алфавит, словарный запас, свои грамматику и синтаксис, а также семантику.

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

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

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

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

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

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

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

-машинные;

-машинно-ориентированные (языки ассемблера);

-машинно-независимые (языки высокого уровня).

2.1Машинные языки

Машинный язык - это совокупность машинных команд, которая

61

Лекция 6 140400

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

Машинный код - последовательность чисел, которые представляются как совокупность двух цифр: 0 и 1.

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

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

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

2.2 Машинно-ориентированные языки

Машинно-ориентированные языки (язык Ассемблер, автокоды, языки символического кодирования и др.), это система обозначений, используемая для представления в удобочитаемой форме программ, записанных в машинном коде.

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

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

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

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

Их особенности.

Во-первых, машинная программа в конечном счете записывается с помощью лишь двух символов 0 и 1.

Во-вторых, каждая ЭВМ имеет ограниченный набор машинных операций, ориентированных на структуру процессора, типа: переслать число в

62

Лекция 6 140400

ячейку; считать число из ячейки; увеличить содержимое ячейки на +1 и т.п. Команда на машинном языке содержит очень ограниченный объем информации, поэтому она обычно определяет простейший обмен содержимого ячеек памяти, элементарные арифметические и логические операции.

2.3 Языки высокого уровня

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

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

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

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

-конструкции команд (операторов) отражают содержательные виды обработки данных и задаются в удобном для человека виде;

-используется аппарат переменных и действия с ними;

-поддерживается широкий набор типов данных.

Языки программирования высокого уровня являются машинно-

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

3 ТИПЫ ЯЗЫКОВ ПРОГРАММИРОВАНИЯ ВЫСОКОГО УРОВНЯ

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

-процедурный,

-функциональный,

-логический,

-объектно-ориентированный.

3.1.Процедурный (алгоритмический) язык

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

Процедурные языки характеризуются следующими особенностями:

63

Лекция 6 140400

-необходимостью явного управления памятью, в частности, описанием переменных;

-малой пригодностью для символьных вычислений;

-отсутствием строгой математической основы;

-высокой эффективностью реализации па традиционных ЭВМ.

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

К процедурным языкам относятся: язык Ассемблера, С, Basic, Pascal. 3.2 Функциональный (аппликативный) язык

Первым таким языком был LISP.

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

Аппликативный язык программирования включает следующие элементы:

-классы констант, которыми могут манипулировать функции;

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

-правила построения новых функций из базовых;

-правила формирования выражений на основе вызовов функций. Перечисленные свойства характеризуют аппликативные языки как языки

программирования очень высокого уровня. 3.3 Логический (реляционный) язык

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

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

-высоким уровнем;

-строгой ориентацией на символьные вычисления;

-возможностью инверсных вычислений, то есть переменные в процедурах не делятся на входные и выходные;

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

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

Логические и функциональные языки – это декларативные языки. В этих языках отсутствует понятие «оператор» («команда»).

64

Лекция 6 140400

3.4 Объектно-ориентированный язык

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

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

Всовременных объектно-ориентированных (ОО) языках используются следующие методы: наследование, инкапсуляция, полиморфизм.

Внекоторых объектно-ориентированных языках все методы классов являются виртуальными.

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

Часть языков (иногда называемых «чисто объектными» — Java или Ruby) целиком построена вокруг объектных средств — в них любые данные являются объектами, любой код — методом какого-либо класса и невозможно написать программу, в которой не использовались бы объекты. Другие языки («гибридные») включают ООП-подсистему в исходно процедурный язык. В них существует возможность программировать, не обращаясь к объектным средствам. Классические примеры — C++ и Delphi (Object Pascal).

3.5 Проблемно – ориентированный язык

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

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

Проблемных языков очень много, например:

-Фортран, Алгол – языки, созданные для решения математических задач;

-Simula, Слэнг - для моделирования;

65

Лекция 6 140400

- Лисп, Снобол – для работы со списочными структурами. 4 СРЕДСТВА СОЗДАНИЯ ПРОГРАММ

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

Инструментальные программы отличаются друг от друга назначением и возможностями.

К системам (или средствам) автоматизации программирования (САП) относят:

1)языки программирования;

2)текстовый редактор;

3)компилятор или интерпретатор;

4)обширные библиотеки стандартных программ и функций;

5)загрузчик программ (Load), позволяющий выбрать из директория нужный текстовый файл программы;

6)запускатель программ (Run), осуществляющий процесс выполнения программы;

7)отладчик (Debug), выполняющий сервисные функции по отладке и тестированию программы;

8)диспетчер файлов (File), предоставляющий возможность выполнять операции с файлами: сохранение, поиск, уничтожение и т.п.;

9)интегрированную среду разработки;

10)встроенную справочную службу;

11)мощные графические библиотеки; утилиты для работы с библиотеками и другие вспомогательные программы.

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

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

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

4.2 Текстовый редактор

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

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

66

Лекция 6 140400

ввода.

4.3 Трансляторы

Транслятор (англ. translator — переводчик) — это программа-переводчик. Она преобразует программу, написанную на одном из языков высокого уровня, в программу, состоящую из машинных команд Различают трансляторы двух типов: интерпретаторы и компиляторы.

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

Интерпретатор (англ. interpreter — истолкователь, устный переводчик) переводит и выполняет программу строка за строкой.

Откомпилированные программы работают быстрее, но интерпретируемые

проще исправлять и изменять.

В реальных машинах технологии компиляции и интерпретации перемешаны или обобщены одной программой – транслятором.

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

4.4 Библиотеки стандартных подпрограмм

Очень часто после компиляции программу требуется дополнить стандартными функциями из библиотек (расширение .lib), либо объединить с другими программами - модулями.

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

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

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

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

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

исполнимый код для конкретной платформы.

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

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

67

Лекция 6 140400

которой эта программа создавалась. Итоговый файл имеет расширение .ЕХЕ или .СОМ.

4.6 Загрузчик

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

4.7 Вспомогательные программы

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

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

5 ИНТЕГРИРОВАННЫЕ ПРОГРАММНЫЕ СРЕДЫ

5.1 Интегрированные системы программирования

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

Как правило, в стандартную поставку входят как минимум три компонента: компилятор, редактор связей и библиотеки функций, но хорошая интегрированная система включает в себя и специализированный текстовый редактор.

Всовременных интегрированных системах имеется еще один компонент

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

5.2 Среды быстрого проектирования

Среды быстрого проектирования RAD(Rapid Application Development)-

среды – среды в которых процесс создания необходимых элементов оформления и управления автоматизирован.

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

68

Лекция 6 140400

проектируемое окно.

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

Компоненты достаточно легко создавать самостоятельно, поэтому в мире сегодня распространяются тысячи бесплатных и платных компонентов для наиболее известных RAD-сред, из них формируются библиотеки компонентов

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

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

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

6 ВИДЫ СИСТЕМ ПРОГРАММИРОВАНИЯ

6.1 Процедурное (алгоритмическое или императивное) программирование

Процедурное программирование является отражением архитектуры традиционных ЭВМ, которая была предложена фон Нейманом в 40-х годах.

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

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

6.2 Структурное программирование Структурное программирование в целом не выходит за рамки

69

Лекция 6 140400

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

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

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

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

-возможность создания программы несколькими программистами,

-маленькие модули можно написать легко и быстро;

-простота проектирования и последующих модификаций программы;

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

-возможность использования готовых библиотек наиболее

употребительных модулей.

Встроенную поддержку модульности имеют языки Modula-2, Ada, Standard ML и др.

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

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

Прототипом объектно-ориентированного программирования послужил ряд средств, входящих в состав языка SIMULA-67. Но в самостоятельный стиль оно оформилось с появлением языка SMALLTALK, разработанного А. Кеем в 1972 году и первоначально предназначенного для реализации функций машинной графики.

Основная цель ООП, как и большинства других подходов к программированию – повышение эффективности разработки программ. Идеи ООП оказались плодотворными и нашли применение не только в языках программирования, но и в других областях Computer Science, например, в области разработки операционных систем.

Объектно-ориентированный подход использует следующие базовые понятия:

- объект;

70

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]