|
Программирование >> Программирование на языке c++
ТО нарисовать КВАДРАТ, в противном случае, если ВИД ГРАФИЧЕСКОГО ОБЪЕКТА это ТРЕУГОЛЬНИК, то нарисовать ТРЕУГОЛЬНИК; Подобные процедуры должны знать о всех графических объектах, которые программист захочет нарисовать. К сожалению, на практике это невозможно. В таком случае, если вы хотите рассмотреть новый графический объект, нужно менять многие ранее разработанные процедуры. Это ведет к новым ошибкам в программах. Кроме того, новый тип данных становится фактически новым типом данных конкретного программиста и теряет универсальность (развиваемость) его использования. Объектно-ориентированное направление в программировании разрешает эту проблему. В объектно-ориентированном программировании используются следующие базовые правила [1]: определение классов, которые будут использоваться; определение всех необходимых операций для каждого класса, обеспечение расширяемости (открытости) классов с использованием принципа наследования. Именно этот принцип и разрешает проблему, которая заключается в следующем. Мы можем определить базовые (неизменяемые) свойства любого графического объекта. Такой объект имеет цвет и координаты, он может быть (в принципе) нарисован и перемещен и т. п. С другой стороны, каждый конкретный графический объект обладает и присущими только ему специфическими свойствами. Например, окружность имеет радиус и может быть нарисована только с помощью процедуры, которая рисует окружность. Язык программирования, который позволяет выделить базовые свойства и потом дополнить специфические, является языком объектно-ориентированного программирования. Это реализуется через специальный механизм, называемый наследованием. Основная идея такого механизма заключается в следующем. Сначала определяются базовые свойства нового типа данных, например: class ГРАФИЧЕСКИЙ ОБЪЕКТ { скрытые {локальные) компоненты: ТОЧКА center; не скрытые (глобальные) компоненты: модифицируемая процедура НАРИСОВАТЬ; процедура ПЕРЕМЕСТИТЬ; модифицируемая процедура ПОВЕРНУТЬ; другие процедуры Модифицируемая процедура - это такая процедура, которая в будущем может быть изменена (в языке С++ для этих целей используется ключевое слово virtual). В действительности virtual говорит о том, что соответствующая процедура может быть изменена в будущем (а может быть и нет). После этого мы можем определить базовый код для модифицируемой процедуры, например: модифицируемая процедура НАРИСОВАТЬ ( массив с координатами точек, размер массива) { рисует на экране все точки, заданные в массиве массив с координатами точек } Для того чтобы определить специфический графический объект, мы должны описать этот специфический объект и добавить в него только новые процедуры, решающие новые, специфические для этого объекта, задачи. Например: class ОКРУЖНОСТЬ наследуется из класса ГРАФИЧЕСКИЙ ОБЪЕКТ { скрытые {локальные) компоненты: ЦЕЛОЕ radius не скрытые (глобальные) компоненты: модифицируемая процедура НАРИСОВАТЬ; модифицируемая процедура ПОВЕРНУТЬ; другие модифицируемые процедуры Новый класс ОКРУЖНОСТЬ наследуется из старого класса ГРАФИЧЕСКИЙ ОБЪЕКТ. В соответствии с правилами, принятыми в объектно-ориентированном программировании, класс ОКРУЖНОСТЬ может использовать данные и процедуры из базового класса (в нашем примере из класса ГРАФИЧЕСКИЙ ОБЪЕКТ), добавлять новые данные и процедуры (см., например, данное radius), а также (и это очень важно) изменять процедуры, имеющие тип virtual (модифицируемые процедуры). 1.4. Объекты и классы Базовыми блоками объектно-ориентированной программы являются объекты и классы. Содержательно объект можно представить как что-то ощущаемое или воображаемое и имеющее хорошо определенное поведение. Таким образом, объект можно либо увидеть, либо потрогать, либо, по крайней мере, знать, что он есть, например, представлен в виде информации, хранимой в памяти компьютера. Объект - это часть окружающей нас реальности, т. е. он существует во времени и в пространстве (впервые понятие объекта в программировании введено в языке Simula). Формально объект определить довольно трудно. Grady Booch [2] сделал это через некоторые свойства, а именно: объект имеет состояние, поведение и может быть однозначно идентифицирован (другими словами, имеет уникальное имя). С другой стороны, класс - это множество объектов, имеющих общую структуру и общее поведение. Рассмотрим примеры некоторых конструкций языка С. Строка: int X; определяет переменную X целого типа. Здесь int - это имя типа, а X - объект данного типа. Аналогично можно задать много объектов данного типа, например: int X,Y,Z; Наши три объекта являются статическими переменными, которые могут только получать определенные значения , поэтому нельзя говорить об их поведении, однако они имеют общую структуру. В результате мы можем говорить о типе int как об имени класса. Если объект - это что-то ощущаемое, то класс - только абстракция, используемая для описания общей структуры и поведения множества объектов. Рассмотрим другой пример: struct RECORD { char name[50]; int age; };
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |