Какие программы называются инструментальными. Инструментальное по Виды инструментальных программ

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

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

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

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

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


Рис. 4.1.

Первым значительным шагом был переход к языку ассемблера ( assembly language , или assembler ). Не очень заметный, казалось бы, шаг – переход к символическому кодированию машинных команд – имел на самом деле огромное значение . Программисту не надо было больше вникать в хитроумные способы кодирования команд на аппаратном уровне. Более того, зачастую одинаковые по сути команды кодировались различным образом в зависимости от своих параметров.

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

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

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

В 1954 году в корпорации IBM группой разработчиков во главе с Джоном Бэкусом (John Backus) был создан язык программирования Fortran. Значение этого события трудно переоценить. Это первый язык программирования высокого уровня. Впервые программист мог по -настоящему абстрагироваться от особенностей машинной архитектуры. Ключевой идеей, отличающей новый язык от ассемблера, была концепция подпрограмм.

Напомним, что это современные компьютеры поддерживают подпрограммы на аппаратном уровне, предоставляя соответствующие команды и структуры данных ( стек ) прямо на уровне ассемблера, а в 1954 же году это было совершенно не так. Поэтому компиляция Fortran"а была процессом отнюдь не тривиальным. Кроме того, синтаксическая структура языка была достаточно сложна для машинной обработки, в первую очередь , из-за того, что пробелы как синтаксические единицы вообще не использовались. Это порождало массу возможностей для скрытых ошибок.

Язык Фортран использовался (и используется сейчас) для научных вычислений. Он страдает от отсутствия многих привычных языковых конструкций и атрибутов, компилятор практически никак не проверяет синтаксически правильную программу с точки зрения семантической корректности (соответствие типов и др.). В нем нет поддержки современных способов структурирования кода и данных. Это осознавали и сами разработчики. По признанию самого Бэкуса, перед ними стояла задача скорее разработки компилятора, чем языка. Понимание самостоятельного значения языков программирования пришло позже.

Появление Фортрана было встречено еще большей критикой, чем внедрение ассемблера. Программистов пугало снижение эффективности программ за счет использования промежуточного звена в виде компилятора. И эти опасения имели под собой основания: действительно, хороший программист, скорее всего, при решении какой-либо небольшой задачи вручную напишет код, работающий быстрее, чем код, полученный как результат компиляции. Через некоторое время пришло понимание того, что реализация больших проектов невозможна без применения языков высокого уровня. Мощность вычислительных машин росла, и с тем падением эффективности, которое раньше считалось угрожающим, стало возможным смириться. Преимущества же языков высокого уровня стали настолько очевидными, что побудили разработчиков к созданию новых языков, все более и более совершенных.

Вторым в истории высокоуровневым языком программирования стал Lisp . Он использовался и по сей день используется в основном для разрешения сложных задач. Датой рождения Лиспа был 1958 год, известность к нему пришла чуть позже. В 1960 в журнале Communications of the ACM вышла статья Джона Маккарти (автора Лиспа) с подробным описанием нового языка. Он стал отцом не только Лиспа, но и основоположником всего функционального программирования. Язык Lisp – язык для обработки списков. Получил достаточно широкое распространение в системах искусственного интеллекта. Имеет несколько потомков: Planner (1967), Scheme (1975), Common Lisp (1984). Многие его черты были унаследованы современными языками функционального программирования.

В 1960 году в США был создан язык программирования Cobol. Он был рассчитан специально для создания коммерческих приложений. На Коболе написаны тысячи прикладных коммерческих систем. Отличительной особенностью языка является возможность эффективной работы с большими массивами данных, что характерно именно для коммерческих приложений. Популярность Кобола столь высока, что даже сейчас, при всех его недостатках ( по структуре и замыслу Кобол во многом напоминает Фортран), появляются новые его диалекты и реализации. Так, недавно появилась реализация Кобола, совместимая с Microsoft . NET , что потребовало, вероятно, внесения в язык некоторых черт объектно-ориентированного языка.

В 1960 году командой во главе с Петером Науром (Peter Naur) был создан язык программирования Algol . Этот язык дал начало целому семейству алголоподобных языков (важнейший представитель – Pascal ). В 1968 году появилась новая версия языка – Algol 68. Она не нашла столь широкого практического применения, как первая версия, но была весьма популярна в кругах теоретиков. Язык был достаточно интересен, так как обладал многими уникальными на тот момент характеристиками.

