Лекция. Сілтеме (сілтеуіш) тип.



Жоспар:

1. Динамикалық деректер: статикалық және динамикалық деректерді

бейнелеу және анықтау өзгешілігі.

2. Тізімдер деректердің негізгі динамикалық құрылымдар ретінде: тізімдерді

құру, оларды көру және басқа операциялары.

3. Күрделі құрылымды динамикалық деректер (ағаш, бинарды ағаш және

граф), оларды бейнелеу және өңдеу негізгі алгоритмдері (құру, айналу және

түрлендіру).

4. Процедуралық тип.

5. Қорытындылау алгоритмдері процедуралық типтер параметрімен ішкі

программалар ретінде іске асыру.

6. Деректердің абстрактық және инкапсуляцияланған типтері.

7. Стек үлгісі.

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

Мысалдар:

int *x, *y;

char *ch;

float*y, z;

printf("%d",*x);

Жоғарыда z айнымалысы көрсеткіш ретінде сипатталмаған, ал x, y, ch айнымалылары — көрсеткіштер. Егер олар оператор ішінде кездессе, сәйкес типтік айнымалылар да көрсеткіштер түрінде сипатталуы тиіс.

printf операторындағы сияқты, *x айнымалысының оқылуы "x көрсеткішінің мәні". Айнымалы көрсеткішін & символымен белгілеуге де болады. Мысалы, ол (і)-программаның scanf операторында пайдаланылған (&x). Оның оқылуы: " x айнымалысын ың адресі н ".

Негізгі типте көрсеткіш түрінде сипатталған айнымалыға компилятор айнымалы адресін тағайындайды. Мысалы, негізгі тип int болса, көрсеткішке 2 байттық, char болса, 1 байттық адрес бөліп қояды. Компилятор көрсеткіш арқылы белгіленген айнымалы мәнін жадтан тезірек табады.

Жалпы, * операторы айнымалының алдында тек екі жа ғ дайда жазылады: осындай айнымалыны жариялау (сипаттау) алдында және ол көрсеткен мәнді пайдаланып алу кезінде.

Массивті де көрсеткіш енгізіп сипаттауға болады, мысалы: char * ms[12]; Мұндағы сипатталған символдық ms массивінің элементтеріне 12 көрсеткіш орнатылған.

Си, C++ тілдерінде көрсеткіштің көрсетілуі мен оның дұрыс пайдалануын түсіну маңызды орын алады. Көрсеткіштер функцияларды ойдаәыдай пайдалану үшін қажет. Мұндағы ескеретін жайт : көрсеткіш дұрыс орнатылмаған программаның орындалмай қалуы мүмкін және бұл кезде қатені табу да көп қиындық келтіреді.

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

Мысалы : *x, *y көрсеткіштері пайдаланылған y=3(x+2y) функциясының мәнін есептеу программасы:

# include < stdio.h>

main()                          (5)

