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

Классификация языков программирования. Критерии выбора среды и языка разработки программ.

Содержание:

Введение

В наше время общество XXI века является информационным. Статистика: в ведущих странах более 60% населения занято в информационной среде, а 40% населения в производственной сфере. Поэтому выбранная мною профессия программиста гарантирует приобретение наиболее престижной, дефицитной и высокооплачиваемой профессии. Тем более есть очень ёмкое утверждение: «Кто владеет информацией – тот владеет миром!»

1.Классификация языков программирования

Фактор

Характеристика

Группы

Примеры ЯП

Уровень ЯП

Степень близости ЯП к архитектуре компьютера

Низкий

Автокод, ассемблер

Высокий

Fortran, Pascal, ADA, Basic, C и др. ЯВУ

Сверхвысокий

Сетл

Специализация ЯП

Потенциальная или реальная область применения

Общего назначения (Универсальные)

Algol, PL/1, Simula, Basic, Pascal

Специализированные

Fortran (инженерные расчеты), Cobol(коммерческие задачи),

Refal, Lisp (символьная обработка),

Modula, Ada (программирование в реальном времени)

Алгоритмичность

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

Процедурные

Ассемблер, Fortran, Basic, Pascal, Ada

Непроцедурные

Prolog, Langin

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

Таблица. 1. Классификация ЯП[1]

1.1. Определение Языка программирования

Язык программирования (ЯП) – это знаковая система для планирования поведения компьютера1.

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

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

Знаковая ситуация N

<знакn, детотатn>

Знаковая система

Знаковая ситуация 1

<знак1, детонат1>

Рис 1.1. (Структура знаковой системы)

Знак – это обозначение или имя, денотат – значение, смысл.

Примеры знаков и денотатов приведены в таблице 2.

Правила, определяющие структуру допустимых знаков, называют синтаксисом языка.

Правила, определяющие денотаты, которые соответствуют допустимым знакам, называют семантикой языка.

Опираясь на введенные понятия, можно предложить модифицированную формулировку ЯП.

Знак

Денотат

Сообщение

Буква

Слово

Sqrt

If-then-else

Смысл

Звук

Понятие

Вычисление квадратного корня

Разветвление вычислений

Таблица 2. Знаки и денотаты

Язык программирования - это правило образования знаков (синтаксис) и согласованные с ними правила образования денотатов (семантика).[2]

В ЯП знаки - это элементы программ, а денотаты – характеристики поведения исполнителя (компьютера).

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

В практическом определении ЯП – это средство общения между пользователем и компьютером (исполнителем).[3]

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

Ошибки сообщений на языке программирования

синтаксические

семантические

прагматические

Рис 1.2. Классификация ошибок сообщений

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

Семантические ошибки связаны с искажением смысла элементов сообщений, а прагматические ошибки – с искажением цели (назначения) элемента или сообщения.

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

  1. Одинаковыми правилами разложения сообщения на составляющие (предмет синтаксиса);
  2. Согласованными правилами придающими сообщению смысл (Предмет семантики);
  3. Согласованными целевыми установками (предмет прагматики).

1.3.Технологическое определение Языка Программирования

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

Программирование нацелено на обслуживание пользователей. Принцип хорошего обслуживания: «Клиент всегда прав». Это означает, что программы должны быть дружественными к пользователю. [4]

Программы должны быть:

  1. Надежными (Содержать мало ошибок)
  2. Устойчивыми (сохранять работоспособность в неблагоприятных условиях эксплуатации, ограниченности ресурсов, перегрузок, ошибок пользователя, сбоев и отказов аппаратуры)
  3. Заботливыми (Должны уметь объяснять свои действия и ошибки пользователя)

Есть два источника сложности программирования:

  1. Семантический разрыв – разрыв между уровнем элементарных операция компьютера и уровнем потенциально возможных услуг. Компьютер – очень быстрый исполнитель. Отсюда соблазн программировать его на оказания сложных услуг (С помощью очень сложных программ). В то же время возможности человека при работе со связанными объектами ограниченным числом ИНГВЕ = 7 + 2. Выход из положения – создавать для определенного класса услуг подходящий для ЯП (Со сложными операциями) и программировать на таком ЯП.
  2. Незнание компьютером реального мира. Поэтому компьютер не может контролировать соответствие указаний программиста поставленным задачам (целям), ради достижений для которых они сформированы.[5]