К середине 60-х годов прошлого века в США резко возросла потребность в обучении программированию не только специалистов в области вычислительной техники, но и широкого круга пользователей. Это было связано с резким увеличением количества компьютеров в бизнесе. Два профессора Дартмутского колледжа – Томас Курт и Джон Кемени – для обучения студентов программированию создали язык Бейсик ( BASIC ). Свое название язык получил по первым буквам английских слов " Beginner "s All-purpose Symbolic Instruction Code" – универсальный код символических инструкций для начинающих.

Есть и другой перевод – базовый, основной, что хорошо соответствовало сложившемуся положению дел в программировании для бизнеса. Язык предназначался для обучения программированию и получил широкое распространение в виде различных диалектов, прежде всего, как язык для домашних микрокомпьютеров. Впоследствии большая часть критики этого языка строилась на том, что после Basic "а нормально программировать человек не может, и исправить это уже не удастся. Как бы то ни было, в 1963 г. язык был создан и получил имя Dartmouth BASIC .

Настоящую популярность этот язык получил в 1975 году. Тогда Microsoft (в то время только два человека – Билл Гейтс и Пол Аллен) написали интерпретатор бейсика для компьютеров Altair 8800, названный Altair BASIC . Язык стремительно разветвился на множество диалектов. Например, Apple II базировался на одной из его версий, а для операционной системы CP/M был написан BASIC -80. Заметим, что второе (или даже третье) дыхание развитию Basic дал опять же Microsoft. Произошло это в начале 90-х годов прошлого столетия, когда был выпущен Visual Basic , уже совсем не похожий на своего предка.

В 1964 году же корпорация IBM создала язык PL/1 , который был призван заменить Cobol и Fortran в большинстве приложений. Язык обладал исключительным богатством синтаксических конструкций. В нем впервые появилась обработка исключительных ситуаций и поддержка параллелизма. Надо заметить, что синтаксическая структура языка была крайне сложной. Пробелы уже использовались как синтаксические разделители, но ключевые слова не были зарезервированы. В силу таких особенностей разработка компилятора для PL/1 была исключительно сложным делом. Язык так и не стал популярен вне мира IBM , однако широко использовался в бывшем Советском Союзе и странах социалистического содружества. Причина этого заключается в производстве этими странами ряда программно совместимых моделей компьютеров ЕС ЭВМ, которые практически были скопированы с компьютеров IBM /360.

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

В 1970 году Никлаус Вирт создал язык программирования Pascal . Язык замечателен тем, что это первый широко распространенный язык для структурного программирования (первым был Алгол , но он не получил столь широкого распространения). Впервые оператор безусловного перехода перестал играть основополагающую роль при управлении порядком выполнения операторов. В этом языке также внедрена строгая проверка типов, что позволило выявлять многие ошибки на этапе компиляции.

Отрицательной чертой языка было отсутствие в нем средств для разбиения программы на модули. Вирт осознавал это и разработал язык Modula-2 (1978), в котором идея модуля стала одной из ключевых концепций языка. В 1988 году появился язык Modula-3, в котором были добавлены объектно-ориентированные черты. Логическим продолжением Pascal и Modula являются язык Oberon и Oberon -2. Они характеризуются движением в сторону объектной и компонентной ориентированности. В этом плане интересно рассмотреть С-подобные языки.

В 1972 году Керниганом и Ритчи был создан язык программирования C . Он создавался как язык для разработки операционной системы UNIX . Язык С часто называют "переносимым ассемблером", имея в виду то, что он позволяет работать с данными практически так же эффективно, как на ассемблере, предоставляя при этом структурированные управляющие конструкции и абстракции высокого уровня (структуры и массивы). Именно с этим связана его огромная популярность и поныне. И именно это является его ахиллесовой пятой. Компилятор C очень слабо контролирует типы, поэтому очень легко написать внешне совершенно правильную, но логически ошибочную программу.

В 1986 году Бьярн Страуструп создал первую версию языка C++, добавив в язык C объектно-ориентированные черты, взятые из Simula (см. ниже), и исправив некоторые ошибки и неудачные решения языка. C++ продолжает совершенствоваться и в настоящее время, так в 1998 году вышла новая (третья) версия стандарта, содержащая в себе некоторые довольно существенные изменения. Язык стал основой для разработки современных больших и сложных проектов. У него имеются, однако же, и слабые стороны, вытекающие из требований эффективности.

