Главная->Інформатика та програмування->Содержание->Характеристики объектно-ориентированных языков

ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ В C++ (4-Е ИЗДАНИЕ) (часть 1) онлайн

Характеристики объектно-ориентированных языков

Здесь мы рассмотрим несколько основных элементов, входящих в состав объект- но-ориентированных языков, в частности в состав языка C++.

Объекты

Когда вы подходите к решению задачи с помощью объектно-ориентированного метода, то вместо проблемы разбиения задачи на функции вы сталкиваетесь с проблемой разбиения ее на объекты. Мышление в терминах объектов оказывает- ся гораздо более простым и наглядным, чем в терминах функций, поскольку про- граммные объекты схожи с объектами реального мира. Более подробно данный вопрос рассмотрен в главе 16 «Разработка объектно-ориентированного программ- ного обеспечения».

Что должно представляться в программе в виде объектов? Окончательный ответ на этот вопрос может дать только ваше воображение, однако приведем не- сколько советов, которые могут оказаться полезными:

Физические объекты.

Автомобили при моделировании уличного движения.

Схемные элементы при моделировании цепи электрического тока.

Страны при создании экономической модели.

Самолеты при моделировании диспетчерской системы.

Элементы интерфейса.

Окна.

Меню.

Графические объекты (линии, прямоугольники, круги).

Мышь, клавиатура, дисковые устройства, принтеры.

Структуры данных.

Массивы.

Стеки.

Связанные списки.

Бинарные деревья.

Группы людей.

Сотрудники.

Студенты.

Покупатели.

Продавцы.

Хранилища данных.

Описи инвентаря.

Списки сотрудников.

Словари.

Географические координаты городов мира.

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

Время.

Величины углов.

Комплексные числа.

Точки на плоскости.

Участники компьютерных игр.

Автомобили в гонках.

Позиции в настольных играх (шашки, шахматы).

Животные в играх, связанных с живой природой.

Друзья и враги в приключенческих играх.

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

Классы

Когда мы говорим об объектах, мы говорим, что они являются экземплярами классов. Что это означает? Рассмотрим следующую аналогию. Практически все компьютерные языки имеют стандартные типы данных; например, в C++ есть це- лый тип int. Мы можем определять переменные таких типов в наших программах:

int day; int count; int divisor; int answer;

Подобным же образом мы можем определять объекты класса, как показано на рис. 1.5. Класс является своего рода формой, определяющей, какие данные

и функции будут включены в объект класса. При объявлении класса не созда- ются никакие объекты этого класса, по аналогии с тем, что существование типа int еще не означает существование переменных этого типа.

Объекты этого класса

Object1               Object2               Object3

Таким образом, класс является описанием совокупности сходных между со- бой объектов. Это соответствует нестрогому в техническом смысле пониманию термина «класс»: например, Prince, Sting и Madonna относятся к классу рок- музыкантов. Не существует конкретного человека с именем «рок-музыкант», однако люди со своими уникальными именами являются объектами этого класса, если они обладают определенным набором характеристик. Объект класса часто также называют экземпляром класса.

Наследование

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

Рис. 1.5. Класс и его объекты

Принцип, положенный в основу такого деления, заключается в том, что каж- дый подкласс обладает свойствами, присущими тому классу, из которого выде- лен данный подкласс. Автомобили, грузовики, автобусы и мотоциклы обладают колесами и мотором, являющимися характеристиками наземного транспорта. Кроме тех свойств, которые являются общими у данных класса и подкласса, подкласс может обладать и собственными свойствами: например, автобусы име- ют большое число посадочных мест для пассажиров, в то время как грузовики обладают значительным пространством и мощностью для перевозки тяжеловес- ных грузов и т. д. Иллюстрация этой идеи приведена на рис. 1.6.

Подобно этому, в программировании класс также может породить множест- во подклассов. В C++ класс, который порождает все остальные классы, называ- ется базовым классом, остальные классы наследуют его свойства, одновременно обладая собственными свойствами. Такие классы называются производными.

Не проводите ложных аналогий между отношениями «объект—класс» и «ба- зовый класс — производный класс»! Объекты, существующие в памяти компью- тера, являются воплощением свойств, присущих классу, к которому они принад- лежат. Производные классы имеют свойства как унаследованные от базового класса, так и свои собственные.

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

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

Производные классы Рис. 1.6. Наследование

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

 

36