Автор Анна Евкова
Преподаватель который помогает студентам и школьникам в учёбе.

Классификация языков высокого уровня.

Содержание:

Введение

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

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

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

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

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

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

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

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

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

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

Пример машинного кода и представления его на ассемблере

Трансляторы делятся на:

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

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

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

Преимущества

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

Недостатки

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

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

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

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

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

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

Фортран

Кобол

Алгол

Pascal

Java

C

C++

C#

Objective C

Smalltalk

Delphi

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

1.2 Краткая история языков программирования

С тех пор как в 50-е гг. появились первые языки программирования высокого уровня, методы их разработки и реализации постоянно развиваются. Те языки, которые описаны здесь, появились в разное время: первые версии FORTRAN и LISP были разработаны в 50-е гг., история языков Ada, С, Pascal, Prolog и Smalltalk начинается в 70-х гг„ в 80-е возникли такие языки, как C++, ML, Perl, Postscript, а язык Java — самый молодой, он появился в 90-х. В 60-е и 70-е гг. новые языки часто возникали при разработке больших проектов по созданию программного обеспечения как их составная часть. Когда в 70-е гг. Министерством обороны США в рамках основного проекта разработки языка Ada был составлен отчет об используемых в то время языках программирования, выяснилось, что в различных оборонных проектах было использовано более 500 языков.

1.1.1. Разработка первых языков

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

В начале 50-х начали появляться первые языки, использовавшие символьные системы обозначений. Грейс Хупер (Grace Hooper) возглавил в компании Univac группу, которая разрабатывала язык А-0, а Джон Бэкус (John Backus) создал язык Speedcoding для IBM 701. Оба эти языка предназначались для преобразования простых арифметических выражений в исполняемый машинный код.

Настоящий прорыв произошел в 1957 г., когда Бэкус руководил группой по созданию языка FORTRAN, или транслятора формул (FORmulaTRANslator). На ранней стадии разработки FORTRAN был ориентирован на численные вычисления, но конечной целью был вполне законченный язык программирования, включающий в себя управляющие структуры, условные операторы и операторы ввода-вывода. Поскольку немногие верили, что получится язык, способный конкурировать с языком ассемблера, в котором машинные команды кодировались вручную, основной задачей было создать эффективный исполняемый код, поэтому многие операторы разрабатывались с учетом специфики ЭВМ IBM 704. Концепции языка FORTRAN типа механизма трехветвевого перехода вытекала напрямую из аппаратной архитектуры IBM 407, а операторы типа READ INPUT ТАРЕ сегодня выглядят весьма причудливо. Все это выглядело не очень изящно, но в то время еще не задумывались об элегантном программировании, зато разработанный язык позволял писать программы, которые выполнялись достаточно быстро на ЭВМ упомянутого типа.

FORTRAN оказался весьма удачным языком и оставался доминирующим вплоть до 70-х гг. Следующая версия FORTRAN вышла в 1958 г. и стала называться FORTRAN II, а спустя несколько лет появился FORTRAN IV. Поскольку каждый производитель ЭВМ реализовывал для своих компьютеров собственную версию языка, то, понятное дело, царил хаос. В 1966 г. FORTRAN IV стал стандартом под названием FORTRAN 66 и с тех пор дважды подвергался пересмотру, в результате чего возникли стандарты FORTRAN 77 и FORTRAN 90. Наличие большого количества программ, написанных на ранних версиях языка, явилось причиной того, что создаваемые трансляторы должны были удовлетворять требованиям обратной совместимости, что препятствовало внедрению в язык новых идей и концепций программирования.

Поскольку FORTRAN оказался столь успешным языком, в Европе возникли опасения, что IBM будет доминировать в компьютерной отрасли. Немецкое общество прикладной математики (German society of applied mathematics — GAMM) создало комитет по разработке универсального языка. В то же время Association for Computing Machinery (ACM) организовала похожий комитет в США. Несмотря на то, что у европейцев было некоторое беспокойство по поводу господства американцев, оба этих комитета слились в один. Под руководством Питера Наура (Peter Naur) этот комитет разработал IAL (International Algorithmic Language). Предлагавшееся название ALGOL (ALGOrithmic Language) было вначале отвергнуто. Но поскольку оно стало общеупотребительным, официальное имя IAL пришлось впоследствии изменить на ALGOL 58. Новая версия появилась в 1960 г., и ALGOL 60 (с небольшими изменениями, сделанными в 1962 г.) с 60-х и до начала 70-х гг. прошлого века был стандартом академического языка программирования.

Если FORTRAN разрабатывался для эффективного использования на IBM 704, перед разработчиками языка ALGOL стояли совершенно другие цели, а именно:

1. Сделать систему обозначений в ALGOL как можно ближе к стандартной математической.

2. ALGOL должен быть приспособлен для описания алгоритмов.

3. Программы на ALGOL должны были компилироваться в машинный язык.

4. ALGOL не должен быть привязан к конкретной машинной архитектуре.

1 Имеется в виду арифметический IF.

2 В те далекие времена в нашей стране было принято компьютеры называть электронными вычислительными машинами (ЭВМ). Термин «компьютер» стал де-факто стандартом с распространением персональных компьютеров. Все эти цели оказались в 1958 г. недостижимы. Чтобы обеспечить независимость от архитектуры, в этот язык не были включены возможности ввода-вывода; для таких операций следовало создавать специальные процедуры. Хотя это и обеспечивало независимость языка от архитектуры компьютера, но в то же время приводило к тому, что каждая реализация неизбежно была несовместима с любой другой. Чтобы сохранить аналогию со строгой математикой, подпрограмма рассматривалась как макроподстановка, что породило концепцию передачи параметров по имени.

Хотя ALGOL и имел некоторый успех в Европе, он так и не получил коммерческого успеха в Америке, тем не менее его влияние на другие языки было достаточно велико. В качестве примера приведем разработанную Шварцем (Jules Schwartz) из System Development Corporation (CDS) версию языка IAL — JOVIAL (Jules’ Own Version of IAL). Этот язык использовался военно-воздушными силами США для решения прикладных задач. Бэкус был редактором отчета, в котором определялся язык ALGOL. Он использовал синтаксическую систему обозначений, сопоставимую с концепцией контекстно-свободного языка, разработанной Хомским (Chomsky). Так произошло внедрение теории формальных грамматик в область языков программирования. Поскольку Бэкус и Наур внесли огромный вклад в концепцию разработки ALGOL, эта система обозначений носит их имя — нормальная форма Бэкуса-Наура (НФБ) (Backus-Naur Form — BNF).

Можно привести еще один пример влияния ALGOL. Компания по продаже компьютеров Burroughs, которая после слияния с компанией Sperry Univac образовала компанию Unisys, обнаружила работы польского математика Лукашевича (Lukasiewicz), который разработал методику, позволяющую записывать арифметические выражения без скобок, используя алгоритм вычислений с использованием стека. Эта методика оказала значительное влияние на теорию разработки компиляторов. Используя технологию, основанную на этой методике, компания Burroughs разработала компьютер В5500 со стековой архитектурой и вскоре реализовала компилятор языка ALGOL, значительно превышавший по скорости существовавшие в то время компиляторы языка FORTRAN.

С этого момента ситуация изменяется. В 60-е гг. была разработана концепция пользовательских типов данных, которая не была реализована ни в языке FORTRAN, ни в языке ALGOL. Язык Simula-67, разработанный норвежцами Найгардом (Nygaard) и Далом (Dahl), ввел концепцию классов в ALGOL. В 80-е гг. это натолкнуло Страуструпа (Stroustrup) на идею создать C++ как расширение С с добавлением понятия классов. В середине 60-х Вирт (Wirth) разработал расширение языка ALGOL — ALGOL-W, пользовавшийся меньшим успехом. Тем не менее в 70-х гг. он же разработал Pascal, который стал языком научного программирования тех лет. Другой комитет, ориентируясь на успех ALGOL 60, разработал язык ALGOL 68, который, однако, оказался слишком сложным для понимания и эффективной реализации.

