Дәріс

Практикалық жұмыс №10

Зертханалық жұмыс№10

Дәрiс

Объектті-бағытталған Анализ

Дәріс жоспары:

1. Объектті-бағытталған анализ;

2. «Көрініс» құжаты;

3. Қатысушылар диаграммасы;

4. Объектті-бағытталған анализ;

5. Қолдану нұсқаларының әдісі;

Объектті-бағытталған анализ

Кез-келген анализдің мақсаты жүйе тәртібін тек оның функционалды талаптарынан шыға келе зерттеу болып табылады. Анализ нәтижесі жүйенің бейнесі болып табылады.

«Глоссарий» құжаты

Жобалық құжат «Глоссарий» жоба алдында терминдер сөздігін анықтайтындығымен маңызды, барлық модельдер үшін және жобаның тесттік бейнелеуі үшін және өңдеугімен тапсырыс беруші арасында коммуникация кезінде.

«Көрініс» құжаты

Нәтижелі болу үшін. «Көрініс» жобалық құжаты өзіне келесі элементтерді қосу қажет:

 Жүйенің тағайындалуын анықтау;

 Қолданушыларды бейнелеу;

 Өнімнің бәсекеге қабілеттігі жайлы ақпарат;

 Жүйе мүмкіндігі;

 Жұмыс және артықшылықтардын мысалды графигі.

Жүйенің тағайындалуын жазу. 1960-шы жылдар ағымында, Біріктірілген Штаттар адамға айға жіреуін сынап көргенде, Президент, Джон Ф. Кеннеди келесі «көріністі» елдегі әрбіреуін бір есеппен біріктіру үшін жасады. Біз осы көріністі қайта түсіндіре аламыз:

Келесі онжылдықта, біз адамды Айға не керісінше сәтті жіберетін боламыз.

Осындай қысқа және нақты «көрініс» тіркесте құралады:

Үш жыл орнына бес жылдық!

Осы жайды ақпараттық ехнологияға жақындау үшін келесі көрініс сөйлемдерін қарастырайық:

Қысқа мерзімде әлемдегі ең тез электронды кестені құру.

Осындай көріністе, жобалық топтық әрбір мүшесі өндірістік мәселесі кез-келген факторға қарағанда маңыздырақ болып табылатынын түсіну керек. Фактілі түрде, жақсы ереже қысқа сөйлемдер үшін жаңа қызметкер келгенде соншалық айқын болатындай, және жоба алдында жұмыспен жұмыс ітеп жатқан қызметкерден асыра білетіндей етіп жасау.

Қолданушыларды бейнелеу. Топ клиент және жүйе қолданушы туралы білетін барлығы қалғандары үшін негізгі негізі болып табылады. Контексттік зерттеу, саудалық зерттеу, қолданушы топтарды сұрау бастапқы клиентті және жүйе қолданушыны сипаттауға қажетті ақпаратты жинауға мүмкіндік береді. Тағы, бұл зерттеулер қолданушылар қазіргі уақытта қалай жұмыс істейді және құрылатын өнім көмегімен болашақта қалай жұмыс жасай алатынын сипаттайтын сценарийлерді құруға ақпараттарды қамтамасыз етуді зерттейді.

Өнімнің бәсекеге қабілеттігі жайлы ақпарат. Жүйе бүгінгі және ертеңгі бәсекелес шарттарда салынған инвестицияларды сәйкес қайтаруды қамтамасыз ете ала ма? Осы мәселені шешу үшін берілген уақытта қандай шешімдер жүзеге аспалы? БҚ құрушы қанағаттандыруы тиіс, ол қсынатын өнім клиенттің мәселесін басқа қол жетерлік шешімге қарағанда жақсы шешеді, және бұл өнімді өңдеуге капиталдың салымын дәлелдейді. Мәселенің жақсы шешімі бағдарламалық шешім болу міндетті емес. Мысалы, финанстық бағдарламалық қамтамасыздандырудан гөрі бухгалтер қызметін жалдау тиімдірек. Таап етілетін функцонлады мүмкіндіктерді қамтамасыз ететін басқа жүйелерді зерттеу, осы өнім негізінде жаңа шешімді идентифицирлеу мүмкін.

Кейде жоба қйым қорына басқа талаптармен бәсекелес болуы қажет. Мысалы, 1990-шы жылдар аяғында, көптеген компаниялар қаражаттың маңызды бөлігін «2000 жыл мәселесі» қаупіне баға беру үшін жұмсады, бұл көптген бағдарламалық қамтамасыздандыруға тікелей әсер етті.

Жұмыс және артықшылықтар графигін анықтау. Зерттеу және анализ соңына қарай өңдеуші осы графикті орындауға қажетті график және күшейтулер мен шығындар жайлы жалпы түсінік алады. Осы ақпаратты «Көрініс» құжатына қосу (немесе жеке құжат «План/График жұмыс») өңдеуші материалдыпроцесс жайлы ойлайтындығын көрсетеді.

Жүйеге талаптарды жинақтау (Техникалық тапсырма). БҚ жобалау кезінде ең бірінші әрекеттердің бірі – осыған талаптарды жинау және реттеу. Талаптарды жинауға кірісе отырып, сіз жүйе және болмыс арасында қалайша контракт шартын бейнелейсіз, ондағы жүйе не істеу керектігі декларацияланатын сыртындағы жүйе мен болмыс арасында шығарылатын. Осыдан, тәртіп бойынша, сізді жүйе есептің қойылуын қалай орындайтыны емес, ол не істейтінііһ толғандыратын болады.

Жақсылап жобаланған жүйе барлық талаптарды толығымен орындауы тиіс, бұл алдын-алмалы және сенімді. Оның құрылуы оның тағайындалуының келісімінен басталады, бірақ өңдеу кезінде талаптарды түсіну бірте өзгереді.

Талаптар – жүйе қанағаттандыруы тиіс шарт немесе сипаттама.

Функционалды талаптар оның жүзеге асырылуымен байланысты, шектеуді есепке алусыз әрекеттерді анықтайды. Осымен фунцкионалды талаптар оның жұмыс процесі кезіндегі тәртіпті анықтайды.

Функционалды емес талаптар жүйе тәртібін анықтамайды, бірақ оның атрибуты немесе жүйелі қондырғы атрибутын бейнелейді.

Функционалды талаптардың келесі типтерін бөліп алуға болады:

 Қолдануға талаптар – қолданбалы интерфейс, құжаттама, оқу курстарының сапасы;

 Өнімділікке талаптар – қажетті қорларды қолдануға, өткізу қабілеттігіне, реакция уақытына нәтижені бере отырып функционалды талаптарға шектеу қояды;

 Жүзеге асыруға талаптар – белгіленген стандарт, бағдарламалау тілі, операциялық жүйе және т.б. қолдануға келтіреді;

 Сенімділікке талаптар – өткізетін жиілік және ауытқулардың әсерін, сонымен қатар қалпына келтіру мүмкіндігін шарттайды;

 Интерфейске талаптар – жүйе өзара әсерлесетін сыртқы болмыстарды, осы өзара әсерлесудің регламентін анықтайды.

Техникалық тапсырма (шетелдік терминологияда тар мағына қолданылады – Талаптар спецификациясы) – жүйені жобалаудың маңызды элементі. Оның сапасынан жобаның жалпы саны тәуелді. Дәстүрлі техникалық тапсырма – бұл жүйенің табиғи тілдегі сипаттамасы. Техникалық тапсырманы құраудың ерекшеліктері жиі болмаса, егер әрдайым тапсырма орындалуын мүмкін етпесе. Біріншіден, ол адамдарға, тапсырыс берушіге, өңдеушілерге түсінікті болуы тиіс, осыдан математикалық формула түсінігі қажет болмайтындай. Екіншіден есептің құруы мен өзгеруінің еңбек сыйымдылығы мағыналы шектерде қолдауы тиіс, өйткені техникалық тапсырманы қою – бұл тек жұмыс бастамасы.

