четверг, 26 декабря 2013 г.

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

Языки программирования
В настоящее время в мире существует несколько сотен реально используемых языков программирования. Для каждого есть своя область применения.
По этому критерию можно выделить следующие уровни языков программирования:
Машинные языки и машинно-ориентированные языки это языки низкого уровня, требующие указания мелких деталей процесса обработки данных. Языки же высокого уровня имитируют естественные языки, используя некоторые слова разговорного языка и общепринятые математические символы. Эти языки более удобны для человека.
Языки высокого уровня делятся на:
  • процедурные (алгоритмические) (Basic, Pascal, C и др.), которые предназначены для однозначного описания алгоритмов; для решения задачи процедурные языки требуют в той или иной форме явно записать процедуру ее решения;
  • логические (Prolog, Lisp и др.), которые ориентированы не на разработку алгоритма решения задачи, а на систематическое и формализованное описание задачи с тем, чтобы решение следовало из составленного описания;
  • объектно-ориентированные (Object Pascal, C++, Java и др.), в основе которых лежит понятие объекта, сочетающего в себе данные и действия над нами. Программа на объектно-ориентированном языке, решая некоторую задачу, по сути описывает часть мира, относящуюся к этой задаче. Описание действительности в форме системы взаимодействующих объектов естественнее, чем в форме взаимодействующих процедур.

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

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

