Вы находитесь на странице: 1из 9

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

Основные понятия

Разработка программы включает два этапа:


– создание алгоритма,
– представление алгоритма в виде программы.
Требования к алгоритму:
– алгоритм записывается на формальном языке, исключающем
неоднозначность толкования,
– исполнитель должен быть способен выполнять команды алгоритма
автоматически; отдельную операцию, действие по изначально заданным
условиям не имеет смысла детализировать,
– описание решения должно быть абсолютно полным и учитывать все
возможные ситуации.
Таким образом алгоритм представляет собой детализированный до
необходимого уровня способ получения результатов, удовлетворяющих
поставленным условиям, по исходным данным.
Программа – это последовательность машинных инструкций,
описывающая алгоритм.
Для создания компьютерных программ используются специальные языки
программирования.
Алгоритм – основная идея решения, программа – связана с записью
алгоритма на конкретном языке программирования.
Язык программирования – формальная знаковая система
(искусственный формализованный язык), предназначенная для записи
программ.
Язык программирования определяет набор лексических, синтаксических и
семантических правил, используемых при составлении программы.
Лексика – словарный состав языка, совокупностей слов (частей) языка.
Синтаксис – набор правил по построению программы, комбинации
символов языка.
Семантика – описание смысла команд и конструкций языка.
Синтаксис относится к символьному представлению, семантика – к
значению, к представляемой концепции.
Спецификации, определяющие набор правил
1. Вид типизации данных
Тип данных – система, по которой данные организуются в программе.
Данные – информация, представленная в формализованном виде,
пригодном для автоматизированной обработки.
Языки можно разделить на типизированные и бестиповые.
По критерию типов данных языки программирования делятся на
следующие группы.
Языки со Языки с обязательной декларацией
статической (каждая переменная и объявление функции
типизацией – имеет обязательное объявление типа)
переменная, параметр,
возвращаемое значение
функции объявляются в
начале и в дальнейшем
не могут быть изменены
Языки с выводимыми типами
Языки
программирования
Языки с динамической типизацией – тип
переменной определяется в момент присваивания
значения, в процессе выполнения программы
может быть несколько присваиваний одной
переменной различных значений, т.е. тип
переменной может меняться.

Бестиповые языки позволяют осуществлять любую операцию над любыми


данными, которые в них представляются цепочками бит произвольной длины.
Бестиповыми является большинство языков ассемблера.
2. Структуры данных
Системы типов в языках высокого уровня позволяют определять сложные,
составные типы. Они представлены особыми синтаксическими конструкциями
в языках высокого уровня.
Структура данных – множество элементов данных и связей между ними.
Структура данных определяет их семантику, а также способы организации
данных и управления ими.
Данные имеют форму чисел, текста, символов, последовательностей и
других. Но, компьютер оперирует только с двоичными цифрами в соответствии
с набором алгоритмов, определяемых системой команд центрального
процессора.
Абстрактная (логическая) структура данных – структура данных без
учета при рассмотрении ее представления в машинной памяти.
Физическая структура данных определяет способ физического
представления данных в машинной памяти.
В вычислительной системе существуют процедуры, осуществляющие
отображение логической структуры в физическую, и обратно.
Пример
Доступ к элементу двумерного массива на логическом уровне реализуется
указанием номеров строки и столбца в прямоугольной таблице, на пересечении
которых расположен элемент. На физическом уровне к элементу массива
доступ осуществляется с помощью функции адресации, которая при известном
начальном адресе массива в машинной памяти преобразует номера строки и
столбца в адрес соответствующего элемента массива.
Различают простые (базовые, примитивные) структуры данных и
интегрированные (структурированные, сложные).
Простыми структуры данных не могут быть разделены на составные
части, большие, чем биты.
Для физической структуры важным является то обстоятельство, что в
данной машинной архитектуре и в данной системе программирования всегда
можно заранее знать, каков будет размер выбранного простого типа и какова
структура его размещения в памяти. С логической точки зрения простые
данные являются неделимыми единицами.
Сложные структуры данных состоят из частей – простых или сложных
структуры данных.
3. Вид транслятора
Программирование начиналось с записи программ непосредственно в виде
машинных команд в двоичном коде. Для этого необходимо знать адреса ячеек
памяти, в которых хранятся данные, количество ячеек памяти для вновь
сохраняемых данных и др. Этот подход к программированию называется
адресным.
Для упрощения программирования был разработан язык ассемблера,
который позволяет записывать машинные команды в символическом виде –
язык мнемокодов. Мнемокоды или мнемоники (греч. Mnemonikos, mnemon –
запомнить) – буквенные обозначения машинных двоичных команд. Для
упрощения работы с ячейками памяти было введено понятие переменной.
Определение
Переменная – буквенное обозначение области памяти, в котором хранится
некоторое значение.
Обратите внимание, понятие переменной в программировании отличается
от математического понятия.
Для перевода мнемокодов в машинные инструкции, имен переменных – в
адреса ячеек памяти, использовалась специальная программа – транслятор.
Транслятор является средством запуска программы.
Разные типы процессоров имеют разные наборы команд.
Определение
Языком программирования низкого уровня называют язык
программирования, ориентированный на конкретный тип процессора и
учитывающий его особенности.
В данном определении термин «низкий» означает приближенность к
машинному коду и ориентированность на конкретные команды процессора.
Язык ассемблера является низкоуровневым языком. Конкретной компьютерной
архитектуре соответствует свой язык ассемблера. С помощью таких языков
создаются очень эффективные программы, т.к. разработчик имеет доступ ко
всем возможностям процессора.
Особенности разработки программ на языке низкого уровня:
– необходимо обладать знаниями об устройстве компьютера,
– затрудняется отладка больших приложений,
– результирующая программа не может быть перенесена на другой тип
процессора.
При развитии технологий разработки программ появлялись новые
трансляторы, которые преобразовывались в машинные команды более сложные
операции:
– ввод данных с различных устройств, либо из файла,
– вывод данных на устройство, либо в файл,
– выполнение определенных операций над числами, строками и
другими типами данных,
– реализация выбора при проверке некоторого условия – условный
оператор,
– повторение группы действий с изменением параметров.
Такие языки стали называться структурными, или языками высокого
уровня.
Особенности разработки программ на языке высокого уровня:
– особенности компьютерных архитектур в них не учитываются, значит
тексты программ переносимы на другие платформы, для которых создан
транслятор языка программирования,
– разработка программ упрощается созданием понятных и мощных
команд.

