РЕФЕРАТ

ОГЛАВЛЕНИЯ:

введение.. 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.

CLS

A = 4

B = 2

C = -2

D = (B ^* A * C)

PRINT D

END

 
Линейный алгоритм.

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

INPUT A

INPUT B

IF A > B THEN

C = A - B

ELSE

C = B - A

END IF

PRINT C

END

 

Алгоритмическая структура «ВЫБОР»

INPUT "Введите степень сложности уровня (от 1 до 5)", rang

SELECT CASE rang

CASE rang >= 5

PRINT "Шансов практически нет"

PRINT "Сходите в нотариальную контору"

CASE 2 TO 4

PRINT "Шансов немного."

PRINT "Проверьте снаряжение"

CASE 1

PRINT "Возврат гарантирован"

PRINT "В Вас нет духа авантюризма"

CASE ELSE

PRINT "ЭТО ФИНИШ!"

PRINT "Вы вне игры!"

END SELECT

END

 

Алгоритмическая структура «ЦИКЛ СО СЧЕТЧИКОМ»

FOR n = 1 TO 10 STEP 2

PRINT n

NEXT n

END

 

Алгоритмическая структура «ЦИКЛ С ПРЕДУСЛОВИЕМ»

DO WHILE k < 10

k = k + 1

PRINT "k="; k

LOOP

DO UNTIL z < 10

z = z + 1

PRINT "z="; z

LOOP

END

 

Алгоритмическая структура «ЦИКЛ С ПОСТУСЛОВИЕМ»

DO

k = k + 1

PRINT "k="; k

LOOP WHILE k < 10

DO

z = z + 1

PRINT "z="; z

LOOP UNTIL z < 10

END

 

Литература:

1.  , , «Программирование на VISUAL Basic 6.0», Харьков 2002 год.

2.  . «Информатика и информационные технологии», М. 2002г.

3.  , Информатика, Просвещение 2000г.

4.  , , «Этюды на QuickBasic», М. 1988г.

5.  , «Самоучитель WINDOWS», М. 2003г.