|
|||||||||||||||||||||||||||||||||||||||||||||||
|
|||||||||||||||||||||||||||||||||||||||||||||||
|
Osnovy
nasledovaniya
Khotya nasledovanie nicht yavlyaetsya panaceey
OOP i vo mnogikh
situaciyakh luchshe vospol'zovat'sya interfeysami, nicht stoit
polagat', chto ohne
nasledovaniya mozhno kak-nibud' oboytis'.
Nasledovanie — zamechatel'noe
sredstvo, sposobnoe sekonomit'
nicht wenige vremeni
der i Gewalten... esli im
recht pol'zovat'sya. Kriteriy das
korrekte ispol'zovaniya
prost: nicht ispol'zuyte
nasledovanie, esli bei euch
net absolyutnoy uverennosti in suschestvovanii
logicheskoy das svyazi
tipa «yavlyaetsya chastnym sluchaem».
Esli all ??? rassuzhdeniya vyglyadyat slishkom abstraktnymi, nizhe priveden vymyshlennyy (i nadeemsya, zabavnyy) primer. Predpolozhim, vy razmyshlyaete ?ber Themen, da kakogo klassa sleduet ob'yavit' proizvodnym klass Managerof Programmers — da Manager ili da Programmer? Vsem izvestno, chto menedzhery nosyat akkuratnye pricheski, poetomu klass Manager dolzhen soderzhat' Methode Sethalrstyle. Und teper' zakroyte glaza i predstav'te tipichnogo programmista, kotorogo vdrug festlegten upravlyat' das zweite programmistami. Zakhochet li on menyat' svoy imidzh? K?nnen vy ob uverenno meldet, chto vyzov vida tom.SetHairStyle("sharp razor cut")
In suschnosti, bei programmirovanii in VB .NET ihr nikak nicht udastsya skryt'sya
da nasledovaniya. Dazhe esli
vy privykli k des interfeysnomu
Stils programmirovaniya Vb5
i Vb6 i schitaete, chto f?r
euere Aufgaben dostatochno interfeysov vkupe
s vklyucheniem i delegirovaniem, ogranichit'sya
eins interfeysami
in VB .NET nevozmozhno. Delo
in Band, chto ohne ersichtlicher ispol'zovaniya
nasledovaniya vy nicht
smozhete pol'zovat'sya .NET Framework. Nasledovanie
es zalozheno in Anfangsgr?nde
das teuere graficheskogo
prilozheniya .NET, und takzhe mnogikh
vstroennykh klassov kollekciy —
dazhe rabota s ob'ektom Folderbrowser
svyazana s nasledovaniem! Bolee das, selbst
podkhod k primeneniyu nasledovaniya in
.NET Framework kak nel'zya luchshe
dokazyvaet, chto nasledovanie in
ob'ektno-orientirovannom
programmirovanii nicht dolzhno
polnost'yu vytesnyat'sya
interfeysami. Podkhod, primenennyy in
.NET Framework, vpolne mozhet primenyat'sya i
in euer sobstvennykh Projekte. Bei postroenii bibliotek, ispol'zuemykh
das zweite programmistami,
bek?mmlicher sproektirovannye
klassy, proshedshie tschatel'nuyu
otladku i testirovanie, mogut
ispol'zovat'sya das zweite
programmistami in kachestve bazovykh.
Nachnem s
povtoreniya nekotorykh terminov.
Klass, vzyatyy vor Anfangsgr?nde bei
opredelenii neuer klassa,
nazyvaetsya bazovym klassom. Klass,
opredelyaemyy an osnove Basis
klassa, nazyvaetsya proizvodnym
klassom. Proizvodnyy klass
avtomaticheski nasleduet all
otkrytuyu funkcional'nost'
Basis klassa, odnako ???
funkcional'nost' mozhet
pereopredelyat'sya in proizvodnom
klasse i dopolnyat'sya novymi
vozmozhnostyami. Sleduyuschiy primer anschauungsweise pokazyvaet, kak ???
proiskhodit. Dopustim, bei uns imeetsya
kompaniya s peredovoy politikoy in
oblasti material'nogo
stimulirovaniya. Kazhdyy Mal, kogda
zarabotnaya Ausgleich vsekh sluzhaschikh
kompanii povyshaetsya an 5%, f?r
programmistov Augment sostavlyaet
6%. Euch porucheno razrabotat' Geb?ude
ucheta kadrov f?r ???? kompanii. Vy
reshaete opredelit' klass Programmer,
proizvodnyy da Employee, i
pereopredelit' Methode Raisesal agu in
klasse Programmer, chtoby otrazit'
avtomaticheskuyu (i vpolne
zasluzhennuyu!) Aufgeld. Itak, pristupim k programmirovaniyu cepochki
nasledovaniya Employee—>programmer.
Dopustim, bei uns bereits imeetsya klass
Publis Employee, kotoryy vkhodit in reshenie
ili vklyuchaetsya in nego komandoy Project
> References. In ???? sluchae Beginn Code
klassa Programmer budet vyglyadet' derma?en (klyuchevaya
stroka vydelena zhirnym Schrift): Public Class Programmer Inherits
Employee End
Class Klyuchevoe Wort Inherits
dolzhno ist in pervoy nicht pustoy
i nicht soderzhaschey kommentariya stroke
posle imeni proizvodnogo klassa
(kstati, Intellisense podskazhet imena
vozmozhnykh bazovykh klassov). Uchtite,
chto proizvodnyy klass nicht mozhet
ob'yavlyat'sya s modifikatorom Publ
und s, esli bazovyy klass ob'yavlyalsya
s modifikatorom Friend ili Private.
??? svyazano der s Themen, chto
modifikator urovnya dostupa in
proizvodnom klasse nicht mozhet byt' menee
ogranichivayuschim, chem modifikator
Basis klassa. S drugoy storony,
on mozhet ustanavlivat' bolee zhestkie
ogranicheniya, poetomu da Basis
klassa s urovnem dostupa Publ und s
mozhno ob'yavit' proizvodnyy klass s
urovnem Friend. Sleduyuschim Schritt in postroenii
proizvodnogo klassa dolzhno Boden
pravil'noe des opredelenie
Konstrukteurs. Poskol'ku
proizvodnyy klass dolzhen obladat'
kak des minimum Themas aber
vozmozhnostyami, chto i bazovyy,
konstruktory proizvodnykh klassov
h?ufig vyzyvayut konstruktory
bazovykh klassov f?r pravil'noy
inicializacii poley Basis
klassa i peredayut im argumenty,
kotorye dolzhny ispol'zovat'sya bei
inicializacii. Bei ????
ispol'zuetsya special'noe klyuchevoe
Wort Mybase: Public Sub New(Byval
thename As String, Byval cursalary As Decimal) Mybase.NewCName.curSalary) End Sub Klyuchevaya stroka, vydelennaya zhirnym Schrift,
vyzyvaet Konstrukteur das
Basis klassa Empl
oyee i inicializiruet des ego Ackers.
Esli vy vergessen vyzvat' Mybase. New
in Band sluchae, kogda Konstrukteur das
Basis klassa vyzyvaetsya s
Argumente, VB .NET vydaet soobschenie
ob oshibke sleduyuschego vida: C:\vb net book \chapter 5 \Examplel \Examplel \Modulel.vb(55): 'Examplel.Programmer'.the base class of 'Examplel.Employee'. does not have an accessible constructor that can be called with no arguments. Therefore.the first statement of this constructor must be und call to und constructor of the base class via 'Mybase.New' or another
constructor of this class via 'Myclass.New' or 'Me.New'. Bek?mmlicher by, chtoby all soobscheniya
ob oshibkakh byli nastol'ko soderzhatel'nymi
i ponyatnymi. Kompilyator
napominaet o Band, chto
bei otsutstvii in Basis klassa des
bezargumentnogo Konstrukteurs
proizvodnyy klass dolzhen
soderzhat' khotya by eins vyzov Mybase.
New. Posle vklyucheniya in programmu vyzova
Mybase. New voznikaet ochen' interesnyy
vopros: kak obraschat'sya k ?cker
das Basis klassa? Sleduyuschee
pravilo an pervyy vzglyad mozhet ihr
udivit': Proizvodnyy
klass nicht obladaet
privilegirovannym Eingang k ?cker
Basis klassa. Iz ????? pravila sleduet, chto proizvodnyy klass
Programmer nicht poluchaet dostupa k zakrytym ?cker
das Basis klassa Employee.
Predpolozhim, zarabotnaya Ausgleich
khranitsya in zakrytom j?tet Basis
klassa s imenem m_sal ary i vy pytaetes'
einschlie?t in Code metoda Raisesalary klassa
Programmer sleduyuschiy Ausschnitt: Public Sub New(Byval
thename As String. Byval cursalary As Decimal) Mybase.New(thename.
cursalary) Mybase.m_salary = 1.2
* cursalary End Sub Kompilyator
vydaet soobschenie ob oshibke: 'Examplel.Employee.m_Salary'is Private.and is not accessible in this context.
Chto aber delat'? Esli vy
khotite, chtoby proizvodnyy klass poluchil
Eingang k nekotorym vozmozhnostyam Basis
klassa, ob ???? dolzhen
pozabotit'sya selbst bazovyy klass.
In sleduyuschem razdele budet es
ist aufgewiesen, kak ??? delaetsya.
|
|
|||||||||||||||||||||||||||||||||||||||||||||
|
|||||||||||||||||||||||||||||||||||||||||||||||