Сделай Сам Свою Работу на 5

НАСЛЕДОВАНИЕ И ПОЛИМОРФИЗМ В ACTIONSCRIPT 2.0

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

Как вы помните, классы могут наследовать другим классам. При этом классами-потомками будут унаследованы все атрибуты и методы родительских классов.

Рассмотрим реализацию наследования на примере класса трехмерных точек, порожденного от уже хорошо знакомого нам класса точек. Новый класс в отличие от базового будет иметь три атрибута, содержащих значения координат по х, у и z. Напомним код родительского класса:

class CPoint

{

var m_x:Number;

var m_y:Number;

function CPoint(x:Number, y:Number)

{

m_x = x;

m_y = y;

}

}

 

Код класса-потомка:

class CPoint3D extends CPoint

{

private var m_z:Number;

//Конструктор

function CPoint3D(xx:Number, yy:Number, zz:Number)

{

//Вызов конструктора базового класса

super(xx, yy);

m z = zz;

}

}

Реализация наследования в ActionScript 2.0 осуществляется с помощью ключевого слова extends:

class CPoint3D extends CPoint

Буквально эту строку можно перевести так: «класс CPoint 3D расширяет CPoint».

В конструкторе явным образом вызывается конструктор базового, родительского класса:

super(xx, yy);

Хотя в конструктор класса CPoint3D передаются значения трех координат, непосредственная инициализация осуществляется только одного атрибута - m_z, другие значения передаются далее по цепочке в конструктор базового класса.

Полиморфизм

Выше был рассмотрен класс библиографических карточек для случая монографий. Но помимо монографий существуют и другие библиографические источники: статьи, авторефераты и т. д., структуры библиографического описания которых будут различными.

Рассмотрим пример классов библиографических описаний для монографий и журнальных статей. Класс библиографических карточек монографий был рассмотрен выше. Повторим его атрибуты:

1. Имя автора.

2. Заглавие.

3. Издательство.

4. Год.

5. Число страниц.

Класс библиографических описаний журнальных статей должен содержать:

1. Имя автора.

2. Заглавие.

3. Название журнала.

4. Год.

5. Номер.

6. Первую страницу статьи.

7. Последнюю страницу статьи.

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



Можно заметить, что атрибуты имя автора, заглавие и год, будут общими для книг и статей. Следовательно, их целесообразно вынести в базовый класс CbibliographicCard (рис. 5). Этот класс также будет предоставлять интерфейс для метода, формирующего строку библиографической записи. Этот метод будет объявлен без реализации, так как его реализации для книг и журнальных статей будут различными. Так как для формирования строки библиографического описания будет использован метод с одним и тем же именем, то мы имеем дело с полиморфизмам.

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

Приведем код классов «Библиографическая карточка» CbibliographicCard, «Библиографическая карточка для монографий» CBookCard и «Библиографическая карточка для журнальных статей» CArticleCard. He забудьте, что каждый класс должен быть сохранен в отдельном файле.

//Класс библиографических карточек

//Является абстрактным классом

//его экземпляры созданы быть не могут

class CBibliographicCard

{

//Автор

private var m_sAuthor:String;

//Заглавие

private var m_sTitle:String;

//Год издания

private var m_nYear:Number;

 

//-----------Методы доступа------------------

//----------------Set------------------------

function SetAuthor(sAuthor:String):Void

{m_sAuthor = sAuthor;}

function SetTitle(sTitle:String):Void

{m_sTitle = sTitle;}

function SetYear(nYear:Number):Void

{m_nYear = nYear;}

//----------------Get-------------------------

function GetAuthor():String{return m_sAuthor;}

function GetTitleO:String{return m_sTitle;}

function GetYearO:Number{return m_nYear;}

//////////////////////////////////////////////

 

//Конструктор

function CBibliographicCard(sAuthor:String, tlerString, sTi-tle:String,

nYear:Number)

{

//Производим инициализацию атрибутов

m_sAuthor = sAuthor;

m_sTitle = sTitle;

m nYear = nYear;

}

 

 

function GetDescription():String

{

var s:String;

return s;

}

}

//Класс библиографических карточек для монографий

class CBookCard extends CBibliographicCard

{

//Издательство

private var m_sPublisher:String;

//Число страници

private var m_nPageCount:Number;

 

 

//------------Методы доступа------------------

//----------------Set-------------------------

function SetPublisher(sPublisher:String):Void

{m_sPublisher = sPublisher;}

function SetPageCount(nPageCount:Number):Void

(m_nPageCount = nPageCount;}

//----------------Get-------------------------

function GetPublisher():String{return m_sPublisher;}

function GetPageCount():Number{return m_nPageCount;}

//////////////////////////////////////////////

 

//Конструктор

 

Рис. 5. Диаграмма библиографических описаний

 

 

function CBookCard(sAuthor:String, sTitle:String,

sPublisher:String, nYear: Number, nPage-Count:Number)

{

super(sAuthor, sTitle, nYear);

m_sPublisher = sPublisher;

m_nPageCount = nPageCount;

}

 

//Формируем описание монографии в виде одной строки

function GetDescription():String

 

{

return m_sAuthor + " " + m_sTitle + ". "

+ m_sPublisher + ", " + String(m_nYear)

+ ". " + String(m_nPageCount) + " стр.";

}

}

 

