История развития программного обеспечения
Поможем в ✍️ написании учебной работы
Поможем с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой

 

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

· прикладное ПО, непосредственно обеспечивающие выполнение необходимых пользователям работ;

· системное ПО, выполняющее функции управления ресурсами компьютера;

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

В ЭВМ первого поколения объем оперативной памяти был минимальным. В ОЗУ ЭВМ могла помещаться только прикладная программа, т.е. системное и инструментально программное обеспечение практически отсутствовало. Требования к лаконичности и оптимизации ПО были очень высокими. Программное обеспечение разрабатывалось на уровне представления команд и данных в машинном, т.е. двоичном, коде. Но написание, восприятие и отладка программ в таком виде является очень трудоемким процессом. Переход к представлению инструкций программисту в восьмеричном и шестнадцатеричном коде решил проблему лишь отчасти. Следующим этапом стала замена представления команд в числовом коде на так называемый мнемокод, в котором код операции заменялся на отчасти осмысленное сокращение, а поля адреса и/или данных выделялись из кода команды и представлялись программисту в структурированном виде. К концу периода, формально относящегося к ЭВМ первого поколения, появились первые наработки программ, решающих стандартные задачи взаимодействия с внешними устройствами, которые в дальнейшем выросли в операционные системы. Появилось первое инструментальное ПО – ассемблер (от англ. assembler - сборщик) – программа-транслятор, которая и дала языку ассемблера его название.

Язык ассемблера – язык программирования низкого уровня, мнемонические команды которого (за редким исключением) соответствуют инструкциям процессора вычислительной системы. Кроме мнемокодов, язык ассемблера позволяет использовать символические метки вместо адресов ячеек памяти, которые при ассемблировании заменяются на автоматически рассчитываемые абсолютные или относительные адреса, а также так называемые директивы (команды, не переводящиеся в процессорные инструкции, а выполняемые самим ассемблером). При достаточной квалификации программиста язык ассемблера позволяет писать самый быстрый и компактный код. Опытный программист, как правило, способен значительно оптимизировать программу по сравнению с высокоуровневыми трансляторами по одному или нескольким параметрам: скорость работы (за счѐт оптимизации вычислений и/или более рационального обращения к ОП, перераспределения данных), объѐм кода (в том числе за счѐт эффективного использования промежуточных результатов). Но в силу машинной ориентации языка ассемблера человеку сложнее читать и понимать программу на нѐм по сравнению с языками программирования высокого уровня; программа состоит из слишком «мелких» элементов – машинных команд, соответственно, усложняются программирование и отладка, растѐт трудоѐмкость, велика вероятность внесения ошибок. Двоичный код, мнемокод, ассемблер – это машиннозависимые языки. Их достоинство – ориентируясь на систему команд и адресации конкретной машины, эти языки максимально используют возможности данной машины. Оборотной стороной машиннозависимости языков является отсутствие переносимости программного обеспечения, т.е. программа, написанная для ЭВМ одной модели и/или производителя, не может быть перенесена на другую модель ЭВМ из-за разницы в кодах команд, представлении данных, способах адресации и т.д.

Языки высокого уровня. Недостатки языка ассемблера, сложность разработки на нём  больших программных комплексов привели к появлению языков третьего поколения – языков программирования высокого уровня (Фортран, Лисп, Кобол, Паскаль, Си и др.). Во втором поколении ЭВМ применение запоминающих устройств на магнитных лентах позволяло записывать на магнитной ленте несколько программ, которые автоматически выполнялись в компьютере одна за другой и в той же последовательности результаты автоматически записывались на другую ленту. Этот вид обработки получил название пакетной обработки, при которой пользователь не имел прямого доступа к компьютеру. Организация пакетной обработки, в свою очередь, требовала организовать хранение исходных кодов, промежуточных представлений программ, входных и выходных результатов работы программ. Можно сказать, что на этом этапе началось формирование системного программного обеспечения в том понимании, которое мы вкладываем в него сегодня. Развиваются языки высокого уровня (Алгол60, Кобол, Фортран) и трансляторы к ним. Расширяется номенклатура прикладного программного обеспечения и круг решаемых задач. Создание программ на языках высокого уровня (ЯВУ) требовало достаточно развитых инструментальных средств: трансляторов с ЯВУ, которые переводили исходный текст программы на язык ассемблера, собственно ассемблера, программы-компоновщика, которая обеспечивала корректное размещение в памяти исполняемого кода программы и блоков данных. Для написания исходного текста программ потребовались редакторы текста. Сперва появились так называемые командные редакторы, в которых процесс редактирования текста выполнялся с помощью специальных директив, а затем и экранные, которые позволяли отображать текст программы на экране и вносить в него правку непосредственно. В компьютерах третьего поколения был расширен набор внешних запоминающих устройств. В начале 60-х годов появились первые устройства внешней памяти на магнитных дисках. Все управление компьютером автоматизировано. Управление осуществляет комплекс программ, объединенный в операционную систему (ОС), используя систему прерывания и таймер. Интерфейс пользователя и операционной системы осуществляется с помощью команд, вводимых с клавиатуры. Широко используется многопрограммный режим работы и виртуальная память (особая организация управления памятью, которая позволяет рассматривать всю память компьютера, как основную). Повышается эффективность использования компьютеров за счет использования мультипрограммного режима работы. На базе универсальных компьютеров стало возможно создание вычислительных систем, обслуживающих удаленных пользователей. Все это требует расширения функционала операционной системы. В области инструментальных средств появляется тенденция создания интегрированных сред разработки ПО, когда в общей программной оболочке объединяются все необходимые средства разработки, обеспечивая пользователю сравнительно удобный интерфейс и значительно более высокую эффективность разработки. Аппаратные средства компьютеров четвертого поколения достигли достаточного уровня развития, чтобы в большинстве случаев снять проблему недостатка оперативной памяти и низкой производительности. Широкое распространение получили персональные компьютеры, которые предназначались для пользователей, не являющихся специалистами в области вычислительной техники. Актуальной задачей стало обеспечение пользователю максимального удобства при работе с компьютером. Операционные системы обзавелись дружественным графическим интерфейсом, предоставили пользователям возможность широко применять многопоточный режим работы.

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

Парадигмы программирования

 

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

· инструкция (императивное программирование, FORTRAN/C/PHP),

· функция (функциональное программирование, Haskell/Lisp/F#/Scala),

· прототип (прототипное программирование, JavaScript),

· объект (объектно-ориентированное программирование, С++/Java),

· факт (логическое программирование, PROLOG).

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

Своим современным значением в научно-технической области термин «парадигма» обязан, по-видимому, Томасу Куну и его книге «Структура научных революций». Кун называл парадигмами устоявшиеся системы научных взглядов, в рамках которых ведутся исследования. Термин «парадигма программирования» впервые применил Роберт Флойд в своей лекции лауреата премии Тьюринга. Флойд отмечает, что в программировании можно наблюдать явление, подобное парадигмам Куна, но, в отличие от них, парадигмы программирования не являются взаимоисключающими. Приверженность определѐнного человека какой-то одной парадигме иногда носит настолько сильный характер, что споры о преимуществах и недостатках различных парадигм относятся в околокомпьютерных кругах к разряду так называемых «религиозных» войн — холивар.

Дата: 2019-11-01, просмотров: 242.