С
развитием аппаратного обеспечения компьютеров, увеличивалась скорость обработки и емкость памяти. Это привело к изменениям в языках программированияони стали проще и понятнее для людей. Языки программирования в своем развитии прошли практически те же стадии, что и сами компьютеры (см. Поколения компьютеров в Гл. 1). Диаграмма на Рис. 2.6 показывает, как происходило развитие языков программирования вместе с поколениями компьютеров за последние 50 лет. Основная тенденцияувеличение простоты взаимодействия пользователя с аппаратным и программным обеспечением компьютеров.
Рис. 2.6 Поколения языков программирования.
Машинные коды были языком программирования первого поколения. Второе поколение ознаменовалось появлением в начале 50х годов языка программирования Ассемблера (assembly language). Вместо одних только нулей и единиц, программисты теперь могли пользоваться операторами, которые были похожи на слова английского языка. Компилятор преобразовывал эти выражения в машинные коды.
Вместе
с появлением компьютеров третьего поколения, развитие языков программирования также вступило в новую фазу. Период с середины 50-х до 70-х годов отмечен появлением первых языков программирования высокого уровня (high-level languages). Эти языки впервые позволили ученым (прежде всего, математикам) работать с компьютерами. Язык программирования FORTRAN позволял довольно легко определять переменные и использовать для вычислений математические выражения. Для языков высокого уровня, таких как FORTRAN и COBOL, понадобились более быстрые, высокоэффективные компиляторы, поскольку при преобразовании исходного кода, выходные программы получались большими.
Четвертое
поколение языков программирования зародилось в конце 70-х, а развитие их продолжается по сей день. Эти языки существенно уменьшили время разработки ПО и позволили выполнять эту работу даже людям без технического образования, и не прибегая к помощи профессиональных программистов. Сегодня для выполнения многих задач программирование как таковое вообще не требуется. Например, появление приложений электронных таблиц (spreadsheets), таких как Microsoft Excel, позволяет обычным пользователям обрабатывать финансовую информацию и управлять большими массивами данных. В 60-х и 70-х годах так просто, без применения языков программирования, использовать возможности компьютеров было невозможно.
Популярные языки программирования
Большинству менеджеров не нужно быть профессиональными программистами, но они должны понимать, как происходила эволюция программного обеспечения, чтобы выбрать верную платформу для создания информационной системы организации. Здесь мы коротко опишем наиболее популярные языки программирования высокого уровня.
Ассемблер
Многие программисты продолжают использовать Ассемблер, так как этот язык программирования дает им полный контроль над аппаратным обеспечением компьютера и генерирует очень эффективный исполняемый код. Как и машинные коды, Ассемблер (см. Рис. 2.7) разрабатывается под определенные типы компьютеров и микропроцессоров. Несмотря на описанные преимущества, программирование на этом языке требует больших затрат времени, он труден для изучения и понимания; программы, написанные на Ассемблере трудно отлаживать. Ассемблер сегодня используется в основном для написания системного ПО.
FORTRAN
FORTRANFORmula TRANslator (Рис. 2.8) был спроектирован в 1956 году в основном для инженеров, математиков и ученых, которые имеют в основном дело с формулами и проблемами, ориентированными на вычисления. На FORTRANе можно довольно просто описывать сложные вычисления, манипулировать массивами и распечатывать выходные множества чисел. Хотя на этом языке было написано немало бизнес-приложений, он не очень подходит для частых операций ввода-вывода и работы со списками. FORTRAN сравнительно легко осваивается, но его синтаксис очень требователен к точности ввода операторов, что вызывает частые ошибки и делает сложной отладку программ.
COBOL
COBOLCommon Business-Oriented Language (Рис 2.9)общий язык для приложений, ориентированных на бизнес и коммерцию. COBOL был разработан в начале 60-х годов, для того чтобы было легче писать программы для бизнеса, которые могли использоваться в таких видах деятельности как обработка заказов, ведение бухгалтерии, планирование производства и т.д. Данные, которыми оперирует COBOLэто, прежде всего, записи, файлы, таблицы и списки. Программы, написанные на языке COBOL, относительно понятны даже неспециалистам.
COBOL и FORTRAN были первыми языками, которые действительно сделали программирование доступным для обычных людей. Машинные коды и ассемблер были слишком тяжелыми для изучения и трудными в использовании для любой степени применения.
Десятки
тысяч студентов университетов в 60-х и начале 70-х годов впервые получили FORTRAN для обучения разработке простых программ. Пришло это через вводный курс по информатике либо как часть инженерного или математического учебного плана, но, обучившись языку FORTRAN, они познакомились с истинным значением слова компьютер. Позже большинство из них поняли, что огромный компьютерный мир постоянно меняется, но FORTRAN все еще нужен им для написания программ, которые решают их производственные проблемы. Даже сегодня в научном и инженерном сообществе язык FORTRAN еще достаточно распространен и превалирует над многими языками.
BASIC
BASIC (Beginners All-purpose Symbolic Instruction Code) был создан в 1964 году для обучения студентов колледжей использованию компьютеров. Вероятно, сегодня BASICодин из самых используемых языков программирования. Это простой язык, который недавно подошел к такому уровню развития, при котором его можно использовать даже для построения больших систем высокой производительности. Слабая сторона BASICато что он выполняет все задачи одинаково, без оптимизации кода. Хотя BASIC прост и привлекателен, ему очень не хватает формальной структуры, которая делает язык, подобный C и C++, более подходящим для больших проектов.
Pascal
Названный в честь Блеза Паскаля, французского математика и философа, язык программирования Pascal был разработан швейцарским профессором компьютерных наук Никлаусом Виртом в конце 60-х. Программирование на Pascal стало весьма популярным на платформе микрокомпьютеров, в основном благодаря тому, что в сочетании с высокоэффективным выходным кодом, генерируемым компилятором этого языка, программы, написанные на нем занимают немного места в памяти. Благодаря наличию возможностей обработки сложных массивов данных и набору простых, но мощных команд, Pascal применяют в основном для обучения будущих профессионалов навыкам программирования. Для начинающих Pascal слишком сложен, а профессионалы для разработки сложных приложений предпочитают C.
C и C++
Язык С (читается "си") был разработан в начале 70-х в AT&T Bell Labs. На сегодня эти языки являются фактически единственным выбором для построения операционных систем и сложных приложений, таких как электронные таблицы, компиляторы, сетевые утилиты, коммерческие приложения и проч. Операционные системы UNIX, Linux и Windows большей частью написаны на C, даже компилятор C написан на C. Эти мощные и сложные языки генерируют быстрый и эффективный код. Работать на C можно на любых компьютерахот микроЭВМ до мэйнфреймов. Программист, владеющий С, имеет полный контроль над средой разработки и может заставить компьютер делать практически все, что ему нужно. С сильно потеснил COBOL в приложениях для бизнеса, но основная область его применениякоммерческие пакеты прикладных программ для микрокомпьютеровсерверов, рабочих станций и ПК. Как и ожидалось, эти языки очень сложны, и для того, чтобы овладеть навыками программирования на С, одного желания малонужен талант, как и в случае работы с Ассемблером и машинными кодами.
В компьютерном мире было, по крайней мере, две неудавшиеся попытки разработать и внедрить некий универсальный язык. Первая, в середине 60-х, ознаменовалась изобретением IBM языка, названного PL/1. Не так давно Министерство обороны США постановило разработать язык, который должен был затем получить статус стандарта. Это усилие было не более успешным, чем попытка IBM продвинуть PL/1, заменяющий сотни языков программирования, широко используемых во всём мире.
PL/1
PL/1 (Programming Language 1) был разработан компанией IBM в 1964 году. Это очень мощный, но и очень сложный многоцелевой язык программирования. Он пригоден для проектирования как научных, так и бизнес-приложений и даже операционных систем (огромная операционная система MULTICS была написана на PL/1). IBM, бывшая в то время безоговорочным лидером в мире компьютеров, провозгласила, что PL/1 стратегически необходим всем компаниям. Однако, попытка создать универсальный язык провалиласьпрограммисты не желали переучиваться с COBOLа и FORTRANа на абсолютно новый язык, а коммерческие компании не хотели тратить миллионы долларов на перепроектирование своих приложений, написанных на COBOLе и FORTRANе.
Ada
Другую попытку создать компьютерный эсперанто предприняло в 1980 году Министерство обороны США. Отдав привилегию разрабатывать язык, названный ADA, международному сообществу, правительство начало обсуждать заключение контрактов на его использование. Язык предполагалось использовать прежде всего для разработки программного обеспечения систем вооружений. Предполагалось, что он будет одинаково эффективен для различных аппаратных платформ. Специалисты, работавшие в правительстве США, надеялись, что именно ADA станет удачной заменой языкам программирования, применявшихся в бизнесе. Но этого не случилось по тем же причинам, что и с PL/1природа языка ADA весьма сложная. Несмотря на привлекательность в некоторых нюансах, в решении других проблем ADA сильно ограничен.
В 1984 г. началось повальное увлечение системами искусственного интеллекта (ИИ). Считалось, что спустя несколько лет, специалисты компьютерной сферы наконец-то научат компьютеры обучаться самостоятельно. Встраивая ИИ в приложения, можно будет в конце концов избавиться от программирования как такового. Программные средства будут самостоятельно адаптироваться к потребностям пользователей, а фирмы работать с системами, создавшими сами себя. Сегодня в это верится с трудом. В течение последующих пяти лет интерес к ИИ начал постепенно угасать. Тем не менее, именно в этой сфере нашли применение языки Prolog и LISP.
LISP и Prolog
LISP был создан в конце 50-х годов математиком Джоном Маккарти (John McCarthy), который ориентировал этот язык на формирование из вводимых символов, которые в свою очередь являлись операторами, переменными и значениями данных, значащих списков. LISP больше подходит для манипулирования такими списками, чем для решения громоздких числовых задач. Prolog, разработанный в 1970 году, также подходил для этих целей. Отличается же Prolog от LISP в основном тем, что с первым можно работать на обычных компьютерах, а второй работает лучше на машинах, специально созданных для работы с LISP.
СРЕДСТВА РАЗРАБОТКИ четвертого поколения
К языкам четвертого поколения относятся программные инструменты, которые позволяют пользователям разрабатывать программы, обладая минимальными техническими навыками, а также новые средства разработки, которые повышают производительность труда программистов. Языки четвертого поколения постепенно становятся менее процедурными или даже непроцедурными в сравнении с обычными языками программирования. Процедурный язык требует описания последовательных шагов, или процедур, которые "говорят" компьютеру, что нужно сделать и каким образом это должно быть сделано. Непроцедурные языки требуют от пользователя только указания, что надо сделать, без подробного описания, как это должно быть выполнено. Таким образом, с помощью непроцедурного языка можно выполнить некоторую задачу, описав меньшее число шагов, чем при решении той же задачи, пользуясь процедурным языком.
Существует
семь категорий языков четвертого поколения: языки запросов, генераторы отчетов, графические языки, языки программирования очень высокого уровня, пакеты прикладных программ, а также некоторые виды программ для персональных компьютеров. На Рис. 2.10 показана схема этих приложений и даны примеры некоторых известных программ каждой из категорий.
Рис. 2.10 Языки четвертого поколения.
Некоторые из средств разработки четвертого поколения по-прежнему ориентированы на профессиональных программистов, но большинство предназначено для обычных пользователей.
Языки запросов
Языки запросов (query languages) являются языками высокого уровня, которые предназначены для извлечения информации из баз данных. Обычно эти языки интерактивны, работают в реальном режиме времени и способны формировать запросы к нестандартизированным данным. Часто они бывают тесно связанными с системами управления базами данных и некоторыми другими программами для ПК. С помощью языка запросов можно выполнять поиск необходимой информации в базе данных, используя простые или сложные критерии отбора, с последующим выводом результатов поиска на экран монитора или печатающее устройство. Языки запросов имеют различные синтаксис и структуру, некоторые из них поддерживают не только поиск информации, но и динамическое обновление данных. Пример обычного пользовательского запроса, выполненный с помощью двух различных языков запросов, Query-by-Example и FOCUS, вы можете видеть на Рис. 2.11.
Рис. 2.11 Языки запросов.
Пример
выполнения запроса "Вывести список всех работников отдела продаж" в двух языках запросов, Query-by-Example и FOCUS.
Генераторы отчетов
Генераторы отчетов (report generators)это программные инструменты для создания пользовательских отчетов. Генераторы отчетов способны извлекать информацию из отдельных файлов или баз данных и создавать на основе этой информации отчеты различных видов. Как правило, эти инструменты дают большую свободу в оформлении информации, чем языки запросов. Некоторые мощные генераторы отчетов позволяют произвести над данными различные вычисления, например, вычислить итоговую сумму или среднее значение. Большинство генераторов отчетов сегодня входят в системы управления базами данных. 
Графические языки
Графические языки (graphical languages) позволяют извлекать данные из файлов и баз данных и отображать найденную информацию в графическом виде помощью графиков и диаграмм). Большинство подобных инструментов могут выполнять над данными арифметические и логические операции. Примерами популярных графических языков могут служить SAS, Harvard Graphics и Lotus Freelance Graphics. 
Генераторы приложений
Генераторы приложений (application generators) содержат запрограммированные модули кода, которые могут генерировать целые приложения, существенно ускоряя обработку. Пользователь может указать, что он хочет получить, и генератор приложений создаст соответствующий программный код для ввода, проверки, обновления, обработки и вывода данных. Большинство полнофункциональных генераторов приложений содержат полный интегрированный набор инструментов разработки: систему управления базами данных, словарь данных, язык запросов, генератор графики, генератор отчетов, инструменты поддержки и моделирования принятия решений, средства защиты, а также язык программирования высокого уровня. Для особых ситуаций, когда требуемый код не может быть получен с помощью имеющихся модулей разработки, во многих генераторах приложений предусмотрены пользовательские выходы (user exits), куда можно вставлять программный код, написанный пользователем.
Языки программирования очень высокого уровня
Языки программирования очень высокого уровня (very high-level programming languages) служат для генерирования программного кода с меньшим количеством инструкций, чем у обычных языков, таких как FORTRAN или COBOL. Программы, разрабатываемые с применением языков очень высокого уровня, могут созданы в более короткие сроки. Хотя некоторые возможности этих языков могут быть использованы обычными пользователями, они все же создавались для повышения производительности труда профессиональных программистов. Окно Организаций показывает, как Канадская телефонная компания использовала один из таких языков, Magic, для решения некоторых задач.

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

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

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