Талаптарды құрылымдастырылмаған тексттен бастап оның формальді тілде шығарылуына дейінгі түрліше белгілеуғһге болады (немесе, мысалы, ескертулер көмегімен). Функционалды талаптардың көп бөлігі – немесе оның барлығы – UML қолдану нұсқасы ретінде шыға алады.

Қолдану нұсқасының әдістері. Прецеденттер диаграмасы

Жеткілікті ұзақ уақыт периодында объектті-бағытталған процесте, дәстүрлі құрылымды жоблау процесінде де өңдеушілер жүйенің талаптарын жақсы түсінуге арналған типтік сценарийлерді қолданды. Бұл сценариилер формальсіз шығарылған – олар әрдайым қолданылды және кейде ғана құжатталатын. Якобсон алғаш рет «қолдану нұсқасы» (Use Case) терминін өзінің OOSE әдісіне ойлап тапты және оған сондай мағыналықты келтірді, бұл жобаны жоспарлау мен өңдеудің негізгі элементіне ауыстырылды.

Әртістер мен Прецеденттер

Сценарий – тәртіпті бейнелейтін нақты әрекеттер тізбегі

Қолдану нұсқасы (Прецедент) – әртіспен бақыланатын нәтижеге келтіретін, жүйемен орындалатын тізбекті құбылыстардың жиынын бейнелеу (нұсқаларды қоса).

Әртіс (Әрекет етуші тұлға) – логикалық байланысқан рөлдер жиынтығы, олар прецендерттермен өзара әсерлесу кезінде орындалады.

Прецедент бейнелейді, жүйенің не істейтінін (үшкі жүйе, класс немесе интерфейс), бірақ оның қалай істейтінін анықтамайды. Модельдеу процесінде әрдайым ішкі және сыртқы көріністерді бөліп алуға болады. Кез-келген прецеденттің оны басқа преценденттен ерекшелейтіндей аты болуы тиіс. Ол көлемдейін пакет ішінде уникалды болуы тиіс.

Прецендент аты өз алдына тексттік жолды көрсетеді. Өз бетімен алынған атау, қарапайым болып табылады. Құрама атауға алдынан пакет аты қосылған. Графикалық тұрғыда прецедент атаумен бірге іште эллипс түрінде бейнеленеді.

Әдетте әртіс берілген жүйеде адам ойнай алатындай рөлді көрсетеді, аппараттық құрылғы немесе басқа жүйе. Мысалы, егер сіз банкте жұмыс істесеңіз, Кредиттік Бөлім Қызметкері қызметін атқара аласыз. Егер осы банкте сізде есепшотыныз болса, онда сіз Клиент рөлін атқарасыз.

Осылайша, әртіс экземпляры өз алдына белгілі түрде жүйемен өзара әсерлесетін нақты тұлғаны көрсетеді.

Сіз әртістерді өзінің моделінде қолданатындығына қарамастан, олар сжүйе бөлігі болып табылмайды, өйткені олар соның сыртында өмір сүреді. Әртістерді стильденген адам фигурасы ретінде бейнелейді.

Прецендент диаграммасы, гемесе қолдану нұсқалары (Use case diagram) деп преценденттер мен әртістер көрсетілген, олардың арасындағы қатынасты көрсететін диаграмманы атайды.

UML тілінде прецендент диаграммасы қолданушылар оларды қалай қолдану керектігін түсіну үшін, ал өңдеушілер – сәйкес элементті жүзеге асыру үшңн жүйе, ішкі жүйе немесе класстың тәртібін визуалдауға мүмкіндік береді. Претенденттер диаграммасы, немесе қолдану нұсқасының диаграммасы жүйенің статикалық түрін модельдеу үшін преенденттер көзқарасымен қолданады. Осы түр негізінен жүйе тәртібін қамтиды, яғни жүйемен оны қоршау контекстінде ұсынылатын сервистің сыртындағы көрініс.

7.1. – сурет - Актерлер мен преценденттер.

Прецендент тәртібін тексттік формада құбылыс ағынын бейнелеу жолымен специфирлеуге болады – бөшде оқырманға түсінікті түрде. Бейнелеуде ескертуді прецендент қашан, қалай басталатынана, ол қашан әртістермен өзара әсерлеседі және қандай объектілермен аламасады соған бағыттау қажет. Жүйе тәртібінің негізгі және альтернативті ағындарын белгілеу маңызды.

Мысалы, банкомат контекстінде прецендентті келесі түрмен бейнелеуге болатын еді Клиентті Тексеру (7.1 сурет):

Құбылыстың негізгі ағыны. Прецедент клиенттен идентификациялық нөмір сұрағанда басталады (PIN). Клиент (Customer) оны клавиатурадан енгізе алады. Enter батырмасын басқаннан кейін аяқталады. Осыдан кейін жүйе енгізілген PIN тексереді, егер ол дұрыс болса, оның енгізілуін дәлелдейді. Осымен прецедент аяқталады.

Құбылыстың ерекше ағыны. Клиент транзакцияны кез-келген уақытта, Cancel батырмасын басумен тоқтата алады. Бұл әрекетті прецендент қйта бастайды. Клиент шотында ешқандай өзгерістер болмайды.

Құбылыстың ерекше ағыны. Клиент кез-келген уақытта Enter батырмасын басуға дейін өзінің PIN өшіре алады және жаңасын енгізе алады.

Құбылыстың ерекше ағыны. Егер клиент қате PIN енгізсе, прецедент қайта іске қосылады. Егер бұл үш рет болса, жүйе өзінің транзакциясын қайтарады және берілген клиентке қайта өзінің жұмысын бастауға мүмкіндік бермейді бір минут шамасында.

Прецеденттер ұйымы

Преценденттерді ұйымдастыру үшін оларды топқа біріктіреді, класстарды біріктіру тәрзіді.

Прецеденттерді лолардың арасында жалпылау, қосу және кеңейту қатынасын анықтау арқылы ұйымдастыруға болады. (7.2 суретті қараңыз).

Претенденттер арасындағы жалпылау қатынасы прецендент-ұрпақ өзінің ата-анасының тәртібі мен семантикасын қайталайтынын, оның тәртібін алмастыруға немесе толықтыра алатындығын, одан басқа ол әр жерде қойылуы мүмкін. Преценденттер арасындағы жалпылау боялмаған тілшесі бар түзу ретінде бейнеленеді.

Преценденрттер арасындағы қосылу қатынасы базалық преценденттің кейбір нүктесінде басқа преценденттер тәртібі инкорпорирленгендігін білдіреді. Қосылатын прецедент автономды өмір сүрмейді, тек көлемдейтін прецендент бөлігі ретінде инсталяцияланады.

Базалық прецендент қосылатын прецендент тәртібін өзара әсерлейді деп есептеуге болады.

7.2 – сурет - Преценденттердің кеңейтілген диаграммасы

Егер қосылатын прецедент актермен тікелей шақырыла алмаса, онда оны абрактты етуге болады (абтрактты претенденттің графичекалық атауы курсивпен бейнеленеді).

Қосылу қатынасының бар болуына байланысты бір құбылыс ағынының қайта жазылуынан шығуға болады. Қосу қатынасы Отношения включения изображаются в виде зависимостей со стереотипом include. Чтобы специфицировать место в потоке-событий, где базовый прецедент включает поведение другого, вы просто пишете слово include, за которым следует имя включаемого прецедента, например для прецедента

Следить за выполнением заказа:

Основной поток событий. Получить и проверить номер заказа, include (Проверить клиента). Запросить статус каждой части заказа и доложить клиенту;

Отношение расширения подразумевает, что базовый прецедент неявно содержит поведение другого прецедента в точке, которая косвенно задается расширяющим прецедентом. Базовый прецедент может быть автономным, но при определенных обстоятельствах его поведение расширяется за счет другого. Базовый прецедент допустимо расширить только в некоторых точках, называемых точками расширения;

Отношения расширения используются для описания изменений в нормальном поведении, или для моделирования таких частей прецедента, которые пользователь воспринимает как необязательное поведение системы;

