Язык программной индустрии
“Появление благодаря работам Бьерна Страуструпа языка
Си++, ставшего фактически главным языком программной индустрии, а также
повальное увлечение объектно-ориентированным проектированием и программированием
заставили уйти в тень его именитого предшественника — язык Си” [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.