Язык программной индустрии
“Появление благодаря работам Бьерна Страуструпа языка
Си++, ставшего фактически главным языком программной индустрии, а также
повальное увлечение объектно-ориентированным проектированием и программированием
заставили уйти в тень его именитого предшественника — язык Си”
[1].
“Сообщество сторонников Си++ страдало от чрезмерной
популярности этого языка: он постоянно становился объектом нападок, ведь в
современном мире, живущем по законам коммерции, честная борьба — большая
редкость”.
Бьерн Страуструп В начале 1980-х годов в
научно-исследовательской фирме Bell Telephone Laboratories американской
корпорации AT&T (American Telephone and
Telegraph) Бьерном Страуструпом в результате дополнения и расширения
языка Си был создан язык, получивший название “Си с классами” [2, 3]. В 1983
году это название было заменено на Си++. Здесь как бы сделано указание на то,
что Си++ — язык следующего поколения по отношению к Си [4]: как известно,
операция инкремента ++ увеличивает значение переменной на единицу. (При создании
Си++ Страуструп искал базовый язык для включения в него концепции классов,
взятой из языка Симула. Как альтернатива Си, по словам Страуструпа,
рассматривались языки Модула-2, Ада, Смолток, Mesa и CLU. Но предпочтение было
отдано Си [1].)
Язык Cи++ является языком
объектно-ориентированного программирования.
Идея
использования программных объектов развивалась разными исследователями в течение
целого ряда лет. Одним из первых языков такого типа является Симула-67 [5, 6].
Утвердило же свой статус объектно-ориентированное программирование в созданном
Аланом Кеем языке Смолток (Smalltalk), который появился в 1972 году [7,
8].
“Объект есть логическая единица, которая содержит
данные и правила (методы) обработки этих данных. В языке Cи++ в качестве таких
правил обработки выступают функции, т.е. объект здесь объединяет в себе данные и
функции, обрабатывающие эти данные” [2].
Объектно-ориентированный язык создает так называемое программное окружение в
виде множества независимых объектов, каждый из которых отличается своими
свойствами и способами взаимодействия с другими объектами. Каждый объект тут в
какомто смысле подобен компьютеру: он способен получать сообщения от других
объектов и, в свою очередь, посылать сообщения, запоминать информацию и
обрабатывать ее определенным образом. Описывая структуру обмена сообщениями
между объектами, программист задает совокупность операций, которые и образуют
программу. Можно использовать объекты для решения задач, не понимая механизма
работы объектов, т.е. рассматривать их как своего рода “черный ящик”.
Объектно-ориентированный язык скрывает многие детали функционирования системы
внутри самих объектов. Но при необходимости программист может изменять детали
внутреннего устройства объектов, формируя тем самым другие объекты, нужные для
решения новых задач [9].
Каждый объект в
объектно-ориентированном окружении обладает своими собственными
характеристиками, однако объекты, имеющие одинаковые свойства и ведущие себя
сходным образом, объединяются в группы, или классы.
“Понятие класса является центральным понятием языка Cи++. Вообще класс — это
определенный программистом тип, к которому относятся любые структуры данных,
определенные посредством ключевых слов class, struct и
union. При определении класса расширяются возможности языка Cи++, так как
в дальнейшем этот класс можно использовать как любой другой тип
Cи++.
Как только класс определен, можно создавать объекты
этого класса, каждый из которых имеет члены, определенные в классе” [10] (а
именно, данные-члены и функции — члены класса). Пример класса — графическая
точка на экране. Данными-членами тут являются ее координаты, а также цвет.
Функции-члены могут обеспечивать инициализацию точки, определение ее цвета,
задание нового цвета.
Вообще говоря, “в принципе возможен
объектно-ориентированный подход к проектированию даже в традиционных языках
программирования, например, таких, как Cи; однако использование
объектно-ориентированных языков типа Cи++ позволяет существенно облегчить
работу...”.
Бьерн Страуструп является автором книг The C++
Programming Language (“Язык программирования Си++”), The Design and Evolution of
C++ (“Архитектура и эволюция Си++”), Why C++ isn’t just an Object-Oriented
Programming Language (“Почему Си++ — не просто язык объектно-ориентированного
программирования”). Сейчас Страуструп возглавляет отдел программных исследований
в лаборатории AT&T Labs (корпорация AT&T была в свое время
реорганизована). Область его научных интересов охватывает технологии
распределенных систем и операционных систем, сферу имитационного моделирования,
проектирования и программирования [11].
Литература
1. Богатырев Р. Летопись
языков. Си // Мир ПК, № 8/2001.
2. Березин Б.И.,
Березин С.Б. Начальный курс C и C++. М.: Диалог-МИФИ,
1999.
3. Дьюхарст С., Старк К. Программирование на
C++: Пер. с англ. Киев: ДиаСофт, 1993.
4. A, B, C, ...,
C++ // Информатика, № 47/ 2000.
5. Киндлер Е. Языки
моделирования: Пер. с чешского. М.: Энергоатомиздат, 1985.
6. Окольнишников В.В., Покровский С.Б. Симула // Математическая
энциклопедия. М.: Советская энциклопедия, 1984. Т. 4.
7.
Малыхина М.П., Частиков А.П. Языки программирования: Симула //
Вычислительная техника и ее применение, № 5/90.
8.
Знакомьтесь: компьютер: Пер. с англ. М.: Мир, 1989.
9.
Язык компьютера: Пер. с англ. М.: Мир, 1989.
10. Карпов
Б., Баранова Т. C++: Специальный справочник. СПб.: Питер,
2000.
11. Страуструп Б. Мне бы хотелось объединения
Си и Си++ // Computerworld Россия, 03.04. 2001.