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

Введение в специальность

.pdf
Скачиваний:
41
Добавлен:
11.05.2015
Размер:
5.78 Mб
Скачать
Java —
дитя Интернета

192

вые классы объектов и операции над ними, тем самым создается потенциальнаявозможностьврамкахединогосинтаксисаиединой технологическойсредыиметьмножествоспециализированныхязыков программирования (вот она, реализованная мечта разработчиков Алгола-68!).Языкширокоиспользуетсянапрактике, длянегонесколькими фирмами, в том числе Borland, предлагаются прекрасные технологическиесреды, созданыбиблиотекистандартныхклассовдля самых различных областей применения. К концу XX века С++ стал стандартнымязыкомпрофессиональногопрограммирования.

Всамом начале нового XXI века появился еще один преемник

Спод названием C# (читается «си шарп»; музыкальный знак диеза намекаетнаповышеневозможностейбазовогоязыка). ОнбылпредложенфирмойMicrosoft какоружиевконкурентнойборьбепротив победногошествия языкаJava, окотороммыбудемговоритьниже. По словам разработчиков, С# вобрал в себя все лучшее из таких популярных языков как Си++, Visual Basic, Java иObject Pascal. Он обеспечивает быструю разработку, в то же время позволяет писать эффективный код. Более того, фирма заявила, что C# — первый язык, вкоторомреализованапринципиальноноваяконцепциякомпонентного программирования, в которой программной единицей становитсянеобъект, акомпонент, представляющийсобойготовое приложение, распространяемое по компьютерной сети. Вопрос о том, действительноликомпонентноепрограммированиепредставляет собой смену парадигмы, или это — некоторая эволюция ставшего уже традиционным объектного программирования, на сегодняшний день является дискуссионным.Ответ на него даст время.

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

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

Прошло несколько лет, пыль улеглась, теперь можно спокойно

193

обсудить феномен Java, его достоинства и недостатки.

Язык Java появися в связи с развитием сети Интернет. Когда на сменустатичнымWeb-страницампришлиразнообразныеприложе- ния — от прыгающих фигурок до серьезных и ответственных клиентских программ электронной торговли, встал вопрос о выборе языкадлясетевогопрограммирования. Требованияизначальнобыли очень высокими: язык должен быть аппаратно независимым, так как в сеть включены самые разнообразные компьютеры; безопасным, чтобызагружаемые посетипрограммынемогливыступить в качестветроянскогоконядляхакеров; компактнымиэффективным, не предъявляющим чрезмерных требований к аппаратуре; универсальным и т. п.

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

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

class test

{

int i, n; float s; float x[n];

public static void main( String args[] )

{

//чем массив x заполнен? //чему равняется n ?

n = 10; s = 0;

for( i=1; i<=n; i++)

{

s = s + x[i-1]; s = s / n;

}

194

}

}

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

В настоящее время технология Java еще не совсем устоялась, идутспорыоединомстандарте, приэтомпротиворечиядоходятдо уровня судебного разбирательства. В течение нескольких лет тянулся судебный спор между корпорацией Microsoft, попытавшейстя «улучшить» язык применитьельно к своему браузеру Internet Explorer, ифирмойSun, отстаивающейсвоиправана«чистую» Java. Microsoft этот спор проиграла, однако с поражением не смирилась и в качестве ответного хода выступила в 2000 году с инициативой

.NET (читается«дотнет», NET означаетСЕТЬ). Конечнаяцельэтой инициативытакаяже, какутехнологииJava — обеспечитьединую средудлякомпонентногосетевогопрограмирования, когдаготовые модули (компоненты), реализованные в различных местах, могут загружатьсяпосетииисполнятьсянаразличныхаппаратныхплатформах. Приэтом.NET идетдальше: предполагается возможность использованиянеединственногоязыкаJava, амногих, вчастности разработанного и активно продвигаемого Microsoft перспективного языка C#, а вместо медленной интерпретации компонента виртуальной Java-машиной предлагается его быстрая и оптимизированная к условиям конкретного компьютера компиляция в момент

195

загрузки(Just-In-Time).

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