Выделилось два типа трансляторов, преобразующих исходный текст


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

Ассемблер Компилятор Интерпретатор

Быстрота исполнения Гибкость использования

Ассемблер переводит программу на языке ассемблера в машинный код.


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

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


1. Начало и середина 50-х годов XX в. – языки, созданные с появлением
первых компьютеров. Разработка первого языка ассемблера.
2. Конец 50-х – начало 60-х годов XX в. – символический ассемблер, в
котором появилась переменная.
3. 60-е годы XX в. – универсальные языки высокого уровня,
независимость от конкретного компьютера, возможность использовать мощные
синтаксические конструкции.
4. Начало 70-х годов XX в. по настоящее время – языки для реализации
крупных проектов, повышение их надежности и скорости создания;
встраивание мощных операторов, позволяющих одной строкой описать
мощный функционал; проблемно-ориентированные языки – для решения
специфических задач из некоторой отрасли знаний.
5. Середина 90-х годов XX в. по настоящее время – возможность
автоматического формирования результирующего текста на универсальных
языках программирования, ввод инструкции в наглядной форме.

Концепции программирования
Концепция программирования включает совокупность
основополагающих идей и подходов, определяющих модель представления
данных и их обработки, а также методологии программирования.
Концепции программирования:
– структурное,
– процедурное,
– объектно-ориентированное.
Структурное программирование
В основе методологии – представление программы в виде иерархической
структуры блоков. Используется три базовые управляющие конструкции –
последовательность, ветвление (условный оператор), цикл.
Процедурное программирование
Программа состоит из последовательности подпрограмм, подпрограммы
объединяют последовательно выполняемые операторы. К подпрограммам
можно многократно обращаться по имени, код программы строится из
комбинации подпрограмм, а не из отдельных операторов.
Выделяют два типа подпрограмм – процедуры и функции. Процедура
содержит группу операторов, выполняющих одно из действий алгоритма в
зависимости от входных данных. Функция дополнительно вычисляет некоторое
значение и передает его обратно в основную программу.
Объектно-ориентированное программирование
Основное понятие – объект, представляющий собой совокупность
атрибутов, методов их обработки и событий, на которые объект может
реагировать.
В качестве строительных блоков используются объекты, содержащие свои
собственные коды и данные. Структура программ представляется графом
взаимодействия объектов, а не деревом иерархии, как в структурном
проектировании.
Объектно-ориентированный анализ направлен на создание моделей
реальной действительности на основе объектно-ориентированного подхода.
Объектно-ориентированное проектирование соединяет в себе процесс
объектной декомпозиции и приемы представления моделей, отражающих
логическую (классы и объекты) и физическую структуру системы (процессы и
деление на компоненты, файлы или модули), а также ее статические и
динамические аспекты.
Объекты могут иметь идентичную структуру и отличаться только
значениями атрибутов. В этом случае в программе создается новый тип,
который называют классом, а каждый конкретный объект, имеющий структуру
этого класса, называют экземпляром класса. Объект – это структурированная
переменная типа класс, содержащая всю информацию о некотором физическом
предмете или реализуемом в программе понятии.
Все объекты - представители данного класса аналогичны друг другу в том
смысле, что они имеют один и тот же набор операций - методов.
В объектно-ориентированном программировании выделяют следующие
три фундаментальных принципа - инкапсуляция, наследование и полиморфизм.
Полиморфизм означает свойство переопределять методы наследуемого
класса и корректно их использовать в различных контекстах. Целью
полиморфизма является использование одного имени для задания общих для
класса действий, причем каждый объект или класс иерархии имеет
возможность по-своему реализовать это действие своим собственным,
подходящим для него, кодом. Таким образом, полиморфизм является свойством
классов решать схожие по смыслу проблемы разными способами.
Инкапсуляция означает свойство скрывать внутреннюю структуру
класса, в которой описываются его методы и атрибуты, значения которых в
промежутках между вызовами методов класса могут меняться.
Проектирование программных и технических систем базируется на том
условии, что никакая подсистема данного уровня не должна зависеть от
устройства любой другой подсистемы этого уровня. Такая независимость
внутреннего устройства одного объекта от внутреннего устройства другого
является инкапсуляцией.
В объектно-ориентированном программировании принцип инкапсуляции
используется для изоляции класса от остальных частей программы, чтобы
сделать его самодостаточным для решения конкретной задачи.
Наследование означает возможность создавать новые классы на основе
существующих с наследованием всех их свойств и методов и добавлением
собственных. Класс, не имеющий предшественника, называют базовым.
Принцип наследования оперирует с понятиями ≪предок - потомок≫ и
предусматривает расширение набора свойств наследника за счет принятия всех
свойств предка.
Принцип наследования приводит к созданию ветвящегося дерева классов.
Каждый потомок дополняет возможности своего родителя новыми и передает
их своим потомкам.