{

float u, *x, *y;

printf ("x, y=?");

scanf ("%f%f',x,y);

u=3*(*x+2* *y);

printf ("u=%f',u);

getch(); return 0;

}


Лекция. Модульдік программалау

 

Жоспар:

1. Модуль, модуль арасындағы интерфейс түсінігі.

2. Модульдердің міндеті, модульді анықтаудың құрама бөлшегі.

3. Модуль объектісі, модульдік программалау мүмкіндіктері.

4. Автоматтық граматика және ақырлы автомат.

5. Берілген автоматты грамматикасы үшін ақырлы автоматтың көшу

графын құру және түрлендіру.

6. Процедуралық абстракциялар.

7. Тьюринг және Пост машиналары.

Модульдер және олардың қасиеттері

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

1. Процедуралық (құрылымдық)

2. Объектілі

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

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

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

Модуль деп – автономды түрде композицияланатын Бағдарламаның бірлікті айтамыз.

Модуль қажетті мәліметтерді жадтың қандайда бір жалпы облыстары арқылы немесе параметрлер көмегімен алуы және қайтаруы мүмкін. Модулдершге мынадай негізгі талаптар қойылады:

1. Дербес композициялау

2. Бір ғана ену нүктесі

3. Бір ғана шығу нүктесі

4. Вертикаль басқару принципіне сәйкес

5. Басқа модулдерді шақыру мүмкіндігі

6. Үлкен емес өлшем (елу, алпыс операторға дейін)

7. Шақырулар тарихына тәуелсіздік

8. Бір ғана іс -әрекет орындау

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

1. Жекелеген модулді және барлық бағдарламаны түсіну және сәйкесінше тестілеу, тексеру және жетілдіру соғұрлым жеңіл.

2. Қателердің пайда болу ықтималдығы соғұрлым аз.

3. ПЖ-ты програмистердің топтары арқылы құрып және қолдауды ұйымдастыру соғұрлым жеңіл болады.

Демек тәуелділіктің азаюы жобаның технологияның жоғарлауына алып келеді.

Модулдердің тәуелсіздігінің деңгейін 2 критериймен анықтайды:

1. Байланымдық

2. Байланыстылық

Модульдердің байланымдылығы. Байланымдылық модулдердің өзара тәуелділігінің шамасы болып табылады. Ол модулдердің бір-бірінен қаншалақты алшақ орналасқандығын анықтайды. Модулдерді басқасы жөнінде ешқандай мәлімет сақтамаған жағдайда оларды бір-біріне тәуелсіз деп айтады. Егер қандай да бір модуль басқа бір модуль жөнінде барынша көп ақпарат сақтаған болса, онда оларды жақсы байланымды модуль деп атаймыз. Модульдердің байланымдылығының 5 түрі бар:

1. Мәліметтер бойынша

2. Нұсқау

3. басқару

4. Жалпы мәліметтер облысы

5. Мазмұны бойынша

1.  Мәліметтері бойынша байланымды модульдер деп скаляр мәндер арқылы мәліметтер алмасатын модулдерді айтамыз. Тасымалданатын мәліметтердің саны аз болған жағдайда бұл тип ПЖ-тың технологиялылығының жоғары деңгейін қамтамасыз етеді.

2.  Нұсқалар бойынша байланым модульдердің құрылымдарына біріктірілген мәліметтер бойынша ақпарат алмасуын қамтамасыз етеді. Бұл түр де технологиялылықтың жоғарғы деңгейін қамтамасыз етуі мүмкін, бірақ алдыңғы түрге қарағанда оның деңгейі төмендеу, себебі, тасымалданатын мәліметтердің қандай да бір құрылымдарға “жасырылуы” модульдер арасындағы мөлдірлікті қамтамасыз ете алмайды.  

3. Басқару бойынша байланым кезінде бір модуль екіншісіне оның ішкі логикасын басқаруға арналған қандайда бір ақпараттық объектіні жібереді. Осылайша бағдарламалық жабдықтың жұмыс режимдерінің реттелуі іске асады. Мұндай реттеулер модульдердің өзара байланысын көрнектілігін төмендетіп, осының арқасында бағдарламалық жабдық технологиялылығының алдыңғы байланым түрлеріне қарағанда төмендеуіне алып келеді.

4. Жалпы мәліметтер бойынша байланым кезінде модулдер мәліметтердің жалпы облысымен жұмыс істейді деп есептелінеді. Байланыстың бүл түрін қолдануға болмайды, өйткені:

Ø бұл байланым түрін пайдаланатын бағдарламаларды түсінуге өте ауыр;

Ø жалпы мәліметтердің өзгерісіне алып келетін бір модульдегі қателер басқа модульдердің жұмыс істеуі барысында айқындалуы мүмкін, ал ол қателерді жоюды қиындатып жібереді;

Ø жалпы мәліметтерге сілтеме жасаған кезде модульдер нақты атауларды пайдаланады, ал бұл құрылатын ПЖ-тың икемділігін азайтады;

5. Мазмұны бойынша байланым жағдайында бір модульде басқаларының ішкі компоненттеріне сілтеме орналасады. Бұл - блоктық-иерархиялық көзқарасқа қайшы. Байланыстың бұл түрі бағдарламаның технологиялылығының ең төменгі деңгейін береді. Келесі кестеде байланыстың түрлі тәсілдерінің сараптамалық бағалануы берілген.

 

1-кесте. Байланым сипаттамалары

Байланым түрі Байланым балы Басқа модульдегі қателерге төзімділік Көрнекілік (түсініктілік) ¤згерту мүмкіндігі Қайта қолдану ықтималдылығы
Мәліметтері бойынша 1 Жақсы Жақсы Жақсы Жоғары
Нұсқа бойынша 3 Орта Жақсы Орта Орта
Басқару бойынша 4 Орта Нашар Нашар Төмен
Жалпы мәліметтер бойынша 6 Нашар Нашар Орта Төмен
Мазмұны бойынша 10 Нашар Нашар Нашар Төмен

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

Кейбір жағдайда модульдің байланымдылығын міндетті емес байланыстарды жою арқылы және қажетті байланыстарды жинақтау арқылы кемітуге болады. Мысалы ретінде объектілі-ориентирленген бағдарламалауды келтіруге болады. Мұнда көптеген параметрлердің орнына әдіс айқын емес түрде объект өрістері орналасқан құрылымның адрестерін, ал айқын түрде – қосымша параметрлерді алады. Нәтижесінде, модульдер нұсқа бойынша байланған болып шығады.

Модулдердің байланыстылығы. Байланыстылық – бір модульдің ішіндегі функционалдық және ақпараттық объектілердің өзара жалғасуының бекемділігінің өлшемі болып табылады. Егер байланымдылық модульдің бір-бірінен алшақтығының сапасын көрсетсе, ал байланыстылық – бір модульде пайдаланылатын элементтердің өзара байланысу дәрежесін сипаттайды. Бір модульде өзара күшті байланысқан элементтердің болуы модульдер арасындағы байланысты төмендетеді және сәйкесінше, модульдердің бір-біріне әсерін әлсіретеді. Ал осындай өзара күшті байлансықан элементтерді түрлі модульдерге орналастыру - модульдің арасындағы байланысты күшейтіп қана қоймай, олардың арақатынасын түсінуді де күрделендіріп жібереді. Әлсіз байланысқан элементтерді біріктіру де модульдердің технологиялылығын кемітеді, себебі мұндай элементтерді ойша басқару аса қиын.

Байланыстардың мынадай жеті түрі кездеседі:

Ø функционалдық;

Ø тізбектей;

Ø ақпараттық;

Ø процедуралық;

Ø уақытша;

Ø логикалық;

Ø кездейсоқ.

1. Функционалдық байланыс жағдайында (1,а-сурет) модульдің барлық объектілері бір іс-әрекетті (бір фукнцияны орындауға арналған амалдарды немесе бір функциямен байланысқан мәліметтерді) орындауға арналады. Элементтері функционалдық байланысқан модульдің нақты анықталған мақсаты болады. Оны шақырған кезде бір әрекет (мысалы, массивтың ең кіші элементін табатын көмекші бағдарлама) орындалады.

Мұндай модуль ең жоғарғы деңгейлі байланысқа ие, сондықтан бұл кезде ең жақсы технологиялық сапаға қол жеткізіледі, яғни тестілеу, жетілдіру және қолдау аса қарапайым түрде іске асады.

                

а)                                                ә)                                                        б)

                          в)                                                    г)                                                     ғ)

 

1-сурет. Модульдердің байланыстылығы: а – функционалдық; ә - тізбектей; б – ақпараттық;

                               в – процедуралық; г – уақытша; ғ – логикалық.

 

2. Функцияның тізбектей байланысуы жағдайында (1,ә-сурет) бір функцияның шығысы басқа бір функцияға алғашқы мәлімет ретінде қарастырылады. Әдетте мұндай модульдің бір ену нүктесі болады, яғни ол екі іс-әрекет орындайтын бір көмекші программаны сипатайды. Тізбекті функциялар қолданатын мәліметтер де тізбекті байланысқан деп есептеледі. Тізбектей байланысқан модульдерді екі немесе одан да көп модульдерге бөлуге болады. Олар тізбектей байланысуы да, функционалды байланысуы да мүмкін. Мұндай модуль бірнеше іс-әрекет орындайды және сәйкесінше, оның технологиялылығы алдыңғы түрге қарағанда нашарлау (тест ұйымдастыру қиындау, ал жетілдіру барысында модуль функцияларын ойша ажыратуғы тура келеді).

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

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

4. Бір процестің бөлімдері болып келетін функциялар немесе мәліметтер процедуралық байланысқан (1,в-сурет) деп есептеледі. Әдетте, егер модульде бағдарламаның альтернативті бөлімдерінің функциялары біріккен болса, онда функциялары процедуралық байланысқан модульдерді алуға болады. Процедуралық байланыс жағдайында модульдің жекелеген элементтері өте әлсіз байланысқан, өйткені олардың атқаратын іс-әрекеттері тек жалпы процестер арқылы байланысқан. Сәйкесінше, байланысудың бұл түрінің технологиялылығы алдыңғысынан төмен болып келеді.

5. Уақытша байланысқан функция (1,г-сурет) бұл функциялардың параллель немесе қандайда бір уақыт аралығында орындалытынын көрсетеді. Мәліметтердің уақытша байланысуы олар қандай да бір уақыт аралығында қолданылатындығын білдіреді. Мысалы, қандай да бір процесті инициализациялау кезінде орындалатын функциялар уақытша байланысқан. Уақытша байланысудың ерекшелігі – мұндай функциямен іске асырылатын іс-әрекеттер кез-келген ретпен орындалуы мүмкін. Функциясы уақытша байланысқан модульдердің құрамы өзгеру қабылетіне ие: оған жаңа іс-әрекеттер қосылуы немесе одан ескі і-әрекеттер шығарылып тасталуы мүмкін. Функцияны жетілдіру мүмкіндігі жоғары болғандықтан, бұл модульдің технологиялылығы алдыңғысына қарағанда төмендеу болып келеді.

6. Логикалық байланыс мәліметердің немесе функциялардың бір логикалық топқа бірігіуін қамтамасыз етеді (1,ғ-сурет). Мысалы, текстік ақпаратты өңдеу функциялары немесе бір типті мәліметтер. Функциялары логикалық байланысқан модуль бір әрекеттің ұқсас нұсқаларынан жиі пайдаланады. Мысалы, бүтін сандарды қосу немесе нақты сандарды қосу. Мұндай модульден әрдайым оның қандайда бір бөлімі шақырылады және бұл жағдайда шақырушы және шақырылушы модульдер басқару бойынша байланымды болады. Логикалық байланысқан компоненттері бар модульдердің жұмыс істеу принципін ұғыну уақытша байланысқан модульдерге қарағанда күрделірек, сондықтан олардың технологиялылығы алдыңғысынан төмен.

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

Төмендегі кестеде байланысу түрлерінің сараптамалық бағалануы бйынша сипаттамалары келтірілген.


Дата добавления: 2019-02-12; просмотров: 286; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!