ДолгожительLisp

Lisp (LISt Processing — обработкасписков)

— еще один долгожитель, наряду с Форт-

— инструмент

раном и Коболом, в семье языков програм

функционального

мирования. Язык создан в 1960 году Джо-

программирования

ном Маккарти (McCarthy, John; р. ) в Мас-

сачусетском технологическом институте на теоретическом фундаменте так называемого лямбда-исчисления, предложенного еще в 1930 годуизвестнымамериканскимлогикомАлонзоЧерчем

Какследуетизназвания, обрабатываемымобъектомвязыкеявляется список, а программа на Лиспе — последовательность вызовов функций; нет ничего, кроме вызовов функций. Поэтому программированиенатакомязыкеназываетсяфункциональным. Вызов функции — это список вида

(<имя-функции> < аргумент-1> <аргумент-2>...<аргумент-n>)

В Лиспе очень широко используется рекурсия, в целом это — невероятно элегантный с математической точки зрения язык, его совершенствовать почти невозможно, однако программа на нем имеет необычный внешний вид из-за большого количества скобок. Вот, например, каквыглядитпростейшаяпрограмма вычисления среднего арифметическогочисел8, 5, 13, 11, 10:

Дж. Маккарти и А.П.Ершов в новосибирском Академгородке (1975 г.)

196