Вывод.

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

2. Применение языка программирования

2.1. Критерии эффективности выбора языков программирования

Современно человеческое общество все сильнее зависит от компьютерных систем, управляемых программами. Эти системы весьма настойчиво проникают во время сферы человеческой жизни. Они буквально окружают человека и на работе, и дома, и на отдыхе.[6]

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

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

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

1) читабельность (легкость чтения и понимания программ);

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

3) надежность (обеспечение минимума ошибок при работе программ);

4) стоимость (суммарная стоимость всего жизненного цикла языка);

5) переносимость программ (легкость переноса программ из одной операционной среды в другую);

6) универсальность (применимость к широкому кругу задач);

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

2.2. Читабельность

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

Читабельность (Readability) языка программирования должна способствовать легкому выделению основных понятий каждой части программы без обращения к документации[8].

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

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

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

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

Примеры недостатка ортогональности в языках: [9]

1. В языке Pascal функции могут возвращать значения только скалярного или указательного типов, а в языках C и C++ — значения всех типов, за исключением массивов (трактовка массивов в этих языках отличается от трактовки остальных типов). В функциональных языках, языках Ada и Python этот недостаток ортогональности устранен.

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

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

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

Структурированность потока управления в программе. Порядок передач управления между операторами программы должен быть удобен для чтения и понимания человеком. Речь идет об ограниченном использовании оператора безусловного перехода goto и применении специальных структур управления.

2.3. Легкость создания программ

Легкость создания программ (Writability) [10]отражает удобство языка для написания программ в конкретной предметной области. Поскольку в каждой предметной области программы имеют свою специфику, очень важно выбирать язык, который ее учитывает. Например, если речь идет об исследовании искусственного интеллекта, следует использовать язык Prolog или LISP, а при решении задач научных вычислений — язык Fortran.

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

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

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

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

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

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

Естественность для приложений. Синтаксис языка должен способствовать легкому и прозрачному отображению в программах алгоритмических структур предметной области. Любой из типовых алгоритмов (последовательный, разветвляющийся, циклический, параллельный) имеет естественную структуру, которая должна поддерживаться программными операторами реализующего языка. Язык должен предоставлять структуры данных, операции и структуры управления, адекватные решаемой задаче. Естественность — это одна из важнейших причин популярности того или иного языка. Язык, ориентированный на характерные черты предметной области, может сильно упростить создание для нее программных приложений. Приведем примеры языков с очевидной направленностью на решение конкретных классов задач: Prolog (поддерживает дедуктивные рассуждения), Perl (предназначен для записи различных сценариев).

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

Выразительность.[12] Выразительность языка может характеризовать две возможности. С одной стороны, она означает наличие очень мощных средств для представления структур данных и действий, описывающих большой объем вычислений с помощью очень маленькой программы (языки APL, Snobol, Icon, SETL). С другой стороны, выразительность позволяет записывать вычисления в более удобной и компактной форме. Например, в языке С запись х++ удобнее и короче записи х = х + 1. Аналогично, булевы операции and then и or else в языке Ada позволяют указать сокращенное вычисление булевых выражений. В языке Pascal циклы с известным количеством повторений проще создавать с помощью оператора for, чем с помощью оператора while. Несомненно, что все эти возможности облегчают разработку программ.

2.4. Надежность

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

