Виды и Языки Программирования

Федеральное агентство по образованию РФ

Нижегородский Государственный  Университет им. Н. И. Лобачевского

Финансовый факультет

Дневное отделение

Специальность: «Налоги и  Налогообложение»

 

 

 

Курсовая работа

по дисциплине Информатика

на тему: «Виды и Языки  Программирования»

 

 

 

Выполнила:

студентка гр. 13102

Кулешова Анастасия Валерьевна

 

Руководитель:

Назарова Евгения Вадимовна

 

 

 

Нижний Новгород

2010

 

Содержание.

 

Введение. 3

1.История  развития программирования. 4

2.Понятие  программирования и его виды. 7

2.1 Процедурное  программирование. 8

2.2 Автоматное  программирование. 9

2.3 Аспектно-ориентированное  программирование. 11

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

2.5 Компонентно-ориентированное  программирование. 16

2.6 Логическое  программирование. 17

2.7 Структурное  программирование. 18

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

3.1 Определение  языка программирования. 21

3.2 Используемые  символы. 23

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

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

3.4.1 Pascal. 27

3.5 Язык программирования  сверхвысокого уровня. 34

3.6 Сравнительный  анализ языков программирования. 35

Заключение. 37

Литература. 38

 

 

Введение.

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

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

Вот я и постараюсь раскрыть в своей работе понятия видов  и языков программирования и некоторые  их особенности.

 

1.История развития программирования.

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

Первыми "инструментами", которые экономили труд программистов, стали подпрограммы. В августе 1944 года для релейной машины "Марк-I" под руководством Грейс Хоппер (женщина-программист, морской офицер ВМФ США) была написана первая подпрограмма для вычисления sinx.

Не одну Грейс Хоппер волновала  проблема облегчения труда программистов. В 1949 году Джон Моучли (один из создателей ЭВМ ENIAC) разработал систему Short Code, которую  можно считать предшественницей языков программирования высокого уровня. Программист записывал решаемую задачу в виде математических формул, преобразовывал формулы в двухбуквенные  коды. В дальнейшем специальная программа  переводила эти коды в двоичный машинный код. Таким образом, Дж. Моучли разработал один из первых примитивных интерпретаторов. А в 1951 году Г. Хоппер создала первый компилятор А-0. Ею же впервые был  введен этот термин.

В 50-е годы прошлого века группа под руководством Г. Хоппер приступила к разработке нового языка и компилятора  В-0. Новый язык позволил бы программировать  на языке, близком к обычному английскому. Разработчики языка выбрали около 30 английских слов, для распознавания  которых Г. Хоппер придумала способ, сохранившийся в операторах будущих  языков программирования: каждое слово  содержит неповторимую комбинацию из первой и третьей букв. Благодаря  этому компилятор при создании машинного  кода программы может игнорировать все остальные буквы в слове.

Необходимость появления  такой системы, язык которой приближен  к разговорному, Г. Хоппер связывала  с тем, что область применения ЭВМ будут расширяться, в связи  с чем будет расти и круг пользователей.

В 1958 году система В-0 получила название FLOW-MATIC и была ориентирована  на обработку коммерческих данных. В 1959 году был разработан язык COBOL (Common Business Oriented Language) (Кобол)- машинно-независимый язык программирования высокого уровня для решения задач бизнеса. Одна и та же программа, написанная на машинно-независимом языке, может быть выполнена на ЭВМ разных типов, оснащенных соответствующим транслятором с этого языка. Консультантом при создании языка COBOL вновь выступила Г. Хоппер.

В 1954 году публикуется сообщение  о создании языка FORTRAN (FORmula TRANslation) (Фортран). Местом рождения языка стала штаб-квартира фирмы IBM в Нью-Йорке. Одним из главных  разработчиков является Джон Бэкус. Он же стал автором НФБ (нормальная форма Бэкуса), которая используется для описания синтаксиса многих языков программирования. В тот же период в европейских странах и в СССР популярным становится язык ALGOL. Как и FORTRAN, он ориентировался на математические задачи. В нем была реализована передовая для того времени технология программирования - структурное программирование.

Большое количество новых  языков стало появляться в 60-е, 70-е  годы прошлого столетия, но не все из них выдержали испытание временем. К языкам-долгожителям следует отнести  язык BASIC, разработанный в Дартмутском  университете в 1964 году под руководством Джона Кемени и Томаса Курца. Значительным событием в истории языков программирования стало создание в 1971 году языка PASCAL.

В 90-х годах прошлого столетия планировалось появление компьютеров  пятого поколения, называемых машинами "искусственного интеллекта". В качестве основных языков программирования в этом, пока неосуществленном, проекте предполагались языки искусственного интеллекта LISP и PROLOG.

Создателем языка LISP (1956-1959 гг.) является Джон Маккарти, которого называют отцом искусственного интеллекта. Именно он первым ввел термин "искусственный  интеллект". Основным в языке LISP является понятие рекурсивно определенных функций. Доказано, что любой алгоритм может  быть описан с помощью некоторого набора рекурсивных функций. Основные идеи этого языка были позже использованы в языке программирования для  детей LOGO, разработанном в 70-е годы в Массачусетском технологическом  институте под руководством Сэймура  Пейперта. Подмножество языка LOGO, включающее команды для Черепашки, применяется  при раннем обучении программированию.

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

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

 

2.Понятие программирования и его виды.

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

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

В узком смысле слова, программирование рассматривается как кодирование  алгоритмов на заданном языке программирования. Под программированием также  может пониматься разработка логической схемы для ПЛИС, а также процесс  записи информации в ПЗУ. В более  широком смысле программирование —  процесс создания программ, то есть разработка программного обеспечения.