С началом серийного выпуска в 1963 г. новых компьютеров модели 360 фирма IBM в своей лаборатории Hursley, находящейся в Англии, разработала новый язык — NPL (New Programming Language). В связи с некоторым недовольством сотрудников Национальной физической лаборатории (English National Physical Laboratory) язык был переименован в MPPL (Multy-Purpose Programming Language). В дальнейшем это название было сокращено до PL/I. Язык PL/I объединил в себе вычислительные возможности языка FORTRAN и возможности бизнес-программирования (обработки деловой информации), имевшиеся в языке COBOL. В 70-е гг. PL/I пользовался некоторой популярностью (так, среди языков, он обладал наибольшим количеством возможностей), в настоящее же время он практически забыт, поскольку вытеснен такими языками, как С, C++ и Ada. Версия PL/С этого языка в 70-е гг. получила распространение как компилятор PL/I для студентов. BASIC был разработан, чтобы удовлетворить потребность в численных расчетах людей, не имеющих отношения к науке, однако в дальнейшем его возможности были расширены и вышли далеко за рамки первоначальных целей.

Языки обработки деловой информации. Сфера обработки деловой информации стала следующей после численных расчетов областью, которая привлекла внимание разработчиков языков. В 1955 г. группа сотрудников Univac под руководством Грейса Хупера (Grace Hooper) разработала язык FLOWM ATIC. Целью было создание приложений для обработки деловой информации с использованием некоторого англоподобного текста. В 1959 г. Министерство обороны США профинансировало совещание по разработке языка CBL (Common Business Language), который должен был стать бизнес-ориентированным языком, максимально использующим английский язык в качестве системы обозначений для своих программ. В связи с несогласованной деятельностью различных компаний для быстрой разработки этого языка был сформирован специальный комитет Short Range Committee. Хотя члены этого комитета думали, что они будут разрабатывать некий промежуточный вариант языка, оказалось, что разработанная ими спецификация, опубликованная в 1960 г., определила новый язык — COBOL (COmmon Business Oriented Language). COBOL пересматривался в 1961 и 1962 гг. и был стандартизован в 1968 г. В 1974 и 1984 гг. он снова подвергся пересмотру.

Языки искусственного интеллекта. Интерес к языкам искусственного интеллекта возник в 50-е гг., когда компанией Rand Corporation был разработан язык IPL (Information Processing Language). Версия IPL-V стала довольно широко известна, но ее использование ограничивалось тем, что IPL-V не был языком высокого уровня. Огромным шагом вперед стала разработка Джоном Мак-Карти (John McCarthy), сотрудником Массачусетсского технологического института (MIT), языка LISP (LISt Processing) для компьютеров IBM 704. Версия LISP 1.5 стала стандартом для его реализации на многие годы. Развитие LISP продолжается до настоящего времени. LISP разрабатывался как функциональный язык обработки списков. Естественной областью приложения LISP явилась разработка стратегии ведения игры, поскольку обычная программа, написанная на языке LISP, могла создавать дерево возможных направлений движения (как связанный список) и, продвигаясь по этому дереву, искать оптимальную стратегию. Другой естественной областью применения этого языка стал автоматический машинный перевод текста, где одна цепочка символов может заменяться на другую. В этой области первой разработкой был язык СОМГГ, созданный Ингве (Yngve), сотрудником MIT. Каждый оператор программы, написанной на этом языке, был очень похож на контекстно-независимое правило (context-free production), и представлял собой набор замен, которые можно было осуществить, если в исходных данных обнаруживалась конкретная цепочка символов. Поскольку Ингве запатентовал свой код, группа разработчиков из AT&Т Bell Telephone Laboratories решила создать свой собственный язык — так появился SNOBOL.

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

Системные языки. В целях повышения эффективности выполняемых программ использование языка ассемблера в системной области продолжалось достаточно долго даже после того, как для приложений в других областях стали использоваться языки высокого уровня. Многие языки системного программирования, такие как CPL и BCPL, так и не нашли широкого применения. Все изменилось с появлением языка С. C развитием в 70-е гг. конкурентоспособной среды UNIX, написанной в основном на языке С, была доказана эффективность использования языков высокого уровня и в системной области.

1.3 Языки программирования высокого уровня

