Типы языков программирования | ||||||||||||||||||||||||||||||||||||||||||
|
gfom.ru
3.3.1 Типы языков программирования — функциональные, процедурные, объектно-ориентированные языки
Поколения языков программирования
Необходимость в программировании возникла даже раньше программируемых компьютеров. Известно, что с 18того века, например, существовали ткацкие станки, программируемые при помощи деревянных дощечек, в которых были в нужных местах проделаны дырки.
Развитию программирования поспособствовала идея Джона Фон Ньюмана (англ. John Von Neumann), опубликованная в 1945 году, в которой он описал компьютер, где в памяти вместе с данными хранится и сама программа.
Языком программирования первого поколения считается машинный код. Машинный код состоит из инструкций, которые компьютер (процессор) может выполнить (а также данных, которые принадлежат этим инструкциям). Программируя на машинном коде, программист должен был писать свою программу в двоичном коде, так что бы процессор мог это понять и исполнить. В сущности, такое программирование требует хорошего знания и понимания аппаратного обеспечения, потому что в процессе программирования необходимо знать что процессор может сделать, где находятся устройства ввода-вывода (англ. I/O- Input-Output), а также как с ними необходимо общаться и сколько времени будет потрачено на ту или иную операцию. Таким образом, машинный код очень крепко связан с аппаратным обеспечением, на котором соответствующая программа будет работать. На сегодняшний день машинный код из компьютеров никуда не исчез, все действия на низком уровне (уровне аппаратного обеспечения) происходят до сих пор в машинном коде, т.е. на каком бы языке программирования не была написана программа в, конечном итоге она преобразуется в понятный аппаратному обеспечению машинный код.
Языками второго поколения считаются языки Ассемблера. В случае машинного кода всё программирование происходило в двоичном коде, и в связи с этим его чтение и отладка были очень трудоёмкими. При программировании на языке Ассемблера же инструкции представлены человеку в понятной форме. Само программирование является очень похожим на программирование в машинном коде, потому что инструкции те же самые, что и в машинном коде (только в другом виде — в виде слов). Программа, написанная на языке Ассемблера, представляет собой что-то вроде следующего:
MOV AL, 19
ADD AL, 4
OUT 2
Данный отрывок кода присваивает регистру AL значение 19(обычно значения представлены числами в шестнадцатеричной системе), прибавляет к значению регистра AL число 4 и после этого отправляет на выход номер 2. Написанная программа переводится из ассемблера в машинный код и после этого процессор может начать её выполнение.
Языки ассемблера и машинный код считаются языками низкого уровня.
Языками программирования третьего поколения называются уже языки высокого уровня. Такие языки программирования не очень связаны с аппаратными средствами. Это значит, что программист не должен больше очень точно знать устройство и особенности аппаратного обеспечения, однако может сравнительно независимо аппаратных средств, после чего эта программа преобразуется при помощи некоторых разных инструментов в форму понятную аппаратному обеспечению. Конкретнее о том, как это делается, будет описано позже.
К числу языков третьего поколения относится большинство известных и используемых языков программирования, например:
FORTRAN (The IBM Mathematical FORmula TRANslating System) — язык программирования, разработанный в 1950-тых годах для математических вычислений и в научных целях.
COBOL (COmmon Business Oriented Language) — Объектно-ориентированный язык программирования, созданный в 1959году, в основном для написания программ удовлетворяющих бизнес нуждам.
BASIC (Beginner’s All-purpose Symbolic Instruction Code) — Язык, разработанный в 1963 году, который поначалу создавался для того, чтобы инженеры могли производить на компьютерах различные симуляции.
Pascal — Язык программирования, созданный в 1970х годах и который создавался для обучения программированию.
С — имя происходит от того, что этот язык в основном базировался на языке с именем B. Создавался для написания операционных систем (многие UNIX совместимые операционные системы написаны на этом языке), уже долгое время является одним из самых популярных языков программирования.
С++ - объектно-ориентированный С.
Java — язык программирования, разработанный на основе С++.
Visual Basic, Delphi, Python, C# — все являются языками третьего поколения. Многие языки программирования третьего поколения моложе (новее), чем некоторые языки четвёртого и пятого поколений.
Языки программирования четвертого поколения разработаны с целью упростить их изучение и использование. Эти языки, как правило, непроцедурные сосредоточены на единственном применении. Примером языка программирования четвертого поколения может служить SQL(Structured Query Language). Тут больше говориться «что делать» и меньше - «как делать». Языки пятого поколения созданы для разработки систем искусственного интеллекта и для решения связанных с этой темой проблем.
Базовые типы языков программирования.
В отличие от поколений языков программирования, базовые типы описывают каким образом можно программировать на каком-либо языке. К главным базовым типам относят: процедурные, функциональные и объектно-ориентированные языки программирования.
В процедурных языках программирования на языке программирования описываются действия и порядок их выполнения, а также эти действия разбиваются на группы (подпрограммы). Из процедур в свою очередь формируются структуры кода, которые можно повторно использовать. В функциональных языках программирования всё решение описывается при помощи функций. В объектно-ориентированных языках программирования решение проблемы производится при помощи функций и структур данных, описанных в классах (англ. Class). Из каждого класса можно создать объект, у которого будет набор свойств и/или методов.
Свойства — это значения, которые объект может содержать, и которые могут влиять на поведение объекта. Например, на основе класса «консольное окно» можно создать объект «консоль1», который будет виден пользователю, как одно консольное окно. У этого объекта присутствуют некоторые свойства (показано, скрыто, ширина, высота, цвет текста в консольном окне, цвет фона и т.д.), изменяя эти свойства можно в данном конкретном случае менять внешний вид объекта.
В этом же примере у объекта могут быть и некоторые методы, так например, обращаясь к соответствующему методу можно записать в консольное окно какой-то текст, прочитать в некоторую переменную текст введённый пользователем и т.д.
Вторым примером можно привести класс «текстовая переменная», создав на базе этого класса объект «ПростоТекст», создаём одну текстовую переменную, основное свойство которой - это хранящееся текстовое значение, однако на самом деле свойств у этого объекта больше (например, длина хранящегося текстового значения). Также у текстовой переменной должен быть некий набор методов (изменить символы хранящегося значения на строчные, заглавные, удалить некоторые символы и т.д.).
Поэтому описывая классы и манипулируя объектами, возможно составить очень сложные программы и выполнить различные действия.
Интерпретируемые и компилируемые языки
До того, как компьютер сможет выполнить программу, написанную на языке высокого уровня, её приходится «переводить» на понятный компьютеру язык, т.е. машинный код. Этот процесс перевода называют трансляцией, а программу-переводчик — транслятором. Трансляторы делятся на два класса: компиляторы и интерпретаторы.
Компиляция заключается в том, что программа в машинном коде (называемая компилятором) преобразует другую программу, написанную на языке программирования в машинный код. После этого полученный машинный код программы выполняется. Примером компилируемых языков можно назвать C, Fortran, Pascal.
Интерпретация заключается в том, что программа в машинном коде (интерпретатор) записывает файл программы во внутреннюю память и начинает её построчно выполнять. Примером может служить старый язык BASIC.
Интерпретация программы примерно в 10-200 раз медленнее, чем выполнение скомпилированного кода. В противовес отладка (удаление ошибок из программы) интерпретируемой программы, как правило, проще, чем в случае транслируемой программы. В некоторых подходящих случаях и при наличии подручных инструментов эти различия могут быть гораздо меньше. Хорошим примером служит Java с кодом, оптимизированным и скомпилированном на промежуточном уровне, который во время выполнения транслируется компилятором Just-in-Time в подходящий конкретному аппаратному обеспечению.
В принципе программу, написанную на любом языке можно как интерпретировать, так и скомпилировать.
www.e-ope.ee
3 Типы языков программирования высокого уровня
Если в качестве признака классификации взять синтаксис образования его конструкций, можно условно разделить на следующие типы:
процедурный,
функциональный,
логический,
объектно-ориентированный.
3.1. Процедурный (алгоритмический) язык
Процедурный язык программирования предоставляет возможность программисту определять каждый шаг в процессе решения задачи. Особенность таких языков программированиясостоит в том, что задачи разбиваются на шаги и решаются шаг за шагом. Используя процедурный язык, программист определяет языковые конструкции для выполнения последовательности алгоритмических шагов.
Процедурные языки характеризуются следующими особенностями:
необходимостью явного управления памятью, в частности, описанием переменных;
малой пригодностью для символьных вычислений;
отсутствием строгой математической основы;
высокой эффективностью реализации па традиционных ЭВМ.
Одним из важнейших классификационных признаков процедурного языка является его уровень. Уровень языка программирования определяется семантической емкостью его конструкций и степенью его ориентации на программиста. Чем более язык ориентирован на человека, тем выше его уровень.
К процедурным языкам относятся: язык Ассемблера, С, Basic, Pascal.
3.2 Функциональный (аппликативный) язык
Первым таким языком был LISP.
Роль основной конструкции в функциональных (аппликативных) языках играет выражение. К выражениям относятся скалярные константы, структурированные объекты, функции, тела функций и вызовы функций.
Аппликативный язык программирования включает следующие элементы:
классы констант, которыми могут манипулировать функции;
набор базовых функций, которые программист может использовать без предварительного объявления и описания;
правила построения новых функций из базовых;
правила формирования выражений на основе вызовов функций.
Перечисленные свойства характеризуют аппликативные языки как языки программирования очень высокого уровня.
3.3 Логический (реляционный) язык
Язык PROLOG был создан французским ученым А. Кольмероэ в 1973 году. В настоящее время известны и другие языки, однако наиболее развитым и распространенным языком логического программирования является именно Пролог. Языки логического программирования широко используются в системах искусственного интеллекта.
Языки логического программирования характеризуются:
высоким уровнем;
строгой ориентацией на символьные вычисления;
возможностью инверсных вычислений, то есть переменные в процедурах не делятся на входные и выходные;
возможной логической неполнотой, поскольку зачастую невозможно выразить в программе определенные логические соотношения, а также невозможно получить из программы все выводы правильные.
Конструкции языка соответствуют не математическим формулам, а определяют отношения между объектами и величинами, они констатируют, какой результат желателен пользователю, не указывая, каким образом это сделать.
Логические и функциональные языки – это декларативные языки. В этих языках отсутствует понятие «оператор» («команда»).
3.4 Объектно-ориентированный язык
Объектно-ориентированный язык создает окружение в виде множества независимых объектов. Каждый объект ведет себя подобно отдельному компьютеру, их можно использовать для решения задач как «черные ящики», не вникая во внутренние механизмы их функционирования.
Объектно-ориентированные языки программирования пользуются в последнее время большой популярностью среди программистов, так как они позволяют использовать преимущества объектно-ориентированного подхода не только на этапах проектирования и конструирования программных систем, но и на этапах их реализации, тестирования и сопровождения.
В современных объектно-ориентированных (ОО) языках используются следующие методы: наследование,инкапсуляция,полиморфизм.
В некоторых объектно-ориентированных языках все методы классов являются виртуальными.
Многие современные языки специально созданы для облегчения объектно-ориентированного программирования. Однако следует отметить, что можно применять техники ООП и для не-объектно-ориентированного языка и наоборот, применение объектно-ориентированного языка вовсе не означает, что код автоматически становится объектно-ориентированным.
Часть языков (иногда называемых «чисто объектными» — Java или Ruby) целиком построена вокруг объектных средств — в них любые данные являются объектами, любой код — методом какого-либо класса и невозможно написать программу, в которой не использовались бы объекты. Другие языки («гибридные») включают ООП-подсистему в исходно процедурный язык. В них существует возможность программировать, не обращаясь к объектным средствам. Классические примеры — C++ и Delphi (Object Pascal).
studfiles.net
Виды языков программирования и их назначение
Существует большое количество видов и назначений языков программирования. Они активно применяются для решения как некоторого узкого круга задач, так и во многих довольно широких сферах деятельности. Начинающий программист должен сделать серьезный шаг, выбирая подходящий ему язык или языки, так как от этого зависит, в какой области программирования ему придется работать, будет ли просто найти работу и заказы или же для этого придется существенно потрудиться. Все это непосредственно зависит от вида языка, на который пал выбор начинающего.
Исследуя такой вопрос, как виды языков программирования, можно прийти к выводу, что как такового жесткого разделения здесь не существует. Даже в плане классификации языков стоит полная неразбериха и споры, точно также происходит и в определении видов языков. Лучше всего разделить языки на какие-то виды получается, глядя на их назначение и сферу применения. Одни языки предназначены для работы с веб областью, другие – для создания компьютерного ПО, третьи лучше всего подходят для мобильной разработки. Есть и общие языки, которые активно применяются практически во всех сферах программирования. Рассмотрим наиболее распространенные виды языков программирования в зависимости от сферы их применения.
Веб-разработка
Интернет бурно развивается уже последних полтора десятилетия и все, что связано с этой сферой, очень востребовательно, дорого и выгодно. Сюда стремительными темпами смещается торговля, бизнес, все чаще люди пользуются услугами банков удаленно с помощью программ-банкингов, развлечения также ушли в интернет (игры, фильмы, книги и даже онлайн казино). Все это требует активной работы программистов и используются в данной работе специальные виды языков программирования. Рассмотрим разновидность языков программирования для веб-разработки и их основные возможности.
HTML
HTML язык гипертекстовой разметки страниц в интернете. Появился он в 1993 году во всемирно известном научном центре Церн. Создателем HTML стал ученый Тим Бернерс-ли. Изначально язык создавался для использования в академической среде и предназначался для обмена документацией. Основную роль в оформлении документа здесь занимают так называемые теги, благодаря которым задаются важнейшие элементы документа: заголовок, шапка, таблицы и другое. Язык прост в освоении и способен красиво представлять почти любые документы. Открытие HTML страниц происходит в специальных приложениях – браузерах.
CSS
Каскадные таблицы стилей, или CSS, разработан для того, чтобы украсить сухой вид HTML документа и сделать его более привлекательным внешне. С помощью этого языка создаются шрифты для текста на интернет страницах, изменяется цвет текста, его размер, накладывается анимация. Благодаря этому языку можно значительно упростить вид XML документа и сделать его менее объемным и более простым. Вместо того, чтобы приписывать к каждому абзацу текста нужные свойства, можно просто создать для всех необходимых абзацев единый стиль оформления с помощью CSS и применить его в нужных местах. Это экономит усилия программиста, делает сайт более быстрым и универсальным для открытия в разных браузерах и на разных устройствах. Конечно, CSS не входит в языки программирования общего назначения, но, тем не менее, он отлично справляется с поставленными на него задачами.
PHP
Универсальный язык программирования для веб области, с помощью которого можно создавать какие угодно сайты, веб-приложения, онлайн сервисы, отлаживать работу серверов и даже создавать удаленные операционные системы. Если первые варианты языков не дают своему обладателю существенных преимуществ в программировании, то PHP открывает перед человеком существенные возможности и дорогу к карьерному росту. Конечно, освоение языка потребует больших усилий и времени по сравнении с HTML или CSS, но это с лихвой окупится в будущем.
Мобильная разработка
Рынок смартфонов все еще продолжает активно расти и поклонники гаджетов с нетерпением ждут представления очередной новинки от Apple или Samsung. Вместе с этими популярность разработки для гаджетов только растет. Этот вид языков применяется для создания мобильных приложений и сервисов. Для программ под Android применяется связка Java + Android Studio (фирменная программа от Google). Java выступает основным языком, на котором пишется вся механика и функционал приложения, а Android Studio необходим для создания его внешнего вида.
Для устройств Apple программы создаются на двух основных языках: Swift и Objective-C. У каждого из них есть свои поклонники, но их возможности примерно равны. Для чего предназначены эти языки? Все для тех же задач – создание приложений, интерфейса и прочих приятностей для iPhone, Mac.
Разработка ПО для компьютерной техники
Еще одна большая область программирования, очень востребовательная в наше время. Используемые здесь языки программирования и их назначение довольно разнообразны, но среди лидеров можно назвать следующие:
- C. Отличный, но уже старый язык, который используется для создания ОС, драйверов, различного ПО, имеет все свойства низкоуровневого языка;
- С++. Более совершенная версия предыдущего, способна выполнять любые требуемые действия для ПК. Активно используется для создания игр;
- Python. Относительно простой, но универсальный язык, с помощью которого можно легко разрабатывать программное обеспечение, отличающееся высокой производительностью и простотой;
- Ruby. С его помощью можно реализовывать многопоточные режимы работы, легко взаимодействовать с памятью машины, легко подгружать нужные расширения в автоматическом режиме и многое другое.
Существуют и более тщательные деления языков на виды, но указанные сферы вполне перекрывают большинство их них, так как являются наиболее ходовыми и востребовательными сейчас.
В целом, это основные виды языков программирования и с их помощью можно легко реализовывать любые задумки программиста – от создания интернет-магазина и до написания замысловатой игры на мобильник.
bunkerbook.ru
Классификация языков программирования
Классификация языков программирования по категориям связана с методами, которые используются при написании программ.
интернет-биржа студенческих работ»>
Рисунок 1. Классификация языков программирования. Автор24 — интернет-биржа студенческих работ
Процедурные языки
Процедурные языки являются языками высокого уровня, в которых используется метод разбиения программ на отдельные связанные между собой модули – подпрограммы (процедуры и функции). Компоненты языка состоят из последовательности операторов, которые используют библиотечные процедуры и функции. Первым процедурным языком был Fortran, затем появился Cobol, Algol, Pascal, C, Ada.
Языки программирования низкого уровня
Замечание 1
Программирование на первых компьютерах происходило с помощью двоичных машинных кодов. Такое программирование довольно трудоемкое и тяжелое. Для упрощения процесса программирования разрабатывались языки программирования низкого уровня, которые позволяли задавать машинные команды в понятном для человека виде. Чтобы преобразовать их в двоичный код создавались специальные программы – трансляторы.
К языкам низкого уровня относится:
- программирование в машинных кодах;
- ассемблер;
- макроассемблер.
Языки низкого уровня ориентировались на определенный тип процессора и учитывали его особенности, поэтому для того, чтобы перенести программу, написанную на ассемблере, на другую аппаратную платформу её нужно было почти полностью переписать. Различия присутствовали также и в синтаксисе программ под разные компиляторы.
Языками низкого уровня пользуются преимущественно для написания небольших системных программ, драйверов устройств, модулей стыков с нестандартным оборудованием, программирования специализированных микропроцессоров, когда немаловажным является компактность, быстродействие и возможность прямого доступа к аппаратным ресурсам.
Языки программирования высокого уровня
В языках высокого уровня особенности конкретных компьютерных архитектур не учитываются, поэтому написанные программы легко могут быть перенесены на другой компьютер. Зачастую достаточным является компиляция программы под определенную архитектурную и операционную систему. Разработка программ на языках высокого уровня значительно проще и ошибок намного меньше. К тому же время разработки программы значительно уменьшается, что является особенно важным фактором при работе над сложными программными проектами.
Недостаток некоторых языков высокого уровня состоит в большом размере программ по сравнению с программами на языках низкого уровня. В то же время текст программ на языке высокого уровня гораздо меньше, но в байтах код, написанный на ассемблере, будет более компактным. Поэтому языки высокого уровня преимущественно используют для создания программного обеспечения для компьютеров и вычислительных устройств с большим объемом памяти. Языки же низкого уровня используются для написания программ к устройств, для которых критичным является размер программы.
Языки высокого уровня делятся на универсальные и проблемно-ориентированные.
Наиболее распространенные универсальные языки C#, C++, Basic, Pascal (Delphi) используются для разработки Windows-приложений. Большой вклад в программирование на начальных этапах внесли языки Fortran, Cobol, Algol, C и др.
Языки программирования для разработки Интернет-приложений скорее относятся к универсальным языкам. К ним относятся современные версии C#, Basic, J#.
Замечание 2
Проблемно-ориентированными языками, которые используются на Интернет-серверах и клиентских Интернет-приложениях, являются PHP, Perl, JavaScript, VBScript.
Объектно-ориентированные языки
Объектно-ориентированные языки стали дальнейшим уровнем развития процедурных языков, основной концепцией которых есть совокупность программных объектов. Написание программы на языке представляется в виде последовательности создания экземпляров объектов и использование их методов. К ним относятся из первых языков Simula и SmallTalk, далее C++, Java.
Декларативные языки программирования
В декларативном программировании задается спецификация решения задачи, то есть дается описание того, что представляет собой проблема и какой ожидается результат. Программы, созданные с помощью декларативного языка, не содержат переменные и операторы присваивания. К декларативным языкам можно отнести SQL и HTML. К подвидам декларативного программирования относится функциональное и логическое программирование.
Функциональные языки программирования
Функциональные языки являются языками искусственного интеллекта. Программа, написанная на функциональном языке, состоит из последовательности функций и выражений, которые необходимо вычислить. Основной структурой данных является связный список. Функциональное программирование принципиально отличается от процедурного. Основными функциональными языками являются Lisp, Miranda, Haskel.
Логические языки программирования
Языки, ориентированные на решение задач без описания алгоритмов, языки искусственного интеллекта. Представителем логического программирования является Prolog, которым написано большинство экспертных систем.
Языки сценариев (скрипты)
Языки относятся к объектно-ориентированным языкам, используются для написания программ, которые исполняются в определенной программной среде. Тексты программ, написанные на языке сценариев, можно включать в тело Html-документа. Первыми скриптами были Perl и Python, которые изначально были разработаны для операционной системы Unix, а уже в дальнейшем появились версии языков для операционных систем Windows и Macintosh. Для написания программ на языке сценариев необходимо знание процедур и функций системных библиотек.
Языки, ориентированные на данные
Языки ориентированы на работу с одним определенным типом данных. Например, APL работает с матрицами и векторами, Snobol обрабатывает строки, SETL выполняет операции над множествами.
Особое развитие получили языки для работы с базами данных:
Замечание 3
Широкими возможностями обработки документов текстового процессора Microsoft Word, электронных таблиц MS Excel, баз данных MS Access и даже программ подготовки слайдовых презентаций MS PowerPoint обладает встроенный язык системы MS Office – Visual Basic for Application (VBA).
spravochnick.ru
Назначение языка программирования. Типы языков программирования — Мегаобучалка
Системы счисления.
Система счисления— это способ записи чисел с помощью заданного набора специальных знаков (цифр).
Запись числа в некоторой системе счисления называется кодом числа.
Отдельную позицию в изображении числа принято называть разрядом, а номер позиции — номером разряда. Число разрядов в записи числа называется разрядностью и совпадает с его длиной.
Существуют системы позиционные, непозиционные и смешанные.
В непозиционных системах счисления вес цифры не зависит от позиции, которую она занимает в числе. Так, например, в римской системе счисления в числе XXXII (тридцать два) вес цифры X в любой позиции равен просто десяти.
Пример непозиционнойсистемы счисления — римская. В качестве цифр в римской системе используются: I(1), V(5), X(10), L(50), C(100), D(500), M(1000).
Величина числа в римской системе счисления определяется как сумма или разность цифр в числе. Если меньшая цифра стоит слева от большей, то она вычитается, если справа — прибавляется.
Пример:
CCXXXII=232
IX =9
В позиционных системах счисления вес каждой цифры изменяется в зависимости от ее позиции в последовательности цифр, изображающих число.
Любая позиционная сиситема характеризуется своим основанием. Основание позиционной системы счисления — это количество различных знаков или символов, используемых для изображения цифр в данной системе. За основание можно принять любое натуральное число — два, три, четыре, шестнадцать и т.д. Следовательно, возможно бесконечное множество позиционных систем.
Примеры позиционнойсистемы счисления — двоичная, десятичная, восьмеричная, шестнадцатеричная системы счисления и т. д.
Принцип программного управления.
Джоном фон Нейманом в 1945 г. были описаны основные принципы построения компьютеров, которые до сих пор являются стандартом практически для всех компьютеров. Одним из них является программное управление.
В основе принципа программного управления лежит представление алгоритма решения любой задачи в виде программы вычислений.
Алгоритм– точное предписание, определяющее процесс преобразования исходных данных в конечный результат. При решении задачи применим общий алгоритм: 1) получить исходные данные;2) найти решение; 3) сообщить ответ.
Программа(для компьютера)– это упорядоченная последовательность команд, подлежащая обработке. Программа описывает операции, которые нужно выполнить процессору компьютера для решения поставленной задачи.
Команда-это инструкция машине на выполнение элементарной операции. Набор операций, которые может выполнять компьютер, и правил их записи образуют машинный язык.
Структура команды в общем случае имеет вид:
Суть принципа программного управления заключается в следующем:
·все вычисления, предписанные алгоритмом решения задачи, должны быть представлены в виде программы, состоящей из последовательности управляющих слов-команд;
·каждая команда содержит указания на конкретную выполняемую операцию, место нахождения (адрес) операндов и ряд служебных признаков. Операнды –это переменные, значения которых участвуют в операциях преобразования данных.
·команды программы расположены в памяти друг за другом, что позволяет микропроцессору организовывать выборку цепочки команд из последовательно расположенных ячеек памяти и выполнять команду за командой.
·для перехода к выполнению не следующей по порядку команды, а к какой-то другой, используются команды условного или безусловного переходов.
Некоторые программы постоянно размещаются в памяти и называются резидентными, а другие – загружаются только на время выполнения, а затем удаляются из памяти, и называются транзитными.
Программы, записанные в ПЗУ, составляют базовую систему ввода/вывода (BIOS), которая является промежуточным звеном между программным обеспечением компьютера и его электронными компонентами. Ее компоненты обеспечивают выполнение всех операций ввода/вывода в соответствии со специфическими особенностями работы каждого из периферийных устройств данного компьютера (драйверы стандартных устройств), тестируют работу памяти и устройств компьютера при включении электропитания (тест), а также выполняют загрузку операционной системы.
Назначение и классификация языков программирования.
Назначение языка программирования. Типы языков программирования.
Программы пишутся на ЯП. В отличие от живых языков, языки программирования более просты, поскольку состоят из ограниченного набора слов, предназначенных исключительно для записи алгоритмов. Любая фраза на языке программирования должна подчиняться синтаксису этого языка. Программы на языке программирования вводят в компьютер как обычный текст, а тот, зная, что это текст — программа, преобразует его к виду удобному для исполнения.
Так, язык АЛГОЛ был в свое время создан международной ассоциацией ученых для написания и публикации алгоритмов. Для решения задач в области коммерции был специально разработан язык КОБОЛ, для компьютерной обработки текстов был создан язык ПРОЛОГ, для обучения студентов программированию был придуман языки БЕЙСИК и ЛИСП, для сложных математических расчетов — ФОРТРАН, для облегчения программирования аппаратуры компьютеров — язык СИ.
Основные назначение языков программирования. — быть средством программирования: формулирования программ и их реализации на ЭВМ.
Следует учитывать, что реальные программы выполняются в среде определенной ос. Операционная система представляет собой специальный программный комплекс. В настоящее время наиболее популярными операционными системами являются операционные системы фирмы Microsoft (MS-DOS, MS Windows), а также операционные системы семейства UNIX(Linux и др.). Если к абстрактной вычислительной машине добавить операционную систему, получим виртуальную машину. Программы пишутся для абстрактной вычислительной машины, а для виртуальной машины создаются трансляторы и среды разработки и отладки программ.
Для написания программ на низком уровне абстракции используются языки программирования низкого уровня. Языки низкого уровня используются для очень подробного и детального описания операций, настолько детального, что при этом учитывается архитектура компьютера, устройство его центрального процессора. Такие языки называются машинными кодами и ассемблерами. Ассемблер дает несколько более удобный способ записи программ в машинных кодах. Программа на ассемблере получается длинной, следовательно увеличивается вероятность появления ошибок. Для составления такой программы требуется знание архитектуры компьютера, это увеличивает трудоемкость программирования. Программа оказывается привязанной к конкретной архитектуре. Все это можно считать недостатками программирования на языках низкого уровня. Преимуществом является возможность «выжать» из компьютера все что можно, и прежде всего — максимум быстродействия.
Языки программирования высокого уровня были созданы для того, чтобы преодолеть недостатки низкоуровневого программирования. Они позволяют использовать различные операции, не заботясь о деталях их реализации на конкретной архитектуре. Программы при этом оказываются более короткими, надежными и универсальными, а процесс их составления сокращается. Языки высокого уровня бывают четырех видов: императивные (процедурные), функциональные , логические , объектно-ориентированные .
megaobuchalka.ru
iMath Wiki — 21. Языки программирования. Классификация ЯП
Язык программирования – это искуственный язык, созданный для взаимодействия с машиной, в частности, с компьютером. ЯП используются для написания программ, которые управляют машиной и/или выражают алгоритмы.
Первые ЯП были созданы задолго до появления компьютеров и управляли поведением, скажем, самоиграющих пианино или автоматических ткацких станков.
Многие ЯП имеют императивную форму, т.е. описывают последовательность операций. Другие могут иметь декларативную форму, т.е. описывают результат, а не то, как его получить.
Некоторые языки определяются стандартом (C,C++,Haskell, и др.). Другие не имеют формального описания, и наиболее широко распространенная реализация используется в качестве эталона.
Описание ЯП обычно делится на две части: синтаксис, т.е. форма, и семантика, т.е. значение.
Семантика в свою очередь подразделяется на лексику и грамматику.
Лексика определяет какие “слова” могут быть в языке. Это включает названия переменных, функций, числовые константы, строки, и т.п., а так же управляющие символы языка. Грамматика определяет каким образом эти “слова” комбинируются в более сложные выражения.
Не все синтаксически корректные программы являются семантически корректными. Например:
Здесь *p
не определено, *p >> 4
не определено, даже если определено *p
, и p->im
так же не определено. Тем не менее, синтаксически это корректная программа.
Семантика же подразделяется на статическую, динамическую, и систему типов.
- Статическая семантика
определяет статические свойства языка, выходящие за рамки синтаксиса. Например, статическая семантика может определять, что все идентификаторы должны быть определены перед использованием, или что вызов функции должен принимать столько же аргументов, сколько указано в ее определении (ни то ни другое не является обязательным, кстати сказать)
- Динамическая семантика
определяет стратегию выполнения программы. Она определяет, каким образом исполняются инструкции, порядок их исполнения, значение управляющих структур и т.д.
- Система типов
определяет каким образом ЯП классифицирует значения и выражения, как эти типы взаимодействуют и каким образом ЯП может манипулировать ими. Система типов является практическим приложением теории категорий. Цель системы типов – проверка программы на корректность (до какой-то степени). Любая система типов, отвергая некорректные программы, будет так же отвергать некоторый процент коррекнтых (хотя необычных) программ. Чтобы обойти это ограничение, ЯП обычно имеют некие механизмы для выхода из ограничений системы типов. В большинстве случаев, указание корректных типов ложится на совесть программиста. Однако некоторые ЯП (обычно функциональные) умеют выводить типы исходя из семантики, и таким образом освобождают программиста от необходимости явно указывать типы.
Классификация языков программирования
Существует множество критериев, по которым можно классифицировать языки программирования. Частые варианты классификации включают:
- По парадигме (декларативные, императивные, структурированные и т.п.)
- По системе типов (динамические, статические, сильно- и слаботипизированные, нетипизированные и т.п.)
- По уровню абстракции (высокого, низкого уровня)
- По модели исполнения (компилируемые, интерпретируемые)
- По “поколению”
Четкой классификации не существует, по той простой причине, что существуют буквально тысячи ЯП, и в любой категории классификации обнаруживается практически непрерывный спектр.
По системе типов
Наиболее категоричное разделение ЯП по системе типов на типизированные и нетипизированные.
- Нетипизированные языки
- позволяют производить любую возможную операцию над любыми данными. Это обычно какие-либо языки ассемблера, которые работают непосредственно с двоичным представлением данных в памяти.
С точки зрения теории типов очень немногие из современных языков являются типизированными в полном смысле этого слова. Большинство являются типизированными в некоторой мере. Так, многие языки позволяют выходить за пределы системы типов, принося типобезопасность в жертву более точному управлению исполнением программы.
- Типизированные языки
- определяют типы данных, с которыми работает любая операция. Например, операция деления работает над числами – для строк эта операция не определена.
Типизированные языки, в свою очередь, могут классифицироваться по моменту проверки типов и по строгости этой проверки.
По моменту проверки типов ЯП делятся на статически и динамически типизированные (или просто, статические и динамические).
- Статически типизированные языки
При статической типизации, типы всех выражений точно определены до выполнения программы, и обычно проверяются при компиляции. Языки со статической типизацией, в свою очередь могут быть явно типизированными (manifestly typed) или типовыводящими (type-inferred).
- Явно типизированные языки
требуют явного указания типов. К ним относятся, например, C, C++, C#, Java.
- Типовыводящие языки
определяют (выводят) типы большинства выражений автоматически, и требуют явного аннотирования только в сложных и неоднозначных случаях. К ним относятся, например, Haskell и OсaML.
Надо заметить, что многие явно типизированные языки умеют выводить типы в некоторых случаях (например, auto
в С++11), поэтому четкую грань здесь провести можно не всегда.
- Динамически типизированные языки
производят проверку типов на этапе выполнения. Иначе говоря, типы связаны со значением при выполнении, а не с текстовым выражением. Как и типовыводящие языки, динамически типизированные не требуют указания типов выражений. Помимо прочего, это позволяет одной переменной иметь значения разных типов в разные моменты исполнения программы. Однако, ошибки типов не могут быть автоматически обнаружены, пока фрагмент кода не будет выполнен. Это усложняет отладку и несколько подрывает идею типобезопасности в целом. Примерами динамически типизированных языков являются Lisp, Perl, Python, JavaScript и Ruby.
По строгости типизации языки делятся на сильно и слабо типизированные.
- Слабо типизированные языки
неявно конвертируют один тип в другой, скажем, строки в числа и наоборот. Это может быть удобно в некоторых случаях, однако многие программные ошибки могут быть пропущены. Усложняется отладка.
- Сильно типизированные языки
не позволяют неявную конверсию, и требуют явной.
В целом, четкую грань провести оказывается достаточно сложно, поскольку неявное преобразование типов в той или иной мере производится в большинстве языков. Однозначно к слабо типизированным относят Perl, JavaScript и C (в силу свободной конверсии void*
). К сильно типизированным относят C++, Java, Haskell, и другие.
По уровню абстракции
Классификация по уровню абстракции сильно зависит от современных представлений о “высоком уровне абстракции”.
Языки по-настоящему низкого уровня – это машинный код и языки ассемблера, все остальные – в некотором смысле языки высокого уровня. Тем не менее, многие сейчас считают C и C++ языками низкого уровня.
Java, Python, Ruby и т.п. сейчас общепринято считаются языками высокого уровня.
Языки высокого уровня могут значительно упрощать реализацию сложных алгоритмов, однако обычно они генерируют менее эффективный машинный код, чем языки более низкого уровня.
По модели исполнения
ЯП может быть компилируемым, транс-компилируемым или интерпретируемым.
Интерпретируемые языки исполняются непосредственно, без этапа компиляции. Программа, называемая интерпретатором, читает каждое выражение, определяет сообразное действие, и совершает его. Гибридный вариант может генерировать машинный код “на лету” и исполнять его.
Интерпретируемые языки: PHP, Perl, Bash, Python, JavaScript, Haskell
Компилируемый язык компилируется, т.е. переводится в исполнимую форму до выполнения.
Компиляция может производиться непосредственно в машинный код, или в какое-либо промежуточное представление (байт-код), которое потом интерпретируется виртуальной машиной.
Компилируемые языки (машинный код): ASM, С, С++, Algol, Fortran Компилируемые языки (байт-код): Python, Java
Транс-компилируемые языки – это языки, которые сперва переводятся в язык более низкого уровня, который в свою очередь уже может быть скомпилирован. Частой целью для транс-компилируемых языков является C, который, в свою очередь, часто является транс-компилируемым в ассемблер.
Транс-компилируемые языки: C, C++, Haskell, Fortran
Линии сильно размыты, поскольку существуют компиляторы для традиционно интерпретируемых языков, и, напротив, интерпретаторы для традиционно компилируемых.
Классификация по “поколению”
Поколение – несколько условная характеристика, которая в значительной мере связана с историей появления современных языков программирования.
- Языки первого поколения
1GL – это машинные языки. Исторически, программы на этих языках вводились при помощи переключателей на передней панели ЭВМ, либо “писались” на перфокартах и позже перфолентах. Программа на 1GL состоит из 0 и 1 и сильно привязана к конкретному железу, на котором она должна исполняться.
- Языки второго поколения
Это общая категория для различных языков языков ассемблера. С одной стороны, код языков 2GL может читать человек, и он должен быть конвертирован в машино-читаемую форму (этот процесс называется ассемблированием, или сборкой). С другой стороны, этот язык специфичен к процессору и прочему аппаратному окружению.
- Языки третьего поколения
Более абстрактные, чем 2GL, это языки, которые перекладывают заботу о непринципиальных деталях с плеч программиста на плечи компьютера. Fortran, ALGOL и COBOL являются первыми 2GL. C, C++, Java, BASIC и Pascal так же могут быть отнесены к 3GL, хотя в общем 3GL подразумевает только структурную парадигму (в то время как C++, Java работают в том числе в ООП)
- Языки четвертого поколения
Определение несколько расплывчато, однако в целом сводится к еще более высокому уровню абстракции, чем 3GL. Однако, подобный уровень абстракции часто требует сужения области применения. Так, например, FoxPro, LabView G, SQL, Simulink являются 4GL, однако находят применение в узкой специфической области. Некоторые исследователи считают, что 4GL являются подмножеством DSL (domain specific language, язык, специфичный к области).
- Языки пятого поколения
В конце 80-х – начале 90-х была попытка разработать класс языков, которые “пишут программы сами”. По идее, программист должен был описывать как программа должна себя вести, а остальное должен был делать компьютер. К примерам можно отнести Prolog, OPS5, Mercury. К добру или худу, но эта затея провалилась, поскольку создание эффективного алгоритма для решения конкретной проблемы – само по себе весьма нетривиальная задача, и часто для ее решения требуются человеческая смекалка и интуиция.
wiki.livid.pp.ru