(setq L `(8 5 13 11 10)) (defun sum (L)

(cond ((null L) '0)

(t (add (car L) (sum (cdr L))))

)

)

(div (sum L) '5)

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

Затем задается рекурсивное определение новой функции суммировния элементов списка (sum L) через примитивные функции: cond — условная функция, проверяющая с помощью функции

null пустотусписка;

add — суммированиеаргументов;

car — извлечение первого элемента из списка;

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

суммирования (sum L).

Сразу после появления Лисп стал очень популярным прежде всего как язык для решения логических задач. Он очень легко реализуется на аппаратном уровне, в настоящее время специализированные Лисп-процессоры широко используются в системах искусственного интеллекта для военных применений, например, в системах самонаведения крылатых ракет. Более того, Лисп, несмотря на некоторую громоздкость, широко применяется в США как вычислительный язык, уступая по распространенности только Фортрану. Вчастности, взнаменитойсистемеавтоматизированногопроектирования AutoCAD используется диалект Лиспа под названием

AutoLisp.

Prolog —

Вкачествеэпиграфакэтомуразделу

приведем выдержку из предисловия

несбывшаясямечта

Патрика Уинстона к учебнику по

ЭВМV поколения

Прологу: «Всредниевеказнаниела-

 

тинскогоигреческогоязыковявлялосьсущественнойчастьюобра-

197

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

ЯзыкProlog (PROgramming for LOGic — программированиедля логики) был создан в Европе в начале 70-х годов. Теория была разработана в Эдинбурге (Великобритания) Робертом Ковальским и МаартеномванЭмденом, перваяреализацияосуществленаАленом Кольмари(Colmerauer, Alain) изМарселя(Франция).

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

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

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

описываетсядевятьюфактами:

муж (петя), муж (ваня), муж (коля), жен (таня), жен (маша),

мать (ваня, таня), отец (ваня, петя), отец (маша, ваня), отец (коля, ваня).

Зададимследующиеочевидныеправилародства, используя синтаксис Пролога. Знак «:—» символизирует «есть по определению», запятая

Таня Петя

ЖМ

МВаня

ЖМ

Маша Коля

198

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

родитель (X, Y) :— отец (X, Y)

родитель (X, Y) :— мать (X, Y)

дед (X, Y) :— родитель (X, Z), отец (Z, Y) брат (X, Y) :— муж (Y), родитель (X, Z),

родитель (Y, Z), X<>Y

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

GOAL>

дед (коля, X)

Кто дед Коли?

X

=

Петя

 

GOAL>

брат (маша, X)

Кто брат Маши?

X

=

 

Коля

 

Пролог — очень мощный и красивый язык, с ним в 80-е годы былисвязаныоченьбольшиенадежды. РечьидетовесьмаамбициозномпроектеЭВМпятогопоколения, заявленномЯпониейв1981 годуираспропагандированном впечатипод названием «Японский вызов». Предполагалось, чтов90-хгодахбудутсозданыкомпьюте- ры, имеющиепринципиальныеотличия отвсехпредыдущих:

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

новая архитектура (не фон неймановская);

новыеспособыввода-выводаинформации— распознаваниеисинтез речи и образов;

отказоттрадиционныхалгоритмическихязыковпрограммирования (Фортран, Алгол и т. п.) в пользу декларативных;

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

199

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

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

Logo —

Взключениеэтогопараграфамырассмотримеще

одиналгоритмическийязык, предназначенныйне

языкдля

для «настоящего» программирования, а для обу-

самых

чения детей. Речь идет о языке Logo, изобретен-

маленьких

нымвыдающимсяматематикомипедагогомСей-

 

муром Пейпертом (Papert, Seymour). Пейперт родился и вырос в Южной Африке, учился в Кембридже, а в 1958-1963 годах работал в Женеве у знаменитого психолога Жана Пиаже (Piaget, Jean), где занимался детьми и природой их мышления.

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

но, детиоченьлюбятрисовать. Оттал-

 

киваясьотэтоготезисаивзявзаосно-

 

ву язык Lisp, Пейперт в 1967 году со-

 

здал гениальную в своей простоте си-

 

стемупрограммированияLogo, вкото-

 

рой операторы языка управляют дви-

 

жениями маленькой черепашки, пол-

 

зающейпоэкранукомпьютераиостав-

 

ляющей за собой видимый след. Ре-

 

бенок, начиная с возраста 5-6 лет, ри-

 

суя черепашкой с помощью команд

 

«вперед на столько-то шагов», «впра-

 

во на столько-то градусов» и им по-

СеймурПейперт

 

Спираль из дуг

200

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

Вот пример простейшей рекурсивной программы на русифицированном Logo, рисующей спираль из отдельных дуг окружности:

это дуга :шаг :число_шагов повтори :число_шагов

[вперед :шаг направо 10]

конец

это спираль :шаг если :шаг < 1 [стоп] дуга :шаг 18 спираль :шаг / 2

конец

УСеймураПейпертанашлосьочень много последователей на всех континентах Земли. Эксперименты, прове-

денныестысячамидетейпоказалиудивительныерезультаты. РаботаскомпьютеромвсредеLogo стимулируеттворческиеспособности, развивает абстрактное мышление Сама среда Logo постоянно совершенствуется. Современная реализация системы для Wintel и Macintosh под названием MicroWorlds — ЛогоМиры имеет еще болееширокиевозможностипрограммирования: можноуправлятьсразу несколькими черепашками, цветом, звуком, создавать мультипликации и т. д. Она представляет собой универсальную учебноразвивающуюсреду, тоестьоткрытадлязанятийлюбымшкольным предметом.

Уроки

Итак, какие общие выводы можно сделать из расска-

занныхисторийоразвитииконкретныхязыковпрограм-

истории

мирования?

Первое. Программированиевцеломзначительноболееконсервативно, чемаппаратнаячастькомпьютера. Фундаментальныеидеирождаются очень редко — раз в 10-15 лет. За прошедшие полвека было предложенопятьосновныхконцепцийпрограммирования:

201

1)процедурноепрограммирование, реализованноевязыкахФортран, Кобол, Алгол, Паскаль и т. п.;

2)объектно-ориентирование программирование (ООП), в кристалльночистомвидереализованноевязыкеSmalltalk, ивсмесиспроцедурнымпрограммированиемприсутствующеевовсехсовременных языках— Object Pascal, Visual Basic, C++, Java;

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

ит. п. ОнореализовановвизуальныхтехнологическихсредахDelphi, Visual Basic, Visual C++, Visual Java, Visual FoxPro идр.;

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

Lisp;

5)логическое программирование, положенное в основу языка

Prolog.

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

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

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

3.3. Операционные системы

Операционная система (ОС) — важнейшая часть системного программногообеспечения. ОС— этосовокупностьпрограмм, орга-

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