Язык программирования. 3
Введение
Язык формирует наш способ
мышления и определяет то,
о чем мы можем мыслить.
Б.Л Ворф
До середины 60-х компьютеры были слишком дорогими машинами, использовавшимися только для особых задач, и выполнявшими только одну задачу за раз.
Языки программирования этой эры, как и компьютеры на которых они использовались, были разработаны для специфичных задач, таких как научные вычисления. Поскольку машины были дорогими и медленными, то и машинное время было дорого – поэтому скорость выполнения программы стояла на первом месте.
Однако в течение 60-х цена на компьютеры стала падать так, что даже небольшие компании могли их себе позволить; скорость компьютеров всё увеличивалась, и наступило время, когда создатели языков программирования все больше стали задумываться об удобстве написания программ, а не только скорости их выполнения.
На заре компьютеризации, машинный язык был единственным языком, большего человек к тому времени не придумал. Для спасения программистов от сурового машинного языка программирования, были созданы языки высокого уровня (т.е. немашинные языки).«Мелкие» (атомарные) операции, выполняемые непосредственно устройствами машины, объединили в более «крупные», высокоуровневые операции и целые конструкции, с которыми человеку куда проще и удобнее работать. Так программирование сделало колоссальный прорыв: новые языки стали своеобразным связующим мостом между человеком и машинным языком компьютера.
Прогресс
компьютерных технологий определил процесс появления новых
- Основные положения о программировании
1.1 Понятие о программировании
Термин программирование означает процесс и искусство создания компьютерных программ с помощью специальных языков программирования.
Программирование позволяет
В общем смысле слова, программирование есть формализация предопределенного состояния, по реакции на событие, реализуемого средствами математики или естественных наук.
В более широком смысле под
программированием понимают
В
узком смысле слова, программирование рассма
Программирование
для ЭВМ основывается на использовании
языков программирования, на которых
записывается программа. В настоящее
время для того, чтобы программа
могла быть понята и исполнена ЭВМ, требуется
специальный инструмент — транслятор.
(Можно, конечно, обойтись и без транслятора.
Но тогда программу придется кодировать
непосредственно на языке машинных команд,
а это весьма трудоемкое занятие.) Существуют
два вида трансляторов — компиляторы и
Программирование в широком смысле можно разбить на несколько стадий:
- Анализ
- Проектирование - разработка комплекса алгоритмов
- Кодирование и компиляцию - написание исходного текста программы и преобразование его в исполнимый код с помощью компилятора
- Тестирование и отладку - выявление и устранение ошибок в программах
- Испытания и сдачу программ
- Сопровождение
Различные языки программирования поддерживают различные стили программирования (так называемые«парадигмы программирования»). Отчасти, искусство программирования состоит в том, чтобы выбрать один из языков, наиболее полно подходящий для решения имеющейся задачи. Разные языки требуют от программиста различного уровня внимания к деталям при реализации алгоритма, результатом чего часто бывает компромисс между простотой и производительностью (или между временем программиста и временем пользователя).
Единственный язык, напрямую выполняемый процессором - это машинный язык (также называемый «машинным кодом»). Как уже было сказано, изначально, все программисты прорабатывали каждую мелочь в машинном коде, но сейчас эта трудная работа уже не делается. Вместо этого, программисты пишут исходный код, и компьютер (используя компилятор, интерпретатор или ассемблер, речь о которых пойдёт чуть позже) транслирует его, в один или несколько этапов, уточняя все детали, в машинный код, готовый к исполнению на целевом процессоре. Однако, в некоторых языках, вместо машинного кода генерируется интерпретируемый двоичный код «виртуальной машины», также называемый байт-кодом (byte-code).
Теперь
можно переходить к материальной части
процесса создания программ. Это, разумеется,
технические (аппаратные) средства обеспечения
программирования - совокупность электрических,
электронных и механических компонентов
автоматизированных систем составляет
их техническое обеспечение (в отличие
от программных средств, представляющих
собой программное обеспечение автоматизированных
систем). Например, электронная вычислительная
машина (ЭВМ) или компьютер - комплекс технических
и программных средств, основанных на
использовании электроники и предназначенных
для автоматической или автоматизированной
обработки данных в процессе решения вычислительных
и информационных задач.
- Парадигмы программирования
Паради́гма программи́рования —
это совокупность идей и понятий, определяющих
стиль написания программ. Парадигма в
первую очередь определяется базовой
программной единицей и самим принципом
достижения модульности программы. В качестве
этой единицы выступают определение (декларативное, функциональное программирование), действие (императивное программирование),правило(
Парадигма
программирования определяет то, в
каких терминах программист опи
Важно отметить, что парадигма программирования не определяется однозначно языком программирования — многие современные языки программирования являются мультипарадигменными, то есть допускают использование различных парадигм. Так на языке Си, который не является объектно-ориентированным, можно писать объектно-ориентированным образом, а на Ruby, в основу которого в значительной степени положена объектно-ориентированная парадигма, можно писать согласно стилю функционального программирования.
В
зависимости от назначения и/или
способа написания программ различают
парадигмы(также известные как подходы
или технологии)
Структурное программирование - методология программирования, базирующаяся на системном подходе к анализу, проектированию и реализации программного обеспечения. Эта методология родилась в начале 70-х годов и оказалась настолько жизнеспособной, что и до сих пор является основной в большом количестве проектов. Основу этой технологии составляют следующие положения:
- Сложная задача разбивается на более мелкие, функционально лучше управляемые задачи. Каждая задача имеет один вход и один выход. В этом случае управляющий поток программы состоит из совокупности элементарных подзадач с ясным функциональным назначением.
- Простота управляющих структур, используемых в задаче. Это положение означает, что логически задача должна состоять из минимальной, функционально полной совокупности достаточно простых управляющих структур. В качестве примера такой системы можно привести алгебру логики, в которой каждая функция может быть выражена через функционально полную систему: дизъюнкцию, конъюнкцию и отрицание.
- Разработка программы должна вестись поэтапно. На каждом этапе должно решаться ограниченное число четко поставленных задач с ясным пониманием их значения и роли в контексте всей задачи. Если такого понимания не достигается, это говорит о том, что данный этап слишком велик и его нужно разделить на более элементарные шаги.
Концепция модульного программирования.Так же как и для структурной технологии программирования, концепцию модульного программирования можно сформулировать в виде нескольких понятий и положений:
- Функциональная декомпозиция задачи - разбиение большой задачи на ряд более мелких, функционально самостоятельных подзадач - модулей. Модули связаны между собой только по входным и выходным данным.
- Модуль - основа концепции модульного программирования. Каждый модуль в функциональной декомпозиции представляет собой «черный ящик» с одним входом и одним выходам. Модульный подход позволяет безболезненно производить модернизацию программы в процессе ее эксплуатации и облегчает ее сопровождение. Дополнительно модульный подход позволяет разрабатывать части программ одного проекта на разных языках программирования, после чего с помощью компоновочных средств объединять их в единый загрузочный модуль.
- Реализуемые решения должны быть простыми и ясными. Если назначение модуля непонятно, то это говорит о том, что декомпозиция начальной или промежуточной задачи была проведена недостаточно качественно. В этом случае необходимо еще раз проанализировать задачу и, возможно, провести дополнительное разбиение на подзадачи. При наличии сложных мест в проекте их нужно подробнее документировать с помощью продуманной системы комментариев. Этот процесс нужно продолжать до тех пор, пока вы действительно не добьетесь ясного понимания назначения всех модулей задачи и их оптимального сочетания.
- Назначение всех переменных модуля должно быть описано с помощью комментариев по мере их определения.
Объектно-ориентированное программирование (ООП).Идея ООП заключается в стремлении связать данные с обрабатывающими эти данные процедурами в единое целое - объект. ООП основано на трех важнейших принципах, придающих объектам новые свойства. Этими принципами являются инкапсуляция, наследование и полиморфизм.
- Инкапсуляция - объединение в единое целое данных и алгоритмов обработки этих данных. В рамках ООП данные называются полями объекта, а алгоритмы - объектными методами.
- Наследование - свойство объектов порождать своих потомков. Объект - потомок автоматически наследует от родителей все поля и методы, может дополнять объекты новыми полями и заменять (перекрывать) методы родителя или дополнять их.
- Полиморфизм - свойство родственных объектов (т.е. объектов, имеющих одного общего родителя) решать схожие по смыслу проблемы разными способами.
Существуют и другие технологии программирования, о которых также следует немного сказать.
Прикладное программирование - разработка и отладка программ для конечных пользователей, например бухгалтерских, обработки текстов и т.п.
Системное программирование - разработка средств общего программного обеспечения, в том числе операционных систем, вспомогательных программ, пакетов программ общесистемного назначения, например: автоматизированных систем управления, систем управления базами данных и т.д.
Декларативное (логическое, продукционное) программирование - метод программирования, предназначенный для решения задач искусственного интеллекта. В указанном контексте программа описывает логическую структуру решения задачи, указывая преимущественно, что нужно сделать, не вдаваясь в детали, как это делается. Используются языки программирования типа Пролог.
Параллельное программирование - разработка программ, обеспечивающих одновременное (параллельное) выполнение операций, связанных с обработкой данных.
Процедурное (процедурно-
Функциональное программирование- метод программирования, основанный на разбиении алгоритма решения задачи на отдельные функциональные модули, а также описании их связей и характера взаимодействия. Для функционального программирования наиболее широко используются языки НОРЕ и ML. Элементы функционального программирования реализуются также другими языками, например Си.
Эвристическое
программирование - метод программирования,
основанный на моделировании мыслительной
деятельности человека. Используется
для решения задач, не имеющих строго формализованного
алгоритма или связанных с неполнотой
исходных данных.
2.Языки программирования
2.1
Понятие языка программирования
2.2
Классификация языков
Первые языки программирования были очень примитивными и мало чем отличались от формализованных упорядоченных последовательностей единиц и нулей, понятных компьютеру. Использование таких языков было крайне неудобно с точки зрения программиста, так как он должен был знать числовые коды всех машинных команд, должен был сам распределять память под команды программы и данные.
Для того, чтобы облегчить общение человека с ЭВМ были созданы языки программирования типа Ассемблер. Переменные величины стали изображаться символическими именами. Числовые коды операций заменились на мнемонические обозначения, которые легче запомнить. Язык программирования приблизился к человеческому языку, и отдалился от языка машинных команд.
Существуют различные классификации языков программирования. По наиболее распространенной классификации все языки программирования делят на языки низкого, высокого и сверхвысокого уровня.
В группу языков низкого уровня входят машинные языки и языки символического кодирования: (Автокод, Ассемблер). Операторы этого языка – это те же машинные команды, но записанные мнемоническими кодами, а в качестве операндов используются не конкретные адреса, а символические имена. Все языки низкого уровня ориентированы на определенный тип компьютера, т. е. являются машинно-зависимыми.
Машинно-ориентированные языки – это языки, наборы операторов и изобразительные средства которых существенно зависят от особенностей ЭВМ (внутреннего языка, структуры памяти и т.д.).
Следующую,
существенно более
К языкам сверхвысокого уровня можно отнести лишь Алгол-68 и APL. Повышение уровня этих языков произошло за счет введения сверхмощных операций и операторов.
Другая
классификация делит языки на
В современной
информатике можно выделить два основных
направления развития языков программирования: процедурное
Процедурное программирование возникло на заре вычислительной техники и получило широкое распространение. В процедурных языках программа явно описывает действия, которые необходимо выполнить, а результат задается только способом получения его при помощи некоторой процедуры, которая представляет собой определенную последовательность действий.
Среди
процедурных языков выделяют в свою
очередь структурные и
Непроцедрное (
В функциональных языках пр
В логических языках програ
Можно
выделить еще один класс языков программирования - объектно-
Языки
описания сценариев, такие как Perl, Python,
Rexx, Tcl и языки оболочек UNIX, предполагают
стиль программирования, весьма отличный
от характерного для языков системного
уровня. Они предназначаются не для написания
приложения с нуля, а для комбинирования
компонентов, набор которых создается
заранее при помощи других языков. Развитие
и рост популярности Internet также способствовали
распространению языков описания сценариев.
Так, для написания сценариев широко употребляется
язык Perl, а среди разработчиков Web-страниц
популярен JavaScript.
3.Развитие языков программирования
Ассемблер.
Язык Ассемблера – это символическое представление
машинного языка. Он облегчает процесс
программирования по сравнению с программированием
в машинных_кодах.
Программисту не обязательно употреблять
настоящие адреса ячеек памяти с размещенными
в них данными, участвующими в операции,
и вычисляемые результаты, а также адреса
тех команд, к которым программа не обращается.
Некоторые задачи, например, обмен с нестандартными
устройствами обработки данных сложных
структур невозможно решить с помощью
языков программирования высокого уровня.
Это под силу ассемблеру.
В принципе, язык Ассемблер является машинным
языком. И программист реализующий какую-либо
задачу на языках высокого уровня, с помощью Ассемблера
может определить осмыслено ли решение
данной задачи, с точки_зрения_использования_ВМ.
Умея разобраться в распечатке языка ассемблера,
дает возможность облегчить поиск ошибок
в программах, т.к. некоторые языки являются
компиляторами.
Бейсик.
Как знаменитые гамбургеры, бейсбол и
баскетбол, Бейсик - это продукт Новой Англии.Бейсик,
созданный в 1964г., как язык обучения программированию. Бейсик
Вскоре как обучаемые, так и авторы программ
обнаружили, что Бейсик может делать практически
все то, что делает скучный, неуклюжий
Фортран. А так как Бейсику было легко обучиться
и легко с ним работать, программы на нем
писались обычно быстрее, чем на Фортране.
Бейсик был также доступен на персональных
компьютерах, обычно он встроен в ПЗУ.
Так Бейсик завоевал популярность. Интересно,
что спустя 20 лет после изобретения Бейсика,
он и сегодня самый простой для освоения
из десятков языков общецелевого программирования,
имеющихся в распоряжении любителей программирования.
Более того, он прекрасно справляется
с работой.
Несмотря на высказывания снобов - сторонников
языков Си и Паскаля, Бейсик
Исторически Бейсик обычно реализовался
как интерпретатор (знакомым изомером
является сам интерпретаторный Бейсик).
Причинами перехода от любительского
уровня к профессиональному являются
многочисленные расширения классической
версии языка: возможность отключения
нумерации строк, многостроковые структурированные
программные конструкции, структуры типа
"запись", поименованные подпрограммы
с параметрами и локальные переменные.
Более того, с появлением транслятора QuickBasic фирмы M
Рефал.
Несомненно надо рассказать и о некоторых
языках программирования созданных у
нас на родине. Один из таких языков является Рефал,
разработанный у нас в России (СССР), в
1966г. ИПМ АН СССР. Этот язык прост и удобен
для описания манипуляций над произвольными
текстовыми объектами.
Рефал широко применяется при разработке
трансляторов с алгоритмических языков
как универсальных и проблемно – ориентированных,
так и автокодов. Кроме использования
в задачах трансляции, Рефал имеет такие
важные сферы применения, как машинное
выполнение громоздких аналитических
выкладок в теоретической физике и прикладной
математике; проектирование «умных» информационных
систем, осуществляющих нетривиальную
логическую обработку информации; машинное
доказательство теорем; моделирование
целенаправленного поведения; разработка
диалоговых обучающих систем; исследования
в области искусственного интеллекта_и_т.п.
Программирование на Рефале имеет специфику,
связанную, прежде всего, с тем, что Рефал является
языком функционального типа в отличие
от обычных операторных языков типа Алгол, Фортран и
т.д.. Если программа на операторных языках
– ни что иное, как совокупность приказов-операторов,
то программа на Рефале представляет собой
по существу описание связей и отношений
между определенными__понятиями.
Вследствие того, что в Рефале программист
сам определяет структуру обрабатываемой
информации, эффективность программы
существенно зависит от удачного или неудачного
выбора этой структуры. Для задания структур
в Рефале используются скобки, а специфика
всех реализаций языка такова, что использование
скобок резко повышает эффективность
выполнения программы. Это достигается
с помощь_дресного_соединения_
Определенной спецификой обладают и переменные
типа «выражения» – имеется в виду их
способность удлиняться при отождествлении.
Правильное использование переменных
этого типа также позволяет значительно
повысить эффективность Рефал –
Cи.
Си – это язык программирования общего
назначения, хорошо известный своей эффективностью,
экономичностью, и переносимостью. Указанные
преимущества Си обеспечивают хорошее
качество разработки почти любого вида
программного продукта. Использование Си в
качестве инструментального языка позволяет
получать быстрые и компактные программы.
Во многих случаях программы, написанные
наСи, сравнимы по скорости с программами,
написанными на языке ассемблера. При
этом они имеют лучшую наглядность и их
более просто сопровождать. Си сочетает
эффективность и мощность в относительно
малом по размеру_языке.
Си – это замечательный язык, и хотя некоторым
он не нравится, но все же большинство
программистов его любят. На Си вы можете
создавать программы, которые делают все,
что вы пожелаете. Нет другого такого языка,
который бы так же стимулировал к программированию.
Создается впечатление, что остальные
языки программирования воздвигают искусственные
препятствия для творчества, а Си – нет.
Использование этого языка позволяет
сократить затраты времени на создание
работающих программ. Си позволяет программировать
быстро, эффективно и предсказуемо. Еще
одно преимущество Си заключается в том,
что он позволяет использовать все возможности
вашей ЭВМ. Этот язык создан программистом
для использования другими программистами,
чего о других языках программирования_сказать_

- Язык программирования
- Язык программирования LISP
- Язык программирования PHP
- Язык программирования Visual Basic
- Язык программирования Visual Basic for Applications
- Язык программирования Паскаль
- Язык разговора
- Языкознание в Средние века
- Языкознание в эпоху Возрождения
- Языкознание Древней Греции и Рима
- Языкознание. Семиотика
- Языком одежды
- Язык описания интерфейсов WSDL
- Язык программирования