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

учебник информатика

.pdf
Скачиваний:
542
Добавлен:
13.02.2015
Размер:
16.29 Mб
Скачать

 

Глава 5. Основы разработки программного обеспечения

Продолжение таблицы 5.1

Стадии

Этапы работ

 

 

8. Сопровож-

8.1. Выполнение работ в соответствии с гарантийными

обязательствами

дение

8.2. Послегарантийное обслуживание

 

 

 

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

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

Языки низкого уровня относятся к машинно-ориентированным языкам, т. к. используют возможности определенного вида процессоров, например, процессоров Intel Core 2 Duo, AMD Athlon, Intel Xeon, и пр.

Кязыкам низкого уровня относятся:

программирование в машинных кодах;

ассемблер;

макроассемблер.

Как выглядит программа в машинных кодах можно увидеть, если открыть любой исполняемый файл в Блокноте (двоичные коды будут показаны, как символы ASCII) или в Hex-редакторе (коды в шестнадцатеричном виде – см. рисунок 5.6).

Рисунок 5.4. Фрагмент программы в машинных кодах (шестнадцатеричный код)

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

351

Глава 5. Основы разработки программного обеспечения

Машинный код

Ассемблер

0E

PUSH

CS

1F

POP

DS

BA0E00

MOV

DX,000E

B409

MOV

AH,09

CD21

INT

21

B8014C

MOV

AX,4C01

CD21

INT

21

54

PUSH

SP

68

DB

68

69

DB

69

7320

JNB

0033

7072

JO

0087

6F

DB

6F

67

DB

67

7261

JB

007A

6D

DB

6D

206361

AND

[BP+DI+61],AH

6E

DB

6E

6E

DB

6E

6F

DB

6F

и т.д.

 

 

Мнемокод Ассемблера использует буквенные обозначения машинных операций (PUSH, POP, MOV и т. д.) и регистров компьютера (CS, DS, DX, AH и т. д.). Регистры – специализированные 16-, 32или 64разрядные ячейки памяти процессора, которые используются для управления исполнением машинных команд, адресации и выполнения математических операций.

Процесс трансляции программы с языка Ассемблера в машинный код называется ассемблированием. Обратный процесс – дизасемблированием.

Современный макроассемблер для Windows (например, Masm32) занимает промежуточное положение между Ассемблером и языками высокого уровня: он использует команды обычного Ассемблера и множество системных и пользовательских процедур, описания которых присутствует во включаемых файлах (*.inc) и объектных библиотеках (*.lib), генерируемых из системных библиотек при установке Masm32 в операционной системе.

Пример простейшей программы на Masm32, создающей диалоговое окно, показанное на рисунке 5.5:

.386

.model flat, stdcall

352

Глава 5. Основы разработки программного обеспечения

option casemap :none

include \masm32\include\windows.inc include \masm32\include\user32.inc include \masm32\include\kernel32.inc includelib \masm32\lib\user32.lib includelib \masm32\lib\kernel32.lib

.code

start: jmp @F

Titl db "Masm32",0

Msg db "Это Ассемблер!",0

@@:

invoke MessageBox,0,ADDR Msg,ADDR Titl,MB_OK invoke ExitProcess,0

end start

Рисунок 5.5. Окно, созданное программой на

Masm32

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

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

Assign(fp,’workers.fdt’); {назначить для файловой переменной fp }

 

{файл c именем ’workers.fdt’}

Reset(fp);

{открыть файл}

Seek(fp,FileSize(fp)-1);

{перейти на последнюю запись}

Read(fp,worker);

{прочитать запись в переменную worker}

Writeln(worker.fio);

{показать на экране поле fio записи}

Close(fp);

{закрыть файл}

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

Рисунок 5.6 демонстрирует различные методы исполнения программ процессором ПК в ОС Windows.

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

Наибольшее значение и развитие получили универсальные языки: C#, C++, Basic, Pascal (Delphi), используемые в настоящее время для разработки Windows-приложений. На начальных этапах развития программи-

353

