Г. Шилтд - Самоучитель C++ (DJVU), страница 3
Описание файла
DJVU-файл из архива "Г. Шилтд - Самоучитель C++ (DJVU)", который расположен в категории "". Всё это находится в предмете "практика расчётов на пэвм" из 3 семестр, которые можно найти в файловом архиве МГУ им. Ломоносова. Не смотря на прямую связь этого архива с МГУ им. Ломоносова, его также можно найти и в других разделах. .
Просмотр DJVU-файла онлайн
Распознанный текст из DJVU-файла, 3 - страница
Сутью структурного программирования является возможность разбиения программы на составляющие ее элементы. Используя структурное программирование, средний программист может создавать и поддерживать программы свыше 50 000 строк длиной. Хотя структурное программирование, при его использовании для написания умеренно сложных программ„принесло выдающиеся результаты, даже оно оказывалось несостоятельным тогда, когда программа достигала определенной длины. Чтобы написать более сложную программу, необходим был новый подход к программированию.
В итоге были разработаны принципы объектно-ориентированного программирования. ООР аккумулирует лучшие идеи, воплощенные в структурном программировании, и сочетает их с мощными новыми концепциями, которые позволяют оптимально организовывать ваши программы. Объектно-ориентированное программирование позволяет вам разложить проблему на составные части. Каждая составляющая становится самостоятельным объектом, содержащим свои собственные коды и данные, которые относятся к этому объекту.
В этом случае вся процедура в целом упрощается, и программист получает возможность оперировать с гораздо большими по объему программами. Все языки ООР, включая С++, основаны на трех основополагающих концепциях, называемых инкапсуляцией, полиморфизмом и наследованием. Рассмотрим эти концепции. Инкапсуляция Инкапсуляция (епсар5и(аг(оп) — это механизм, который объединяет данные и код, манипулирующий с этими данными, а также защищает и то, и другое от внешнего вмешательства или неправильного использования. В объектно- Самоучитель С++ ориентированном программировании код и данные могут быть объединены вместе; в этом случае говорят, что создается так называемый "черный ящик".
Когда коды и данные объединяются таким способом, создается обьект (о/уесг). Другими словами, объект — это то, что поддерживает инкапсуляцию. Внутри объекта коды и данные могут быть закрытыми (р6уаге) для этого объекта или открытыми (риале). Закрытые коды или данные доступны только для других частей этого объекта. Таким образом, закрытые коды и данные недоступны для тех частей программы, которые существуют вне объекта.
Если коды и данные являются открытыми, то, несмотря на то, что они заданы внутри объекта, они доступны и для других частей программы. Характерной является ситуация, когда открытая часть объекта используется для того, чтобы обеспечить контролируемый интерфейс закрытых элементов объекта. На самом деле объект является переменной определенного пользователем типа.
Может показаться странным, что объект, который объединяет коды и данные, можно рассматривать как переменную. Однако применительно к объектно-ориентированному программированию это именно так. Каждый элемент данных такого типа является составной переменной. ПолиморФизм Полиморфизм (ро1утогрЫзт) (от греческого ро1угпогр)гох) — это свойство, которое позволяет одно и то же имя использовать для решения двух или более схожих, но технически разных задач.
Целью полиморфизма, применительно к объектно-ориентированному программированию, является использование одного имени для задания общих для класса действий. Выполнение каждого конкретного действия будет определяться типом данных. Например, для языка С, в котором полиморфизм поддерживается недостаточно, нахождение абсолютной величины числа требует трех различных функций: яЬвО, 1аЬ|О и 1аЬьО. Эти функции подсчитывают и возвращают абсолютную величину целых, длинных целых и чисел с плавающей точкой соответственно. В С++ каждая из этих функций может быть названа аЬв(). (Один из способов, который позволяет это делать, показан далее в этой главе.) Тип данных, который используется при вызове функции, определяет, какая конкретная версия функции действительно выполняется.
Как вы увидите, в С++ можно исгюльзовать одно имя функции для множества различных действий. Это называется перагрузкойфункцпй (1ипсйоп егере!оайпя). В более общем смысле, концепцией полиморфизма является идея "один интерфейс, множество методов". Это означает, что можно создать общий интерфейс для группы близких по смыслу действий. Преимуществом полиморфизма является то, что он помогает снижать сложность программ, разрешая использование того же интерфейса для задания единого клпсса действий. Выбор же конкретного дейсп~еия, в зависимости от ситуации, возлагается на компилятор.
Вам, как программисту, не нужно делать этот вы- 73 Глава 1. Краткий обзор С++ бор самому. Нужно только помнить и использовать общий интерфейс. Пример из предыдущего абзаца показывает, как, имея три имени для функции определения абсолютной величины числа вместо одного, обычная задача становится более сложной, чем это действительно необходимо. Полиморфизм может применяться также и к операторам. Фактически во всех языках программирования ограниченно применяется полиморфизм, например, в арифметических операторах. Так, в С, символ + используется для складывания целых, длинных целых, символьных переменных и чисел с плавающей точкой.
В этом случае компилятор автоматически определяет, какой тип арифметики требуется. В С++ вы можете применить эту концепцию и к другим, заданным вами, типам данных. Такой тип полиморфизма называется перегрузкой операторов (орега1ог огег(оайпф, Ключевым в понимании полиморфизма является то, что он позволяет вам манипулировать объектами различной степени сложности путем создания общего для них стандартного интерфейса для реализации похожих действий.
Наследование Наследовапие ((ппепгапсе) — это процесс, посредством которого один объект может приобретать свойства другого. Точнее, объект может наследовать основные свойства другого объекта и добавлять к ним черты, характерные только для него. Наследование является важным, поскольку оно позволяет поддерживать концепцию иерархии классов ~Ьегагс(пса(с(азз()(са1(оп).
Применение иерархии классов делает управляемыми большие потоки информации. Например, подумайте об описании жилого дома. Дом — это часть общего класса, называемого строением. С другой стороны, строение — это часть более общего класса — конструкции, который является частью еше более общего класса объектов, который можно назвать созданием рук Человека. В каждом случае порожденный класс наследует все, связанные с родителем, качества и добавляет к ним свои собственные определяющие характеристики. Без использования иерархии классов, для каждого объекта пришлось бы задать все характеристики, которые бы исчерпывающе его определяли.
Однако при использовании наследования можно описать объект путем определения того общего класса (или классов), к которому он относится, с теми специальными чертами, которые делают объект уникальным. Как вы увидите, наследование играет очень важную роль в ООР. ~~Приме 1. Инкапсуляция не является исключительной прерогативой ООР. Некоторая степень инкапсуляция может быть достигнута и в языке С.
Например, при применении библиотечной функции, в конечном итоге, имеет место концепция черного ящика, содержимое которого вы не можете изменить (исключая, 14 возможно, злой умысел). Рассмотрим функцию Гореп0. Если она используется для открытия файла, то создаются и инициализируются несколько внутренних переменных. В той мере, в которой это касается вашей программы, эти переменные скрыты и недоступны.
Но, конечно, С++ обеспечивает более надежную поддержку инкапсуляции. 2. В реальной жизни примеры полиморфизма вполне обычны. Например, рассмотрим рулевое колесо автомобиля. Оно работает одинаково, независимо от того, используется ли при этом электропривод, механический привод или стандартное ручное управление. Ключевым является то, что интерфейс (рулевое колесо) один и тот же, независимо от того, какой рулевой механизм (метод) применяется на самом деле. 3. Наследование свойств и базовая концепция классов являются основополагающими для организации пути познания.
Например, сельдерей — член класса овощей, которые являются частью класса растений. В свою очередь, растения являются живыми организмами и так далее. Без иерархии классов систематизация знаний была бы невозможна. 1. Подумайте о том, какую важную роль в нашей повседневной жизни играют классы и полиморфизм. 1.2. Две версии С++ При написании этой книги С++ находился на перепутье. Как указано в предисловии, в последние годы активно шел процесс стандартизации С++.
Целью стандартизации было создание стабильного, ориентированного на будущее языка, которой призван удовлетворить потребности программистов следующего столетия. Результатом стало параллельное существование двух версий С++. Первая, традиционная версия базируется на исходной разработке Бьярна Страуструпа. Это та версия, которая использовалась программистами последние лет десять. Вторая версия, названная Бгапбагг! С++, создана Бьярном Страуструпом совместно с комитетом по стандартизации (АХИ! — Атег)сап Ха!1опа1 БГапг!агс!з 1пзгйШе, Американский национальный институт стандартов; 1Ю вЂ” 1пгегпайопа1 Б!апг!агбз Огяапиа!юп, Международная организация по стандартам). Хотя по сути эти две версии очень похожи, Яапг(агг! С++ содержит несколько усовершенствований, которых нет в традиционном С++.