Факторы, имеющие сильное влияние на надежность программ:

  1. Проверка типов. Принципиальным средством достижения высокой надежности языка является система типизации данных. В ходе проверки типов анализируется совместимость типов в программе. Разные языки обеспечивают разную полноту проверки типов. Достаточно слабой считают проверку типов в языке С. Языки с динамической типизацией вообще относят эту проверку только к периоду выполнения программы. Наиболее полную проверку гарантирует языка Ada: в процессе компиляции программы проверяются типы практически всех переменных и выражений. Такой подход фактически устраняет ошибки типов при выполнении программы. В языках Pascal, Ada и Java диапазон изменения индексов является частью объявления массива и тоже подвергается проверке. Такая проверка очень важна для обеспечения надежности программы, поскольку индексы, выходящие за пределы допустимого диапазона, часто создают серьезные проблемы.
  2. Обработка исключений. Исключением называют аварийное событие, которое обнаруживается во время выполнения программы (аппаратом исключений). В результате авария устраняется и программа продолжает работу. Подобный механизм значительно повышает надежность вычислений. Языки Ada, C++, C# и Java позволяют обрабатывать исключения, хотя во многих других языках этот механизм отсутствует.
  3. Совмещение имен. Совмещением имен называют наличие нескольких разных имен у одной и той же ячейки памяти. Во многих языках переменным разрешается иметь по паре имен: обычное прямое имя и косвенное имя (на базе указателя). С одной стороны, совмещение имен может приводить к понижению надежности программы. С другой стороны, эта возможность повышает гибкость программирования и компенсирует недочеты жестких схем типизации.

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

2.5. Стоимость

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

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

Стоимость трансляции программы. Размер этой стоимости зависит от возможностей используемого компилятора. Чем совершеннее методы оптимизации, тем дороже стоит трансляция. В итоге создается эффективный код: резко сокращается размер программы и/или возрастает скорость ее работы.[15]

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

Стоимость сопровождения программы. Многочисленные исследования показали, что значительную часть стоимости используемой программы составляет не стоимость разработки, а стоимость сопровождения программы. Сопровождение — это процесс изменения программы после ее поставки заказчику. [16]Сопровождение включает в себя:

1. Исправление ошибок (17% времени и стоимости);

2. Изменения, связанные с обновлением операционного окружения (18% времени и стоимости);

3. Усовершенствование и расширение функций программы (65% времени и стоимости).

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

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

2.6. Способы построения критериев эффективности

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

Выделение главного показателя. [17]Из совокупности частных показателей A1, A2, ..., An выделяется один, например A1, который принимается за главный. На остальные показатели накладываются ограничения:

Ai ≤ Aiдоп (i = 2, 3, ..., n),

где Aiдоп — допустимое значение i-го показателя. Например, если в качестве A1 выбирается легкость создания программ W (Writability), а на показатели надежности P и стоимости S накладываются ограничения, то критерий эффективности ЯП принимает вид:

W → max, P ≤ Pдоп, S ≤ Sдоп.

Способ последовательных уступок. Все частные показатели нумеруются в порядке их важности: наиболее существенным считается показатель A1, а наименее важным — An. Находится минимальное значение показателя A1 — min A1 (если нужно найти максимум, то достаточно изменить знак показателя). Затем делается «уступка» первому показателю ∆A1, и получается ограничение min A1 + ∆ A1.

На втором шаге отыскивается min A2 при ограничении A1 ≤ min A1 + ∆ A1. После этого выбирается «уступка» для A2: min A2 + ∆ A2. На третьем шаге отыскивается min A3 при ограничениях A1 ≤ min A1 + ∆ A1; A2 ≤ min A2 + ∆ A2 и т. д. На последнем шаге ищут min An при ограничениях

A1 ≤ min A1 + ∆ A1;

A2 ≤ min A2 + ∆ A2;

. . ..

An–1 ≤ min An–1 + ∆ An–1.

Полученный на этом шаге вариант языка программирования и значения его показателей A1, A2, ..., An считаются окончательными. Недостатком данного способа (критерия) является неоднозначность выбора ∆Ai.

Отношение частных показателей[18]. В этом случае критерий эффективности получают в виде

(1.1.)

или в виде

(1.2.)

где Ai (i = 1, 2, ..., n) — частные показатели, для которых желательно увеличение численных значений, а Bi (i = 1, 2, ..., m) — частные показатели, численные значения которых нужно уменьшить. В частном случае критерий может быть представлен в виде

(1.3.)

Возможной формой выражения (1.3) является критерий цены создания программы

(1.4.)

где S — стоимость, W — легкость создания программы ЯП. Формула критерия K4 характеризует затраты стоимости, приходящиеся на единицу легкости создания программы.

