
ОГЛАВЛЕНИЯ:
введение.. 3
Наследование. 8
Полиморфизм. 10
Основные типы алгоритмических структур на языке BASIC. 13
Литература: 17
введение
Развитие компьютерной индустрии до современного уровня стало возможным только благодаря использованию ЭВМ, которая в свою очередь определяется кругом решаемых задач. А поскольку для того, чтобы решать задачу с помощью компьютера, ее нужно запрограммировать, то нельзя не отметить, что с момента, как люди стали использовать ЭВМ для чего-то более сложного, чем математические расчеты, компьютеры, программное обеспечение, да и сами решаемые задачи подверглись серьезным изменениям. В результате этого процесса программисты столкнулись с тем, что рост сложности программного обеспечения влечет за собой существенное возрастание затрат на его проектирование, создание и сопровождение. Более того, однажды написанное программное обеспечение оказывается столь сложной системой, что практически не поддается анализу и модификации в соответствии с изменяющимися требованиями.
Суть объектно-ориентированного подхода состоит в том, что вместо попытки «компьютеризовать» задачу в программу переносятся уже определенные в проблемной области сущности и процессы, используя полученные модели для решения поставленной задачи. Кроме того, структура этих моделей способствует повторному их (или их частей) использованию в других задачах.
Объекты - ключевое понятие объектно-ориентированной технологии. Оглянувшись вокруг, можно увидеть множество объектов реального мира: собака, стол, телевизор, автомобиль. Сюда можно также отнести геометрические фигуры: круг, прямоугольник и т. д.
Объекты реального мира разделяют две общие характеристики: они все имеют состояние и поведение. Например, автомобиль имеет состояние (цвет, скорость движения, тип и размер колес) и поведение (торможение, ускорение, переключение передачи). С другой стороны, геометрическая фигура круг также имеет состояние (координаты центра, радиус и цвет) и возможное поведение (рисование, перемещение и изменение цвета).
![]() |
Общепринятое изображение программного объекта
Программные объекты, так же, как и реальные, обладают каждой из рассмотренных характеристик. Программные объекты сохраняют свое состояние в свойствах. Свойство - это некоторое значение, имеющее идентификатор. Поведение программных объектов реализуется с помощью методов. Метод - это подпрограмма (процедура), ассоциированная с объектом. Таким образом, объект - это программная единица, состоящая из свойств и методов
Для иллюстрации описанных понятий рассмотрим следующий пример.
Пусть необходимо написать программу, которая будет рисовать на экране круг какого-либо определенного цвета. Для этого нужно знать радиус, координаты центра, а также цвет, которым он будет закрашен. Если создавать программу стандартным способом, то понадобятся такие переменные:
R - радиус круга;
X, Y - координаты центра круга;
Color - цвет круга.
Для того чтобы нарисовать этот круг на экране, нужна процедура, которую можно назвать Draw. Она будет изображать круг с заданными параметрами R, х. У, Color.
Недостаток стандартного метода заключается в том, что данные в этом случае не являются взаимосвязанными. Предположим, что нужно нарисовать не один, а три круга (например, снеговика). При использовании стандартного метода программирования придется выбирать между двумя способами реализации этого примера. Первый способ - завести для каждого круга свой набор параметров R, X, Y, Color, а затем вызывать процедуру Draw с каждым из этих наборов. Недостаток данного способа очевиден: если нужно рисовать много кругов, то понадобится большое количество переменных. Это приведет к тому, что программа станет очень громоздкой. Второй способ заключается в том, чтобы для каждого нового круга задавать в программе свои значения параметров R, X, У, Color, но при этом значения параметров для предыдущего круга будут теряться. Недостаток способа состоит в потере значений параметров всех кругов, за исключением последнего.
Если в этой программе ограничиться изображением снеговика, то недостаток второго способа не будет иметь значения. Но когда создается большое по размеру приложение, то программисту желательно представлять себе возможные изменения и дополнения, которые необходимо будет реализовать в будущем. В рассматриваемом примере со снеговиком возможно несколько изменений.
Предусмотреть возможность перемещения снеговика по экрану в различных направлениях - процедура Move. Для того чтобы переместить снеговика на заданное расстояние в определенном направлении, пользователь не обязан знать его предыдущие координаты (точнее, координаты всех его составляющих). Поэтому параметрами процедуры Move должны быть относительные координаты перемещения, а не абсолютные. Иначе говоря, снеговик должен перемещаться относительно своего исходного положения.
Сделать возможным изменение цвета для всех кругов, из которых состоит снеговик - процедура ChangeColor. Для ее выполнения будут необходимы два параметра: имя изменяемого объекта-круга и новый цвет, которым он будет закрашен.
Если использовать второй способ (с малым количеством переменных), то реализация этих дополнительных возможностей представляется крайне затруднительной. Причина этого - отсутствие значений параметров для всех кругов, из которых состоит снеговик, за исключением последнего, потому что при рисовании каждого последующего объекта процедура Draw должна вызываться с новыми значениями параметров. Следовательно, когда снеговик будет нарисован, то в переменных R, X, Y, Color будут храниться значения параметров для последнего нарисованного объекта, а все остальные значения будут потеряны. Поэтому перемещение всех кругов, из которых состоит снеговик, будет невозможно, следовательно, для данного примера второй способ неприемлем.
При использовании первого, более громоздкого метода, можно реализовать все предложенные дополнения, но при этом новые процедуры придется вызывать не один, а три раза - для каждого объекта. Если представить, что имеется несколько снеговиков, то для любого круга, входящего в состав каждого из них, должна быть предусмотрена возможность перемещения и изменения цвета. Очевидно, что реализация этих возможностей стандартными методами программирования приведет к значительному увеличению объема программы и к уменьшению ее читаемости, вследствие чего внесение еще каких-либо изменений станет весьма затруднительным.
Теперь данный пример будет рассмотрен с точки зрения ООП. В этом случае вместо огромного количества переменных будет несколько объектов. Вначале все круги можно представить в виде самостоятельных объектов с одинаковой структурой, которые отличаются друг от друга лишь значениями параметров. Действие процедур Draw, Move и ChangeColor, применительно к каждому их них, также является идентичным. Иначе говоря, в данном случае все круги являются объектами, которые имеют одинаковую структуру (радиус, координаты центра, цвет) и ведут себя схожим образом при выполнении любого действия (рисование, перемещение, изменение цвета), т. е. все они принадлежат одному и тому же семейству. Далее приведенные рассуждения будут рассмотрены в терминах ООП.
С точки зрения ООП все "действующие лица" программы представляют собой объекты, каждый из которых является элементом (экземпляром) какого-либо класса. Параметры объекта (радиус, цвет и т. п.) называются его свойствами, а процедуры или функции, которые он выполняет в ответ на какой-либо запрос (поменять цвет, переместиться и т. п.), называются методами. При этом метод, который должен вызываться в ответ на запрос, определяется классом, экземпляром которого является данный объект. И наоборот, если объекты принадлежат одному и тому же классу, то они должны вызывать одинаковые методы в ответ на один и тот же запрос.
Теперь приведенные рассуждения можно применить к рассматриваемому примеру с кругами. Пусть класс, которому принадлежат все объекты-круги, называется Round
Свойствами класса Round являются следующие:
· R - радиус круга;
· X, Y - координаты центра круга;
· Color - цвет круга. Методы класса Round:
· Draw - рисует круг с заданными параметрами;
· Move - перемещает круг на определенное расстояние в
выбранном направлении;
· ChangeColor - изменяет цвет круга.
![]() |
Изображение компонентов класса Round
Для того чтобы нарисовать снеговика, потребуются три объекта-круга. Верхний из них можно назвать Head, средний -Body, а нижний - Foot. Все эти объекты принадлежат классу Round. Следовательно, все они имеют одинаковые свойства
(R, X, Y, Color) и вызывают одинаковые методы (Draw, Move, ChangeColor) в ответ на одни и те же запросы.
При использовании ООП памяти в компьютере программа требует столько же, сколько и при стандартном методе алгоритмизации (способ с использованием большого количества переменных). Но при этом она становится намного компактнее, значительно облегчаются процессы ее разработки и усовершенствования. Программа состоит из независимых блоков, которые могут использоваться и в других приложениях. ООП зачастую позволяет создавать конечный продукт просто путем соединения нескольких готовых блоков, написанных ранее.
Наследование.
Вернемся к рассматриваемому примеру с рисованием снеговиков. Пусть необходимо нарисовать снеговика с глазами, которые должны время от времени мигать. Все остальные свойства и методы у объектов-глаз должны быть такими же, как и у объектов-кругов, принадлежащих классу Round. Иначе говоря, глаза снеговика тоже нужно перемещать по экрану вместе с остальными кругами, а также должна оставаться возможность изменения их цвета. Для реализации этого дополнения можно создать еще один класс - Eyes (Глаза), в котором будут те же свойства и методы, что и в Round, но еще будет добавлен метод Blink (Мигание). Однако при этом придется для класса Eyes заново создавать все свойства и методы, которые уже были описаны для Round.
Чтобы не выполнять подобную двойную работу, в ООП существует механизм наследования. Этот механизм реализуется путем создания иерархической структуры классов. Вначале создается класс Round, для которого описываются все свойства и методы. Он располагается в основании иерархической структуры. Затем создается еще один класс под названием Eyes, в котором описывается новый метод Blink, а все остальные свойства и методы остаются без изменений, т. е. класс Eyes наследует все свойства и методы Round и, в то же время, включает в себя дополнительный метод Blink.
В иерархической структуре Eyes следует за классом Round, и в этом случае говорят, что Round является предком (или родительским классом) для Eyes. В свою очередь. Eyes является потомком (или дочерним классом) для Round.
![]() |
Итак, наследованием называется возможность доступа объектов, принадлежащих классу-потомку, к методам и свойствам класса-предка.
Наследование классом Eyes методов класса Round
Таким образом, применение наследования в ООП ведет к значительному уменьшению объема программы и повышению ее функциональности.
Полиморфизм.
Термин полиморфизм своим происхождением обязан двум греческим словам: poly (много) и morphos (форма). Таким образом "полиморфизм" переводится как "множество форм". В программировании этот термин относится к таким переменным или параметрам процедур (функций), которые в процессе выполнения программы могут принимать значения разных типов. Процедуры (функции), имеющие полиморфные параметры, также называются полиморфными. Далее будет рассмотрено использование полиморфизма в ООП.
Обратимся снова к примеру с кругами. Пусть необходимо рисовать на экране не только круги, но и другие геометрические фигуры (например, прямоугольники), причем с ними нужно выполнять те же самые действия, которые были описаны ранее (рисовать, перемещать, изменять цвет фигуры). Но для того, чтобы нарисовать прямоугольник, необходимо знать координаты какой-либо его вершины (например, левой верхней), а также его длину и ширину.
Для реализации приведенных требований следует создать класс Rect (rectangle - прямоугольник), являющийся потомком Round, и применительно к нему Х и У - это координаты выбранной вершины прямоугольника, а R - его длина (или ширина). Но в этом случае придется описать еще одно свойство для обозначения ширины (или длины). Очевидно, что при работе с подобными классами легко может возникнуть путаница в использовании свойств, и причина этого - узкая направленность класса Round, который ориентирован на работу только с определенной геометрической фигурой.
Чтобы сделать Round более универсальным, т. е. пригодным для изображения большего числа геометрических фигур, следует изменить его свойства следующим образом. Вместо радиуса и координат центра нужно описать такие свойства:
Top - координата верхней границы фигуры;
Left - координата левой границы фигуры;
Height - высота фигуры;
Width - ширина фигуры.
По этим свойствам легко можно определить недостающие координаты для любой фигуры. Например, для получения всех координат прямоугольника (или квадрата) необходимо к координате левой границы прибавлять ширину, а из верхней вычитать высоту. Пусть
Тор =80,
Left = 20,
Height = 40,
Width = 60.
Тогда правая граница равна
Left+ Width =80,
а нижняя равна
Top-Height =40.
Следовательно, данный прямоугольник имеет следующие координаты (первая координата - для горизонтальной оси, вторая - для вертикальной): А(20, 80), В(80, 80), С(20, 40), D(80,40).
Теперь, на основе предка Round с описанным выше новым набором свойств, можно создать потомка Rect для изображения прямоугольников. Однако методика рисования в этом случае должна отличаться от той, которая использовалась при работе с кругами. Т. е. необходимо», чтобы для Rect содержимое унаследованного метода Draw отличалось от родительского, в противном случае, если вызывать Draw для объекта, принадлежащего классу Rect, то на экране все равно будет нарисован круг, а не прямоугольник.
Чтобы этого избежать, необходимо для Rect описать свой метод Draw. Тогда для объекта, принадлежащего классу Round, вызов Draw будет означать изображение на экране круга, а для объекта из Rect - прямоугольника. Т. е. методы с одним и тем же именем Draw отвечают за разные действия, в зависимости от того, объекту какого класса необходимо выполнить рисование. Подобная ситуация в ООП носит название полиморфизма. Графическая интерпретация описанного примера
![]() |
полиморфизма в ООП приведена на рисунке.
![]() |
Основные типы алгоритмических структур на языке BASIC.
|

Алгоритмическая структура «ВЕТВЛЕНИЕ»

|
Алгоритмическая структура «ВЫБОР»
|
Алгоритмическая структура «ЦИКЛ СО СЧЕТЧИКОМ»
|
Алгоритмическая структура «ЦИКЛ С ПРЕДУСЛОВИЕМ»
|
Алгоритмическая структура «ЦИКЛ С ПОСТУСЛОВИЕМ»
|
Литература:
1. , , «Программирование на VISUAL Basic 6.0», Харьков 2002 год.
2. . «Информатика и информационные технологии», М. 2002г.
3. , Информатика, Просвещение 2000г.
4. , , «Этюды на QuickBasic», М. 1988г.
5. , «Самоучитель WINDOWS», М. 2003г.