Кеңейту қатынасын extend стереотипімен байланыс түрінде бейнелейді. Базалық сценарийдің кеңейту нүктелері қосымша бөлімде есептеледі. Мысалы, Орналастыру прецендентіне арналған ағын келесі түрдегідей бейнелеуге болады:

Негізгі құбылыс ағыны include (Клиентті Тексеру). Сұраныс клиентімен жасалған барлық пунктерін жинау. (Артықшылықты таңдау).

Сұранысты өңдеуге жіберу. Берілген мысалда Приоритеттің қойылуы фразасы – бұл кеңейтілу нүктесі. Қарапайым жағдай кезінде базалық прецендент осы мысалда осыныстық приориттегінің есепке алуынсыз орындалады. Егер приориттетті ұсыныс түссе, әдеттегідей, кеңейтілу нүктесіне дейін же поступает приоритетный заказ, то поток будет выполняться, как обычно, до точки расширения (Установить приоритет), а в ней будет выполнен расширяющий прецедент (Разместить срочный заказ), после чего возобновится работа главного потока.

Жалпы тәртіпті бөліп алу жолымен преценденттер ұйымы (қосу қатынасы) және түрлі вариация (кеңейтілу қатынасы) қарапайым, балансталған және түсінікті жүйе преценденттер жиынтығын өңдеудің құрама бөлігі болып табылады.

Қолдану нұсқаларының әдісі

Қолдану нұсқалары бағдарламалық қамтамасыз етуге талаптарды түрлендіру кезеңінде қажетті құралы болып табылады.

Қолданудың әрбір нұсқасы – бұл жүйеге потенциалды талаптар, және ол шығарылмайынша, оның жүзеге асырылуын жоспарлауға болмайды.

Преценденттерді жүзеге асыру

Прецедент жүйе тәртібін бейнелейді, бірақ оның жүзеге асырылуын спецификациялай алмайды – ол кооперация көмегімен белгіленеді.

7.3– сурет - Преценденттерді өмірге шығару

Кооперация – бірігіп жұмыс істеудің нәтижесінде талап етілген тәртіпке жете алатын класстап және басқа элементтер жынтығы. (7.3 суретті қараңыз, онда прецендентті жүзеге асыратын кооперация көрсетілген).

Бақылау сұрақтары:

1. Кәсiпорынның атқарылатын кассасымен орындалатын "Еңбекақыны беру" операциясына арналған қызметтер диаграммасын құрастырыңыз. Кассир төлем тiзiмiндегi қызметкерді iздестiруді жүзеге асырады. Егер еңбекақының есептеп шығаруы туралы тиiстi жол табылса, онда ақшаны беріп, еңбекақының берілгені туралы тiзiмде белгiленеді;

2. "Тұрмыстық-коммуналдық қызметтерде есептi көшiрiп алу" операциясына арналған қызметтер диаграммасын құрастырыңыз, ол тұрмыстық-коммуналдық қызметтерде есептеулерді атқарылатын бөлiммен орындалады. Есепшi деректер қорынан мекенжай бойынша iздестiреді, содан соң мәлiметтiң дұрыстығын тексередi. (тұрғындар саны, жылу түрі). Тарифтардың негiзiнде коммуналдық қызметтегi есептеп шығаруларды өндiрiп алады. Егер пәтер жалдаушының жеңiлдiгі болса, сол жеңілдік негізінде есептеу сомасы қайта жүргізіледіді. Содан соң есеп шоты жазылады;

3. Жинақ банкiнiң атқарылатын бөлiмшесiмен орындалатын "Клиенттiң үлесiнен соманы беру" операциясына арналған қызметтер диаграммасын құрастырыңыз. Клиент шығын ордерiн толтырады. Кассир ордердiң дұрыс толтырылуын тексередi, содан соң қажеттi мәлiметтер басады және деректер қорына тиiстi есеп шотын iздестiреді. Егер есеп шоты табылса және онда тиiстi сома бар болса, онда клиентке ақшаны бередi және есеп шотына белгi салады;

4. Телефон есептеулері бөлімшесімен орындалатын "Қала аралық келiссөздердің есеп шотын төлеу" операциясына арналған, қызметтер диаграммасын құрастырыңыз. Есепшi есеп төлеген абоненттiң телефон нөмiрiн еңгізіп, оны деректер қорынан iздестiреді. Абоненттің карточкасы табылған бойда, төлеуi тиіс есеп шотына керекті соманы еңгізеді. Содан соң төлеудi қабылдау туралы куәлiк қағазын абонентке жаздырып береді;

5. Пәтерлердi сатумен және айырбастаумен шұғылданатын ұйымның "Пәтердi айырбастау туралы мәлiмдеменiң қабылдануы" операциясына арналған тiзбектер диаграммасын құрастырыңыз. Менеджер клиенттiң пәтерi туралы мәлiметтi еңгізедi, содан соң айырбастың шартын қосады. Енгiзiлген мәлiметтiң қолайлы нұсқаларын iздестiреді. Егер қолайлы нұсқалар табылса, онда олардың тiзiмiн құрастырады.

Қолданылған әдебиеттер тiзiмi

1. Леоненков А.В. Объектно-ориентированный анализ и проектирование с использованием UML и IBM Rational Rose БИНОМ. Лаборатория знаний, Интернет-университет информационных технологий - ИНТУИТ.ру, 2012;

2. Слайд Мухаметжанова Б.О. Жасанды зерде жүйелеріне кіріспе – ҚарМТУ- Қ.Р. Тұнғыш Президенті атындағы ЭОТ ғЗИ – Сертификат № 3895 2011ж.;

3. Мухаметжанова Б.О., Когай Г.Д. Деректерді өңдеу құрылымдары мен әдістері: Оқу құралы- Қарағанды ҚарМТУ баспасы 2011-110б;;

4. Мухаметжанова Б.О.Автоматтандырылған жүйелердің теориялық негіздері– ҚарМТУ- ң.Р. Тұнғыш Президенті атындағы ЭОТ ғЗИ – Сертификат № 2711 2010ж.;

5. Боггс У., Боггс М. UML и Rational Rose - М.: "ЛОРИ", 2012. - 582 с.

Практикалық жұмыс №1 0

Object Pascal Бағдарламалау тілі

Мазмұны:

1. Объектілі бағытталған қосымшаларды жасау (Object Pascal);

2. Қосымшаның консольдық нұсқасына;қойылатын талаптар;

3. Есептеу нәтижесінің мазмұны.

Object Pascal Бағдарламалау тілін қолданып, Объектілі бағытталған қосымшаларды жасауды үйрену.

Берілген әдістемелік материалды меңгеру.

Жұмыстың мазмұны:

1. «Ұшқыш аппараттар» пәндік саланың консольдық үлгісін жасау және түзету;

2. Нұсқаға сәйкес консольдық қосымшаны дайындау және жасау (Опция «Console Application» в меню File|New);

3. Нұсқаға сәйкес Windows-қосымшаны дайындау және жасау;

4. Жасалынатын бағдарламалық өнімге қойылатын талаптар;

5. Көрсетілген пәндік сала немесе мәселе үшін бірнеше (3-тен аса) класс жасау керек;

6. Жасалған класстар жүйесінде мұрагерлік, полиморфизм және функциялардың жабылуын көрсету керек;

7. Барлық класстар үшін конструкторлар мен деструкторларды іске асыру қажет;

8. Жасалынатын пәндіксала үшін дайын кітапханалық класстарды (ішкі не сыртқы) қолдануға рұқсат берілмейді;

9. Консольдық қосымша үшін хаттардың экранда шығарылуы кириллицада жасалуы керек.

Қосымшаның консольдық нұсқасына қойылатын талаптар. Барлық класстар өздерін экранда басып шығару әдісін іске асыру керек (қалыпты көрсету);

Жұмыс істеу барысында бағдарлама объектілі бағытталған Бағдарламалау қағидаларын түсіндіру үшін шақырылатын әдістерді, функцияларды және айнымалылар жағдайын басып шығару керек.

1. Міндетті белгілеу;

2. Талаптар ерекшелігі;

3. Мәліметтер құрылымы;

4. Бағдарламалық қамтамасыз етудің архитектурасы;