В 1995 году в корпорации Sun Microsystems Кеном Арнольдом и Джеймсом Гослингом был создан язык Java . Он наследовал синтаксис C и C++ и был избавлен от некоторых неприятных черт последнего. Отличительной особенностью языка является компиляция в код некоей абстрактной машины, для которой затем пишется эмулятор ( Java Virtual Machine ) для реальных систем. Кроме того, в Java нет указателей и множественного наследования, что сильно повышает надежность программирования.

В 1998–2001 годах в корпорации Microsoft группой инженеров под руководством Андерса Хейлсберга в компании был создан язык C#. Он в достаточной степени схож с Java (и задумывался как альтернатива последнему), но имеет и отличительные особенности. Язык C# ориентирован, в основном, на разработку многокомпонентных интернет -приложений. Это основной язык разработки приложений для платформы Microsoft. NET . Компилятор с C# входит в стандартную установку самой. NET , поэтому программы на нем можно создавать и компилировать даже без инструментальных средств, вроде Visual Studio.

В 1983 году под эгидой Министерства обороны США был создан язык Ada . Он замечателен тем, что очень много ошибок может быть выявлено на этапе компиляции. Кроме того, поддерживаются многие аспекты программирования, которые часто отдаются на откуп операционной системе ( параллелизм , обработка исключений ). В 1995 году был принят стандарт языка Ada 95, который развивает предыдущую версию, добавляя в нее объектную ориентированность и исправляя некоторые неточности. Оба этих языка не получили широкого распространения вне военных и прочих крупномасштабных проектов (авиация, железнодорожные перевозки). Основной причиной является сложность освоения языка и достаточно громоздкий синтаксис (значительно более громоздкий, чем Pascal ).

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

В 1957 году была предпринята попытка создания языка для описания математической обработки данных. Язык был назван APL ( Application Programming Language ). Его отличительной особенностью было использование математических символов (что затрудняло применение на текстовых терминалах; появление графических интерфейсов сняло эту проблему) и очень мощный синтаксис , который позволял производить множество нетривиальных операций прямо над сложными объектами, не прибегая к разбиению их на компоненты. Широкому применению помешало, как уже отмечалось, использование нестандартных символов как элементов синтаксиса.

В 1962 году появился язык Snobol (а в 1974 – его преемник Icon ), предназначенный для обработки строк. Синтаксис Icon напоминает С и Pascal одновременно. Отличие заключается в наличии мощных встроенных функций работы со строками и связанная с этими функциями особая семантика . Современным аналогом Icon и Snobol является Perl –язык обработки строк и текстов, в который добавлены некоторые объектно-ориентированные возможности. Считается очень практичным языком, однако ему недостает элегантности.

В 1969 году был создан язык SETL – язык для описания операций над множествами. Основной структурой данных в языке является множество, а операции аналогичны математическим операциям над множествами. Язык полезен при написании программ, имеющих дело со сложными абстрактными объектами.

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

Язык JavaScript был создан в компании Netscape Communications в качестве языка для описания сложного поведения веб-страниц. Первоначально язык назывался LiveScript, причиной смены названия послужили маркетинговые соображения. Он интерпретируется браузером во время отображения веб-страницы, по синтаксису похож на Java и (отдаленно) на C/C++. Язык имеет возможность использовать встроенную в браузер объектную функциональность, однако подлинно объектно-ориентированным языком не является.

Другой скриптовый язык VBScript был создан в корпорации Microsoft во многом в качестве альтернативы JavaScript. Имеет подобную область применения, синтаксически похож на язык Visual Basic (является усеченной версией последнего); так же, как и JacaScript, исполняется браузером при отображении веб-страниц и имеет ту же степень объектной ориентированности.

Язык Perl, нашедший применение для динамической генерации веб-страниц на веб-серверах, создавался в помощь системному администратору операционной системы Unix для обработки различного рода текстов и выделения нужной информации. Развился до мощного средства работы с текстами. Является интерпретируемым языком и реализован практически на всех существующих платформах. Интерпретируемый объектно-ориентированный язык программирования Python по структуре и области применения близок к Perl, однако менее распространен и более строг и логичен. Имеются реализации для большинства существующих платформ.

Интересно рассмотрение группы ранних объектно-ориентированных языков. Объектно-ориентированный подход , пришедший на смену структурному, впервые появился отнюдь не в C++, как полагают некоторые. Существует целая череда чистых объектно-ориентированных языков, без сведений о которых наш обзор был бы неполным. Первым объектно-ориентрованным языком был язык Simula (1967). Этот язык был предназначен для моделирования различных объектов и процессов, и объектно-ориентированные черты появились в нем именно для описания свойств модельных объектов.

