Меню
Главная
Авторизация/Регистрация
 
Главная arrow Информатика arrow Информатика 2015

5.4. Основные понятия программирования

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

5.4.1. Языки программировании

На голове косу носила.

Своей косой косу косила.

Пока неизвестный поэт

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

Рассмотрим важные для программирования понятия: алфавит, синтаксис и семантика.

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

Синтаксис — правила построения из символов алфавита языковых конструкций (переменных, констант, функций, процедур, операторов...).

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

Семантика определяет, что делает ЭВМ при выполнении данной языковой конструкции, а синтаксис определяет форму записи данной языковой конструкции.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

1) на машинном языке:

Адрес

Команда

1101 0001

ООН 1111

11010010

0000 0101

11010011

0000 0110

1101 0100

0000 0111

11010101

1000 0000

  • 2) на машинно-ориентированном языке (микропроцессорный комплект 580-й серии): MVI А,5 MVI В, 7 ADD В;
  • 3) на процедурно-ориентированном языке: А = 7 +5.

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

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

Язык Фортран продолжает развиваться и совершенствоваться, оказывая сильное влияние на создание и развитие других языков программирования, например, Фортран заложен в основу диалогового языка Бейсик (BASIC — beginners all-purpose symbolic instruction code). Это переводится так: многоцелевой язык символьных команд для начинающих.

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

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

Алгол-60 (ALGOritmic Language— алгоритмический язык)— это более совершенный язык, чем Фортран.

Решение экономических задач (учет материальных ценностей, выпущенной предприятием продукции, личного состава) в 60-х годах XX столетия удобно было выполнять на языке Кобол.

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

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

Язык ЛОГО (LOGO) исггользуется для обучения детей основам программирования. Характерной особенностью языка является применение так называемой «черепашьей» графики (движущаяся черепаха оставляет за собой след в виде рисунка).

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

Одной из попыток такого рода является разработка фирмой IBM языка ПЛ/1 (Programming Language). Он основан на языках Фортран, Алгол и Кобол.

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

На основе языка Паскаль в конце 70-х годов XX в. но заказу Министерства обороны США во Франции был разработан язык Ада (Ada). Язык назван в честь первой программистки Augusta Ada Byron, работавшей с Ч. Бэббиджем. Это хорошо структурированный язык, однако, слишком ipo- моздкий и многословный.

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

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

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

Кроме языков Ада и Линда, существуют и другие языки параллельного и распределённого программирования, например, Erlang, Occam. Язык Erlang позволяет поддерживать связь между совместно работающими ЭВМ но протоколу TCP/IP.

Язык СИ позволяет писать эффективные программы, не прибегая к сложным конструкциям языков Ассемблера. На этом языке написана популярная операционная система UNIX.

Перспективным направлением дальнейшего развития технологии иро- фаммирования явилось создание объектно-ориентированных языков программирования.

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

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

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

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

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

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

Первым объектно-ориентированным языком программирования был язык Simula 67 (Симула). Он разработан в конце 60-х годов XX столетия в Норвегии для решения задач моделирования.

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

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

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

Язык Дельфи (Delphi) разработан фирмой Borland на базе языка Турбо-Паскаль. Чаще всего этот язык программирования используется для работы с базами данных по технологии клиент-сервер. Основной упор в Дельфи делается на максимальном повторном использовании имеющихся программ. Это позволяет разработчикам строить приложения из уже существующих объектов, а также дает им возможность создавать свои собственные объекПервая версия Visual Basic появилась в 1991 г. Язык близок к объектно-ориентированным языкам, но по-прежнему остается процедурным языком. Этот язык широко распространен, он интегрирован в пакеты Microsoft Office: СУБД MS Access, электронные таблицы MS Excel, текстовый редактор MS Word.

Язык гипертекстовой разметки HTML (HyperText Markup Language) был предложен Тимом Бернерсом-Ли в 1989 г. в качестве основного компонента технолог ии распределенной гипертекстовой системы World Wide Web (WWW).

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

Теги (иногда таги или гэги) — это скобки, между которыми записаны команды, указывающие, как отображать данный фрагмент текста Web- страницы.

