Модульдер
Жоспар:
-
Модуль құрылымы
-
Модуль атауы және модульдердің бір-бірімен байланысы
-
Интерфейс бөлімі
-
Жүзеге асу бөлімі
-
Инициалдау бөлігі
Әдебиеттер:
1.А.Г.Гольцев «Объектно-ориентированное программирование и его реализация в языке Паскаль», Москва-2005
2. В.В.Фараонов «Турбо Паскаль 7.0», Москва-2001
3. Электронный учебник: «Введение в объектно-ориентированное программирование», 2006
1. Модуль құрылымы
Стандартты Паскальда программа бөліктерін жеке компиляциялап, орындалуы алдында қайта жинақтау механизмі қарастырылмаған. Бұған қосымша кез-келген объектті пайдалану алдынан міндеттті түрде сипатталуы қолданбалы программаларды әртүрлі библиотекасын дайындауды қиындатады, тіпті мүмкін етпейді. Дәлірегі мұндай библиотекалар стандартты Паскальда тек бастапқы тексттер күйінде ғана «өмір сүреді». Библиотекадағы әртүрлі процедуралардың мысалы, матрицалық алгебраның, математикалық статистиканың т.б. процедураларының үлкен тексттерін программист өзі ендіріп отыруы керек. Сондықтан да, Паскальдың коммерциялық компиляторын жасақтаушылар бұл тілге модульділігін жоғарылататын құралдарды енгізуге тырысты. Мұндай құралдың бірі сыртқы процедуралар мен функцияларды қолдануға рұқсат беру еді, ал олардың денесі стандартты EXTERNAL директивасымен алмастырылып қойылатын. Турбо Паскальды жасақтаушылар болса тілге тағы да модуль деп аталатын механизмді ендірді.
Модуль – бұл сипатталу бөлімінің түрлі компоненттерін өз ішіне алатын(типтер, константалар, айнымалылар, процедура мен функциялар) және инициалдау бөліміндегі қайсыбір операторларды да өз ішіне алу мүмкіндігі бар жеке компиляция жасалынатын программа бірлігі.
Модульдің интерфейс деп аталатын бөлімінде глобал типтер, константалар, айнымалылар және глобаль процедура мен функциялар сипатталады. Интерфейс бөлімінде сипатталғандарды басқа модульдерде және негізгі программаның кез-келген жерінде пайдалануға болады. Модуль механизмі енген соң стандартты Паскаль тілінің қасиеттері өте өзгерді. Модульдер қолданбалы программалардың библиотекасын жасақтаудың және модульді программалаудың қуатты құралы болып табылады. Модульдің маңызды ерекшелігі – Турбо Паскаль оның кодын жадының жеке сегментінде сақтауында. Сегменттің максимал ұзындығы 64 кбайттан аспайды, бірақ бірмезгілде пайдаланылатын модульдердің саны тек жалпы жадының көлемімен ғана шектеледі.
2. Модуль атауы және модульдердің бір-бірімен байланысы
Модуль атауы UNIT қызметші сөзінен басталып, одан соң модуль атауы жазылады. Турбо Паскаль ортасы дұрыс жұмыс істеуі және ірі программаларды жасақтауды жеңілдететін құралдарды пайдалана алу үшін модуль атауы модуль тексті жазылатын дисктік файлдың атауымен бірдей болуы керек. Мысалы, атау мынадай болса
Unit Global;
онда модуль тексті жазылған дисктік файлдың атауы Global.pas болуы керек. Модуль атауы басқа модульдермен және негізгі прграммамен байланыс жасау үшін пайдаланылады. Бұл байланыс мына қызметші сөз арқылы орнатылады
Uses <модулдер тз.>
Мұнда Uses қолданылады деген мағынаны білдіреді. <модульдер тз.> – байланыс орнатылатын модульдер тізімі. Мысалы:
Uses Crt,Graph, Global;
Егер Uses... жариялануы қолданылса, онда негізгі программаның сипатталу бөлімі осы сөзбен ашылуы керек. Модульдер басқа модульдерді қолдана алады. Uses сөзі бірден Interface сөзінен кейін не бірден Implementation сөзінен кейін, не екі жерде де жазылуы мүмкін (яғни Uses сөзін екі мәрте қолдануға рұқсат етіледі).
3. Интерфейс бөлімі
Интерфейс бөлімі Interface қызметші сөзімен ашылады. Бұл бөлімде модульдің басқа модульдер мен негізгі программада пайдалануға болатын барлық глобал объектілері жарияланады. Глобаль көмекші программалардың интерфейс бөлімінде тек атаулары ғана жарияланады. Мысалы:
Unit Cmplx;
Interface
Type
complex=record
re, im:real
end;
Procedure AddC(x,y:complex; var z:complex);
Procedure Mulc(x,y:complex; var z:complex);
Бұл программада complex типі және AddC, Mulc процедуралары глобал болып табылады. Интерфейс бөлімінде көмекші программаларды жариялау авоматты түрде жадының ұзақ (дальней) моделін қолданумен компиляцияланады. Негізгі программадан және басқа модульдерден көмекші прогарммаларға қолжеткізу осылайша жүзеге асады. Ескере кету керек, модульдің интерфейс бөлімінде жарияланған барлық константалар мен айнымалылар негізгі программаның глобал константалары мен айнымалылары сияқты Турбо Паскальдің ортақ берілгендер сегментіне компилятор арқылы жайғастырылады (сегменттің максимал ұзындығы 65536 байт). Жариялаудың түрлі бөлімдерінің пайда болуы және олардың саны қалауымызша болуы мүмкін. Егер интерфейс бөлімінде сыртқы көмекші программалар жарияланса, модульдің жүзеге асу бөлімінде олардың атауларынан кейін денелері жазылуы керек (яғни EXTERNAL қызметші сөзі). Егер интерфейс бөлімінде машиналық кодтағы көмекші программа жарияланса модульдің жүзеге асу бөлімінде оның атауынан кейін INLINE сөзі мен машиналық коды келтіріледі. Модульдің интерфейс бөлімінде алдын-ала сипатталуды қолдануға болмайды.
4. Жүзеге асу бөлімі
Жүзеге асу бөлімі IMPLEMENTATION қызметші сөзімен басталады және интерфейс бөлімінде жарияланған көмекші программалардың тексті жазылады. Мұнда модульүшін локал болатын объекттер – қосымша типтер, константалар, айнымалылар және блоктар, егер жүзеге асу бөлімінде қолданылатын болса онда белгілер де жариялануы мүмкін
Модульдің интерфейс бөлімінде жарияланған көмекші программаның атауы орындалу бөлімінде келтірілуі тиіс. Мұнда формальді айнымалылардың тізімін және функция типін көрсетпей тастап кетуге болады. Өйткені олар интерфейс бөлімінде сипатталған. Егер атау толық түрде жазылса, онда ол интерфейс бөлімінде жарияланған атаумен түгел бірдей болуы керек.
Unit Cmplx;
Interface
type
complex = record
re, im : real
end;
Procedure AddC (x, у : complex; var z : complex);
Implementation
Procedure AddC;
begin
z.re := x.re +Y.re;
z.im := x.im +y.im
end;
end.
Локал айнымалылар және константалар, сонымен бірге модульді компиляциялау нәтижесінде туындаған барлық программалық код жадының жалпы сегментіне орналастырылады (в общий сегмент памяти) .
5. Инициалдау бөлігі
Инициалдау бөлігі модульді аяқтайды. Инициалдау бөлігі BEGIN қызметші сөзінен басталады. Инициалдау бөлігі бос болуы да мүмкін, бұл жағдайда BEGIN –нен кейін бірден END. сөзі жазылады, немесе бүткілдей жоқ болуы мүмкін.
Инициалданатын бөлімде программа фрагменті боп табылатын орындалатын операторлар жазылады. Бұл операторлар басқаруды негізгі программаға бергенше орындалады және әдетте оның жұмысына дайындық үшін қолданылады. Мысалы, мұнда айнымалылар инициалдануы, қажет файлдар ашылуы, өзара байланыстары (коммуникациалық каналдар т.б. бойынша) орнатылуы мүмкін.
Unit FileText;
Interface
Procedure Print(s : string);
Implementation
var
f: text; const
name = 'output.txt'; Procedure Print;
begin
WriteLn(f, s)
end;
{ Начало инициирующей части: }
begin
assign(f, name);
rewrite(f);
{ Конец инициирующей части }
end.
Инициалдау бөлімін бос етуге кеңес берілмейді, одан да жазбаған дұрыс (begin end.-ті). Бос бөлімде бос оператор бар болады, програмамны іске қосқан кезде басқару осы операторға беріледі. Бұл оверлейлік программаларды құру кезінде қиындықтар туғызады.
Достарыңызбен бөлісу: |