sobjectizer-4 book - narod.rueao197.narod.ru/desc/so_4_book.pdf · â sobjectizer, â...

296

Upload: others

Post on 01-Nov-2019

42 views

Category:

Documents


0 download

TRANSCRIPT

  • 125083, Ìîñêâà, óë. 8-ãî Ìàðòà, 10/12Òåë./Ôàêñ: (095) 212-8238, 212-9975http://www.intervale.ru

    SObjectizer-4 Book

    Å. Îõîòíèêîâ

    http://www.intervale.ru

  • SObjectizer Âåðñèÿ: 1.0.0SObjectizer-4 Book Äàòà: 2004.08.10Îãëàâëåíèå

    Îãëàâëåíèå

    I Ââåäåíèå 7

    1 Îáçîð 81.1 ×òî òàêîå SObjectizer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81.2 Èñòîðèÿ SObjectizer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8

    1.2.1 Ýòàï ÊÁ ÑÏ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81.2.2 Ýòàï Èíòåðâýéë . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9

    1.3 Ïðè÷èíû ïðîäîëæåíèÿ ðàçâèòèÿ SObjectizer . . . . . . . . . . . . . . . . . 91.4 ×òî ïðåäîñòàâëÿåò SObjectizer . . . . . . . . . . . . . . . . . . . . . . . . . . 9

    1.4.1 Àãåíòíî-îðèåíòèðîâàííàÿ ìîäåëü . . . . . . . . . . . . . . . . . . . . 91.4.2 Áèáëèîòåêà êëàññîâ äëÿ C++ . . . . . . . . . . . . . . . . . . . . . . 101.4.3 Ðàñïðåäåëåííûå ïðèëîæåíèÿ. SObjectizer Protocol . . . . . . . . . . 10

    1.5 ×åì SObjectizer íå ÿâëÿåòñÿ . . . . . . . . . . . . . . . . . . . . . . . . . . . 101.5.1 SObjectizer íå ïîâòîðÿåò ðàáîòó MS Windows . . . . . . . . . . . . . 101.5.2 SObjectizer íå ÿâëÿåòñÿ ðåàëèçàöèåé UML . . . . . . . . . . . . . . . 111.5.3 SObjectizer íå ÿâëÿåòñÿ ñåðâåðîì ïðèëîæåíèé . . . . . . . . . . . . 111.5.4 SObjectizer íå ÿâëÿåòñÿ æåñòêèì êàðêàñîì ïðèëîæåíèÿ . . . . . . . 12

    2 Àãåíòíûé ïîäõîä 132.1 Îñíîâíûå ïîíÿòèÿ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13

    2.1.1 Ñîñòîÿíèå . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142.1.2 Ñîîáùåíèå . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 152.1.3 Ñîáûòèå . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 162.1.4 Àãåíò . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17

    2.2 Ïðèìåíåíèå àãåíòíîãî ïîäõîäà . . . . . . . . . . . . . . . . . . . . . . . . . 192.2.1 Ïðîñòîé ïðèìåð ñ äâóìÿ àãåíòàìè . . . . . . . . . . . . . . . . . . . 192.2.2 Ïðîñòîé ïðèìåð ñ òðåìÿ àãåíòàìè . . . . . . . . . . . . . . . . . . . 212.2.3 Ïðîñòîé ïðèìåð íàñëåäîâàíèÿ . . . . . . . . . . . . . . . . . . . . . . 24

    3 Ïîääåðæêà àãåíòíîãî ïîäõîäà ñðåäñòâàìè SObjectizer 253.1 Ïîääåðæêà îñíîâíûõ ïîíÿòèé . . . . . . . . . . . . . . . . . . . . . . . . . . 25

    3.1.1 Àãåíò . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 253.1.2 Ñîîáùåíèå . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 273.1.3 Ñîáûòèå . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 273.1.4 Ñîñòîÿíèå . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 293.1.5 Íàñëåäîâàíèå àãåíòîâ . . . . . . . . . . . . . . . . . . . . . . . . . . . 31

    3.2 Ïîäïèñêà ñîáûòèé . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 333.3 Êîîïåðàöèè àãåíòîâ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33

    Áåç îãðàíè÷åíèé äîñòóïà c© 2004 Intervale 2 èç 296

  • SObjectizer Âåðñèÿ: 1.0.0SObjectizer-4 Book Äàòà: 2004.08.10Îãëàâëåíèå

    3.3.1 Ðîäèòåëüñêèå è äî÷åðíèå êîîïåðàöèè . . . . . . . . . . . . . . . . . 34

    4 Ñîñòàâ SObjectizer 354.1 SObjectizer Run-Time . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 354.2 Ñèñòåìíûé ñëîâàðü . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 354.3 Äèñïåò÷åð . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36

    4.3.1 Îáåñïå÷åíèå ïðèîðèòåòíîñòè ñîáûòèé . . . . . . . . . . . . . . . . . 364.3.2 Îáåñïå÷åíèå öåëîñòíîñòè àãåíòîâ . . . . . . . . . . . . . . . . . . . . 37

    4.4 Èíòåðôåéñ ïðèêëàäíîãî ïðîãðàììèðîâàíèÿ . . . . . . . . . . . . . . . . . . 384.5 Ïðèíöèï ðàáîòû SObjectizer . . . . . . . . . . . . . . . . . . . . . . . . . . . 39

    4.5.1 Îáðàáîòêà îïèñàíèÿ êëàññà àãåíòà . . . . . . . . . . . . . . . . . . . 394.5.2 Ðåãèñòðàöèÿ êîîïåðàöèè . . . . . . . . . . . . . . . . . . . . . . . . . 404.5.3 Äåðåãèñòðàöèÿ êîîïåðàöèè . . . . . . . . . . . . . . . . . . . . . . . . 404.5.4 Îòñûëêà ñîîáùåíèÿ . . . . . . . . . . . . . . . . . . . . . . . . . . . . 414.5.5 Ñìåíà ñîñòîÿíèÿ àãåíòà . . . . . . . . . . . . . . . . . . . . . . . . . 42

    4.6 Normal- è insend-ñîáûòèÿ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 424.6.1 Insend-ñîáûòèÿ è ìíîãîïîòî÷íîñòü . . . . . . . . . . . . . . . . . . . 434.6.2 Insend-ñîáûòèÿ è îòëîæåííûå ñîîáùåíèÿ . . . . . . . . . . . . . . . 434.6.3 Êîíôëèêòû insend- è normal-ñîáûòèé . . . . . . . . . . . . . . . . . 434.6.4 Insend-ñîáûòèÿ è ñèíõðîííîñòü . . . . . . . . . . . . . . . . . . . . . 44

    5 SObjectizer Protocol 455.1 SObjectizer è ðàñïðåäåëåííûå ïðèëîæåíèÿ . . . . . . . . . . . . . . . . . . . 455.2 Ãëîáàëüíûå àãåíòû . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 465.3 Òðàíñïîðòíûå àãåíòû è àãåíò-êîììóíèêàòîð . . . . . . . . . . . . . . . . . 475.4 Èäåíòèôèêàöèÿ êîììóíèêàöèîííûõ êàíàëîâ . . . . . . . . . . . . . . . . . 48

    5.4.1 Broadcast-âçàèìîäåéñòâèå ìîäóëåé . . . . . . . . . . . . . . . . . . . 485.4.2 Peer-to-Peer-âçàèìîäåéñòâèå ìîäóëåé . . . . . . . . . . . . . . . . . . 48

    5.5 SOP è ñîîáùåíèÿ àãåíòîâ . . . . . . . . . . . . . . . . . . . . . . . . . . . . 495.6 Âîçäåéñòâèå íà ïðèëîæåíèå ÷åðåç SOP . . . . . . . . . . . . . . . . . . . . . 50

    II SObjectizer â ïðèìåðàõ: øàã çà øàãîì 51

    6 Ââåäåíèå 52

    7 Ïðèìåð hello_world 547.1 Ðàçáîð ôàéëà main.cpp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 547.2 Ðåçóëüòàò ðàáîòû ïðèìåðà . . . . . . . . . . . . . . . . . . . . . . . . . . . . 657.3 Ðåçþìå . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65

    8 Ïðèìåð hello_all 698.1 ×òî äåëàåò ïðèìåð . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 698.2 Ðàçáîð ôàéëà main.cpp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 708.3 Ðåçóëüòàò ðàáîòû ïðèìåðà . . . . . . . . . . . . . . . . . . . . . . . . . . . . 808.4 Ðåçþìå . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82

    Áåç îãðàíè÷åíèé äîñòóïà c© 2004 Intervale 3 èç 296

  • SObjectizer Âåðñèÿ: 1.0.0SObjectizer-4 Book Äàòà: 2004.08.10Îãëàâëåíèå

    9 Ïðèìåð hello_delay 859.1 Ðàçáîð ôàéëà main.cpp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 859.2 Ðåçóëüòàò ðàáîòû ïðèìåðà . . . . . . . . . . . . . . . . . . . . . . . . . . . . 879.3 Ðåçþìå . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88

    10 Ïðèìåð hello_periodic 8910.1 ×òî äåëàåò ïðèìåð . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8910.2 Ðàçáîð ôàéëà main.cpp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8910.3 Ðåçóëüòàò ðàáîòû ïðèìåðà . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9110.4 Ðåçþìå . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92

    11 Ïðèìåð dyn_reg 9311.1 ×òî äåëàåò ïðèìåð . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9311.2 Ðàçáîð ôàéëà main.cpp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9311.3 Ðåçóëüòàò ðàáîòû ïðèìåðà . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9811.4 Ðåçþìå . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100

    12 Ïðèìåð chstate 10212.1 ×òî äåëàåò ïðèìåð . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10212.2 Ðàçáîð ôàéëà main.cpp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103

    12.2.1 Ñìåíà ñîñòîÿíèÿ àãåíòà è îáðàáîòêà ñîáûòèé â ñîñòîÿíèÿõ . . . . . 10312.2.2 Îáðàáîò÷èêè âõîäà/âûõîäà â/èç ñîñòîÿíèÿ . . . . . . . . . . . . . . 10612.2.3 Ñïåöèàëüíîå ñîîáùåíèå so_msg_state . . . . . . . . . . . . . . . . . 10812.2.4 �Ñëóøàòåëè� ñîñòîÿíèÿ àãåíòà . . . . . . . . . . . . . . . . . . . . . . 109

    12.3 Ðåçóëüòàò ðàáîòû ïðèìåðà . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11112.4 Ðåçþìå . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112

    13 Ïðèìåð inheritance 11613.1 ×òî äåëàåò ïðèìåð . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11613.2 Ðàçáîð ôàéëà main.cpp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11713.3 Ðåçóëüòàòû ðàáîòû ïðèìåðà . . . . . . . . . . . . . . . . . . . . . . . . . . . 12013.4 Ðåçþìå . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121

    14 Ïðèìåð subscr_hook 12314.1 ×òî òàêîå hook ïîäïèñêè . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12314.2 ×òî äåëàåò ïðèìåð . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12414.3 Ðàçáîð ôàéëà main.cpp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124

    14.3.1 Èñïîëüçîâàíèå hook-îâ ïîäïèñêè . . . . . . . . . . . . . . . . . . . . 12414.3.2 Èñïîëüçîâàíèå äèñïåò÷åðà ñ àêòèâíûìè îáúåêòàìè . . . . . . . . . 126

    14.4 Ðåçóëüòàòû ðàáîòû ïðèìåðà . . . . . . . . . . . . . . . . . . . . . . . . . . . 12714.5 Ðåçþìå . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128

    15 Ïðèìåð �lter 13015.1 ×òî äåëàåò ïðèìåð . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13015.2 Ðàçáîð ôàéëîâ c1i.hpp, c1i.cpp, c2i.hpp, c2i.cpp . . . . . . . . . . . . . . . . 13115.3 Ðàçáîð ôàéëîâ c1.cpp, c2.cpp . . . . . . . . . . . . . . . . . . . . . . . . . . . 132

    15.3.1 Ïîäïèñêà àãåíòà a_cln . . . . . . . . . . . . . . . . . . . . . . . . . . 13215.3.2 Ðåãèñòðàöèÿ è äåðåãèñòðàöèÿ ãëàâíîé êîîïåðàöèè . . . . . . . . . . 13315.3.3 Òðàíñïîðòíûé àãåíò . . . . . . . . . . . . . . . . . . . . . . . . . . . 134

    Áåç îãðàíè÷åíèé äîñòóïà c© 2004 Intervale 4 èç 296

  • SObjectizer Âåðñèÿ: 1.0.0SObjectizer-4 Book Äàòà: 2004.08.10Îãëàâëåíèå

    15.3.4 Ôèëüòð . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13515.3.5 Êàíàë ââîäà-âûâîäà . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13715.3.6 Îáðàáîò÷èê ðàçðûâîâ ñâÿçè . . . . . . . . . . . . . . . . . . . . . . . 14315.3.7 Òðàíñïîðòíûé àãåíò êàê àêòèâíûé îáúåêò . . . . . . . . . . . . . . 14515.3.8 Ïîðîãè ââîäà-âûâîäà . . . . . . . . . . . . . . . . . . . . . . . . . . . 14615.3.9 Çàïóñê SObjectizer íà îòäåëüíîé íèòè . . . . . . . . . . . . . . . . . 14815.3.10Èíòåðàêòèâíûé äèàëîã ñ ïîëüçîâàòåëåì . . . . . . . . . . . . . . . . 151

    15.4 Ðàçáîð ôàéëà server.cpp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15215.4.1 Òðàíñïîðòíûé àãåíò äëÿ ñåðâåðíîãî âõîäà . . . . . . . . . . . . . . 15215.4.2 Âçàèìîäåéñòâèå ñåðâåðà ñ êëèåíòàìè . . . . . . . . . . . . . . . . . . 153

    15.5 Ðåçþìå . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 154

    16 Ïðèìåð high_tra�c 15816.1 ×òî äåëàåò ïðèìåð . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15816.2 Ðàçáîð ôàéëà common.cpp . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15916.3 Ðàçáîð ôàéëà client.cpp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16216.4 Ðàçáîð ôàéëà server.cpp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16216.5 Ïàðíîñòü ñîîáùåíèé msg_client_connected, msg_client_disconnected . . . 16316.6 Ðåçóëüòàò ðàáîòû ïðèìåðà . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16416.7 Ðåçþìå . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 164

    17 Ïðèìåð raw_channel 16617.1 ×òî òàêîå raw-êàíàë . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16617.2 Ñòðóêòóðà èäåíòèôèêàòîðà êîììóíèêàöèîííîãî êàíàëà . . . . . . . . . . . 16717.3 ×òî äåëàåò ïðèìåð . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16817.4 Ðàçáîð ôàéëîâ tcp_cln.cpp è tcp_srv.cpp . . . . . . . . . . . . . . . . . . . 16817.5 Ðåçóëüòàò ðàáîòû ïðèìåðà . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17017.6 Ðåçþìå . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 171

    18 Ïðèìåð parent_insend 17318.1 ×òî äåëàåò ïðèìåð . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17318.2 Ðàçáîð ôàéëà main.cpp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17318.3 Ðåçóëüòàò ðàáîòû ïðèìåðà . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17718.4 Ðåçþìå . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 178

    19 Ïðèìåð dyn_coop_controlled 17919.1 Çà÷åì äèíàìè÷åñêîé êîîïåðàöèè ÷òî-ëèáî êîíòðîëèðîâàòü . . . . . . . . . 17919.2 ×òî äåëàåò ïðèìåð . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18019.3 Ðàçáîð ôàéëà main.cpp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18119.4 Ðåçóëüòàò ðàáîòû ïðèìåðà . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18219.5 Ðåçþìå . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 182

    20 Ïðèìåð destroyable_traits 18420.1 ×òî òàêîå ñâîéñòâà àãåíòà . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18420.2 ×òî äåëàåò ïðèìåð . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18620.3 Ðàçáîð ôàéëà main.cpp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18620.4 Ðåçóëüòàò ðàáîòû ïðèìåðà . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18820.5 Ðåçþìå . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 189

    Áåç îãðàíè÷åíèé äîñòóïà c© 2004 Intervale 5 èç 296

  • SObjectizer Âåðñèÿ: 1.0.0SObjectizer-4 Book Äàòà: 2004.08.10Îãëàâëåíèå

    A Èñõîäíûå òåêñòû ïðèìåðîâ 191A.1 Èñõîäíûé êîä ïðèìåðà hello_world . . . . . . . . . . . . . . . . . . . . . . . 191

    A.1.1 Ôàéë main.cpp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 191A.2 Èñõîäíûé êîä ïðèìåðà hello_all . . . . . . . . . . . . . . . . . . . . . . . . . 193

    A.2.1 Ôàéë main.cpp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 193A.3 Èñõîäíûé êîä ïðèìåðà hello_world . . . . . . . . . . . . . . . . . . . . . . . 199

    A.3.1 Ôàéë main.cpp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 199A.4 Èñõîäíûé êîä ïðèìåðà hello_periodic . . . . . . . . . . . . . . . . . . . . . . 202

    A.4.1 Ôàéë main.cpp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 202A.5 Èñõîäíûé êîä ïðèìåðà dyn_reg . . . . . . . . . . . . . . . . . . . . . . . . . 207

    A.5.1 Ôàéë main.cpp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 207A.6 Èñõîäíûé êîä ïðèìåðà chstate . . . . . . . . . . . . . . . . . . . . . . . . . . 214

    A.6.1 Ôàéë main.cpp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 214A.7 Èñõîäíûé êîä ïðèìåðà inheritance . . . . . . . . . . . . . . . . . . . . . . . 221

    A.7.1 Ôàéë main.cpp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 221A.8 Èñõîäíûé êîä ïðèìåðà subscr_hook . . . . . . . . . . . . . . . . . . . . . . 232

    A.8.1 Ôàéë main.cpp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 232A.9 Èñõîäíûé êîä ïðèìåðà �lter . . . . . . . . . . . . . . . . . . . . . . . . . . . 235

    A.9.1 Ôàéë c1i.hpp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 235A.9.2 Ôàéë c1i.cpp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 237A.9.3 Ôàéë c2i.hpp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 238A.9.4 Ôàéë c2i.cpp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 239A.9.5 Ôàéë c1.cpp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 240A.9.6 Ôàéë c2.cpp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 246A.9.7 Ôàéë server.cpp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 252

    A.10 Èñõîäíûé êîä ïðèìåðà high_tra�c . . . . . . . . . . . . . . . . . . . . . . . 256A.10.1 Ôàéë common.ddl . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 256A.10.2 Ôàéë common.cpp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 257A.10.3 Ôàéë client.cpp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 259A.10.4 Ôàéë server.cpp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 265

    A.11 Èñõîäíûé êîä ïðèìåðà raw_channel . . . . . . . . . . . . . . . . . . . . . . 269A.11.1 Ôàéë tcp_cln.cpp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 269A.11.2 Ôàéë tcp_srv.cpp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 275

    A.12 Èñõîäíûé êîä ïðèìåðà parent_insend . . . . . . . . . . . . . . . . . . . . . 281A.12.1 Ôàéë main.cpp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 281

    A.13 Èñõîäíûé êîä ïðèìåðà dyn_coop_controlled . . . . . . . . . . . . . . . . . 289A.13.1 Ôàéë main.cpp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 289

    A.14 Èñõîäíûé êîä ïðèìåðà destroyable_traits . . . . . . . . . . . . . . . . . . . 293A.14.1 Ôàéë main.cpp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 293

    Áåç îãðàíè÷åíèé äîñòóïà c© 2004 Intervale 6 èç 296

  • SObjectizer Âåðñèÿ: 1.0.0SObjectizer-4 Book Äàòà: 2004.08.10

    ×àñòü I

    Ââåäåíèå

    Áåç îãðàíè÷åíèé äîñòóïà c© 2004 Intervale 7 èç 296

  • SObjectizer Âåðñèÿ: 1.0.0SObjectizer-4 Book Äàòà: 2004.08.10Ãëàâà 1. Îáçîð

    Ãëàâà 1

    Îáçîð

    1.1 ×òî òàêîå SObjectizer

    SObjectizer � ýòî:

    • íàáîð ïðèíöèïîâ, ïðàâèë è îãðàíè÷åíèé íà ïðîåêòèðîâàíèå è ðåàëèçàöèþ ïðî-ãðàìì â ðàìêàõ àãåíòíîãî ïîäõîäà, íàçûâàåìûé àãåíòíîé ìîäåëüþ;

    • áèáëèîòåêà C++ êëàññîâ, ïîçâîëÿþùàÿ ðåàëèçîâàòü ïðèëîæåíèå â òåðìèíàõ àãåí-òîâ, èõ ñîñòîÿíèé, ñîîáùåíèé è ñîáûòèé.

    1.2 Èñòîðèÿ SObjectizer

    Èñòîðèÿ SObjectizer ñîñòîèò èç äâóõ ýòàïîâ. Íà÷àëî áûëî ïîëîæåíî â Ãîìåëüñêîì Êîí-ñòðóêòîðñêîì Áþðî Ñèñòåìíîãî Ïðîãðàììèðîâàíèÿ (ÊÁ ÑÏ) â ðàìêàõ ïðîåêòà SCADAObjectizer.

    Çàòåì ïîñëåäîâàë ãîäè÷íûé ïåðåðûâ â ðàçâèòèè Objectizer. Îí áûë âûçâàí òåì, ÷òîêîëëåêòèâ ðàçðàáîò÷èêîâ SCADA Objectizer ðàñïàëñÿ.

    Ïîñëå òîãî, êàê äâà ðàçðàáîò÷èêà SCADA Objectizer À. Ëàáû÷ è Å. Îõîòíèêîâîêàçàëèñü â êîìïàíèè Èíòåðâýéë, íà÷àëñÿ SObjectizer-4 � íîâûé ïðîåêò, îñíîâàííûéíà ïåðåðàáîòàííûõ èäåÿõ SCADA Objectizer.

    1.2.1 Ýòàï ÊÁ ÑÏ

    Ïðîåêò, ïîëó÷èâøèé íàçâàíèå SCADA Objectizer, îñóùåñòâëÿëñÿ â ëàáîðàòîðèè ÀÑÓÒÏ êàê ïðîåêò ïî ñîçäàíèþ èíñòðóìåíòàëüíîãî ñðåäñòâà ñîçäàíèÿ ÀÑÓ ÒÏ. Ïîäîá-íûå èíñòðóìåíòàëüíûå ñðåäñòâà îòíîñÿòñÿ ê êëàññó SCADA-ñèñòåì. Îò òðàäèöèîííûõSCADA-ñèñòåì Objectizer îòëè÷àëñÿ òåì, ÷òî â íåãî çàêëàäûâàëàñü îáúåêòíàÿ îðèåí-òèðîâàííîñòü. Íî íå â ÷èñòîì âèäå (èíêàïñóëÿöèÿ, íàñëåäîâàíèå è ïîëèìîðôèçì), àñ ó÷åòîì îñîáåííîñòåé ïðåäìåòíîé îáëàñòè � ñîáûòèéíî-îðèåíòèðîâàííûõ ÀÑÓ ÒÏðåàëüíîãî âðåìåíè.

    Â ðåçóëüòàòå ïîïûòîê îáúåäèíåíèÿ ïðèíöèïîâ îáúåêòíîãî ïîäõîäà è ñîáûòèéíîéïðèðîäû ðåøàåìûõ çàäà÷ âîçíèêëà àãåíòíàÿ ìîäåëü: àãåíòû îáìåíèâàþòñÿ ñîîáùåíè-ÿìè, ñîîáùåíèÿ ïîðîæäàþò ñîáûòèÿ, ñîáûòèÿ îáðàáàòûâàþòñÿ â ñîîòâåòñòâèè ñ ïðèî-ðèòåòîì.

    Áåç îãðàíè÷åíèé äîñòóïà c© 2004 Intervale 8 èç 296

  • SObjectizer Âåðñèÿ: 1.0.0SObjectizer-4 Book Äàòà: 2004.08.10Ãëàâà 1. Îáçîð

    Ðàáîòû íàä ñîáñòâåííî SCADA Objectizer îñóùåñòâëÿëèñü ñ 1996 ïî 2000 ãîä. Â1998 ãîäó áûëà çàâåðøåíà è â 1999 ãîäó îïðîáîâàíà íà ðåàëüíîì ïðîåêòå ïåðâàÿ âåð-ñèÿ SCADA Objectizer.  íà÷àëå 2000 ãîäà áûëà âûïóùåíà âòîðàÿ âåðñèÿ, êîòîðàÿ ÿâ-ëÿëàñü ëèøü óëó÷øåííûì âàðèàíòîì ïåðâîé âåðñèè. Ïåðâûå âåðñèè ñîñòîÿëè èç äâóõ÷àñòåé (âèçóàëüíîãî êîíñòðóêòîðà è ñèñòåìû ðåàëüíîãî âðåìåíè) è ðàáîòàëè ïîä OS/2.Ëåòîì 2000 ãîäà áûëà âûïóùåíà íîâàÿ ýêñïåðèìåíòàëüíàÿ òðåòüÿ âåðñèÿ, â êîòîðîéâìåñòî êîíñòðóêòîðà èñïîëüçîâàëñÿ ñîáûòèéíî-îðèåíòèðîâàííûé ÿçûê îïèñàíèé è êî-òîðàÿ áûëà ïåðåíåñåíà ïîä Windows, OS/2 è Linux.

    Ðàçðàáîòêà SCADA Objectizer â ÊÁ ÑÏ îñóùåñòâëÿëàñü ïîä ðóêîâîäñòâîì A. Êî-ñàðåâà.  ñîçäàíèè SCADA Objectizer â ðàçíîå âðåìÿ ïðèíèìàëè ó÷àñòèå Â. Ãàéäóêîâ,À. Ëàáû÷, Å. Îõîòíèêîâ, Ñ. Ñàåâè÷.

    1.2.2 Ýòàï Èíòåðâýéë

    Ïðè âûïîëíåíèè ðÿäà ïðîåêòîâ â êîìïàíèè Èíòåðâýéë â 2001-2002 ãã. îêàçàëîñü, ÷òîïðèìåíåíèå â íèõ àãåíòíîãî ïîäõîäà ìîæåò äàòü îòëè÷íûå ðåçóëüòàòû. Ïîíàäîáèëñÿèíñòðóìåíò, ïîääåðæèâàþùèé àãåíòíûé ïîäõîä. È â 2002 ãîäó ïðîèçîøëà ðåèíêàðíà-öèÿ SCADA Objectizer â âèäå SObjectizer-4.

    Íåñìîòðÿ íà òî, ÷òî SObjectizer áàçèðóåòñÿ íà òåõ æå ïðèíöèïàõ, ÷òî è SCADAObjectizer, SObjectizer ÿâëÿåòñÿ ñîâåðøåííî ñàìîñòîÿòåëüíûì, íàïèñàííûì ñ íóëÿ, ïðî-äóêòîì, êîòîðûé èìååò ìíîãî ñóùåñòâåííûõ îòëè÷èé îò SCADA Objectizer. Íàïðèìåð,â SObjectizer, â îòëè÷èå îò SCADA Objectizer, ñóùåñòâóåò íàñëåäîâàíèå äëÿ àãåíòîâ.

    1.3 Ïðè÷èíû ïðîäîëæåíèÿ ðàçâèòèÿ SObjectizer

    Âåðîÿòíî, ñóùåñòâóåò ìíîæåñòâî êàê îáúåêòèâíûõ, òàê è ñóáúåêòèâíûõ ïðè÷èí òîãî,÷òî SCADA Objectizer ïîëó÷èë ñâîå ëîãè÷åñêîå ïðîäîëæåíèå â âèäå SObjectizer. Îäíà-êî, íåîáõîäèìî çàîñòðèòü âíèìàíèå íà îäíîé, ïîæàëóé, ñàìîé âàæíîé:

     îáúåêòíî-îðèåíòèðîâàííîì ïîäõîäå ñóùåñòâóåò ðàçðûâ ìåæäó ïðîåêòèðîâàíèåìè ïðîãðàììèðîâàíèåì. Ïðîåêòèðîâàíèå îñóùåñòâëÿåòñÿ â ðàìêàõ îáúåêòîâ, ñîñòîÿíèé,ñîîáùåíèé. Ïðîãðàììèðîâàíèå æå íà óíèâåðñàëüíûõ îáúåêòíî-îðèåíòèðîâàííûõ ÿçû-êàõ ïðîãðàììèðîâàíèÿ îñóùåñòâëÿåòñÿ òîëüêî â òåðìèíàõ îáúåêòîâ è âûçîâîâ ìåòîäîâîáúåêòîâ.  ðåçóëüòàòå îêàçûâàåòñÿ, ÷òî ïðîåêòíàÿ ìîäåëü çàäà÷è îòëè÷àåòñÿ îò ïðî-ãðàììíîé ìîäåëè.

     ñëó÷àå æå ñ SObjectizer ýòîò ðàçðûâ ãîðàçäî ìåíüøå � âåäü è ïðîåêòèðîâàíèå, èïðîãðàììèðîâàíèå îñóùåñòâëÿåòñÿ â òåðìèíàõ àãåíòîâ, ñîñòîÿíèé, ñîîáùåíèé è ñîáû-òèé.

    1.4 ×òî ïðåäîñòàâëÿåò SObjectizer

    1.4.1 Àãåíòíî-îðèåíòèðîâàííàÿ ìîäåëü

    SObjectizer îïðåäåëÿåò àãåíòíî-îðèåíòèðîâàííóþ ìîäåëü, â ðàìêàõ êîòîðîé îñóùåñòâ-ëÿåòñÿ ïðîåêòèðîâàíèå ðåàëèçàöèè êîíêðåòíûõ çàäà÷. Â ðàìêàõ ýòîé ìîäåëè ëþáîåïðèëîæåíèå ðàññìàòðèâàåòñÿ êàê ñîâîêóïíîñòü èìåíîâàííûõ îáúåêòîâ � àãåíòîâ. Êàæ-äûé àãåíò èìååò çàðàíåå îïðåäåëåííûå ñîñòîÿíèÿ. Âçàèìîäåéñòâèå ìåæäó àãåíòàìè îñó-ùåñòâëÿåòñÿ ïîñðåäñòâîì îáìåíà ñîîáùåíèÿìè. Àãåíò âûáèðàåò ñîîáùåíèÿ, êîòîðûå îíæåëàåò îáðàáàòûâàòü � ïîäïèñûâàåòñÿ íà ñîîáùåíèÿ. Âîçíèêíîâåíèå è ïîñëåäóþùàÿ

    Áåç îãðàíè÷åíèé äîñòóïà c© 2004 Intervale 9 èç 296

  • SObjectizer Âåðñèÿ: 1.0.0SObjectizer-4 Book Äàòà: 2004.08.10Ãëàâà 1. Îáçîð

    îáðàáîòêà ñîîáùåíèÿ, íà êîòîðîå ïîäïèñàí àãåíò, íàçûâàåòñÿ ñîáûòèåì. Ñîîáùåíèåìîæåò ïîðîäèòü íåñêîëüêî ñîáûòèé, êîòîðûå áóäóò îáðàáàòûâàòüñÿ â ñîîòâåòñòâèè ñíàçíà÷åííûìè èì ïðèîðèòåòàìè � ò.í. ïðèîðèòåòíàÿ äèñïåò÷åðèçàöèÿ ñîáûòèé. Àãåí-òû, èìåþùèå îäèíàêîâîå ìíîæåñòâî ñîñòîÿíèé, ñîáûòèé è ñîîáùåíèé, îáðàçóþò êëàññàãåíòîâ.

    1.4.2 Áèáëèîòåêà êëàññîâ äëÿ C++

    SObjectizer ïðåäñòàâëÿåò èç ñåáÿ áèáëèîòåêó êëàññîâ äëÿ C++. Äàííàÿ áèáëèîòåêàñîäåðæèò ñðåäñòâà äëÿ ðåàëèçàöèè îáìåíà ñîîáùåíèÿìè è äèñïåò÷åðèçàöèè ñîáûòèé,à òàêæå áàçîâûé êëàññ äëÿ ðåàëèçàöèè àãåíòîâ.

    SObjectizer ïðåäîñòàâëÿåò âîçìîæíîñòü ðåàëèçîâûâàòü ñîáñòâåííûå ñðåäñòâà äèñ-ïåò÷åðèçàöèè ñîáûòèé è íåñêîëüêî óæå ðåàëèçîâàííûõ äèñïåò÷åðîâ.

    1.4.3 Ðàñïðåäåëåííûå ïðèëîæåíèÿ. SObjectizer Protocol

    SObjectizer ïðåäîñòàâëÿåò âîçìîæíîñòü ðåàëèçàöèè ðàñïðåäåëåííûõ ïðèëîæåíèé. Âýòîì ñëó÷àå ïðèëîæåíèå ìîæåò ñîñòîÿòü èç íåñêîëüêèõ àâòîíîìíûõ ìîäóëåé, äëÿ âçàè-ìîäåéñòâèÿ êîòîðûõ èñïîëüçóåòñÿ ñïåöèàëüíûé ïðîòîêîë � SObjectizer Protcol (SOP).Áëàãîäàðÿ SOP ïðèêëàäíîå ïðèëîæåíèå ìîæåò âîîáùå íå èìåòü ïðåäñòàâëåíèÿ î òîì,÷òî îíî ðàñïðåäåëåííîå, ò.ê. îáìåí ñîîáùåíèÿìè ìåæäó ìîäóëÿìè îñóùåñòâëÿåòñÿ ñî-âåðøåííî ïðîçðà÷íî è íå òðåáóåò óñèëèé ñî ñòîðîíû ðàçðàáîò÷èêà.

    1.5 ×åì SObjectizer íå ÿâëÿåòñÿ

     ïðîöåññå èçó÷åíèÿ SObjectizer ìîæåò ñêëàäûâàòüñÿ âïå÷àòëåíèå, ÷òî SObjectizerî÷åíü ïîõîæ íà òîò èëè èíîé ïðîãðàììíûé ïðîäóêò èëè òåõíîëîãèþ. Ýòî äåéñòâèòåëü-íî âîçìîæíî, ò.ê. îáìåí ñîîáùåíèÿìè, ïðèîðèòåòíûå ñîáûòèÿ, èìåíîâàííûå îáúåêòûè ò.ä. øèðîêî èñïîëüçóþòñÿ â ïðîãðàììíîì îáåñïå÷åíèè. Òåì íå ìåíåå, SObjectizer íåÿâëÿåòñÿ àíàëîãîì òåõ ïðîäóêòîâ, íà êîòîðûå îí îêàçàëñÿ ïîõîæèì.

    1.5.1 SObjectizer íå ïîâòîðÿåò ðàáîòó MS Windows

    ×àùå âñåãî ïðè çíàêîìñòâå ñ SObjectizer åãî ñðàâíèâàþò ñ MSWindows. Ýòî ïðîèñõîäèòèç-çà òîãî, ÷òî âçàèìîäåéñòâèå ñóùíîñòåé (àãåíòîâ â SObjectizer è îêîí â MS Windows)ïðîèñõîäèò ïîñðåäñòâîì îáìåíà ñîîáùåíèÿìè.

     äåéñòâèòåëüíîñòè æå íà ýòîì ñõîäñòâî è çàêàí÷èâàåòñÿ. Ìåõàíèçì îáìåíà ñîîá-ùåíèÿìè â SObjectizer ñóùåñòâåííî îòëè÷àåòñÿ îò ìåõàíèçìà îáìåíà ñîîáùåíèÿìè âMS Windows. Âîò òîëüêî íåñêîëüêî ïðèíöèïèàëüíûõ îòëè÷èé:

    • â MSWindows âûáîðîì ñîîáùåíèÿ äëÿ îáðàáîòêè çàíèìàåòñÿ ôóíêöèÿ îêíà (äàæååñëè ýòîò ïðîöåññ ñêðûò â ãëóáèíå îêîííîé áèáëèîòåêè êëàññîâ). Îêíà ïîëó÷àþòâñå øèðîêîâåùàòåëüíûå ñîîáùåíèÿ. È îáðàáîò÷èê îêíà âûáèðàåò òî ñîîáùåíèå,â êîòîðîì îí çàèíòåðåñîâàí.  SObjectizer, âñëåäñòâèå ïîäïèñêè àãåíòîâ íà ñîîá-ùåíèÿ, ïðè âîçíèêíîâåíèè ñîîáùåíèÿ óæå èçâåñòíî, êòî åãî îáðàáîòàåò;

    • ñîîáùåíèå â MS Windows � ýòî èäåíòèôèêàòîð, êîòîðîìó ñîïîñòàâëåíî äâà ñêà-ëÿðíûõ çíà÷åíèÿ: wParam è lParam. Çàäà÷à ïîìåùåíèÿ â ýòîò íàáîð ïàðàìåòðîâ

    Áåç îãðàíè÷åíèé äîñòóïà c© 2004 Intervale 10 èç 296

  • SObjectizer Âåðñèÿ: 1.0.0SObjectizer-4 Book Äàòà: 2004.08.10Ãëàâà 1. Îáçîð

    ïðîèçâîëüíûõ ñòðóêòóð äàííûõ ëîæèòñÿ íà ïðîãðàììèñòà. Â SObjectizer ñîîáùå-íèåì ìîæåò áûòü îáúåêò ëþáîãî ñëîæíîãî òèïà (êëàññà èëè ñòðóêòóðû);

    • â MS Windows íåò âîçìîæíîñòè óïðàâëÿòü ïðèîðèòåòàìè ïîñòóïàþùèõ ñîîáùå-íèé.  SObjectizer ïðèîðèòåòíîñòü îáðàáîòêè ñîáûòèé ÿâëÿåòñÿ îäíèì èç êëþ÷å-âûõ ôàêòîðîâ.

    1.5.2 SObjectizer íå ÿâëÿåòñÿ ðåàëèçàöèåé UML

    Ïðè áîëåå ãëóáîêîì çíàêîìñòâå ñ SObjectizer îáíàðóæèâàþòñÿ àíàëîãèè ìåæäó àãåíò-íîé ìîäåëüþ SObjectizer è UML, íàïðèìåð, â ïîíÿòèÿõ ñîñòîÿíèé, ïåðåõîäàõ èç ñîñòî-ÿíèÿ â ñîñòîÿíèå ïðè âîçíèêíîâåíèè ñîáûòèé, âûïîëíåíèè äåéñòâèé ïðè âõîäå/âûõîäåâ/èç ñîñòîÿíèÿ. Ìîæåò ïîêàçàòüñÿ äàæå, ÷òî SObjectizer ïðåäîñòàâëÿåò ñïîñîá ðåàëè-çàöèè ïðîåêòîâ â òåðìèíàõ UML.

    Ýòî íå òàê. Äåéñòâèòåëüíî, îêàçàëîñü, ÷òî ìåæäó SObjectizer è UML åñòü ìíîãîîáùåãî, õîòÿ ðàçðàáîòêà ñíà÷àëà SCADA Objectizer, à çàòåì è SObjectizer, îñóùåñòâ-ëÿëàñü ïðàêòè÷åñêè áåçîòíîñèòåëüíî ê UML. Âîçìîæíî, àíàëîãèÿ ìåæäó SObjectizerè UML âîçíèêëà èç-çà òîãî, ÷òî ðàçðàáîò÷èêè SObjectizer è UML ñìîòðåëè íà îäíè èòå æå âåùè, íî ñ íåñêîëüêî ðàçíûõ òî÷åê çðåíèÿ.

    Ïîýòîìó, ìåæäó SObjectizer è UML åñòü òîíêèå, íî î÷åíü âàæíûå ðàçëè÷èÿ:

    • â SObjectizer ñîñòîÿíèå íå ìîæåò èìåòü âíóòðåííåãî äåéñòâèÿ. Â SObjectizer ñî-ñòîÿíèå îïðåäåëÿåò òîëüêî ñïèñîê äîïóñòèìûõ äëÿ îáðàáîòêè ñîáûòèé;

    • â SObjectizer íåò ðàçëè÷èÿ ìåæäó ïîíÿòèÿìè äåÿòåëüíîñòè (activity) è äåéñòâèÿ(action). Âìåñòî ýòîãî åñòü îäíî ïîíÿòèå � ñîáûòèå (event). Âñå îïåðàöèè âSObjectizer âûïîëíÿþòñÿ â îáðàáîò÷èêàõ ñîáûòèé.

    • â SObjectizer, ïðè íàëè÷èè îáðàáîò÷èêîâ âõîäà/âûõîäà â/èç ñîñòîÿíèÿ, îïåðà-öèÿ ñìåíû ñîñòîÿíèÿ íå ðàññìàòðèâàåòñÿ êàê àòîìàðíîå. Ñìåíà èìåíè òåêóùåãîñîñòîÿíèÿ äëÿ àãåíòà äåéñòâèòåëüíî îñóùåñòâëÿåòñÿ, êàê àòîìàðíàÿ îïåðàöèÿ.Îäíàêî, âî âðåìÿ ðàáîòû îáðàáîò÷èêà âõîäà (âûõîäà) ñîñòîÿíèå àãåíòà ìîæíîèçìåíèòü.

    Êðîìå òîãî, òåêóùàÿ ðåàëèçàöèÿ SObjectizer îòëè÷àåòñÿ îò UML òåì, ÷òî íå ïîä-äåðæèâàþòñÿ âëîæåííûå ñîñòîÿíèÿ àãåíòîâ.

    Åäèíñòâåííîé ÷àñòüþ SObjectizer, âçÿòîé èç UML, ÿâëÿåòñÿ ïîíÿòèå àêòèâíîãî îáú-åêòà, ðåàëèçîâàííîå â âèäå àêòèâíîãî àãåíòà â äèñïåò÷åðå ñ àêòèâíûìè àãåíòàìè.

    1.5.3 SObjectizer íå ÿâëÿåòñÿ ñåðâåðîì ïðèëîæåíèé

    SObjectizer íå ÿâëÿåòñÿ ñåðâåðîì ïðèëîæåíèé. Îí íå ÿâëÿåòñÿ ãîòîâûì ïðîäóêòîì ïðî-ìåæóòî÷íîãî ñëîÿ (middle tier). SObjectizer � ýòî èíñòðóìåíò äëÿ ðàçðàáîòêè ïðèëîæå-íèé, â òîì ÷èñëå è ðàñïðåäåëåííûõ. Íî SObjectizer íå èìååò ãîòîâûõ ñðåäñòâ äëÿ îáåñ-ïå÷åíèÿ ðàçâåðòûâàíèÿ (deployment) ïðèëîæåíèé è íå îáåñïå÷èâàåò, íàïðèìåð, òàêèõñåðâèñîâ ïðîìåæóòî÷íîãî ñëîÿ, êàê áåçîïàñíîñòü (security), ìàðøðóòèçàöèÿ çàïðîñîâè áàëàíñèðîâêà íàãðóçêè (load balancing), äîñòóï ê êîðïîðàòèâíûì äàííûì, äîëãîâðå-ìåííîå õðàíåíèå ñîñòîÿíèé îáúåêòîâ (stateful objects), âîññòàíàâëèâàåìîñòü (fail-over)è ïð.

    Áåç îãðàíè÷åíèé äîñòóïà c© 2004 Intervale 11 èç 296

  • SObjectizer Âåðñèÿ: 1.0.0SObjectizer-4 Book Äàòà: 2004.08.10Ãëàâà 1. Îáçîð

    1.5.4 SObjectizer íå ÿâëÿåòñÿ æåñòêèì êàðêàñîì ïðèëîæåíèÿ

    SObjectizer ìîæíî íàçâàòü êàðêàñîì (framework) ïðèëîæåíèÿ, ò.ê. îí äèêòóåò ñâîè ïðà-âèëà è îãðàíè÷åíèÿ íà ñòðóêòóðó è îðãàíèçàöèþ ïðèëîæåíèÿ. Íî, â îòëè÷èå, íàïðè-ìåð, îò Microsoft Foundation Classes (MFC) èëè Qt1, SObjectizer ÿâëÿåòñÿ ãîðàçäî áîëåå�ìÿãêèì� êàðêàñîì, õîòÿ áû ïîòîìó, ÷òî SObjectizer ìîæíî èñïîëüçîâàòü â ïðèëîæå-íèÿõ, ðåàëèçîâàííûõ ñ ïîìîùüþ äðóãèõ framework. Íàïðèìåð, SObjectizer óñïåøíîèñïîëüçóåòñÿ â ïðèëîæåíèÿõ, êîòîðûå ïîñòðîåíû êàê íà MFC, òàê è íà Qt, à òàêæå âCGI-ìîäóëÿõ.

    SObjectizer íå ÿâëÿåòñÿ æåñòêèì êàðêàñîì ïîòîìó, ÷òî îí íå òðåáóåò, ÷òîáû âñåïðèëîæåíèå áûëî �íàïèñàíî íà àãåíòàõ�. Íàïðîòèâ, SObjectizer ïîçâîëÿåò ðåàëèçîâàòüëèøü ÷àñòü îáúåêòîâ ïðèëîæåíèÿ â âèäå àãåíòîâ. Òàê, ñ ïîìîùüþ SObjectizer ñîçäà-âàëèñü CGI-ìîäóëè, â êîòîðûõ SObjectizer çàïóñêàëñÿ òîëüêî äëÿ âûïîëíåíèÿ îäíîãîäåéñòâèÿ � çàïðîñà äàííûõ îò äðóãîãî ïðèëîæåíèÿ. Ïîñëå âûïîëíåíèÿ ýòîãî çàïðîñàSObjectizer îñòàíàâëèâàëñÿ, à CGI-ìîäóëü ïðîäîëæàë ñâîþ ðàáîòó. Ïðè ýòîì îáúåì êî-äà CGI, êîòîðûé ðàáîòàë ñ SObjectizer, ñîñòàâëÿë âñåãî íåñêîëüêî ïðîöåíòîâ îò îáùåãîîáúåìà êîäà ìîäóëÿ.

    Òàêæå SObjectizer íå íàêëàäûâàåò îðãàíè÷åíèé íà ñïîñîáû èíòåðàêòèâíîãî âçàèìî-äåéñòâèÿ ñ ïîëüçîâàòåëåì. Ñ ïîìîùüþ SObjectizer ìîæíî ñîçäàâàòü �÷åðíûå ÿùèêè�,ðàáîòàþùèå âîîáùå áåç êàêîãî-ëèáî äèàëîãà ñ ïîëüçîâàòåëåì. Íî ìîæíî ñîçäàâàòü èïîëíîöåííûå GUI-ïðèëîæåíèÿ ñ ïðèìåíåíèåì ãîòîâûõ îêîííûõ áèáëèîòåê, òàêèõ êàêMFC, ATL, WTL, Qt, wxWindows è äð. Ïðè ýòîì SObjectizer ïîçâîëÿåò ñîçäàâàòü àãåí-òîâ, êîòîðûå ñàìè ÿâëÿþòñÿ ýëåìåíòàìè ïîëüçîâàòåëüñêîãî èíòåðôåéñà (îêíàìè), õî-òÿ äëÿ ýòîãî ìîæåò ïîòðåáîâàòüñÿ íàëè÷èå ñïåöèàëüíîãî äèñïåò÷åðà2. Íàïðèìåð, óæåñåé÷àñ â ñîñòàâ SObjectizer âõîäÿò äèñïåò÷åðû ãëàâíîé íèòè ïðèëîæåíèÿ äëÿ Windows(ïðåäíàçíà÷åí äëÿ èñïîëüçîâàíèÿ â MFC èëè WinAPI ïðèëîæåíèÿõ) è äëÿ Qt.

    1http://www.trolltech.com2Ãëàâíîé ñëîæíîñòüþ äëÿ òàêèõ àãåíòîâ âî ìíîãèõ îêîííûõ áèáëèîòåêàõ ÿâëÿåòñÿ òî, ÷òî çàïóñê

    îáðàáîò÷èêîâ ñîáûòèé ýòèõ àãåíòîâ äîëæåí îñóùåñòâëÿòüñÿ òîëüêî íà êîíòåêñòå ãëàâíîé íèòè ïðèëî-æåíèÿ, äëÿ ÷åãî òðåáóåòñÿ ñïåöèàëèçèðîâàííûé äèñïåò÷åð.

    Áåç îãðàíè÷åíèé äîñòóïà c© 2004 Intervale 12 èç 296

    http://www.trolltech.com

  • SObjectizer Âåðñèÿ: 1.0.0SObjectizer-4 Book Äàòà: 2004.08.10Ãëàâà 2. Àãåíòíûé ïîäõîä

    Ãëàâà 2

    Àãåíòíûé ïîäõîä

     äàííîé ãëàâå ïðåäïðèíèìàåòñÿ ïîïûòêà äàòü áîëåå-ìåíåå ôîðìàëüíûå îïðåäåëåíèÿêàê äëÿ ñàìîãî àãåíòíî-îðèåíòèðîâàííîãî ïîäõîäà, òàê è äëÿ îñíîâíûõ ïîíÿòèé è òåð-ìèíîâ, êîòîðûå èñïîëüçóþòñÿ â SObjectizer. Íî öåëüþ ãëàâû ÿâëÿåòñÿ íå âûâîä ñòðî-ãèõ, ôîðìàëèçîâàííûõ îïðåäåëåíèé, à îáúÿñíåíèå òîãî, ÷òî æå ïîíèìàëè ïîä àãåíòíî-îðèåíòèðîâàííûì ïîäõîäîì ñàìè ðàçðàáîò÷èêè SObjectizer.

    Ìîæíî ïðîâåñòè àíàëîãèþ ñ îáúåêòíî-îðèåíòèðîâàííûì ïîäõîäîì. Äëÿ ÎÎÏ íåòåäèíîãî (îäíîçíà÷íîãî è îáùåïðèçíàííîãî) îïðåäåëåíèÿ òîãî, ÷òî æå èç ñåáÿ ïðåäñòàâ-ëÿåò ÎÎÏ. Êàê è íåò åäèíîé îáùåïðèçíàííîé îáúåêòíîé ìîäåëè äàííûõ. Êàê è íåòåäèíîãî îáúåêòíî-îðèåíòèðîâàííîãî ÿçûêà ïðîãðàììèðîâàíèÿ. Çäðàâûé ñìûñë ïîäñêà-çûâàåò, ÷òî îáúåêòíî-îðèåíòèðîâàííûé îçíà÷àåò îðèåíòèðîâàííûé íà îáúåêòû, ò.å. ïåð-âè÷íû èìåííî îáúåêòû, âñå îñòàëüíîå âòîðè÷íî.

    Àíàëîãè÷íî, àãåíòíî-îðèåíòèðîâàííûé � îçíà÷àåò, ÷òî âî ãëàâó óãëà ñòàâÿòñÿ àãåí-òû. ×òî æå ïîíèìàåòñÿ ïîä àãåíòàìè â SObjectizer? Îá ýòîì è ïûòàåòñÿ ðàññêàçàòüäàííàÿ ãëàâà.

    Ïî õîäó èçëîæåíèÿ ìàòåðèàëà áóäóò ÷àñòî óïîìèíàòüñÿ òåðìèíû �àãåíòíûé ïîäõîä�è �àãåíòíî-îðèåíòèðîâàííàÿ ìîäåëü�. Ñëîæíî ñêàçàòü, ÷òî îíè ðåàëüíî îçíà÷àþò äëÿêàæäîãî ïîëüçîâàòåëÿ èëè ðàçðàáîò÷èêà SObjectizer. Íî ìîæíî ñ÷èòàòü, ÷òî:

    • àãåíòíî-îðèåíòèðîâàííàÿ ìîäåëü ââîäèò êëàññèôèêàöèþ ñóùíîñòåé, êîòîðûå èñ-ïîëüçóþòñÿ ïðè ïðîåêòèðîâàíèè è ðåàëèçàöèè ïðîãðàììíîãî îáåñïå÷åíèÿ;

    • àãåíòíûé ïîäõîä � ýòî ïðîöåññ èñïîëüçîâàíèÿ àãåíòíî-îðèåíòèðîâàííîé ìîäåëèïðè ïðîåêòèðîâàíèè è ðåàëèçàöèè ïðîãðàììíîãî îáåñïå÷åíèÿ.

    2.1 Îñíîâíûå ïîíÿòèÿ

    Èçëîæåíèå àãåíòíîé ìîäåëè SObjectizer ÿâëÿåòñÿ íàèáîëåå ñëîæíîé ÷àñòüþ îïèñàíèÿSObjectizer. Äåëî â òîì, ÷òî ðå÷ü èäåò î ïîíÿòèÿõ, èíòóèòèâíî ïîíÿòíûõ äëÿ ðàçðàáîò-÷èêîâ è îïûòíûõ ïîëüçîâàòåëåé SObjectizer. Äëÿ íà÷èíàþùåãî ïîëüçîâàòåëÿ ñëîæíîäàòü òî÷íûå îïðåäåëåíèÿ îñíîâíûõ ïîíÿòèé. Ìíîãèå ïîíÿòèÿ ïåðåêëèêàþòñÿ ñ àíà-ëîãè÷íûìè ïîíÿòèÿìè â îáúåêòíî-îðèåíòèðîâàííîì ïîäõîäå. Ïîýòîìó äëÿ ïîíèìàíèÿàãåíòíîé ìîäåëè íåîáõîäèìî çíàíèå ÎÎÏ.

    Åùå îäíîé ñëîæíîñòüþ ïðè îïðåäåëåíèè îñíîâíûõ òåðìèíîâ ÿâëÿåòñÿ òî, ÷òî òàêèåïîíÿòèÿ êàê ñîñòîÿíèå, ñîîáùåíèå, ñîáûòèå è àãåíò ÿâëÿþòñÿ âçàèìîñâÿçàííûìè, íåñóùåñòâóþùèìè äðóã áåç äðóãà. ×òî íå ïîçâîëÿåò äàòü îïðåäåëåíèå îäíîìó òåðìèíó

    Áåç îãðàíè÷åíèé äîñòóïà c© 2004 Intervale 13 èç 296

  • SObjectizer Âåðñèÿ: 1.0.0SObjectizer-4 Book Äàòà: 2004.08.10Ãëàâà 2. Àãåíòíûé ïîäõîä

    áåç èñïîëüçîâàíèÿ â íåì îñòàëüíûõ òåðìèíîâ. Ïîýòîìó, ïåðåä ïîäðîáíûì îáúÿñíåíèåìêàæäîãî èç ïîíÿòèé, íóæíî äàòü êðàòêîå îïèñàíèå àãåíòíî-îðèåíòèðîâàííîé ìîäåëèSObjectizer:

    Àãåíòíî-îðèåíòèðîâàííàÿ ìîäåëü SObjectizer âêëþ÷àåò â ñåáÿ ïîíÿòèÿ àãåíòà, ñî-ñòîÿíèÿ, ñîîáùåíèÿ è ñîáûòèÿ. Àãåíò � ýòî èìåíîâàííûé îáúåêò, èìåþùèé çàðàíååîïðåäåëåííîå ìíîæåñòâî ñîñòîÿíèé. Âçàèìîäåéñòâèå ìåæäó àãåíòàìè îñóùåñòâëÿåòñÿïóòåì îáìåíà ñîîáùåíèÿìè. Àãåíòû ðåàãèðóþò íà ñîîáùåíèÿ ïîñðåäñòâîì ñîáûòèé �âîçíèêíîâåíèå ñîîáùåíèÿ åñòü ñîáûòèå. Ñîáûòèÿ îáðàáàòûâàþòñÿ ñ ïîìîùüþ îáðàáîò-÷èêîâ ñîáûòèé. Ñîñòîÿíèå îïðåäåëÿåò ìîæåñòâî ñîáûòèé, íà êîòîðûå ðåàãèðóåò àãåíò,íàõîäÿñü â äàííîì ñîñòîÿíèè.

    Äàëåå îñíîâíûå ïîíÿòèÿ ðàññìàòðèâàþòñÿ áîëåå ïîäðîáíî, íà÷èíàÿ îò ñàìîãî îñíî-âîïîëàãàþùåãî ïîíÿòèÿ ñîñòîÿíèå è çàêàí÷èâàÿ íàèáîëåå åìêèì ïîíÿòèåì àãåíò.

    2.1.1 Ñîñòîÿíèå

    Ëþáîé îáúåêò ðåàëüíîãî ìèðà â ëþáîé ìîìåíò âðåìåíè íàõîäèòñÿ â êàêîì-òî ñîñòîÿ-íèè. Âñå ìíîæåñòâî ñîñòîÿíèé, â êîòîðûõ ìîæåò íàõîäèòüñÿ îáúåêò, îáðàçóåò ìíîæå-ñòâî ñîñòîÿíèé îáúåêòà. Êîãäà îáúåêòû ðåàëüíîãî ìèðà ìîäåëèðóþòñÿ â ïðîãðàììå,ïðîãðàììíûå îáúåêòû òàêæå èìåþò ìíîæåñòâî ñîñòîÿíèé, ïîñêîëüêó ïðîãðàììíûéîáúåêò ÿâëÿåòñÿ îòðàæåíèåì ðåàëüíîãî îáúåêòà. Òîëüêî â ïðîãðàììå êîëè÷åñòâî ñî-ñòîÿíèé îãðàíè÷èâàåòñÿ óñëîâèÿìè çàäà÷è.

    Ñ òî÷êè çðåíèÿ ðàçðàáîòêè ïðîãðàìì âàæíîñòü ñîñòîÿíèÿ â òîì, ÷òî ñîñòîÿíèåîïðåäåëÿåò íàáîð äîïóñòèìûõ äåéñòâèé, à ñìåíà ñîñòîÿíèÿ ïðèâîäèò ê èçìåíåíèþ íà-áîðà äîïóñòèìûõ äåéñòâèé. Íàïðèìåð, âêëþ÷åííóþ ýëåêòðè÷åñêóþ ëàìïî÷êó ìîæíîâûêëþ÷èòü, íî íåëüçÿ âêëþ÷èòü. È íàîáîðîò, âûêëþ÷åííóþ ëàìïî÷êó ìîæíî âêëþ-÷èòü, íî íåëüçÿ âûêëþ÷èòü.

     îáùåì ñëó÷àå ïîä äîïóñòèìûìè äåéñòâèÿìè ïîíèìàþòñÿ êàê äåéñòâèÿ, êîòîðûåìîæíî âûïîëíèòü íàä îáúåêòîì, òàê è äåéñòâèÿ, êîòîðûå ìîæåò âûïîëíèòü ñàì îáú-åêò.

     SObjectizer ëþáûå äåéñòâèÿ íàä àãåíòîì ìîæåò âûïîëíÿòü òîëüêî ñàì àãåíò.Íåò âîçìîæíîñòè ÷òî-ëèáî ñäåëàòü íàä àãåíòîì áåç åãî âåäîìà.  ÷àñòíîñòè, òîëüêîàãåíò ìîæåò èçìåíèòü ñâîå ñîñòîÿíèå. Ïîýòîìó äëÿ òîãî, ÷òîáû ÷òî-òî âûïîëíèòü íàäàãåíòîì, íåîáõîäèìî îïðåäåëèòü â ñàìîì àãåíòå ñîáûòèå, îáðàáîò÷èê êîòîðîãî áóäåòîñóùåñòâëÿòü íåîáõîäèìûå äåéñòâèÿ. Ò.å. â SObjectizer äîïóñòèìûå äåéñòâèÿ îïðåäå-ëÿþòñÿ îïèñàííûìè äëÿ àãåíòà ñîáûòèÿìè. Ïîýòîìó ìîæíî ñêàçàòü, ÷òî ñîñòîÿíèå �ýòî ïîèìåíîâàííîå ìíîæåñòâî ðàçðåøåííûõ ê îáðàáîòêå ñîáûòèé.

     SObjectizer, â îòëè÷èå îò UML, ñìåíîé ñîñòîÿíèé óïðàâëÿåò ñàì àãåíò. Àãåíòìîæåò íåîäíîêðàòíî èçìåíèòü ñâîå ñîñòîÿíèå â îáðàáîò÷èêå ëþáîãî ñâîåãî ñîáûòèÿ.Ïðè ýòîì íà óðîâíå àãåíòíîé ìîäåëè íå ñâÿçûâàåòñÿ ñîñòîÿíèå, ñîáûòèå è ïåðåõîä âíîâîå ñîñòîÿíèå, êàê ýòî äåëàåòñÿ íà äèàãðàììàõ ñîñòîÿíèé UML. Ò.î. ñìåíà ñîñòîÿíèÿàãåíòà âûíîñèòñÿ ñ óðîâíÿ àãåíòíîé ìîäåëè íà óðîâåíü ðåàëèçàöèè àãåíòîâ.

    Àíàëîãè÷íî UML êàæäîìó ñîñòîÿíèþ ìîæíî ñîïîñòàâèòü îáðàáîò÷èêè âõîäà è âû-õîäà â ñîñòîÿíèå. Íî ðàáîòà äàííûõ îáðàáîò÷èêîâ íå ðàññìàòðèâàåòñÿ êàê ìãíîâåííîå,àòîìàðíîå äåéñòâèå � àòîìàðíûì ÿâëÿåòñÿ òîëüêî ñìåíà èìåíè ñîñòîÿíèÿ àãåíòà. Â÷àñòíîñòè, îáðàáîò÷èê âõîäà â ñîñòîÿíèå ìîæåò èíèöèèðîâàòü ïåðåõîä â äðóãîå ñîñòî-ÿíèå. Íà óðîâíå àãåíòíîé ìîäåëè ýòî íå çàïðåùåíî, õîòÿ íà óðîâíå ðåàëèçàöèè ýòîìîæåò ïðèâåñòè ê íåîæèäàííûì ïîáî÷íûì ýôôåêòàì.

    Áåç îãðàíè÷åíèé äîñòóïà c© 2004 Intervale 14 èç 296

  • SObjectizer Âåðñèÿ: 1.0.0SObjectizer-4 Book Äàòà: 2004.08.10Ãëàâà 2. Àãåíòíûé ïîäõîä

    2.1.2 Ñîîáùåíèå

    Ñîîáùåíèå � ýòî ïåðåäà÷à èíôîðìàöèè îò àãåíòà èëè àãåíòó. Ïîñêîëüêó ðå÷ü èäåòîá èíôîðìàöèè, òî íåîáõîäèìî ðàçëè÷àòü òèï ïåðåäàâàåìûõ äàííûõ è ñàìè äàííûå.Ïîýòîìó, ïîä ïîíÿòèåì ñîîáùåíèå â SObjectizer ïîíèìàþòñÿ êàê òèï ïåðåäàâàåìûõäàííûõ (ò.å. êëàññ ñîîáùåíèÿ), òàê è ñàìè äàííûå (ò.å. ýêçåìïëÿð ñîîáùåíèÿ).

    Âëàäåíèå ñîîáùåíèåì

    Êàæäîå ñîîáùåíèå â SObjectizer ïðèíàäëåæèò êîíêðåòíîìó àãåíòó. Ýòîò àãåíò íàçûâà-åòñÿ âëàäåëüöåì ñîîáùåíèÿ. Êàæäîå ñîîáùåíèå èìååò èìÿ, ñîñòîÿùåå èç èìåíè àãåíòà-âëàäåëüöà è èìåíè ñîîáùåíèÿ â àãåíòå.

    Ïîíÿòèå âëàäåíèÿ ñîîáùåíèåì íå ñâÿçàíî íàïðÿìóþ ñ òåì, ïîëó÷àåò ëè àãåíò-âëàäåëåö äàííîå ñîîáùåíèå èëè îòïðàâëÿåò åãî. Âëàäåíèå îçíà÷àåò òîëüêî òî, ÷òî ñîîá-ùåíèå ñóùåñòâóåò â ñèñòåìå òîëüêî òîãäà, êîãäà â ñèñòåìå ñóùåñòâóåò àãåíò-âëàäåëåö.

    Íàïðèìåð, àãåíò-ëàìïî÷êà ìîæåò èìåòü äâà ñîîáùåíèÿ âêëþ÷èòü è âûêëþ÷èòü. Ýòèñîîáùåíèÿ îòíîñÿòñÿ òîëüêî ê àãåíòó-ëàìïî÷êà, è èìåííî àãåíò-ëàìïî÷êà ÿâëÿåòñÿ ïî-ëó÷àòåëåì äàííûõ ñîîáùåíèé. Åñëè â ñèñòåìå òàêèõ àãåíòîâ íåñêîëüêî ( ëàìïî÷êà_1,ëàìïî÷êà_2, . . . , ëàìïî÷êà_N), òî êàê-òî íóæíî ðàçëè÷àòü ñîîáùåíèÿ, îòíîñÿùèåñÿ êêàæäîìó èç àãåíòîâ. Äîñòèãàåòñÿ ýòî òåì, ÷òî êàæäûé àãåíò âëàäååò ñâîèì ñîîáùåíè-åì è â ñèñòåìå îêàçûâàþòñÿ ñîîáùåíèÿ ëàìïî÷êà_1.âêëþ÷èòü, ëàìïî÷êà_1.âûêëþ÷èòü,. . . , ëàìïî÷êà_N.âêëþ÷èòü, ëàìïî÷êà_N.âûêëþ÷èòü. Ò.å. àãåíò-ëàìïî÷êà âëàäååò ñîîáùå-íèÿìè, êîòîðûå íå îòñûëàåò, à òîëüêî ïîëó÷àåò.

    Äðóãèì ïðèìåðîì ìîæåò ÿâëÿòüñÿ àãåíò-äàò÷èê-òåìïåðàòóðû. Ýòîò àãåíò ìî-æåò âëàäåòü ñîîáùåíèåì òåìïåðàòóðà_èçìåíèëàñü. Êàæäûé àãåíò-äàò÷èê-òåìïåðàòóðûòîëüêî îòïðàâëÿåò ýòî ñîîáùåíèå, íî íå ïîëó÷àåò åãî.

    Ìîãóò áûòü ñëó÷àè, êîãäà àãåíò âëàäååò ñîîáùåíèÿìè, êîòîðûå îí íå îòñûëàåò èíå ïîëó÷àåò. Ò.å. íåêèé àãåíò ââîäèò â ñèñòåìó ñâîè ñîîáùåíèÿ, êîòîðûå âìåñòî íåãîèñïîëüçóþò äðóãèå àãåíòû. Íàïðèìåð, ìîæåò áûòü àãåíò ïîæàðíàÿ_ñèãíàëèçàöèÿ, êî-òîðûé âëàäååò ñîîáùåíèåì ïîæàðíàÿ_òðåâîãà. Ýòî ñîîáùåíèå îòñûëàþò äàò÷èêè òåì-ïåðàòóðû, à ïîëó÷àþò, íàïðèìåð, àãåíòû àâòîìàòè÷åñêîé ñèñòåìû òóøåíèÿ.

    Ò.å. íà óðîâíå àãåíòíîé ìîäåëè ïîíÿòèå âëàäåíèÿ ñîîáùåíèåì ñâîäèòñÿ ê ñïîñîáóôîðìèðîâàíèÿ èìåíè êîíêðåòíîãî ñîîáùåíèÿ � èìÿ ñîîáùåíèÿ ôîðìèðóåòñÿ èç èìåíèàãåíòà è èìåíè ñîîáùåíèÿ.

    Ýêçåìïëÿð ñîîáùåíèÿ

     îïèñàíèè âëàäåíèÿ ñîîáùåíèÿìè óêàçûâàëîñü, ÷òî â ñèñòåìå ñóùåñòâóþò ñîîáùå-íèÿ, èìÿ êîòîðûõ ñòðîèòñÿ èç èìåíè àãåíòà-âëàäåëüöà è èìåíè ñîîáùåíèÿ â àãåí-òå. Ïðè ýòîì ïîäðàçóìåâàëîñü, ÷òî ïîíÿòèå �ñîîáùåíèå� ñîîòâåòñòâóåò ïîíÿòèþ òè-ïà âîçìîæíîãî îáìåíà èíôîðìàöèåé ìåæäó àãåíòàìè. Ò.å. ñóùåñòâîâàíèå ñîîáùåíèÿëàìïî÷êà_1.âêëþ÷èòü îçíà÷àåò, ÷òî â ñèñòåìå âîçìîæíà îòïðàâêà ýêçåìïëÿðîâ äàííî-ãî ñîîáùåíèÿ. Íî ñàì ýêçåìïëÿð ñîîáùåíèÿ âîçíèêàåò òîëüêî â ìîìåíò âûïîëíåíèÿîïåðàöèè îòïðàâêè ñîîáùåíèÿ è èñ÷åçàåò ïîñëå òîãî, êàê ýêçåìïëÿð ñîîáùåíèÿ áóäåòîáðàáîòàí. Ïî àíàëîãèè ñ ÿçûêàìè ïðîãðàììèðîâàíèÿ ìîæíî ñêàçàòü, ÷òî ñîîáùåíèå �ýòî òèï äàííûõ, à ýêçåìïëÿð ñîîáùåíèÿ � êîíêðåòíûé îáúåêò äàííîãî òèïà.

    Áåç îãðàíè÷åíèé äîñòóïà c© 2004 Intervale 15 èç 296

  • SObjectizer Âåðñèÿ: 1.0.0SObjectizer-4 Book Äàòà: 2004.08.10Ãëàâà 2. Àãåíòíûé ïîäõîä

    Öåëåíàïðàâëåííûå è øèðîêîâåùàòåëüíûå ñîîáùåíèÿ

    Öåëåíàïðàâëåííîå ñîîáùåíèå � ýòî ïåðåäà÷à èíôîðìàöèè êîíêðåòíîìó àãåíòó-àäðåñàòó. Íàïðèìåð, åñëè åñòü àãåíò-ôàéë, òî äëÿ çàïèñè â ôàéë íóæíî îòïðàâèòüýòîìó àãåíòó ñîîáùåíèå ñ ïåðåäàâàåìûìè äàííûìè. Ïðè÷åì ñîîáùåíèå äîëæíî áûòüîòïðàâëåíî êîíêðåòíîìó àãåíòó, ò.ê. ìîæåò ñóùåñòâîâàòü íåñêîëüêî àãåíòîâ-ôàéëîâ, àçàïèñü íóæíî îñóùåñòâëÿòü òîëüêî â îäèí èç íèõ.

    Øèðîêîâåùàòåëüíîå ñîîáùåíèå � ýòî ñîîáùåíèå, äëÿ êîòîðîãî íåò êîíêðåòíîãî àä-ðåñàòà. Íàïðèìåð, ïðè îáíàðóæåíèè îøèáîê ââîäà-âûâîäà àãåíò-ôàéë ìîæåò îòîñëàòüñîîáùåíèå î òîì, ÷òî îí íå ðàáîòîñïîñîáåí. Ñ òî÷êè çðåíèÿ àãåíòà-ôàéëà ýòî ñîîáùå-íèå â íèêóäà, âî âíåøíèé ìèð. Àãåíò-ôàéë íå çíàåò, êòî áóäåò ïîëó÷àòü ýòî ñîîáùåíèå.È áóäåò ëè êòî-òî ïîëó÷àòü åãî âîîáùå.

    Àñèíõðîííîñòü ñîîáùåíèé

    Âñå ñîîáùåíèÿ â SObjectizer ÿâëÿþòñÿ àñèíõðîííûìè.

    2.1.3 Ñîáûòèå

    Ñîáûòèå � ýòî ðåàêöèÿ àãåíòà íà ñîîáùåíèå. Åñëè àãåíò çàèíòåðåñîâàí â ïîëó÷åíèèêàêîãî-ëèáî ñîîáùåíèÿ, îí äîëæåí îáúÿâèòü ó ñåáÿ ñîáûòèå è ïîäïèñàòü åãî íà ñîîá-ùåíèå. Ïîñëå ýòîãî âîçíèêíîâåíèå â ñèñòåìå ýêçåìïëÿðà ñîîáùåíèÿ áóäåò ïðèâîäèòü êãåíåðàöèè âñåõ ñîáûòèé, êîòîðûå áûëè ïîäïèñàíû íà ñîîáùåíèå.

    Èíöèäåíò ñîáûòèÿ

    Ñîîáùåíèå, êîòîðîå ïîðîæäàåò ñîáûòèå, íàçûâàåòñÿ èíöèäåíòîì äàííîãî ñîáûòèÿ. Ñî-áûòèå ìîæåò èìåòü íåñêîëüêî ðàçëè÷íûõ èíöèäåíòîâ.  ýòîì ñëó÷àå ñîáûòèå âîçíèêàåòïðè ïîÿâëåíèè â ñèñòåìå ýêçåìïëÿðà ëþáîãî èç èíöèäåíòîâ (ò.å. èíöèäåíòû îáúåäèíÿ-þòñÿ ïî ìàñêå �ëîãè÷åñêîå ÈËÈ�).

    Ýêçåìïëÿð ñîáûòèÿ

    Ïðè ãåíåðàöèè ñîáûòèÿ âîçíèêàåò ò.í. ýêçåìïëÿð ñîáûòèÿ � ïàðà . Ïî àíàëîãèè ñ ÿçûêàìè ïðîãðàììèðîâàíèÿ ìîæíî ñêàçàòü, ÷òî ñîáûòèå �ýòî ôóíêöèÿ, à ýêçåìïëÿð ñîáûòèÿ � ýòî êîíêðåòíûé âûçîâ ôóíêöèè ñ êîíêðåòíûìèïàðàìåòðàìè.

    Ïðèîðèòåò ñîáûòèÿ

    Êàæäîìó ñîáûòèþ äîëæåí áûòü íàçíà÷åí ïðèîðèòåò. Êîãäà â ñèñòåìå âîçíèêàåò ýê-çåìïëÿð ñîîáùåíèÿ, ìîæåò áûòü ñãåíåðèðîâàíî ìíîæåñòâî ýêçåìïëÿðîâ ñîáûòèé, ó êî-òîðûõ äàííîå ñîîáùåíèå áûëî èíöèäåíòîì. Âîçíèêøèå ñîáûòèÿ áóäóò îáðàáàòûâàòüñÿâ ïîðÿäêå óáûâàíèÿ ïðèîðèòåòà.

    Âîçíèêíîâåíèå ýêçåìïëÿðà ñîîáùåíèÿ, ãåíåðàöèÿ è îáðàáîòêà ýêçåìïëÿðà ñîáû-òèÿ íàçûâàþòñÿ äèñïåò÷åðèçàöèåé. Ïðè ýòîì äèñïåò÷åðèçàöèÿ ñîîáùåíèÿ îçíà÷àåòãåíåðàöèþ è ïîñëåäóþùóþ îáðàáîòêó ñîáûòèé, ó êîòîðûõ äàííîå ñîîáùåíèå áûëî èí-öèäåíòîì. Äèñïåò÷åðèçàöèÿ ñîáûòèÿ îçíà÷àåò âûäåëåíèå ïðîöåññîðíîãî âðåìåíè íàîáðàáîòêó êîíêðåòíîãî ýêçåìïëÿðà ñîáûòèÿ.

    Áåç îãðàíè÷åíèé äîñòóïà c© 2004 Intervale 16 èç 296

  • SObjectizer Âåðñèÿ: 1.0.0SObjectizer-4 Book Äàòà: 2004.08.10Ãëàâà 2. Àãåíòíûé ïîäõîä

    Àãåíòíàÿ ìîäåëü SObjectizer îïðåäåëÿåò òîëüêî, ÷òî ñîáûòèå èìååò ïðèîðèòåò èäèñïåò÷åðèçàöèÿ ñîáûòèÿ âûïîëíÿåòñÿ ñ ó÷åòîì ïðèîðèòåòà. Íî àãåíòíàÿ ìîäåëü íåîïðåäåëÿåò êîíêðåòíûõ ñõåì äèñïåò÷åðèçàöèè ñîáûòèé. Âïîëíå âîçìîæíî, ÷òî äëÿ ðàç-ëè÷íûõ çàäà÷ ìîãóò ïîòðåáîâàòüñÿ ðàçëè÷íûå ñõåìû äèñïåò÷åðèçàöèè. Ïîýòîìó äåòàëèäèñïåò÷åðèçàöèè ñîáûòèé âûíåñåíû íà óðîâåíü ðåàëèçàöèè SObjectizer.

    2.1.4 Àãåíò

    Àãåíò � ýòî èìåíîâàííûé îáúåêò, êîòîðûé:

    • èìååò íàáîð ñîñòîÿíèé;

    • ìîæåò âëàäåòü íàáîðîì ñîîáùåíèé;

    • ìîæåò èìåòü íàáîð ñîáûòèé.

    Àãåíò ÿâëÿåòñÿ îòðàæåíèåì äåéñòâóþùåãî îáúåêòà ðåàëüíîãî ìèðà. Ïîä äåéñòâóþ-ùèì ïîäðàçóìåâàåòñÿ òî, ÷òî ýòîò îáúåêò ðåàãèðóåò íà íåêèå âíåøíèå âîçäåéñòâèÿ èñïîñîáåí âûïîëíÿòü ÷òî-ëèáî.

    Ôàêòè÷åñêè íà ïîíÿòèè àãåíòà âûÿñíÿþòñÿ ðàçëè÷èÿ ìåæäó àãåíòíî- è îáúåêòíî-îðèåíòèðîâàííûìè ïîäõîäàìè.  ÎÎÏ ñóùåñòâóþò òîëüêî ïîíÿòèÿ îáúåêòîâ. È îáú-åêòû, êîòîðûå ðåàëüíî ÷òî-òî âûïîëíÿþò, íå ñèëüíî îòëè÷àþòñÿ îò îáúåêòîâ, êîòîðûåèñïîëüçóþòñÿ äëÿ âûïîëíåíèÿ äåéñòâèé. Íàïðèìåð, ýëåêðè÷åñêàÿ ëàìïî÷êà, ýëåêòðè-÷åñêàÿ ïðîâîäêà è âûêëþ÷àòåëü â ÎÎÏ ÿâëÿþòñÿ ðàâíîïðàâíûìè îáúåêòàìè. Êàæäûéèç íèõ èìååò íàáîð àòðèáóòîâ è ìåòîäîâ (ñâîéñòâ). Ñ òî÷êè çðåíèÿ ïðåäìåòíîé îáëà-ñòè êàæäûé èç ýòèõ îáúåêòîâ ÷òî-òî âûïîëíÿåò: ëàìïî÷êà ñâåòèò, ïðîâîäêà ïðîïóñêàåòýëåêòðîòîê, à âûêëþ÷àòåëü çàìûêàåò/ðàçìûêàåò ýëåêòðè÷åñêóþ öåïü. Íî â ïðîãðàìì-íîì ïðîåêòå, çà÷àñòóþ, äåéñòâèå ýëåêðîïðîâîäêè íå ó÷èòûâàåòñÿ. Ò.å. ñ òî÷êè çðåíèÿïðîãðàììû âàæíî, ÷òî ëàìïî÷êà ìîæåò ñâåòèòü èëè íå ñâåòèòü, à âûêëþ÷àòåëü �âêëþ÷àòü èëè âûêëþ÷àòü. Õîòÿ ñàì îáúåêò �ýëåêòðè÷åñêàÿ ïðîâîäêà� èç ðàññìîòðå-íèÿ íå òåðÿåòñÿ, ò.ê. èìååò âàæíûå ñâîéñòâà, íàïðèìåð, ïðîòÿæåííîñòü, ãåîìåòðèþ,ñîïðîòèâëåíèå è ò.ä. Ïðîñòî ñàìî äåéñòâèå, êîòîðîå âûïîëíÿåò îáúåêò �ýëåêòðè÷åñêàÿïðîâîäêà� íàñòîëüêî òðèâèàëüíî, ÷òî íå ðàññìàòðèâàåòñÿ.

    Èòàê, íà ïðèìåðå ñ ëàìïî÷êîé, ïðîâîäêîé è âûêëþ÷àòåëåì âèäíî, ÷òî, åñëè ðàñ-ñìàòðèâàòü ñèñòåìó ñ òî÷êè çðåíèÿ ñîñòàâà è ñâîéñòâ îáúåêòîâ, òî íóæíî ó÷èòûâàòüâñå îáúåêòû. Åñëè ðàññìàòðèâàòü ñèñòåìó ñ òî÷êè çðåíèÿ âûïîëíÿåìûõ îáúåêòàìè äåé-ñòâèé, òî íóæíî ñîñðåäîòî÷èòüñÿ òîëüêî íà äâóõ èç íèõ.

    Â ýòîì ñìûñëå àãåíòíî-îðèåíòèðîâàííûé ïîäõîä ÿâëÿåòñÿ íàäñòðîéêîé íàä ÎÎÏ.Ò.å. àãåíòíî-îðèåíòèðîâàííûé ïîäõîä ïîÿâëÿåòñÿ òàì, ãäå â ÎÎÏ ïîÿâëÿþòñÿ îáúåêòû,âûïîëíÿþùèå êàêèå-ëèáî äåéñòâèÿ. Òàêèå îáúåêòû îáúÿâëÿþòñÿ àãåíòàìè, è äàëüøåñ ïîìîùüþ àãåíòíî-îðèåíòèðîâàííîãî ïîäõîäà èäåò ðàññìîòðåíèå òîëüêî èõ ïîâåäåíèÿè âçàèìîäåéñòâèÿ.

    Êëàññ àãåíòà

    Àãåíòû, èìåþùèå îäèíàêîâûå íàáîðû ñîñòîÿíèé, âëàäåþùèå îäíîòèïíûìè ñîîáùåíè-ÿìè è îáðàáàòûâàþùèå îäíè è òå æå ñîáûòèÿ, îáðàçóþò êëàññ àãåíòîâ. Àãåíòû, ïðè-íàäëåæàùèå îäíîìó êëàññó, ðàçëè÷àþòñÿ òîëüêî èìåíàìè, ïðèîðèòåòàìè ñîáûòèé èñïèñêàìè èíöèäåíòîâ ñîáûòèé. Èìåíà ñîñòîÿíèé, èìåíà ñîîáùåíèé, ñïèñêè ñîáûòèé,

    Áåç îãðàíè÷åíèé äîñòóïà c© 2004 Intervale 17 èç 296

  • SObjectizer Âåðñèÿ: 1.0.0SObjectizer-4 Book Äàòà: 2004.08.10Ãëàâà 2. Àãåíòíûé ïîäõîä

    ðàçðåøåííûõ ê îáðàáîòêå â êàæäîì èç ñîñòîÿíèé, ó âñåõ àãåíòîâ îäíîãî êëàññà îäèíà-êîâû.

    Ïîíÿòèå êëàññà àãåíòà ââåäåíî â àãåíòíóþ ìîäåëü ïî äâóì ïðè÷èíàì. Âî-ïåðâûõ,ðàçðàáîò÷èêàì SObjectizer, ïðèâû÷íûì ê èñïîëüçîâàíèþ ñòðîãî òèïèçèðîâàííûõ ÿçû-êîâ ïðîãðàììèðîâàíèÿ, áûëî ïðîùå ìàíèïóëèðîâàòü ñóùíîñòÿìè, èìåþùèìè òèï. Ñýòîé òî÷êè çðåíèÿ êëàññ àãåíòà îïèñûâàåò òèï àãåíòà (ò.å. íàáîð ñâîéñòâ, ìíîæåñòâîäîïóñòèìûõ çíà÷åíèé, ñïèñîê ðàçðåøåííûõ äåéñòâèé è ò.ï.). Äàëåå ïîíÿòèå êëàññà èòèïà áóäóò îçíà÷àòü îäíî è òî æå. Âî-âòîðûõ, ïðè ïðîåêòèðîâàíèè ñèñòåì, ñîñòîÿùèõèç ìíîæåñòâà îäíîîáðàçíûõ àãåíòîâ, ïðîùå îïèñàòü ñâîéñòâà àãåíòà â êëàññå îäíî-òèïíûõ àãåíòîâ, à çàòåì óêàçûâàòü, êàêîìó êëàññó ïðèíàäëåæèò àãåíò. Ïîýòîìó, åñëèâ ñèñòåìå êàêîé-ëèáî àãåíò ñóùåñòâóåò â åäèíñòâåííîì ýêçåìïëÿðå, äëÿ ýòîãî àãåíòàòàêæå äîëæåí áûòü îïðåäåëåí êëàññ àãåíòà.

    Ðàíåå óêàçûâàëîñü, ÷òî èìÿ êàæäîãî ñîîáùåíèÿ ñîñòîèò èç äâóõ ÷àñòåé: èìåíèàãåíòà-âëàäåëüöà è èìåíè ñîîáùåíèÿ. Òàêîå ñîñòàâíîå èìÿ äèêòóåòñÿ ïîíÿòèåì êëàññà.Ïðè îïðåäåëåíèè êëàññà àãåíòà îïèñûâàþòñÿ âñå ñîîáùåíèÿ, êîòîðûìè áóäóò âëàäåòüàãåíòû äàííîãî êëàññà. Êàæäîìó ñîîáùåíèþ â ðàìêàõ êëàññà íàçíà÷àåòñÿ óíèêàëüíîåèìÿ � èìÿ ñîîáùåíèÿ. Íî íà óðîâíå ýêçåìïëÿðîâ àãåíòîâ íåîáõîäèìî ðàçëè÷àòü ñî-îáùåíèÿ àãåíòîâ îäíîãî êëàññà. Äëÿ ýòîãî èìÿ ýêçåìïëÿðà ñîîáùåíèÿ ñîáèðàåòñÿ èçèìåíè àãåíòà è èìåíè ñîîáùåíèÿ â êëàññå àãåíòà.

    Äëÿ àãåíòîâ îäíîãî êëàññà ñîâïàäàþò íàáîðû ñîáûòèé è ñïèñêè äîïóñòèìûõ äëÿîáðàáîòêè ñîáûòèé â êàæäîì èç ñîñòîÿíèé. Íî êàæäûé àãåíò ìîæåò óñòàíàâëèâàòüñîáñòâåííûé ïðèîðèòåò íà êàæäîå èç ñâîèõ ñîáûòèé. Äëÿ êàæäîãî ñîáûòèÿ àãåíò ìîæåòíàçíà÷àòü ñîáñòâåííûå ñïèñêè èíöèäåíòîâ. Íàïðèìåð, â ñèñòåìå ìîæåò áûòü äâà àãåíòàïîæàðíàÿ_ñèðåíà (íà ðàçíûõ ýòàæàõ çäàíèÿ). Ýòè àãåíòû ïðèíàäëåæàò îäíîìó êëàññóè èìåþò ñîáûòèå ñðàáàòûâàíèå_ñèãíàëèçàöèè. Íî ó îäíîãî àãåíòà ýòî ñîáûòèå ìîæåòáûòü ïîäïèñàíî íà ñîîáùåíèÿ äàò÷èêîâ òåìïåðàòóðû, à ó âòîðîãî � íà ñîîáùåíèÿäàò÷èêîâ äûìà.

    Íàñëåäîâàíèå êëàññîâ àãåíòîâ

     àãåíòíîé ìîäåëè SObjectizer ñóùåñòâóåò ïîíÿòèå íàñëåäîâàíèÿ êëàññîâ àãåíòîâ.Êëàññ àãåíòà ìîæåò áûòü ïðîèçâîäíûì îò îäíîãî (îäèíî÷íîå íàñëåäîâàíèå) èëèíåñêîëüêèõ (ìíîæåñòâåííîå íàñëåäîâàíèå) ñóïåðêëàññîâ. Ïðîèçâîäíîñòü îçíà÷àåò, ÷òî:

    • ìíîæåñòâî ñîîáùåíèé ïðîèçâîäíîãî êëàññà ÿâëÿåòñÿ îáúåäèíåíèåì ìíîæåñòâ ñî-îáùåíèé âñåõ áàçîâûõ êëàññîâ è ñîáñòâåííîãî ìíîæåñòâà ñîîáùåíèé. À ïåðåñå÷å-íèå âñåõ ýòèõ ìíîæåñòâ äîëæíî áûòü ïóñòûì. Ò.å. ÿâëÿåòñÿ íåäîïóñòèìûì, åñëè âïðîèçâîäíîì êëàññå îêàçûâàåòñÿ õîòÿ áû äâà ñîîáùåíèÿ ñ îäèíàêîâûìè èìåíàìè.Íàïðèìåð, åñëè ñóïåðêëàññ A âëàäååò ñîîáùåíèåì m, è ïðîèçâîäíûé êëàññ B ïû-òàåòñÿ îïðåäåëèòü ñîîáùåíèå m, òî íàñëåäîâàíèå B îò A ÿâëÿåòñÿ íåäîïóñòèìûì;

    • ìíîæåñòâî ñîáûòèé è ñîñòîÿíèé ïðîèçâîäíîãî êëàññà ÿâëÿåòñÿ îáúåäèíåíèåì ìíî-æåñòâ ñîáûòèé è ñîñòîÿíèé èç áàçîâûõ êëàññîâ è ñîáñòâåííûõ ìíîæåñòâ ñîáûòèéè ñîñòîÿíèé. Êàê ñîáûòèÿ, òàê è ñîñòîÿíèÿ ìîãóò áûòü ïåðåîïðåäåëåíû (ïåðå-êðûòû) â ïðîèçâîäíîì êëàññå. Åñëè ïðè ìíîæåñòâåííîì íàñëåäîâàíèè îêàçûâà-åòñÿ, ÷òî íàñëåäóþòñÿ íåñêîëüêî ñîáûòèé (ñîñòîÿíèé) ñ îäèíàêîâûìè èìåíàìè,òî íàñëåäîâàíèå ÿâëÿåòñÿ äîïóñòèìûì, òîëüêî åñëè ýòè ñîáûòèÿ (ñîñòîÿíèÿ) áó-äóò ïåðåêðûòû â ïðîèçâîäíîì êëàññå. Íàïðèìåð, åñëè ñóïåðêëàññû A è B èìåþò

    Áåç îãðàíè÷åíèé äîñòóïà c© 2004 Intervale 18 èç 296

  • SObjectizer Âåðñèÿ: 1.0.0SObjectizer-4 Book Äàòà: 2004.08.10Ãëàâà 2. Àãåíòíûé ïîäõîä

    ñîáûòèå e, òî ïðîèçâåñòè îò íèõ êëàññ C ìîæíî, òîëüêî åñëè ïåðåêðûòü ñîáûòèåe â êëàññå C.

    Ãðàô íàñëåäîâàíèÿ äîëæåí áûòü àöèêëè÷åñêèì ãðàôîì.Îäèí êëàññ ìîæåò ÿâëÿòüñÿ ñóïåðêëàññîì äëÿ íåñêîëüêèõ êëàññîâ, êîòîðûå, â ñâîþ

    î÷åðåäü, èñïîëüçóþòñÿ êàê áàçîâûå ïðè ìíîæåñòâåííîì íàñëåäîâàíèè. Íàïðèìåð, êëàññA ÿâëÿåòñÿ ñóïåðêëàññîì äëÿ B è C, êîòîðûå ÿâëÿþòñÿ ñóïåðêëàññàìè äëÿ D.  ýòîìñëó÷àå ñ÷èòàåòñÿ, ÷òî êëàññ D íàñëåäóåò åäèíñòâåííûé ýêçåìïëÿð êëàññà A.  C++ ýòîíàçûâàåòñÿ âèðòóàëüíûì íàñëåäîâàíèåì.

    Ïðîâîäÿ àíàëîãèþ ñ C++ ñîáûòèÿ è ñîñòîÿíèÿ ïðè íàñëåäîâàíèè êëàññîâ àãåíòîââûïîëíÿþò ðîëü âèðòóàëüíûõ ìåòîäîâ. Íàïðèìåð, ïóñòü ñîáûòèå e ñóïåðêëàññà A ïå-ðåâîäèò àãåíòà â ñîñòîÿíèå s. Ïóñòü ïðîèçâîäíûé îò A êëàññ B ïåðåêðûâàåò ñîñòîÿíèås, íî íå ñîáûòèå e. Òîãäà â ñîáûòèè e àãåíòà êëàññà B áóäåò îñóùåñòâëåí ïåðåõîä âñîñòîÿíèå s êëàññà B, íåñìîòðÿ íà òî, ÷òî îáðàáîò÷èê e ïðèíàäëåæèò êëàññó A.

    Àíàëîãè÷íî è ñ ñîñòîÿíèÿìè. Ïðîèçâîäíûé êëàññ B ìîæåò ïåðåêðûòü ñîáûòèå e, íåïåðåêðûâàÿ íè îäíîãî óíàñëåäîâàííîãî ñîñòîÿíèÿ. Òîãäà ïðè âîçíèêíîâåíèè ñîáûòèÿe äëÿ àãåíòà êëàññà B áóäåò âûçûâàòüñÿ îáðàáîò÷èê èç êëàññà B, íåñìîòðÿ íà òî, ÷òîìîìåíòû, â êîòîðûõ ñîáûòèå e ðàçðåøåíî ê îáðàáîòêå, îïðåäåëÿåòñÿ â ñóïåðêëàññå.

    2.2 Ïðèìåíåíèå àãåíòíîãî ïîäõîäà

    Àãåíòíî-îðèåíòèðîâàííûé ïîäõîä ÿâëÿåòñÿ, ñêîðåå, äîïîëíåíèåì ê îáúåêòíî-îðèåíòèðîâàííîìó ïîäõîäó, íåæåëè åãî çàìåíîé. Ôàêòè÷åñêè àãåíòíî-îðèåíòèðîâàííûé ïîäõîä ÿâëÿåòñÿ äîïîëíåíèåì ÎÎÏ â îáëàñòè äèíàìè÷åñêîãîâçàèìîäåéñòâèÿ îáúåêòîâ. Ò.å. â îáúåêòíîé ìîäåëè ðàçðàáàòûâàåìîé ñèñòåìû âûäå-ëÿþòñÿ ñàìîñòîÿòåëüíûå îáúåêòû, âçàèìîäåéñòâóþùèå äðóã ñ äðóãîì. Ýòè îáúåêòûîáúÿâëÿþòñÿ àãåíòàìè. Äàëåå ïðîåêòèðîâàíèå îñóùåñòâëÿåòñÿ ïðàêòè÷åñêè òàê æå,êàê è â ÎÎÏ (îïèñûâàþòñÿ ñîñòîÿíèÿ, ñîîáùåíèÿ è ñîáûòèÿ àãåíòîâ), òîëüêî ñ ó÷åòîìòîãî, ÷òî êàæäàÿ èç èñïîëüçóåìûõ ñóùíîñòåé (ñîñòîÿíèå, ñîîáùåíèå, ñîáûòèå) áóäåòêîíêðåòíûì, çàðàíåå èçâåñòíûì ñïîñîáîì ïåðåíåñåíà èç ïðîåêòà â ïðîãðàììó.

    2.2.1 Ïðîñòîé ïðèìåð ñ äâóìÿ àãåíòàìè

    Ðàññìîòðèì ñèñòåìó èç ýëåêòðè÷åñêîé ëàìïî÷êè, ýëåêòðè÷åñêîé ïðîâîäêè è âûêëþ÷à-òåëÿ. Çäåñü åñòü òðè îáúåêòà: �ëàìïî÷êà�, �ïðîâîäêà�, �âûêëþ÷àòåëü�. Ïóñòü âûêëþ-÷àòåëü ìîæåò âûäàâàòü äâå êîìàíäû: �âêëþ÷èòü� è �âûêëþ÷èòü�. Íà ýòè êîìàíäûðåàãèðóåò îáúåêò-ëàìïî÷êà è èçìåíÿåò ñâîå ñîñòîÿíèå: �ñâåòèò� èëè �íå ñâåòèò�. Ò.å.ïîëó÷àåòñÿ äâà àãåíòà: àãåíò-âûêëþ÷àòåëü è àãåíò-ëàìïî÷êà.

    Äàëåå íåîáõîäèìî ðàññìîòðåòü, êàêèìè ñîñòîÿíèÿìè, ñîîáùåíèÿìè è ñîáûòèÿ-ìè îáëàäàåò êàæäûé èç àãåíòîâ. Àãåíò-ëàìïî÷êà èìååò äâà ñîñòîÿíèÿ: st_ñâåòèòè st_íå_ñâåòèò. Àãåíò-âûêëþ÷àòåëü òàêæå èìååò äâà ñîñòîÿíèÿ: st_âêëþ÷åí èst_âûêëþ÷åí. Àãåíò-âûêëþ÷àòåëü äîëæåí èìåòü äâà ñîáûòèÿ: îäíî äîëæíî ïðèâîäèòüê åãî âêëþ÷åíèþ, à âòîðîå � ê âûêëþ÷åíèþ. Ïðè ýòîì îáà ýòè ñîáûòèÿ äîëæíû èíèöè-èðîâàòüñÿ îäíèì äåéñòâèåì � ïåðåêëþ÷åíèåì âûêëþ÷àòåëÿ. Ò.å. àãåíò-âûêëþ÷àòåëüäîëæåí èìåòü îäíî ñîîáùåíèå: msg_ïåðåêëþ÷åíèå, êîòîðîå ÿâëÿåòñÿ èíöèäåíòîìäâóõ ñîáûòèé: evt_ïåðåêëþ÷åíèå_êîãäà_âûêëþ÷åí, evt_ïåðåêëþ÷åíèå_êîãäà_âêëþ÷åí.Êàæäîå èç ýòèõ ñîáûòèé àêòóàëüíî òîëüêî â îäíîì ñîñòîÿíèè, ïîýòîìó ñîáûòèå

    Áåç îãðàíè÷åíèé äîñòóïà c© 2004 Intervale 19 èç 296

  • SObjectizer Âåðñèÿ: 1.0.0SObjectizer-4 Book Äàòà: 2004.08.10Ãëàâà 2. Àãåíòíûé ïîäõîä

    evt_ïåðåêëþ÷åíèå_êîãäà_âûêëþ÷åí äîïóñêàåòñÿ ê îáðàáîòêå â ñîñòîÿíèè st_âûêëþ÷åí,à evt_ïåðåêëþ÷åíèå_êîãäà_âêëþ÷åí � â ñîñòîÿíèè st_âêëþ÷åí.

    Ñ ñîîáùåíèÿìè è ñîáûòèÿìè àãåíòà-ëàìïî÷êè ìîæíî ïîñòóïàòü ïî ðàçíîìó. Ìîæ-íî, íàïðèìåð, ðåøèòü, ÷òî àãåíò-âûêëþ÷àòü áóäåò èìåòü äâà ñîîáùåíèÿ: msg_âêëþ÷èòüè msg_âûêëþ÷èòü. Ýòè ñîîáùåíèÿ áóäåò îòñûëàòü àãåíò-âûêëþ÷àòåëü, à àãåíò-ëàìïî÷êàáóäåò íà íèõ ðåàãèðîâàòü.  ýòîì ñëó÷àå îêàæåòñÿ, ÷òî àãåíò-ëàìïî÷êà áóäåò æåñòêîïðèâÿçàí ê àãåíòó-âûêëþ÷àòåëþ, ò.ê. àãåíò-ëàìïî÷êà äîëæåí ïîäïèñàòüñÿ íà ñîîáùå-íèÿ àãåíòà-âûêëþ÷àòåëÿ.

    Ìîæíî, ÷òîáû ñîîáùåíèÿìè msg_âêëþ÷èòü è msg_âûêëþ÷èòü âëàäåë àãåíò-ëàìïî÷êà,à îòñûëàë èõ àãåíò-âûêëþ÷àòåëü. Òîãäà àãåíò-ëàìïî÷êà ïîäïèñûâàåòñÿ íà ñîáñòâåííûåñîîáùåíèÿ, íî àãåíò-âûêëþ÷àòåëü îêàçûâàåòñÿ ñâÿçàí ñ àãåíòîì-ëàìïî÷êîé, ò.ê. îíäîëæåí çíàòü, ÷üè ñîîáùåíèÿ îí ðàññûëàåò.

    Âîçìîæíî, ÷òî àãåíò-ëàìïî÷êà áóäåò èìåòü òîëüêî îäíî ñîîáùåíèå:msg_íàïðÿæåíèå_â_ñåòè. Ýòî ñîîáùåíèå áóäåò èìåòü îäèí àòðèáóò � âåëè÷èíàíàïðÿæåíèÿ. Àãåíò-âûêëþ÷àòåëü ïðè ñâîåì âêëþ÷åíèè îòñûëàåò ýòî ñîîáùåíèå,óêàçûâàÿ â íåì íå íóëåâóþ âåëè÷èíó. Ïðè âûêëþ÷åíèè � îòñûëàåò òî æå ñîîáùåíèå,íî ñ íóëåâîé âåëè÷èíîé íàïðÿæåíèÿ.  ýòîì ñëó÷àå àãåíò-ëàìïî÷êà áóäåò èìåòü îäíîñîáûòèå evt_èçìåíåíèå_íàïðÿæåíèÿ, êîòîðîå îáðàáàòûâàåòñÿ â îáîèõ ñîñòîÿíèÿõ.

    Ïîëó÷èâøóþñÿ àãåíòíóþ ìîäåëü ìîæíî âûðàçèòü íà íåêîåì ïñåâäîÿçûêå ñëåäóþ-ùèì îáðàçîì:

    // Îïèñàíèå êëàññà àãåíòà-ëàìïî÷êè.

    êëàññ a_ëàìïî÷êà

    {

    // Âëàäååò îäíèì ñîîáùåíèåì.

    ñîîáùåíèå msg_íàïðÿæåíèå_â_ñåòè

    {

    // Âñåãî îäèí àòðèáóò.

    double m_volts;

    }

    // Èìååò îäíî ñîáûòèå.

    ñîáûòèå evt_èçìåíåíèå_íàïðÿæåíèÿ

    {

    // Ó êîòîðîãî îäèí èíöèäåíò.

    èíöèäåíò a_ëàìïî÷êà::msg_íàïðÿæåíèå_â_ñåòè;

    }

    // Èìååò äâà ñîñòîÿíèÿ, â êàæäîì èç êîòîðûõ

    // îáðàáàòûâàåòñÿ îäíî è òî æå ñîáûòèå.

    ñîñòîÿíèå st_íå_ñâåòèò

    {

    ñîáûòèå evt_èçìåíåíèå_íàïðÿæåíèÿ;

    }

    ñîñòîÿíèå st_ñâåòèò

    {

    ñîáûòèå evt_èçìåíåíèå_íàïðÿæåíèÿ;

    }

    Áåç îãðàíè÷åíèé äîñòóïà c© 2004 Intervale 20 èç 296

  • SObjectizer Âåðñèÿ: 1.0.0SObjectizer-4 Book Äàòà: 2004.08.10Ãëàâà 2. Àãåíòíûé ïîäõîä

    }

    // Îïèñàíèå êëàññà àãåíòà-âûêëþ÷àòåëÿ.

    êëàññ a_âûêëþ÷àòåëü

    {

    // Âëàäååò îäíèì ñîîáùåíèåì.

    ñîîáùåíèå msg_ïåðåêëþ÷åíèå

    {}

    // Èìååò äâà ñîáûòèÿ.

    ñîáûòèå evt_ïåðåêëþ÷åíèå_êîãäà_âûêëþ÷åí

    {

    // Ó êîòîðîãî îäèí èíöèäåíò.

    èíöèäåíò a_âûêëþ÷àòåëü::msg_ïåðåêëþ÷åíèå;

    }

    ñîáûòèå evt_ïåðåêëþ÷åíèå_êîãäà_âêëþ÷åí

    {

    // Ó êîòîðîãî îäèí èíöèäåíò.

    èíöèäåíò a_âûêëþ÷àòåëü::msg_ïåðåêëþ÷åíèå;

    }

    // Èìååò äâà ñîñòîÿíèÿ, â êàæäîì èç êîòîðûõ

    // îáðàáàòûâàåòñÿ îäíî ñîáûòèå.

    ñîñòîÿíèå st_âûêëþ÷åí

    {

    ñîáûòèå evt_ïåðåêëþ÷åíèå_êîãäà_âûêëþ÷åí;

    }

    ñîñòîÿíèå st_âêëþ÷åí

    {

    ñîáûòèå evt_ïåðåêëþ÷åíèå_êîãäà_âêëþ÷åí;

    }

    }

    2.2.2 Ïðîñòîé ïðèìåð ñ òðåìÿ àãåíòàìè

    Ïðåäïîëîæèì, ÷òî òðåáîâàíèÿ ê èçëîæåííîé â ïðåäûäóùåì ïðèìåðå çàäà÷å èçìåíè-ëèñü. Òåïåðü íà ñèñòåìó ìîæåò âîçäåéñòâîâàòü ýëåêòðè÷åñêèé ïðîâîä, êîòîðûé ñîåäè-íÿåò ëàìïî÷êó è âûêëþ÷àòåëü. Íàïðèìåð, íóæíî ó÷èòûâàòü, ïîâðåæäåí îí èëè íå ïî-âðåæäåí. Ò.å. âêëþ÷åíèå âûêëþ÷àòåëÿ íå ïðèâåäåò ê çàãîðàíèþ ëàìïî÷êè, åñëè ïðîâîäïîâðåæäåí.

    Äëÿ ó÷åòà ýòîãî íóæíî ââåñòè â ñèñòåìó àãåíòà a_ïðîâîä, êîòîðûé ìîæåò íàõîäèòü-ñÿ â äâóõ ñîñòîÿíèÿõ: st_íå_ïîâðåæäåí èëè st_ïîâðåæäåí.

     ýòîì ñëó÷àå àãåíò-âûêëþ÷àòåëü äîëæåí îòîñëàòü ñîîáùåíèå î òîì, ÷òî íàïðÿ-æåíèå ïîäàíî. ×üå æå ýòî äîëæíî áûòü ñîîáùåíèå?  ïðåäûäóùåì ïðèìåðå ýòî áûëîñîîáùåíèå àãåíòà-ëàìïî÷êè, ò.ê. ñ÷èòàëîñü, ÷òî âûêëþ÷àòåëü íàïðÿìóþ âçàèìîäåé-ñòâóåò ñ ëàìïî÷êîé. Òåïåðü æå ìåæäó âûêëþ÷àòåëåì è ëàìïî÷êîé íàõîäèòñÿ ïðîâîä.Ò.å. ñîîáùåíèå î òîì, ÷òî âûêëþ÷àòåëü ïîäàë (ïðåêðàòèë ïîäà÷ó) íàïðÿæåíèå, äîëæíî

    Áåç îãðàíè÷åíèé äîñòóïà c© 2004 Intervale 21 èç 296

  • SObjectizer Âåðñèÿ: 1.0.0SObjectizer-4 Book Äàòà: 2004.08.10Ãëàâà 2. Àãåíòíûé ïîäõîä

    ïðèíàäëåæàòü ëèáî àãåíòó-âûêëþ÷àòåëþ, ëèáî àãåíòó-ïðîâîäó.Âûáîð òîãî, êàêîé èç àãåíòîâ áóäåò âëàäåòü äàííûì ñîîáùåíèåì, çàâèñèò îò òîãî,

    ÷òî íàì óäîáíåå. Åñëè íàì óäîáíåå, ÷òîáû àãåíò-âûêëþ÷àòåëü çíàë, êåì îí óïðàâëÿ-åò, òîãäà àãåíò-ïðîâîä áóäåò âëàäåëüöåì ñîîáùåíèÿ (ïîñêîëüêó àãåíòó-âûêëþ÷àòåëþíóæíî çíàòü, ÷üå ñîîáùåíèå îòñûëàòü).

    Åñëè æå íàì óäîáíåå, ÷òîáû àãåíò-ïðîâîä çíàë, êòî èì óïðàâëÿåò, òî òîãäà àãåíò-âûêëþ÷àòåëü äîëæåí áûòü âëàäåëüöåì ñîîáùåíèÿ. Ò.å. àãåíò-âûêëþ÷àòåëü øèðîêî-âåùàòåëüíî îòñûëàåò ñâîå ñîîáùåíèå, íå çíàÿ, êîìó îíî äîñòàíåòñÿ. Íî íà ýòî ñîîá-ùåíèå ðåàãèðóåò àãåíò-ïðîâîä, äëÿ ÷åãî åìó íóæíî çíàòü ïðî ñóùåñòâîâàíèå àãåíòà-âûêëþ÷àòåëÿ.

    Ïðèìåíèòåëüíî ê äàííîìó ïðèìåðó ó íàñ íåò íèêàêèõ ïðåäïî÷òåíèé, ïîýòîìó ïóñòüýòî ñîîáùåíèå ïðèíàäëåæèò àãåíòó-ïðîâîäó. Ïî àíàëîãèè ïóñòü àãåíò-ïðîâîä îòñûëàåòñîîáùåíèå àãåíòà-ëàìïî÷êè. Òîãäà ïîëó÷èòñÿ, ÷òî êàæäûé ýëåìåíò öåïè çíàåò, êîìóîí ïåðåäàåò ýëåêòðîòîê, íî íå çíàåò, îò êîãî îí åãî ïîëó÷àåò.

    Ò.î. ïóñòü àãåíò-ïðîâîä âëàäååò ñîîáùåíèåì msg_íàïðÿæåíèå_â_ñåòè, êîòîðîå èìååòòó æå ñòðóêòóðó, ÷òî è ñîîáùåíèå msg_íàïðÿæåíèå_â_ñåòè àãåíòà-ëàìïî÷êè. Íî ýòèñîîáùåíèÿ ÿâëÿþòñÿ íåçàâèñèìûìè, ò.ê. ïðèíàäëåæàò ê ðàçëè÷íûì àãåíòàì ðàçëè÷íûõòèïîâ.

    Ðàíåå áûëî ñêàçàíî, ÷òî àãåíò-ïðîâîä èìååò äâà ñîñòîÿíèÿ: st_íå_ïîâðåæäåí èst_ïîâðåæäåí. Ðåàãèðîâàòü íà ïîÿâëåíèå/èñ÷åçíîâåíèå íàïðÿæåíèÿ â ñåòè îí äîëæåí âëþáîì ñîñòîÿíèè, íî âûïîëíÿòü ïðè ýòîì ðàçëè÷íûå äåéñòâèÿ. Òàê, åñëè àãåíò-ïðîâîäíàõîäèòñÿ â ñîñòîÿíèè st_íå_ïîâðåæäåí, è â ñåòè ïîÿâëÿåòñÿ íàïðÿæåíèå, òî îí äîëæåíîòîñëàòü ñîîáùåíèå msg_íàïðÿæåíèå_â_ñåòè àãåíòà-ëàìïî÷êè. Ïîýòîìó äëÿ îáðàáîòêèñîáñòâåííîãî ñîîáùåíèÿ msg_íàïðÿæåíèå_â_ñåòè àãåíò-ïðîâîä äîëæåí èìåòü äâà ñîáû-òèÿ: evt_íàïðÿæåíèå_êîãäà_íå_