История развития языков программирования
Первые программы заключались в установке ключевых переключателей на передней панели вычислительного устройства. Очевидно, таким способом можно было составить только небольшие программы.
С развитием компьютерной техники появился машинный язык, с помощью которого программист мог задавать команды, оперируя с ячейками памяти, полностью используя возможности машины. Однако использование большинства компьютеров на уровне машинного языка затруднительно, особенно это касается ввода-вывода. Поэтому от его использования пришлось отказаться.
На протяжении 60-х годов запросы на разработку программного обеспечения возросли и программы стали очень большими. Это привело к тому, что было разработано структурное программирование. С развитием структурного программирования следующим достижением были процедуры и функции. Общий код программы в данном случае становится меньше. Функции позволяют создавать модульные программы.
Следующим достижением было использование структур, благодаря которым перешли к классам. Структуры — это составные типы данных, построенные с использованием других типов Класс — это структура, которая имеет свои переменные и функции, которые работают с этими переменными. Это было очень большое достижение в области программирования.
В случае, когда нужно иметь эффективную программу, вместо машинных языков используются близкие к ним машинно-ориентированные языки —ассемблеры. Люди используют мнемонические команды взамен машинных команд.
Но даже работа с ассемблером достаточно сложна и требует специальной подготовки.
В 1954 году, когда был создан первый язык высокого уровня — Фортран. Языки высокого уровня имитируют естественные языки, используя некоторые слова разговорного языка и общепринятые математические символы. Эти языки более удобны для человека, с помощью них, можно писать программы до нескольких тысяч строк длиной. Однако легко понимаемый в коротких программах, этот язык становился нечитаемым и трудно управляемым, когда дело касалось больших программ. Решение этой проблемы пришло после изобретения языков структурного программирования, таких как Алгол(1958), Паскаль(1970),Си(1972).
Также создавались функциональные языки (Пример: Lisp — англ. LISt Processing, 1958) и логические языки (пример: Prolog —англ. PROgramming in LOGic, 1972).
в конце 1970-х и начале 1980-х были разработаны принципы объектно-ориентированного программирования. ООП сочетает лучшие принципы структурного программирования с новыми мощными концепциями, базовые из которых называются инкапсуляцией, полиморфизмом и наследованием.
Примерами объектно-ориентированных языков являются Object Pascal, C++, Java и др.
ООП позволяет оптимально организовывать программы, разбивая проблему на составные части, и работая с каждой по отдельности. Программа на объектно-ориентированном языке, решая некоторую задачу, по сути, описывает часть мира, относящуюся к этой задаче.
Основные свойства объектно-ориентированных языков программирования
Основными свойствами ООП являются:
Инкапсуляция-объединение данных с функциями их разработки в сочетании со скрытием ненужной для использования этих данных информацией
Наследование-это возможность создания иерархии классов, когда потомки наследуют все св-ва своих предков и могут их изменять и добавлять новые.
Полиморфизм-возможность использовать в различных классах иерархии одно имя для обозначения сходных по смыслу действий и гибко выбирать требуемое действие во время выполнения программы
3. История развития С++
Язык программирования С++ разработан в начале 80-ых годов (1983 г.) сотрудником AT&T Bell Laboratories Бьерном Страуструпом. Основой для его создания послужил процедурно-ориентированный язык системного программирования С, позволяющий разрабатывать эффективные модульные программы решения широкого класса научно-технических задач. Эффективность написанных на языке С программ обусловлена возможностью учета в ней архитектурных и аппаратных особенностей ЭВМ, на которой программа реализуется. При создании С++ использовались определенные концепции языков Симула-67 и Ангол-68 и преследовались следующие цели:
1. Обеспечить поддержку абстрактных (определяемых пользователем) типов данных
2. Предоставить средства для объектно-ориентированного программирования
3. Улучшить существующие конструкции языка С.
В программе, написанной на языке С++, у программиста появилась возможность создания собственных типов данных на базе уже существующих. Их использование существенно облегчает обработку сложных структурных данных.
Первые версии языка программирования Си++ были разработаны в начале 80-х годов Бьярном Страуструпом. По признанию самого автора языка, Си++ никогда не разрабатывался на бумаге. Проектирование, реализация и документирование новых возможностей происходили фактически одновременно.
За основу был взят популярный в среде профессиональных разработчиков язык программирования Си. Первыми средствами, которыми был расширен Си, стали средства поддержки абстракций данных и объектно-ориентированного программирования.
Описание нового языка не было опубликовано сразу. Первыми его пользователями стали сами сотрудники Bell Labs. В 1993 впервые была реализована коммерческий транслятор, и сам язык был назван "С.
Первым транслятором языка был препроцессор cfront, транслирующий программу на Си++ в эквивалентную программу на Си. И только в конце 80-х годов были реализованы прямые трансляторы, не использующие Си в качестве промежуточного языка. Пионером среди таких трансляторов стал GNU CC.
Если не считать документацию к транслятору cfront, первой книгой с описанием языка стала "The C++ Programming Language" (Addison-Wesley, 1985), переведенная на русский язык и изданная в 1991 году.
С этого момента началось его бурное распространение и создание многочисленных реализаций.
Модель реализации ООП была частично позаимствована из языка программирования Simula67 и ориентировалась в основном на возможность эффективной реализации на вычислительных машинах со стандартной архитектурой. C 1985 года в язык были введены новые возможности: множественное и виртуальное наследование, шаблоны функций и классов, обработка исключительных ситуаций. Кардинально изменена семантика совместного использования оператора new, изменен синтаксис для вложенных классов.
4. С++ как улучшение Си. Комментарии. Константы. Встраиваемые функции. Объявление структур, объединений и перечислений. Объявления переменных
1. Комментарии (/* ---- */) в С++ появился // и считается законченным окончанием строки.
2. Константы. Можно задавать без знаковые константы. Также ужесточилось действие ключевого слова const. Теперь целые константы, описанные словом const могут использоваться для описания размеров массива. Константы в С++ подчиняются тем же правилам видимости, что и переменные.
12u[u] – без знаковая константа
12 – знаковая неименованная константа
//константы double
const double PI=3.14;
const double E=2.8;
//указатель на константу
const double *ptoconst=Π
//константный указатель
double *const constpconst=&E;
//константы на указатель на константу
const double *const constpconst=Π
*ptoconst=2.5; //ошибка. Значение по указателю менять нельзя
ptoconst=Π // правильно
constp=&E; //ошибка
*constp+=3.0;
Встраиваемые функции
В Си++ введено слово inline, означающее рекомендацию компилятору сделать функцию встраиваемой, то есть вместо генерации вызывающего её кода подставлять непосредственно её тело. Помимо "рекомендации", стандарт закрепляет за словом inline требование (следовательно, и разрешение) описывать функцию в каждой единице трансляции, в которой она используется, что, собственно, и играет ключевую роль в вопросе встраивания.Так например, если написать
inline double Sqr(double x) {return x*x;}
то Sqr(x) будет (почти во всех реализациях) вычисляться так же быстро, как x*x, но x предварительно приводится к типу double. По сути, Sqr(x) будет заменено на что-то вроде (double y=x, y*y), если бы такие выражения были разрешены.
Встроенные функции: приводят к типу, они знают об области видимости, они могут содержать условные операторы, они могут быть (перегруженными, или функциями-членами, или членами пространств имён, или функциями-друзьями, или задаваться шаблонами, или быть параметрами шаблонов.