Глава 5. Основы разработки программного обеспечения

рования большую роль сыграли также языки Fortran, PL/1, Cobol, Algol, C и многие другие.

JavaScript, VBScript

Скрипты HTML-

страниц на JavaScript,

VBScript, Tcl, PHP,

Perl

Internet Explorer

Ассемблер

Ас-

 

 

сем-

 

блиро-

 

вание

Visual C#, Visual C++, Visual Basic, на платформе.Net

Компиляция

Microsoft

Байт-

код

Script Host

 

 

CLR

Интерпретация

Машинный код

Процессор ПК

Java

Perl

Компи-

 

ляция

Интер-

 

прета-

 

ция (с

Байт-

созда-

код

нием

 

байт-

 

кода)

JVM

 

Рисунок 5.6. Методы исполнения программ в ОС Windows

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

кпроблемно-ориентированным. К таким языкам относятся современные версии языков C#, J#, Basic, из системы Microsoft Visual Studio.

Большое значение имеют проблемно-ориентированные языки, используемые на Интернет-серверах (PHP, Perl) и клиентских Интернет-

приложениях (JavaScript, VBScript, Tcl).

К проблемно-ориентированным языкам программирования задач искусственного интеллекта относятся языки Lisp, Prolog, Multilisp, Commonlisp, Рефал, Planner и пр.

ВИнтернете можно найти рейтинг языков программирования. Например, на сайте компании TIOBE Software http://www.tiobe.com/ ежеме-

354

Глава 5. Основы разработки программного обеспечения

сячно рассчитывает глобальный рейтинг 50-ти языков программирования и отслеживается динамика его изменения. Рейтинг основан на расчете количества разработчиков, использующих различные языки по всему миру, количества различных курсов и производителей, использующих те или иные языки. Для расчета рейтинга используются поисковые системы Google, MSN, Yahoo! и YouTube. В таблице 5.2 показан рейтинг для первой двадцатки языков за декабрь 2009 года.

Таблица 5.2. TIOBE Programming Community Index

Язык

 

Позиция

Измене-

Рейтинг, %

, %

 

програм-

Категория

 

 

 

 

Ста-

 

 

 

 

 

 

ние по-

 

 

ми-

языка

дек. 09

дек. 08

дек. 09

дек. 08

тус

зиции

рования

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Java

ОО

1

1

0

17,06

-2,31

A

 

 

 

 

 

 

 

 

C

П

2

2

0

16,28

+0,12

A

 

 

 

 

 

 

 

 

PHP

ОО, П

3

4

1

9,77

+0.29

A

 

 

 

 

 

 

 

 

C++

ОО

4

3

-1

9,18

-1,72

A

 

 

 

 

 

 

 

 

(Visual) Basic

ОО, П

5

5

0

7,78

-1,70

A

 

 

 

 

 

 

 

 

C#

ОО

6

6

0

6,26

+1,61

A

 

 

 

 

 

 

 

 

Python

ОО

7

7

0

5,2

+0.62

A

 

 

 

 

 

 

 

 

JavaScript

ОО, П, Ф

8

9

1

3,52

+0,45

A

 

 

 

 

 

 

 

 

Perl

П

9

8

-1

2,69

-0. 91

A

 

 

 

 

 

 

 

 

Ruby

ОО

10

11

1

2,65

+0,34

A

 

 

 

 

 

 

 

 

Delphi

ОО

11

10

-1

2,30

-0,75

A

 

 

 

 

 

 

 

 

PL/SQL

П, Л

12

13

+1

1,49

+0,35

A

 

 

 

 

 

 

 

 

Objective-C

ОО

13

35

+22

1,16

+1,00

A

 

 

 

 

 

 

 

 

SAS

П

14

14

0

0,9

+0,07

A

 

 

 

 

 

 

 

 

Lisp/Scheme

Ф

15

19

+4

0,88

+0,37

А-

 

 

 

 

 

 

 

 

ABAP

П

16

17

+1

0,72

+0,12

А-

 

 

 

 

 

 

 

 