Поскольку программы, написанные на языке ассемблера и на машинном языке, были достаточно сложными и плохо работали, программисты создавали языки программирования, все более приближающиеся к человеческому языку — FORTRAN, COBOL, Pascal и Ada. Создавая языки программирования, похожие на обычный человеческий язык, программисты надеялись, что появятся программы, которые будет легко писать и изменять. Одним из первых появился язык программирования FORTRAN (название которого образовано от слов FORmula TRANslator). FORTRAN специально создан для выполнения математических расчетов. Другим языком программирования высокого уровня является COBOL (название образовано от слов COmmon Вusiness-Oriented Language), созданный для обработки коммерческих данных. Так как каждый язык программирования предназначался для определенных целей, программисты не могли использовать языки FORTRAN и COBOL для написания видеоигр, операционных систем или программ для работы с текстом. Программирование до сих пор остается сложным для большинства людей, поэтому компьютерные гении создали языки программирования Pascal и BASIC, которые использовались для обучения людей программированию. Язык программирования BASIC (название образовано от слов Beginner's All-purpose Symbolic Instruction Code) создан для того, чтобы показать новичкам, как именно надо программировать. Начинающие программисты приступали к изучению программ, написанных на языке программирования С. Однако из-за сложности этого языка многие люди теряли уверенность в своих силах. Основное преимущество языка BASIC очевидно. Для того чтобы отобразить на экране сообщение «Take а nар!» (Отдохни немного!), необходимо ввести только одну следующую команду: ;PRINT "Take а nар!" По сравнению с аналогичным исходным кодом программ, написанных на языке ассемблера или на машинном языке, исходный код программ, написанных на языке BASIC, позволяет вам сконцентрировать свое внимание именно на том, что необходимо сделать, а не на написании команд. Язык программирования Pascal (язык назван в честь французского философа Блеза Паскаля, Blaise Pascal) также предназначен для того, чтобы помочь начинающим программистам понять, как надо программировать. Основное отличие между языками BASIC и Pascal состоит в том, что язык программирования Pascal позволяет создавать хорошо структурированные программы, легкие для понимания. Вы легко сможете прочитать их, а также изменить в будущем. Программа для отображения на экране фразы Take а nар! (Отдохни немного!), написанная на языке Pascal, выглядит следующим образом:

.........

: Program Message (Input, Output);

Begin

Write ln ('Take a nap!');

End.

В отличие от программы, написанной на языке программирования Pascal, программы, написанные на языке программирования BASIC, намного проще. Это позволяет быстрее писать программы, однако прочитать и понять большую программу будет достаточно сложно. Язык Pascal более структурированный, что позволяет составить схему программы еще до того, как вы начнете ее писать. Так вы поступаете, планируя свой летний отпуск. Это может занять некоторое время, но после такого планирования ваша программа и ваш отпуск будут лучше организованы. При этом вы не запутаетесь в программе, а приехав в Париж, вы не будете в полночь бродить по улицам из-за того, что забыли забронировать номер в гостинице. С другой стороны, язык программирования BASIC позволяет вам незамедлительно приступить к написанию программы. Язык программирования BASIC настолько популярен, что программисты попытались объединить структурированность языка Pascal и простоту языка BASIC для создания различных диалектов языка BASIC. Liberty BASIC служит примером структурированной версии языка BASIC. Как обычно, языки программирования высокого уровня, такие как Pascal, BASIC, FORTRAN, Ada и COBOL, обладают рядом недостатков, о которых я расскажу ниже. Программы, написанные на языках программирования высокого уровня, большие и медленно работают по сравнению с аналогичными программами, написанными на языке программирования С, языке ассемблера или на машинном языке. Языки программирования высокого уровня не обеспечивают доступ ко всем элементам компьютера, как это делает язык программирования С, язык ассемблера или машинный язык. Написание на этих языках таких программ, как операционные системы или утилиты для работы с дисками (например, набор утилит Norton Utilities), намного сложнее (но не невозможно). Языки программирования высокого уровня больше похожи на человеческий язык. Таким образом, написание компилирующих программ для таких языков — достаточно сложная задача. Если на вашем компьютере не установлена компилирующая программа для используемого вами языка программирования высокого уровня (например, для языка программирования Ada), вы не сможете написать работающую на вашем компьютере программу. Язык программирования Ada — это сложный язык программирования высокого уровня. Компилирующие программы для языка программирования Ada для различных компьютеров занимают достаточно много времени. Можно найти очень немного компилирующих программ для языка программирования Ada, поэтому программисты редко пишут программы на этом языке. Язык программирования Ada никогда не станет таким популярным, как языки С, COBOL, FORTRAN, BASIC или Pascal. Конечно, любой программист, использующий языки программирования высокого уровня Pascal, BASIC, FORTRAN, Ada и COBOL, приведет кучу преимуществ данных языков над языком программирования С, языком ассемблера или машинным языком. Ниже перечислены некоторые преимущества языков программирования высокого уровня. С помощью языков программирования высокого уровня вы сможете писать программы намного быстрее, чем на языке ассемблера или на машинном языке. (Можно написать программу на языке программирования С, которая будет выполнять то же, что и программа, написанная на языке программирования высокого уровня.) Изучение языков программирования высокого уровня требует меньше времени, чем изучение машинного языка, языка ассемблера или языка С. Поскольку языки программирования высокого уровня не предоставляют доступ ко всем элементам компьютера, вы не сможете написать программу, которая приведет к поломке компьютера. Чтение программ на языках высокого уровня и их изменение намного проще, чем в аналогичных программах, написанных на языке программирования С, языке ассемблера или на машинном языке. Программы, написанные на языках программирования высокого уровня, можно запускать на различных компьютерах.

2 Спецификация программ и стандартизация ЯП

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

• разбиение задачи на подзадачи;

• описание входных и выходных данных;

• описание объектов, участвующих в задаче;

• описание связей между объектами;

• описание процессов взаимодействия с внешней средой;

• описание реакций на исключительные ситуации и т. д.

Эксплуатационный аспект рассматривает такие вопросы, как:

• скорость работы программы;

• ресурсы, требуемые для решения задачи;

• характеристики аппаратных средств;

• специальные требования к надежности и безопасности и т. д.

Спецификации могут появляться на всех этапах так называемого «жизненного цикла» программного продукта. Рождается спецификация на этапе проектирования и занимает обычно промежуточное положение между начальными требованиями и готовой программой. Дополненные и уточненные требования — это уже спецификация. Однако зачастую переход от спецификации к программе сложный и длительный социальный процесс, в котором участвуют как заказчики, так и разработчики. Поэтому иногда полезно различать внешнюю и внутреннюю спецификации. Внешняя спецификация обращена к внешнему пользователю, потребителю программной продукции, а внутренняя — к внутреннему пользователю, разработчику. Исходная спецификация представляет собой документ, который служит заданием на разработку программы. Хорошая спецификация при этом сокращает вероятность возникновения ошибок недопонимания разработчиками того, что хочет заказчик.

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

• императивное программирование;

• объектно-ориентированное программирование;

• функциональное программирование;

• логическое программирование.

2.1.1 Императивное программирование

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

Большинство наиболее известных и распространенных императивных

языков программирования были созданы в конце

50-х — середине 70-х годов XX в.:

• Fortran (1954 г.);

. Algol (1960 г.);

• Basic (1964 г.);

• Pascal (1970 г.);

. С (1972 г.).

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

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

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

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

— Simula (1962 г.);

— Smalltalk (1972 г.);

— Beta (1975 г.);

— Cecil (1992 г.);

— Java (1995 г.);

• «гибридные» языки, появившиеся в результате внедрения объектно-ориентированных конструкций в популярный императивный язык программирования:

— Object Pascal (1984 г.);

— C++ (1983 г.).

Первым «настоящим» языком ООП принято считать Smalltalk, который был разработан в Паоло-Альто, в лаборатории компании Ксерокс.

2.1.3 Функциональное программирование

Функциональное программирование — способ составления программ, в которых единственным действием является вызов функции, единственным способом расчленения программы на части — введение имени для функции и задание для этого имени выражения, вычисляющего значения функции, а единственным правилом композиции — оператор суперпозиции функции. Функциональное программирование, как и другие модели неимперативного (непроцедурного) программирования, обычно применяется для решения задач, которые трудно сформулировать в терминах последовательных операций. Практически все задачи, связанные с искусственным интеллектом, попадают в эту категорию. Среди них следует отметить задачи распознавания образов, общение с пользователем на естественном языке, реализацию экспертных систем, автоматизированное доказательство теорем, символьные вычисления. Функциональное программирование является одним из старейших. По происхождению оно тесно связано с лямбда-исчислением, изобретенным еще в начале 30-х годов XX в. логиком - Алонзо Черчем совместно со Стивеном Клини. Для многих функциональная методология стала ассоциироваться с языком Lisp, созданным Джоном Маккарти в конце 50-х годов XX в.

Языки функционального программирования

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

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

• переменные, однажды получив значение, никогда его не

- изменяют;

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

Хронология появления основных языков функционального программирования:

• Lisp (1958 г.);

• РЕФАЛ(1968 г.);

• Scheme (1975 г.);

. FP( 1977 г.);

• Miranda (1985 г.);

. ML(1985 г.);

• CaML (1985 г.);

• Haskell (1990 г.);

• Ocaml (Objective CaML — объектно-ориентированное расширение языка CaML, 1996 г.);

• Haskell 98 (объектно-ориентированное расширение языка Haskell, 1998 г.).

По этой хронологии заметен пик интереса к функциональным языкам (конец 70-х — начало 80-х годов XX в.). В настоящее время функциональное программирование перестало быть исключительно исследовательским. Современные языки функционального программирования (ML, Haskell) — строго типизированные, компилирующиеся — предназначены как для индивидуальной работы над программами, так и для коллективной разработки.

2.1.4 Логическое программирование

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

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

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

2.2.1 Язык функционального программирования РЕФАЛ

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

2.2.2 Язык программирования C (Си)

Язык программирования Си разработанный Деннисом Ритчи в начале 1970-х годов для создания операционной системы UNIX. Си остается наиболее широко используемым языком для написания системного программного обеспечения , и Cи также используется для написания приложений. Программирование для начинающих.

История

Начальное развитие C произошло между 1969 и 1973 (в соответствии с Ритчи, самый бурный период в 1972 году). Он назывался "С", потому что многие функции, были получены из предшественника языка по имени B , который сам в свою очередь был назван Бон в честь жены Бонни Кен Томпсон. 
К 1973 году язык программирования Си стал достаточно мощным, поэтому большая часть ядра из операционной системы Unix была переписана на C, для сравнения операционная система Multics реализована на языке A, ОС Tripos(реализована на языке BCPL. В 1978 году Ричи и Брайан Керниган опубликовали «язык программирования C» (так называемыую "белую книгу", или K & R.) на протяжении многих лет, эта книга служила спецификацией языка, и даже сегодня, это издание пользуется большой популярностью как руководство и учебник. С стал очень популярным за пределами Bell Labs с 1980-х годов , и было какое-то время доминирующим языком в системах и приложениях программирования микрокомпьютеров. До сих пор наиболее часто используемых языков программирования системы, и является одним из наиболее часто используемых языков программирования в компьютерах для естественно - научного образования. 

В конце 1980-х годов, Бьерн Страуструп и другие в Bell Labs работали, чтобы добавить объектно-ориентированные конструкции для C. Язык, который они разработали вместе с первым компилятором Cfront, назвали C++ (что позволяет избежать вопроса о том, что преемник "B" и "С" должен быть "D" или "Р"). В настоящее время язык C++ чаще всего используется для коммерческих приложений для операционной системы Microsoft Windows, хотя C остается очень популярным в мире Unix. 

2 .2 .3 Язык программирования Prolog

Prolog — язык логического программирования, основанный на логике дизъюнктов Хорна, был создан Аланом Колмероэ в 1971 г. Будучи декларативным языком программирования, Prolog воспринимает в качестве программы некоторое описание задачи и сам производит поиск решения, пользуясь методом резолюций. Основными свойствами языка являются:

• встроенный механизм сопоставления с образцом;

• механизм вывода с поиском и возвратом;

• иерархические структуры данных;

• естественная рекурсия.

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

2.2.4 Язык программирования Lisp (Лисп)

Язык программирования Lisp (что означает "LISt Processing") ориентирован на функциональное программирование. Его характерные особенности включают префикс обозначения синтаксиса, динамическую типизацию (переменные нейтрального типа), и способность представлять исходный код как объект начального класса.

Не считая различные языки и сборки языков, Лисп является вторым старейшим языком программирования, который по-прежнему широко используется, ну разве только Fortran старше. Как и Fortran, LISP сильно менялся начиная с первых дней своего существования.

Строго говоря, Lisp теперь не один язык, а целое семейство аналогичном стиле языков с мгновенно узнаваемым внешним видом. Они известны как диалекты Lisp, наиболее известными являются Common Lisp и Scheme.

2.2.5 Язык программирования FORTRAN (ФОРТРАН)

Fortran (также FORTRAN) это язык программирования, разработанный в начале 1950-х годов и используемый до сих пор. Название является сокращением от "FORmula TRANslator". Ранние версии языка были известны как FORTRAN, но буквы перестали быть заглавными начиная с версии Fortran 90. Официальные стандарты языка теперь именуют язык как "FORTRAN".

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

Первый компилятор FORTRAN был разработан для IBM 704 в 1954-57 в команде IBM под руководством Джона Бэкуса (John W. Backus). Это было оптимизирующий компилятор, потому что авторы рассудили, что никто не будет использовать язык, даже при изучении программирования для чайников, если его производительность не будет сравнима с ассемблером.

2.2.6 Язык программирования ALGOL (АЛГОЛ)

ALGOL это язык программирования, первоначально разработанный в 1958 году, который был назван по названию "АЛГОритмический процесс" основной проблемы программирования. Это краткое имя алгоритмического языка. В некотором смысле, это была реакция на Fortran, этот язык был предшественником Паскаля. Он использует слова в качестве ограничителей блоков и был первым, кто использовал пару "begin" и "end". Программирование для начинающих. 

Существовали три основные версии официального Алгола: Алгол 58, Алгол 60 и Алгол 68. Из них, язык программирования Алгол 60 был самым влиятельным (Алгол 60 был предком Algol W, который был использован Никлаусом Виртом для разработки Паскаля). Каждая официальная версия Алгола названа в честь года, в котором она была опубликована
Алгол был разработан совместно с Комитетом европейских и американских компьютерных ученых.

Язык программирования Алгол 60 был выпущен в 1960 году Джоном Бэкусом и Питером Наурос, которые служили в комитете, который разработал АЛГОЛ. Algol 60 вдохновил разработчиков многих языков, которые создавались позже; цитата в этой связи Э. Хоара "Алгол оказал громадное влияние на своих преемников". Полная цитата "Этот язык настолько опередил свое время, что намного опередил своих предшественников и очень близок к своим последователям", но афоризм более известен. Иногда ошибочно эти слова приписывают Эдсгеру Дейкстре, что вполне понятно, так как он служил в комитете-разработчике, а также делал не менее известные замечания по поводу языка. 

2.2.7 Язык программирования COBOL (КОБОЛ)

Язык программирования COBOL - название акроним от общего бизнес-ориентированного языка (COmmon Business Oriented Language). Программирование для начинающих. Язык программирования КОБОЛ был первоначально создан в 1959 на Комитете "The Short Range Committee". Это один из трех комитетов, предложенных для создания на совещании, состоявшемся в Пентагоне в мае 1959 года, организованного Чарльзом Филлипомс из министерсва обороны США . "The Short Range Committee" был сформирован для разработки рекомендаций относительно нового языка программирования для бизнеса. Он состоял из членов, представляющих шесть производителей компьютеров и трех правительственных учреждений. В частности, шесть компаний-производителей компьютерных Burroughs Corporation , IBM , Minneapolis-Honeywell, RCA , Sperry Rand , и Sylvania Electric Products. Государственных учреждения были: ВВС США , David Taylor Model Basin, и Национальное бюро стандартов . Этот комитет был под председательством члена Национального бюро стандартов. После создания Комитет разработал спецификации языка прогаммирования КОБОЛ. Этот Комитет состоял из шести человек:Уильям Селден и Гертруда Тирни из IBM. Говард Бромберг и Говард Скидка из RCA. Вернон Ривз и Джин Е. Сэммет из Sylvania Electric Products.

Эта группа завершила спецификацию для COBOL, и в 1959 году выпустила в свет. Спецификации были в значительной степени вдохновлены FLOW-MATIC, языком, который был изобретен Грейс Хоппер , и языком от IBM, котороый назывался COMTRAN, а изобрел его Боб Бемер. 
Спецификации были утверждены полным составом Комитета. После чего они были утверждены Исполнительным комитетом в январе 1960 , и отправлены в типографию правительства, которое отредактировало и напечатало эту спецификацию как язык программирования Cobol 60. COBOL был разработан в течение шести месяцев, и еще до сих пор используется более чем 40 лет спустя, для обучения основам программирования. COBOL, как это определено в первоначальной спецификации, обладал отличным самодокументируемыми возможностями, эффективными методами работы с файлами, и исключительно хорошими наборами типов данных на тот момент, из-за его использования картинок для детальной спецификации поля. Однако по современным меркам для программирования на языке определения, у него имеются серьезные недостатки. Отсутствие поддержки объектно-ориентированного программирования и так понятно, учитывая к тому же, что такое понятие не было известно в то время. COBOL имеет много зарезервированных слов, и трудно избежать непреднамеренного использования одного из них, без использования некоторых соглашений, например, таких как добавление вначале префикса для всех имен переменных. Оригинальная спецификация COBOL даже поддерживала самомодифицирующийся код через знаменитый "ALTER X TO PROCEED TO Y". В силу этих обстоятельств, очень мало нового кода пишется на COBOL. Однако, спецификации COBOL пересматривались на протяжении многих лет, чтобы решить некоторые из замечаний , а затем в COBOL устранили многие из недостатков, добавив: улучшения структуры управления, объектно-ориентированное программирование и удалили возможность использовать самомодифицирующийся код. Многие программы COBOL до сих пор используются в крупных коммерческих предприятий, в частности, в финансовых учреждениях. Некоторые люди думают, что использование десятичной арифметики в его инструкциях могло привести к тому, что программы являются уязвимыми перед проблемой связанной с датой 2000 года. Однако, трудно понять, почему они должны были сформировать это мнение, можно лишь предположить, что это происки конкурентов. Следует отметить, что COBOL своей десятичной арифметикой позволяет избежать многих других проблем, которые могут произойти при использовании вычислений с плавающей точкой для финансовых расчетов в COBOL.

2.2.8 Язык программирования Ada (Ада)

Ада является структурированным, компилируемым, статически типизированным языком программирования, разработанный Jean Ichbiah из компании Cii Honeywell Bull в 1970-х году. Он позиционируется для решения таких же задач, как C или C++. Ада была названа в честь леди Ада Лавлейс, первый программист - женщина.

Возможности языка.

Язык программирования Ада была первоначально ориентирован на встроенные системы и системы реального времени, и до сих пор широко используется для этих целей. В Ada 95 года (по проекту Tucker Taft из Intermetrics вносил изменеия с 1992 по 1995) была улучшена поддержка системного, численного и финансового программирования.

Особенности языка программирования Ada заключаются в:

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

В Ада 95 добавлена поддержка объектно-ориентированного программирования, в том числе динамической диспетчеризации как основы программирования. 

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

Определение языка программирования Ada отличается от других языков, зарегестрированных Международной организации по стандартизации в том, что доступно в свободном бесплатном доступе. Одним из следствий этого является то, что стандартный документ (известный как справочное руководство или RM) является обычной ссылкой, к которой обращаются программисты Ада для получения технические данных, хотя, так же как и у многих других языков имеется стандартный учебник.


История.

В 1970-х годах, Министерство обороны США выражает озабоченность по поводу числа различных языков программирования, используемых для своих проектов, некоторые из которых были закрытими для доступа и / или устаревшими. В 1975 году рабочая группа по разработке языка высокого уровня (HOLWG) была создана с целью сокращения числа используемых языков, для того, чтобы найти или создать язык программирования, который бы полностью удовлетворял требованиям военного Министерсва - результатом стал язык программирования Ада. Общее число языков программирования высокого уровня используемых для военных проектов сократилось с более чем 450 в 1983 году до 37 к 1996 году

Рабочая группа (Strawman, Tinman, and Ironman, к ним позже присоединился Steelman) создала серию документов с требованиями к языку. Многие существующие языки были официально рассмотрены, но группа пришла к выводу, что в 1977 году ни один из существующих языков не удовлетворяет требованиям.

Предложения по созданию нового языка программирования были выпущены и были наняты четыре подрядчика, чтобы вносить свои предложения под названиями Red, Green, Blue и Yellow. В мае 1979 года по проекту было внесено предложение "Green" от Jean Ichbiah из компании Cii Honeywell Bull - оно и было выбрано, и в последствии получило название "Ада". Справочное руководство было одобрено 10 декабря 1980 года (день рождения Ады Лавлейс). Министерство обороны США потребовало использования Ада (Ada мандата) для любого программного проекта, в котором предполагалось использование нового кода более чем на 30% от конечого результата, хотя зачастую предоставлялись исключения из этого правила. Это требование было удалено в 1997 году. Аналогичные требования имеются в других странах Североатлантического альянса (НАТО). 

Язык обзавелся стандартом ANSI в 1983 (ANSI / MIL-STD 1815), и стандартом ИСО в 1987 (ISO-8652: 1987). Эта версия языка широко известна как Ada 83 (исходя из даты его принятия ANSI). 
Ada 95, совместим с ISO / ANSI стандарт (ISO-8652: 1995), это последний стандарт для Ады. Он был принят в феврале 1995 года (выпущен Ada 95 - первый стандарт по ИСО для объектно-ориентированного языка программирования). ВВС США финансировали развитие GNAT компилятора для языка Ада, чтобы помочь ему стать стандартом разработки программного обеспечения для военных целей.

2.2.9 Паскаль (язык программирования)

Материал из свободной русской энциклопедии «Традиция»

Паска́ль (англ. Pascal) — язык программирования общего назначения.

Был создан Никлаусом Виртом в 1970, после его участия в работе комитета разработки стандарта языка Алгол, как язык для обучения процедурному программированию. Название языку дано в честь выдающегося французского математика, физика, литератора и философа Блеза Паскаля. Первоначально язык компилировался в байт-код, подобно языку Java.

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

2.2.10 История, назначение, характеристика Java

Java - объектно-ориентированный язык программирования высокого уровня, разработанный компанией Sun Microsystems. Дата официального выпуска - 23 мая 1995 года.

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

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

2.2.11 Описание языка програмимрования Delphi

Концепция Delphi 1 была реализована в конце 1994 года, когда вышла первая версия среды разработки. В основу этого программного продукта легли концепции объектно-ориентированного программирования (ООП) на базе языка Object Pascal и визуального подхода к построению приложений.

После выхода Delphi 1 все компьютерные издания писали об этой среде, как об «убийце Visual Basic». Появление Delphi 2 (32-разрядной) ознаменовало новую эпоху, – появился доступ к возможностям программных интерфейсов Windows NT и Windows 95. Delphi 2 стала средством разработки полноценных приложений клиент/сервер. Вскоре Delphi 3 предоставила разработчикам средства создания распределенных многоуровневых приложений и полноценный инструментарий проектирования приложений для Internet и Intranet. Появилась полноценная поддержка com – модели объектов, ставшей краеугольным камнем современного программирования. Четвертая версия Delphi позволяет полностью интегрировать ваши разработки с объектами com. Поддержка архитектуры corba (common object request broker architecture) открывает перед приложениями, созданными в delphi для платформы wintel (windows + intel), мир других операционных систем (unix, os/2, wms).

Delphi – это комбинация нескольких важнейших технологий:

– высокопроизводительный компилятор в машинный код;

– объектно-ориентированная модель компонент;

– визуальное (а, следовательно, и скоростное) построение приложений из программных прототипов;

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

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

В процессе построения приложения разработчик выбирает из палитры компонент готовые компоненты как художник, делающий крупные мазки кистью. Еще до компиляции он видит результаты своей работы – после подключения к источнику данных их можно видеть отображенными на форме, можно перемещаться по данным, представлять их в том или ином виде. В этом смысле проектирование в Delphi мало чем отличается от проектирования в интерпретирующей среде, однако после выполнения компиляции мы получаем код, который исполняется в 10-20 раз быстрее, чем то же самое, сделанное при помощи интерпретатора. Кроме того, компилятор компилятору рознь, в Delphi компиляция производится непосредственно в родной машинный код, в то время как существуют компиляторы, превращающие программу в так называемый p-код, который затем интерпретируется виртуальной p-машиной. Это не может не сказаться на фактическом быстродействии готового приложения.

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

Объекты БД в Delphi основаны на SQL и включают в себя полную мощь Borland Database Engine. В состав Delphi также включен Borland SQL LINK, поэтому доступ к СУБД Oracle, Sybase, Informix и Interbase происходит с высокой эффективностью. Кроме того, Delphi включает в себя локальный сервер Interbase для того, чтобы можно было разработать расширяемые на любые внешние sql-сервера приложения в офлайновом режиме. Разработчик в среде Delphi, проектирующий информационную систему для локальной машины (к примеру, небольшую систему учета медицинских карточек для одного компьютера), может использовать для хранения информации файлы формата .dbf (как в dbase или clipper) или .db (paradox). Если же он будет использовать локальный interbase for windows (это локальный SQL-сервер, входящий в поставку), то его приложение безо всяких изменений будет работать и в составе большой системы с архитектурой клиент-сервер.

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

История

Язык Smalltalk отличается от всех других языков, описанных в этой книге, в двух отношениях:

1. Он разрабатывался как целая система, а не как просто средство для написания программ.

2. Объектная ориентация в этом языке изначально была встроенной концепцией в противоположность языкам C++ и Ada, в которых к уже существующим механизмам была просто добавлена концепция наследования.

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

Smalltalk был разработан в начале 70-х годах Аланом Кеем в исследовательском центре Xerox PARC (Palo Alto Research Center). Целью проекта под названием Dynabook было создание целой среды для персонального компьютера. Это происходило во время расцвета деятельности Xerox PARC - тогда были разработаны персональные компьютеры Alto и Star, мышь, оконная среда (впоследствии весьма эффективно использованная Стивеном Джобсом в фирме Apple для разработки компьютеров Macintosh), значки для программ, сети Ethernet и Smalltalk.

В 1972 году Дан Ингаллс разработал первую реализацию языка, известную как Smalltalk-72. Это была первая практическая версия языка. Затем в Smalltalk были внесены некоторые изменения и общепринятым стандартом описания языка стал Smalltalk-80. Поскольку официального стандарта не существует, название Smalltalk применяется для обозначения набора нескольких достаточно близких и чрезвычайно совместимых языков.

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

Краткий обзор языка

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

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

Минимальный язык разработки. Небольшой базовый язык определяет Smalltalk. По существу, все, что можно делать в Smalltalk, - это разработать класс как подкласс других классов и к каждому из разработанных классов присоединить методы. Основные операторы Smalltalk определяют присваивание и последовательное выполнение действий. Истинная мощь языка заключается в механизме параметрических вызовов, называемых сообщениями. При помощи сообщений можно определять структуры управления, подобные нашим обычным конструкциям if и while. Smalltalk поставляется с предопределенным набором определений классов, написанных на языке Smalltalk. Когда Smalltalk устанавливается на компьютер, то создается образ пустого окружения путем включения всех этих определений. При вызове интерпретатора Smalltalk вы получаете свою собственную копию этого образа. Внутри этого образа вы строите новые классы и модифицируете существующие классы добавлением или изменением методов. Системному администратору легко построить систему Smalltalk с альтернативным набором предопределенных определений классов, так что не совсем понятно, что следует понимать под языком Smalltalk. В данной ситуации мы называем языком Smalltalk набор предопределенных классов.

Выполнение программы Smalltalk. Модель выполнения для Smalltalk основана на коммуникационной модели (communication model). Данные в Smalltalk состоят из объектов, а методы рассматриваются как сообщения, посылаемые объектам. Так, 1 + 2 означает, что сообщение "+" с параметром 2 послано целочисленному объекту 1. Метод "+" в данном случае возвращает значение 3. На первый взгляд это может показаться странным, но становится вполне естественным после небольшой практики.

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

3.1 Роль языков программирования

Изначально языки программирования разрабатывались таким образом, чтобы обеспечить наиболее эффективное выполнение программ. Компьютеры, стоившие миллионы долларов, определяли главную часть расходов, тогда как оплата работы программистов, зарабатывавших примерно $10 000 в год, составляла всего лишь малую их часть. Программа, созданная с помощью любого языка высокого уровня, должна была выполняться по крайней мере так же эффективно, как и программа, написанная на языке ассемблер, где кодирование осуществлялось вручную. Джон Бэкус, в конце 50-х гг. создавший для IBM язык FORTRAN, десятью годами позже говорил так :

«Честно говоря, у нас не было даже отдаленного представления о том, как эта штука [язык и компилятор FORTRAN] будет работать... Поскольку большинство людей в то время совершенно не верили в возможность создания подобной вещи, мы просто делали упор па оптимизацию объектной программы и времени выполнения. Считалось, что машинные коды программ, созданные транслятором, будут совершенно неэффективны и их невозможно будет использовать для большинства приложений. Мы совершенно не ожидали получить в результате систему, абсолютно независимую от конкретной машины, на которой программа в конечном счете должна выполняться. Оказалось, что это на самом деле очень ценное свойство, но поначалу мы об этом действительно не думали.

Мы никак не организовывали нашу деятельность. Каждую часть программы писали один-два человека, которые, за очень небольшим исключением, были истинными мастерами своего дела, и все вырастало в большой неразберихе... [Когда FORTRAN уже начал распространяться] мы столкнулись с тем фактом, что не все из 25 000 его инструкций правильно работают и что возникают проблемы, которые можно выявить только после длительного использования».

К середине 60-х гг. (к этому времени и относится приведенное выше высказывание), после появления языков FORTRAN, COBOL, LISP и ALGOL, Бэкус уже понимал, что программирование изменилось. Машины становились дешевле, затраты на программирование, наоборот, росли, появилась реальная необходимость переносить программы с одной машины на другую, а поддержка конечного продукта требовала значительных компьютерных ресурсов. В связи с этим поменялись требования, которым должен был удовлетворять создаваемый язык программирования. Вместо обеспечения эффективной работы скомпилированной программы на дорогом компьютере перед языками высокого уровня возникла другая задача — упростить создание корректных программ для решения задач в конкретных областях.

Технология создания компиляторов была сформирована в 60-е и 70-е гг. и развитие языковых технологий сконцентрировалось на решении специфичных задач в конкретных областях. В научном программировании в основном использовался FORTRAN, деловые приложения писались на языке COBOL, в военной сфере применялся JOVIAL, программы искусственного интеллекта писались на LISP, встроенные военные приложения использовали Ada. Как и естественные языки, языки программирования развиваются и в конце концов выходят из употребления, умирают. Так, язык ALGOL использовался в 60-е, затем его сменил Pascal, который, в свою очередь, вытесняется языками C++ , java. В области деловых приложений уменьшается роль языка COBOL, его также заменяет C++. В 60-е гг. активно применялись языки APL, PL/1 и SNOBOL4, а в 70-е — Pascal, в настоящее же время они практически исчезли. Те старые языки, которые применяются и в настоящее время, постоянно пересматриваются, чтобы соответствовать изменениям в других областях компьютерных технологий. Более новые языки, такие как C++, Java и ML, созданы на основе опыта, накопленного в процессе использования этих и сотен других более старых языков. На принципы конструирования новых языков влияют следующие факторы:

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

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

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

4. Методы реализации. Усовершенствование методов реализации отражается на выборе тех новых свойств, которые добавляются во вновь разрабатываемые языки.

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

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

В табл. 1.2 кратко описаны факторы, оказавшие наиболее важное влияние на развитие языков программирования во второй половине XX столетия.

Таблица 1.2. Факторы, повлиявшие на развитие языков программирования

Годы

Факторы и новые технологии

1951-1955

Аппаратная часть: компьютеры на электронных лампах; память с ртутной линией задержки.

Методы: языки ассемблера; основные концепции; подпрограммы; структуры данных.

Языки: экспериментальное использование компиляторов выражений

1956-1960

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

Методы: ранние технологии компилирования; НФБ-грамматики; оптимизация кода; интерпретаторы; методы динамического распределения памяти и обработка списков.

Языки: FORTRAN, ALGOL 58, ALGOL 60, LISP

1961-1965

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

Методы: мультипрограммные операционные системы; синтаксические компиляторы.

Языки: COBOL, ALGOL 60 (новая версия), SNOBOL, JOVIAL

1966-1970

Аппаратная часть: увеличение размера и быстродействия при уменьшении стоимости; микропрограммирование; интегральные схемы.

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

Языки: APL, FORTRAN 66, COBOL 65, ALGOL 68, SNOBOL4, BASIC, PL/1, SIMULA 67, ALGOL-W

3.2 Области применения

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

Приложения 60-х

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

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

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

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

Системная область. Для создания операционных систем и реализации компиляторов в то время не существовало эффективного языка. Такие приложения должны были иметь доступ ко всем функциональным возможностям и ресурсам аппаратной части компьютера. Для достижения максимальной эффективности часто выбирался язык ассемблер. В некоторых проектах Министерства обороны США использовался JOVIAL — разновидность языка ALGOL, кроме того, вплоть до конца 60-х для таких приложений использовались также языки типа PL/I.

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

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

Приложения XXI века

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

Приложения для обработки деловой информации. По-прежнему основным языком в этой области остается COBOL, хотя иногда используются языки С и C++. Однако сценарий оценки возможных вариантов кардинально изменился. Электронные таблицы, используемые на персональных компьютерах, полностью реформировали эту область применения. В то время как раньше программист тратил несколько месяцев на создание обычной программы делового планирования, теперь аналитик может за несколько часов составить много таких таблиц.

Языки четвертого поколения 4GL (Fourth Generation Languages) также заняли определенную нишу в этой области. Языки 4GL — это языки, специально адаптированные под конкретные области применения обработки деловой информации; как правило, они имеют средства для создания оконного интерфейса и простой доступ к записям базы данных. Также предусмотрены специальные возможности для создания форм заполнения стандартного бланка и генерирования красиво оформленных отчетов. Иногда компиляторы языков 4GL в качестве результата выдают программы на языке COBOL.

В 1996 г., когда вышло предыдущее издание этой книги, не было даже такого термина, как электронная коммерция (е-соттегсе). Это понятие, обозначающее ведение коммерческой деятельности через Интернет (продажа различных товаров через виртуальные магазины, предоставление услуг через электронные офисы), сильно изменило природу бизнес-программирования. Средства, позволяющие вести диалог пользователя (то есть покупателя) и компании (продавца) посредством Всемирной паутины, дали толчок к развитию новой роли языков программирования. Язык Java был разработан для обеспечения конфиденциальности частной жизни пользователя, а такие языки, как Perl и JavaScript позволяют продавцу получить от пользователя сведения, необходимые для проведения сделки.

Научные вычисления. Здесь по-прежнему FORTRAN не сдает своих позиций, хотя языки Java и C++ вполне успешно конкурируют с FORTRAN 90.

Системная область. В этой области доминирует язык С, созданный в конце 60-х гг., и его более новый вариант C++. Язык С обеспечивает очень эффективное выполнение программ и позволяет программисту получить полный доступ к операционной системе и аппаратной части. Кроме того, используются такие языки, как Modula и современный вариант BASIC. Хотя язык Ada и создавался для применения в этой области, он не получил здесь статуса основного языка. Программирование на языке ассемблер стало анахронизмом.

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

Искусственный интеллект. Здесь по-прежнему используется LISP, хотя на смену MIT LISP 1.5 начала 60-х пришли современные версии Scheme и Common LISP. Также развился Prolog. Оба языка признаны наиболее подходящими для задач поиска оптимального решения.

Издательская деятельность. Издательская деятельность является относи тельно новой областью применения языков программирования. Системы обработки текстов имеют свой собственный синтаксис входных команд и выходных файлов. Эта книга была написана с помощью системы обработки текстов ТЕХ. Можно сказать (за недостатком более подходящего термина), что главы компилировались по мере написания, то есть в них вставлялись ссылки на рисунки и таблицы, размещались сами рисунки и текст разбивался на абзацы. Транслятор ТЕХ создает программу на языке описания страниц Postscript. Хотя Postscript, как правило, является выходным форматом текстового процессора, у него есть собственный синтаксис и семантика, и текст может быть откомпилирован подходящим процессором. Обычно документы печатаются на лазерном принтере. Некоторые настаивают на программировании непосредственно в Postscript, но на сегодняшний день это выглядит так же глупо, как и программирование на языке ассемблер в начале 60-х (см. раздел 12.1).

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

В системе UNIX командный язык пользователя называется командным интерпретатором, или оболочкой shell, а программы называются сценариями shell. Эти сценарии активизируются при условии выполнения некоторых допустимых условий. Кроме того, появилось множество других языков сценариев (например, для тех же целей можно использовать Perl или TCL).

Новые парадигмы программирования. Постоянно появляются и изучаются новые модели приложений. В области исследования теории типов в языках программирования используется язык ML. Хотя промышленное применение этого языка не слишком значительно, его популярность постоянно растет. Другой важный язык — Smalltalk. Хотя он также не получил широкого использования в коммерческой области, он оказал глубокое воздействие на идеологию языков. Многие из объектно-ориентированных свойств языков C++ и Ada заимствованы из Smalltalk.

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

3.3. Какой язык следует считать хорошим?

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

Некоторые причины успеха или неуспеха языка могут быть внешними по отношению к самому языку. Так, использование языков COBOL или Ada в Соединенных Штатах для разработки приложений в некоторых предметных областях было регламентировано указом правительства. Аналогично часть успеха языка FORTRAN можно отнести к его большой поддержке различными производителями вычислительной техники, которые тратили много усилий на его изящные реализации и подробные описания. Часть успеха SNOBOL4 в 70-е гг. можно приписать превосходному описанию этого языка, сделанному Грисволдом [46]. Широкое распространение таких языков, как LISP и Pascal объясняется как их использованием в качестве объектов теоретического изучения студентами, специализировав38 Глава 1. Проблемы разработки языка

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

Свойства хорошего языка

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

1. Ясность, простота и единообразие понятий языка. Язык программирования обеспечивает как систему понятий для обдумывания алгоритмов, так и средства выражения этих алгоритмов. Язык должен стать помощником программиста задолго до стадии реального кодирования. Он должен предоставить ясный, простой и единообразный набор понятий, которые могут быть использованы в качестве базисных элементов при разработке алгоритма. С этой целью желательно иметь минимальное количество различных понятий с как можно более простыми и систематизированными правилами их комбинирования. Это свойство мы называем концепту алы юй целостностью. Синтаксис языка влияет на удобство и простоту написания и тестирования программы, а в дальнейшем способствует ее пониманию и модификации. Центральным моментом здесь является удобочитаемость программы. Слишком лаконичный синтаксис может оказаться удобным при написании программ (особенно для опытного программиста), однако, когда такую программу нужно модифицировать, в ней оказывается нелегко разобраться. Программы на APL обычно настолько непонятны, что даже их разработчики спустя несколько месяцев после завершения работы затрудняются их расшифровать. Многие языки содержат такие синтаксические конструкции, которые сами подталкивают к неправильному восприятию программ, поскольку два почти одинаковых оператора на самом деле имеют кардинально различные значения. Например, появление пробела в операторе языка SNOBOL4 может полностью изменить его смысл. Хороший язык характеризуется тем, что конструкции, обозначающие различные понятия, должны и выглядеть совершенно по-разному, то есть семантические отличия должны отражаться в синтаксисе.

2. Ортогональность. Термин «ортогональность» означает, что любые возможные комбинации различных языковых конструкций будут осмысленными. Например, предположим, что язык позволяет задать выражение, которое вычисляет численное значение, а также задать условный оператор, в котором вычисляется выражение, с единственной целью — получить булево значение истина или ложь. Эти две языковые конструкции (выражение и условный оператор) ортогональны, если любое выражение можно использовать (и вычислять) внутри условного оператора.

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

3. Естественность для приложений. Язык должен иметь такой синтаксис, который при правильном использовании позволяет отражать в самой структуре программы лежащие в основе реализуемого ею алгоритма логические структуры. В идеале должна существовать возможность прямого перевода эскиза такой программы в подходящие программные операторы, отражающие структуру алгоритма. Последовательный, параллельный, логический и другие алгоритмы имеют различные естественные структуры, которые представлены в программах, написанных на языках, предназначенных для реализации этих алгоритмов. Язык должен предоставлять соответствующие решаемой задаче структуры данных, операции, структуры управления и естественный синтаксис. Одной из важнейших причин распространения того или иного языка является его естественность. Язык, соответствующий определенному классу приложений, может сильно облегчить создание отдельных программ в этой области. В качестве примера языков с очевидной направленностью на решение конкретных классов задач можно привести Prolog с уклоном в сторону дедукции и C++, предназначенный для объектно-ориентированных разработок.

4. Поддержка абстракций. Даже в наиболее естественном для данной предметной области языке программирования остается некоторый существенный пробел. Это пробел между абстрактными структурами данных и операциями, которые характеризуют решение задачи, и конкретными базовыми структурами данных и операциями, встроенными в язык. Например, язык С вполне может подойти для составления расписания занятий в университете, хотя в нем напрямую не существует естественных для этого приложения абстрактных структур данных, таких как студент, курс лекций, преподаватель, аудитория, и таких абстрактных операций, как определить студента в группу и назначить аудиторию для группы. Важной частью работы программиста является разработка конкретных абстракций для решения задачи и их последующая реализация с использованием базовых возможностей реального языка программирования. В идеале, язык должен позволять определять структуры данных, типы данных и операции и поддерживать их как самодостаточные абстракции. В этом случае программист сможет использовать их в других частях программы, зная только их абстрактные свойства и не вникая в их фактическую реализацию. Как Ada, так и C++ были разработаны именно по причине отсутствия этой возможности в более ранних языках, таких как Pascal и С соответственно.

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

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

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

7. Переносимость программ. Одним из важных критериев для многих программных проектов является переносимость разработанных программ с компьютера, на котором они были написаны, на другие компьютерные системы. Удобным средством создания переносимых программ являются широкодоступные языки, определение которых не зависит от возможностей различных машин. Такие языки, как Ada, FORTRAN, С и Pascal имеют стандартные определения, позволяющие реализовывать переносимые приложения. Другие языки (например, ML) происходят от единственной централизованной реализации (single-source implementation), позволяя разработчику языка осуществлять некоторый контроль над свойствами, определяющими его переносимость.

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

Стоимость выполнения программы. На заре компьютерных вычислений стоимость связывалась в основном только с выполнением программы. Большое значение имели исследования по разработке оптимизирующих компиляторов, эффективного использования регистров и механизмов эффективного выполнения программ. Хотя стоимость выполнения программы учитывается и в процессе разработки языка, но в первую очередь она важна для больших производственных программ, которые многократно выполняются. Однако на сегодняшний день для большинства приложений вопрос скорости выполнения не является первостепенным. Если речь идет об улучшении диагностики или упрощении контроля в процессе разработки и сопровождения программы, то при использовании настольных компьютеров, выполняющих много миллионов операций в секунду и большую часть времени находящихся в режиме ожидания, увеличение времени выполнения на 10 или 20 % является допустимым.

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

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

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

Синтаксис и семантика

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

int V[10]:

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

V: аггау[0..9] of integer;

Как видно, их синтаксис сильно различается, хотя во время выполнения программы создаются одинаковые объекты данных. Чтобы понять смысл этих объявлений, необходимо знать семантику объявлений массивов в языках С и Pascal. То есть вы должны знать, что если поместить подобное объявление в начало подпрограммы, то при каждом ее вызове будет создаваться вектор, содержащий указанное число элементов, а по завершении программы он будет уничтожаться. Во время выполнения подпрограммы на вектор можно ссылаться по имени V. В обоих примерах элементами вектора V будут Vc...... V9.Однако, если вы объявляете объект V как список в языке LISP, необходимо знать, что размер его может быть произвольным и определяется непосредственно в момент создания. Более того, объект может быть создан в любой момент во время выполнения программы и на первый элемент можно ссылаться одним из следующих способов: (car V) или (head V). В руководствах по языкам программирования и в справочниках принято строить описание языка на основе его синтаксических конструкций. Как правило, сначала приводится синтаксис некоторой языковой конструкции, например конкретного оператора или объявления, а затем поясняется семантика этой конструкции, то есть описывается ее смысл. В главе 3 приведена система обозначений НФБ, которая является в настоящее время основной системой обозначений, используемой для описания синтаксиса языка программирования.

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

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

3.4 Структура программы на языке высокого уровня

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

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

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

• раздела оборудования (среда) — описания типа ЭВМ, процессора, требований к оперативной и внешней памяти, существенных с точки зрения выполнимости программы;

• раздела данных — идентификации (декларация, объявление, описание) переменных, используемых в программе, и их типов. Понятие типа позволяет осуществлять проверку данных на совместимость в операциях еще на этапе трансляции программы и отвергнуть недопустимые преобразования;

• раздела процедур — собственно программной части, содержащей описание процессов обработки данных. Элементами процедуры являются операторы и стандартные функции, входящие в состав соответствующего языка программирования. Необходимо отметить, что конкретные ЯП могут не требовать наличия всех вышеперечисленных разделов исходного модуля. В некоторых случаях описания переменных могут размещаться произвольно в тексте или опускаться, при этом тип переменной определяется компилятором, исходя из системы умолчаний; есть средства программирования, в которых тип переменной задается в момент присвоения ей значения другой переменной или константы и т. д. Существуют фрагменты описания данных, которые могут быть отнесены как к разделу данных, так и к разделу оборудования (указания на устройство, длину и формат записи, организацию файла и т. п.). Так, например, программа на языке Pascal представляет собой последовательность заголовка, раздела объявлений и тела программы. Структурная схема программы на языке Pascal .Следует отметить, что в современных реализациях языка (Turbo Pascal, Object Pascal) заголовок программы необязателен и не обрабатывается компилятором; порядок размещения разделов объявлений произвольный (в отличие от стандарта, где этот порядок строго фиксирован); в программе может бытьуказано несколько одинаковых разделов объявлений и существует раздел объявления используемых модулей (в стандарте языка этот раздел отсутствовал).

Заключение

Языки программирования находятся в зачаточном состоянии . Нам еще надо потратить не мало времени что бы разработать язык понятный каждому . Легкого и простого в обращении . Развитие языков постепенно движется в этом направлении но еще не мало времени пройдет что бы язык программирования был доступен новичку и максимально приближенный к обычному языку.

Список литературы

Голицына О. JL, Попов И. И.

Г60 Программирование на языках высокого уровня : учебное пособие

/ О. JI. Голицына, И. И. Попов. — М. : ФОРУМ , 2010. — 496 с. : ил. — (Профессиональное образование) , URL: http://dfiles.ru/files/kvhmyq9ge

Вонг, Уоллес.

Основы программирования для "чайников".: Пер. с англ. — М.: Издательский дом "Вильяме", 2002. — 336 с, http://padabum.com/x.php?id=2067

Голицына О.Л., Попов И.И.

Г 60 Основы алгоритмизации и программирования: учеб, пособие. — 3-е изд., испр. и доп. — М: ФОРУМ, 2008. — 432 с. URL: http://www.e-reading.by/download.php?book=135638

Пратт Т., Зелковиц М. Языки программирования: разработка и реализация / Под общей ред. А. Матросова. — СПб.: Питер, 2002. — 688 с. URL:

http://www.proklondike.com/var/file/pratt_zelkovic_programming_2002.zip

http://www.progaprosto.ru/doc/yazyk_programmirovaniya_cobol.php

http://www.progaprosto.ru/doc/yazyk_programmirovaniya_algol.php

http://www.progaprosto.ru/doc/yazyk_programmirovaniya_ada.php

http://www.progaprosto.ru/doc/yazyk_programmirovaniya_fortran.php

http://www.progaprosto.ru/doc/yazyk_programmirovaniya_prolog.php

http://www.progaprosto.ru/doc/yazyk_programmirovaniya_lisp.php

http://life-prog.ru/

http://www.maksakov-sa.ru/TeorDelphi/OpisanieDelphi/index.html

http://informat444.narod.ru/museum/lanr/smalltalk.htm

http://softcreate.narod.ru/java.html

http://traditio.wiki/Паскаль_(язык_программирования)

http://www.tp7.info/about_pascal_1.php