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

Автор работы: Пользователь скрыл имя, 06 Сентября 2013 в 20:47, реферат

Описание работы

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

В процессе выполнения работы необходимо было проделать следующее.
Изучение языка Ассемблера
Изучение языков высокого уровня
Изучение объектно-ориентированных языков
Изучение парадигм программирования

Содержание работы

ВВЕДЕНИЕ 3
1. ЯЗЫК АССЕМБЛЕРА 4
2.ЯЗЫКИ ВЫСОКОГО УРОВНЯ................................................................................................8
2.1 FORTRAN................................................................ ........ ... ....... .........................................10
2.2 LISP..................................................................... ...... .......... ........................ . ......................12
3. ОБЪЕКТНО-ОРИЕНТИРОВАННЫЕ ЯЗЫКИ 14
3.1 ЯЗЫК С++ 15
4. ПАРАДИГМЫ ПРОГРАММИРОВАНИЯ: 18
4.1 Процедурное программирование 18
4.2-Модульное программирование 18
4.3-Абстракция данных 18
4.4-Объектно-ориентированное программирование 19
4.5-Поддержка абстракции данных 21
4.6-Поддержка объектно-ориентированного программирования 21
ЗАКЛЮЧЕНИЕ 23
ЛИТЕРАТУРА.............................................................................................................................239

Файлы: 1 файл

UNIRS2.docx

— 75.83 Кб (Скачать файл)

 

    Безусловно С++ многим обязан языку С, который сохраняется как его подмножество. Сохранены и все свойственные С средства низкого уровня, предназначенные для решения самых насущных задач системного программирования. С, в свою очередь, многим обязан своему предшественнику языку BCPL . Комментарий языка BCPL был восстановлен в С++.  Еще одним источником вдохновения был язык SIMULA-67; именно из него была заимствована концепция классов (вместе c производными классами и виртуальными функциями).   Возможность в С++ перегрузки операций и свобода размещения описаний всюду, где может встречаться оператор, напоминают язык Алгол-68.

Сравнение языков С и С++

    Выбор С в качестве базового языка для С++ объясняется следующими его достоинствами:

(1) универсальность, краткость и  относительно низкий уровень;

(2) адекватность большинству задач  системного программирования;

(3) он идет в любой системе  и на любой машине;

(4) полностью подходит для программной  среды UNIX.

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

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

    (1) существуют миллионы  строк программ на С, которые можно улучшить с помощью С++, но при условии, что полной переписи их на язык С++ не потребуется;

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

    (3) существуют сотни тысяч  программистов, знающих С; им достаточно овладеть только новыми средствами С++ и не надо изучать основ языка;

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

 

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

 

    Язык С сам развивался в последние несколько лет, что отчасти было связано с разработкой С++. Стандарт ANSI для С содержит, например, синтаксис описания функций, позаимствованный из языка "С с классами". Происходит взаимное заимствование, например, тип указателя void* был придуман для ANSI С, а впервые реализован в С++. Как было обещано в первом издании этой книги, описание С++ было доработано, чтобы исключить неоправданные расхождения.  Теперь С++ более совместим с языком С, чем это было вначале ($$R.18).  В идеале С++ должен максимально приближаться к ANSI C, но не более.  Стопроцентной совместимости никогда не было и не будет, поскольку это нарушит надежность типов и согласованность использования встроенных и пользовательских типов, а эти свойства всегда были одними из главных для С++.

 

    Для изучения С++ не обязательно знать С. Программирование на С способствует усвоению приемов и даже трюков, которые при программировании на С++ становятся просто ненужными. Например, явное преобразование типа (приведение) , в С++ нужно гораздо реже, чем в С (см.  "Замечания для программистов на С" ниже). Тем не менее, хорошие программы на языке С по сути являются программами на С++. Например, все программы из классического описания С являются программами на С++. В процессе изучения С++ будет полезен опыт работы с любым языком со статическими типами.

 

    В проекте С++ особое внимание уделяется структурированию программы. Это вызвано увеличением размеров программ со времени появления С. Небольшую программу (скажем, не более 1000 строк) можно заставить из упрямства работать, нарушая все правила хорошего стиля программирования. Однако, действуя так, человек уже не сможет справиться с большой программой. Если у вашей программы в 10 000 строк плохая структура, то вы обнаружите, что новые ошибки появляются в ней так же быстро, как удаляются старые. С++ создавался с целью, чтобы большую программу можно было структурировать таким образом, чтобы одному человеку не пришлось работать с текстом в 25000 строк. В настоящее время можно считать, что эта цель полностью достигнута.

 

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

 

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

Краткий обзор С++

    Язык программирования С++ задумывался как язык, который будет:

    - лучше языка С;

    - поддерживать абстракцию  данных;

-поддерживать объектно-ориентированное  программирование.

 

    С++ - язык общего назначения  и задуман для того, чтобы настоящие  программисты получили удовольствие  от самого процесса программирования. За исключением второстепенных  деталей он содержит язык С как подмножество. Язык С расширяется введением гибких и эффективных средств, предназначенных для построения новых типов. Программист структурирует свою задачу, определив новые типы, которые точно соответствуют понятиям предметной области задачи. Такой метод построения программы обычно называют абстракцией данных. Информация о типах содержится в некоторых объектах типов, определенных пользователем. С такими объектами можно работать надежно и просто даже в тех случаях, когда их тип нельзя установить на стадии трансляции. Программирование с использованием таких объектов обычно называют объектно-ориентированным. Если этот метод применяется правильно, то программы становятся короче и понятнее, а сопровождение их упрощается.

 

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

    Объектно-ориентированное  программирование - это метод программирования, способ написания "хороших"  программ для множества задач.  Если этот термин имеет какой-то  смысл, то он должен подразумевать:  такой язык программирования, который  предоставляет хорошие возможности  для объектно-ориентированного стиля  программирования.

 

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

 

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

  1. ПАРАДИГМЫ ПРОГРАММИРОВАНИЯ:

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

    Первоначальной (и, возможно, наиболее используемой) парадигмой  программирования было:

    Определите, какие процедуры  вам нужны; используйте лучшие  из известных вам алгоритмов!

 

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

4.2Модульное программирование

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

 

Парадигма программирования приобрела  вид:

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

 

    Эта парадигма известна  также как "принцип сокрытия  данных". Если в языке нет  возможности сгруппировать связанные  процедуры вместе с данными,  то он плохо поддерживает модульный  стиль программирования. Теперь  метод написания "хороших"  процедур применяется для отдельных  процедур модуля.

 

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

    1. Абстракция данных

    Модульное программирование  предполагает группировку всех  данных одного типа вокруг  одного модуля, управляющего этим  типом.

 

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

 

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

 

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

 

    В языках Ада, Clu, С++ и подобных им эта трудность преодолевается благодаря тому, что пользователю разрешается определять свои типы, которые трактуются в языке практически так же, как встроенные.  Такие типы обычно называют абстрактными типами данных, хотя лучше, пожалуй, их называть просто пользовательскими. Более строгим определением абстрактных типов данных было бы их математическое определение. Если бы удалось его дать, то, что мы называем в программировании типами, было бы конкретным представлением действительно абстрактных сущностей.

 

Парадигму же программирования можно  выразить теперь так:

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

 

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

 

    Большинство модулей  (хотя и не все) лучше определять  как пользовательские типы.

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

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

Информация о работе Обзор языков програмирования