Что делает объектно-ориентированное программирование отличным от традиционного?

В объектно-ориентированном программировании (object-oriented programming) данные и предназначенные для их обработки процедуры соединяются в один объект (object). Объект, таким образом, представляет собой комбинацию данных и программного кода. Вместо передачи данных процедурам, программа посылает объекту сообщение (message) выполнить процедуру, уже встроенную в него. объектно-ориентированных языках программирования процедуры называются методами [methods]). То же сообщение может быть послано множеству других объектов, но каждый объект будет обрабатывать сообщение отлично от другого.
Например,
объектно-ориентированное финансовое приложение может содержать объекты "Заказчик", которые отсылают сообщения объектам "Счет". Объекты "Счет", в свою очередь, могут содержать объекты "Наличные деньги", "Счета к оплате", "Оплаченные счета".

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

Язык Java и революция в программном обеспечении

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

Технология Java


Javaэто объектно-ориентированный язык программирования, комбинирующий данные и определенные функции обработки этих данных. Java сконструирован таким образом, что программист может создавать апплеты (applets)крохотные Java-программки, каждая из которых выполняет одну небольшую функцию. К примеру, чтобы изменить данные о подчиненных какого-либо работника, вместо запуска целой персональной информационной системы, вы можете запустить только маленький апплет для выполнения именно этой операции. Теперь, если допустить, что ваша информационная система написана на Java и находится на сервере локальной сети вашей организации, а не на вашем ПК, все, что потребуется вашей программезапросить у системы на сервере необходимые данные. Будут получены только те данные, которые вам необходимы. Когда вы закончите обработку, вы сохраните результаты работы на сервере, а ненужная уже информация автоматически исчезнет с вашего ПК. Заметьте, что такая система не потребует от пользователя забот, связанных с приобретением ПО, его установкой, настройкой, обновлением и аппаратной несовместимостью. Технология Java позволяет хранить все программное обеспечение в сети, загружать его на ПК при необходимости, а затем удалять с этого ПК, когда обработка закончена.
Язык
Java был специально разработан для использования в Интернет, но он также может быть использован в качестве основного языка программирования для разработки корпоративных приложений. Любой компьютер, удовлетворяющий стандартам работы в Интернет, может соединиться через локальную или глобальную сеть с другим компьютером, подключенным к Интернет. Причем неважно, принадлежат эти компьютеры к одной или разным платформам. Таким образом, Javaэто кросс-платформенная технология, позволяющая выполнять Java-программы на различных компьютерных системах, независимо от того, какие микропроцессоры или операционные системы эти компьютеры используют.
Поскольку
Java является технологией, ориентированной на использование в сетях, разработчики Sun уделили много внимания проблеме обеспечения безопасности. Однако, это не спасает пользователей от проблемуже существуют Java-вирусы, очень опасные именно потому, что появляются и выполняются они на компьютере незаметно для пользователя, ну и конечно, как и положено Java-программам, ничего после себя не оставляютни программ, ни данных, ни самих себя. К недостаткам Java можно также отнести большую сложность в освоении этой технологии. Создатели Java сами не заметили, как их язык программирования постепенно по сложности приблизился к C, так что пока Java остается языком не для пользователей, а для профессионалов