Êàêòî ìîæå áè çíàåòå, Visual Basic áåøå âêëþ÷èë íÿêîè
õàðàêòåðèñòèêè íà îáåêòíî-îðèåíòèðàíîòî ïðîãðàìèðàíå ñëåä âåðñèÿ
4. Âúïðåêè òîâà, â ñìèñúëà
íà îáåêòíàòà îðèåíòàöèÿ, ïðåìèíàâàíåòî îò âåðñèÿ 6 êúì VB .NET áåøå
äðàìàòè÷íî. Ñúâñåì ÿñíî å, ÷å VB .NET å îáåêòíî-îðèåíòèðàí ïðîãðàìåí
åçèê.
Ìîæå äà ñè êàæåòå: "Íÿìàì ïðåäïî÷èòàíèÿ äà èçïîëçâàì
îáåêòíî - îðèåíòèðàíè òåõíèêè íà
ïðîãðàìèðàíå."
Íî ñòðóêòóðàòà âúâ VB .NET, íà .NET Framework--ñïåöèàëíî íà áèáëèîòåêà
.NET Base Class Library--êàêòî è äîêóìåíòàöèÿòà, å òàêà
îáåêòíî-îðèåíòèðàíà, ÷å âèå íÿìà äà
ìîæåòå äà ãè ïîëçâàòå àêî íå âíèêíåòå â ñúùíîñòòà íà
îáåêòíàòà îðèåíòàöèÿ.
Ïðèíöèïè íà
Object-Oriented Programming
×åñòî ñå òâúðäè, ÷å èìà ÷åòèðè îñíîâíè êîíöåïöèè â îáëàñòòà
íà îáåêòíî-îðèåíòèðàíîòî ïðîãðàìèðàíå:
· Àáñòðàêöèÿ - Abstraction
· Êàïñóëàöèÿ - Encapsulation
·Íàñëåäÿåìàñò - Inheritance
· Ïîëèìîðôèçúì - Polymorphism
Âñÿêà îò òåçè êîíöåïöèè èãðàå âàæíà ðîëÿ â ïðîãðàìèðàíåòî
ïîä VB .NET íà åäíî èëè äðóãî íèâî.
Êàïñóëàöèÿòà è
àáñòðàêöèÿòà ñà "àáñòðàêòíè" êîíöåïöèè, ïîääúðæàùè ìîòèâàöèÿòà íè çà îáåêòíî-îðèåíòèðàíî
ïðîãðàìèðàíå.
Íàñëåäÿåìîñòòà è
ïîëèìîðôèçìà ñà êîíöåïöèè, êîèòî äèðåêòíî ñå âïëèòàò â
ïðîãðàìèðàíåòî ïîä VB .NET.
-
Àáñòðàêöèÿ
Íàêðàòêî êàçàíî,
àáñòðàêöèÿòà (abstraction) å íàáîð
îò åäèíèöè, êîèòî âêëþ÷âàò ñàìî òåçè àñïåêòè, êîèòî ñà ðåëåâàíòíè íà îòäåëíàòà,
êîíêðåòíàòà ñèòóàöèÿ. Íàïðèìåð, äà ïðåäïîëîæèì, ÷å èñêàìå äà ñúçäàäåì ñîôòóåð,
êîéòî îáñëóæâà îáåçïå÷àâàíåòî è çàïàçâàíåòî íà èíôîðìàöèÿòà çà ñëóæèòåëèòå íà
åäíî ó÷èëèùå. Çà òàçè öåë, íèå çàïî÷âàìå ñúñ ñúçäàâàíåòî íà ñïèñúê îò åëåìåíòè (÷ëåíîâå
-
items) ðåëåâàíòíè êúì íàøàòà åäèíèöà (ñëóæèòåë íà ó÷èëèùåòî). Íÿêîè îò òåçè åëåìåíòè -
items ñà:
·
FullName - (ïúëíî èìå)
·
Address - (àäðåñ)
·
SlujashtID - (èäåíòèôèêàöèîíåí íîìåð)
·
Zaplata- (çàïëàòà)
·
IncZaplata - (íàðàñòâàíå íà çàïëàòàòà)
·
DecZaplata
- (íàìàëÿâàíå íà çàïëàòàòà)
Çàáåëåæåòå, ÷å âêëþ÷âàìå íå ñàìî
ñâîéñòâà - properties íà
åäèíèöàòà, êàòî FullName, íî è
àêöèè
- actions , êîèòî ìîãàò äà áúäàò ïðåäïðèåìàíè ñïðÿìî òàçè åäèíèöà, êàòî
íàïðèìåð
IncZaplata, çà äà ñå óâåëè÷è
çàïëàòàòà íà ñëóæèòåëÿ.
Àêöèèòå ìîãàò
äà ñå ñâúðæàò ñ ìåòîäè (
methods), îïåðàöèè
(
operations), èëè ïîâåäåíèå (
behaviors). Ùå èçïîëçâàìå ïîíÿòèåòî
ìåòîäè
(methods), çàùîòî âúâ VB .NET òî
ñå èçïîëçâà.
Ðàçáèðà ñå íèå íèêîãà íÿìà äà âêëþ÷èì ñâîéñòâî
HairCount, êîåòî äà äàâà áðîÿ íà êîñìèòå
íà êîñàòà íà ñëóæèòåëÿ, âúïðåêè, ÷å âñåêè ñëóæèòåë èìà òàêèâà, çàùîòî òàçè
èíôîðìàöèÿ îò ãëåäíà òî÷êà íà êîìïàíèÿòà íå å èíòåðåñíà.
Íàêðàòêî, íèå ñìå ñúçäàëè
àáñòðàêöèÿ íà êîíöåïöèÿòà çà ñëóæèòåë (
Slujasht)--âêëþ÷èëè ñìå
ñàìî òåçè ñâîéñòâà è ìåòîäè íà ñëóæèòåëÿ, êîèòî ñà ðåëåâàíòíè íà íàøèòå íóæäè.
Ñëåä êàòî âå÷å ñìå ñúçäàëè àáñòðàêöèÿòà, ìîæåì äà çàïî÷íåì
êàïñóëèðàíåòî (
encapsulate)
íà òåçè ñâîéñòâà è ìåòîäè âúòðå â ñîôòóåðíèÿ êîìïîíåíò.
Êàïñóëàöèÿ
Èäåÿòà çà êàïñóëàöèÿòà å äà ñå çàòâîðÿò (òîåñò, êàïñóëèðàò)
ñâîéñòâàòà è ìåòîäèòå íà àáñòðàêöèÿòà, è äà ñå
èçëàãàò (expose) ñàìî
òåçè, êîèòî ñà àáñîëþòíî íåîáõîäèìè.
Âñÿêî ñâîéñòâî è ìåòîä íà
àáñòðàêöèÿòà ñå íàðè÷à ÷ëåí (member) íà àáñòðàêöèÿòà. Ìíîæåñòâîòî îò
èçëîæåíè (exposed) ÷ëåíîâå íà àáñòðàêöèÿòà êîëåêòèâíî ñå ñâúðçâà ñ
ïóáëè÷íèÿ
èíòåðôåéñ -
public interface (èëè ñàìî
interface) íà àáñòðàêöèÿòà (èëè íà ñîôòóåðíèÿ êîìïîíåíò,
êîéòî êàïñóëèðà àáñòðàêöèÿòà).
Êàïñóëàöèÿòà îáñëóæâà òðè ïîëåçíè öåëè:
·
Ïîçâîëÿâà
ïðîòåêöèÿ íà òåçè ñâîéñòâà è ìåòîäè çà ïîñåãàòåëñòâà îòâúí.
·
Äîïóñêà
âêëþ÷âàíå íà
âàëèäèçèðàù êîä, çà äà ñå õâàùàò ãðåøêèòå ïðè èçïîëçâàíå íà ïóáëè÷íèÿ
èíòåðôåéñ. Ïðèìåðíî ïðîâåðêà äà íå ñå âúâåäå îòðèöàòåëíî ÷èñëî çà çàïëàòà íà
ñëóæèòåë.
·
Îñâîáîæäàâà ïîòðåáèòåëÿ îò
çàäúëæåíèåòî äà çíàå êàê ñà âëîæåíè ñâîéñòâàòà è ìåòîäèòå.
Íàïðèìåð íå íè òðÿáâà äà çíàåì êàê Visual Basic ñúõðàíÿâà â ïàìåòòà
öåëî÷èñëåíî ÷èñëî (Integer data type), èëè ïî-òî÷íî äâîè÷íèÿò
ìó êîä.
Ôèãóðà
60 .
8 áèòîâî äâîè÷íî ÷èñëî
Ïðèìåðíî, íàé-ñòàðøèÿò ðàçðÿä b7 å çíàêîâ áèò (
sign bit). Êîãàòî å
1, ÷èñëîòî å
îòðèöàòåëíî, à êîãàòî å 0, ïîëîæèòåëíî.
Ôîðìóëàòà çà ïðåâðúùàíåòî íà ÷èñëîòî b7b6b5b4b3b2b1b0 â äåñåòè÷íî å:
decimal = -128b7 + 64b6 + 32b5 + 16b4 + 8b3 + 4b2 + 2b1 + b0
Íèå ïðîñòî çàïèñâàìå êîäà òàêà:
x = -16
y = -x
è îñòàâÿìå êîìïþòúðà è ïðîãðàìíèÿ åçèê äà ñå ãðèæàò äà
ïðåäñòàâÿíåòî íà ÷èñëàòà. Eòî òîâà å êàïñóëàöèÿ. Ñàìî òàçè ïîðöèÿ îò ñâîéñòâà è
ìåòîäè, êîÿòî å íóæíà, çà äà ðàáîòèì ñ öåëî÷èñëåíè (
integer) ÷èñëà ñå èçëàãàò (
exposed) íàâúí.
Òàçè ïîðöèÿ îò ïóáëè÷íèÿ èíòåðôåéñ å öåëî÷èñëåí òèï äàííè - Integer data type.
Íåùî ïîâå÷å, êàïñóëàöèÿòà íè ïðåäïàçâà îò ãðåøêè, çàïèñâàìå
çíàê ìèíóñ, à êàïñóëèðàíèÿ òèï äàííè ñè ïðèáàâÿ 1, àâòîìàòè÷íî.
·
Êàïñóëàöèÿòà
èìà è äðóãà èíòåðåñíà ÷åðòà.
Âñåêè êîä íàïèñàí çà èçëîæåíèÿ èíòåðôåéñîñòàâà âàëèäåí, äîðè äà ñå ñìåíÿò îòâúí öåëèòå ÷èñëà (Integer data type) ïî íÿêàêâà ïðè÷èíà, äîòîãàâà, äîêàòî èíòåðôåéñúò íå å
ñìåíåí. Íàïðèìåð àêî
ïðåìåñòèì êîäà íà êîìïþòúð, êîéòî ñúõðàíÿâà ÷èñëàòà â äðóã êîä, íàøèÿò êîä ïàê ùå ñè èçãëåæäà òàêà:
x = -16
y = -x
òî÷íî òîëêîâà âàëèäåí êàêòî ïðåäè.