Популярность объектно-ориентированному программированию принес язык Smalltalk, созданный в 1972 году. Язык предназначался для проектирования сложных графических интерфейсов и был первым понастоящему объектно-ориентированным языком. В нем классы и объекты – это единственные конструкции программирования. Недостатком Smalltalk являются большие требования к памяти и низкая производительность полученных программ. Причина – в не очень удачной реализацией объектно-ориентированных особенностей. Популярность языков C++ и Ada 95 связана именно с тем, что объектная ориентированность реализована без существенного снижения производительности.

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

Большинство компьютерных архитектур и языков программирования ориентированы на последовательное выполнение операторов программы. В настоящее время существуют программно-аппаратные комплексы, позволяющие организовать параллельное выполнение различных частей одного и того же вычислительного процесса. Для программирования таких систем необходима специальная поддержка со стороны средств программирования, в частности, языков программирования. Некоторые языки общего назначения содержат в себе элементы поддержки параллелизма, однако программирование истинно параллельных систем требует подчас специальных приемов .

Язык Оccam был создан в 1982 году и предназначен для программирования транспьютеров – многопроцессорных систем распределенной обработки данных. Он описывает взаимодействие параллельных процессов в виде каналов – способов передачи информации от одного процесса к другому. Отметим особенность синтаксиса языка Occam – в нем последовательный и параллельный порядки выполнение операторов равноправны, и их необходимо явно указывать ключевыми словами PAR и SEQ.

В 1985 году была предложена модель параллельных вычислений Linda. Основной ее задачей является организация взаимодействия между параллельно выполняющимися процессами. Это достигается за счет использования глобальной кортежной области ( tuple space ). Процесс может поместить туда кортеж с данными (то есть совокупность нескольких, возможно, разнородных данных), а другой процесс может ожидать появления в кортежной области некоторого кортежа и, после его появления, прочитать кортеж с возможным последующим его удалением.

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

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

