Программирование >>  Программирование на языке c++ 

[ 1 ] 2 3 4 ... 159


Программирование на-языке C++

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

Когда мы говорим о тех или иных идеях, мы связываем их появление с именами тех или иных людей, которые впервые предложили эти идеи, или тех или иных систем, в которых они впервые реализованы. Объектно-ориентированное программирование не является исключением. Первым языком, поддерживающим эту технологию, был язык Simula, разработанный в 60-х годах Dahl, Myhrhaug и Nygard. Simula (Simula 67) заимствовал основные идеи языка ALGOL (ALGOL 60) и дополнил их новыми концепциями пакетирования (encapsulation) и наследования (inheritance). Все современные языки, поддерживающие объектно-ориентированный стиль программирования, в том числе и наиболее известный из них С++, разработанный Bjarne Stroustrup [1], воплощают и дополняют эти концепции.

Автор известной книги [2] Grady Booch развивает предложенное Gardelli и Wegner разделение объектных языков программирования на две группы: использующие объекты (object-based) и объектно-ориентированные (object-oriented).

Языки первой группы поддерживают абстрактные типы данных и работу с классами. Концепция классов отражает принцип пакетирования (encapsulation), основные идеи его заключаются в следующем: данные и функции, которые манипулируют этими данными, объединяются в единый пакет; устанавливаются специальные правила доступа к элементам пакета (функциям и данным); максимально изолируются друг от друга интерфейс (средства взаимодействия класса с внеш-



ней средой) и реализация, отражающая всю совокупность действий, необходимых для поддержки интерфейса. Последняя идея является также фундаментальной в концепции абстрактных типов данных [1,3].

Языки второй группы поддерживают все средства языков первой группы, а также наследование и полиморфизм.

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

Полиморфизм в теории типов - это метод использования одного и того же имени для выражения различных действий. Например, можно рассматривать операторы +, -, * как сложение, вычитание и умножение для базовых типов самого языка (таких, как целые, вещественные и т.п.) и далее доопределить их по отношению к новому классу, например, множество . Тогда можно использовать эти операторы, скажем, так: + для объединения множеств ({31,32,33} + {33,34,35} = {ai,32,аз,34,35}); - для вычитания множеств ({а1,а2,аз} - {аз,а4,а5} = {ai,a2 }); * для пересечения множеств ({аьа2,аз} * {33,34,35} = { Зз }). Такое доопределение операторов (operator overloading [1]) осуществляется с помощью специальных функций. Другое применение полиморфизма связано с введением так называемых виртуальных функций, основная идея которых - это использование одного и того же имени для выражения разных действий в базовом и производном классах. Так как ребенок лучше родителя, то он может выполнять то же самое лучше, чем родитель, хотя название этого действия будет прежним. Рассмотрим пример. Пусть задан базовый класс окно на экранелисплея и производный класс окно на экране дисплея с рисунком . Пошлем объектам этих классов сообщение нарисуй себя . Имя этого сообщения в обоих случаях одно и то же, но оно вызы-



вает разные действия. В любом случае эти действия отражают концепцию полиморфизма, но в зависимости от специфики их применения они используют либо переопределение имени функций (function name overloading), либо виртуальные функции (virtual functions). Все детали будут оговорены ниже.

С позиций рассмотренного выше деления язык Simula является объектно-ориентированным.

Следующим после языка Simula объектным языком был Smalltalk, разработанный сотрудниками фирмы Xerox. Разные версии этого языка либо использовали объекты (SmaIltalk-72, Smalltalk-74), либо были объектно-ориентированными (Smalltalk-76, Smalltalk-78, Smalltalk-80). Существует версия этого языка (SmalltaMV) для персональных компьютеров IBM PC и Macintosh. Smalltalk оказал существенное влияние не только на развитие объектно-ориентированного направления в программировании, но и на построение пользовательских интерфейсов, таких, как Macintosh, WINDOWS и Motif [2].

Среди других известных объектных языков можно назвать следующие.

Ada - разработанный по заказу министерства обороны США и названный в честь Ada Augusta (хотя первая версия этого языка называлась Green Language ( зеленый язык ). Ada - язык, использующий объекты (новая версия этого языка Ada 9х является объектно-ориентированной), он наследует основные принципы языка ПАСКАЛЬ. Первый ANSI стандарт для языка Ada появился в 1983 году.

CLOS (Common Lisp Object System), базовым предшественником которого является язык Lisp. Законченная спецификация этого языка была опубликована в 1988 году.

Объектный ПАСКАЛЬ (Object Pascal) разработан в кампании Apple (1986 год) и был первым объектно-ориентированным языком для системы Macintosh Programmers Workshop (MPW).

Eiffel, разработанный Bertrand Meyer в середине 80-х годов, а также свыше 80 других объектных языков, краткая информация о которых с указанием соответствующей библиографии приведена в работе [2, с. 473-490].

Поскольку основное внимание в этой книге уделяется языку C-I-+, остановимся на нем более подробно. Язык С++ разработан Bjarne Stroustrup, сотрудником АТ<&Т Bell Laborato-



[ 1 ] 2 3 4 ... 159

http://7dach.ru/
© 2006 - 2018 pmbk.ru. Генерация страницы: 0.001
При копировании материалов приветствуются ссылки.
Яндекс.Метрика