Аддитивная форма[19]. Критерий эффективности имеет вид

(1.5.)

где α1, α2, ..., αn — положительные и отрицательные весовые коэффициенты частных показателей. Положительные коэффициенты ставятся при тех показателях, которые желательно максимизировать, а отрицательные — при тех, которые желательно минимизировать.

Весовые коэффициенты могут быть определены методом экспертных оценок. Обычно они удовлетворяют условиям

(1.6.)

Основной недостаток критерия заключается в возможности взаимной компенсации частных показателей.

Мультипликативная форма. Критерий эффективности имеет вид

(1.7.)

где, в частном случае, коэффициенты αi полагают равными единице.

От мультипликативной формы можно перейти к аддитивной, используя выражение:

(1.8.)

Критерий K6 имеет тот же недостаток, что и критерий K5.

Максиминная форма. Критерий эффективности описывается выражением:

(1.9.)

Здесь реализована идея равномерного повышения уровня всех показателей за счет максимального «подтягивания» наихудшего из показателей (имеющего минимальное значение).

У максиминного критерия нет того недостатка, который присущ мультипликативному и аддитивному критериям.

2.7. Нормализация частных показателей

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

Использование отклонения частного показателя от максимального.

(1.10.)

В данном случае переходят к отклонениям показателей, однако способ не устраняет различия масштабов отклонений. Использование безразмерной величины .

(1.11.)

(1.12.)

Формула (1.11) применяется тогда, когда уменьшение Ai приводит к увеличению (улучшению) значения аддитивной формулы критерия. Выражение (1.12) используется, когда к увеличению значения аддитивной формулы критерия при- водит увеличение Ai .

Учет приоритета частных показателей

Необходимость в учете приоритетов возникает в случае, когда частные показатели имеют различную степень важности. [21]

Приоритет частных показателей задается с помощью ряда приоритета I, вектора приоритета (b1, ..., bq, ..., bn) и вектора весовых коэффициентов (α1, α2, ..., αn).

Ряд приоритета представляет собой упорядоченное множество индексов частных показателей I = (1, 2, …, n). Он отражает чисто качественные отношения доминирования показателей, а именно отношения следующего типа: показатель A1 важнее показателя A2, а показатель A2 важнее показателя A3 и т. д.

Элемент bq вектора приоритета показывает, во сколько раз показатель Aq важнее показателя Aq+1 (здесь Aq — показатель, которому отведен номер q в ряду приоритета). Если Aq и Aq+1 имеют одинаковый ранг, то bq = 1.

Для удобства принимают bn = 1. Компоненты векторов приоритета и весовых коэффициентов связаны между собой следующим отношением:

Зависимость, позволяющая по известным значениям bi определить величину αq, имеет вид:

Знание весовых коэффициентов позволяет учесть приоритет частных показателей.

    1. Деловая структура

Задачи этой структуры, называемые бизнес-задачами, ориентированы на учет поступления заказов, управление ресурсами и персоналом, деловое планирование, анализ риска и оценку возможных вариантов, а также начисление зарплаты. [22]Бизнес-программы обеспечивали считывание больших объемов данных, собранных за длительный период времени, и сохраняли их на магнитных лентах и дисках, а также формировали новые данные, обновляемые в результате небольших преобразований. Языки бизнес-программирования нацеливались на генерацию отчетов со сложной структурой, точные способы описания и хранения десятичных чисел и символьных данных, а также на арифметические действия с десятичными числами. Для этих задач был разработан язык Cobol, который и сейчас широко используется. Разработчики этого языка приложили немало усилий для реализации корректной обработки данных. В наши дни основным языком бизнес-программирования по-прежнему считается Cobol, хотя иногда применяют и другие языки (например, C, C++). Однако позицию языков при обработке деловой информации сильно потеснили электронные таблицы, придуманные для персональных компьютеров. Если раньше на создание обычной программы делового планирования уходило несколько месяцев, то теперь аналитик может за несколько часов сформировать много электронных таблиц, решающих аналогичные задачи. Дополнительным инструментом деловой обработки стали языки четвертого поколения 4GL (Fourth Generation Languages). Языки 4GL — это непроцедурные языки, специализированные под конкретные задачи обработки деловой информации и рассматривающие программу как спецификацию требуемого результата, а не как спецификацию действий, приводящих к достижению этого результата. Поддерживающая язык 4GL среда переводит спецификацию результата в машин- но-выполнимую программу. Языки 4GL обеспечивают быстрое создание оконного интерфейса и простой доступ к содержимому базы данных, генерацию графических входных форм-бланков и выходных отчетов.