5. Қолданушы интерфейсі (Windows-қосымша үшін);

6. Түсініктемесі бар код;

7. Тестілеу нәтижесі;

8. Бақылау сұрақтарына жауаптар.

Ескерту. Есептеу нәтижесі нұсқа бойынша жасалынатын қосымша үшін дайындалады.

1.1 – кесте - Жеке тапсырмалар

№ вар. | Тапсырма
1 | Пәндік сала: архитектура
2 | Пәндік сала: транспортные средства
3 | Комплекстік сандармен жұмыс
4 | Векторлармен жұмыс
5 | Графикалық примитивтер жүйесі
6 | Пәндік сала: аэрофлот
7 | Енгізушығару класстарының жүйесі.
8 | Пәндік сала: зоологиялық классификация
9 | Үлкен өлшемділік сандармен жұмыс
10 | Терезелік интерфейс жүйесі
11 | Полиномдармен жұмыс
12 | Пәндік сала: компьютер құрамалары
13 | Пәндік сала: геометрикалық фигуралар
14 | Стек және кезекпен жұмыс
15 | Пәндік сала: география
16 | Графикалық примитивтер жүйесі
17 | Пәндік сала: зоологиялық классификация
18 | Енгізушығару класстарының жүйесі.
19 | Терезелік интерфейс жүйесі
20 | Үлкен өлшемділік сандармен жұмыс
21 | Пәндік сала: компьютер құрамалары
22 | Полиномдармен жұмыс
23 | Стек және кезекпен жұмыс
24 | Комплекстік сандармен жұмыс
25 | Пәндік сала: геометрикалық фигуралар

Бақылау сұрақтары:

1. Объектілі бағытталған тәсілдің негізгі түсініктері?

2. Объект, класс дегеніміз не? Олардың арасында айырмашылық қандай?

3. Конструкторлар мен деструкторлар не үшін керек?

4. Виртуалды функцтя көмеігімен полиморфизм қалай іске асырылады?

5. Object Pascal’да көру аймақтарының директивалары?

6. Object Pascal’да мұрагерлік қалай жасалынады?

7. «Артық жүктелген» мен «жабылған» әдістерінің айырмашылығы?

8. Абстрактілі әдістер не үшін керек?

Терминология

Объектілі-бағытталған тәсіл. Объектілі-бағытталған (ОБ) тәсіл объектілі декомпозицияны қолданады, мұнда жүйенің статикалық құрылымы объектілер терминдары мен олар арасынсындағы байланыспен, ал жүйенің тәртібі олар арасындағы хаттар алмасу терминдерімен сипатталады.

Негіздер мен Объектілер

Анықтама бойынша объект деп, қарастырылатын қолданбалы мәселе төңірегінде мағынасы бар, шекаралары нақты белгіленген зат немесе абстракцияны түсінеміз. Объектілерді енгізу екі сақсатты көздейді:

 қолданбалы міндетті (мәселені) түсіну;

 Компьютерде іске асыру үшін негізді енгізу.

Г. Буч бойынша объект анықтамасы:

Объектінің қалпы, тәртібі және ұқсастығы болады; ұқсас объектілердің құоылымы олар үшін елассты анықтайды; «класс экземпляры» мен «объект» терминдері өзара алмастырушы.

А. Джекобсон бойынша объект анықтамасы:

Объект бұл өз қалпын (ақпаратты) сақтай алатын, және осыы қалпын өзгертумен тексеру үшін операциялар жиынтығын қамтамасыз ететін негіз.

Объект қалпы – объектінің қандайда бір шартты орындайтын, белгілі істі жасайтын немесе қандайда бір оқиғаны күтетін оқиғасы. Объект қалпы көбіне осы объекттің барлық қасиеті (әдетте статикалық) мен олардың мәндерінің тізімімен (әдетте динамикалық) сипатталады. Объект қалпы объектінің қасиетін бейнелейтін атрибуттарының ағымдағы мәнімен сипатталады. Атрибут болып тек қарапайым типтер ғана (сандар, логикалық мәндер) емес, сонымен қатар құрама типтер мен объектілер бола алады.

Тәртібі – бұл объектінің қалайша, әрекет жасап, жауап беруі; тәртіп объект қалпы менхабар беру терминдерінде көрсетіледі. Сәйкес реакцияны алу үшін бір объектінің екінші объектіге белгілі әсер етуі Операция деп аталады. Берілу механизмі түрлі болғанымен, негізінде хат және операция түсініктері сәйкесті. Smalltalk сияқты таза объектілі-бағытталған тілде олар арасында хат алмасу туралы айтылады. Өткен шақ нақты бейнеленетін C++ іспетті тілдерде біз бір объект басқа объект операциясын жасағанда оның әдісін шақыоады дейміз.

Объект қалайша қоршаған әлеммен қарымқатынасқа түсетініе бейнелеу объект интерфейсі деп аталады. Объект қалпы оның тәртібінің жиынтық нәтижесін көрсетеді.

Ұқсастық – объектінің басқалардан айырмашылығын көрсететін қасиет. Идентификация әдісі бір объектіні басқасынан қалай ажыратуға болады деген сұраққа жауап беруі тиіс. Көптеген объектілі модельдер объектілерді идентификациялаудың құрамдас әдістерін ұсынады.

Класстар

Класс – бұл құрылым мен тәртіп ортақтығымен байланысқан көптеген объектілер. Бір класс объектілердің бірдей интерфейсі бар және олар оны бірдкй әдіспен іске асырады. Бір класстың екі объектісі тек ағымадағы жағдайымен әр түрлі болуы мүмкін. Дара объектілер класс экземплярлары деп аталынады, ал класс бұл объектілер құрылатын «үлгі».

Объектілі-бағытталған тәсілдің маңызды түсініктері:

Абстрагирлау – қандайда бір объектіні басқалаодан ажырататын негізгі сипаттамасын ерекшелеу. Абстрагирлау объектінің сыртқы ерекшеліктеріне басты назар аудырады;

Инкапсуляция – (мәліметтерді жасыру немесе қатынауды шектеу) объекттің сыртқы әрекетін бейнелейтін интерфейсін ішкі жүзеге асырудан шектеу үшін қызмет етеді;

Полиморфизм – объектінің қай классқа жататынын білмейақ, онымен өзара іс әрекет жасау мүмкіндігі. Басқаша айтқанда, класстың басқа типке жату қабілеттілігі;

Мұрагерлік – класстар арасындағы бір класстың құрылым не тәртіпті басқа класспен бөлісу қарымқатынасы;

Класс өз ішіне басқа классты қосу мүмкін (қосылу не агрегирлану қатынасы), егер ол басқа класс объектілері болып табылатын атрибуттарын анықтаса (немесе басқа объектіге сілтемелер).

Object Pascal бағдарламалау тілі

Типтер жүйесі

Pascal Классикалық тілі программистке өзінің жеке күрделі мәліметтерін жазуларын (records) анықтауға мүмкндік береді. Object Pascal ОББ концепциясын қолдайды және класстарды анықтауға мүмкіндік береді:

TPerson = class

private

fname : string[15];

faddress : string[50];

public

procedure show;

end;

Класс мәліметтері өріс, процедуралар мен функциялар – әдістер дер аталынады. Delphiде қабылданған келісім бойынша, өріс атауларын f (ағылш. field – өріс) әрпінен бастау қажет. Бағдарламада класстарды сипаттауды типтер сипаттауға (type) орналастырады. Өріске қатынау бір бірінен нүктемен бөлінетін класс/объект/өріс атын көрсетумен іске асырылады.

Объектілер

Бағдарламада класстар өкілдері объектілер – айнымалыларды жариялау бөлімінде жарияланады (var):

var

Student : TPerson;

Professor : TPerson;

Ерекше назар аударатыны, Object Pascal’да объект – бұл динамикалық құрылым. Объект айнымалысы мәліметтер емес, объектінің мәліметтеріне сілтемелерден тұрады.
Сондықтан, программист бұл мәлісеттер үшін жадтың бөлінуін қамтпмпсыз ету керек.

