Программирование >>  Программирование на языке c++ 

1 ... 3 4 5 [ 6 ] 7 8 9 ... 159


ТО нарисовать КВАДРАТ,

в противном случае, если ВИД ГРАФИЧЕСКОГО ОБЪЕКТА

это ТРЕУГОЛЬНИК, то нарисовать ТРЕУГОЛЬНИК;

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

В объектно-ориентированном программировании используются следующие базовые правила [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; };



1 ... 3 4 5 [ 6 ] 7 8 9 ... 159

© 2006 - 2024 pmbk.ru. Генерация страницы: 0.005
При копировании материалов приветствуются ссылки.
Яндекс.Метрика