В деловой структуре используются электронные таблицы. Электронные таблицы – интерактивная система обработки информации упорядоченной в виде с поименованными строками и столбцами. Прототипам современных электронных таблиц послужило разработанная в 1979 г. специалистами США программа Visual Calc.[23] В настоящее время наиболее часто используются электронныетаблицы OpenOffice.org Calc, MS Excel.

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

3. Системная область

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

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

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

Еще один язык — Ada — тоже проектировался для применения в системной области, однако из-за ряда субъективных и объективных причин не получил здесь статуса основного языка. Он востребован в системах аэрокосмического и военного назначения.

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

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

Тип технологии

Входная информация

Выходная информация

Пример программных средств

«Чистые технологии» - обработка одного типа данных

1

Обработка текстов

Текст
.txt, .doc, .rtf., .pdf

-

Lexicon, Word, Adobe Acrobat

2

Обработка таблиц

Таблица .xsl, .dbf

-

Access, Excel, Foxpro

3

Обработка изображений

Картинка

.pix, .pcx, .bmp, .gif

-

Paint, Photoshop

4

Обработка звукового сигнала

Оцифрованный звук

.wav, .mp3

-

Magix 4 in One

5

Обработка видео

Видеосигнал

.avi, .mpg, .dat, .vob

-

Adobe Premier, Pinnacle Studio

«Смешанные технологии» - преобразование типов данных

6

Распознавание образов

Картинка

.pix, .pcx, .bmp, .gif

Текст

.txt, .doc,

.rtf., .pdf

FineReader

7

Распознавание голоса

Оцифрованный звук

.wav, .mp3

Текст

.txt, .doc,

.rtf., .pdf

«Змей Горыныч» (Dragon Dictate)

8

Чтение текста

Текст

.txt, .doc, .rtf., .pdf

Оцифрованный звук

.wav, .mp3

Govorilka, Speak & Mail

Таблица 3. Основные информационные технологии[25]

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

    1. Применение в научной области

Первые компьютеры, появившиеся в середине XX века, изначально создавались для научных целей. Задачи из этой области сводились к решению различных математических уравнений. К ним относились задачи численного анализа, решения дифференциальных и интегральных уравнений и задачи статистики. Обычно научные программы обрабатывают простые структуры данных и производят большое количество арифметических вычислений, выполняемых над числами с плавающей точкой. Наиболее часто употребляются такие структуры, как массивы и матрицы; из управляющих структур чаще других используются циклы со счетчиком и условные операторы. Языки «научного» программирования разрабатывались именно для удовлетворения таких потребностей. Здесь всегда доминировал Fortran, поскольку его синтаксис был очень близок к математическому языку ученых. Язык Algol 60 и большинство его потомков также предназначались для подобных целей, хотя могли применяться и в других родственных областях. Однако для научных вычислений особо важна эффективность, а ни один из созданных языков не оказался лучше языка Fortran. В XXI веке Fortran по-прежнему не сдает своих позиций, однако языки Java и C++ достаточно успешно конкурируют с его современной версией — Fortran 2008.[26]

    1. Программные средства поддержки сервисов Internet

Появление Всемирной паутины (WWW — World Wide Web) оказало сильное воздействие на географию компьютерных взаимодействий. По всему миру создаются серверы информационных архивов. Для получения информации пользователи подключаются к этим серверам через Интернет, а для ее обработки используют локальные клиентские машины. Чтобы пользователь мог загрузить программу а поставщик программного обеспечения имел возможность получить плату за ее использование, стал необходим язык программирования, позволяющий вести диалог между клиентским компьютером и сервером. Развитие электронной коммерции находится в полной зависимости от языков с такими возможностями. [27]