Жадтың бөлінуі класстың арнайы әдісі – конструктор (әдетте оған create есімін береді). Конструктордың ерекше ролі мен тәртібін айшықтау үшін, классты сипаттағанда procedure сөзінің орнына constructor сөзі қоданылады:

TPerson=class

private

fname : string[15];

faddress : string[50];

constructor Create;

public

procedure Show;

end;

Объект мәліметтері үшін Жадтың бөлінуі нәтиженің мәнін конструктор-әдісі арқылы класс объектісіне меншіктеу жолымен іске асады. Төмендегі мысалда Professor объектісі мәліметтері үшін қажетті жад бөлінеді:

Professor := TPerson.Create;

Жадтың бөлінуінен басқа, конструктор объект өрістеріне бастапқы мәндерді беру мәселесін шешеді, яғни объект инициализациясын жасайды. Төмендегі мысалда TPerson классы үшін констукторды іске асыру көрсетілген:

constructor TPerson.Create;

begin

fname := ’’;

faddress := ’’;

end;

Констукторды іске асыру ерекше. Біріншіден, конструктор денесінде динамикалық жадтың бөлінуін қамтамасыз ететін үйреншікті new инструкциялары жоқ (осы қызметті компилятор жасайды). Екіншіден, конструктор мәндерді қайтармайды, алайда бағдарламада конструкторға жүгіну функция-әдісіндегідей болады.

Егер бағдарламада қандай-да бір объект қолданылмаса, онда жадты босатуға болады. Осы әрекетті орныдау деструктор (Destroy) қолданылады. Мысалы Professor объектісі өрістері алатын жадты босату үшін мынаны жазу керек:

Professor.Destroy;

Әдістер

Класс әдістері (класс сипаттамасына қосылған процедуралар мен функциялар) класс объектілерінен әрекет орындайды. Әдіс қолданылу үшін бір бірінен нүктемен бөлінген объект пен әдіс аттарын көрсету керек. Іс жүзінде әдісті объектіге қолданудың инструкциясы – бұл процедураны шақыру инструкциясын жазып алудың арнайы тәсілі. Мысалы инструкция

professor.Show;

Professor объектісіне show әдісінің қолданылуын шақырады.

Бағдарламада класс әдістері қарапайым процедуралар мен функциялар сияқты анықталады. Тек әдіс болып табылатын процедуралар мен функциялар атауы екі бөліктен (әдіс және сол әдіс жататын класс атауы) тұрып, олар нүкте арқылы бөлінеді. Төменде берілген TPerson классының show әдісін анықтау үлгісі көрсетілген:

procedure TPerson.Show;

begin

