Двоичные команды процессора (полностью)
"Императивные" или "процедурные" языки позволяют программисту описать, в
какой последовательности компьютер будет выполнять отдельные шаги алгоритма и,
таким образом, решать задачу и выдавать на экран результат. "Декларативные" языки
предназначены больше для описания самой задачи и желаемого результата, а не дей-
ствий компьютера.
"Объектно-ориентированные языки" рассчитаны на применение особого под-
хода к описанию задач, согласно которому в задаче выделяются некоторые "объекты"
с характерным для них "поведением" и взаимодействующие между собой. Один из
9
первых объектно-ориентированных языков – Смоллток, он предназначен исключи-
тельно для объектно-ориентированного программирования. В отличие от него, язык
Си++ обладает как объектно-ориентированными возможностями, так и средствами
традиционного процедурного программирования.
Радикальные приверженцы различных языков и стилей программирования
|
|
иногда делают экстравагантные заявления, выделяющие семейство языков или один
язык как исключительный и идеально подходящий для любых задач. Например, до-
вольно распространено мнение, что объектно-ориентированный подход наиболее
близок к способу решения задач человеком. По этому поводу вы со временем сможе-
те составить собственное мнение, т.к. абсолютно истинного, очевидно, нет.
2. Происхождение языка Си++
Язык Си++ был разработан в начале 1980-х гг. Бьерном Страуструпом из ком-
пании AT&T Bell Laboratories. Си++ основан на языке Си. Два символа "++" в назва-
нии – это игра слов, символами "++" в языке Си обозначается операция инкремента
(увеличение значения переменной на 1). Т.о., Си++ был задуман как язык Си с рас-
ширенными возможностями. Большая часть языка Си вошла в Си++ как подмножест-
во, поэтому многие программы на Си можно скомпилировать (т.е. превратить в набор
низкоуровневых команд, которые компьютер может непосредственно выполнять) с
помощью компилятора Си++.
При классификации языков программирования язык Си вызывает некоторые
трудности. По сравнению с ассемблером, это высокоуровневый язык. Однако Си со-
держит много низкоуровневых средств для непосредственных операций с памятью
компьютера. Поэтому язык Си отлично подходит для написания эффективных "сис-
темных" программ. Но программы других типов на Си могут оказаться довольно
сложными для понимания, и есть ряд ошибок, которым программы на Си особенно
подвержены. Дополнительные объектно-ориентированные возможности Си++ были
добавлены в Си, в частности, для устранения этих недостатков.
|
|
3. Стандарт ANSI Си++
Национальный Институт Стандартизации США (American National Standards
Institution, ANSI) разработал "официальные" стандарты для многих языков програм-
мирования, в том числе для Си и Си++. Эти стандарты стали общепринятыми и они
имеют очень большое значение. Программу, целиком написанную на ANSI Си++, га-
рантированно можно запустить на любом компьютере, для которого имеется компи-
лятор ANSI Си++. Другими словами, стандарт гарантирует переносимость программ
на языке ANSI Си++.
В действительности большинство версий Си++ представляют собой стандарт-
ный ANSI Си++, дополненный некоторыми машинно-зависимыми возможностями.
Эти специфические средства предназначены для облегчения взаимодействия про-
грамм с конкретными операционными системами. Вообще, в программах, которые
должны быть переносимыми, подобными специфическими возможностями следует
пользоваться как можно реже. В таких случаях части программы на Си++, в которых
используются не-ANSI компоненты языка, целесообразно особым образом помечать,
так, чтобы их легко можно было отделить от основной части программы и модифи-
цировать для других компьютеров и операционных систем.
10
4. Среда разработки Microsoft Developer Studio Visual С++
Известно, что лучший способ изучения языка программирования заключается в
том, чтобы писать на нем программы и проверять, как они работают на компьютере.
Для этого необходимы несколько программ:
• Текстовый редактор, с помощью которого можно набирать и редактировать
исходный текст программ на Си++.
• Компилятор. Эта программа выполняет преобразование исходного текста в
машинные команды, которые компьютер может непосредственно выпол-
нять.
• Компоновщик, который собирает отдельные скомпилированные части про-
граммы в единое целое и, при необходимости, добавляет к ним компоненты
из готовых библиотек. В результате компоновки получается готовая к за-
пуску программа – исполняемый файл.
• Отладчик, с помощью которого легче искать ошибки в программе. Ошибки
могут обнаружиться как при компиляции, так и во время работы програм-
мы.
В данном курсе изучения Си++ практические упражнения предполагается вы-
полнять в среде разработки программ Microsoft Developer Studio Visual C++ для
IBM-совместимых ПК под управлением Windows 95/NT. В этом пакете интегрирова-
ны редактор, компилятор, компоновщик и отладчик. Все вместе они образуют единую
удобную среду программирования. Краткое описание работы со средой Visual C++
приведено в Приложении.
5. Пример программы на Си++
Ниже приведен исходный текст простой программы на Си++.
// В языке Си++ с двойной косой черты начинаются комментарии
// (например, как эта строка). Компилятор игнорирует комментарии,
// начиная от первой черты и до конца строки.
/* Второй способ записи комментариев – после косой черты со звездочкой.
После текста комментария надо поставить звездочку, а затем – косую
черту. Комментарии, записанные подобным образом, могут занимать
больше одной строки. */
/* В программе ОБЯЗАТЕЛЬНО должно быть достаточное количество
комментариев! */
/* Эта программа запрашивает у пользователя текущий год, возраст
пользователя и еще один год. Затем программа вычисляет возраст
пользователя, который будет у него во втором введенном году.*/
#include <iostream.h>
int main()
{
int year_now, age_now, another_year, another_age;
cout << "Введите текущий год и нажмите ENTER.\n";
cin >> year_now;
cout << "Введите свой возраст (в годах).\n";
cin >> age_now;
11
cout << "Введите год, для которого вы хотите узнать свой возраст.\n";
cin >> another_year;
another_age = another_year - (year_now - age_now);
if (another_age >= 0)
{
cout << "В " << another_year << " году вам будет ";
cout << another_age << "\n";
}
else
{
cout << "В " << another_year << " вы еще не родились!\n";
|
|
}
return 0;
}
Программа 5.1.
Некоторые свойства программы 5.1 являются обычными для большинства про-
грамм на Си++. Программа начинается (после комментариев) с оператора
#include <iostream.h>
Этот оператор называется "директивой include". До компилятора исходный
текст обрабатывается препроцессором – специальной программой, которая модифи-
цирует текст программы по специальным командам – директивам. Директивы пре-
процессора начинаются с символа "#". Директива include предназначена для вклю-
чения в исходный текст содержимого другого файла. Например, в программу 5.1
включается файл iostream.h, содержащий описания функций стандартной библиоте-
ки ввода/вывода для работы с клавиатурой и экраном. (Стандартные библиотеки язы-
ка Си++ будут рассматриваться позже).
Алгоритм, записанный в программе 5.1, очень простой. Поэтому структуру
программы легко представить в виде списка последовательно выполняемых команд
(операторов). Схематично программу, содержащуюся после директивы #include,
можно представить в виде:
int main()
{
Первый оператор;
...
...
Последний оператор;
return 0;
}
Подобная структура является общей для всех программ на Си++. Каждый опе-
ратор в теле программы завершается точкой с запятой. В хорошо разработанной
большой программе большинство операторов являются обращениями (вызовами) к
подпрограммам, которые записываются после функции main() или в отдельных
файлах. Каждая подпрограмма (функция) имеет структуру, подобную функции
main(). Но функция main() в каждой программе только одна. Именно с нее начина-
ется выполнение программы. (Подробнее функции будут рассматриваться далее.)
В конце функции main() записана строка:
12
return 0;
Эта строка значит "вернуть операционной системе в качестве сигнала об ус-
пешном завершении программы значение 0". Оператор возврата return применяется
не только при завершении программы, но и при завершении отдельных подпрограмм.
В любом случае этот оператор возвращает определенное значение на более высокий
|
|
уровень управления.
В программе-примере используются четыре переменные:
year_now, age_now, another_year и another_age
Переменные в программировании отличаются от математических переменных.
Они используются как символические имена "фрагментов оперативной памяти ком-
пьютера". При выполнении программы в различные моменты времени переменные
могут хранить различные значения. В программе 5.1 первое упоминание четырех пе-
ременных содержится в строке с оператором описания переменных:
int year_now, age_now, another_year, another_age;
Этот оператор уведомляет компилятор, что для хранения четырех переменных
типа "целое число" (integer – int) требуется выделить необходимое количество памя-
ти. Эта область памяти будет зарезервирована в течение выполнения оставшейся час-
ти программы. Переменные всегда должны быть описаны до первого использования.
В программировании хорошим стилем считается описание всех переменных, исполь-
зуемых в подпрограмме, в начале этой подпрограммы. В Си++ есть несколько раз-
личных типов переменных, и они будут обсуждаться немного позже.