Для придания Web-страницам интерактивности используется язык программирования PERL. Язык является интерпретируемым. Он создан программистом Лари Уоллом (Larry Wall) для обработки текстов и файлов. PERL расшифровывается, как Practical Extraction and Report Language (язык для практического извлечения данных и составления отчетов).

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

Сходными возможностями с языком PERL обладает язык РНР (Power Hypertext Preprocessor). Однако последний был разработан для преимущественного использования в сетевых технологиях (для создания интерактивных средств). Язык РНР служит для создания сценариев, выполняемых на стороне сервера. Первая версия языка РНР (Пи-Эйч-Пи) была разработана в 1994 году программистом Расмусом Лердорфом (Rasmus Lerdorf). В разработке последующих версий участвовало большое число специалистов.

Язык моделирования виртуальной реальности Virtual Reality Modelling Language (VRML), предназначен для описания сред, имитирующих трехмерное пространство. Он является расширением гипертекстовог о языка размотки HTML, используемого для описания плоских изображений.

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

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

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

Язык Java является объектно-ориентированным языком. Он во многом сохраняет синтаксис и стиль программирования языков С и C++.

Достоинством языка является то, что он независим от конкретной архитектуры ЭВМ, и Java-приложения могут работать на различных типах ЭВМ (на различных процессорах), под управлением различных операционных систем: Windows, UNIX и Macintosh и др. Такое свойство особенно привлекательно при работе в глобальной сети, состоящей из множества ЭВМ, реализованных на различных платформах.

Язык поддерживает технологию клиент-сервер. С помощью языка Java сложные приложения разбиваются на небольшие модули, которые называются компонентами (приложениями) или апплетами (applets). Компоненты располагаются на сервере и при работе передаются по сети на ЭВМ клиента (пользователя), где и исполняются.

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

Корпорации SUN Microsystems и Netscape Communications создали язык JavaScript. Он относится к языкам сценариев, которые позволяют «склеивать» готовые компоненты (вызывать подпрограммы при совершении каких-то событий). Например, 16,4 % исходного кода браузера Mozilla Firefox написано на JavaScript. Язык JavaScript - не единственный язык управления сценариями просмотра документов. Язык VBScript, созданный на основе языка Visual Basic, используется для решения таких же задач.

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

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

Таблица 1

Язык

Годы

разработки

Автор

Фирма,

организация

Ada

1979-1980

Jean Ichbiah

Cii-Honeywell Bull

Algol

1960

International commitee

A PL АПЛ

1961-1962

Kenneth Iverson, A din Falkoff

IBM

DELPHI

1995

Borland

BASIC

Бейсик

1964-1965

John Kemeny, Thomas Kurtz

Dartmouth College

С

1972-1973

Dennis Ritchie

Bell Laboratories

C++

1980

Bjame Stroustrup

Bell Laboratories

C#

2002

Андерс Хейлсберг

Microsoft

COBOL

1959-1961

Grace Murray Hopper

FORT

1971

Charles H. Moore

FORTRAN

1950-1958

John Backus

IBM

HTML

1989

Тим Бернерс-Ли

CERN, (Женева)

LISP

1956-1960

John McCarthy

LOGO

ЛОГО

1968-1970

Сеймур Пейперт, Идит Харель

Massachusetts Institute of Techn.

Pascal

Паскаль

1967-1971

Niklaus Wirth

Federal Institute of Technology

PERL

1986

Larry Wall

PHP

1994

Rasmus Lerdorf

PL/1

1964-1966

IBM

PROLOG

1978

Алан Калмероэ

SIMULA

Симула

1967

Оле-Йохан Дал, Кристен Нигаард

Норвежский ВЦ

Smalltalk

1970

А. Кэй, Д. Ингаллс,

Т. Кэглер, А. Голдберг,

Xerox PARC

Java

1996

Джеймс Гослинг

Sun Microsystems

JavaScript

1995

Brendan Eich

Netscape Communications

 
Посмотреть оригинал
< Пред   СОДЕРЖАНИЕ ОРИГИНАЛ   След >
 

Популярные страницы