В 20-х годах XIX века
Ч.Бэббиджем была высказана мысль о предварительной записи порядка действий
машины для последующей автоматической реализации вычислений – программе. И, хотя
использованная Бэббиджем запись программы на перфокартах, придуманная для
управления ткацкими станками французским изобретателем Жозефом Мари-Жаккаром,
технически не имеет ничего общего с современными приемами хранения программ в
ЭВМ, принцип здесь по-существу один. С этого момента начинается история
программирования.
Аду Лавлейс,
одну из немногих современников Чарльза Бэббиджа, кто сумел по достоинству
оценить аналитическую машину, называют первым в мире программистом. Она
теоретически разработала некоторые приемы управления последовательностью
вычислении, которые используются в программировании и по сей день, описала одну
из важнейших конструкций практически любого современного языка программирования
– цикл.
Следующий этап:
появление системы кодирования машинных команд с помощью специальных символов,
предложенной Джоном Моучли, сотрудником Пенсильванского университета.
На заре компьютерной эры
машинный код был единственным средством общения человека с компьютером. Огромным
достижением создателей языков программирования было то, что они сумели заставить
сам компьютер работать переводчиком с этих языков на машинный код.
В конце 40-х годов создана
система под названием «Short
Code»,
которая являлась примитивным языком программирования высокого уровня. В ней
программист записывал решаемую задачу в виде математических формул, а затем,
используя специальную таблицу, переводил символ за символом, преобразовывал эти
формулы в двухлитерные коды. В дальнейшем специальная программа компьютера
превращала эти коды в двоичный машинный код.
Система, разработанная Дж.
Моучли, была по существу одним из первых примитивных интерпретаторов.
Грейс Мюррей Хоппер
стала «третьим в мире программистом». При работе на компьютере «Марк-1» Г.Хоппер
и ее группе пришлось столкнуться со многими проблемами и все, что ими придумано,
было впервые. В частности, они придумали подпрограммы. И еще одно
фундаментальное понятие техники программирования впервые ввели Г.Хоппер и ее
группа - «debugging» (отладка).
В 1951 г. Хоппер создала
первый в мире компилятор и ею же был введен сам этот термин.
Компилятор Хоппер осуществлял
функцию объединения команд и в ходе трансляции производил организацию
подпрограмм, выделение памяти компьютера, преобразование команд высокого уровня
в машинные команды.
В 1954 г. разработана
система, включающая язык программирования и компилятор, которая в дальнейшем
получила название MATH-MATIC.
В 1958 г. появился
компилятор FLOW-MATIC
– первый язык для задач обработки коммерческих данных.
Середина 50-х годов
характеризуется стремительным прогрессом в области программирования.
Роль программирования в
машинных командах стала уменьшаться.
Первым и одним из наиболее
распространенных был Фортран (FORTRAN,
от FORmula TRANslator
– переводчик формул), разработанный группой программистов фирмы IBM
в 1954 г. (первая версия).
В середине 60-х годов
сотрудники математического факультета Дартмутского колледжа Томас Курц и
Джон Кемени создали специализированный язык программирования, который
состоял из простых слов английского языка.
Новый язык назвали
«универсальным символическим кодом для начинающих» (Beginners
All-Purpose
Symbolic Instruction Code, или,
сокращенно,BASIC).
Годом рождения нового языка можно считать 1964 г.
В начале 60-х годов все
существующие языки программирования высокого уровня можно было пересчитать по
пальцам, однако впоследствии их число достигло трех тысяч.
В 60-е годы были предприняты
попытки преодолеть эту «разноголосицу» путем создания универсального языка
программирования. Первым детищем этого направления стал PL/I(Programm
Language One),1967 г. Затем на эту роль претендовал АЛГОЛ-68 (1968 г.).
Предполагалось, что подобные
языки будут развиваться и усовершенствоваться и вытеснят все остальные.
Однако ни одна из этих попыток
на сегодняшний день не увенчалась успехом (хотя PL/I
в усеченных версиях использовали многие программисты).
Всеохватность языка приводила к
неоправданной, с точки зрения программиста, сложности конструкций,
неэффективности компиляторов.
Языки программирования служат
разным целям иих выбор определяется удобностью пользователя,
пригодностью для данного компьютера и данной задачи.
В программировании наилучший
результат достигается при индивидуальном подходе, исходящем из класса задачи,
уровня и интересов программиста.
-Бейсик
широко употребляется при написании простых программ;
-Фортран
является классическим языком программирования при решении на ЭВМ математических
и инженерных задач;
-Кобол
был задуман как основной язык для массовой обработки данных в сферах управления
и бизнеса.
-ЛОГО,
созданный для обучения программированию школьников.
-Пролог,
разработан как язык программирования для создания систем искусственного
интеллекта.
В конце 50-х годов появился
язык программирования Алгол (ALGOL,
от ALGOrithmic Language
- алгоритмический язык).
Алгол предназначен для записи
алгоритмов, которые строятся в виде последовательности процедур, применяемых для
решения поставленных задач.
В нашей странев те годы
был создан под руководством Сергея Петровича Ершова транслятор Альфа,
который представлял довольно удачную русифицированную версию Алгола.
Язык Паскаль
первоначально разрабатывался как учебный, однако, качества его в совокупности
оказались столь высоки, что им охотно пользовались и профессиональные
программисты.
Был создан Никлаусом Виртом
в 1970 г., после его участия в работе комитета разработки стандарта языка
Алгол-68.
Француз Филип Кан
разработал систему Турбо-Паскаль в 1983 г.
Суть его идеи состояла в
объединении последовательных этапов обработки программы - компиляции,
редактирования связей, отладки и диагностики ошибок - в едином интерфейсе.
Период с конца 60-х и до начала
80-х годов характеризуется бурным ростом числа различных языков
программирования, сопровождавшим, кризис программного обеспечения. Этот кризис
особо остро переживало военное ведомство США.
В январе 1975 г.
Пентагон решил навести порядок в хаосе трансляторов и учредит комитет, которому
было предписано разработать один универсальный язык.
В мае 1979 г. был
объявлен победитель - группа ученых во главе с Жаном Ихбиа. Победивший
язык окрестили АДА, в честь Огасты Ады Лавлейс. Язык АДА - прямой
наследник языка Паскаль. Он предназначен для создания и длительного
сопровождения больших программных систем, допускает возможность параллельной
обработки, управления процессами в реальном времени и многое другое, чего трудноилиневозможно достичь средствами более простых языков.
Большой отпечаток на
современное программирование наложил язык Си (первая версия - 1972
г.), являющийся очень популярным в среде разработчиков систем программного
обеспечения (включая операционные системы).
Си сочетает в себе черты как
языка высокого уровня, так и машинно-ориентированного языка, допуская
программиста ко всем машинным ресурсам, чего не обеспечивают такие языки, как
Бейсик и Паскаль.
Многие языки, первоначально
разработанные для больших и малых ЭВМ, в дальнейшем были приспособлены к
персональным компьютерам.
В течение многих лет
программное обеспечение строилось на основе операциональных и процедурных
языков, таких как Фортран, Бейсик, Паскаль, Ада, Си.
Однако по мере эволюции языков
программирования получили широкое распространение и другие, принципиально иные,
подходы к созданию программ.
Классическое операциональное
и/или процедурное программирование требует от программиста детального
описания того, как решать задачу, т.е. формулировки алгоритма и его специальной
записи. При этом ожидаемые свойства результата обычно не указываются. Основные
понятия языков этих групп - оператор и данные.
При процедурном подходе
операторы объединяются в группы - процедуры.
Структурное программирование
в целом не выходит за рамки этого направления, оно лишь дополнительно фиксирует
некоторые полезные приемы технологии программирования.
Другое направление в
программировании связано с методологиями непроцедурного программирования.
К ним можно отнести
объектно-ориентированное и декларативное программирование.
Объектно-ориентированный язык
создает окружение в виде множества независимых объектов. Каждый объект ведет
себя подобно отдельному компьютеру,их можно использовать для решения
задач как «черные ящики», не вникая во внутренние механизмы их функционирования.
Из языков объектного программирования, популярных среди профессионалов, следует
назвать прежде всего Си++, для более широкого круга программистов
предпочтительны среды типа Delphi
и Visual Basic.
Первым языком
программирования, в котором были предложены принципы объектной
ориентированности, был Симула (1967 год).
Си++
(англ. C++) — компилируемый строго типизированный язык программирования
общего назначения. Язык возник в начале 1980-х годов, когда сотрудник
фирмы Bell Laboratories Бьёрн Страуструп придумал ряд усовершенствований к языку
Си под собственные нужды. В 1998 году был ратифицирован международный
стандарт языка Си++.
Microsoft Visual Basic
— средство
разработки программного обеспечения, разрабатываемое корпорацией Microsoft и
включающее язык программирования и среду разработки. В мае 1991 — выпущен
Visual Basic 1.0 для Microsoft Windows.
Java
(на языке оригинала — английском — произносится) — объектно-ориентированный язык
программирования, разрабатываемый компанией Sun Microsystems и официально
выпущенный 23 мая 1995 года.
Delphi —
результат развития языка Турбо Паскаль. Название используется начиная с 7 версии
среды разработки, ранее это был Object Pascal, разработанный фирмой
Borland и изначально реализованный в её пакете Borland Delphi, от
которого и получил в 2003 году своё нынешнее название.
C#
(произносится си-шарп) — язык программирования, сочетающий
объектно-ориентированные и аспектно-ориентированные концепции. Разработан в
1998-2001 годах группой инженеров под руководством Андерса Хейлсберга в
компании Microsoft как основной язык разработки приложений для платформы
Microsoft .NET.
При использовании
декларативного языка программист указывает исходные информационные
структуры, взаимосвязи между ними и то, какими свойствами должен обладать
результат. При этом процедуру его получения («алгоритм») программист не строит
(по крайней мере, в идеале). В этих языках отсутствует понятие «оператор»
(«команда»).
Декларативные языки можно
подразделить на два семейства - логические (типичный представитель -
Пролог) и функциональные (Лисп).
Рисунок 137 – Классификация
языков программирования
Языки программирования
высокого уровня
Компью́терная програ́мма
— последовательность инструкций, предназначенная для исполнения устройством
управления вычислительной машины.
Языки программирования
– это формальные языки специально созданные для общения человека с компьютером.
Низкоуровневый язык
программирования
(язык программирования низкого уровня) — язык программирования, близкий к
программированию непосредственно в машинных кодах используемого реального или
виртуального процессора.
Язык программирования
высокого уровня —
язык программирования, разработанный для быстроты и удобства использования
программистом.
Основная черта высокоуровневых
языков — это абстракция, то есть введение смысловых конструкций, кратко
описывающих такие структуры данных и операции над ними, описания которых на
машинном коде (или другом низкоуровневом языке программирования) очень длинны и
сложны для понимания.
Использование разнообразных
трансляторов и интерпретаторов обеспечивает связь программ,
написанных при помощи языков высокого уровня, с различными операционными
системами и оборудованием, в то время как их исходный код остаётся, в идеале,
неизменным.
Трансля́тор —
программа или техническое средство, выполняющее трансляцию программы,
т.е. преобразование программы, представленной на одном из языков
программирования, в программу на другом языке и, в определённом смысле,
равносильную первой.
Интерпрета́тор
(языка программирования) — программа или техническое средство, выполняющее
интерпретацию, т.е. пооператорную (покомандную) обработку и
выполнение исходной программы или запроса.
Компиля́тор —
программа или техническое средство, выполняющее компиляцию, т.е.
трансляцию программы на язык, близкий к машинному.
Языки программирования
– это формальные языки специально созданные для общения человека с компьютером.
Каждый язык программирования имеет свои алфавит, грамматику, синтаксис и
семантику.
Алфавит
– фиксированный для данного языка набор основных символов, допускаемых для
составления текста программы на этом языке.
Синтаксис
– система правил, определяющих допустимые конструкции языка программирования из
букв алфавита.
Семантика
– система правил однозначного толкования отдельных языковыхконструкций,
позволяющих воспроизвести процесс обработки данных.
Взаимодействие синтаксических и
семантических правил определяют те или иные понятия языка (например, операторы,
идентификаторы, переменные, функции и процедуры, модули и т.д.).
Правила грамматики и семантики
для языков программирования должны быть явно, однозначно и четко сформулированы.
Языки программирования,
имитирующие естественные языки, обладающие укрупненными командами,
ориентированными на решение прикладных содержательных задач, называют языками
«высокого уровня».
Достоинства языков
программирования высокого уровня:
-алфавит языка
значительно шире машинного, что делает его гораздо более выразительным и
существенно повышает наглядность и понятность текста;
-набор операций,
допустимых для использования, не зависит от набора машинных операций, а
выбирается из соображений удобства формулирования алгоритмов решения задач
определенного класса;
-конструкции
команд (операторов) отражают содержательные виды обработки данных и задаются в
удобном для человека виде;
-используется
аппарат переменных и действия сними;
-поддерживается
широкий набор типов данных.
Интерпретация конструкций языка
программирования должна быть абсолютно однозначной, ибо фраза на языке
программирования превращается в машинный код автоматически, с помощью
программы-транслятора, и любой намек на неоднозначность либо делает эту фразу
непереводимой, либо приводит к ошибке.
Для строгого и точного описания
синтаксиса языкапрограммирования, как правило, используют специальные
метаязыки (языки для описания других языков).
Наиболее распространенные -
металингвистические формулы Бэкуса - Наура (язык БНФ) и синтаксические
диаграммы Вирта.
Язык БНФ
(язык нормальных форм) представляет компактную форму в виде некоторых формул,
похожих на математические.
Для каждого понятия языка
существует единственная метаформула (нормальная форма), состоящая из левой и
правой частей.
В левой части
указывается определяемое понятие, а в правой - задается множество
допустимых конструкций языка, которые объединяются в это понятие.
В формуле используют
специальные метасимволы в виде угловых скобок, в которых заключено определяемое
понятие (в левой части формулы) или ранее определенное понятие (в ее правой
части), а разделение левой и правой частей указывается метасимволом «::=»,
смысл которого эквивалентен словам «по определению есть».
Синтаксическая диаграмма
является графическим представлением значения метапеременной метаязыка. Диаграмма
состоит из основных символов или понятий языка.
Каждая диаграмма имеет входящую
и выходящую стрелки, означающие начало и конец синтаксической конструкции и
отражающие процесс ее чтения и анализа.
Из каждого элемента выходит
одна или несколько стрелок, оказывающих на те элементы, которые могут следовать
непосредственно за данным элементом.
<переменная>:: =
Запись эквивалентна метаформуле
<переменная>::= А|В.
Описанию грамматики
языка предшествует описание его алфавита.
Алфавит языков
программирования, как правило, связан с литерами клавиатуры печатной машинки.
Клавиатуры персональных компьютеров близки к ним по наличию литер.
Алфавиты большинства языков
программирования близки друг другу и основываются на буквах латинского алфавита,
арабских цифрах и общепринятых спецсимволах, таких как знаки препинания,
математических операций, сравнений и обозначений.
<буква>::= AaBbCcDdEeFf
и т.д.
<цифра>::= 0123456789
<знак арифметической операции
>::= */+-
<разделитель>::=.,;:()[]{}':=
<служебное
слово>:: = begin end if then
else
for next и т.д.
Оператор
- одно из ведущих понятий всех языков программирования. Каждый оператор
представляет собой законченную фразу языка и определяет однозначно трактуемый
этап обработки данных.
В соответствии с теорией
алгоритмов выделяют основные операторы языка: присвоения, условный и
безусловный переход, пустой оператор.
К производным, не
основным, относят составной оператор, оператор выбора, оператор цикла и оператор
присоединения.
Величины
могут быть постоянными и переменными. Величина характеризуется типом,
именем и значением. Наиболее распространенные типы величин - числовые,
символьные, логические.
Другая классификация величин -
простые и структурированные.
Простая величина
в каждый момент может иметь не более одного значения.
Структурированная величина,
имея одно имя, может иметь разом несколько значений. Эти значения представляют
собой элементы величины.
Важнейшие характеристики
структурированной величины:
-
упорядоченность (да
или нет),
-однородность
(да или нет),
-способ доступа
к элементам,
-
фиксированность числа элементов
(да или нет).
Имя программного объекта
называют идентификатором (от слова «идентифицировать»).
Многим слово «идентификатор» не
нравится, и в настоящее время чаще употребляют слово «имя», поскольку
<имя>::=<идентификатор>.
Описания
или объявления программных объектов связаны с правилами обработки данных.
Описательная часть языка
программирования является необходимой как для системных программистов -
разработчиков трансляторов, которые должны, в частности, проводить
синтаксическую и семантическую диагностику программ, - так и для «прикладного»
программиста, которому объявления программныхобъектов часто
облегчают процесс разработки и отладки программ.
Тип данных определяет:
1)множество значений,
2)набор операций, которые можно применять к
таким значениям и, возможно,
3)способ реализации хранения значений и
выполнения операций.
Список наиболее
употребительных обозначений типов данных, используемых в описаниях:
-Целый - Integer
-Вещественный
-
Real
-Логический -
Boolean
-Символьный -
Char
-Строковый -
String
-Массив -
Array
-Множество -
Set
-Файл - File
-Запись -
Record
-Объект -
Object
Переменная
- это программный объект, способный принимать некоторое значение с помощью
оператора присваивания. В ходе выполнения программы значения переменной могут
неоднократно изменяться. Каждая переменная после ее описания отождествляется с
некоторой ячейкой памяти, содержимое которой является ее значением.
Синтаксис
переменной, точнее, ее идентификатора, как правило, имеет вид:
<имя переменной>::=
——><буква>———>
—><буква>———>
—><цифра>——>
—><спецсимвол>
Функция
- это программный объект, задающий вычислительную процедуру определения
значения, зависимого от некоторых аргументов. Вводится в языки программирования
для задания программистом необходимых ему функциональных зависимостей.
Процедура
- это программный объект, представляющий некоторый самостоятельный этап
обработки данных.
Процедура имеет входные и
выходные параметры, называемые формальными.
При
использовании процедуры формальные параметры заменяются на фактические.
Модуль
(Unit)
-это специальная программная единица, предназначенная для создания
библиотек и разделения больших программ на логически связанные блоки.
Модуль - это набор констант,
типов данных, переменных, процедур и функций.
В состав модуля входят разделы:
заголовок, интерфейс, реализация, инициализация.
Из данных элементарных блоков
можно построить четыре блок-схемы, имеющих особое значение для практики
алгоритмизации.
Рисунок 138 –
Композиция,
Следование
Рисунок 139 –
Альтернатива,
Развилка
Рисунок 140 –
Цикл
с предусловием
Рисунок 141 –
Цикл
с постусловием
Часто очень удобно группировать
однотипные данные в последовательности - массивы, строки символов,
объединять разнотипные данные об одном и том же объекте в виде записей.
Массив
- это
последовательность, состоящая из фиксированного числа однотипных элементов. Все
элементы массива имеют общее имя (имя массива) и различаются индексами.
При решении задач на ЭВМ часто
возникает необходимость в использовании последовательностей символов. Такую
последовательность можно описать как массив символов, однако зачастую таких
целей имеется специальный тип – строка.
Запись
- это последовательность, состоящая из фиксированного числа величин разных
типов, называемых полями или компонентами записи.
Объектно-ориентированное
программирование
Объектно-ориентированное
программирование (ООП),
разработанное в середине 70-х гг. Керниганом и Риччи представляет собой
отображение объектов реального мира, их свойств (атрибутов) и связей между ними
при помощи специальных структур данных.
Структурное программирование
подразумевает наличие ряда встроенных структур данных: целых, вещественных и
строковых переменных, массивов, записей - при помощи которых и производится
отображение свойств объектов реального мира.
При объектно-ориентированном
подходе для объекта создается своя структура данных (класс), содержащая как
свойства объекта (поля), так и процедуры для управления объектом (методы).
Объе́ктно-ориенти́рованное
программи́рование (ООП)
— парадигма программирования, в которой основными концепциями являются понятия
объектов и классов.
Класс
— это тип, описывающий устройство объектов. Понятие «класс» подразумевает
некоторое поведение и способ представления. Понятие «объект» подразумевает
нечто, что обладает определённым поведением и способом представления.
Говорят, что
объект — это экземпляр класса. Класс можно сравнить с чертежом, согласно
которому создаются объекты. Обычно классы разрабатывают таким образом, чтобы их
объекты соответствовали объектам предметной области.
Класс
является описываемой на языке терминологии исходного кода моделью ещё не
существующей сущности, т. н. объекта.
Объект
— сущность, появляющаяся при создании экземпляра класса.
Класс в ООП - это абстрактный
тип данных, который включает в себя не только данные, но и функции и процедуры.
Данные класса – это атрибуты
(поля) класса.
Функции и процедуры класса
называются методами и содержат исходный код, предназначенный для
обработки внутренних данных объекта данного класса.
Рисунок 142 – Классы
Отношения между классами:
-Наследование
— объекты дочернего класса наследуют все свойства родительского класса.
-Ассоциация
— объекты классов вступают во взаимодействие между собой.
-Агрегация
— объекты одного класса входят в объекты другого.
-Композиция
— объекты одного класса входят в объекты другого и зависят друг от друга по
времени жизни.
-
Класс-Метакласс —
отношение, при котором экземплярами одного класса являются другие классы.
Основные понятия:
-Абстракция
данных. Объекты
представляют собою упрощенное, идеализированное описание реальных сущностей
предметной области. Если соответствующие модели адекватны решаемой задаче, то
работать с ними оказывается намного удобнее, чем с низкоуровневым описанием всех
возможных свойств и реакций объекта.
-Инкапсуляция
- это принцип, согласно которому любой класс должен рассматриваться как
чёрный ящик - пользователь класса должен видеть и использовать только
интерфейсную часть класса (т. е. список декларируемых свойств и методов класса)
и не вникать в его внутреннюю реализацию. Поэтому данные принято инкапсулировать
в классе таким образом, чтобы доступ к ним по чтению или записи осуществлялся не
напрямую, а с помощью методов.
-Наследованием
называется возможность порождать один класс от другого с сохранением всех
свойств и методов класса-предка (прародителя, иногда его называют суперклассом)
и добавляя, при необходимости, новые свойства и методы. Набор классов, связанных
отношением наследования, называют иерархией.
-Полиморфизмом
называют явление, при котором функции (методу) с одним и тем же именем
соответствует разный программный код (полиморфный код) в зависимости от того,
объект какого класса используется при вызове данного метода. Полиморфизм
обеспечивается тем, что в классе-потомке изменяют реализацию метода
класса-предка с обязательным сохранением сигнатуры метода. Это
обеспечивает сохранение неизменным интерфейса класса-предка и позволяет
осуществить связывание имени метода в коде с разными классами — из объекта
какого класса осуществляется вызов, из того класса и берётся метод с данным
именем.
Часть языков (иногда называемых
«чисто объектными») целиком построена вокруг объектных средств — в них
любые данные (возможно, за небольшим числом исключений в виде встроенных
скалярных типов данных) являются объектами, любой код — методом какого-либо
класса и невозможно написать программу, в которой не использовались бы объекты.
Примеры подобных языков — Java или Ruby.
Другие языки (иногда
используется термин «гибридные») включают ООП-подсистему в исходно процедурный
язык. В них существует возможность программировать, не обращаясь к объектным
средствам. Классические примеры — C++ и Delphi Pascal.
Java - объектно-ориентированный язык
программирования, разрабатываемый компанией Sun Microsystems и официально
выпущенный 23 мая 1995 года. Java — так называют не только сам язык, но и
платформу для создания приложений уровня предприятий на основе данного языка.
Программы на Java
транслируются в байт-код, выполняемый виртуальной java-машиной (JVM) —
программой, обрабатывающей байтовый код и передающей инструкции оборудованию как
интерпретатор, но с тем отличием, что байтовый код, в отличие от текста,
обрабатывается значительно быстрее.
JDK (Java Development Kit)
- средство
разработки на Java
JRE (Java
Runtime Environment)
- среда выполнения
Java. Минимальная
реализация виртуальной машины, необходимая для исполнения Java-приложений, без
средств разработки.
Достоинство подобного способа
выполнения программ — в полной независимости байт-кода от ОС и оборудования, что
позволяет выполнять Java-приложения на любом устройстве, которое поддерживает
виртуальную машину.
Другой важной особенностью
технологии Java является гибкая система безопасности благодаря тому, что
исполнение программы полностью контролируется виртуальной машиной. Любые
операции, которые превышают установленные полномочия программы вызывают
немедленное прерывание.
Это позволяет пользователям
загружать программы, написанные на Java, на их компьютеры (или другие
устройства, например, мобильные телефоны) из неизвестных источников, при этом не
опасаясь заражения вирусами, пропажи ценной информации, и т. п.
Прикладное программирование
(application programming) -
разработка и отладка программ для конечных пользователей, например
бухгалтерских, обработки текстов.
Прикладное ПО представляет собой
распространенный класс программных продуктов, представляющий наибольший интерес
для пользователя.
Прикладное ПО предназначено для
решения повседневных задач обработки информации:
Системное программирование
(или программирование систем) – род деятельности, заключающийся в работе
над системным программным обеспечением.
Результатом прикладного
программирования является выпуск программного обеспечения, предлагающего
определённые услуги пользователям (например, текстовый процессор). В то время
как результатом системного программирования является выпуск программного
обеспечения, предлагающего сервисы по взаимодействию с аппаратным обеспечением
(например, дефрагментация жёсткого диска), что подразумевает сильную зависимость
таких программ от аппаратной части.
В частности выделим следующее:
1.программист должен учитывать специфику
аппаратной части и другие свойства системы в которой функционирует программа,
использовать эти свойства, например, применяя специально оптимизированный для
данной архитектуры алгоритм.
2.обычно используется низкоуровневый язык
программирования или такой диалект языка программирования, который
-позволяет
функционирование в окружении с ограниченным набором системных ресурсов
-работает
максимально эффективно и имеет минимальное запаздывание по времени завершения
-имеет маленькую
библиотеку времени выполнения (RTL) или не имеет её вообще
-позволяет прямое
управление (прямой доступ) к памяти и управляющей логике
-позволяет делать
ассемблерные вставки в код
3.отладка
программы может быть затруднена при невозможности запустить её в отладчике из-за
ограничений на ресурсы, поэтому может применяться компьютерное моделирование для
решения этой проблемы.
Системное программирование
существенно отличается от прикладного, что обычно приводит к специализации
программиста в одном из них. Часто, для системного программирования доступен
ограниченный набор средств. Например, использование автоматической сборки мусора
довольно редкое явление и отладка обычно сложна.
Изначально системные
программисты писали на языке ассемблера. Далее язык программирования Си,
сыгравший значительную роль в создании UNIX, завоевал большую популярность и
распространился повсеместно к 1980-м годах.
В настоящее время (2006)
некоторое применение нашлось для встраиваемого C++. Реализация основных
частей в операционной системе и при использовании сетей нуждается в
разработчиках системного ПО. Например, реализация постраничности (через
виртуальную память) или драйверы устройств.