Изначально веб-страницы были статическими документами: можно было лишь просмотреть текст или рисунки. Создавались страницы с помощью языка разметки HTML, который не является языком программирования. Для доступа к другой странице пользователь мог щелкнуть на ее адресе URL (Uniform Resource Locator). Однако для развития электронной коммерции информация должна пере- даваться в обоих направлениях между клиентской машиной и сервером, поэтому веб-страницы должны были стать активными, динамическими. Подобные возможности обеспечиваются такими языками программирования, как Perl, PHP и Java.

Использование WWW снова поставило перед языками проблему производительности:

1) линии связи пользователя с Интернетом, как правило, ограничивают скорость передачи данных;

2) из-за подключения большого количества пользователей сервер может оказаться перегружен. [28]

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

Internet — это глобальная информа­ционная система, которая:

1. логически взаимосвязана пространством глобальных уни­кальных адресов, основанных на Internet-протоколе (IP) или на последующих расширениях или преемниках IP;

2. способна поддерживать коммуникации с использованием семейства Протокола управления передачей/Internet – протокола (TCP/IP) или его последующих расширений/преем­ников и/или других IP-совместимых протоколов;

3. обеспечивает, использует или делает доступной на общест­венной или частной основе высокоуровневые сервисы, надстроенные над описанной здесь коммуникационной и иной связанной с ней инфраструктурой.

За два десятилетия своего существования Сеть Internet претерпела кардинальные изменения. Она зарождалась в эпоху разделения времени, но сумела выжить во времена господ­ства персональных компьютеров, одноранговых сетей, систем клиент/сервер и сетевых компьютеров. Она проектировалась до первых ЛВС, но впитала эту новую сетевую технологию, равно как и появившиеся позднее сервисы коммутации ячеек и кадров. Она задумывалась для поддержки широкого спектра функции, от разделения файлов и удаленного входа до разделения ресурсов сов и совместной работы, породив электронную почту и в более поздний период Всемирную паутину (WWW)».

Система адресов Internet

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

• адрес Ethernet;

• IP-адрес (основной адрес в Internet);

• доменные адреса;

• почтовые адреса;

• номера портов;

• универсальный локатор (идентификатор) сетевого ресурса (URL/URI).

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

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

Адаптер «слушает» сеть, принимает адресованные ему кадры и широковещательные кадры с адресом FF:FF:FF:FF:FF:FF и от­правляет кадры в сеть, причем в каждый момент времени в сег­менте узла сети находится только один кадр.

Собственно Ethernet-адрес соответствует не компьютеру, а его сетевому интерфейсу. Таким образом, если компьютер имеет несколько интерфейсов, то это означает, что каждому интерфей­су будет назначен свой Ethernet-адрес. Каждой карте Ethernet соответствуют Ethernet-адрес и IP-адрес, которые уникальны в рамках Internet.

IP-адрес представляет собой 4-байтовую последовательность, причем каждый байт этой последовательности записывается в виде десятичного числа. Адрес состоит из двух частей: адреса сети и номера хоста. Обычно под хостом понимают компьютер, подключенный к Internet, однако это может быть и принтер с сетевой картой, и терминал или вообще любое устройство, кото­рое имеет свой сетевой интерфейс.

Заключение

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

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

Список использованной литературы

Орлов С. А. Теория и практика языков программирования: Учебник для вузов. Стандарт 3-го поколения. – СПб, 2013. 688 с.