Из языков с энергичной семантикой упомянем ML и два его современных диалекта – Standard ML ( SML ) и CaML. Последний имеет объектно-ориентированного потомка – Objective CaML (O"CaML). Среди языков с ленивой семантикой наиболее распространены два: Haskell и его более простой диалект Clean. Интересен язык функционального программирования F#. Он является языком мультипарадигменного программирования. На нем можно писать функциональный, императивный и объектно-ориентированный код. Это позволяет быть более прагматичным, вместо того чтобы пытаться загнать любую задачу, стоящую перед разработчиком, в прокрустово ложе классов и интерфейсов. Язык F# включен в стандартный набор Visual Studio 2010, хотя присутствует и сейчас, в виде плагина для VS2008.

Window. Программировать на нем увлекательно. Этот язык рушит многие барьеры, связанные с программированием, и позволяет сконцентрироваться на написании кода, который нужен разработчику.

Важно отметить, что F# поддерживает почти все возможности, которые есть у C#. Поэтому его можно использовать, не опасаясь принципа "все или ничего". Не нужно выбрасывать существующий код и переводить все на F#. Вообще, предполагается, что код на F# будет главным образом применяться как библиотеки классов, интегрированные в большой программный продукт .

Программы на языках логического программирования выражены как формулы математической логики, а компилятор пытается получить следствия из них. Родоначальником большинства языков логического программирования является язык Prolog (1971). У него есть ряд потомков – Parlog (1983, ориентирован на параллельные вычисления), Delta Prolog и др.

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

В заключение раздела можно выделить некоторую общую тенденцию в развитии языков программирования. Языки развиваются в сторону все большей и большей абстракции. И это сопровождается падением эффективности. Вопрос: а стоит ли этого абстракция ? Ответ: стоит, так как повышение уровня абстракции влечет за собой повышение уровня надежности программирования. С низкой эффективностью можно бороться путем создания более быстрых компьютеров. Если требования к памяти слишком высоки, можно увеличить ее объем. Это требует времени и средств, но это решаемо. А вот с ошибками в программах можно бороться только одним способом: их надо исправлять. Еще лучше – не совершать. А еще лучше – максимально затруднить их совершение. И именно на это направлены все исследования в области языков программирования.

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

Компиляторы

Трансляторы

Ассемблеры

Интерпретаторы

Компоновщики

Отладчики

Средства автоматизированного тестирования программ

Генераторы документации

Комплект средств разработки (SDK)

Системы управления версиями

Системы программирования и интегрированные среды разработки программ

Системы автоматизации программирования (CASE)

Компилятор – это программное средство для перевода программ, написанных на каком-либо языке программирования, в программы, представленные в двоичных машинных кодах. Компиляторы делятся на три вида – трансляторы, ассемблеры и интерпретаторы.

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

Интерпретатор – это компилятор, который построчно (или по одной команде) переводит исходную программу на языке программирования в двоичные коды и тут же передает этот двоичный код процессору на выполнение.

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

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

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

Генератор документации – программа или пакет программ, позволяющая получать документацию, предназначенную для программистов (документация на API) и/или для конечных пользователей системы, по особым образом комментированному исходному коду и, в некоторых случаях, по исполняемым модулям (полученным на выходе компилятора). Обычно, генератор анализирует исходный код программы, выделяя синтаксические конструкции, соответствующие значимым объектам программы (типам, классам и их членам/свойствам/методам, процедурам/функциям и т. п.). В ходе анализа также используется метаинформация об объектах программы, представленная в виде документирующих комментариев . На основе всей собранной информации формируется готовая документация, как правило, в одном из общепринятых форматов – HTML, HTMLHelp, PDF, RTF и других.

Комплект средств разработки (SDK, Software Development Kit ) или «devkit» – набор программ и библиотек подпрограмм, позволяющий специалистам по программному обеспечению создавать приложения для определённого пакета программ, программного обеспечения базовых средств разработки, аппаратной платформы, компьютерной системы, видеоигровых консолей, операционных систем и прочих платформ. Программист, как правило, получает SDK непосредственно от разработчика целевой технологии или системы. Часто SDK распространяется через Интернет. Многие SDK распространяются бесплатно для того, чтобы поощрить разработчиков использовать данную технологию или платформу.

Система управления версиями (Version Control System, VCS или Revision Control System ) - программное обеспечение для облегчения работы с изменяющейся информацией. Система управления версиями позволяет хранить несколько версий одного и того же документа, при необходимости, возвращаться к более ранним версиям, определять, кто и когда сделал то или иное изменение и многое другое. Такие системы наиболее широко применяются при разработке программного обеспечения, для хранения исходных кодов разрабатываемой программы. Однако, они могут с успехом применяться и в других областях, в которых ведётся работа с большим количеством непрерывно изменяющихся электронных документов.

Интегрированная среда разработки (ИСР) (Integrated development environment, IDE ) – система программных средств, используемая для разработки программного обеспечения. Обычно среда разработки включает в себя текстовый редактор, компилятор и/или интерпретатор, средства автоматизации сборки и отладчик. Иногда также содержит средства для интеграции с системами управления версиями и разнообразные инструменты для упрощения конструирования графического интерфейса пользователя. Многие современные среды разработки также включают браузер классов , инспектор объектов и диаграмму иерархии классов - для использования при объектно-ориентированной разработке ПО. Хотя и существуют среды разработки, предназначенные для нескольких языков - такие как Eclipse, NetBeans, Embarcadero RAD Studio или Microsoft Visual Studio, обычно среда разработки предназначается для одного определённого языка программирования - как например, Visual Basic, Delphi, Dev-C++. Частный случай ИСР - среды визуальной разработки, которые включают в себя возможность визуального редактирования интерфейса программы. Иногда ИСР называют «система программирования» , хотя в большинстве случаях ИСР охватывает расширенный спектр функций и возможностей.

Системы автоматизации программирования (Computer-Aided System Engineering , CASE ) – программный комплекс, автоматизирующий весь технологический процесс анализа, проектирования, разработки, кодирования, отладки и сопровождения сложных программных систем. Основное достоинство CASE-технологии – это поддержка коллективной работы над проектом за счет возможности работы в локальной и глобальной сети разработчиков, экспорта(импорта) любых фрагментов проекта, организованного управления программами. Как правило, CASE-системы поддерживают автоматическую кодогенерацию программ – создание каркаса программой системы и создание полного продукта с системной документацией.

Прикладное программное обеспечение

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

Проблемно-ориентированные программы

Системы автоматизированного проектирования(САПР)

ПО для автоматизированных систем управления

Программы общего назначения

Офисные системы

Интеллектуальные системы

Программные системы мультимедиа

Настольные издательские системы

Проблемно-ориентированные программы предназначены для решения прикладных задач, связанных с производственной деятельностью человека, например:

Программы бухгалтерского учета;

Программы финансовой деятельности;

Программы управления персоналом;

Программы управления предприятием;

Банковские информационные и автоматизированные системы;

Автоматизированные рабочие места на предприятии;

Системы автоматизированного проектирования (CAD System - Computer Aided Design System ) предназначены для поддержки работы конструкторов, технологов, электриков и электронщиков, архитекторов и других специалистов, связанных с разработкой чертежей, схем, моделей, графическим моделированием, конструированием. Системы такого класса очень требовательны к аппаратному обеспечению ЭВМ, быстродействию, памяти. Существенно наличие библиотек встроенных функций, объектов, интерфейсов с графическими системами и базами данных.

В САПР принято выделять семь видов обеспечения:

Техническое (ТО), включающее различные аппаратные средства (ЭВМ, периферийные устройства, сетевое коммутационное оборудование, линии связи, измерительные средства);

Математическое (МО), объединяющее математические методы, модели и алгоритмы для выполнения проектирования;

Программное (ПО), представляемое компьютерными программами САПР;

Информационное (ИО), состоящее из баз данных (БД), систем управления базами данных (СУБД), а также других данных, используемых при проектировании. Вся совокупность используемых при проектировании данных называется информационным фондом САПР, а БД вместе с СУБД носит название банка данных (БнД);

Лингвистическое (ЛО), выражаемое языками общения между проектировщиками и ЭВМ, языками программирования и языками обмена данными между техническими средствами САПР;

Методическое (МетО), включающее различные методики проектирования, иногда к МетО относят также математическое обеспечение;

Организационное (ОО), представляемое штатными расписаниями, должностными инструкциями и другими документами, регламентирующими работу проектного предприятия.

По области применения можно выделить следующие группы САПР:

САПР для применения в отраслях общего машиностроения. Их часто называют машиностроительными САПР или MCAD (Mechanical CAD) системами;

САПР для радиоэлектроники. Их названия - ECAD (Electronic CAD) или EDA (Electronic Design Automation) системы.

САПР в области архитектуры и строительства.

Кроме того, известно большое число более специализированных САПР, или выделяемых в указанных группах, или представляющих самостоятельную ветвь в классификации. Примерами таких систем являются САПР больших интегральных схем (БИС); САПР летательных аппаратов; САПР электрических машин и т.п.

Поцелевому назначению различают САПР или подсистемы САПР, обеспечивающие разные аспекты проектирования. Так, в составе MCAD появляются CAE/CAD/CAM системы:

САПР функционального проектирования, иначе САПР-Ф или CAE (Computer Aided Engineering) системы.

Конструкторские САПР общего машиностроения - САПР-К, часто называемые просто CAD системами;

Технологические САПР общего машиностроения - САПР-Т, иначе называемые автоматизированными системами технологической подготовки производства АСТПП или системами CAМ (Computer Aided Manufacturing).

Автоматизированная система управления(АСУ) - комплекс аппаратных и программных средств, предназначенный для управления различными процессами в рамках технологического процесса, производства, предприятия. АСУ применяются в различных отраслях промышленности, энергетике, транспорте и т. п. Термин автоматизированная, в отличие от термина автоматическая подчеркивает сохранение за человеком-оператором некоторых функций, связанных с заданием цели, принятием решения, либо с выполнением некоторых функций, не поддающихся автоматизации.

Наиболее всего известны следующие классы АСУ:

Автоматизированная система управления технологическим процессом (АСУ ТП) - решает задачи оперативного управления и контроля техническими объектами в промышленности, энергетике, на транспорте;

Автоматизированная система технической(технологической) подготовкой производства (АСТПП) – система связанная с организацией технических процессов, которые существуют или только появляются на производстве, основанные на программировании станков с числовым программным управлением, изготовлением и сборкой программно-управляемых роботов и т.п.

Автоматизированная система управления производством (АСУ П) – решает задачи организации производства, включая основные производственные процессы, входящую и исходящую логистику. Осуществляет краткосрочное планирование выпуска с учётом производственных мощностей, анализ качества продукции, моделирование производственного процесса. Для решения этих задач применяются MIS и MES-системы, а также LIMS-системы.

Автоматизированная система управления предприятием (АСУП) - для решения этих задач применяются MRP,MRP II и ERP-системы. Например, если предприятием является высшее учебное заведение, имеет место АСУ ВУЗ.

В качестве примера наиболее известных АСУ можно выделить:

Автоматизированная система управления дорожным движением или АСУД - предназначена для управления транспортных средств и пешеходных потоков на дорожной сети города или автомагистрали;

Автоматизированная система управления уличным освещением («АСУ УО») - предназначена для организации автоматизации централизованного управления уличным освещением;

«Автоматизированная система управления» для гостиниц;

Автоматизированная система контроля проезда (АСКП) в общественном транспорте г.Москвы и др.

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

К группе программ общего назначения можно отнести:

Системы управления базами данных (СУБД)

Серверы БД

Генераторы отчетов

Текстовые процессоры

Табличные процессоры

Средства презентационной графики

Интегрированные пакеты

Методо-ориентированные программы

Системы управления базами данных (СУБД) – обеспечивают организацию и хранение локальных БД на автономно работающих компьютерах либо централизованное хранение БД на файл-сервере и сетевой доступ к ним. В современных СУБД содержатся элементы CASE-технологии процесса проектирования, в частности:

Визуализация схем баз данных;

Автоматическая поддержка целостности БД при различных видах обработки (включение, удаление, модификация);

Наличие так называемых мастеров, обеспечивающих поддержку процесса проектирования;

Шаблоны и прототипы структур БД, отчетов форм и т.д.

Серверы БД – это ПО, предназначенное для создания и использования при работе в сети интегрированных БД в архитектуре клиент-сервер.

Многопользовательские СУБД в сетевом варианте обработки информации хранят данные на файл-сервере, специально выделенном компьютере, но сама обработки ведется на рабочих станциях.

Общим для различных видов БД является использование реляционного языка SQL (Structured Query Language) для реализации запросов к данным.

Генераторы отчетов (серверы отчетов) обеспечивают реализацию запросов и формирование отчетов в печатном или экранном виде в условиях сети с архитектурой клиент-сервер. Сервер отчетов подключается к серверу БД, используя драйверы сервиса БД (Crystal Reports, Profit for windows).

Текстовые процессоры предназначены для работы с текстовыми документами. Развитием данного направления являются издательские системы Microsoft Word).