ShowMessage('Имя:' + fname + #13 + 'Адрес:' + faddress);

end;

Ескеретін жайт, әдіс инструкциясында объект өрістеріне қатынау объект атын енгізбей ақ жасалынады.

Объектінің қасиеті мен инкапсуляция

Инкапсуляция деп объектінің өрістеріне тек класстар әдістері арқылы қатынау үшін оларды жасыру деп түсіндіріледі.

Object Pascal-да объект өрістеріне қатынауды шектеу объект қасиеттері көмегімен жасалынады. Объект қасиеттері (property) Қасиеттің мәнін сақтайтын өріспен және қасиет өрісіне қатынауды қамтамасыз ететін екі әдіспен сипатталады. Қасиет мәнін қою әдісі қасиетті жазып алу әдісі (write) деп аталады, қасиет мәнін алу әдісі қасиетті оқу әдісі (read) деп аталады.

Классты сипаттауда қасиет аты алдында property сөзін жазады. Аттан кейін оның типінің, сосын қасиет мәніне қатынауды қамтамасыз ететін әдістер атаулары көрсетіледі. read сөзінен кейін қасиетті оқуға мүмкіндік беретін әдіс атауы, write сөзінен кейін – қасиет жазулары әдіс аты енгізіледі. Төменде Name және Address екі қасиеті бар TPerson классының сипатталуы көрсетілген:

type

TName=string[15];

TAddress=string[35];

TPerson=class

private

FName: TName;

FAddress:TAdress;

сonstructor Create (Name:TName);

procedure Show;

function GetName:TName;

function GetAddress:TAddress;

procedure SetAddress (NewAddress:TAddress);

public

property Name: TName read GetName;

property Address: TAddress read GetAddress write SetAddress;

end;

Сосын Student объектісінің Adress қасиетіне мән ьеру үшін келесі жазу орындалады:

student.Address := 'С.Петербург, ул.Садовая 21, кв.З';

Компилятор берілген мәнді беру инструкциясын әдісті шақыру инструкциясына қайтатранслирлайды:

student.SetAddress('С.Петербург, ул. Садовая 21, кв.З');

Сырттан бағдарламада қасиетті қолдану мен объект өрістерін қолданудан ажыратылмайды. Алайда олар арасыенда үлкен айырмашылық бар: Қасиет мәнін беру мен оқу кезінде бірталай жұмыысты орындайтын процедура шақырылады.

Бағдарламада қасиет әдістеріне қосымша міндеттерді жүктеуге болады. Мысалы әдіс көмегімен қасиетке берілетін мәндердің дұрыстығын тексеруге, басқалардың мәндерін беруге, қосымша процедураны шақыруға болады.

Жазып алудан қорғалған қасиет мәнін объект инициализациясы кезінде беруге болады. Төменде TPerson классының объектісін жасауды және қасиеттеріне қатынауды қамтамасыз ететін TPerson әдістері көрсетілген:

// TPerson объект конструкторы

сonstructor TPerson.Create(Name : TName);

begin

FName := Name;

end;

// Name қасиеттiнің мәнiн алу әдісі

function TPerson.GetName;

begin

Result:=FName;

end;

// қасиеттiнің мәнiн алу әдісі

function TPerson.GetAddress

begin

Result := FAddress;

end;

// Address қасиеттiнің мәнiн өзгерту әдісі

procedure TPerson.SetAddress(NewAddress : TAddress);

begin

if FAddress = ''

then FAddress := NewAddress;

end;

Объект мәліметтерін безендіру қасиеттей өрістерге қатынауды шектей алады, мысалы тек оқуға рұқсат беруге болады. Бағдарлама инструкциялары қасиет мәнін өзгерте алмау үшін қасиет сипаттамасында тек оқу әдісінің атын ғана көрсету керек. Тек оқуға арналған қасиетке мән берсе, компиляция периодының қателігіне әкеледі. Жоғарыда көрсетілген класс сипаттауында Name қасиеті тек оқуға, ал Address қасиеті – оқу және жазып алуға арналған.

TPerson классының жасалуы мен оның қасиетін орнатуды қамтамасыз ететін бағдарлама инструкциялары келесідей болуы мүмкін:

student := TPerson.Create('Иванов');

student.Address := 'ул. Садовая, д.3, кв.25';

Көру аймақтарының директивалары

Класс элементтерін (өріс, әдіс, қасиет) атаудан басқа, класс сипаттамасы өзіне класс элементінің бағдарламада көріну дәрежесін орнататын, protected (қорғалған) және private (жабық) директиваларын біріктіреді.

public секциясында аталған класс элементтері барлық класс пен модульдерге қол жетімді. Әдетте бұл секцияға бәріне ортақ класс қасиеттерінің сипаттамасын орналастырады.

protected секциясында аталған класс элементтері тек одан туған класстарды қол жетімді. Бұл секцияның класс элементтерінің көріну аумағы класс сипаттамасы болатын модульмен шектелмейді. Әдетте protected секциясына класс әдістерінің сипаттамасын енгізеді.

private секциясында аталған класс элементтері модуль ішінде көрінеді. Бұл элементтер модульдан тысқары жерде, тіпті туынды класстардың өзінде қолжетімсіз. Әдетте private секциясына класс өрістерінің сипаттамасын кіргізеді.

Төменде қатынауды басқару директивалары қосылған TPerson классының сипаттамасы көрсетілген.

TPerson = class

private

FName: TName; // Name қасиеттiнің мәнi

FAddress: TAddress; // Address қасиеттiнің мәнi

protected

Constructor Create(Name:TName);

Function GetName: TName;

Function GetAddress: TAddress;

Procedure SetAddress(NewAddress:TAddress);

Property Name: TName read GetName;

Property Address: TAddress read GetAddress write SetAddress;

end;

Кейде класс элементтерін толығымен жасыру керек болады. Бұл жағдайда, класстың анықтамасын жеке модульге, ал оған сілтемені осы класс объектілерін қолданатын бағдарламаға орнату керек.

Мұрагерлік

Объектілі-бағытталған Бағдарламалаудың концепциясы бар классқа жаңа өрістер, қасиеттер мен әдістерді қосу арқылы жаңа класстарды анықтау мүмкіндігін болжайды. О Сонда жаңа туындаған класс өзінің негізгі, түпкі классының қасиеттері мен әдістерін мұрагерлікке алады.

Ұрпақклассты жариялауда түпкі класс көрсетіледі. Мысалы, TEmployee (қызметші) классы жоғарыда тұрған TPerson классынан Department (бөлім) өрісін қосу арқылы туындауы мүмкін. Temployeeға хабарландыру келесідей болады:

TEmployee = class(TPerson)

FDepartment : integer; // бөлім номері

constructor Create(Name : TName; Dep : integer);

end;

Жақшаға кіргізілген TPerson классының (негізгі) аты TEmployee классының одан туындағанын көрсететеді.

TEmployee классының өзінің жеке конструкторы бар, ол негізгі класстың өз өрістерінен инициализациясын қамтамасыз етеді. Төменде конструкторды іске асырудың үлгісі:

constructor TEmployee.Create(Name : TName; Dep : integer);

begin

inherited Create(Name);

FDepartment := Dep;

end;

Берілген мысалда inherited директивасымен түпкі класстың конструкторы шақырылады, сосын ұопақ класс өрісіне атау беріледі. Өндірістік класс жасағаннан кейін бағдарламада негізгі класстың өрістері мен әдістерін қолдануға болады.

Онымен қоса, класс әдісінің ішінде әдісі аталынатын объектіге сілтеме болатын self кілттік сөзін қолдануға болады.

Өндірістік класстың объектісін жасағаннан кейін бағдарламада түпкі класстың әдістері мен өрістерін қолдануға болады. Төменде осы мүмкіндікті көрсететін бағдарлама фрагментісі берілген.

engineer := TEmployee.Create('Сидоров',413);

engineer.address := 'ул.Блохина, д.8, кв.10';

Бірінші инструкция TEmployee типті объект жасаса, екіншісі— түпкі классқа қатысты қасиетті белгілейді.

Полиморфизм және виртуалды әдістер

Полиморфизм концепциясы объект классына сәйкес келетін әдісті қолдануды қамтамасыз етеді. Үш класс анықталаған делік, біреуі қалған екеуі үшін негізгі болып табылады.

type
// негізгі класс TPerson

TPerson = class

FТame : string; { аты}

constructor Create(name : string) ;

function info: string; virtual;

end;

// негізі туындысында TPerson

TStud = class(TPerson)

FGr : integer; { топ номері }

constructor Create (name : string; gr: integer);

function info: string; override

end;

// негізі туындысында TPerson

TProf = class(TPerson)

FDep : string; { кафедра атыы }

constructor Create(name : string; dep : string);

function info: string; override;

end;

Бұл класстардың әрқайсысында info әдісі анықталған. virtual директивасының көмегімен info әдісі виртуалды болып жарияланған. Әдістің виртуалды болып аталуы туынды классқа оны өзінің әдісімен алмастыруға мүмкіндік береді (ол override директивасымен белгіленеді). Төменде әр класс үшін info әдісін анықтау көрсетілген:

function TPerson.info : string;

begin

result := '';

end;

function TStud.info : string;

begin

result := FName + ' гр.' + IntTostr(FGr);

end;

function TProf.info : string;

begin

result := fname + ' каф.' + FDep;

end;

Адамдардың тiзiмiн программада класстың объекттер массивімен көрсетуге болады TPerson

list : array[l..100] of TPerson;

Object Pascalдың Delphi тілі түпкі класстың нұсқағышына туынды класс нұсқағышынығ мәнін меншіктеп алуға мүмкіндік беретіндіктен, тізімді осылайша жария етуге болады. Сондықтан TStud және TProf класстарының объектілері list массивінің элемнттері бола алады.

Жабылған әдісте түпкі әдісті inherited директивасын қолданып шақыруға болады.

Екі аласс та бір түпкі класстан туындағандықтан, студенттер мен оқытушылардың тізімін келесідей жариялауға болады (мұнда объект — бұл нұсқағыш екенін еске түсіру қажет):

list: array[l..SZL] of TPerson;

Студенттер мен оқытушылардың тізімін info әдісін массив элементтеріне қолдану арқылы шығаруға болады:

st := '';

for i:=l to SZL do // SZL - размер массива-списка

if list[i] <> NIL then st := st + list[i].Info+ #13;

ShowMessage (st);

Бағдаоламаның жұмыс істеуі барысында массвтің әр элементі xstud және TProf типтерінің объектілерінен тұруы мүмкін.

Абстрактілі және артық жүктелген әдістер

Виртуалды әдістер сонымен қатар абстрактілі болуы мүмкін, бұл берілген класста әдістің жүзеге асырылуы мүмкін еместігін көрсетеді. Ол әдіс туынды класстарда іскеасырылкы тиіс. Абстрактілі әдісті сипаттау үшін virtual сөзінен кейін тұратын, abstract сөзі қолданылады.

Әдістер артық жүктелуі мүмкін – яғни бір атпен бірнеше әдістерді анықтауға болады (кілттік сөз соңында overload сөзін қосу арқылы):

function Min(A,B: Double): Double; overload;

function Min(A,B: Integer): Integer; overload;

Бұл хабарландыру түрлі параментрлерді қабылдайтын екі Min функциясы бар деп есептеу нәтижесініңтейді. Қажет функцияны таңдау, берілген параметрлерге байланысты, компилятормен жасалынады.

Delphi Класстары мен объектілері

Интерфейсті іске асыру үшін Delphi форманың түрлі компоненттерімен (командалық батырмалар, түзету өрістері) жұмыс істейтін класстар кітапханасын қолданады.

Қосымшаның формасын жобалау кезінде Delphi бағдарламаның мәтініне қажетті объектілерді автоматты қосады. Егер Delphi іске қосылғаннан кейін, бірден код редакторының терезесіне қарасақ, келесі жолдарды көреміз:

type

TForm1 = class(TForm)

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form1: Tform1

Бұл бастапқы класстың, қосымшаның бос формасының cипаттамасы және объектіні жариялау.

Программист қажетті компоненттерді қосып, форманы жасағанда, Delphi форма классының сипаттамасын құрастырады. Программист форма оқиғасын өңдеу функциясын немес оның компонентін жасағанда, Delphi қосымшаның формасының класс сипаттамасына әдістің жариялануын қосады.

Класстар кітапханасына визуалды компоненттер класстарынан басқа, сәйкесті объектілердің жасалуы мен олардың әдістеріне қатынауды қамтамасыз ететін визуалды емес (көрінбейтін) компоненттер класстары кіреді. Мұндай визуалды емес компоненттің мысалы ретінде таймерді (TTimer типі) және мәліметтер базасына қатынау мен басқару компоненттерін айтуға болады. Одан басқа көптеген класстар болады, алайды олардың қарастырылуы бұл жұмыстың міндетіне кірмейді.

Тапсырманы орындау үлгісі

Пәндік сала: «Ұшқыш аппараттар»

5.1 - сурет – Тапсырманың орындалу үлгісі

Object Pascalда консрльдық қосымшаны жасау үлгісі:

program Lab3op;

{$APPTYPE CONSOLE}

uses

SysUtils;

//

// Ұшқыш аппараттар (ЛА)

//

const

STORM = 7; // Қатты жел рұқсат етілмейді

MIN_HEIGHT = 500; // Бастапқы минималды ұзындығы

MIN_FUEL = 100; // Жанармайдың минималды өлшемі

type

// Кездесетін күйлерді беретін тапсырма тізімі

// Ұшқыш аппарат - "жерде" и "аспанда"

FlyingState = (onGround, inAir);

// Кездесетін күйлерді беретін тапсырма тізімі

// Қозғаушы - "тоқтатылды", "қосылды"

EngineState = (started, stopped);

//

// Класс: Ұшқыш аппарат (не ЛА)

//

FlyingMachine = class

private

name : string;

protected

state : FlyingState;

public

constructor Create; overload;

constructor Create(n: string); overload;

destructor Destroy; override;

// name жабық айнымалысына кіруге рұқсат ететін екі әдіс

procedure setName(n : string); virtual;

function getName : string; virtual;

procedure fly; virtual;

end;

//

// Класс: моторсыз ЛА планеры.

// Планер нақтылы биiктiкке басқа ұшақпен көтерiледi

// бұдан әрi өспелi әуа ағындарында булайды

//

Glider = class(FlyingMachine)

protected

windForce : integer;

startHeight : integer;

public

constructor Create(n : string);

procedure setWindForce(wf : integer); virtual;

function getWindForce : integer; virtual;

function getHeight() : integer; virtual;

procedure setHeight(h : integer); virtual;

procedure fly; override;

end;

//

// Класс: моторлы ЛА ұшағы.

//

Airplane = class(FlyingMachine)

protected

fuel : integer;

engine : EngineState;

public

constructor Create(n: string);

destructor Destroy; override;

procedure fly; override;

procedure addFuel(f : integer); virtual;

procedure ground(); virtual;

end;

//

// Класс операцияларын іске қосу

//

constructor FlyingMachine.Create;

begin

// Басқа құраушыны шақырамыз

Create('UFO');

end;

constructor FlyingMachine.Create(n: string);

begin

setName(n);

state := onGround;

WriteLn('FlyingMachine.Create ', name);

end;

destructor FlyingMachine.Destroy;

begin

WriteLn('FlyingMachine.Destroy ', name);

end;

procedure FlyingMachine.setName(n : string);

begin

name := n;

end;

function FlyingMachine.getName : string;

begin

getName := name;

end;

procedure FlyingMachine.fly;

begin

state := inAir;

WriteLn('FlyingMachine.fly ', name, ' Flying!');

end;

constructor Glider.Create(n : string);

begin

inherited Create(n);

windForce := 0;

startHeight := 0;

WriteLn('Glider.Create ', name);

end;

procedure Glider.fly;

begin

if (windForce < STORM) and (startHeight >= MIN_HEIGHT) then begin

WriteLn('Glider.fly ', name,

' Wind=', windForce, ' Height=', startHeight);

inherited fly;

end

else

WriteLn('Glider.fly ', name, ' Wind is too strong!');

end;

procedure Glider.setWindForce(wf : integer);

begin

windForce := wf;

end;

function Glider.getWindForce : integer;

begin

getWindForce := windForce;

end;

procedure Glider.setHeight(h : integer);

begin

startHeight := h;

end;

function Glider.getHeight : integer;

begin

getHeight := startHeight;

end;

constructor Airplane.Create(n: string);

begin

inherited Create(n);

engine := stopped;

fuel := 100;

WriteLn('Airplane.Create ', name);

end;

destructor Airplane.Destroy;

begin

WriteLn('Airplane.Destroy ', name);

if state = inAir then

ground;

if engine = started then begin

WriteLn('Airplane.Airplane ', name, ' Stop engine!');

engine := stopped;

end;

inherited Destroy;

end;

procedure Airplane.addFuel(f : integer);

begin

fuel := fuel + f;

WriteLn('Airplane.addFuel ', name, ' Fuel=', fuel);

end;

procedure Airplane.fly;

begin

if fuel > MIN_FUEL then begin

if engine = stopped then begin

engine := started;

WriteLn('Airplane.fly ', name, ' Start engine!');

end;

WriteLn('Airplane.fly ', name, ' Fuel=', fuel);

inherited fly;

fuel := fuel - 50;

end

else

WriteLn('Airplane.fly ', name, ' Not enough fuel!');

end;

procedure Airplane.ground();

begin

state := onGround;

WriteLn('Airplane.ground ', name, ' on the ground!');

end;

var

glide : Glider;

plane : Airplane;

a, b : FlyingMachine;

begin

WriteLn('************ Test Glider class ************');

WriteLn;

glide := Glider.Create('Scooter-FX12');

glide.setHeight(MIN_HEIGHT + 100);

glide.fly;

glide.Destroy;

ReadLn;

WriteLn('************ Test Airplane class ************');

WriteLn;

plane := Airplane.Create('TY-134');

plane.fly;

plane.addFuel(MIN_FUEL + 300);

plane.fly;

plane.fly;

plane.fly;

plane.ground;

plane.Destroy;

ReadLn;

WriteLn('************ Test classes ************');

a := Glider.Create('Glider-AQ23');

b := Airplane.Create('LA-46');

a.fly;

b.fly;

WriteLn('FlyingMachine name a=', a.getName);

WriteLn('FlyingMachine name b=', b.getName);

a.Destroy;

b.Destroy;

ReadLn;

end.

Бағдарламаның орындалу нәтижесі:

*** Тест класса Glider ***

FlyDevice::FlyDevice Scooter-FX12

Glider::Glider Scooter-FX12

Glider::fly Scooter-FX12 Высота=600 Сила Ветра=0

FlyDevice::fly Scooter-FX12 аспанда!

FlyDevice::~FlyDevice Scooter-FX12

*** Airplane класының тестісі ***

FlyDevice::FlyDevice TY-134

Airplane::Airplane TY-134

Airplane::fly TY-134 Жанармай жетіспейді!

Airplane::addFuel TY-134 Жанармай =400

Airplane::fly TY-134 Қозғаушыны қосу

Airplane::fly TY-134 Жанармай =400

FlyDevice::fly TY-134 аспанда!

Airplane::fly TY-134 Жанармай =350

FlyDevice::fly TY-134 аспанда!

Airplane::fly TY-134 Жанармай=300

FlyDevice::fly TY-134 аспанда!

Airplane::ground TY-134 Қонады

Airplane::~Airplane TY-134 Қозғаушыны тқтату

FlyDevice::~FlyDevice TY-134

*** Класстардың полиморфизм тестісі ***

FlyDevice::FlyDevice Glider-AQ23

Glider::Glider Glider-AQ23

FlyDevice::FlyDevice LA-46

Airplane::Airplane LA-46

Glider::fly Glider-AQ23 Ұшуға қолайсыз жағдай

Airplane::fly LA-46 Жанармай жетіспейді!

Имя объекта a = Glider-AQ23

Имя объекта b = LA-46

FlyDevice::~FlyDevice Glider-AQ23

Airplane::~Airplane LA-46

FlyDevice::~FlyDevice LA-46

Бағдарламаның орындалу нәтижесі:

************ Test Glider class ************

FlyingMachine.Create Scooter-FX12

Glider.Create Scooter-FX12

Glider.fly Scooter-FX12 Wind=0 Height=600

FlyingMachine.fly Scooter-FX12 Flying!

FlyingMachine.Destroy Scooter-FX12

************ Test Airplane class ************

FlyingMachine.Create TY-134

Airplane.Create TY-134

Airplane.fly TY-134 Not enough fuel!

Airplane.addFuel TY-134 Fuel=500

Airplane.fly TY-134 Start engine!

Airplane.fly TY-134 Fuel=500

FlyingMachine.fly TY-134 Flying!

Airplane.fly TY-134 Fuel=450

FlyingMachine.fly TY-134 Flying!

Airplane.fly TY-134 Fuel=400

FlyingMachine.fly TY-134 Flying!

Airplane.ground TY-134 on the ground!

Airplane.Destroy TY-134

Airplane.Airplane TY-134 Stop engine!

FlyingMachine.Destroy TY-134

************ Test classes ************

FlyingMachine.Create Glider-AQ23

Glider.Create Glider-AQ23

FlyingMachine.Create LA-46

Airplane.Create LA-46

Glider.fly Glider-AQ23 Wind is too strong!

Airplane.fly LA-46 Not enough fuel!

FlyingMachine name a=Glider-AQ23

FlyingMachine name b=LA-46

FlyingMachine.Destroy Glider-AQ23

Airplane.Destroy LA-46

FlyingMachine.Destroy LA-46

Сабаққа дайындалуға арналған әдістемелік нұсқаулар

Әдебиеттер:

1 Покушалова, Л.В. Метод case - study как современная технология профессионально-ориентированного обучения студентов [Текст] / Л.В. Покушалова // Молодой ученый. —2011. —No5. Т.2. —С. 155-157.

2 Романов П.В. Стратегия кейс-стади в исследовании социальныхслужб//Социс,2005, No4, с 101-109.6.

3 Фливберг, Б. Кейс-стади в контексте качественно-количественнойпроблематики: Ст. из Дании] / Б. Фливберг // Социологические исследования. -2004. -No 9. -С. 15 –

