Сделай Сам Свою Работу на 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 - 2024 stydopedia.ru Все материалы защищены законодательством РФ.