Лекции.Орг


Поиск:




Категории:

Астрономия
Биология
География
Другие языки
Интернет
Информатика
История
Культура
Литература
Логика
Математика
Медицина
Механика
Охрана труда
Педагогика
Политика
Право
Психология
Религия
Риторика
Социология
Спорт
Строительство
Технология
Транспорт
Физика
Философия
Финансы
Химия
Экология
Экономика
Электроника

 

 

 

 


Виды языков программирования




Язык программирования — это фиксированная система обозначений и правил, предназначенная для описания алгоритмов и структур данных.

Все языки программирования делятся на два вида — языки низкого и высокого уровня.

Языки низкого уровня (law-level languages) — это средство записи инструкций для компьютера на аппаратном языке, т.е. в машинных кодах (в виде последовательности нулей и единиц). Языки низкого уровня жестко ориентированы на определенный тип аппаратуры (систему команд процессора, у каждого типа процессоров — свой машинный код).

Языки высокого уровня (high-level languages) – это языки программирования, позволяющие записывать программу в удобном для человека виде. Данные языки ориентированы не на систему команд того или иного процессора, а на систему операторов (команд), характерных для записи определенного класса алгоритмов.

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

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

Компилятор работает как литературный переводчик. Это компьютерная программа, переводящая программу, написанную на языке высокого уровня, в подробные команды, которые компьютер может выполнить. Программа должна быть транслирована (переведена) в набор команд до того, как она начнет выполняться; однако, будучи один раз транслирована, она может запускаться неограниченное количество раз.

Низкоуровневые языки, близкие к машинному, позволяют создать программы, которые запускаются быстрее и позволяют эффективнее использовать ресурсы компьютера.

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

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

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

mov ah, 9

mov al, 33

mov bl, 1

mov bh,0

int 10h

Пример 1: Отрывок кода на языке ассемблера

Данный пример демонстрирует язык ассемблера. Этот отрывок кода помещает синий символ восклицательного знака в текущую позицию курсора на экран. В регистры процессора заносится номер функции, код символа, цвет и номер видеостраницы, а затем вызывается прерывание BIOS (Basic Input-Output System — Базовая Система Ввода Вывода) отвечающее за вывод изображения на экран. Это, несомненно, гораздо понятнее и проще машинных кодов, но чтобы доказать многословность и сложность, которая все ещё присуща языку ассемблера, достаточно привести пример, выполняющий то же действие, но записанный на языке высокого уровня, например Паскале:

TextColor(1);

Write('!');

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

Языки высокого уровня были следующей ступенью развития средств программирования. Существует огромное количество языков программирования: от 2000 до 4000. Языки высокого уровня подразделяются на группы по типу парадигмы, которую поддерживают. Существуют императивные языки, функциональные языки, логические языки, объектно-ориентированные языки, а также многие другие. Итак, с появлением языков высокого уровня программы стали выглядеть более понятно.

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

В операционной системе Windows фирмы Microsoft на практике реализована концепция объектно-ориентированного программирования. Windows является графической системой. В ней реализован стандартный пользовательский интерфейс, доступный каждой прикладной программе через вызов функций Windows-API, представляющие собой набор классов описывающих объекты системы, например, кнопку, или поле ввода. Данный подход имеет ряд преимуществ. При использовании обычной текстовой операционной системы, например, MS-DOS разработчику приходилось каждый раз программировать пользовательский интерфейс с нуля. Задача значительно усложнялась, если приходилось проектировать графический интерфейс с пользователем. Так как программа MS-DOS работает непосредственно с аппаратурой компьютера (в частности, с видеоконтроллером), она должна учитывать наличие у потребителей большого количества самой разнообразной и несовместимой аппаратуры. Windows дисциплинирует разработчика приложений, предлагая стандарт на диалоговый интерфейс с пользователем. Если приложение будет соответствовать стандарту, на его изучение и освоение со стороны пользователя будет затрачено минимальное время.

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