Табличные процессоры являются удобной средой для вычислений, которая содержит средства деловой графики, средства специализированной обработки (Microsoft Excel).

Средства презентационной графики – это специализированные программы, предназначенные для создания изображений и их показ на экране, подготовка слайд-фильмов, мультфильмов и их проектирования (Microsoft PowerPoint, Flash).

Интегрированные пакеты – это набор нескольких программных продуктов, функционально дополняющих друг друга, поддерживающих единые информационные технологии, реализованные на единой операционной вычислительной платформе (Microsoft Office).

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

Методо-ориентированные ППП обеспечивают, независимо от предметной области и функции информационных систем, математические, статистические и другие методы решения задач. Наиболее распространены методы математического программирования, решения дифференциальных уравнений, имитационного моделирования, исследования операций (Storm, SYSTAT, SAS и др.)

Офисные ППП обеспечивают организационное управление деятельностью офиса.

В разряд офисных ППП входят:

Органайзеры (планировщики) – ПО для планирования рабочего времени, составления протоколов встреч, расписаний, ведения записей и телефонной книжки (калькулятор, записная книжка, часы, календарь и т.п.)

Программы-переводчики, средства проверки орфографии, распознавание текста (Tiger – система распознавания русского языка, Stylus Lingvo Office, содержащий Fine Reader, Stylus for Windows – переводчик на указанный язык, корректор орфографии Lingvo Corrector и резидентный словарь Lingvo)

