ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 11.12.2025

Просмотров: 3243

Скачиваний: 1

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

DisplayArray [ I D i s p l a y a b l e

[] d i s p l a y a b l e s )

{

 

 

 

i n t l e n g t h =

d i s p l a y a b l e s . L e n g t h ;

 

f o r ( i n t i n d e x = 0 ; i n d e x < l e n g t h ;

i n d e x + + )

{

 

 

 

I D i s p l a y a b l e

d i s p l a y a b l e

= d i s p l a y a b l e s [ i n d e x ] ;

C o n s o l e . W r i t e L i n e ( " { 0 } " ,

d i s p l a y a b l e . G e t S t r i n g ( ) ) ;

/ / S t u d e n t s - с о р т и р о в к а п о у с п е в а е м о с т и

// S t u d e n t - о п и с а н и е с т у д е н т а с и с п о л ь з о в а н и е м и м е н и и // у с п е в а е м о с т и

class S t u d e n t : I C o m p a r a b l e , I D i s p l a y a b l e

(

p r i v a t e

s t r i n g

p r i v a t e

d o u b l e

s N a m e ;

d G r a d e = 0 . 0 ;

/ / К о н с т р у к т о р - и н и ц и а л и з а ц и я н о в о г о о б ъ е к т а p u b l i c S t u d e n t ( s t r i n g s N a m e , d o u b l e d G r a d e )

t h i s . s N a m e = s N a m e ;

t h i s . d G r a d e = d G r a d e ;

/ / C r e a t e S t u d e n t L i s t - д л я п р о с т о т ы п р о с т о с о з д а е м

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

 

 

 

s t a t i c s t r i n g [ ]

s N a m e s =

 

 

 

 

 

{ " H o m e r " ,

" M a r g e " ,

" B a r t " ,

" L i s a " ,

" M a g g i e " } ;

s t a t i c d o u b l e t ]

d G r a d e s =

{ 0 , 8 5 ,

5 0 ,

1 0 0 ,

3 0 } ;

p u b l i c s t a t i c S t u d e n t [ ] C r e a t e S t u d e n t L i s t ( )

 

{

 

 

 

 

 

 

 

 

 

 

S t u d e n t [ ]

s A r r a y = n e w S t u d e n t [ s N a m e s . L e n g t h ] ;

for

( i n t

i

=

0;

i <

s N a m e s . L e n g t h ; i + + )

 

{

 

 

 

 

 

 

 

 

 

 

s A r r a y t i ]

= n e w S t u d e n t ( s N a m e s [ i ] ,

d G r a d e s [ i ] ) ;

}

 

 

 

 

 

 

 

 

 

 

r e t u r n

s A r r a y ;

 

 

 

 

 

 

/ / Методы

д о с т у п а

т о л ь к о

д л я ч т е н и я

 

 

public

s t r i n g

N a m e

 

 

 

 

 

get

{ r e t u r n

s N a m e ;

}

 

 

 

 

public

d o u b l e

G r a d e

 

 

 

 

 

get

{ r e t u r n

d G r a d e ;

}

 

 

 

 

// Р е а л и з а ц и я

//CompareTo

и н т е р ф е й с а I C o m p a r a b l e :

- с р а в н е н и е д в у х о б ъ е к т о в (в н а ш е м с л у ч а е —

ю 14. Интерфейсы и структуры

319



/ /

о б ъ е к т о в

т и

п а S t u d e n t ) и

в ы я с н е н и е т о г о , ч т о и з них

/ /

д о л ж е н и д т и

р а н ь ш е в о т с о р т и р о в а н н о м с п и с к е

p u b l i c i n t

C o m p a r e T o ( o b j e c t

r i g h t O b j e c t )

{

/ / С р а в н е н и е т е к у щ е г о S t u d e n t ( н а з о в е м е г о л е в ы м ) и

/ /

д р у г о г о ( н а з о в е м е г о п р а в ы м ) и г е н е р а ц и я о ш и б к и ,

/ /

е с л и э т и о б ъ е к т ы — н е S t u d e n t

S t u d e n t

l e f t S t u d e n t

=

t h i s ;

i f

( ! ( r i g h t O b j e c t i s

S t u d e n t ) )

{

 

 

 

 

 

C o n s o l e . W r i t e L i n e ( " К о м п а р а т о р у п е р е д а н н е S t u d e n t " )

 

r e t u r n

0 ;

 

 

}

 

 

 

 

S t u d e n t r i g h t S t u d e n t =

( S t u d e n t ) r i g h t O b j e c t ;

/ / Г е н е р и р у е м - 1 , 0 и л и 1 н а о с н о в а н и и к р и т е р и я

/ / с о р т и р о в к и

 

 

i f

( r i g h t S t u d e n t . G r a d e

< l e f t S t u d e n t . G r a d e )

{

 

 

 

 

 

r e t u r n

- 1 ;

 

 

}

 

 

 

 

i f

( r i g h t S t u d e n t . G r a d e

> l e f t S t u d e n t . G r a d e )

{

r e t u r n

1 ;

 

 

 

 

 

r e t u r n 0 ,

}

/ / Р е а л и з а ц и я и н т е р ф е й с а I D i s p l a y a b l e :

/ / G e t S t r i n g - в о з в р а щ а е т с т р о к о в о е п р е д с т а в л е н и е / / и н ф о р м а ц и и о с т у д е н т е

p u b l i c s t r i n g G e t S t r i n g О

{

s t r i n g s P a d N a m e = N a m e . P a d R i g n t ( У ) ;

 

s t r i n g

s

=

S t r i n g . F o r m a t ( " { o } :

{ l : N 0 } " ,

 

 

 

 

 

 

s P a d N a m e , G r a d e )

 

r e t u r n

s ;

 

 

 

 

 

 

 

}

 

 

 

 

 

 

 

 

}

 

 

 

 

 

 

 

 

 

/ /

 

 

 

B i r d s - с о р т и р о в к а п т и ц п о и м е н а м

 

 

 

 

 

 

/ / B i r d -

j u s t

a n a r r a y o f b i r d n a m e s

 

 

 

c l a s s B i r d

:

I C o m p a r a b l e , I D i s p l a y a b l e

 

 

 

{

 

 

 

 

 

 

 

 

 

 

p r i v a t e

s t r i n g

s N a m e ;

 

 

 

 

/ / К о н с т р у к т о р - и н и ц и а л и з а ц и я о б ъ е к т а B i r d

 

p u b l i c B i r d ( s t r i n g

s N a m e )

 

 

 

{

 

 

 

 

 

 

 

 

 

t h i s . s N a m e = s N a m e ;

 

 

 

}

 

 

 

 

 

 

 

 

 

/ / C r e a t e B i r d L i s t -

в о з в р а щ а е т с п и с о к п т и ц ; д л я простота]

/ / и с п о л ь з у е м ф и к с и р о в а н н ы й с п и с о к

320

Часть V. За базовым ш


s t a t i c s t r i n g [ ]

s B i r d N a m e s =

{ " O r i o l e " ,

" H a w k " , " R o b i n " , " C a r d i n a l " ,

" B l u e j a y " ,

" F i n c h " , " S p a r r o w " } ;

p u b l i c

s t a t i c

B i r d [ ]

C r e a t e B i r d L i s t ( )

{

 

 

 

 

 

B i r d [ ]

 

b i r d s = n e w B i r d [ s B i r d N a m e s . L e n g t h ] ;

' f o r ( i n t i = 0;

i < b i r d s . L e n g t h ; i + + )

{

 

 

 

 

 

b i r d s [ i ]

= n e w B i r d ( s B i r d N a m e s [ i ] ) ;

}

 

 

 

 

 

r e t u r n

b i r d s ;

 

 

/ / Методы

д о с т у п а т о л ь к о д л я ч т е н и я

p u b l i c

s t r i n g N a m e

 

g e t { r e t u r n s N a m e ;

}

/ /

Р е а л и з а ц и я и н т е р ф е й с а I C o m p a r a b l e :

/ /

C o m p a r e T o - с р а в н е н и е и м е н п т и ц ; и с п о л ь з у е т с я

/ /

в с т р о е н н ы й м е т о д с р а в н е н и я к л а с с а S t r i n g

p u b l i c i n t C o m p a r e T o ( o b j e c t r i g h t O b j e c t )

{

/ / С р а в н е н и е т е к у щ е г о B i r d ( н а з о в е м е г о л е в ы м ) и

/ / д р у г о г о ( н а з о в е м е г о п р а в ы м )

B i r d

l e f t B i r d

=

t h i s ;

B i r d

r i g h t B i r d

=

( B i r d ) r i g h t O b j e c t ;

r e t u r n S t r i n g . C o m p a r e ( l e f t B i r d . N a m e , r i g h t B i r d . N a m e ) ;

/ / Р е а л и з а ц и я и н т е р ф е й с а I D i s p l a y a b l e :

/ / G e t S t r i n g - в о з в р а щ а е т с т р о к у с и м е н е м п т и ц ы p u b l i c s t r i n g G e t S t r i n g ( )

{

r e t u r n Name,-

Класс S t u d e n t (примерно в середине листинга) реализует интерфейсы I C o m p a r a ­ ble и I D i s p l a y a b l e , как описано ранее. Метод C o m p a r e T o О сравнивает студентов юуспеваемости, что приводит к соответствующей сортировке их списка. Метод G e t ­ String () возвращает имя и успеваемость студента.

Прочие методы класса S t u d e n t включают свойства только для чтения Name и G r a d e , простой конструктор и метод C r e a t e S t u d e n t L i s t ( ) . Последний метод просто возвра-

<ает фиксированный список студентов.

 

 

Класс B i r d внизу листинга

также реализует

интерфейсы I C o m p a r a b l e

и I D i s ­

playable. Он реализует метод

C o m p a r e T o ( ) ,

который сравнивает названия птиц по­

средством встроенного метода

сравнения класса

S t r i n g . Таким образом, в

результате

сортировки получается список птиц в алфавитном порядке. Метод G e t N a m e () просто Извращает название птицы .

[(лава 14. Интерфейсы и структуры

321


Теперь можно вернуться к функции M a i n () . Метод C r e a t e S t u d e n t L i s t ( ) и с пользуется для получения несортированного списка, который сохраняется в массиве s t u d e n t s .

Обычно для имен коллекций объектов, таких как массивы, используются суще ствительные.

Массив студентов сперва преобразуется в массив c o m p a r a b l e O b j e c t s . Это отли чается от массивов, использованных ранее в этой книге (в основном в главе 6 "Объединение д а н н ы х — классы и массивы") . Эти массивы были массивами объектом

определенного

класса, наподобие массива объектов S t u d e n t , в то

время как compa­

r a b l e O b j e c t s

представляет собой массив объектов, реализующих

интерфейс ICom­

p a r a b l e безотносительно к классу, которому принадлежат объекты. Использование ин терфейса в качестве типа элементов массива, типа параметра или возвращаемого значе­

ния — м о щ н ы й метод повышения гибкости программы .

 

Массив c o m p a r a b l e O b j e c t s передается встроенному

методу A r r a y . Sort ( ) ,

который и сортирует студентов по их успеваемости.

 

Затем отсортированный массив объектов типа S t u d e n t

передается локально опре­

деленному методу D i s p l a y A r r a y ( ) , итеративно проходящему по всем элементам массива объектов, которые реализуют метод G e t S t r i n g ( ) . Для выяснения количества элементов массива используется свойство A r r a y . L e n g t h . Затем для каждого объекта вызывается метод G e t S t r i n g ( ) , и его результат выводится на дисплей с помощью функции W r i t e L i n e ( ) .

Далее программа сортирует и выводит список птиц. Несомненно, вы согласитесь, что между птицами и студентами нет ничего общего. Однако класс B i r d реализует интер­ фейс I C o m p a r a b l e путем сравнения названий птиц и интерфейс I D i s p l a y a b l e пу тем возврата названий птиц.

Обратите внимание, что функция M a i n () не выполняет преобразования типа массива птиц — в этом нет необходимости. Это аналогично следующему фрагменту исходного текста:

c l a s s B a s e C l a s s

{ }

c l a s s S u b c l a s s

: B a s e C l a s s { }

c l a s s P r o g r a m

 

{

p u b l i c p u b l i c

s t a t i c v o i d S o m e F u n c t i o n ( B a s e C l a s s b e )

{ }

s t a t i c v o i d A n o t h e r F u n c t i o n ( )

 

{

 

S u b c l a s s

s c

= n e w S u b c l a s s ( ) ;

 

 

 

 

 

 

S o m e F u n c t i o n ( s c ) ;

 

 

 

 

 

 

Здесь

объект

класса S u b c l a s s может быть передан

как объект

B a s e C l a s s , по­

скольку

S u b c l a s s

Я В Л Я Е Т С Я

B a s e C l a s s .

 

 

 

 

 

Аналогично, массив объектов

B i r d может быть передан методу,

ожидающему мас

сив

объектов I C o m p a r a b l e , поскольку класс

B i r d реализует интерфейс

ICompara­

b l e .

Следующий

в ы з о в — D i s p l a y A r r a y ( )

— также

получает

массив

b i r d s б е з

преобразования типа, поскольку класс B i r d s реализует интерфейс

I D i s p l a y a b l e .

Вывод программы выглядит следующим образом:

 

 

 

 

Часть V. За базовыми классами