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. За базовыми классами