Pascal

П

17

15

-2

0,70

-0.01

B

 

 

 

 

 

 

 

 

ActionScript

ОО

18

21

+3

0,66

+0,17

B

 

 

 

 

 

 

 

 

D

ОО

19

12

-7

0,59

-0,60

A

 

 

 

 

 

 

 

 

Lua

П, Ф

20

20

0

0,56

+0,09

B

 

 

 

 

 

 

 

 

Статус в таблице 5.2 – принадлежность языка программирования к группе основных используемых (A) или второстепенных (B). A- означает сдвиг в сторону второстепенных.

Категория языка в таблице:

ОО – объектно-ориентированный;

П – процедурный;

355

Глава 5. Основы разработки программного обеспечения

Ф – функциональный;

Л – логический.

Распределение языков по категориям по данным компании TIOBE Software представлена в таблице 5.3.

Таблица 5.3. Рейтинг категорий языков

Категория языков

Рейтинг, дек.

, дек. 2007

2008

 

 

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

55.7%

+1.2%

Процедурные

40.4%

+0.1%

Функциональные

2.8%

-0.7%

Логические

1.2%

-0.6%

На сайте компании TIOBE Software приведена динамика изменения рейтинга языков таблицы 5.2. На рисунке 5.7 показаны две диаграммы за период 2001 – 2010 годы – для языка C#, который считается наиболее перспективным языком и популярность которого неуклонно растет, и языка C++, который до недавнего времени считался основным языком профессиональных программистов для широкого круга задач, но рейтинг его падает. В то же время, значение рейтинга C# в 2010 г. около 6%, а C++ – 9%.

C#

C++

 

Рисунок 5.7. Динамика изменения рейтинга языков C# и С++

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

Процедурные языки – языки высокого уровня, в которых используется метод декомпозиции программы на отдельные связанные друг с другом модули – подпрограммы (процедуры и функции). Головная программа и подпрограммы состоят из последовательности операторов, значительная часть которых использует библиотечные процедуры и функции. Основные представители: Fortran (год создания 1954, был первым процедурным язы-

356

Глава 5. Основы разработки программного обеспечения

ком), Cobol (1960 г., был создан как язык для создания коммерческих приложений, отличительной особенностью языка является возможность эффективной работы с большими массивами данных), Algol (1960 г), Pascal (1970 г., последние версии имеют объектно-ориентированные возможности организации программ; является основой визуальной системы Delphi), С (1972 г., создавался первоначально как язык для операционной системы UNIX, позволяет работать с данными так же эффективно, как и ассемблер), Ada (1983 г., широко использовался Департаментом Защиты США).

Объектно-ориентированные языки – дальнейший уровень разви-

тия процедурных языков с основной концепцией организации программы, как совокупности программных объектов. Алгоритм решения задачи представляет собой последовательность создания экземпляров описанных предварительно пользователем или библиотечных объектов и использования их методов. Основные представители: Simula и SmallTalk (1967 г., первые объектно-ориентированных языки программирования), Ada-95 (используется Департаментом Защиты США), C++ (1983 г., широко используется во многих областях), Java (потомок C++, используется в основном для Интернет-программирования).

Функциональные языки – языки искусственного интеллекта. Программа представляет собой последовательность функций и выражения, которые нужно вычислить. Основная структура данных – связный список. Программирование на них принципиально отличается от процедурного. Основные представители: Lisp (разработан в конце 1950-х годов), Scheme,

ML (MetaLanguage), Miranda, Haskel.

Логические языки – ориентированы на решение проблем без описания алгоритмов, языки искусственного интеллекта. Действительно используется только один язык – PROLOG, на котором написаны многие экспертные системы.

Языки сценариев или скрипты (scripts) – объектно-