Коммуникационные пакеты, предназначенные для организации взаимодействия пользователей с удаленными абонентами или информационными ресурсами сети (ICQ и др.)

Браузеры, средства создания WWW-страниц

Средства электронной почты (Pegasys Mail)

Настольные издательские системы – это широкий класс ПО, который реализует основные компоненты издательской деятельности.

Данный класс ПО включает программы, обеспечивающие:

Форматирование и редактирование текстов

Автоматическую разбивку текста на страницы

Компьютерную верстку печатной страницы

Монтирование графики

Подготовку иллюстраций

Подготовку оригинал-макета

К настольным издательским системам относятся:

PhotoShop for Windows

Программные средства мультимедиа . Основное значение данных программных средств – создание и использование аудио- и видеоинформации для расширения информационного пространства пользователя (различные БД компьютерных произведений искусства, видеотеки, медиатеки, библиотеки звуковых записей и т.д.)

Системы искусственного интеллекта:

Программы-оболочки для создания экспертных систем путем наполнения баз знаний и правил логического вывода

Готовые экспертные системы для принятия решений в рамках определенных предметных областей

Системы анализа и распознавания речи, текста и т.п.

Под интеллектуальными системами (ИС) можно понимать автоматические и автоматизированные системы с элементами искусственного интеллекта (ИИ).

