Информационный сайт

 

Реклама
bulletinsite.net -> Книги на сайте -> Программисту -> Лафоре Р. -> "Объектно-ориентированное программирование в С++" -> 16

Объектно-ориентированное программирование в С++ - Лафоре Р.

Лафоре Р. Объектно-ориентированное программирование в С++ — М.: Питер, 2004. — 992 c.
Скачать (прямая ссылка): obektnoorentprogramm2004.djvu
Предыдущая << 1 .. 10 11 12 13 14 15 < 16 > 17 18 19 20 21 22 .. 341 >> Следующая


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

Базовый класс

Производные классы Рис. 1.6. Наследование 42 Глава 1. Общие сведения

изводных классов. Роль наследования в ООП такая же, как и у функций в процедурном программировании, — сократить размер кода и упростить связи между элементами программы.

Повторное использование кода

Разработанный класс может быть использован в других программах. Это свойство называется возможностью повторного использования кода. Аналогичным свойством в процедурном программировании обладают библиотеки функций, которые можно включать в различные программные проекты.

В ООП концепция наследования открывает новые возможности повторного использования кода. Программист может взять существующий класс, и, ничего не изменяя, добавить в него свои элементы. Все производные классы унаследуют эти изменения, и в то же время каждый из производных классов можно модифицировать отдельно.

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

Легкость повторного использования кода уже написанных программ является важным достоинством ООП. Многие компании утверждают, что возможность включать в новые версии программного обеспечения коды программ более старых версий благоприятно сказывается на прибыли, приносимой последними. Более подробно этот вопрос будет обсуждаться в других главах книги.

Пользовательские типы данных

Одним из достоинств объектов является то, что они дают пользователю возможность создавать свои собственные типы данных. Представьте себе, что вам необходимо работать с объектами, имеющими две координаты, например х и у. Вам хотелось бы совершать обычные арифметические операции над такими объектами, например:

positionl = position2 + origin

где переменные positionl, position2 и origin представляют собой наборы из двух координат. Описав класс, включающий в себя пару координат, и объявив объекты этого класса с именами positionl, position2 и origin, мы фактически создадим новый тип данных. В С++ имеются средства, облегчающие создание подобных пользовательских типов данных.

Полиморфизм и перегрузка

Обратите внимание на то, что операции присваивания = и сложения + для типа position должны выполнять действия, отличающиеся от тех, которые они выпол- С++ и С 43

няют для объектов стандартных типов, например int. Объекты positionl и прочие не являются стандартными, поскольку определены пользователем как принадлежащие классу position. Как же операторы = и + распознают, какие действия необходимо совершить над операндами? Ответ на этот вопрос заключается в том, что мы сами можем задать эти действия, сделав нужные операторы методами класса position.

Использование операций и функций различным образом в зависимости от того, с какими типами величин они работают, называется полиморфизмом. Когда существующая операция, например = или +, наделяется возможностью совершать действия над операндами нового типа, говорят, что такая операция является перегруженной. Перегрузка представляет собой частный случай полиморфизма и является важным инструментом ООП.

С++ и С

С++ унаследовал возможности языка С. Строго говоря, С++ является расширением языка С: любая конструкция на языке С является корректной в С++; в то же время обратное неверно. Наиболее значительные нововведения, присутствующие в С++, касаются классов, объектов и ООП (первоначальное название языка С++ — «С с классами«-). Тем не менее имеются и другие усовершенствования, связанные со способами организации ввода/вывода и написанием комментариев. Иллюстрация отношения между языками С и С++ приведена на рис. 1.7.

На практике существует гораздо больше различий между С и С++, чем может показаться вначале. Несмотря на то что можно писать программы на С++, внешне напоминающие программы на С, вряд ли кому-то придет в голову так поступать. Программисты, использующие С++, не только пользуются преимуществами этого языка перед С, но и по-новому используют возможности, унаследованные от С. Если вы знакомы с С, значит, у вас уже имеются некоторые 44 Глава 1. Общие сведения

знания относительно С++, но все же вероятно, что значительная часть материала окажется для вас новой.

Изучение основ

Наша задача состоит в том, чтобы как можно быстрее научить вас создавать объ-ектно-ориентированные программы. Поскольку, как мы уже говорили, значительная часть языка С++ унаследована от С, то даже при объектно-ориентированной структуре программы ее основу составляют «старомодные» процедурные средства. Поэтому в главах 2-5 рассматриваются традиционные средства программирования языка С++, в основном унаследованные от С: действия с переменными и ввод/вывод, организация циклов и переходов, работа с функциями. Там же будут рассмотрены структуры, синтаксис которых совпадает с синтаксисом классов.
Предыдущая << 1 .. 10 11 12 13 14 15 < 16 > 17 18 19 20 21 22 .. 341 >> Следующая
Реклама
Авторские права © 2009 AdsNet. Все права защищены.
Rambler's Top100