4 Гагарина, Л.Г. Разработка и эксплуатация автоматизированных систем: учеб. пособие/ Л.Г. Гагарина, Д.В. Киселев, Е.Л. Федотова; ред. Л.Г. Гагарина. - М.: Форум: ИНФРА-М, 2011. - 384с. 2. Пирогов, В.Ю. Информационные системы и базы данных: организация и проектирование: учеб. пособие для вузов/ В.Ю. Пирогов. - СПб. : БХВ-Петербург, 2009. - 528 с. 3.

5 Фуфаев, Д.Э. Разработка и эксплуатация автоматизированных информационных систем : учеб. Для студ. сред. проф. образования/ Д.Э. Фуфаев, Э.В. Фуфаев. - М.: Академия, 2010. - 304 с.б)

6 Федорова, Г.Н. Информационные системы : учебник/ Г.Н. Федорова. - 2-еизд., испр. - М.: Академия, 2011. - 208 с.

Қосымша:

7 Ларман К. Применение UML и шаблонов проектирования. 2-е издание.: Пер. с англ. – М.: Издательский дом “Вильямс”, 2002. – 624 с.: ил.

8 Калянов Г.Н. CASE-технологии: Консалтинг в автоматизации бизнес-процессов. 2-е изд. перераб. и доп. - М.-Горячая линия – Телеком, 2000.-320 с.