//Класс библиографических карточек для журнальных статей

class CArticleCard extends CBibliographicCard

{

//Название журнала

private var m_sJournal:String;

//Номер журнала

private var m_nNo:Number;

//Первая страница

private var m_nPageBegin:Number;

//Последняя страница

private var m_nPageEnd:Number;

 

//------------Методы доступа------------------

//----------------Set-------------------------

function SetJournal (sJournal :String):Void

{m_sJournal = sJournal ;}

function SetNo(nNorNumber):Void

{m_nNo = nNo;}

function SetPageBegin(nPageBegin:Number):Void

{m_nPageBegin = nPageBegin;}

function SetPageEnd(nPageEnd:Number):Void

{m_nPageEnd = nPageEnd;}

//----------------Get--------------------------

function GetJournal ():String{return m_sJournal;}

function GeNo():Number{return m_nNo;}

function GetPageBegin():Number{return m_nPageBegin;}

function GetPageEnd():Number{return m_nPageEnd;}

//////////////////////////////////////////////

 

//Конструктор

function CArticleCard(sAuthor:String, sTitle:String,

sJournal:String, nYear:Number, nNo:Nuinber,

nPageBegin:Number, nPageEnd:Number)

{

//Вызов конструктора базового классa

super(sAuthor, sTitle, nYear);

m_sJournal = sJournal;

m_nNo = nNo;

m_nPageBegin = nPageBegin;

m_nPageEnd = nPageEnd;

}

 

 

//Формируем описание статьи в виде одной строки

function GetDescription():String

{

//Создаем часть строки библиографического описания,

//общую как для одностраничных,

//так и для многостраничных статей

var s:String = m_sAuthor + " " + m_sTitle + " / "

+ m_sJournal + ", " + String(m_nYear)

+", №"+ String(m_nNo) + ", C. ";

//Добавляем к ней часть для многостраничного случая

if(m_nPageBegin != m_nPageEnd)

s += String(m_nPageBegin) + "-"

+ String(m_nPageEnd) + ".";

//и для одностраничного случая

else

s += String(m_nPageBegin) + ".";

//Возвращаем строку библиографического описания

return s;

}

}

Обратите внимание, как в классе реализовано формирование строки библиографического описания.

Как видно из приведенного примера, полиморфизм в ActionScript 2.0 осуществляется путем замещения реализации метода, определенного в базовом классе.

ЗАДАНИЕ 2

Создать классы библиографических описаний книг СВоок, статей CArticle, а также класс библиографических описаний CBibliographicCard, который будет содержать атрибуты и методы, общие для обоих классов. Библиографическое описание книг будет иметь те же самые пункты, что и в первом задании. Библиографическое описание журнальных статей должно содержать пункты, указанные в табл. 2. Как и прежде, вариант определяется последней цифрой студенческого билета.

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

Таблица 2

Вариант
Автор + + + + + + + + + +
Число соавторов (помимо ос- новного автора
Заглавие + + + + + + + + + +
Название журнал + + + + + + + + + +
Год издания + + + + + + + + + +
Номер первой страницы + + + + + + + + + +
Номер последней страницы + + + + + + + + + +
Краткое содержание статьи   +             +  
Рецензия +         +       +
Рейтинг. Изменяется в пределах от 0 до указанного в таблице значения ( в методе доступа, устанавливающем значение данного атрибута, обеспечить проверку удовлетворения введенного значения данному требованию)
Комментарий   +   +   +   + + +

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

Атрибуты должны быть закрытыми. Для всех их должны быть созданы методы доступа. В конструкторе должна осуществляться инициализация всех атрибутов значениями, переданными в качестве аргументов, за исключением рецензии, рейтинга и комментария. В теле конструкторов классов библиографических описаний книг и статей не забудьте вызвать конструктор базового класса.

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

ЛИТЕРАТУРА

1. www.structuralist.ru

2. Дронов В.А. Macromedia Flash MX 2004/ - СПб.:БХВ-Петербург, 2004.

3. Буч Г. Объектно-ориентированный анализ и проектирование с примерами приложений на С++ / Пер. с англ. – М.: Бином, СПб.: Невский диалект, 1998


Акимов Сергей Викторович

Мультимедиа технологии в почтовой связи

(объектно-ориентированное программирование на языке ActionScript 2.0)

Методические указания к выполнению контрольной работы

Редактор Е. Ю. Пономарева

Подписано к печати

Объем 2,25 печ. л. Тираж 200 экз. Зак.

РИО СП6ГУТ. 191186 СПб., наб. р. Мойки 61

Отп. ООО «Дельфи». 193232 СПб., пр. Большевиков, 22



©2015- 2019 stydopedia.ru Все материалы защищены законодательством РФ.