Основными направлениями ИИ являются:

Представление знаний и разработка систем, основанных на знаниях

Творчество и игры (шахматы, шашки, го)

Разработка естественно-языковых интерфейсов и машинный перевод текстов

Распознавание образов (каждому объекту ставится в соответствие матрица признаков, по которой проходит его распознание)

Новые архитектуры компонентов (нейрокомпьютеры)

Интеллектуальные роботы

Специальное ПО (языки Лисп, Пролог)

Обучение и самообучение (включают модели, методы и алгоритмы, ориентированные на автоматическое накопление знаний на основе анализа и обобщения данных)

Знания – это выявление закономерности предметной области (принципы, связи, законы), позволяющие решать задачи в этой области. Знания – это данные о данных, или метаданные.

Модели представления знаний:

Продукционные модели

Семантические модели

Фреймовые модели

Формальные логические модели

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

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

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

Чаще всего основой любого программного обеспечения является набор взаимосвязанных алгоритмов. Алгоритм же в свою очередь - это описание способа решения вычислительной задачи и задач других типов. Другими словами это описание, точно предписывающее, какие процедуры необходимо исполнителю выполнить и в какой последовательности, чтобы получить конкретный, заранее определённый результат, однозначно определяемый исходными данными.

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

Примеры интегрированных сред программирования: для разработки консольных приложений: Turbo Paskal, Quick Basic, Borland C++ для разработки Windows приложений: Microsoft Visual C++, Microsoft Visual Basic, Embarcadero Delphi, Embarcadero JBuilder

Приведём пример классификации инструментального программного обеспечения.

Вид инструментального ПО

Назначение

Специализированные текстовые редакторы

для создания и редактирования кода программы

Трансляторы:

для перевода программы в машинный код

Ассемблеры

для перевода программы на языке Ассемблер

Macro Assembler (MASM), Turbo Assembler (TASM) - для процессоров x86,

Компиляторы

для перевода программы на языке высокого уровня (Паскаль, Делфи, Си, Бейсик). Перевод осуществляется целиком однократно. При переводе создается файл.

GNU Compiler Collection (GCC)-для Cи, С++, Java, Fortran и др.; Free Pascal Compiler (FPS)-для Паскаля; Intel C++ compiler (для Си, С++, Fortran)

Интепретаторы

для покомандного перевода и исполнения программы на языке высокого уровня (все скриптовые языки: VBScript, JavaScript, PHP, Perl, Python, Ruby). Файл не создается.

компоновщики (линкеры, редакторы связей)

для сборки исполняемого файл из объектных файлов (двоичные коды отдельных файлов программы)

отладчики (дебаггеры)

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

библиотеки

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

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

К инструментальным программам, например, относятся:

  • - редакторы;
  • - средства компоновки программ;
  • - вспомогательные программы, реализующие часто используемые системные действия;
  • - графические пакеты программ и т. п.

СИСТЕМА ПРОГРАММИРОВАНИЯ

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

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

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

Компилятор - читает всю программу целиком, делает ее перевод и создает законченный вариант программы на машинном языке, который затем и выполняется.

Интерпретатор - переводит и выполняет программу строка за строкой. После того, как программа откомпилирована, ни сама исходная программа, ни компилятор более не нужны. В то же время программа, обрабатываемая интерпретатором, должна заново переводиться на машинный язык при каждом очередном запуске программы. Популярные системы программирования - Turbo Basic, Quick Basic, Turbo Pascal, Turbo C. Borland C++, Borland Delphi. Каждый конкретный язык ориентирован либо на компиляцию, либо на интерпретацию - в зависимости от того, для каких целей он создавался. Например, Pascal обычно используется для решения довольно сложных задач, в которых важна скорость работы программ. Поэтому данный язык обычно реализуется с помощью компилятора. С другой стороны, Basic создавался как язык для начинающих программистов, для которых построчное выполнение программы имеет неоспоримые преимущества. компьютер интерактивный приложение

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