Задачи, решаемые с помощью ЭВМ, могут быть классифицированы по различным признакам: по типу информации, обрабатываемой при их решении, по используемым методам решения задач, по сложности алгоритмов их решения, по типам предметных областей, характеру самих задач и т.д.
Задачи обработки – задачи на нахождение и задачи на доказательство. Признак классификации – конечная цель решения задачи. Цель задачи на нахождение – нахождение (построение, проведение, получение, отождествление и т.д.) некоторого объекта, т.е. неизвестного данной задачи. Цель задачи на доказательство – установление правильности или ложности некоторого утверждения, подтверждения его или опровержения.
Среди задач на нахождение могут быть выделены:
· задачи на вычисление (вычислительные задачи);
· задачи на поиск;
· задачи на построение.
Вычислительные задачи связаны с вычислением в традиционном (арифметическом) смысле этого слова неизвестного значения информационного объекта (переменной, функции и т.д.). Основными элементарными операциями, выполняемыми при решении таких задач, являются арифметические операции сложения, вычитания, умножения, деления, возведения в степень и т.д.
Катастрофа. Неизбежный финал советской лунной программы /Техникум Марка Солонина
В постановке вычислительной задачи выделяют три обязательных элемента: условие задачи, известные данные (исходные данные) и неизвестное (неизвестные). Условие задачи представляет собой явно или неявно выраженное соотношение между данными и неизвестными задачи.
Задачи поиска аналогичны задачам поиска информации человеком в справочниках, словарях, учебниках и т.д. Основная операция, выполняемая при решении таких задач – это операция сравнения с заданным образцом (ключом).
Задачи на построение связаны с формированием соответствующих информационных структур: генерацией текстов, построением графических изображений и т.д. Типичной задачей на построение, решаемой на ЭВМ, является трансляция программы с одного языка программирования на другой, когда текст, написанный на одном языке программирования, переводится в текст на другом, как правило, машинном языке.
По типу обрабатываемой информации:
· задачи обработки числовой информации (вычислительный характер, связаны с количественной обработкой информации, основные действия – математические операции с числами, большинство таких задач относятся к вычислительным, разновидность задач на нахождение)
· задачи обработки нечисловой информации (информация в виде текста – символьная, графики, изображения, сигналы).
По методам решения задачи подразделяют на два типа:
· задачи, решаемые традиционными (алгоритмическими) методами (в основе понятие алгоритма);
· задачи, решаемые нетрадиционными (эвристическими) методами (эвристики – индивидуальные знания высококвалифицированных специалистов, состоящие в значительной степени из эмпирических правил).
По сложности алгоритмов:
· самые легкие задачи (ВФС полиномиального характера, полиномиальной является функция y, в которую аргумент x входит в качестве основания степени);
Как работает Java — ликбез
· трудноразрешимые задачи (ВФС экспоненциального характера, с функциями, в которых аргумент выступает в роли показателя степени);
· самые трудные задачи.
Эффективность в широком смысле связана со всеми вычислительными ресурсами, необходимыми для выполнения алгоритма.
По степени общности рассмотрения проблемы:
Массовая – это некоторый общий вопрос, на который следует дать ответ. Имеет параметры – совокупность свободных переменных, конкретные значения которых не определены. Считается, что задача определена, если известен список всех ее параметров и дана формулировка тех свойств, которым должен удовлетворить ответ — решение задачи.
Индивидуальная задача получается из массовой, если всем параметрам последней назначить конкретные значения. Хорошим считается такой алгоритм решения индивидуальной задачи, по которому можно решить и соответствующую массовую задачу. Алгоритм решает массовую задачу, если он применим к каждой индивидуальной задаче, получаемой из данной массовой.
По областям и отраслям деятельности человека (наука и техника, экономика и сельское хозяйство, сфера управления и обслуживания и т.д.)
По предметным областям с учетом их направленности. Исходя из этого, все задачи, решаемые на ЭВМ, могут быть разбиты на два вида: прикладные и системные.
Классификация ПО ЭВМ по функциональному критерию
По функциональному признаку различают системное и прикладное программное обеспечение.
1. прикладные программы, ПО, предназначенное для решения определенной целевой задачи из проблемной области (приложения). Это ПО, непосредственно обеспечивающие выполнение необходимых пользователям работ;
2. системные программы – программное обеспечение, включающее в себя операционные системы, сетевое ПО, сервисные программы, а также средства разработки программ (трансляторы, редакторы связей, отладчики и пр.):
· управление ресурсами компьютера;
· создание копий используемой информации;
· проверка работоспособности устройств компьютера;
· выдача справочной информации о компьютере и др.;
3. инструментальные программные системы, программы, которые используются в ходе разработки, корректировки или развития других прикладных или системных программ.
На сегодняшний день можно сказать, что более или менее определённо сложились следующие группы программного обеспечения:
· операционные системы и оболочки;
· системы программирования (трансляторы, библиотеки подпрограмм, отладчики и т.д.);
· интегрированные пакеты программ;
· динамические электронные таблицы;
· системы машинной графики;
· системы управления базами данных (СУБД);
· прикладное программное обеспечение.
Совместимость аппаратного и программного обеспечения средств ВТ
Совместимость (compatibility) — способность аппаратных или программных средств работать с компьютерной системой. Аппаратная (техническая) совместимость (hardware (equipment) compatibility) — способность одного компьютера работать с узлами или устройствами, входящими в состав другого компьютера. Составной частью аппаратной совместимости является электромагнитная совместимость (ЭМС) (ElectroMagnetic Compatibility, EMC) — способность работающих (в том числе, автономно друг от друга) технических средств не создавать взаимных электромагнитных помех, а также функционировать при наличии внешних электромагнитных полей. Также ЭМС называют ограничение собственного электромагнитного излучения устройств до уровня, не влияющего на работу других устройств.
Информационная совместимость (data compatibility) — способность двух или более компьютеров, или систем адекватно воспринимать одинаково представленные данные. Частью информационной совместимости, а также средством ее обеспечения является совместимость форматов представления данных. Программная совместимость (software compatibility) — возможность выполнения одних и тех же программ на разных компьютерах с получением одинаковых результатов (не путать с совместимостью программ).
Совместимость программ (program compatibility) — пригодность программ к взаимодействию друг с другом и, в частности, к объединению в программные комплексы для решения более сложных задач, например, в автоматизированных системах. Полная совместимость (fully compatibility) — аппаратная, программная и информационная совместимость двух или более компьютеров без каких-либо ограничений для их пользователей.
По аппаратной совместимости различают так называемые аппаратные платформы. В области персональных компьютеров сегодня наиболее широко распространены две аппаратные платформы — IBM РС и Аррlе Macintosh. Кроме них существуют и другие платформы, распространенность которых ограничивается отдельными регионами или отдельными отраслями. Принадлежность компьютеров к одной аппаратной платформе повышает совместимость между ними, а принадлежность к разным платформам — понижает.
Кроме аппаратной совместимости существуют и другие виды совместимости: совместимость на уровне операционной системы, программная совместимость, совместимость на уровне данных.
Аппаратная совместимость: а) комплектующие, удовлетворяющие одному стандарту, являются взаимозаменяемыми; б) различные части компьютера не конфликтуют между собой.
Программная совместимость: программы, разработанные на одной машине, будут правильно работать и на другой. Для проверки программной совместимости в начале 90 годов рекомендовалось использование компьютерных игр, например, DOOM.
Понятие «аппаратная платформа» связано с решением фирмы IBM о выработке и утверждении единого стандарта на основные комплектующие персонального компьютера. До этого времени фирмы-производители ПК стремились создать собственные, уникальные устройства, чтобы стать монополистом по сборке и обслуживанию собственных персональных компьютеров. Однако в итоге рынок был перенасыщен несовместимыми друг с другом ПК, для каждого из которых нужно было создавать собственное программное обеспечение. При этом фирма IBM быстро лишилась приоритета на рынке средств вычислительной техники, так как конкуренты производили клоны дешевле оригинального IBM PC. Но стандарт прижился как платформа IBM PC – совместимых ПК.
В связи с тем, что в настоящее время фирма IBM – создатель первого в мире массового персонального компьютера – утратила свой приоритет в выпуске ПК, на Западе все реже употребляют термин «IBM-совместимые компьютеры», а используют понятие «платформа Wintel», подразумевая под этим сочетание микропроцессора фирмы Intel с операционной системой Windows. Микропроцессор при этом рассматривается как основа аппаратной платформы, которая определяет архитектуру персонального компьютера, т. е. его тип и характеристики.
Однако термин Wintel не совсем точно определяет понятие платформы, так как открытая архитектура современных IBM-совместимых персональных компьютеров позволяет собирать их из комплектующих, изготавливаемых различными фирмами-производителями, включая и микропроцессоры, которые в настоящее время выпускаются не только фирмой Intel, но и Advanced Micro Devices (AMD), Cyrix Corp. и др. Кроме того, IBM-совместимые ПК могут работать не только под управлением операционной системы Windows, но и под управлением других операционных систем.
Кроме платформы IBM-совместимых ПК в настоящее время достаточно широкое распространение получила платформа Apple, представленная довольно популярными на Западе компьютерами Macintosh. Специалисты по компьютерной истории отдают приоритет в создании ПК именно компании Apple.
С середины 70-х г. эта фирма представила несколько десятков моделей ПК — начиная с Apple I и заканчивая современным iMac, — и уверенно противостояла мощной корпорации IBM. В середине 80-х гг. компьютеры серии Macintosh стали самыми популярными ПК в мире. В отличие от IBM, компания Apple всегда делала ставку на закрытую архитектуру — комплектующие и программы для этих компьютеров выпускались лишь небольшим числом «
Обработка данных центральным процессором компьютера происходит при помощи машинных кодов, которые сложно воспринимаются человеком. С появлением компилируемых и интерпретируемых языков программирования процесс разработки прикладного ПО существенно упростился. Они относятся к языкам высокого уровня, в составе которых присутствует большое количество лексических и смысловых структур для описания структур данных и операций.
С появлением высокоуровневых языков существенно упростились процедуры портирования ПО. С помощью специальных программ: компиляторов и трансляторов обеспечивается связь приложений с разными операционными системами и аппаратной частью компьютера. Применение таких программных средств обеспечивает независимость высокоуровневых языков от используемой версии операционной системы.
В последние годы появились языки сверхвысокого и ультравысокого уровня, содержащие множество объектов и структур. Они требуют минимум настроек и заметно снижают трудозатраты на разработку прикладного программного обеспечения.
Первый транслятор ПП-1 (Программирующая Программа) была разработана и использована в 1954 году. Уже в следующем году была создана ПП-2 с собственным загрузчиком, отладчиком, библиотекой стандартных процедур. В 1957 году был запущен компилятор для Fortran и после этого высокоуровневые языки стали активно использоваться программистами. Разработчиками последнего является группа специалистов из IBM во главе с Джоном Бэкусом.
В настоящее время в среде специалистов принята следующая классификация высокоуровневых языков по способу выполнения:
- Компилируемые. К этой категории относятся языки C, C++, Object Pascal и другие, использующие для преобразования в машинные инструкции программы-компиляторы. На первом этапе исходный код переводится в объектные модули, на втором происходит их сборка в единый исполняемый файл при помощи линковщика.
- Интерпретируемые. Данную категорию составляют языки типа Forth, Basic и им подобные. Исходный код считывается программой-интерпретатором и выполняется последовательно шаг за шагом.
Помимо перечисленных категорий высокоуровневых языков существуют и иные: компилируемые на базе псевдокода и совмещенные. Первые для обработки исходного кода используют специальные подпрограммы из библиотек. Вторые выполняются в два этапа: сначала происходит компиляция в байт-код языка Java или MSIL (при использовании протоколов технологии .NET), затем промежуточный код интерпретируется в машинный.
Компилируемые языки
Приложения, написанные на одном из высокоуровневых языков для компьютеров или мобильных устройств, представляют собой набор данных и инструкций. Они состоят из синтаксических единиц. В компилируемых языках программирования исходный текст код преобразуется в набор машинных инструкций с помощью специальной программы. Для него создается отдельный файл со своим заголовком либо определенным расширением, он считывается и исполняется операционной системой.
Служебная программа-компилятор, образно говоря, обеспечивает перевод высокоуровневого языка на низкоуровневый и работает следующим образом:
- Исходный текст прикладной программы трансформируется в машинный код, который состоит из понятных процессору инструкций.
- Получившийся набор команд и данных записывается в специальный файл, который идентифицируется операционной системой как исполняемый.
- Программа, записанная в этом файле в двоичном коде, считывается и выполняется центральным процессором.
Компилируемые языки имеют одну особенность: в случае внесения каких-либо изменений в исходный код описанный процесс повторяется. Программа снова компилируется в набор машинных инструкций, происходит ее запись в исполняемый файл. Результаты исправлений оценивается только после завершения процесса.
Перечень наиболее известных компилируемых языков программирования высокого уровня включает:
- Ada, Algol (его обновленные версии Algol 60 и 68, а также SMALL).
- BASIC и PureBasic.
- C и его вариации C++, Objective-C.
- COBOL, Delphi и Fortran.
- Pascal и Turbo Pascal.
- Visual Basic в шести версиях.
- ML и Standard ML.
Перечень языков, исходный код которых нужно компилировать в машинный, этим не ограничивается. Список можно дополнить менее популярными: Sather, Common Lisp, Swift, CLEO, LabVIEW, Ocaml, Haskell, Eiffel, Ubercode, Go, JOVIAL, Lush, Alice, Rust, Visual Foxpro и Visual Prolog.
Помимо названных существуют три группы высокоуровневых языки программирования, которые компилируются в байт-код:
- Java (Scala, Kotlin, Groovy, Clojure, Jython).
- Технология .NET (C#, Visual Basic, F#, Cobra).
- Erlang.
Помимо традиционных программ-компиляторов используется еще один их тип – транспайлеры (transpiler). Они предназначены для перевода исходного кода, написанного на Emscripten , kPHP, Closure Compiler, coffeescript, Dart, Haxe, TypeScript или Coccinelle, на другие высокоуровневые языки программирования типа ActionScript , C++, Lua либо Python. Транспайлеры также используются для перевода старого исходного кода на более новые версии, а также в совместимые с программными интерфейсами API. При этом происходит нарушение принципа обратной совместимости.
Транспиляция применяется для автоматического рефакторинга кода, когда её ручная переработка нецелесообразна из-за высоких трудозатрат. При этом данный тип программы-компилятора сохраняет преобразованный код максимально близким к исходному для упрощения процедур разработки и последующей отладки. В отдельных случаях структура программы изменяется до полной неузнаваемости.
Интерпретируемые языки
В основу рассматриваемой классификации положен метод исполнения приложения процессором компьютера или мобильного устройства. Интерпретируемый язык программирования – это высокоуровневый язык с последовательной обработкой операторов и данных CPU. Специальная программа транслирует каждую логическую строчку исходного кода по отдельности.
Разработчик может исправлять ошибки и вносить изменения в исходный код, в ходе их исполнения программы .
Поначалу алгоритм работу интерпретаторов высокоуровневых языков программирования выглядел так:
- Отдельная логическая строка исходного кода преобразуется в машинный код.
- Каждый оператор и данные последовательно считываются процессором и сразу же исполняется.
- Если в программе присутствуют циклы, то процедуры выполняются заданное количество раз.
Современные программы-интерпретаторы используют другие более совершенные алгоритмы работы:
- В большинстве случае современные высокоуровневые языки преобразуются в промежуточное представление, это может быть шитый или байт-код.
- По сути это комбинация команд, обеспечивающая использование операторов кода более низкого уровня. Они представляют собой небольшие по объему фрагменты, соответствующие одной или нескольким командам виртуальной машина или Assembler.
- Эти инструкции обрабатываются интерпретатором и исполняются компьютерным процессором.
Описанная схема применяется при работе наиболее распространенных языков программирования: Java, Python и Ruby. В последнем варианте исходный текст преобразуется в форму абстрактной синтаксической древовидной структуры. Такой подход позволяет оптимизировать процесс генерации кода на этапе промежуточного (внутреннего) представления между деревом разбора и формированием структуры данных.
Среди интерпретируемых высокоуровневых языков наибольшее распространение получили следующие:
- APL (J), BASIC, Forth, Lisp, Python, Excel, Logo Perl, Visual Basic for Applications и PHP.
- Скриптовые: JavaScript, Madness Script, VBScript, PostScript и F-Script.
- Системы решения математических уравнений: Mathematica, GNU Octave, TK Solver, Interactive Data Language (IDL) и MATLAB.
- Группа объектно-ориентированных языков: Smalltalk в версиях Dolphin и Little, а также VisualAge и VisualWorks.
Программы, написанные на любом из перечисленных языков, не нуждаются в предварительном переводе. Они интерпретируются и выполняются центральным процессорным устройством, при этом реализуется один из алгоритмов построчного выполнения или с преобразованием в промежуточный код.
Чем отличаются компилируемые и интерпретируемые языки программирования
Использование в качестве признака классификации методов исполнения программ процессором позволяет лучше понять алгоритм работы вычислительной техники. Между компиляцией и интерпретацией разница состоит в следующем:
- Компилятор преобразует исходный код в последовательность машинных инструкций, которые непосредственно выполняются компьютером.
- Интерпретатор обеспечивает реализацию одного из трех сценариев: генерация байт-кода и на их основе бинарных инструкций для виртуальных машин, промежуточное представление программы в древовидной форме или используются маркеры операторов низкоуровневых языков.
Сложность рассматриваемого способа классификации заключается в том, что некоторые языки высокого уровня могут использовать и те, и другие алгоритмы. Для примера возьмем JavaScript – компилируемый или интерпретируемый это язык определить будет не так и сложно. Он относится к классу объектно-ориентированных с поддержкой мультипарадигменных сценариев.
Для обеспечения работы программ, написанной на JavaScript, требуется интерпретация. Этим он отличается от похожего по названию языка Java, который относится к статическому типу и реализует иной подход, основанный на классах. Для его загрузки необходима предварительная компиляция байт-кода.
Преимущества и недостатки
Каждый из высокоуровневых языков вне зависимости от типа (компилируемый или интерпретируемый) обладает определенными свойствами. Это в значительной мере относится и к методу исполнения программ, написанных на том или ином диалекте. К достоинствам интерпретируемых языков относят:
- Кроссплатформенность. Они могут работать с различными операционными системами на разных аппаратных платформах.
- Динамическая типизация. Позволяет существенно упростить процесс создания программ, в которых используются переменные данные.
- Возможность пошагового отслеживания выполняемых алгоритмов и изменения программ непосредственно по время их реализации.
- Снижение трудозатрат на написание приложений и их последующую отладку.
Одним из основных недостатков интерпретируемых языков является относительно невысокая скорость выполнения написанных на них программ. По оценкам специалистов приложения на Python или PHP обрабатываются в отдельных случаях на два порядка медленнее, чем их аналоги на C++.
Языки высокого уровня, относящиеся к классу компилируемых, наряду с большой скоростью обработки имеют ряд иных преимуществ:
- В ходе предварительной обработки проводится проверка на наличие ошибок и внутренних противоречий. В случае выявления таковых появляется сообщение для пользователя, который получает возможность исправить ее до запуска.
- После компиляции сразу получается набор из машинных инструкций (машинный код), в котором есть все необходимое для центрального процессора. Этим и определяется высокая скорость их работы.
Языки компилируемого типа имеют и ряд недостатков:
- Необходимость предварительного тестирования успешно скомпилированного приложения. Это требует дополнительных временных затрат и внимания со стороны программиста.
- Исходный код, который скомпилированный для операционной системы Windows, не может быть запущен на Linux и наоборот. Для каждой ОС необходимо создавать отдельный исполняемый файл с использованием соответствующего служебного ПО.
Разница между интерпретируемыми высокоуровневыми языками и компилируемыми состоит в способе обработки процессором написанных на них программ. Скорость процесса в значительной мере зависит от производительности каждого конкретного компьютера или мобильного устройства.
Области применения
По подсчетам специалистов существует порядка 10 тысяч языков программирования высокого уровня. Часть из них устарели и практически не используются. Актуальных направлений в сфере разработки ПО на деле не так много. Рассматриваемые в обзоре высокоуровневые языки находят применение в следующих областях:
- Компилируемые. Создание игр и программ для операционных систем Windows и Linux и разработка мобильных приложений.
- Интерпретируемые. Веб-программирование, создание кроссплатформенных прикладных программ и математические вычисления.
Существуют и универсальные языки программирования такие как C, C++, C#, Java или Python, которые могут использоваться в любой из перечисленных сфер. Выбор языка для написания тех или иных программ в значительной мере определяется средой разработки.
Так какой же язык использовать?
При выборе того или иного языка программирования для написания десктопных или мобильных приложений руководствуются их свойствами и особенностями. Каждый из них имеет собственный набор типов данных и способов их хранения, а также различные операторы и функции. Интерпретируемые и компилируемые высокоуровневые языки имеют разное предназначение и должны использоваться в соответствии с ним:
- Для создания сложных одноразовых программ для математических вычислений и выполнения логических операций наилучшим образом подойдут интерпретируемые языки: Mathematica , MATLAB, JavaScript или PHP.
- Если требуется небольшая компактная программа с высокой скоростью обработки, лучше использовать компилируемые языки: Object Pascal, C или C++.
В действительности классификация языков по способу их исполнения является довольно условной. Для любого из них может быть создана программа интерпретации и компиляции. Кроме того существует класс так называемых совмещенных языков, при обработке которых используются комбинации этих процессов.
Похожие записи:
- Создать свой язык программирования – возможно ли в 2023 году. Первые шаги
- Что такое язык программирования: виды и востребованность в 2023 году
- Программирование на Андроид в 2023 году: как используется, приложения, какой язык выбрать
- Тимлид: кто это, как им стать в 2023 году, обязанности, достоинства и недостатки, зарплата
- Фреймворк в 2023 году: что это такое, как работает, особенности
- Низкоуровневые и высокоуровневые языки программирования
- Игры для программистов в 2023 году – Топ 15 лучших
- Игровой движок Unity: почему его выбирают
- Что такое jQuery и зачем она нужна
- Что такое frontend- и backend-разработка и как стать специалистом в этой области
Источник: itstan.ru