Несмотря на очевидную простоту и удобство программирование для Windows считается довольно сложным. Одновременно с увеличением возможностей увеличилась сложность и громоздкость кода программы. Значительную часть времени стало занимать проектирование и описание в программе ее интерфейса, внешнего вида. В связи с этим были созданы Системы Быстрого Проектирования Приложений — RAD. Рассмотрим такую систему на примере, пожалуй, самого популярного пакета MS Visual C++.

Visual C++ представляет собой сложный инструмент для создания приложений Windows. Несмотря на то, что сложность программ увеличилась, интегрированная среда MS Developer Studio пакета Visual C++ позволяет в считанные секунды создать вполне работоспособное приложение Windows. Включенная в состав VC++ библиотека классов Microsoft Foudation Classes (MFC) уже стала фактическим стандартом для разработчиков компиляторов на языке С++. Визуальные средства разработки интерфейса превращают это сложное занятие в увлекательную игру. VC++ не просто компилятор программного кода — это генератор программного кода. С его помощью можно в считанные минуты создать приложение Windows из готовых фрагментов программного кода. Генератор приложений формирует прототип вполне работоспособной программы.

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

Другие виды языков программирования используются для решения более узких задач (например, язык запросов (query language); генератор программ печати отчетов (report program generator)).

Основные понятия программирования

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

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

- минимальные требования к компьютеру, на котором работает программа.

- ясность входных и выходных данных и простота программы.

- минимальное время создания программы и простота её изменения.

- минимальное время работы программы, минимум занимаемой памяти и минимум использованных в программе операторов.

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

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

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

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

for (int I=0; I>=10; I++) printf("Интерация цикла N\%d",I);

if (x < 0) printf("X-меньше нуля");

switch (MenuItem){

case 1:printf("выбран первый пункт");

break;

case 2:printf("выбран второй пункт");

default:error();

}

Пример 2: Оператор цикла, условный оператор и оператор выбора на языке С

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

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

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

Основными отличительными свойствами классов являются:

- инкапсуляция — объединение полей данных с функциями-методами, работающими с этими данными;

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

- полиморфизм — задание одного имени действию, которое передается вверх и вниз по иерархии классов, с реализацией этого действия способом, соответствующим каждому классу в иерархии.

Допустим, наши практические интересы лежат в области построений изображений звездных тел в двумерной проекции. Очевидно, что основой всякого изображения является положение (позиция) отдельного элемента на экране, описываемая координатами X и Y. Что можно сделать с парой координат? Во-первых, может потребоваться задать значения координат. Во-вторых, нам может потребоваться знание фактических значений координат. При обычном подходе нам необходимо было бы объявить структуру данных описывающую координаты, а также функции, получающие эту структуру в качестве параметра. Логично было бы связать данные и функции в одну структуру. Объектно-ориентированный язык программирования предоставляет для этого мощный и удобный инструмент.

class position{

private:

int x,y;

public:

void Init(int CoordX, int CoordY);

int GetX();

int GetY();

};

Эта структура лишь объявляет класс, реализация методов обычно выполняется после. Теперь рассмотрим объект звезду с координатами X и Y. Ее можно сделать видимой или невидимой, ей можно задать цвет, ее можно переместить. Заметим, что поля X, Y и методы GetX, GetY класса position подходят и нашему объекту - звезде. Объектно-ориентированный язык предоставляет возможность учесть эту ситуацию. Новый класс следует считать порожденным от класса position.

class star: position{

private:

int Visible;

unsigned int Color;

public:

void Init(int, int, int);

int IsVisible();

void Show();

void Blind();

void Move(int, int);

}

Класс star теперь наследует свойства класса position. Поля X, Y явно не заданы в star, но star ими обладает благодаря наследованию.





Поделиться с друзьями:


Дата добавления: 2016-11-12; Мы поможем в написании ваших работ!; просмотров: 869 | Нарушение авторских прав


Поиск на сайте:

Лучшие изречения:

Победа - это еще не все, все - это постоянное желание побеждать. © Винс Ломбарди
==> читать все изречения...

2221 - | 2053 -


© 2015-2024 lektsii.org - Контакты - Последнее добавление

Ген: 0.009 с.