Осложнения и прогноз.
При своевремен-
ной профилактике прогноз благоприятный.
Серферы
(от англ, «surf»
«прибой»)
Симптомы.
Больные отличаются па-
тологической лю бознательностью , а
также непостоянством, так как они по-
стоянно бросаю т один сайт и уходят к
другому. Болезнь активизируется но-
чью, когда цены на повременный до с-
туп в Интернет падают.
Лечение.
Лечится вводом оплаты за
трафик. Если болезнь продолжает раз-
виваться, применяют ампутацию моде-
ма. В тяжелых случаях врач может при-
нять решение об удалении телефонной
линии.
Осложнения и прогноз.
При строгом
лечении прогноз благоприятный. При склон-
ности к осложнениям больной может стать
чатером или форумчанином, поэтому не-
обходим постоянный врачебный контроль.
А Окончание. Начало на стр. 38-39
Наследование и переопределение
Итак, ранее мы сконструировали объект
T L i n e , управ-
ляющий линией на экране дисплея — и это получилось у нас
весьма недурственно. Н о что делать, если нам понадобится
создать объект для управления прямоугольником — такой се-
бе рамкой на экране? Что же нам, опять составлять новый
объектный тип и опять переписывать кучу кода? Н ет уж, да -
вайте воспользуемся
наследованием.
Что это такое? О , это
такая фишка — всем фишкам фишка © . Ну а если серьез-
но, то в Turbo Pascal имеется возможность объявлять новые
объектные типы в качестве
потомков
уже существующего объ-
ектного типа, что позволяет потомкам унаследовать все по-
ля и методы родителя (предка), а также дополнять объекты
новыми полями, заменять (переопределять, перекрывать) ме-
тоды родителя или дополнять их. Вот это, собственно, и есть
наследование.
Чтобы описать объект-потомок, достаточно после служеб-
ного слова o b je c t указать в круглых скобках
идентификатор
типа
объекта-родителя:
typ e
T F r a m e = o b j e c t ( T L i n e )
F F i l l e d : b o o l e a n ;
f u n c t i o n F i l l e d : b o o l e a n ;
e n d ;
это будет означать, что все поля и методы родителя
T L i n e
присутствуют неявно, и стало быть, присовокупляются к по-
томку — родная кровь, все-таки © . При этом в новый объ-
ект можно ввести дополнительные поля и методы, если в этом
есть необходимость. Так, в потомка
T F r a m e было введено по-
ле
F F i l l e d , управляю щее заливкой рамки, что позволит по-
лучать на экране либо незакрашенный прямоугольник-рам-
ку, либо закрашенный прямоугольник а-ля «Черный квадрат»
Казимира Севериновича © .
В свою очередь, от типа
T F r a m e можно образовать («п о -
родить») потомка — например,
T W i n d o w , ведь свойства рам-
ки и окна очень схожи. Тогда объект
T F r a m e б удет предком
по отношению к
T W i n d o w , а T W i n d o w б удет прямым потом-
ком объекта
T F r a m e и косвенным потомком объекта T L i n e ,
стало быть, унаследует все поля и методы, которые были опи-
саны в его предках. Такое объектное генеалогическое дре-
во своими ветвями может подниматься высоко и тянуться к
небу, пока это будет нужно селекционеру, то бишь програм-
мисту. И значит, не имеет смысла снова и снова изобретать
велосипед, а остается лишь совершенствовать его и нагро-
мождать необходимые надстройки, дополнения — а это эко-
номит время при разработке программ.
При этом действует правило, что один объектный тип мо-
жет служить предком для неограниченного числа объектных
типов-потомков, но каждый объектный тип может быть потом-
ком только одного родителя, который указывается в скобках.
Вернемся к нашим бараном. Мы остановились на объяв-
лении нового объектного типо
T F r a m e , который, помимо все-
го прочего, унаследовал от своего предка
T L i n e методы E n -
a b l e и D i s a b l e . Д а , но ведь эти методы рисуют линию, а
объект
T F r a m e , по идее, долж ен рисовать прямоугольник. В
этом случае можно поступить по старинке, то есть добавить
два метода, которые бы рисовали рамку и назывались дру-
гими именами. Но это было бы отступлением от объектно-
ориентированного стиля программирования. Более элегант-
ным решением может послужить переопределение методов
E n a b l e и D i s a b l e ,
то есть замена их новыми методами с
аналогичными именами; заодно переопределим и метод
c r e -
a t e , чтобы выполнялась инициализация поля F F i l l e d :
t y p e
T F r a m e = o b j e c t ( T L i n e )
F F i l l e d : b o o l e a n ;
p r o c e d u r e C r e a t e ( A L e f t , A T o p , A R i g h t , A B o t t o m :
i n t e g e r ) ;
p r o c e d u r e S e t F i l l e d ( A F i l l e d : b o o l e a n ) ;
p r o c e d u r e E n a b l e ;
p r o c e d u r e D i s a b l e ;
f u n c t i o n F i l l e d : b o o l e a n ;
e n d ;
p r o c e d u r e T F r a m e . C r e a t e ( A L e f t , A T o p , A R i g h t , A B o t -
t o m : i n t e g e r ) ;
b e g i n
{вызываем родительский метод)
T L i n e . C r e a t e ( A L e f t , A T o p , A R i g h t , A B o t t o m ) ;
F F i l l e d : = f a l s e ;
e n d ;
p r o c e d u r e T F r a m e . S e t F i l l e d ( A F i l l e d : b o o l e a n ) ;
П о к с приведу лишь исходный код м етода
C r e a t e ,
а о с -
тальные методы будут рассм отрены позднее.
Вы ш е мы переопределили методы, тем сам ы м перекрыв
родительские методы новыми. П р и этом в объ екте-потом ке
под теми же им енам и будут известны только его соб ствен -
ные методы, а
унаследованные (inherited)
методы будут дос-
тупны посредством указания составно го имени, состоящ его
из имени родительского типа и имени м етода, разд ел енн о-
го точкой.
И з н о вого м етода
C r e a t e
видно, что в нем используется
вызов унасл ед ованн ого м етод а
T L i n e . C r e a t e
— чтобы не
делать двойную работу. Н ачи ная с версии
Turbo Pascal 7.0
введено служ ебное слово
i n h e r i t e d ,
к о то р о е позволяет
осущ ествить вызов перекры того унасл ед ованн ого методо.
Тогда для седьмой версии м етод
C r e a t e
м ож ет иметь сле-
дую щ ий вид:
p r o c e d u r e T F r a m e . C r e a t e ( A L e f t , A T o p , A R i g h t , A B o t -
t o m : i n t e g e r ) ;
b e g i n
{вызываем родительский метод}
i n h e r i t e d C r e a t e ( A L e f t , A T o p , A R i g h t , A B o t t o m ) ;
F F i l l e d ; = f a l s e ;
e n d ;
Выглядит гор азд о лучше.
П ом и м о этого, у нового м етода м ож ет быть совсем дру-
гой интерф ейс входных п ар ам е тр ов, чем у од нои м енного
унаследованного метода.
В отличие от методов, поля переопределить нельзя, так
как они в обязательном порядке наследую тся объектом-по-
томком. М о ж н о добавлять новые поля, но при этом их име-
на не должны совпадать с именами полей родителя.
Совместимость объектных типов
К ром е эквивалентных объектных типов, объявленных как
t y p e T O b j l = T O b j
2
, совместимыми по при сваиванию являют-
ся объектные типы, состоящ ие в родстве, при этом м ож но
присваивать потом ка родителю:
v a r
L i n e : T L i n e ;
F r a m e : T F r a m e ;
b e g i n
L i n e : = F r a m e ;
Такое же прави ло распространяется и н а указатели объ -
ектных типов. П ри подобном присвоении значениями полей
объ екта-потом ка модиф ицирую тся только одноименны е п о-
ля объекта-родителя.
(Продолжение следует)
М О Й КОМ ПЬЮ ТЕР
предыдущая страница 42 Мой Компьютер 2004 39 читать онлайн следующая страница 44 Мой Компьютер 2004 39 читать онлайн Домой Выключить/включить текст