Г. Шилдт - Полный справочник по C++ (1109478), страница 45
Текст из файла (страница 45)
Таким образом, язык С++ обладает преимущеспюми двух мощных метадон программиронания. С момента изобретения язык С.ь+ модифиввиронался трижды, каждый раз приобретая нее поные сноистна. Перный пересмотр сто оснон состоялся н 1935 году, нторои раз он поднерпвлся рснизии н 1990 голу. Несколько лет назад началась работа наа созданием стандарта языка С++. Для этого была сформиронана обьедшвенная комиссия двух организации по стандартизапии.
Л)451 (Апвспсап !чапопа1 гыапг)ап)а (ввавв(ввве— Американскии институт национальных сзагцшртон) и 150 (Виепвапопа! 5вапг)агг(а Огйапьзагюп — Организация междунаролных свандартон). Псрныи всрнонои вариант ставвларта был обнародован 25 января 1994 года. В этом документе комитет Л)ч51вг!50 С++ (членом которого был и сам анзор! пытался прилсржинаться идеи, сформулированных Страуструпом. добанин к ввим поные нозможности.
Однако н целом ставщарт лишь констатировал состояние языка Съ чч сложиншсеся н тот момент. Вскоре после опубликования псрного нарвшнга спввввввврта произошло собьпие, оказавшее огромное нлняцие на Гхвзнитие языка С-в-вч Алексавщр Стспанон (А)схапв)ег 5верапоч) разработал ставвдарпвую библиотеку шаблонов 5ТЕ (5вапв)агв) Товар)аве Ев(вгагу). Эта библиотека прсдстанляет собой набор обобшснпьвх процедур, коворьвс можно применять для обработки данных. Библиотека 5Т(. — не 'волька мощныи и элегаппвый, по и очень крупныи механизм.
Как следстние, члены комитета дружно проголосонали за нкчючеввие библиотеки 5Т1. н стандарт языка С+чч Зго значительно расширило перноначазьввьве рамки языка С++ но, кроме нсего прочего, затормозило процесс стандартизации. Следует честно признать, что никто не ожидал такои мсшлснной работы комитета по стандартизации. В ходе этой работы н язык С++ было ннссено много ноных свойств и сделано большое количество мелк«х»сонсршснстнонаний. Фактически нер- Часть !1. Язык С++ сия языка С++, предложенная комитетом, намного сложнее и крупнее, чем первоначальный вариант Страуструпа.
Послелнии ~срновои адриана стандарта был опубликован !4 ноября !997 года, и в )998 голу была, наконец, опубликована окончательная версия этого документа. Как правило, эта спецификация языка С-ьч. называется сюандиртом языка С+.ь (Ьгапдагг) С+-ь). В основу нашси книги положен станларт языка С-."+. Кроме то~о в нес включены все новые свойства языка С++. Зта версия языка предложена комитетом Агч\)/)ВО по стандартизации и поддерживается большинством компиляторов. 1 1 Что такое объектно-ориентированное программирование Поскольку стимулом разработки языка С++ являлось объскпю.ориентированное программирование (ООП), необходимо понимать его основные прин!ипы.
Обьектноориентированное программирование — довольно мошныи механизм. С момента изобретения компьютера методологии программирования резко изменились, в основном из-за возрастающей сложности программ. Например, программы ддя первых компьютеров представляли собой последоеателыюсти машинных команд, записанных в двоичном коле с помощью переключения тумблеров на псрелней панели машины.
Пока длина программ не превышала нескольких сотен сзрок, азот подход оставалсл вполне работоспособным. Однако по мере увеличения размера программ возникла необходимость в новом способе программирования, и появился язык ассемблера, позволяющии закодировать машинные инструкции с помощью символов. Размер программы продолжал увеличиваться, поэтому программистам понадобился более мощный язык, позволя|ощии справляться со сложными алгоритмами. Как известно, первым широко распространенным языком программирования оказался ЕОВТВАгх.
Несмотря на то что создание этого языка в свое время бьщо огромнь|м шагом вперед, ЕО)(ТКАЛ трудно назвать ясным и выразительным языком, гюзволян~шим созлавать простые и цаглялпые программы. Шестидесятые годы дали толчок развитшо структур~юго программирования. Основными средствами его воплощения стали языки С и Рааса!. Структурные языки программирования позволили легко созлавать достаточно слгикные программы. Кроме того, они характеризуются поддержкои изолированных подпрограмм, локальных переменных, богатым выбором управляющих конструкций и пе ~алано известным оператором СОТО.
Несмотря на то что сгруктурныс языки представляют собой мощное средство„они не позволянж создавать очень крупныс проекты. Изак, каждый новыи метод программирования позволял создавать все более сложные и крупные программы, улучшая прелыдущие подходы. До изобретения объектноориентированного программирования многие проекты лостигали границ, за которыми структурный подход уже не работал. Имсгию лля преодоления этих препятствий была создана объеюио-ориентированная парадшма. Объектно-ориентированное программирование унаследовало лучшие идеи структур ного программирования и объединило их с новыми понятиями. В резулыатс возник новый способ организации программ.
В принципе, есть два способа организации программ: положить в основу ее код (какие деишвия ~~роисходяту) или данные ( по изменяется в резульште действий?). В рамках структурного подхода главным понятием является код. Иначе говоря, его принцип можно сформулировать так. "кол изменяет данные". Так, программа, написанная на структурном языке, например на языке С, определяется ее функциями, каждая из которых может оперировать данными любого типа.
Объектно-ориентированные программы работают иначе. В их основу положены данные, а базовый принцип формулируется так: "даш~ыс контролирук1т доступ Глава 11. Обзор языка С++ к коду"'. В объектно-ориентированных языках определяются данные и процедуры, осуществляющие к ним доступ. Итак, тип данных точно определяет, какого рода операции к нему можно применять. Для полдержки объектно-ориентированного программирования язык лолжен обладать тремя свойствами: инкапсуляцией, полиморфизмом и наследованием. Рассмотрим кажлое из этих понятий отдельно. Инкапсуляция Имкалсуллиил (шсархц!айоп) — это механизм, связывающий воедино код и данные, которыми он манипулирует, а также обеспечивающий их защиту от внешнего вмешательства и неправильного использования. В объектно-ориентированном языке код и ланныс можно погружать в "черный ящик'", ко~орый называется одьектом (об)ес!). Иначе говоря, объект — это срелство инкапсуляции.
Внутри объекта кол и данные могут быть закрытыми (рпчаге) или открытыми (рцЫ(с). Закрытый код или данные объекта доступны ~олько из друюй часзи этого же объекта. Иначе говоря, к закрытой части кода или данных невозможно обратиться извне. Если код или данные являются открытыми, они доступны из любои части программы. Как правило, открытая часть кода обеспечивает управляемое взаимолействие (интерфейс) с закрытыми элементами объекта.
Как с синтаксической, так и с семантической точки зрения объект представляет собой переменную, тип которой определен пользователем. Людям, привыкшим к структурному программированию, может показаться странным, что переменная может солержать нс только данные, но и код. Однако в объектно-ориентированном программировании дело обстоит именно так. Определяя новый тип объекта, вы определяете новый тип данных. Кажлыи экземпляр этого типа данных является сложной переменной.
Полиморфизм Языки объектно-ориентированного программирования поддерживают лолизгорфизм (ро!угпогрп(ап), который характеризуется фразой "один интерфейс, несколько метолов". Проша говоря, полиморфизм — это атрибут, позволяющий с помощью одного интерфейса управлять доступом к целому классу методов. Конкретныи выбор определяется возникшеи ситуацией. В регьльном мире примером полиморфизма является термостат. Независимо от вила топлива (газ, мазут, электричество и т.д.), термостат работает одинаково. В данном случае термостат (представляюшии собой интерФейс) остается неизменным, независимо от типа печки (метода). Например, если вы хотите поднять температуру до 70 градусов, нужно просто установить термостат на соответствующее деление, независимо от типа печки.
Эзот принцип распространяется и на программирование. Например, допустим, что в программе определены три разных типа стека. Один стек состоит из целых чисел, другой — из символов, а гревший — из чисел с плаваюгцей точкой. Благодаря полиморФизму программисту достаточно определить Функции ривзг(! и рор(), которью можно применять к любому типу стека. В программе необходимо создазь три разные версии этих функций для каждой разновидности стека, но имена этих Функций должны быть одинаковыми. Компилятор автоматически выберет правильную функцию, основываясь на информации о типе данных, хранящихся в стеке.
Таким образом, фуню!ии риаЬ(! и рор(! — интерфеис стека — одинаковы, независимо от типа стека. Конкрстныс варианты этих функции определяют конкретные реализации (методы) для каждого типа данных. Полиморфизм позволяет упростить программу, создавая один интерфейс для выполнения разных лействий. Ответственность за выбор комкрсглмого действия (метода) в возникшеи ситуации перекладывается на компилятор.
Программисту не обязательно вмешиваться в этот процесс. Нужно лишь помнить правила и правильно применять обсяиа ммшерфейс. Часть )!. Язык С++ Первые объектно-орие~ггированные языки были интерпретируемыми, поэтому полиморфизм был динамическим. Однако язык С++ является компилируемым Таким образом, в языке С++ поддерживается как динамический, так и статический полиморфизм. Наследование Нпсыг)оваяие (1ппспгапсе) — это процесс, в ходе которого один обьект может приобретазь свойства другого. Он имеет большое значение, поскольку поддерживает концепцию классификации 1с)азз!Йсаг1оп).
Если подумать, все знания организованы по принципу иерархической классифиюшии Например, антоновка относится в классу "яблоки", который в свою очередь является частью класса "фрукты", входяшсго в класс "плгяп'Т Если бы классификации нс сушестаовю1о, мы пе смогли бы точно описать свойства объектов. Однако при этом пеобхолимо указывать только уникальные свойства объекта, позволяюшие выделить его среди других обьектов данного класса.
Именно этот принцип лежит в основе механизма наследования, лающего возможность считать конкретный объект специфическим экземпляром более общей разновидности. В дальнейшем мы убедимся, что наследование является важным аспектом объектно-ориентированною программирования. '.''-'4 Некоторые основные принципы языка С++ В первой части книги было описано подмножество С языка С++, и все примеры представляли собой программы, фактически написанные на языке С. Начиная с этого момента, все примеры булут программами, написанными на языке С++, т.е.
будут иллюстрировать свойства, присущие лишь языку С++. Для краткости назлаем эти характеристики "свойствами С++". Программисты, имеюшие опыт работы на языке С, должны помнить, что С++ сушесгаенно отличается от языка С. Большинство этих отличий относится к объектноориентированным свойствам языка. Однако программы, написанные на С-ъ+, отличаются также способом ввола-вывода данных и особенностями работы с заголовками. Кроме того, большинство программ на языке С++ обладают специфическими свойствами, характерными именно лля языка С++.