9 Вендров А.М. Проектирование программного обеспечения экономических информационных систем. Учебник. М.: Финансы и статистика, 2000.

10 Александров, Д.В. Инструментальные средства информационного менеджмента. CASE-технологии и распределенные информационные системы : учебное пособие / .В.Александров. -М. : Финансы и статистика, 2011. -225 с. -ISBN 978-5-279-03475-8;

11 http://www.bookwebmaster.narod.ru/uml.html

12 http://wm-help.net/books-online/book/57663/57663-53.html

Зертханалық жұмыс№10

Deployment diagram

Осы жаттығуда тапсырыстарды өңдеу жүйесі үшін

Орналастыру диаграммасы жасалады.

###### Міндеттер қою. Әзірлеушілер командасы берілген момент алдындағы барлық жүйені талдау және жобалау кезеңдерін аяқтады. Пайдалану нұсқалары, объектілер арасында өзара әрекеттесу және компоненттер айқын сипатталған. Дегенмен желінің әкімшілік ету бөлімшелері, жүйенің түрлі компоненттері қандай компьютерлерде орналасатынын білуі қажет. Осыған байланысты тапсырыстарды өңдеу жүйесі үшін Орналастыру диаграммасын әзірлеуге тура келеді.

###### Орналастыру диаграммасын жасау. Тапсырыстарды өңдеу жүйесі үшін Орналастыру диаграммасын әзірлеңіз. Дайын диаграмма 7.1-суретте көрсетілген.

8.1-сурет - Тапсырыстарды өңдеу жүйесі үшін Орналастыру диаграммасы

######

Жұмыс мақсаты:

###### 1. Орналастыру диаграммасына түйіндер қосу

Өз бетінше дайындалуға арналған тапсырма:

1.Браузерде Орналастыру көрсетімінде тышқанды екі рет шертіп, Орналастыру диаграммасын ашыңыз;

2.Инструменттер панелінің Processor (Процессор) батырмасын басыңыз;

3.Диаграммада тышқанды шертіп, оған процессорды орналастырыңыз;

4."Деректер базасының сервері" процессор атауын енгізіңіз.

Жұмыс мазмұны:

1. Инструменттер панелінің Connection (Байланыс) батырмасын басыңыз;

2. Деректер базасының сервері процессорын тышқанмен шертіңіз;

3. "Қолданба сервері" процессор байланыс сызығын жүргізіңіз.

##

## Есеп мазмұны:

1. Тышқанның оң батырмасымен браузерде "Қолданба сервері" процессорын шертіңіз;

2. Ашылған менюде New >- Process (Жасау >- Процесс) пунктін таңдаңыз;

3. OrderServerExe процесс атауын енгізіңіз.

3 қадамдарын қайталап, процестер қосыңыз:

• "Клиенттік жұмыс станциясы №1" процессорында OrderClientExe процесі;

• Клиенттік жұмыс станциясы №2" процессорында ATMCIientExe процесі.

##

## Әдістемелік нұсқаулар

4 қадамдарын қайталап, келесі процессорларды қосыңыз:

• Қолданба сервері;

• Клиенттік жұмыс станциясы №1;

• Клиенттік жұмыс станциясы №2.

Инструменттер панелінің Device (Құрылғы) батырмасын басыңыз.

Диаграммада тышқанды шертіп, оған құрылғыны орналастырыңыз.

Оны "Принтер" атаңыз.

###### Байланыстарды қосу

1 — 3 қадамдарын қайталап, келесі байланыстарды қосыңыз:

• "Қолданба сервері" процессорынан "Клиенттік жұмыс станциясы №1" процессорына қарай;

• "Қолданба сервері" процессорынан "Клиенттік жұмыс станциясы №2" процессорына қарай;

• "Қолданба сервері" процессорынан "Принтер" құрылғысына қарай.

Процестерді диаграммада көрсету

1.Тышқанның оң батырмасымен "Қолданба сервері" процессорын шертіңіз;

2.Ашылған менюде Show Processes (Процестерді көрсету) пунктін таңдаңыз.

1 және 2 қадамдарын қайталап, процестерді келесі процессорларда көрсетіңіз:

• Клиенттік жұмыс станциясы №1;

• Клиенттік жұмыс станциясы №2.

# Бағдарламалық кодты туындату

Rational Rose ең қуатты қасиеттерінің бірі — модельді көрсететін бағдарламалық кодты туындату мүмкіндігі. Rose моделінен бағдарламаларды туындатар алдында орындалуы қажет негізгі операцияларды қарастырамыз. Rose-да бағдарламалық кодты бірнеше бағдарламалау тілінде туындатуға болады. Сонымен қатар Rose моделінен IDL, DDL конструкциялары мен Oracle8 сұлбаларын туындатуға болады. Бағдарламаларды туындату нұсқалары Rose бекітілген нұсқасына байланысты өзгереді:

• Rose Modeler — жүйе моделін жасауға мүмкіндік береді, бірақ бағдарламалық кодты туындатуды және кері жобалауды қолдамайды (реверстік инжиниринг).

• Rose Professional — бағдарламалық кодты бір тілде туындатуға мүмкіндік береді.

• Rose Enterprise — бағдарламалық кодты C++, Java, Visual Basic, Oracle8 сұлбалары тілінде және басқа бағдарламалау тілдерінде туындатуға мүмкіндік береді.

Rose-мен серіктестік қатынастарды қолдайтын бірқатар компанияларда бағдарламалық кодты туындату үшін және басқа тілдерде кері жобалау үшін қосымша құралдар әзірленген. Rose үшін қосымша бағдарламалық өнімдер туралы ақпаратты алу үшін (www. rational.com) Web-сайтына жүгінуге болады.