Программирование  включает в себя:

  • Анализ;
  • Проектирование — разработка комплекса алгоритмов;
  • Кодирование и компиляцию — написание исходного текста программы и преобразование его в исполнимый код с помощью компилятора;
  • Тестирование и отладку — выявление и устранение ошибок в программах;
  • Испытания и сдачу программ.

Далее перечислим несколько  основных видов программирования.

2.1 Процедурное программирование.

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

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

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

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

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

  • Ada (язык общего назначения);
  • Basic (версии начиная с Quick Basic до появления Visual Basic);
  • С;
  • Fortan и другие.

2.2 Автоматное программирование.

Автоматное программирование - это парадигма программирования, при использовании которой программа или её фрагмент осмысливается как модель какого-либо формального автомата.

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

Определяющими для автоматного  программирования являются следующие особенности:

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

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

Название автоматное программирование оправдывается ещё и тем, что  стиль мышления (восприятия процесса исполнения) при программировании в  этой технике практически точно  воспроизводит стиль мышления при  составлении формальных автоматов (таких как машина Тьюринга, автомат  Маркова и др.)

Виды автоматных языков программирования:

    • Язык последовательных функциональных схем SFC (Sequential Function Chart) — графический язык программирования широко используется для программирования промышленных логических контроллеров PLC.
    • Дракон-схемы — графический язык программирования, используется для программирования в ракетно-космической технике («Буран», «Морской старт», «Тополь»). Существует бесплатный Дракон-редактор.
    • Язык Рефлекс — Си-подобный язык программирования, ориентированный на описание сложных алгоритмов управления в задачах промышленной автоматизации.

 

2.3 Аспектно-ориентированное программирование.

Аспектно-ориентированное программирование (в дальнейшем АОП) - парадигма программирования, основанная на идее разделения функциональности для улучшения разбиения программы на модули.

Методология АОП была предложена группой инженеров исследовательского центра Xerox PARC под руководством Грегора  Кичалеса (Gregor Kiczales). Ими же было разработано  аспектно-ориентированное расширение для языка Java, получившее название AspectJ — (2001 год).

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

Основные понятия  АОП:

  1. Аспект (англ. aspect) — модуль или класс, реализующий сквозную функциональность. Аспект изменяет поведение остального кода, применяя совет в точках соединения, определённых некоторым срезом.
  2. Совет (англ. advice) — средство оформления кода, который должен быть вызван из точки соединения. Совет может быть выполнен до, после или вместо точки соединения.
  3. Точка соединения (англ. join point) — точка в выполняемой программе, где следует применить совет. Многие реализации АОП позволяют использовать вызовы методов и обращения к полям объекта в качестве точек соединения.
  4. Срез (англ. pointcut) — набор точек соединения. Срез определяет, подходит ли данная точка соединения к данному совету. Самые удобные реализации АОП используют для определения срезов синтаксис основного языка (например, в AspectJ применяются Java-сигнатуры) и позволяют их повторное использование с помощью переименования и комбинирования.
  5. Внедрение (англ. introduction, введение) — изменение структуры класса и/или изменение иерархии наследования для добавления функциональности аспекта в инородный код. Обычно реализуется с помощью некоторого метаобъектного протокола (англ. metaobject protocol, MOP).

 

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

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

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

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

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

Прототип — это объект-образец, по образу и подобию которого создаются другие объекты.

 Основные понятия ООП:

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

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

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

        Сокрытие данных — неотделимая часть ООП, управляющая областями видимости. Является логическим продолжением инкапсуляции. Целью сокрытия является невозможность для пользователя узнать или испортить внутреннее состояние объекта.

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

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

 

2.5 Компонентно-ориентированное  программирование.

Компонентно-ориентированное программирование (англ. component-oriented programming) - парадигма программирования, ключевой фигурой которой является компонент.

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

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

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

  • Оберон (ограниченно)
  • Компонентный Паскаль
  • .NET Framework
  • PHP

Отличии от ООП:

  • Компонент — «независимый модуль программного кода, предназначенный для повторного использования и развертывания.»
  • Может содержать «множественные классы».
  • Как правило, независим от конкретного языка.

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

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

Самым известным языком логического  программирования является Prolog.

 

2.7 Структурное программирование.

Структурное программирование — методология разработки программного обеспечения, в основе которой лежит представление программы в виде иерархической структуры блоков. Предложена в 70-х годах XX века Э. Дейкстрой, разработана и дополнена Н. Виртом.

В соответствии с  данной методологией:

  1. Любая программа представляет собой структуру, построенную из трёх типов базовых конструкций:
  • последовательное исполнение — однократное выполнение операций в том порядке, в котором они записаны в тексте программы;
  • ветвление — однократное выполнение одной из двух или более операций, в зависимости от выполнения некоторого заданного условия;
  • цикл — многократное исполнение одной и той же операции до тех пор, пока выполняется некоторое заданное условие (условие продолжения цикла).

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

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

   3. Разработка программы  ведётся пошагово, методом «сверху вниз».

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

 

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

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

 

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

3.1 Определение языка программирования.

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

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

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

  • Язык программирования, как функция предназначен для написания компьютерных программ, которые применяются для передачи компьютеру инструкций по выполнению того или иного вычислительного процесса и организации управления отдельными устройствами.
  • Задача языка программирования отличается от естественных языков тем, что он предназначен для передачи команд и данных от человека к компьютеру, в то время, как естественные языки используются для общения людей между собой. В принципе, можно обобщить определение «языков программирования» — это способ передачи команд, приказов, чёткого руководства к действию; тогда как человеческие языки служат также для обмена информацией.
  • Язык программирования может использовать специальные конструкции для определения и манипулирования структурами данных и управления процессом вычислений.
Виды и Языки Программирования