КАТЕГОРИИ: Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748) |
История развития. Существует много принципов классификации языков программирования
Классификация Существует много принципов классификации языков программирования. Наиболее общим является подход, разделяющий этапы решения задач. Так как решение предполагается с помощью ЭВМ, а формулировка задачи остается за человеком, все языки можно разделить на машинные, машинно-зависимые, машинно-независимые и естественные человеческие языки. Мы не будем рассматривать здесь человеческие языки, так как на них человек только осознает задачу, а для ее решения, она должна быть записана на конкретном машинном языке. Машинный язык - конечный набор команд в двоичных кодах, которые может выполнять процессор ЭВМ. Каждый новый тип процессора - это одновременно и новый машинный язык. В программах на языке машинных команд (ЯМК) данные обозначаются их адресами в памяти машины, выполняемые операции – числовыми кодами, о расположении команд и данных в памяти ЭВМ должен заботиться программист. Надо ли говорить о том насколько программирование на ЯМК было трудоемким процессом? Но так работали программисты только на самых первых ламповых ЭВМ первого поколения, так как эти ЭВМ понимали только язык машинных команд. Первые языки программирования, отличные от ЯМК появились на машинах первого поколения и назывались Автокодами. Работая на Автокоде программист освобожден распределять память под программу и данные, а также от работы с адресами ячеек. Начиная с ЭВМ третьего поколения такие языки стали называть машинно-зависимыми языками, или Ассемблерами. В настоящее время на машинных языках программы не пишут. Это можно делать на машинно-зависимых или машинно-независимых языках, применяя системы программирования. Если хотят максимально использовать возможности и особенности машины при решении задачи используют машинно-зависимый язык. Если желательно программу создавать для широкого круга ЭВМ, ее пишут на машинно-независимом языке. Примерами реализаций машинно-зависимых языков для ПЭВМ являются макроассемблеры MASM (Microsoft) и TASM (Borland). Строение ассемблеров опирается на архитектуру и наборы команд каждого типа ЭВМ. Из машинно-независимых языков, реализованных на ПЭВМ можно отметить Бейсик, Паскаль, Си, Фортран-77, Пролог, Лисп, Смолток, Модула-2, Ада. Наибольшее распространение получили первые 4 из этого списка. По другой классификации все языки программирования принято разделять на языки низкого уровня и языки высокого уровня. Понятие уровня языка программирования связано со степенью его удаленности от языка процессора ЭВМ (языка машинных команд) и приближенности к естественному человеческому языку, к формальному языку предметной области (чаще всего математики). Чем выше уровень, тем ближе к человеку и дальше от ЭВМ. ЯМК – это язык самого низкого уровня. Ассемблер тоже язык низкого уровня. В настоящее время на Ассемблере программируют только системные программисты и используется этот язык довольно редко. Большинство программистов работают на языках высокого уровня, которых сейчас насчитывается великое множество (Паскаль, Фортран, Си, Си++, Visual C, Visual Basic, VBA.и др.) Однако, чем понятнее программа для человека, тем непонятнее для ЭВМ. В конечном итоге любая программа должна быть переведена на язык машинных команд (ЯМК), если мы хотим получить решение с помощью машины. Программы-переводчики с Ассемблера и языков программирования высокого уровня называются трансляторами, а п роцесс перевода программы на ЯМК называется трансляцией. Транслятор – обязательный элемент любой системы программирования. Первые системы программирования включали в себя только транслятор. Затем к нему стали добавляться различные сервисные средства: текстовые редакторы, отладчики, системы обслуживания программных библиотек, средства организации “дружественного” интерфейса с пользователем. Существует два способа трансляции: - интерпретация - компиляция. Режим компиляции характеризуется тем, что на ЯМК переводится весь текст программы, создается новый модуль с другим расширением, который в дальнейшем может многократно выполняться, если он сохранен во внешней памяти. Транслятор, работающий по принципу компиляции, называется компилятором. .Транслятор, работающий по принципу интерпретации называется интерпретатором. Интерпретатор компилирует команду и, в случае отсутствия ошибки, сразу ее выполняет. Интерпретатор в течение всего времени работы программы находится во внутренней памяти (оперативной или постоянной). Результат выполнения предыдущей команды в памяти не сохраняется. При выполнении одного и того же оператора в цикле он снова будет транслироваться. Перед трансляцией каждого оператора происходит его синтаксическая проверка. Кроме того интерпретатор может занимать значительное место в оперативной памяти. Таким образом, при компиляции трансляция и выполнение программы идут последовательно друг за другом, при интерпретации – параллельно. Из-за указанных причин (экономии во времени выполнения и в размере памяти, так как если программа откомпилирована вся, то компилятор более не нужен для ее выполнения) большие программы всегда компилируются (Паскаль, Си, Фортран и др.). Язык Бейсик часто реализуется через интерпретатор.. Развитие языков программирования определялось в первую очередь изменениями потребностей пользователей (что выражалось в распределении затрат на разные этапы решения задачи с помощью ЭВМ). Первые ЭВМ позволяли программировать задачи только на машинном языке, что было связано с невозможностью использовать какие-либо программы- трансляторы. Так как основные затраты при работе на этих ЭВМ были связаны с записью программ в машинных (двоичных) кодах, основные усилия системных программистов направлялись на создание средств автоматизации кодирования, которые получили название автокодов (позднее получивших название ассемблеров). Это позволило на порядок сократить время разработки и отладки программ. Конечно использование таких языков стало возможным после достаточного увеличения ОП и появления устройств ввода и вывода символьной информации. Эти языки получили название языков программирования 1-го поколения. С конца 50-х годов возрастание размеров программ, написанных на машинно-зависимых языках приводит к большим затратам на отладку программ. Для сокращения текстов программ и повышения их наглядности постепенно происходит переход на языки 2-го поколения, больше подходящие для описания решения задачи, а не ориентированные на возможности ЭВМ. Такие языки получают название "алгоритмических". В качестве примеров можно назвать ФОРТРАН (название произошло от "Формульного Транслятора"), АЛГОЛ-60, ЛИСП и др. Первую версию языка ФОРТРАН разработал Дж.Бэкус и фирма IBM в 1956, а первый транслятор с ФОРТРАНа начал работать в 1958 году. В 1962 году сформировался вариант языка с обозначением ФОРТРАН-IV, долгое время являвшимся самым распространенным языком в мире. Общее количество языков, разработанных к середине 60-х годов, составляло порядка трех тысяч, хотя большинство из них использовалось только разработчиками и их ближайшими знакомыми. С середины 60-х годов происходит интеграция накопленного "языкового" опыта в универсальных языках высокого уровня (относящихся к 3-му поколению), таких как ПЛ/1, АЛГОЛ-68, СИМУЛА. В них сделана попытка объединить возможности всех ранее разработанных языков с целью перехода к единому языку программирования. На этих языках, казалось, можно было написать любую программу. Например, в язык ПЛ/1 были включены практически все используемые в прикладных задачах простые типы данных и возможности построения любых составных конструкций. Хотя этот язык сильно критиковали за сложность, вседозволенность, следует отметить, что за 25 лет с момента его создания он практически не изменялся (в отличие от, например, ФОРТРАНА). Системные программисты, а также прикладные программисты, работающие в новых областях науки активно использовали этот язык, но ему не удалось вытеснить старые языки ФОРТРАН или КОБОЛ из-за огромного объема ранее разработанных программных продуктов, библиотек подпрограмм и из-за консерватизма непрофессиональных программистов. Важнейшей особенностью этого периода являлось появление очень больших по объему программ, создаваемых коллективами авторов. Написание программ становилось менее сложным делом, чем их отладка и документальное сопровождение. Всякая модификация программ приводила к появлению все новых ошибок. Поэтому, несмотря на интенсивное развитие инструментальных средств, производительность труда программистов с начала 70-х годов перестала расти. Срывались сроки разработки, программы становились дороже и ненадежнее. Увеличение ресурсов (денег, людей) не приводило к ускорению работы. Эта ситуация получила название "кризиса программирования". Г. Буч пишет об этом периоде: “Наше неумение создавать сложные программные системы проявляется в проектах, которые выходят за рамки установленных сроков и бюджетов и к тому же не соответствуют начальным требованиям. Мы часто называем это кризисом программного обеспечения”. Преодоление кризиса началось с работы Боэма "Программная инженерия", вышедшая в 1976 году, в которой было показано, что основные затраты на программный продукт приходятся на сопровождение, а не на разработку. Поэтому важнейшими аспектами становятся технология программирования и "прозрачность" ПО. На смену императивному программированию пришли технологии структурного и модульного программирования. На смену "хитроумным" программам написанным на громоздких языках приходят простые понятные библиотеки подпрограмм, часто в виде исходных текстов на таких языках как Паскаль, Си, Бейсик. Этому способствует переход на ПЭВМ, на которых просто невозможно реализовать трансляторы с мощных универсальных языков ПЛ или АЛГОЛ-68. Языками программирования 80-х годов стали языки, реализованные на персональных ЭВМ. К ним в первую очередь относятся Си, Паскаль, Форт, Бейсик, ФОРТРАН-77. Все они относятся к классическим алгоритмическим проблемно-ориентированным операторным языкам, хотя и сильно отличаются друг от друга. Эти языки программирования относят к 4 поколению. Язык Си был разработан Д.Ритчи в 1972 году и предназначался в первую очередь для переноса программ с одной ЭВМ на другую. Он стал активно применяться после того, как очередная версия операционной системы UNIX была написана на Си. В этом языке сочетаются возможности языка высокого уровня с доступностью адресации аппаратных средств ЭВМ и отсутствием многих ограничений, присущих другим языкам, поэтому он является в настоящее время основным языком системного программирования. Процедурно ориентированный язык Паскаль был разработан Н.Виртом в 1971 году. Первоначально он использовался для обучения студентов принципам программирования, но в силу ясности, выразительности и высокой эффективности разработанных трансляторов, стал широко применяться для решения вычислительных и информационно-логических задач, а иногда и для вопросов системного программирования. Оказался очень удобен для реализации графики на ПЭВМ. Язык ФОРТ разрабатывался исключительно для микро-ЭВМ и ориентирован на создание очень эффективных программ в условиях малых аппаратных ресурсов. Система ФОРТ очень компактна, например интерпретатор и словарь системных слов занимают всего 8 Кбайт. Особенностью языка является хранение операндов в стеке, а сама программа имеет вид строк в обратной польской записи. Программист может любую программную строку обозначить заданным символом, который затем может использовать наравне с системными операторами. Это позволяет на основе языка ФОРТ строить специализированные языки для конкретных приложений, поэтому его называют гибким расширяемым языком. Недостатком является непривычная форма записи программ и сложность использования в больших программных комплексах. ФОРТРАН-77 представляет версию расширенного языка ФОРТРАН, широко используемый в научных расчетах. До языка ФОРТРАН-77 наиболее распространенным языком был ФОРТРАН-66, чаще называемый ФОРТРАН-IV. Следующим годом пересмотра стандарта ФОРТРАН стал 1986 год, хотя внесенные изменения оказались уже не столь существенными и ФОРТРАН-86 не сумел вытеснить предыдущую версию. Язык БЕЙСИК был первоначально разработан группой студентов Дартмутского колледжа в 1963 году для обучения программированию. Широкое распространение получил с появлением ПЭВМ, так как на первых машинах являлся единственным алгоритмическим языком программирования. До последнего времени являлся очень простым языком с ограниченными возможностями. Реализовывался в форме интерпретатора, работающего в интерактивном режиме. К сожалению, не имел и практически не имеет стандарта, поэтому на разных ЭВМ имеет различные диалекты, часто несовместимые (и, соответственно, не переносимые с машины на машину). В настоящее время на IBM-совместимых ПЭВМ есть версии БЕЙСИК с мощными оболочками, включающими интерпретаторы, компилятор, отладчики и прочие составляющие системы программирования. Это четвертое поколение алгоритмических языков широко распространено и в настоящее время, хотя и вытесняется следующим поколением языков, начавших активно внедряться с начала 90-х годов. Современные языки программирования, хотя и выросли в недрах языков четвертого поколения (и часто имеют то же название, но более старшую версию), опираются на совершенно иной подход к программированию. В их основе лежит подход к обрабатываемым данным как основе программы. В центр ставятся понятия объектов, объединенных в классы данных, а программа представляет собой описания связей между объектами. Такой подход называется "объектным программированием". В качестве примеров языков этого поколения можно назвать Турбо Паскаль 7-ой версии, С++, Ада, Модула 2, Турбо Пролог.
В процессе изготовления программного продукта программист должен пройти определенные этапы.
На стадии проектирования строится алгоритм будущей программы, например, в виде блок-схемы. Кодирование — это составление текста программы на языке программирования. До окончательного рабочего состояния программа доводится в процессе отладки. Отладка осуществляется с помощью тестов, т.е. программа выполняется с некоторым заранее продуманным набором исходных данных, для которого известен результат. Чем сложнее программа, тем большее число тестов требуется для ее проверки. Очень «хитрую» программу трудно протестировать исчерпывающим образом. Всегда есть шанс, что какой-то «подводный камень» остался незамеченным. Ошибки могут быть «языковые» и алгоритмические. Первый тип ошибок, как правило, помогает обнаружить компилятор. Это ошибки, связанные с нарушением правил языка программирования. Их еще называют ошибками времени компиляции, ибо обнаруживаются они именно во время компиляции. Сам компилятор в той или иной форме выдает пользователю сообщение о характере ошибки и ее месте в тексте программы. Исправив очередную ошибку, пользователь повторяет компиляцию. И так продолжается до тех пор, пока не будут ликвидированы все ошибки этого уровня. Алгоритмические ошибки приводят к различным последствиям. Во-первых, могут возникнуть невыполнимые действия. Например, деление на нуль, корень квадратный из отрицательного числа, выход индекса за границы строки и т. п. Это ошибки времени исполнения. Они приводят к прерыванию выполнения программы. Как правило, имеются системные программные средства, помогающие в поиске таких ошибок. Другая ситуация, когда алгоритмические ошибки не приводят к прерыванию выполнения программы. Программа выполняется до конца, получаются какие-то результаты, но они не являются верными. Для окончательной отладки алгоритма и анализа его правильности производится тестирование. Тест — это такой вариант решения задачи, для которого заранее известны результаты. Как правило, один тестовый вариант не доказывает правильность программы. Программист должен придумать систему тестов, построить план тестирования для исчерпывающего испытания всей программы. Для проверки корректности блок-схемы алгоритма выполняется трассировка. Для выполнения трассировки нумеруются все блоки блок-схемы и затем заполняется таблица трассировки. Правильность блок-схемы проверяется на конкретном числовом примере. Трассировка выполняется для всех ветвей блок-схемы.
Дата добавления: 2014-01-20; Просмотров: 618; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |