Автор Анна Евкова
Преподаватель который помогает студентам и школьникам в учёбе.

Международные и отечественные стандарты языков программирования. Сходство и отличия стандартов.(Семантика языков программирования)

Содержание:

Введение

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

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

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

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

Цель исследования – проанализировать международные и отечественные стандарты языков программирования.

Задачи исследования:

  1. Общая характеристика стандартизации языков программирования.
  2. Анализ международных и отечественных стандартов языков программирования.

Объект исследования – стандартизация процесса программирования.

Предмет исследования – международные и отечественные стандарты языков программирования.

Глава 1 Стандартизация языков программирования

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

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

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

Семантика языка программирования - это правила придания смысла синтаксически правильным программам. В конечном счете, эти правила определяют ту последовательность действий вычислительной машины, которую она должна выполнить, работая по данной программе. Например, семантика языка команд компьютера определяется самим компьютером: машинная программа описывает в точности то, что реализует вычислительная машина при работе по данной программе. Аналогично семантика языка программирования высокого уровня может быть определена через описание правил выполнения соответствующей виртуальной машины [4, c. 56].

На основании степени удаленности языка постановки задачи от машинного кода, т.е. степени снижения семантического разрыва, выделяют три поколения языков программирования: 1) машинные языки (команды записываются в виде последовательности битов — «0» и «1»); семантический разрыв наиболее высок; 2) языки ассемблера (машинно зависимый мнемонический код); представляют собой множество сокращений, взаимно однозначно соответствующих операторам машинного языка; 3) языки высокого уровня; семантический разрыв снижается за счет введения дополнительных абстрактных конструкций, облегчающих процесс формализации задачи. Создание подобной иерархической структуры осуществляется благодаря возможности однозначного определения примитивов. В качестве примера приведем наиболее современную конструкцию, названную объектно ориентированной. Она дает возможность моделировать задачу в терминах объектов и отношений между ними. Главное преимущество языка высокого уровня в том, что он намного превосходит ассемблер в легкости изучения и использования. Кроме того, программа, написанная на языке высокого уровня, понятнее, является переносимой, т.е. независимой от конфигурации конкретного вычислителя. Таким образом, ее создатель избавлен от необходимости вникать в тонкости архитектуры компьютера, на котором она будет работать. Эту задачу берет на себя специально разработанный для этого компилятор, интерпретирующий текст программы для вычислителя. Результат работы компилятора представляет собой так называемый исполняемый файл, адресованный конкретному типу вычислителей (процессоров). Получается, что теоретизация и анализ семантики языка происходят в процессе создания компилятора, а не в процессе написания программы, а процесс формализации задачи и алгоритма ее решения представляет собой перевод с естественного языка на язык программирования [9, c. 67].

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

Механизмы создания формальных языков типа языков программирования, используемые для описания их синтаксиса, часто называют грамматиками. Это формальное описание синтаксиса неявно задает семантику по отношению к вычислителю. Первоначально такую задачу удалось решить Джону Бэкусу, разработчику языжа ALGOL 58 (1950-е гг.). Позже эта запись была модифицирована Питером Науром для описания языка ALGOL 60 (1960 г.). Переработанный метод описания синтаксиса стал известен как форма Бэкуса—Наура, или сокращенно БНФ. Он является метаязыком для языков программирования и все еще остается наиболее распространенным методом краткого описания синтаксиса языка программирования. Для описания синтаксических структур БНФ использует специальные абстракции. 

Статическую семантику относят к классу операционных, поскольку смысл конструкциям языка придается с точки зрения их влияния на функции переходов в состояние абстрактного вычислителя. Более совершенными являются пропозициональные и денотационные семантики. В первой более высокий уровень абстракций достигается за счет замены множества состояний абстрактного вычислителя множеством формул некоторой логической системы, во второй операционное определение заменяется денотацион-ным16, чем обеспечивается возможность еще более глубокого анализа. Такие семантики задаются, например, для языков, строящихся в соответствии с упомянутым ранее объектно ориентированным подходом [3, c. 12].

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

Знакомое из философии и лингвистики слово «парадигма» имеет в информатике и программировании узкопрофессиональный смысл.

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

Наиболее распространённая практика прикладного программирования на основе императивного управления и процедурно-операторного стиля построения программ получила популярность более пятидесяти лет назад в сфере узкопрофессиональной деятельности специалистов по организации вычислительных и информационных процессов.

Поскольку всякая наука начинается с классификации, видимо, следует упомянуть опередившую время книгу профессора МГУ В.Ш. Кауфмана «Языки программирования. Концепции и принципы», которая была издана первый раз в конце 1980-х годов. Из нее мы узнали, какую парадигму (концепцию, стиль) программирования мы применяем. В практическом плане господствующими были процедурные языки — это Фортран, Алгол, Бейсик, Паскаль, С. Принципы структурного программирования в указанных языках также могли быть успешно реализованы. Реализованная в них императивная парадигма («Напиши, как нужно сделать!») казалась простой и единственно возможной: определите функции системы, разработайте структуру данных, реализуйте соответствующие алгоритмы их обработки.

Язык С++ (Б.Страуструп, 1983 год), как объектно-ориентированный язык, только начал развиваться и был нам недоступен.

Существенно, что до 1986 года у меня, как и моих коллег по НИИ, не было возможности работы с персональными ЭВМ. Свои задачи мы решали либо в ВЦ на ЭВМ М-222, либо на мини-ЭВМ М-6000 (для управления технологическими процессами) [10].

Реальная возможность изучения различных парадигм программирования появилась с развитием ПК и Интернета. Но именно преподавание программирования заставило меня обратить внимание на парадигму объектно-ориентированного программирования (ООП), которая была положена в основу языков C++ и Оbject Pascal. Лозунг «Мыслить в объектах!» постепенно приобретал конкретное содержание и программную реализацию. Замечу, что в любом языке ООП используется процедурный стиль при кодировании тела функций.

Декларативное программирование. Оказалось, что есть еще две парадигмы, соответствующие по Кауфману декларативному подходу, это логическое и функциональное программирование. Декларативный подход требует всего лишь указания «что мы хотим сделать». В рамках курса «Технологии программирования» пришлось знакомить студентов и с этими подходами.

Для освоения логического программирования (ЛП) был выбран Turbo Prolog (позднее появился Visual Prolog). Помню возмущение части студентов: «Кому нужны эти предикаты, даже конструкции цикла и те отсутствуют!» Любопытно, что девушки, не столь бойко писавшие программы в императивном стиле, на моих примерах Prolog осваивали быстрее (вот и пошутите на тему «женской логики»).

Идею функционального программирования (ФП) можно свести к формуле А.П. Ершова: «ФП – это функции, функции и ничего кроме функций». Готовя примеры на языке Lisp (List Programming – Программирование списков), я получал эстетическое удовольствие от того, как из простых конструкций можно получать достаточно сложные элементы. Например, арифметику с длинными числами [12].

1.3 Типы данных

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

Арифметические типы данных. В компьютерах эти типы данных представляют числа, поэтому действительно являются основными.

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

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

Реализация операций над вещественными числами сложнее с аппаратной точки зрения, поэтому в ряде архитектур вещественные числа вообще могут отсутствовать. Для того, чтобы программист мог учитывать эти нюансы, многие языки (в том числе, Паскаль, С++, Java, C#) разделяют числовые типы на два вида.

При рассмотрении целых типов возникают следующие основные вопросы [1]:

• универсальность (насколько полно учтены машинные типы);

• наличие (или отсутствие) беззнаковых типов;

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

• надежность (какие ошибки могут возникать при выполнении операций с целыми значениями);

• набор операций.

Универсальность. Язык Паскаль предоставляет единственный целочисленный тип данных — integer. Этого вполне достаточно для учебного языка программирования, но неприемлемо в индустриальном программировании. Языки С++, Java и C# представляют универсальную номенклатуру целых типов, которая соответствует большинству современных архитектур. В эти языках определены однобайтовые целые числа (char в С++, byte в Java и C#), короткие целые (short), основные целые (int), длинные целые (long).

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

Адреса представляются беззнаковым целым типом (вспомним, что адрес — это номер ячейки памяти, начинающийся с нуля). Операции над адресами называются адресной арифметикой [14, c. 51].

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

Язык Java не содержит беззнаковых типов, что упрощает реализацию JVM

и позволяет избежать ряда проблем, связанных с надежностью программ. Языки С++ и С# для каждого размера целого типа содержат знаковый и

беззнаковый варианты. Прежде всего, это диктуется требованием универсальности.

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

Фиксация представления дала бы необоснованное преимущество конкретной архитектуре, поскольку реализации на других архитектурах были бы более сложными и менее эффективными. Язык С++ даже не фиксирует представление однобайтового типа char. В зависимости от реализации он может быть как знаковым (signed char), так и беззнаковым (unsigned char). Про размеры типов в С++ известно, что [17]:

sizeof(char)=1

sizeof(char)<=sizeof(short)<=sizeof(int)<=sizeof(long)

Здесь sizeof — это статическая операция С++, которая применима как к именам типов, так и к объектам данных, и возвращает размер типа (объекта данных) в байтах.

С другой стороны, языки Java и C# полностью регламентируют размер и диапазон значений всех типов данных. Это связано с тем, что архитектуры, для которой разрабатывались языки, вполне определены (для Java — это JVM, для C# - платформа .NET на архитектуре IA-32).

Символьные типы данных служат для представления символов (литер) алфавитов естественных языков, символов, управляющих работой устройств ввода/вывода(например, символ перехода на новую строку, табуляции и тому подобные), специальных символов (валютный знак).

Каждый символ имеет свое название (например, «возврат каретки», «маленькая кириллическая буква я», «знак копирайта»). Символьные типы основаны на понятии множества символов (character set).Множество символов определяет, во-первых, набор символов, во-вторых, кодировку этого набора - отображение набора на диапазон целых чисел. Значения символьного типа — это и есть значения из этого диапазона.

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

Логический тип данных обозначается в языках С++ и C# Java ключевым словом bool (boolean в Java). Он состоит их двух значений: true (истина)и false (ложь).Набор операций состоит из логического «и» - «&&», логического «или» -«||» и отрицания «не» - «!» с обычным математическим смыслом.

Глава 2 Анализ международных и отечественных стандартов языков программирования

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

Основу отечественной нормативной базы в области документирования программных средств (ПС) составляет комплекс стандартов Единой системы программной документации (ЕСПД). Основная и большая часть комплекса ЕСПД была разработана в 70-е и 80-е годы. Сейчас этот комплекс представляет собой систему межгосударственных стандартов стран СНГ (ГОСТ), действующих на территории Российской Федерации на основе межгосударственного соглашения по стандартизации.

Из всех 28 стандартов ЕСПД остановимся только на тех, которые могут чаще использоваться на практике. Выделим также еще один, существенно более «свежий», чем остальные, отличающийся совместимостью с современными международными стандартами.

Первым укажем стандарт, который можно использовать при формировании заданий на программирование [14].

ГОСТ 19.201-78 ЕСПД. Техническое задание. Требование к содержанию и оформлению. Напомним, что техническое задание (ТЗ) содержит совокупность требований к ПС и может использоваться как критерий проверки и приемки разработанной программы. Поэтому достаточно полно составленное (с учетом возможности внесения дополнительных разделов) и принятое заказчиком и разработчиком, ТЗ является одним из основополагающих документов проекта ПС.

Следующий стандарт ориентирован на документирование результирующего продукта разработки: ГОСТ 19.402-78 ЕСПД. Описание программы.

Есть также группа стандартов, определяющая требования к фиксации всего набора программ и ПД, которые оформляются для передачи ПС. Они (см. врезку) порождают лаконичные документы учетного характера и могут быть полезны для упорядочения всего хозяйства программ и ПД (ведь очень часто требуется просто навести элементарный порядок). Есть и стандарты, определяющие правила ведения документов в «хозяйстве» ПС.

Надо также выделить ГОСТ 19.301-79 ЕСПД. Программа и методика испытаний, который (в адаптированном виде) может использоваться для разработки документов планирования и проведения испытательных работ по оценке готовности и качества ПС.

Наконец, выделим последний по году принятия стандарт. Это ГОСТ 19.701-90 ЕСПД. Схемы алгоритмов, программ, данных и систем. Обозначения условные графические и правила выполнения. Он устанавливает правила выполнения схем, используемых для отображения различных видов задач обработки данных и средств их решения и полностью соответствует стандарту ИСО 5807:1985.

ГОСТ 19781-90 Обеспечение систем обработки информации программное. Термины и определения. Разработан взамен ГОСТ 19781-83 и ГОСТ 19.004-80 и устанавливает термины и определения понятий в области программного обеспечения (ПО) систем обработки данных (СОД), применяемые во всех видах документации и литературы, входящих в сферу работ по стандартизации или использующих результаты этих работ.

ГОСТ 28388-89 Системы обработки информации. Документы на магнитных носителях данных. Порядок выполнения и обращения. Распространяется не только на программные, но и на конструкторские, технологические и другие проектные документы, выполняемые на магнитных носителях.

Пока нет лучшего, можно извлекать пользу и из тех стандартов ЕСПД, которые приняты еще около 20 лет назад. Но всем ясно, что ориентироваться надо на современные стандарты [20].

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

2.2 Международные стандарты языков программирования

Одной из важнейших проблем обеспечения качества программных средств является формализация характеристик качества и методология их оценки. Для определения адекватности качества функционирования, наличия технических возможностей программных средств к взаимодействию, совершенствованию и развитию необходимо использовать стандарты в области оценки характеристик их качества (рисунок 1) [11].

Рисунок 1. Основные международные стандарты в области качества программных средств

 В России для оценки качества работы системы мониторинга ИТ инфраструктуры можно применять стандарты оценки качества программных средств ISO 9126. 

1-я часть стандарта ISO 9126-1 описывает характеристики качества программного обеспечения используемых в остальных частях стандарта. Исходя из принципиальных возможностей их измерения, все характеристики качества могут быть объединены в 3 группы, к которым применимы разные категории метрик:

· категорийные, или описательные (номинальные) метрики наиболее адекватны для оценки функциональных возможностей программных средств;

· количественные метрики применимы для измерения надежности и эффективности сложных комплексов программ;

· качественные метрики в наибольшей степени соответствуют практичности, сопровождаемости и мобильности программных средств. 

2-я и 3-я части стандарта посвящены формализации соответственно внешних и внутренних метрик характеристик качества сложных программных средств. 4-я часть стандарта ISO 9126-4 предназначена для покупателей, поставщиков, разработчиков, сопровождающих пользователей и менеджеров качества программных средств. В ней обосновываются и комментируются выделенные показатели сферы (контекста) использования программных средств и группы выбранных метрик для пользователей [16, c. 53].

Концепция языка программирования неотрывно связана с его реализацией. Для того чтобы компиляция одной и той же программы различными компиляторами всегда давала одинаковый результат, разрабатываются стандарты языков программирования. Существует ряд организаций, целенаправленно занимающихся вопросами стандартизации. Это Американский национальный институт стандартов ANSI (American National Standards Institute), Институт инженеров по электротехнике и электронике IEEE (Institute of Electrical and Electronic Engineers), Организация международных стандартов ISO (International Organization for Standardization).

Как правило, при создании языка выпускается частный стандарт, определяемый разработчиками языка. Если язык получает широкое распространение, то со временем появляются различные версии компиляторов, которые не точно следуют частному стандарту. В большинстве случаев идет расширение зафиксированных первоначально возможностей языка. Для приведения наиболее популярных реализаций языка в соответствие друг с другом разрабатывается согласительный стандарт. Очень важным фактором стандартизации языка программирования является своевременность появления стандарта – до широкого распространения языка и создания множества несовместимых реализаций. В процессе развития языка могут появляться новые стандарты, отражающие современные нововведения. Так, язык FORTRAN первоначально был стандартизирован в 1966 году. В результате был издан стандарт FORTRAN 66. Далее этот стандарт несколько раз пересматривался (в 1977 году был выпущен FORTRAN 77, затем появился и FORTRAN 90).

Язык Java, ставший в последнее время весьма распространенным, постепенно был значительно расширен и модифицирован: новая спецификация получила название Java 2 [5].

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

2.3 Сходства и отличия стандартов

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

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

Существуют десятки различных подходов к обеспечению качества ПО, и у всех есть свои преимущества. Одной из первых моделей качества стал стандарт ISO (Международной организации по стандартизации) серии 9000, первая версия которого была выпущена в 1987 году. С тех пор сертификаты ISO серии 9000 сохраняют неизменную популярность и признаются во всем мире.

Однако время не стоит на месте, и методики, положенные в основу стандартов серии ISO 9000, постепенно устаревают. Выделим наиболее существенные недостатки:

• • недостаточная подробность стандарта, возможность самых различных его толкований в зависимости от представлений аудитора;

• • неточность оценки качества процессов, задействованных при создании и внедрении программного обеспечения;

• • отсутствие в стандарте механизмов, способствующих улучшению существующих процессов.

Перечисленные проблемы заставили экспертов разрабатывать более совершенные решения в области обеспечения качества, что привело к созданию в начале 90-х годов целого ряда новых стандартов и методологий. Опишем два наиболее удачных и содержательных стандарта – Capability Maturity Model (CMM) и ISO/IEC 15504 (SPICE). Существуют и другие достаточно развитые методологии, но, к сожалению, невозможно осветить все перспективные направления данной области.

Для многих широко распространённых языков программирования созданы международные стандарты. Специальные организации проводят регулярное обновление и публикацию спецификаций и формальных определений соответствующего языка. В рамках таких комитетов продолжается разработка и модернизация языков программирования и решаются вопросы о расширении или поддержке уже существующих и новых языковых конструкций.

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

Стандарты ISO не обошли стороной и сами языки программирования. На самом деле - это жесткая необходимость. Как пример, приведем стандарт С++17 (известен и как C++1z) — это версия стандарта C++ ISO/IEC. Спецификации для C++17 официально опубликованы в декабре 2017 года. Программисты С++ знают сколько мороки с поддержкой разных компиляторов с разными стандартами. Ваша программа может неадекватно обрабатываться неким компилятором если в коде есть специфические функции. И это - проблема. 

Особенно важны стандарты ISO и для преемственности версий и для поддержки взаимодействия с другим софтом. Это и поддержка форматов файлов по стандартам ISO. Тот же стандарт SCORM для обмена курсами между разными системами электронного обучения - яркий пример. Нельзя не отметить, что не все так просто со стандартами и можно даже говорить о том, что наблюдается постоянная "война стандартов", но это уже тема другой публикации...

Заключение

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

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

Наиболее распространённая практика прикладного программирования на основе императивного управления и процедурно-операторного стиля построения программ получила популярность более пятидесяти лет назад в сфере узкопрофессиональной деятельности специалистов по организации вычислительных и информационных процессов.

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

Арифметические типы данных. В компьютерах эти типы данных представляют числа, поэтому действительно являются основными.

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

Символьные типы данных служат для представления символов (литер) алфавитов естественных языков, символов, управляющих работой устройств ввода/вывода(например, символ перехода на новую строку, табуляции и тому подобные), специальных символов (валютный знак).

Логический тип данных обозначается в языках С++ и C# Java ключевымсловом bool (boolean в Java). Он состоит их двух значений: true (истина)и false (ложь).Набор операций состоит из логического «и» - «&&», логического «или» -«||» и отрицания «не» - «!» с обычным математическим смыслом.

Основу отечественной нормативной базы в области документирования программных средств (ПС) составляет комплекс стандартов Единой системы программной документации (ЕСПД). Основная и большая часть комплекса ЕСПД была разработана в 70-е и 80-е годы. Сейчас этот комплекс представляет собой систему межгосударственных стандартов стран СНГ (ГОСТ), действующих на территории Российской Федерации на основе межгосударственного соглашения по стандартизации.

Существуют десятки различных подходов к обеспечению качества ПО, и у всех есть свои преимущества. Одной из первых моделей качества стал стандарт ISO (Международной организации по стандартизации) серии 9000, первая версия которого была выпущена в 1987 году. С тех пор сертификаты ISO серии 9000 сохраняют неизменную популярность и признаются во всем мире.

Стандарты ISO не обошли стороной и сами языки программирования. На самом деле - это жесткая необходимость. Как пример, приведем стандарт С++17 (известен и как C++1z) — это версия стандарта C++ ISO/IEC. Спецификации для C++17 официально опубликованы в декабре 2017 года. Программисты С++ знают сколько мороки с поддержкой разных компиляторов с разными стандартами. Ваша программа может неадекватно обрабатываться неким компилятором если в коде есть специфические функции. И это - проблема.

Список литературы

1. Ашарина, И. В. Основы программирования на языках C и C++ / И.В. Ашарина. - М.: Горячая линия - Телеком, 2012. - 208 c.

2. Бибило, П. Н. Задачи по проектированию логических схем с использованием языка VHDL. Учебное пособие / П.Н. Бибило. - М.: ЛКИ, 2015. - 328 c.

3. Биллиг, В. А. Основы объектного программирования на C# (C# 3.0, Visual Studio 2008) / В.А. Биллиг. - М.: Интернет-университет информационных технологий, Бином. Лаборатория знаний, 2016. - 584 c.

4. Буховец, А. Г. Алгоритмы вычислительной статистики в системе R. Учебное пособие / А.Г. Буховец, П.В. Москалев. - М.: Лань, 2015. - 160 c.

5. Васильев, П. П. Турбо Паскаль в примерах и задачах / П.П. Васильев. - М.: Финансы и статистика, 2016. - 496 c.

6. Вычислительная техника в инженерных и экономических расчетах. Учебник. - М.: Высшая школа, 2017. - 320 c.

7. Гавриков, М. М. Теоретические основы разработки и реализации языков программирования / М.М. Гавриков, А.Н. Иванченко, Д.В. Гринченков. - М.: КноРус, 2014. - 184 c.

8. Гергель, В. П. Современные языки и технологии параллельного программирования / В.П. Гергель. - М.: Издательство МГУ, 2012. - 408 c.

9. Герман, О. Программирование на Java и C# для студента / О. Герман, Ю. Герман. - М.: БХВ-Петербург, 2014. - 512 c.

10. Грегер, С. Э. Сервер приложений "Zope" / С.Э. Грегер. - М.: Горячая линия - Телеком, 2017. - 256 c.

11. Данильчук А.А., Юн С.Г., Новокрещенов Н.С. Характеристики и атрибуты качества систем мониторинга ИТ-инфраструктуры по ISO 9126 // Наука вчера, сегодня, завтра: сб. ст. по матер. VII междунар. науч.-практ. конф. № 7(7). – Новосибирск: СибАК, 2013.

12. Истомин Е., П. Информатика и программирование / Истомин Е. П., A. M. Власовец. - М.: Андреевский Издательский дом, 2013. - 294 c.

13. Задачи по программированию. - М.: Бином. Лаборатория знаний, 2014. - 824 c.

14. Зыков, С. В. Введение в теорию программирования. Курс лекций. Учебное пособие / С.В. Зыков. - М.: Интернет-университет информационных технологий, 2012. - 400 c.

15. Ишкова, Э. А. C#. Начала программирования / Э.А. Ишкова. - М.: Бином-Пресс, 2016. - 334 c.

16. Кетков, Ю. Л. Свободное программное обеспечение. FREE PASCAL для студентов и школьников (+ CD) / Ю.Л. Кетков, А.Ю. Кетков. - М.: БХВ-Петербург, 2012. - 376 c.

17. Культин, Никита Visual Basic для студентов и школьников / Никита Культин. - М.: БХВ-Петербург, 2012. - 354 c.

18. Медведик, В. И. Практика программирования на Паскаль. Задачи и решения. Учебное пособие / В.И. Медведик. - М.: ДМК Пресс, 2015. - 590 c.

19. Опалева, Э. А. Языки программирования и методы трансляции / Э.А. Опалева, В.П. Самойленко. - М.: БХВ-Петербург, 2015. - 480 c.

20. Павловская, Т. А. C/C++. Программирование на языке высокого уровня / Т.А. Павловская. - М.: Питер, 2013. - 464 c.

21. Павловская, Татьяна C/C++. Процедурное и объектно-ориентированное программирование. Учебник / Татьяна Павловская. - М.: Питер, 2015. - 496 c.

22. Программирование на С++. - М.: Корона-Принт, Альтекс - А, 2014. - 512 c.

23. Рапаков, Г. Г. Turbo Pascal для студентов и школьников / Г.Г. Рапаков, С.Ю. Ржеуцкая. - М.: БХВ-Петербург, 2012. - 352 c.

24. Санников, Е. В. Курс практического программирования в Delphi. Объектно-ориентированное программирование / Е.В. Санников. - М.: Солон-Пресс, 2013. - 188 c.

25. Семакин, И. Г. Основы программирования и баз данных. Учебник / И.Г. Семакин. - М.: Academia, 2014. - 224 c.

26. Финогенов, К. Г. Использование языка Ассемблера. Учебное пособие / К.Г. Финогенов. - М.: Горячая линия - Телеком, 2017. - 440 c.

27. Финогенов, К. Основы языка Ассемблера / К. Финогенов. - М.: Горячая Линия - Телеком, Радио и связь, 2016. - 963 c.

28. Хабибуллин, И. Программирование на языке высокого уровня. C/C++ / И. Хабибуллин. - М.: БХВ-Петербург, 2016. - 512 c.

29. Хорев, П. Б. Объектно-ориентированное программирование с примерами на С#. Учебное пособие / П.Б. Хорев. - М.: Форум, Инфра-М, 2016. - 200 c.

30. Черпаков, И. В. Основы программирования. Учебник и практикум / И.В. Черпаков. - М.: Юрайт, 2016. - 220 c.