Рассмотренные концепции относятся к императивной парадигме


программирования – описывает процесс вычисления в виде инструкций,
меняющих состояние данных. При таком подходе активно используется
присваивание.
Императивной парадигме противопостовляется декларативная
парадигма, примером которой является функциональное программирование. В
функциональном программировании процесс вычисления трактуется как
вычисление значений функций в математическом понимании последних (в
отличие от функций как подпрограмм в процедурном программировании).
Основной особенностью функционального программирования,
определяющей как преимущества, так и недостатки данной парадигмы,
является то, что в ней реализуется модель вычислений без состояний.
Императивная программа на любом этапе исполнения имеет состояние –
совокупность значений всех переменных, что производит побочные эффекты.
Функциональная программа состояния не имеет и побочных эффектов не
производит. То, что в императивных языках делается путём присваивания
значений переменным, в функциональных достигается путём передачи
выражений в параметры функций. Непосредственным следствием становится
то, что чисто функциональная программа не может изменять уже имеющиеся у
неё данные, а может лишь порождать новые путём копирования и/или
расширения старых.
Как следствие, порождение новых данных приводят к необходимости
постоянного выделения и автоматического освобождения памяти. Поэтому в
системе исполнения функциональной программы обязательным компонентом
становится высокоэффективный сборщик мусора.

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


Существует множество языков программирования, реализующих
различные парадигмы программирования, направленные на разного типа задач.
В связи с этим возникает вопрос выбора того или иного языка для решения
конкретной задачи.
В качестве помощи можно использовать рейтинги языков
программирования. Одним из них является ежемесячно публикуемый рейтинг
компании TIOBE Software (http://www.tiobe.com), который строится по данным
поисковых систем о количестве разработчиков и компаний, использующих
язык, а также о количестве обучающих курсов по нему.

В таблице приводится рейтинг, составленный компанией TIOBE Software,


языков программирования, занимающих позиции в ТОП-10 в течение
длительного периода времени.
Задание
Составить описание (один абзац) ключевых особенностей языков
программирования из выше приведенной таблицы. Выделить дополнительно не
менее 5 языков программирования, заинтересовавших Вас, и кратко описать их
особенности.

Вам также может понравиться