Б С Бусигін - Прикладна інформатика - страница 13

Страницы:
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  38  39  40  41  42  43  44  45  46  47  48  49  50  51  52  53  54  55  56  57  58  59  60  61  62  63  64  65  66  67  68  69  70  71  72  73  74  75  76  77  78  79  80  81  82  83 

integer N;

Read Int(N);

begin

real array Data[1:N]; real sum, avg; integer i; sum:=0;

for i:=1 step 1 until N do begin real val; Read Real(val); Data[i]:=if val<0 then -val

)

else val

end;

for i:=1 step 1 until N do

sum:=sum + Data[i]; avg:=sum/N; Print Real(avg)

end end

а)

б)

Рис. 5.1. Фрагменти тексту програм на мовах Фортран (а) і Ллгол (б)

До нинішнього часу програмування, як процес, полягає у створенні комп'ютерних програм, які містять конкретні інструкції (команди) для виконання їх комп'ютером. Різні частини програми можуть бути написані на різних мовах програмування (МП). Мова програмування уявляє собою стандартизований засіб комунікації для повідомлення комп'ютеру команд на виконання конкретних задач. Він також надає програмісту можливість точно указати, якими видами даних комп'ютер повинен маніпулювати, а також послідовність дій у різних обставинах. Таким чином переслідуються дві головні цілі:

О висловлювати програму на логічному рівні, який значно перевершує логіку низькорівневих кодів блока центрального процесора (CPU-Central Processing Unit);

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

Якщо механізм трансляції застосовується до усього тексту програми ціликом для перекладу у внутрішній формат комп'ютера, то такий вигляд обробки зветься компіляцією. В результаті компіляції фрагмента коду програми ми одержуємо файл з розширенням .EXE. В протилежному випадку текст програми транслюється крок за кроком, и кожний крок виконується негайно і такий механізм зветься інтерпретацією. Програми, що інтерпретуються, виконуються значно повільніше (рос.-медленее) за ті, що компілюються, але мають значно більшу гнучкість при взаємодії з програмно-апаратними засобами комп'ютера (рис. 5.2).

ПРО ГРАМА Л

PROG1

Стрічка 1 Стрічка 2

Уся програма з

диску обробляється компілятором

КОМПІЛЯТОР

^обробляє усю програму, створює файл двоїчного коду з розширенням EXE, а у момент виконання програми сам в ОЗП може не знаходитися)

Файл PROG.EXE (виконання)

PROG2

Стрічка 1 Стрі чка 2

Стрі чка N

Стрічка2 І так далі.

ІНТЕРПРЕТАТОР