Голицына О. Л., Партыка Т. Л., Попов И. И. Программное обеспечение: учебное пособие – 4-е изд., перераб. и доп. – М. ФОРУМ; инфра-м, 2013. 448 с.

  1. Орлов С.А. Теория и практика языков программирования: Учебник для вузов. Стандарт 3-го поколения. СПб.: Питер, 2013 – С. 24

  2. Орлов С.А. Теория и практика языков программирования: Учебник для вузов. Стандарт 3-го поколения. СПб.: Питер, 2013 – С. 25

  3. Орлов С.А. Теория и практика языков программирования: Учебник для вузов. Стандарт 3-го поколения. СПб.: Питер, 2013 – С. 25

  4. ? Орлов С.А. Теория и практика языков программирования: Учебник для вузов. Стандарт 3-го поколения. СПб.: Питер, 2013 – С. 26

  5. 4 ? Орлов С.А. Теория и практика языков программирования: Учебник для вузов. Стандарт 3-го поколения. СПб.: Питер, 2013 – С. 26

  6. ? Орлов С.А. Теория и практика языков программирования: Учебник для вузов. Стандарт 3-го поколения. СПб.: Питер, 2013 – С. 27

  7. ? Орлов С.А. Теория и практика языков программирования: Учебник для вузов. Стандарт 3-го поколения. СПб.: Питер, 2013 – С. 30

  8. Орлов С.А. Теория и практика языков программирования: Учебник для вузов. Стандарт 3-го поколения. СПб.: Питер, 2013 – С. 31

  9. Орлов С.А. Теория и практика языков программирования: Учебник для вузов. Стандарт 3-го поколения. СПб.: Питер, 2013 – С. 32

  10. Орлов С.А. Теория и практика языков программирования: Учебник для вузов. Стандарт 3-го поколения. СПб.: Питер, 2013 – С. 33

  11. Орлов С.А. Теория и практика языков программирования: Учебник для вузов. Стандарт 3-го поколения. СПб.: Питер, 2013 – С. 31

  12. Орлов С.А. Теория и практика языков программирования: Учебник для вузов. Стандарт 3-го поколения. СПб.: Питер, 2013 – С. 34

  13. Орлов С.А. Теория и практика языков программирования: Учебник для вузов. Стандарт 3-го поколения. СПб.: Питер, 2013 – С. 34

  14. Орлов С.А. Теория и практика языков программирования: Учебник для вузов. Стандарт 3-го поколения. СПб.: Питер, 2013 – С. 35

  15. Орлов С.А. Теория и практика языков программирования: Учебник для вузов. Стандарт 3-го поколения. СПб.: Питер, 2013 – С. 36

  16. Орлов С.А. Теория и практика языков программирования: Учебник для вузов. Стандарт 3-го поколения. СПб.: Питер, 2013 – С. 36

  17. Орлов С.А. Теория и практика языков программирования: Учебник для вузов. Стандарт 3-го поколения. СПб.: Питер, 2013 – С. 37

  18. Орлов С.А. Теория и практика языков программирования: Учебник для вузов. Стандарт 3-го поколения. СПб.: Питер, 2013 – С. 37

  19. Орлов С.А. Теория и практика языков программирования: Учебник для вузов. Стандарт 3-го поколения. СПб.: Питер, 2013 – С. 38

  20. Орлов С.А. Теория и практика языков программирования: Учебник для вузов. Стандарт 3-го поколения. СПб.: Питер, 2013 – С. 39

  21. Орлов С.А. Теория и практика языков программирования: Учебник для вузов. Стандарт 3-го поколения. СПб.: Питер, 2013 – С. 39

  22. ? Орлов С.А. Теория и практика языков программирования: Учебник для вузов. Стандарт 3-го поколения. СПб.: Питер, 2013 – С. 28

  23. Программное обеспечение: учебное пособие / Голицына О. Л. , Партыка Т. Л., Попов И. И. – 4-е изд., перераб. И доп. – М. ФОРУМ, 2013 – С. 237

  24. ? Орлов С.А. Теория и практика языков программирования: Учебник для вузов. Стандарт 3-го поколения. СПб.: Питер, 2013 – С. 29

  25. Программное обеспечение: учебное пособие / Голицына О. Л. , Партыка Т. Л., Попов И. И. – 4-е изд., перераб. И доп. – М. ФОРУМ, 2013 – С. 231

  26. Орлов С.А. Теория и практика языков программирования: Учебник для вузов. Стандарт 3-го поколения. СПб.: Питер, 2013 – С. 27

  27. ? Орлов С.А. Теория и практика языков программирования: Учебник для вузов. Стандарт 3-го поколения. СПб.: Питер, 2013 – С. 29

  28. Орлов С.А. Теория и практика языков программирования: Учебник для вузов. Стандарт 3-го поколения. СПб.: Питер, 2013 – С. 29