Тақырып №15: Ішкі (динамикалық) мәліметтер базасымен жұмыс.
«Телефон анықтамалығы» жобасын әзірлеу.
Пролог программасы негізінен білім қорымен жұмыс ұйымдастыруға арналған болса да, жүйеде мәліметтер базасымен де жұмыс жасауға болады. Қазіргі кезде Пролог жүйесінде реляциялық мәліметтер базасымен тиімді жұмыс ұйымдастыру мүмкіндігі бар. Кез келген реляциалық мәліметтер базасының кестесі сәйкесті фактілер жиынтығымен сипаттала алады. Мұнда әрбір жазбаға бір факті, ал әрбір өріске предикат аргументі сәйкес келеді. Прологтың көптеген дистрибутивтері SQL тілінің базалық бөлігін мысал ретінде қолданады. Яғни, реляциалық мәліметтер базасының құрылымы Пролог программасының құрылымына кірістіріледі.
Турбо Пролог жүйесі екі типті мәліметтер базасымен жұмыс ұйымдастыруға арналған кірістірілген құрылғылардан тұрады: ішкі мәліметтер базасы және сыртқы мәліметтер базасы. Ішкі мәліметтер базасы компьютердің тек оперативті жадысында өңделеді, ал сыртқы мәліметтер базасы дискіде не жадыда өңделе береді. Ішкі мәліметтер базасы компьютердің оперативті жадысында орналасады және сыртқы мәліметтер базасымен салыстырғанда өте жылдам жұмыс атқарады. Басқа жағынана қарағанда, оперативтік жады көлемі сыртқы жады көлемінен анағұрлым аз. Егер база өте үлкен болуы мүмкін деп қарастырсақ, онда сыртқы мәліметтер базасын қолданған тиімді. Жалпы сыртқы МБ-ны игеру бұл лекция тақырыбы аясынан асып кетеді, сондықтан тек ішкі МБ-н немесе басқаша айтқанда динамикалық МБ-мен жұмыс ұйымдастыруды қарастырамыз.
Ішкі МБ программаның орныдалу барысында динамикалық түрде МБ-на кірістіруге, өшіруге, сақтауға, файлдан МБ-на енгізуге болатын фактілерден тұрады. Бұл фактілер МБ предикаттарын сипаттау бөлімінде анықталған предикаттарды ғана қолдана алады.
DATABASE[-<МБ аты>]
<предикат аты>(<бірінші аргумент доменінің аты>, ...,
<п-ші аргумент доменінің аты>
...
Егер МБ предикаттарын сипаттау бөлімі программада біреу ғана болса, онда оның аты болмаса да болады, бұл жағдай да ол автоматты түрде dbasedom стандартты атауын алады. Программада бірнеше сипаттау бөлімдері болса, оның біреуі ғана атауы жоқ бола алады, ал қалғандарының ерекеше аты болуы тиіс. Ол атаулар сәйкесті бөлімнің тақырыбында DATABASE және тире белгісінен кейін көрсетіледі.
МБ предикаттарын сипаттау PREDICATES бөлімінде анықталған предикаттар сипаттамасымен сәйкес келеді. Дегенмен, бұл предикаттарды кірістірілген предикаттар параметрлері ретінде қолдануға да болады. Сондай-ақ бұл пердикаттар қолданатын фактілер программаның жұмыс барысында енгізіліп не өшіріліп отырады. МБ тек фактілер ғана болады, және бұл фактілер бос еркін айнымалылардан тұра алмайды. МБ-да шығару ережесі қолданылмайды.
Турбо Пролог тілінде динамикалық МБ-мен жұмыс ұйымдастыруға арналған предикаттар бір не екі аргументтен тұрады. Егер ішкі МБ-ның аты болмаса, бір аргументтік предикат пайдаланылады, ал базаның аты болса предикат екі аргументті болады, мұнда екінші аргумент база аты болып саналады.
МБ-на фактілерді кірістіру үшін төмендегі үш предикаттың бірі қолданыла алады: assert, asserta, assertz. Бұл предикаттар арасындағы айырмашылық– asserta предикаты фактіні басқа фактілердің алдына кірістіреді, ал assertz предикаты фактілер соңына кірістіреді. assert предикаты дәл assertz предикаты сияқты қолданылады, ол Прологтың басқа версияларымен сәйкестілік үшін кірістірілген. Бұл предикаттардың бірінші параметрі ретінде кірістірілетін факт алынады, екіншісі–міндетті емес, егер МБ аты көрсетілсе, онда сол базаға факт кірістіріледі.
МБ-нан фактілерді өшіру үшін retract және retractall предикаттары қолданылады. retract предикаты базадағы басынан санағандағы ең алғашқы фактіні өшіреді, ол факт предикаттың бірінші параметрімен сәйкес келеді, екінші параметрі–міндетті емес, ол факт өшірілетін МБ аты болады. Ал retractall предикаты МБ-дағы барлық фактілерді жою мақсатында пайдаланылады. Бұл предикаттың бірінші параметрі анонимді айнымалы болуы керек, себебі анонимді айнымалы кез келген объектімен сәйкестендіріледі. Егер екінші аргумент көрсетілмесе, ерекше атау берілмеген бір ғана МБ-ның барлық фактілері өшіріледі, ал парметр ретінде МБ атауы көрсетілсе, онда сәйкесі МБ-ң фактілері ғана жойылады.
Динамикалық базаны дискіде сақтау үшін save предикаты қолданылады. Ол базаны мәтіндік файл ретінде сақтайды, файл аты предикаттың бірінші параметріне сәйкес келеді. Егер екінші міндетті емес параметр көрсетілмесе, онда жалғыз ғана атауы жоқ ішкі МБ фактілері ғана сақталады.
Мәтіндік файлда сақталынған фактілер оперативтік жадыға consult бұйрығымен жүктеле алады. Предикаттың бірінші агрументі мәтіндік файл аты болады, екінші параметр болмаса, атауы жоқ ішкі МБ-на жүктеледі. Екінші параметр көрсетілсе, фактілер сәйкесті МБ-на жүктеледі. Егер оперативті жадыда фактілерге орын аздық етсе, немесе көрсетілген файл дискіде болмаса предикат жұмысы сәтсіз болады.
Сақталынған ішкі МБ кәдімгі мәтіндік файл болып саналады, және мәтіндік редакторларды өңделе алады. Әрбір факт жеке бір қатарға жазылады, аргументтер саны мен олардың типтері database бөлімінде анықталған предикат сипаттамасына сәйкес келуі тиіс. Файлда бол қатарлар болмауы керек, фактілер ішінде пробелдер болмайды, тек қосарланған тырнақша қолданылған кезде ғана пробелдерді қолдану мүмкін болады.
Мысал. Телефон анықтамалығын құру керек болсын. Программаның негізгі мақсаты–абонент фамилиясы бойынша телефон номерін анықтау және керісінше. Программа пайдаланушысының Мб-на жаңа ақпарат енгізу, өшіру және өзгерту мүмкіндігі болуы тиіс.
Ішкі МБ-да бір ғана предикатты пайдаланамыз, ол предикаттың бірінші аргументі абоненттің фамилиясы, екіншісі–оның телефон номері. Өзара бір мәнді сәйкестілік болсын дейік, яғни бір адамға бір ғана телефон номері сәйкес келеді деп есептейік. Программаны жүктеу барысында орындалатын іс-әрекетті таңдауға мүмкіндік беретін мәзір пайда болуын ұйымдастырайық. Ол терезеде төмендегі бес операциялар орныдалуы тиіс:
Абонент фамилиясы бойынша оның телефон номерін анықтау.
Телефон номері бойынша абонент фамилиясын анықтау.
Телефон базасына жаңа жазба кірістіру
Телефон базасындағы жазбаға өзгерістер енгізу
Жазбаны телефон базасынан өшіру
Сонымен қатар пайдаланушы бұл бес әрекеттің ешқайсысына сәйкес келмейтін клавишаны басуы мүмкіндігін және программадан ешқандай әрекет орындамай-ақ шығу мүмкіндігін ескеру керек. Әрбір әрекет орындалған соң прогамма мәзір терезесіне қайта оралуы тиіс. Программадан шығу әрекеті жағдайында телефон базасындағы фактілер оперативті жадыдан дискідегі файлға жазылып, оперативті жады босатылуы тиіс.
Программа жұмысының басында телефондық база фактілері дискіде сақталынатын файлдан ішкі мәліметтер базасына жүктелуі тиіс.
Егер пайдаланушы бірінші операцияны таңдаса абоненттің телефон номері берілуі керек (егер телефон базасында сәйкесті факт бар болса) немесе телефондық базада мұндай фактінің жоқ екендігін баяндайтын хабарлама шығарылуы керек.
Егер пайдаланушы екінші операцияны таңдаған болса, телефон базасында сәйкесті фактінің бар болған жағдайында абонент фамилиясы экрнаға шығарылуы қажет. Кері жағдайда базада ондай ақпараттың жоқтығы жайлы хабарлама шығарылады.
Егер пайдаланушы үшінші операцияны таңдаған болса, онда оған абоненттің фамилиясын, оның телефон номерін енгізу және оларды базаға кірісітіру мүмкіндігі берілуі керек.
Төртінші операция таңдалған жағдайда пайдаланушыға абонент фамилиясы мен оның өзгерген телефон номерін (жаңа номерді) енгізу мүмкіндігі беріледі және базадан бұрынғы ақпарат өшіріледі.
Егер пайдаланушы бесінші пунктті таңдаған болса, онда оған абоненттің фамилиясын немесе телефон номерін енгізуін сұрап, содан соң ішкі базадан сәйкесті мәліметтерді өшіру ұйымдастырылады.
Достарыңызбен бөлісу: |