■ ^(програма-контейнер) [""""^знаходиться у ОЗП і

виконує програму, шляхом послідовної обробки стрічки за стрічкою)

Оперативний запам'ятовуючий пристрій ПК (ОЗП) (виконання)

Рис. 5.2. Технологія обробки початкових (рос.-исходных) текстів програм компіляторами і інтерпретаторами з наступним виконанням

У сучасних комп'ютерах інтерпретатори трансформуються у програми (додатки)-контейнери, які володіють (рос.-обладают) значно більшою функціональністю. До них можна віднести додатки MS Excel, MS Internet Explorer і багато інших (див. главу б).

5.2. Розширення функціональності мов програмування

У комп'ютерах 70-80-х років на початкових етапах їх розвитку велике значення мали мови програмування систем (system programming language) (МПС). До них можна віднести мови асемблерів і ряд мов високого (high level) рівня (Паскаль, Сі, С++, Java та ін. ). Поступово останні майже повністю віти снили (рос.-вытеснили) мови асемблера при розробці великих додатків. При компіляції текстів програм цих мов як правило виходять достатньо компактні двоїчні коди, які дають високу швидкість виконання програм. Однією з головних якостей МПС завжди вважалась так звана типізація, при котрій:

О кожна змінна для схову (рос. -хранения) даних повинна бути відвічно (рос.-изначально) декларована з тим, щоб бути приписаною до визначеного типу: ціле (Integer), реальне (Real, Double), укажчики (рос.-указатели) на строку (String) і т.д., а також змінна повинна використовуватися тільки тими способами, котрі цьому типу відповідають;

в дані і код розділені - важко, якщо взагалі можливо, створити новий код у час виконання;

© змінні можуть бути згруповані у об'єкти з добре визначеною структурою и процедурами для маніпулювання ними. Об'єкт одного типу не може використовуватися там, де очікується використання об'єкту іншого типу (рис. 5.3).

(Число типу Integer) не можна (!!!) розділити на (Число типу

Real)

якщо результат присвоюється змінної I типа Integer.

Тобто, оператор виду: I  := (24 / Б .37е-2) ; -

_заборонено!_

Рис. 5.3. Приклад типізації в мові Турбо Паскаль

Типізація забезпечує цілий ряд переваг (рос. -преимуществ):

О великі програми вона робить більш технологічними завдяки точному визначенню сутностей, які використовуються і їх відміну від інших;

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

© типізація підвищує ефективність виконання, дозволяючи компілятору генерувати спеціалізований компактний двоічний код.

У сильно типізованій мові програміст обов'язково декларує, як кожна порція   інформації   буде   використовуватися,   а   мова   запобігає (рос.-

101предотвращает) її використання іншим способом. У слабо типізованій мові не існує апріорі завданих обмежень на використання інформації; її зміст (рос.-смысл) визначається тільки способом, котрим вона використовується.

Разом з тим, самі по собі сучасні комп'ютери принципово безтипові. Будь яке слово пам'яті може зберігати величину будь якого типу, будь то ціле або реальне (рос.-вещественное) число, покажчик (рос.-указатель) або команда. Зміст (значення) величини визначається тим, як вона застосовується. Одне і те ж слово може використовуватися у різних випадках по-різному. Наприклад, в мові Visual Basic (VB) 6.0 спеціальний тип даних Variant дозволяє зберігати дані усіх інших типів (з можливістю наступної обробки операціями, які відповідають типу, що обробляється) (рис. 5.4).

Array

Byte

Boolean

Currency

Date

Double

Integer

Long

Object

Single

String

 

Тип

Variant

Рис. 5.4. Багатофункціональність типу Variant в мові Visual Basic

З середини 90-х років почали з'являтися так звані мови сценаріїв (scripting languages, скриптові мови) (СМ). В першу чергу це було пов'язано з втягненням (рос.-вовлечением) в мережові структури усе більшої кількості комп'ютерів, активізацією процесу розподілених обчислень у мережових середовищах і різким ростом об'єму інформації, що обробляється через Інтернет засобами World Wide Web. Мови програмування розроблялись для інтерактивного використання і мали у своєму складі багато команд, які уявляли собою міні-програми, які були призначені, як правило, для комбінування вже існуючих компонентів. З більш, чим 30-и найбільш популярних СМ (див. табл. 5.1) можна особливо відмітити мови, Rexx, Tcl, Perl, Visual Basic і оболонку Unix (shell).

Таблиця 5.1.

Список головних мов скриптов у алфавітному ^ порядку " JCL І Pike

Lua Pliant Miva Python MUMPS QuakeC

ASP (Active Server Pages) AppleScript Awk bash Brain

CobolScript

Dylan

E

Euphoria Guile

ICI

JavaScript l(ECMAScript)

ObjectRexx

Perl

PHP

REBOL

Rexx Ruby

ScriptBasic

sh (shell)

Simkin

Tcl

UnrealScript

Visual Basic (VB)

VBScript_

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

Ось чому мови сценаріїв часто називають склеюваючими (рос.-склеивающими) мовами (glue languages) або мовами інтеграції систем (system integration languages).

Процес розробки мов програмування постійно продовжується и у таблиці 5.2 приведені деякі характеристики найбільш популярних серед користувачів мов програмування різного призначення. Більш повна інформація приведена у Додатку 3.

Таблиця 5.2.

_Найбільш розповсюджені мови програмування (МП) для ПК_

Найменування МП

Рік створення

Тип мови

Автор (и) розробки

Pascal

1970

МПС/-

Ніклаус Вірт

С

1972

МПС/-

Денніс Рітчі

C++

1980

МПС/ОО

Б'ерн Страуструп

Turbo Pascal

1983

МПС/-

Андерс Хейльсберг, Філіпп Кан (Borland М)

Perl

1986

CM/OO

Ларри Вол

Visual Basic

1991

CM/OO

Microsoft

Delphi/Object Pascal

1995

МПС/ОО

Андерс Хейльсберг (Borland Int.)

Java

1995

МПС/ОО

Патрік Нотон і Джеймс Гослінг

Java Script

1995

CM/OO

-

VBScript

1997

CM/OO

Microsoft

XML

1998

-/-

W3C (консорціум)

C#

2000

МПС/ОО

Андерс Хейльсберг (Microsoft)

ПРИМІТКИ:

МПС-мова програмування систем, CM-скринтова мова; ОО-об'єктно-орієнтований.

Однією з важливіших ознак (рос.-признаков) класифікації мов програмування є принадність їх до одного з стилів, головні з котрих приведені

у таблиці 5.3.

Таблиця 5.3.

_Стилі мов програмування._

Стиль (тип) мов програмування

Найменування мови

Процедурний

FORTRAN, COBOL, BASIC, PL/I, FORTH, Pascal, Turbo Pascal

Декларативний (функціональний)

LISP, Common Lisp

Логічний (реляційний)

Prolog

Паралельне програмування

С++, Ada, Concurrent Pascal, Occam

Об'єктно-оріентований

Smalltalk, Object Pascal, С++, Python, Java, Simula, Java Script, VBScript, C#

Модульний (компонентний)

Visual Basic, С++, C#, Object Pascal, Java, Ada, Modula-2, Eiffel, Component Pascal

Спеціалізовані мови

HTML, XML, Tcl, Perl, Cold Fusion

Для уявлення виразних можливостей мов програмування різних стилів у таблиці 5.4 приведені фрагменти програм для реалізації виводу на екрандисплея текстового повідомлення "Hallo World!", яке стало традиційним у курсах вивчення практично всіх мов уявлення сигнатур.

Таблиця 5.4.

Програми виводу на екран дисплея стандартної фрази "Hallo, World!",

Процедурна мова Turbo Pascal

Program Hello; Begin

Writeln ('Hello, World!');

End.

Процедурна мова FORTRAN

c      Hello, world.

c

Program Hello implicit none logical DONE

DO while (.NOT. DONE)

write(*,10) END DO

10 format('Hello, World!')

END

Декларативна (функціональна) мова

LISP

; LISP

(DEFUN HELLO-WORLD ()

(PRINT   (LIST   'HELLO 'WORLD)))

Логічна (реляційна) мова Prolog

% HELLO WORLD.

Works with Sbp (prolog)

hello

printstring("HELLO, WORLD!!!!").

printstring([]).

printstring([H|T])  :- put(H),

printstring(T).

Мова паралельного програмування Ada

with Text_Io;  use Text_Io;

procdure hello is begin

put ("Hello, world!");

end hello;

Модульна (компонентна) мова Visual Basic

Private Sub Form_Load() Static I

for I = 1 to 10 msgbox "Hello, World!" Next I

end sub

Об'єктно-орієнтований. C++

hallo.cpp

#include <iostream> // ::std::cout

#include <ostream>    // <<

int main(){   ::std::cout << "Hallo,  world!" <<   '\n'; }

Об'єктно-оріентована мова Java

Hallo.java

public class Hallo

{  public static void main(

String[]   args )

{   System.out.println( "Hallo,

World! " ); }}

Спеціалізована мова HTML

<HTML> <HEAD>

<TITLE>Hello, World!</TITLE> </HEAD>

Спеціалізована мова Perl

print "Hello, World!\n" while (1);

<BODY>

Hello, World!

</BODY>

</HTML>

З точки зору класифікації мов програмування по типам задач, що за їх допомогою вирішуються, деякі автори пропонують наступне розподілення (табл. 5.5).

Таблиця 5.5.

Класифікація мов програмування по типам задач, що за їх допомогою

Тип задачі, що вирішується

Найменування мов програмування

Задачі штучного інтелекту

Lisp, Prolog, Multilisp, Commonlisp, Рефал, Planner, QA4, FRL, KRL, QLisp

Паралельні обчислення

Fun, Apl, Alfl, PARAM, ML, SML, PPL/1, Hope, Miranda, Occam, PFOR, Glypnir, Actus, паралельний Cobol, ОВС-ЛЯПИС, ОВС-Алгол, ОВС-Фортран, PA(1), PA(G)

Задачі обчислювальної математики і фізики

Occam, PFOR, Glypnir, Actus, паралельний Cobol, ОВС-ЛЯПИС, ОВС-Мнемокод, ОВС-Алгол, ОВС-Фортран, PA(1), PA(G)

Розробка інтерфейсу

Forth, c, C++, Асемблер, Макроасемблер, Simula-67, OAK, Smalltalk, Java, РПГ

Розробка програм-оболонок, розробка систем

Forth, c, C++, Асемблер, Макроасемблер, Simula-67, OAK, Smalltalk, Java, РПГ

Задачі обчислювального характеру

Algol, Fortran, Cobol, Ada, PL/1, Фокал, Basic, Pascal

Оформлення документів, обробка великих текстових файлів, організація віртуальних трьохвимірних інтерфейсів у Інтернеті, розробка баз даних

HTML, XML, Perl, Tcl/Tk, VRML, SQL, PL/SCL, Informix 4GL, Natural, DDL, DSDL, SEQUEL, QBE, ISBL

Мови мережної обробки (реалізації Web-сервісів)

Java, C++, C#, Visual Basic .NET

Клієнт-серверні мови програмування у WWW

Java, JavaScript, VBScript, XML, ASP (Active Server Pages), PHP, Perl, Python, ScriptBasic, HTML, CGI, CSS

Мови програмування геоінформаційних систем (мови вбудованих систем)

Avenue, Visual Basic for Application, ArcXML, MapBasic, AutoLisp, Visual Basic, VBScript, GML

Додатки і програми пишуться для рішення усе більш складних задач з використанням мережних інформаційно-комп'ютерних технологій та Web- і Інтернет технологій, які стрімко розвиваються (див. Додаток 4). По деяким даним1, світ прийшов до осмислення фундаментальної важливості мережної обробки даних, и щоб це оцінити, потрібно тільки вдуматися в наступну приголомшуючу цифру: у 2000 року ринкова вартість 200-т крупніших мережних американських компаній, акції яких котируються на фондовій біржі, перевищувала 5 трлн. дол. За цей же рік їх сумарний оборот збільшився на 100 млрд. дол. (тобто на 14%) — з 709,7 у 1999 р. до 809,6 млрд. дол. у 2000 р.

1 http://osp.admin.tomsk.ru/nets/2000/07/066.htm

I, як стало ясно з розвитку подій, ключ до интернет і Web-сервісів — це мови програмування, орієнтовані на створення компонентних додатків, програмування безпровідних інтерфейсів і мобільних пристроїв.

ідеолог мов програмування з корпорації Microsoft і колишній створювач мов Turbo Pascal і Delphi, Андерс Xейльсбеpг, охарактеризував C# ("сі шарп") як "першу справжню компонентно-орієнтовану мову програмування у сімействі C/C++". Він також висловив упевненість, що модель програмування, яка заснована на компонентах з асоційованими с ними даними (відповідають якостям (properties), у деяких інших мовах) і варіантами поведінки (відповідають подіям, events), підтримуються у C# більш істотно (рос.-естественно), ніж у мові Java. "Java емалює (рос.-эмулирует) властивості з використанням спеціальної схеми іменування методів доступу, — каже Xейльсбеpг, — а обробники подій — за допомогою різних "нерехідників" і зв'язуючого коду". Він згоден з тим, що і Java, і C++ також підтримують компонентно-орієнтований стиль програмування, але вважає що "компоненти у них не володіють (рос. -обладают) громадянством першого класу". Деякі відміни цих мов приведені в табл. 5.б.

Таблиця 5.б.

_ Порівняння об'єктно-комнонентно-орієнтованих мов_

Страницы:
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  38  39  40  41  42  43  44  45  46  47  48  49  50  51  52  53  54  55  56  57  58  59  60  61  62  63  64  65  66  67  68  69  70  71  72  73  74  75  76  77  78  79  80  81  82  83 


Похожие статьи

Б С Бусигін - Прикладна інформатика