ориентированные языки для создания программ, исполняемых в определенной программной среде. Например, файлы программ на языках VBScript, JScript, Tcl могут исполняться как сервером сценариев Windows Script Host (WSH, компонент Windows), так и Интернет-браузером, когда в нем присутствует ссылка на файл скрипта в html-документе. Кроме того, текст программы на этих языках может включаться в тело html-документа. Языки Perl (1986 г.) и Pуthon (1990 г.) возникли как скриптовые языки для операционной системы Unix, в последующем появились версии интерпретаторов языков для Windows и Macintosh. В программах на скриптовых

357

Глава 5. Основы разработки программного обеспечения

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

Языки, ориентированные на данные – созданы специально для ра-

боты с одним определенным типом данных. Например, APL настроен на работу с матрицами и векторами без циклов, Snobol (1962 г.) и его преемник Icon (1974 г.) предназначены для обработки строк., SETL (1969 г.) – язык для описания операций над множествами.

Особое положение занимают языки работы с базами данных, такие,

как 4GL, 3GL, PL/SQL, Transact-SQL, FoxPro (xBase), а также библиотеки работы с базами данных, такие, как ActiveX Data Objects (ADO), Microsoft Data Access Objects (DAO), доступ к объектам которых можно получить из многих универсальных языков.

Достаточно большие возможности по работе с документами Word, электронными таблицами Excel и базами данных Access имеет встроенный язык системы Microsoft Office – Visual Basic for Application (VBA).

5.2 Алгоритмизация

Алгоритм – описание последовательности действий для решения поставленной задачи.

Описание алгоритма может быть представлено в виде:

1)текстовой инструкции;

2)графической схемы;

3)программы на одном из языков программирования.

Каждый алгоритм должен иметь:

1)название, отражающее суть решаемой задачи,

2)описание исходной информации,

3)описание последовательности действий,

4)описание выходной информации.

Основные свойства алгоритмов:

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

2)Дискретность – алгоритм должен представлять процесс решения задачи, как последовательное выполнение простых операций.

358

Глава 5. Основы разработки программного обеспечения

3)Однозначность – плавила и порядок выполнения операций алгоритма не допускают неоднозначного толкования.

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

Существуют 3 основных типовых алгоритма:

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

2)разветвляющийся – последовательность выполняемых действий может изменяться в зависимости от каких-либо условий,

3)циклический – группа операций, которые могут повторяться многократно, кратность повтора определяется некоторым условием.

Для графического представления сложных алгоритмов, как показано

ранее в разделе 5.1, используются стандарты группы IDEF, языки UML, BPML, UEML.

Для элементарных алгоритмов можно использовать так называемые «структурные схемы», на которые ранее существовал стандарт ГОСТ 19.701–90 (в настоящее время не относится к действующим).

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

следующим образом:

 

 

 

 

 

 

1 Линейный

2 Разветвляющийся

 

Начало

 

 

Да

 

 

 

 

 

 

 

 

 

 

 

 

 

Усло-

 

Ввод

 

 

 

 

 

вие

 

 

 

 

данных

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Нет

 

 

 

 

 

Решение

 

 

 

 

 

 

 

 

Решение 2

 

Решение 1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Вывод

 

 

 

 

 

 

 

 

 

 

 

 

данных

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Конец

 

 

 

 

 

359

Глава 5. Основы разработки программного обеспечения

3.1 Цикл с предусловием

3.2 Цикл с постусловием

 

Нет

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Условие

 

Решение

 

 

 

 

 

 

 

 

 

начала

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Да

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Условие

 

 

 

 

 

 

 

 

 

 

 

Решение

 

 

 

 

 

 

 

 

 

окончания

 

 

 

 

 

 

 

Да

 

Нет

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

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

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

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

3)Все названия в программах должны быть значимыми, говорить о их назначении.

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

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

Некоторые достоинства структурного программирования:

1)Тексты программ, даже довольно крупных, становятся легко читаемыми, в результате программу без труда понимает не только её автор, но и другие программисты. Это позволяло разрабатывать достаточно крупные программные комплексы силами коллективов разработчиков, и сопровождать эти комплексы в течение многих лет.

1)В структурированных программах достаточно наглядно представлен алгоритм задачи, что позволяет обходиться без блок-схем и других

360