1.1. Alqoritm anlayışı
Hər hansı hesablama xarakterli məsələnin həlli üçün nəzərdə tutulmuş
proqramın yazılması üçün ilk olaraq onun
həlli alqoritminin tərtib edilməsi tələb olunur.
Alqoritm - verilmiş
məsələnin həlli üçün lazım olan əməliyyatları müəyyən edən və onların hansı
ardıcıllıqla yerinə yetirilməsini bildirən formal yazılışdır. Məsələn, cəbri və
ya transendent tənliklərin həlli, natural ədədlərin sadə vuruqlara ayrılması,
matrislərin vurulması və s. alqoritmlər
hesab edilir. Onların əsasını ədədlər üzərində sadə riyazi əməllərin aparılması
təşkil edir və ədədi alqoritmlər adlanır.
Alqoritm latın sözü olub
“qayda-qanun” deməkdir. Bu sözü ilk dəfə
IX əsrin görkəmli Özbək riyaziyyatçısı Məhəmməd Əl Xarəzm işlətmişdir. O, onluq
say sistemində hesab əməllərinin qaydasını vermiş və qaydanı alqoritm
adlandırmışdır. Əl-Xarəzminin yazdığı elmi əsərlərin XII əsrdə latın dilinə
tərcümə olunması sayəsində avropalılar sonradan mövqeli say sistemi ilə tanış
olmuşdur [1, 2].
Alqoritm mümkün ilkin və aralıq verilənlərin bəzi yığımlarının
emalından başlanan və bu ilkin məlumatlara görə qoyulmuş şərtləri ödəyən nəticələrin
alınmasına yönəldilmiş hesablama prosesini müəyyən edir. Hesablama prosesi
termini həm də informasiyanın başqa növlərinin, məsələn, simvolik, qrafik və ya
səsli informasiyanın emalında da istifadə edilir.
Əgər hesablama prosesi nəticələrin alınmasıyla sona çatırsa, onda
ilkin məlumatların baxılan yığımına uyğun alqoritm tətbiq edilir. Əks təqdirdə,
alqoritm ilkin məlumatların yığımına yararsızdır. İstənilən tətbiq edilən
alqoritm aşağıdakı əsas xüsusiyyətlərə malikdir:
·
Nəticəlilik;
·
Müəyyənlik;
·
Diskretlilik;
·
Kütləvilik.
Nəticəlilik
əməliyyatların sonlu sayının mümkünlüyünü göstərir ki, onların yerinə
yetirilməsi axtarılan nəticəyə gətirib çıxara bilsin.
Müəyyənlik
istifadəçidən və tətbiq edilən texniki vasitələrdən asılı olmayaraq alınan
nəticələrin üst-üstə düşdüyünü göstərir.
Diskretlilik o
deməkdir ki, alqoritmin təsvir etdiyi proses ayrı-ayrı addımlar ardıcıllığına
bölünməli və bu bölgü elə olmalıdır ki, alqoritmin yazılışı bir-birindən dəqiq
ayrılmış göstərişlər şəklində olsun. Məsələn, “yolun kənarı ilə gedin” və yaxud
“kənar şəxslərin daxil olması qadağandır” kimi göstərişləri kəsilməz xarakterli
olduqları üçün alqoritm deyil, lakin resept əsasında dərman hazırlamaq və yaxud
bankomatdan pul çıxartmaq və bu kimi qaydalar diskret xarakterli olduqları üçün
alqoritmdir.
Kütləvilik ilkin
məlumatların konkret qiymətləriylə fərqlənən eyni tipli məsələlərin bütöv sinifinə
alqoritmin tətbiq edilmə imkanından ibarətdir [1,2].
Alqoritmin verilməsi üçün onun
aşağıdakı elementlərini təsvir etmək lazımdır:
·
Evklid alqoritmi istənilən iki
natural ədəd üçün ən böyük ortaq bölənin tapılmasına imkan verir və yaxud bir
məchullu xətti tənliyin həlli alqoritmi istənilən əmsallar üçün doğrudur;
·
Mümkün ilkin və aralıq məlumatlardan
ibarət obyektlər yığımı;
·
Alqoritmi yerinə yetirəni hesablama maşını da adlandırmaq olar, bu halda belə bir icraçı
kompyuterlərdir;
·
Alqoritm və verilənlər müxtəlif
proqramlaşdırma dillərində təsvir oluna bilər ki, bu dillərdə yazılmış ilkin
proqram mətni alqoritmin sonrakı avtomatik icrası üçün nəzərdə tutulmuşdur
Alqoritm həmişə konkret icraçı üçün nəzərdə tutulur.
Bu halda, belə
bir icraçı kompyuterdir. Onun
icrasını təmin etmək üçün alqoritm kompyuterin
anlayacağı dildə, yəni proqramlaşdırma dilində
təsvir olunmalıdır.
Proqram alqoritmin və verilənlərin bir neçə proqramlaşdırma dilində təsvirini bildirir ki,
bu dillər də onların sonrakı avtomatik
icrası üçün nəzərdə
tutulmuşdur.
. Alqoritmin
təsvir vasitələri
Alqoritmlərin əsas təsvir vasitələrinə
bilavasitə aşağıdakıları aid etmək olar:
1. Söz-düsturlarla;
1. Söz-düsturlarla;
2.
Struktur və ya blok-sxemlə;
3.
Qraf-sxemlərin köməyi ilə;;
4.
Petri şəbəkələri ilə .
Proqram tərtib
edilməzdən
əvvəl ən çox söz-düstur və blok-sxem vasitələrindən istifadə
olunur. Bəzən aşağı səviyyəli
proqramlaşdırma dillərində (məsələn, Assembler) proqram tərtib edilərkən bəzi yüksək səviyyəli proqramlaşdırma
dilinin konstruksiyasından istifadə edilərək alqoritmlərin
proqramları yazılır. Alqoritmlərinin təsviri üçün mürəkkəb proqram sistemindən
istifadə etmək daha rahatdır. Belə ki, ƏS-in
funksionallaşdırma
prinsiplərini
təsvir etmək üçün yüksək səviyyəli proqramlaşdırma
dillərindən biri olan Alqol-dan istifadə edilmişdir. Söz-düstur vasitəsilə
alqoritm əməliyyatın ardıcıllığını müəyyən edən addımlar üzrə düsturlu mətn
şəklində yazılır.
Məsələn tutaq ki,
Məsələn tutaq ki,
у = 2а – (х+6),
ifadənin
qiymətini tapmaq lazımdır.
Bu ifadənin hesablanması alqoritminin söz və düsturlarla təsviri aşağıdakı kimi
yazıla bilər:
1. a
və x-in qiymətini daxil etmək;
2. x
və 6-nı toplamaq;
3. a
-nı 2-yə vurmaq;
4. 3-cü
addımdakı nəticədən (yəni 2a –dan) 2-ci addımda alınan
nəticəni ( yəni x +6 cəmini)
çıxmaq;
5. 4-cü
addımda alınan nəticəni (yəni y) hesablamanın nəticəsi kimi çıxışa
vermək;
6. Alqoritmin
sonu.
Blok-sxem
təsviri zamanı alqoritmi vizual olaraq müəyyən
həndəsi fiqurlarla (bloklarla), bir-birləri ilə şaquli və ya üfüqi xətlərlə
birləşmiş oxlarla təsvir edilir. Bloklarda hərəkətlərin ardıcıllığı yazılır.
Alqoritmin
başqa təsvir üsulları ilə müqayisədə blok-sxem üsulu bir sıra üstünlüklərə
malikdir. Bu üsulla təsvir daha əyani olur: hesablama prosesinin hər əməliyyatı
qeyd olunduğu kimi ayrı-ayrı həndəsi fiqurlarla təsvir edilir. Bundan başqa,
alqoritmin qrafik təsviri hesablama prosesinin ayrı-ayrı mərhələlərinin
təkrarlanmasını və yaxud bu və digər
şərtdən asılı olaraq məsələnin həlli alqoritminin budaqlanmasını əyani
şəkildə göstərir [2, 3].
Proqramların
tərtibi müəyyən tələblərə uyğun olmalıdır. Hal-hazırda proqram sənədləşməsinin
vahid sistemi (PSVS - Professional
Switch Vision Suite) qüvvədədir ki, bu da proqramların və proqram sənədlərinin
hazırlanması və tərtibi qaydalarını müəyyən edir. PSVS-də həmçinin, blok-sxem alqoritmlərinin tərtibi
qaydaları da müəyyən edilmişdir (10.002-80 PSVS və 10.003-80 PSVS dövlət
standartı).
Verilənlərin
emalı əməliyyatları və məlumat daşıyıcıları blok-sxemdə müvafiq bloklarla
təsvir edilir. Blokların düzülüş üzrə çox hissəsi düzbucaqlı dördbucağın
tərəfləri a və b ilə işarələnmişdir. Ayrı-ayrı bloklar üçün a və b arasında mümkün
nisbət 1:2-yə bərabərdir. Eyni bir sxem daxilində eyni ölçülü bloklar təsvir
etmək tövsiyə edilir. Bütün bloklar nömrələnir. Əsas blokların növləri və
təyinatı cədvəl 1-də göstərilmişdir.
Adlar
|
İşarələr
|
Funksiyalar
|
Düzbucaqlı |
![]() |
Qiymətin
dəyişməsilə nəticələnən əməliyyat və ya əməliyyatlar qrupunun icrası,
verilənlərin təsvir edilmə və ya yerləşmə forması. |
Paraleloqram |
![]() |
Verilənlərin
emalının (daxil etmə) və ya emal nəticələrinin (çıxış) təsviri üçün yararlı
formaya salınması. |
Romb |
![]() |
Bəzi
şərtlərdən asılı olaraq alqoritmin icrasının istiqamətinin seçimi. |
Əvvəlcədən
təyin edilmiş proses |
![]() |
Daha
əvvəl yaradılmış və ayrı yazılmış proqramların (alt proqramların) istifadəsi. |
Sənəd |
![]() |
Verilənlərin
çapı |
Maqnit
diski |
![]() |
Verilənlərin
giriş-çıxış daşıyıcısı kimi maqnit disk xidmət edir. |
Start-stop |
![]() |
Verilənlərin
emal prosesinin başlanğıcı, sonu və dayandırması. |
Birləşdirici |
![]() |
Blokları
birləşdirən kəsilmiş xətlər arasındakı əlaqə göstəricisi. |
Səhifəarası
birləşdiricisi |
![]() |
Müxtəlif
səhifələrdə yerləşmiş blokları birləşdirən kəsilmiş xətlər arasındakı əlaqə
göstəricisi. |
Şərh |
![]() |
Sxemin
elementi və izahı arasında əlaqə. |
Alqoritmlərin struktur sxemləri
İstənilən hesablama
prosesi elementar alqoritmik strukturların kombinasiyası kimi təsvir edilə
bilər. Müvafiq olaraq, verilmiş proqram üzrə kompyuterdə yerinə yetirilən
hesablama proseslərini üç əsas növə bölmək olar:
• xətti;
• budaqlanan;
• dövri.
Xətti
hesablama prosesi bir neçə ardıcıl əməliyyatlardan ibarət olur və onlar
yazıldığı ardıcıllıqla da icra olunur. Sxemdə bu əməliyyatları əks etdirən
bloklar xətti ardıcıllıqla yerləşirlər [3, 4].
Xətti
hesablama prosesləri düsturlar üzrə hesablamalar aparılarkən baş verir ki, bu zaman konkret ədədi
verilənlər məlum olmalıdır və bu verilənlərə görə müvafiq məsələ hesablamaları yerinə yetirilir. Şəkil 1- də a – da

düsturuna uyğun Z hesabi ifadənin hesablanma prosesini müəyyən edən
xətti alqoritmin blok-sxem üsulu ilə təsviri verilmişdir.
2.1. Proqramlaşdırmanın inkişafının qısa tarixi
Müxtəlif proqramların və sistemlərin
yaradılması heç də asanlıqla başa gəlməmişdir. Proqramların və
proqramlaşdırmanın inkişaf tarixini qısaca nəzərdən keçirək.
XX əsrin 50-ci illərində kompyuterlərin yaranması ilə əlaqədar olaraq
proqramlaşdırma dilləri inkişaf etməyə başladı [1]. Hesablama maşınları bu
dövrdə çox baha başa gəlirdi, buna görə də yazılan proqram kodunun yüksək
səviyyədə olması tələb olunurdu. Belə proqram kodu Assembler dilində yazılmağa
başladı. 50-ci illərin ortalarında Con Vamer Bekusun rəhbərliyi altında IBM
firması üçün FORTRAN (FORmula TRANslator) alqoritmik dili hazırlandı. Fortran
dili yaradılana qədər yalnız hesabi
ifadəni maşın koduna çevirən proqramlaşdırma dili var idi. FORTRAN dili vasitəsilə
digər dillərdən fərqli olaraq keçid və giriş-çıxış operatorlarından istifadə
etmək mümkün oldu [3,4,5].
50-ci illərin sonunda FORTRAN dilinə alternativ olaraq Piter Naurun
rəhbərliyi altında ALGOL (ALGOrithmic Language) dili işləndi. Bu dilin
üstünlüyü ondan ibarət idi ki, burada istifadə olunan işarələr riyaziyyatda
qəbul olunan işarələrə yaxın idi.
PL/1(Programming Language) dilinin ilk versiyası
60-cı illərin əvvəlində meydana çıxmağa başladı. Bu dildə olan imkanlar FORTRAN dilində olan imkanlardan cox idi. Bu dillə paralel COBOL (COBOL - Common Oriented Business Language) dili də yaranmağa başladı.
60-cı illərin əvvəlində meydana çıxmağa başladı. Bu dildə olan imkanlar FORTRAN dilində olan imkanlardan cox idi. Bu dillə paralel COBOL (COBOL - Common Oriented Business Language) dili də yaranmağa başladı.
60-cı illərin axırında Nayard Dalın rəhbərliyi altında Simula-67 dili
işləndi, bu dildə sinif anlayışından istifadə edildi. Sinif dedikdə, obyektləri
təsvir etmək üçün istifadə edilən xüsusi verilən tipi başa düşülür.
70-ci illərin ortasında İsveçrə alimi Niklaus Virt Paskal dilini
təklif etdi və bu dildən geniş şəkildə istifadə edilməyə başlandı. Paskal
dilindən prosedurlu proqramlaşdırmanı öyrənmək üçün istifadə edilməyə başlandı.
Paskal dili riyaziyyatçı, fizik,
ədəbiyyatçı və filosof olan məşhur fransız alimi Blez Paskalın şərəfinə adlandırılmışdır.
Paskal dilindən ali məktəblərdə daha cox istifadə olunur[4].
1979-1980-cı
illərdə Ada dili (Ada Lableysin şərəfinə adlandırılmışdır) yaradıldı. Ada dili
strukturlu, modullu, obyekt yönümlü proqramlaşdırma dilidir. Bu dil o dövr üçün
yüksək səviyyəli proqramlaşdırma dili hesab olunurdu.
Universal dil olan C 70-ci illərin ortalarında Denis Ritçi və Ken
Tompson tərfindən yaradıldı. Bu standart
prosedurlu sistemli proqramlaşdırma dili çox populyar oldu. Bu dil əsasında
Java dili yaradıldı.
İnternetdə proqramlaşdırma vasitələri – bu veb-səhifələrin təsviri
dilləri və web resurslarla işləmə vasitələridir. Web səhifələrin təsviri
dilindən istifadə edərək brauzerlə
işləmək mümkündür.
PHP (Hypertext Processor) – Web proqramlaşdırma dilidir, HTML
səhifələrinin dinamik generasiyası üçün istifadə olunur.
Hal-hazırda müxtəlif tipli məsələlər üçün müxtəlif proqramlaşdırma
dillərindən istifadə olunur:
·
Elmi hesablamalar üçün (C++, FORTRAN, Pascal, Java);
·
Sistemli proqramlaşdırma üçün (C++,
Java);
·
İnformasiyanın işlənməsi (C++, COBOL, Java);
·
Verilənlər bazasının idarəedilməsi (FoxPro,
dBase, SQL, Delphi) ;
·
Süni intellekt (LISP, Prolog);
·
Nəşriyyat sahəsində (Postscript, TeX);
·
Məsafəli informasiyanın işlənməsi
(Perl, PHP, Java, C++, SQL);
·
Şəbəkə mühitində sənədlərin
işlənməsi (HTML, XML).
Kompilyator – alqoritmik
dildə yazılmış mətni maşın əmrlərindən ibarət olan mətnə çevirən proqramdır.
Translyator
– bir dildə yazılmış mətni digər dildə yazılmış mətnə çevirən proqramdır.
Test – proqram üçün giriş verilənlər yığımıdır,
həmçinin bütün nəticələrin dəqiq
təsvirini verir, belə ki, proqram bu
verilənlərlə işləməlidir.
Proqramın testləşdirilməsi dedikdə, kompyuterdə
proqramın işləmə qabiliyyətinin yoxlanılması nəzərdə tutulur [5].
Testləşdirmə - səhvlərin tapılması faktının aşkar olunması üçün proqramın yerinə
yetirilməsidir.
2.2.
Kompyuterdə məsələlərin hazırlanma və həlli mərhələləri
Kompyuterdə müxtəlif xarakterli
məsələləri, o cümlədən elmi-mühəndislik, sistem proqram
təminatının hazırlanması, təhsil, istehsal prosesinin idarəçiliyi və s. kimi
məsələləri həll etmək olar. Kompyuterdə elmi-mühəndislik məsələlərinin
hazırlanma və həlli prosesində aşağıdakı mərhələləri ayırd etmək olar:
Ø məsələnin qoyuluşu;
Ø məsələnin riyazi təsviri;
Ø həll olunma metodunun seçilməsi və əsaslandırılması;
Ø hesablama prosesinin alqoritmləşdirilməsi;
Ø proqramın tərtib edilməsi;
Ø proqramın sazlanması;
Ø kompyuterdə məsələnin həlli və nəticələrin təhlili.
Digər sinif məsələlərində bəzi
mərhələlər olmaya da bilər, məsələn, sistem proqram təminatının hazırlaması
məsələlərində riyazi təsvir yoxdur. Sadalanan mərhələlər bir-biri ilə bağlı
olur. Məsələn, nəticələrin analizi proqrama, alqoritmə və ya hətta məsələnin
qoyulmasına dəyişikliklərin daxil etməsinə ehtiyac olduğunu göstərə bilər. Belə
dəyişikliklərin sayının azaldılması üçün hər mərhələdə sonrakı mərhələlərdə
qoyulan tələbləri imkan daxilində nəzərə almaq lazımdır. Bəzi hallarda,
müxtəlif mərhələlərin arasında, məsələn, məsələnin qoyuluşu ilə onun həlli
metodunun seçilməsi arasında, alqoritmin tərtib edilməsi ilə proqramlaşdırma
arasında əlaqə o qədər sıx ola bilər ki, bu halda onların bölünməsi çətin olur [6].
Məsələnin
qoyuluşu.
Bu mərhələdə məsələ həllinin hədəfi formalaşır və onun məzmunu təfərrüatı ilə
təsvir edilir. Məsələdə istifadə edilən bütün ölçülərin xarakter və mahiyyəti
təhlil edilir və həll olunma şərti təyin edilir. Məsələnin qoyulmasının
düzgünlüyü vacib şərtdir, çünki ondan məsələnin mərhələləri əhəmiyyətli
dərəcədə asılıdır.
Məsələnin
riyazi təsviri.
Bu mərhələ məsələnin riyazi cəhətdən formalaşmasıyla səciyyələnir ki, burada
nəticəni müəyyən edən ölçülər arasındakı mövcud nisbətlər riyazi düsturlar
vasitəsi ilə ifadə edilir. Müəyyən dəqiqliklə, ehtimallarla və məhdudiyyətlərlə
məsələnin riyazi modeli belə formalaşır. Bu halda məsələlərin həll olunma xüsusiyyətlərindən
asılı olaraq riyaziyyatın və digər fənlərin müxtəlif bölmələrindən istifadə
edilə bilər.
Riyazi
model ən azı iki tələbi ödəməlidir: reallıq və həyata keçirilə bilən. Reallıq
dedikdə, tədqiq edilən hadisənin ən əhəmiyyətli xüsusiyyətinin düzgün modellə
əks edilməsi anlaşılır. Məsələnin həlli ikinci dərəcəli detallardan yayınmaqla
şüurlu abstraksiya vasitəsilə reallaşdırılma yolu ilə əldə edilir.
Tələb edilən resursların mümkün xərcləri daxilində sərf olunmuş vaxt
çərçivəsində vacib hesablamaların praktik aparılması imkanı reallaşdırıla
bilmənin şərtidir.
Həll
olunma metodunun seçilməsi və əsaslandırılması. Məsələlər onun xüsusiyyətləri nəzərə alınmaqla
konkret metodların köməyi ilə həll olunmalıdır. Öz-özlüyündə məsələnin riyazi
təsvirini çox zaman maşın dilinə çevirmək çətin olur. Həll olunma metodunun
seçilməsi və istifadəsi məsələnin həllini konkret maşın əməliyyatlarına gətirib
çıxarmağa imkan verir. Metod seçiminin əsaslandırılması zamanı müxtəlif
amilləri və şərtləri, həmçinin hesablamaların dəqiqliyini, kompyuterdə məsələnin həll olunma müddətini, tələb edilən
yaddaş həcmini və s. nəzərə almaq lazımdır. Eyni məsələni müxtəlif metodlarla
həll etmək olar, bu halda hər bir metod çərçivəsində müxtəlif alqoritmlər
təşkil etmək olar.
Hesablama
prosesinin alqoritmləşdirilməsi. Bu mərhələdə seçilmiş metoda uyğun olaraq məsələnin
həlli alqoritmi tərtib edilir. Verilənlərin emal prosesi ayrı-ayrı, nisbətən
sərbəst bloklara bölünür, blokların icrasının ardıcıllığı müəyyən edilir.
Alqoritmin blok-sxemi hazırlanır [6].
Proqramın
tərtib edilməsi.
Proqram tərtib edilərkən məsələnin həllinin alqoritmi konkret proqramlaşdırma
dilinə çevrilir. Proqramlaşdırma üçün adətən, yüksək səviyyəli dillər istifadə
olunur, buna görə tərtib edilmiş proqram onun maşın dilinə çevrilməsini tələb
edir. Belə çevrilmədən sonra artıq müvafiq maşın proqramı yerinə yetirilir.
Proqramın
sazlanması.
Sazlanma proqramdakı sintaksis və məntiqi səhvlərin aşkarlanması və aradan
qaldırılmasından ibarətdir.
Proqramın
sintaksis yoxlanması zamanı bu dildə qəbul edilmiş düzülüş və ya yazılış
qaydaları nöqteyi-nəzərindən yolverilməz konstruksiya və simvolların
uyğunluqları translyatorla müəyyənləşdirilir. Proqramın səhvləri haqqında
xəbərlər proqramçıya çatdırılır, bu halda belə xəbərlərin çatdırılma növü və
forması istifadə edilən dilin növündən və translyatorun versiyasından asılıdır.
Sintaksis
səhvlərin aradan qaldırılmasından sonra iş prosesində konkret ilkin
məlumatlarla proqramın işinin məntiqi yoxlanılır. Bunun üçün xüsusi metodlar
istifadə olunur, məsələn, proqramda nəzarət nöqtələri seçilir ki, bunlar üçün
də aralıq nəticələri əllə hesablanır. Bu nəticələr sazlanmış proqramın
istifadəsi zamanı bu nöqtələrdə kompyuterlə alınan qiymətlərlə tutuşdurulur.
Bundan başqa, səhvlərin axtarışı üçün sazlama mərhələsində xüsusi əməlləri
yerinə yetirən sazlayıcılar istifadə edilə bilər, məsələn, ayrı-ayrı
operatorların və ya proqramın bütöv bir fraqmentinin silinməsi, əvəzedilməsi və
ya yeniləşdirilməsi, verilmiş dəyişənlərin qiymətlərinin çıxarılması və ya
dəyişdirilməsi.
Kompyuterdə
məsələnin həlli və nəticələrin təhlili. Proqramın sazlanmasından sonra
tətbiqi məsələnin həll edilməsində ondan istifadə etmək olar. Bu halda, adətən,
ilkin məlumatların müxtəlif yığımları üçün məsələlər kompyuterdə yerinə
yetirilir. Alınan nəticələr məsələni qoyan mütəxəssis və ya istifadəçi
tərəfindən təhlil edilir.
Uzun
müddətli istifadə üçün hazırlanmış proqramı bir qayda olaraq, icraya hazır
şəkildə kompyuterdə quraşdırılır. İstifadəçi üçün təlimat sənədləri də proqrama
əlavə edilir.
Əksər
hallarda proqram quraşdırılarkən, əsas fayllardan başqa, onun gələcək
istifadəsi üçün lazım olan müxtəlif yardımçı proqramlar (utilitlər, məlumat
kitabçaları, kökləyicilər və s.), həmçinin müxtəlif növ mətn, qrafik, səsli və
digər proqramlar quraşdırılır.
2.2.1. Proqramların
kompilyasiya və interpretasiyası
Kompyuter bilavasitə proqramları maşın
proqramlaşdırma dilində yerinə yetirir. Bu halda proqram kompyuterin
ayrı-ayrı əmrlər yığımından təşkil edilir. Bu əmrlər kifayət qədər
"sadədir", məsələn, toplama, vurma, müqayisə və ya ayrı-ayrı
məlumatların göndərilməsi. Hər bir əmrdə hansı əməliyyatın yerinə yetiriləcəyi
haqda, hansı operatorlarla hesablamaların aparılacağı və nəticənin harada
(hansı ünvanda) yerləşdiriləcəyi haqda məlumat (əməliyyatın kodu) olmalıdır [3].
Maşın dilləri ilk proqramlaşdırma
dilləridir. Bu dillər, adətən sistem proqramlarının hazırlaması üçün istifadə
olunur, bu halda ən çox xüsusi simvolik dillər — müvafiq maşın dillərinə yaxın
Assembler dili tətbiq edilir. Məsələləri daha çox ümumi xarakterli ifadələrlə
izah və həll etmək proqramçıya məxsusdur. Buna görə proqramlaşdırma inkişaf
etdikcə həll edilən məsələ təsvir edilərkən daha yüksək səviyyəli dillər
meydana çıxdı. Alqoritmik dillər,
məsələn, Paskal, C, Beysik, Fortran, PL/1 və s. onların nəzəri əsasını təşkil
edir.
Yüksək
səviyyəli dildə yazılmış proqramın müvafiq maşın proqramına çevrilməsi üçün dil
prosessorlarından istifadə olunur. Dil prosessorlarının iki növü var:
interpretator və translyatorlar.
İnterpretator — ilkin proqramı qəbul edən
proqram olub, giriş dilinin konstruksiyalarının tanınması daxilində həmin
konstruksiyalarla təsvir edilən əməliyyatları reallaşdırır.
Translyator — ilkin proqramı qəbul edən
proqram olub, çıxışda obyekt proqramlaşdırma dilində yazılan proqramı əmələ gətirir.
Xüsusi hallarda obyekt dili qismində maşın dili çıxış edə bilər və
translyatorun çıxışında alınmış proqramı dərhal yerinə yetirmək olar.
Ümumiyyətlə, obyekt dilinin maşın və ya ona yaxın (avtokod) dil olmağı mütləq
deyil. Obyekt dili qismində bəzi aralıq dillər də çıxış edə bilər.
Giriş dili kimi istifadə edilən
və maşın dilinə yaxın translyator
(avtokod və ya Assembler dili) ənənəvi olaraq Assembler adlanır. Yüksək
səviyyəli dildəki translyator kompilyator adlandırılır.
Proqramlaşdırma dillərinin
təsnifatının ən əhəmiyyətli əlamətlərindən biri də onların bu əsas stillərdən
birinə aid olmasıdır: prosedur, funksional, məntiqi və obyekt-yönümlü.
Prosedur
proqramlaşdırma. Prosedur
(imperativ) proqramlaşdırma ənənəvi EHM-in arxitekturasını əks etməsidir. Bu
arxitektura 40-cı illərdə Con Fon Neyman tərəfindən təklif edilmişdi.
"Tyurinq maşını" adlanan alqoritmik sistem prosedur
proqramlaşdırmanın nəzəri modelidir [3,4,5]. Prosedur proqramlaşdırma dilində
proqram məsələ həllinin prosedurunu verən operatorların ardıcıllığından
ibarətdir. Yaddaş sahələrinin tərkibinin dəyişməsinə xidmət edən mənsubetmə
operatoru əsas funksiya daşıyır. Tərkibi proqram operatorları tərəfindən
yenilənən qiymətlərin saxlamasının yaddaş konsepsiyası imperativ
proqramlaşdırmada fundamental rol oynayır. Proqramın yerinə yetirilməsi
yaddaşın ilkin vəziyyətini dəyişmək məqsədi ilə, yəni ilkin məlumatların
qiymətlərini nəticələrə çevirmək üçün operatorların yerinə yetirilmə
ardıcıllığına xidmət edir. Beləliklə, proqramçı nöqteyi-nəzərindən proqram və
yaddaş var, birinci sonuncunun tərkibini ardıcıllıqla yeniləyir. Prosedur
dillər aşağıdakı xüsusiyyətlərlə səciyyələnir:
§ yaddaşın
idarəolunma zəruriliyi, xüsusən dəyişənlərin
təsviri;
§ simvollu
hesablamalar üçün imkanların məhdudluğu;
§
ciddi riyazi əsasın yoxluğu;
§ ənənəvi
EHM-də reallaşdırmanın yüksək effektivliyi.
Prosedurlu dilin ən əhəmiyyətli
təsnifat əlamətlərindən biri də onun səviyyəsidir. Proqramlaşdırma dilinin
səviyyəsi onun konstruksiyasının semantik həcmilə və proqramçıya istiqamətlənmə
dərəcəsilə təyin edilir. Proqramlaşdırma dili insan və hesablayıcı maşın
tərəfindən aparılan müxtəlif növ məsələnin həlli metodları arasındakı
uyğunsuzluğu qismən ləğv edir. Dil nə qədər
insana yönəldilmişdirsə, o qədər də onun səviyyəsi yuxarı olur. Proqramlaşdırma
dillərini səviyyə artımı sırasıyla səciyyələndirək.
İkilik dil bilavasitə maşın dilidir.
Hal-hazırda belə dillər proqramçılar tərəfindən demək olar ki, istifadə
edilmir.
Assembler dili —maşın dilində yazılmış
proqramların asan oxunan simvolik formada təqdim etmək üçün nəzərdə
tutulmuşdur. Bu dil proqramçıya əməliyyatların mnemonik kodlarından istifadə
etməyə, yaddaş sahələrinə və oyuqlara rahat adlar qoymağa, həmçinin ən rahat
ünvanlaşdırma sxemlərini verməyə imkan verir.
Makroassembler dili makrovasitələrin əlavə edilməsilə
Assembler dilinin genişlənməsidir. Onların köməyilə proqramda makrotəyinetmə
parametrlərilə təlimat ardıcıllığını təsvir etmək olar. Daha sonra proqramçı
arqumentlərlə təchiz edilmiş makroəmrlərdən istifadə edə bilər. Makroəmrlər
proqramın hazırlanması prosesində avtomatik olaraq makrogenişlənmə ilə əvəz
edilir. Makrogenişlənmə arqument parametrlərinin yerinə qoyulmuş
makrotəyinetmədən təşkil olunmuşdur. Başqa sözlə desək, makroassembler dili
baza təlimatlarının ardıcıllıqları kimi daha güclü yeni təyinetmə əmrlər
vasitələrini təqdim edir ki, bu da onun səviyyəsini bir qədər yüksəldir. Assembler
və Makroassembler dilləri EHM avadanlığının bütün imkanlarından istifadə etmək və proqramın tələb edilən
yaddaş həcmi üzrə yerinə yetirilən işin effektiv alınması məqsədi ilə peşəkar
sistem proqramçı tərəfindən tətbiq edilir. Bu dillərdə, adətən, sistem proqram
təminatının tərkibinə daxil olan nisbətən kiçik proqramlar işlənir: drayverlər,
utilitlər və s.
C proqramlaşdırma dili ilk dəfə 70-ci illərin əvvəllərində UNIX
əməliyyat sisteminin reallaşdırması üçün hazırlanmışdı. Sonralar isə bu dil
sistem və tətbiqi proqramçılar arasında məşhurlaşmağa başladı. Hal-hazırda bu
dildən geniş istifadə olunur. C dili
proqramın qısalığını təmin edən sintaksisə malikdir, kompilyatorlar isə
effektiv obyekt kodunu yaratmağa qadirdir [7]. C dilinin ən əsas
xüsusiyyətlərdən biri də ifadə və operator arasındakı fərqləri aradan
qaldırmaqdan ibarətdir, bu isə onu funksional dillərə daha da yaxınlaşdırır.
İfadə, əsasən əlavə mənsubetmə təsirinə malik ola, həmçinin operator kimi də
istifadə oluna bilər. Eləcə də prosedur və funksiyalar arasında dəqiq sərhəd
olmur, bundan başqa, prosedur anlayışı ümumiyyətlə daxil edilmir.
Basic (Beyzik) Beginners All-purpose Symbolic
Instruction Code) —proqramlaşdırmaya yeni başlayanların istifadəsi üçün 1964-cü
ildə hazırlanmış sadə proqramlaşdırma dilidir. O hesablayıcı maşınla insanın
bilavasitə ünsiyyəti üçün hazırlanmış ən sadə
dildir. Buna görə də, əvvəllər işlər interpritatorların köməyilə interaktiv
rejimdə aparılırdı. Hal-hazırda bu dil üçün həm də kompilyatorlar var. Basic-də
qoyulmuş konsepsiyalara əsasən, ciddiliyi və quruluşu baxımından bu dil Pascal
dilinin antipodudur. Xüsusən də onda susmaya görə müxtəlif qaydalar geniş
yayılmışdır, bu da belə tip proqramlaşdırma dillərinin əksəriyyətində mənfi
xüsusiyyət hesab edilir. Basic geniş
yayılmış və xüsusilə də yeni başlayan proqramçılar arasında çox məşhurdur. Bu
dilin bir çox dialekti mövcuddur. Basic başqa dillərdən bir çox konsepsiya və
yenilikləri fəallıqla mənimsəyir. Buna görə o kifayət qədər dinamikdir və onun
səviyyəsini birmənalı şəkildə müəyyənləşdirmək olmaz.
Pascal (Paskal) tətbiqi proqramçıların arasında
istifadə edilən ən məşhur prosedurlu proqramlaşdırma dillərindən biridir.
1970-ci ildə hesablayıcı texnika sahəsində İsveçrə mütəxəssisi, professor
N.Virtom tərəfindən hazırlanmış bu dil fransız riyaziyyatçısı və fiziki
B.Paskalın şərəfinə adlandırılmışdır və müəllifin fikirinə görə,
proqramlaşdırmanı öyrənmək üçün nəzərdə
tutulurdu. Ancaq bu dil o qədər uğurlu alındı ki, hesablama və
informasiya-məntiqi xarakterli məsələlərin həll olunmasında sistem və tətbiqi
proqramçıların əsas alətlərindən birinə çevrildi. 1979-cu ildə dilin təsvirinin
layihəsi - Pascal BS6192 proqramlaşdırma dilinin Britaniya standartı
hazırlandı. Bu dil də İSO 7185 beynəlxalq standartına çevrildi.
"İntizamlı"
proqramlaşdırmanın əsası kimi baxılan və bunun da nəticəsində bir çox dillərin
yaradıcıları tərəfindən mənimsənilmiş Pascal dilində bir sıra konsepsiyalar
reallaşdırılmışdır. Pascal dilinin mühüm əlamətlərindən biri də struktur
proqramlaşdırma konsepsiyasının ardıcıl və kifayət qədər tam
reallaşdırılmasıdır. Bu, nəinki idarəetmə proqramının fraqmentləri arasında
əlaqələrin nizama salması yolu ilə, həm də verilənlərin strukturlaşdırılması
hesabına həyata keçirilir. Bundan başqa, həmin dildə mövcud məlumat tiplərinin
əsasında yeni tip məlumatların təyin olunma konsepsiyası reallaşdırılmışdır. C
dilindən fərqli olaraq, bu dil, ciddi tipləşdirilmişdir. Pascal aşağıdakılara
görə səciyyələnir:
·
yüksək
səviyyə;
·
geniş
imkanlar;
·
quruluş, sadəlik və müxtəsərlik;
·
effektiv
və etibarlı proqramların yazılışına imkan verilməsi;
·
reallaşdırmanın yüksək
effektivliyi.
Pascal dilinin Borland Pascal və
Turbo Pascal kimi versiyaları proqramçılar tərəfindən geniş istifadə olunur.
2.3.
Proqramlaşdırmanın stilləri
Proqramlaşdırma dillərinin
təsnifatının ən mühüm əlamətlərindən biri onlar aşağıdakı əsas stillərdən
birinə mənsub olmasıdır: prosedur, funksional, məntiqi və obyekt yönümlü
[3,4,5].
Prosedur (imperativ)
proqramlaşdırma
– 40-cı ildə Con Fon Neyman tərəfindən təklif olunan EHM-lərin arxitekturasına
əsaslanır. Onun nəzəri modelı kimi “Tyurinq maşını” adlanan alqoritmik sistem
götürülür.
Proqramın yerinə yetirilməsi
yaddaşın ilkin vəziyyətini dəyişmək məqsədi ilə, yəni ilkin məlumatların
qiymətlərini nəticələrə çevirmək üçün operatorların ardıcıllığına xidmət edir.
Beləliklə, proqramçı nöqteyi-nəzərindən proqram və yaddaş mövcuddur, birinci sonuncunun
tərkibini ardıcıllıqla yeniləyir.
Funksional proqramlaşdırma. Funksional (applikativ)
proqramlaşdırmanın mahiyyətini A.P.Erşov təyin etmişdir "yalnız funksiya
çağırışı əməliyyatının yerinə yetirildiyi proqramların tərtib edilməsində
proqramın hissələrə bölünməsinin yeganə üsulu funksiya üçün ad daxil etməkdir,
kompozisiyanın tək qaydası isə funksiyanın superpozisiya operatorudur. Heç bir
yaddaş hissəsi, mənsubetmə operatoru, dövr, nə blok-sxem, nə də idarəetmə
ötürülməsi yoxdur.
Funksional dillərdə əsas
konstruksiya rolunu ifadə oynayır: İfadələrə skalyar sabitlər,
strukturlaşdırılmış obyektlər, funksiyalar, funksiyaların elementləri və
funksiyaların çağırışları aiddir. Applikativ proqramlaşdırma dilinə aşağıdakı
elementlər daxil edilir:
•
funksiyaları manipulyasiya edən
sabitlər sinfi;
•
proqramçının ilkin izahı və təsviri olmadan istifadə edə
bildiyi baza funksiyalarının yığımı;
•
baza funksiyalarının vasitəsilə
yenilərinin düzülüş qaydaları;
•
funksiya çağırışları əsasında
ifadələrin formalaşma qaydaları.
Proqram hesablanması vacib olan
funksiya və ifadə təsvirlərinin məcmusunu təşkil edir. Bu ifadə reduksiya
vasitəsi ilə, yəni sadələşdirmə seriyaları aşağıdakı qaydalar üzrə mümkün
olanadək hesablanır: baza funksiyalarının çağırışları müvafiq qiymətlərlə əvəz
olunur.
Funksional proqramlaşdırma yaddaş
konsepsiyasından dəyişənlərin qiymət anbarı kimi istifadə etmir. Mənsubetmə
operatorları isə iştirak etmir, bu səbəbdən də dəyişənlər yaddaş sahələrini
deyil, proqram obyektlərini ifadə edir, bu da riyaziyyatdakı dəyişən anlayışına
tam uyğun gəlir. Prinsip etibarilə, proqramları ümumiyyətlə dəyişənlərsiz də
təşkil etmək olar. Bundan əlavə, sabit və funksiyalar, yəni proqram və
məlumatlar arasında o qədər böyük fərq yoxdur. Nəticədə, funksiya başqa
funksiyanın çağırış qiyməti və strukturlaşdırılmış obyektin elementi ola bilər.
Funksiya çağırışı zamanı arqumentlərin sayı onun təsviri zamanı göstərilmiş
parametrlərin sayları ilə uyğun gəlməyi mütləq deyil. Sadalanan xüsusiyyətlər
applikativ proqramlaşdırma dillərini çox yüksək səviyyəli dil kimi xarakterizə
edir.
Belə proqramlaşdırma dillərindən
biri olan LISP dili (LIST Processing - siyahıların işlənməsi) 1959-cu
ildə yaradılmışdır. Onun yaradılmasında əsas hədəf simvolik informasiya
emalının rahatlığını təmin etməkdan ibarət idi. Bu dilin əsas xüsusiyyəti bütün
ifadələrin siyahı şəklində yazılmasıdır.
Məntiqi
proqramlaşdırma. Bu
yeni sahə-məntiqi və ya relasiyon
proqramlaşdırma sahəsi – PROLOG (Proloq) (PROgramming in
LOGic – məntiqi terminlərlə proqramlaşdırma) dilinin yaranması nəticəsində meydana
çıxmışdır. Bu dil 1973-cü ildə fransız alimi A.Kolmeroe tərəfindən yaradılıb.
Hal-hazırda bir çox məntiqi dillər mövcuddur, lakin məntiqi proqramlaşdırmanın
ən çox inkişaf etmiş və yayılmış dili Proloqdur. Məntiqi proqramlaşdırma
dilləri, xüsusən proloq süni intelekt sistemində geniş istifadə olunur. Məntiqi
proqramın əsas anlayışı münasibətdir.
Proqram - obyekt (şərt və ya məhdudiyyət
terminləri) və məqsəd (tələb) arasındakı
münasibətin təyinindən təşkil olunur. Proqramın
yazılması və yerinə yetirilməsi dilin
semantikasına uyğun olmalıdır. Hesablamanın nəticəsi bu prosesin əlavə
məhsuludur. Relasiyon proqramlaşdırmada
yalnız faktların alqoritmə əsaslanan spesifik xüsusiyyətlərini göstərmək
lazımdır, yerinə yetirilməsi tələb olunan addımların ardıcıllığını isə müəyyən
etməmək də olar. Məntiqi proqramlaşdırma R.Kovalskinin “alqoritm=məntiq +
idarəetmə” düsturunda dəqiq ifadə olunub. Məntiqi proqramlaşdırma dilləri
aşağıdakılara görə səciyyələnir:
§
yüksək
səviyyə;
§ simvollu
hesablanmaya istiqamətlənmə;
§ tərsinə (inversiv) hesablama imkanı, yəni prosedurlarda dəyişənlər
giriş və çıxışa bölünmür;
§ məntiqi natamamlığın mümkünlüyü, çünki proqramda müəyyən məntiqi
münasibətləri ifadə etmək tez alınmır, həmçinin proqramdan bütün nəticələri
düzgün almaq mümkün deyil. Məntiqi proqramlar, prinsip etibarilə, kiçik sürətə
malikdirlər, çünki hesablamalar sınaq və səhv üsulu ilə həyata keçirilir, yəni
əvvəlki addımlara qayıtmaqla axtarış verilir.
Obyekt-yönümlü proqramlaşdırma. Obyekt-yönümlü proqramlaşdırmanın prototipinə SIMULA-67
dilinin tərkibinə daxil olan bir sıra vasitələr aiddir. O, 1972-ci ildə A.Key
tərəfindən maşın qrafiklərinin funksiyalarını reallaşdırmaq məqsədilə
hazırlanmış SMALLTALK dili şəklində müstəqil oldu. Bu dil obyekt-yönümlü proqramlaşdırmanın
üslubuna əsaslanır, mənası isə “obyekt=verilənlər + prosedurlar” düsturu ilə
ifadə olunur. Hər bir obyekt özündə verilənlərin strukturunu birləşdirir və
onlara müraciəti isə verilənlərin emal proseduru ilə mümkün olur ki, bu da metod
adlanır. Eyni bir obyektdə verilənlərin birləşməsi və proseduralar inkapsulyasiya
(kip bağlama) adlanır və obyekt-yönümlü proqramlaşdırmaya xasdır.
Obyektlərin təsvir edilməsinə siniflər xidmət edir. Sinif ona aid olan obyekt
və metodların xüsusiyyətlərini müəyyən edir. Müvafiq olaraq, istənilən obyekti
bu sinfin nümunəsi kimi müəyyən etmək olar.
Bu proqramlaşdırma tərzinin əsas
cəhəti mövcud olan obyektlərin seçilməsindən və ya yenilərinin yaradılmasından
və onlar arasındakı qarşılıqlı əlaqənin
qurulmasından ibarətdir. Yeni obyektlər yaradılarkən onların xüsusiyyətlərinə görə
yeniləri əlavə edilə və ya əvvəlki obyektlərdən irsən alına bilər. Obyektlərlə
iş prosesində polimorfizmə yol verilir ki, bu da müxtəlif tip məlumatların
işlənməsi üçün eyni adlı metodlardan istifadə imkanıdır.
Ən müasir obyekt-yönümlü proqramlaşdırma dillərinə C++ və Java
aiddir. C++ dili 80-ci illərin əvvəllərində,
AT&T korporasiyasının Bell laboratoriyasının əməkdaşı B.Straustrup
tərəfindən hazırlanmışdır. O, yığcam kompilyasiya sistemi yaratmışdı, burada
isə BCPL, Simula-67 və Algol-68 dillərinin elementləri əlavə edilmiş C dili
əsas götürülmüşdü. 1983-cü ilin iyulunda sinifli C dili, daha sonra isə C++
dili meydana çıxdı.
1990-cı ilə bu dilin
standartlaşdırması üçün ilk material qismində ANSI komitəsi tərəfindən qəbul
edilmiş C++ dilinin üçüncü versiyası buraxıldı. 1990-cı ildə Sun
korporasiyasının əməkdaşı D. Qoslinq C++ dilinin genişlənməsi əsasında obyekt-yönömlü Oak dilini
yaratdı. Bu dilin əsas üstünlüyü müxtəlif tip qurğuların qarşılıqlı şəbəkə
əlaqəsinin təmini idi. Bu dilin internetdəki əsas versiyası Java adlandı. Java dilini dəstəkləyən ilk brouzer Sun
korporasiyasının proqramçısı P.Nafton tərəfindən yaradılmış və Hot Java adını almışdır. 1995-ci ilin
yanvarından etibarən Java internetdə geniş istifadə olunmağa başladı.
Müəlliflər rəsmi olaraq müəyyən etmişlər ki, bu dil sadə obyekt-yönümlü və
arxitektur-neytral interpritasiya olunan dildir və etibarlılığı, təhlükəsizliyi və mobilliyi
təmin edir, çoxfunksionallığı və dinamikliyi ilə yüksək məhsuldarlığa malikdir.
Java və C++ dilləri arasında prinsipial fərq ondan ibarətdir ki, birinci dil interpretasiya,
ikincisi isə kompilyasiya olunur. Dillərin sintaksisi praktiki olaraq
üst-üstə düşür.
Obyekt-yönümlü vasitə imkanı nöqteyi - nəzərindən Java
dilinin C++ dilinə nəzərən bir sıra üstünlükləri var. Belə ki, Java dili
informasiya inkapsulyasiyasının daha elastik və güclü sistemini nümayiş etdirir. Javada
reallaşdırılan varislik mexanizmi proqramlaşdırmaya daha ciddi yanaşma tələb
edir, bu isə kodun etibarlılığını və anlaşıqlılığını daha da artırır.
C++ dili isə mürəkkəb anlaşıqlı,
qeyri-adekvat və çətin varislik sisteminə malikdir. Obyektlərin dinamik
bağlanması imkanları isə hər iki dildə yaxşı təqdim edilmişdir, ancaq, C++-in
sintaktis ifratı burda da bizi Java dilinə üstünlük verməyə məcbur edir. Öz
konstruktivliyinə görə obyekt-yönümlü proqramlaşdırmanın ideyası
bir çox universal prosedur dillərdə istifadə olunur. Belə ki, məsələn, Pascal
dilinin 5.5 versiyasının (Borland International korporasiyası) proqramlaşdırma
sisteminin tərkibinə Turbo Vision-un obyekt yönümlü proqramlaşdırmasının xüsusi
kitabxanası daxildir. Son zamanlar isə bir çox proqramlar, xüsusən də obyektyönlü
proqramlaşdırma, vizual proqramlaşdırma sistemləri kimi reallaşdırılır.
Bu cür sistemlərin fərqləndirici
cəhəti dialoq rejimində, demək olar ki, heç bir proqram əməliyyatlarının
kodlaşdırması olmadan proqram məhsulunun interfeys hissəsini yaratmağa imkan
verən hazır "hazır bloklar" vasitəsilə güclü proqram hazırlanma
mühitindən ibarətdir. Vizual proqramlaşdırmanın obyekt-yönümlü sistemlərinə Visual Basic, Delphi,
C++Builder və Visual C++ aiddir.
2.4. Proqramlaşdırmanın
təsnifatı
Proqramlaşdırma dedikdə, strukturun seçilməsi, kodlaşdırma və proqramın
testləşdirilməsi başa düşülür. Proqramlaşdırmanı aşağıdakı şəkildə
təsnifatlaşdırmaq olar:
1. Riyazi proqramlaşdırma.
Bu bölməyə tətbiqi riyaziyyat, optimallaşdırma və s. tipli məsələlərin
proqramlaşdırılması ( həmçinin layihələndirmə, idarəetmə, planlaşdırma və s.) aiddir.
2. Tətbiqi proqramlaşdırma
(application proqramming) – istifadəçi üçün proqramların hazırlanması.
Məsələn, mühasibat işləri, mətnlərin
işlənməsi və s.
3. Sistemli proqramlaşdırma
(System proqramming) Ümumi proqram
təminatının, o cümlədən əməliyyatlar sistemi, köməkçi proqramlar – məsələn avtomatlaşdırılmış
idarəetmə sistemlərinin, verilənlər bazası idarəetmə sisteminin və s. hazırlanması.
4. Deklarativ
(məntiqi) proqramlaşdırma (Logical proqramming) – bu proqramlaşdırma metodundan
süni intellekt məsələlərini həll etmək üçün istifadə olunur. Buna Prolog proqramlaşdırma
dilini misal göstərmək olar.
5. Obyekt-yönümlü proqramlaşdırma (OOP Object
– Oriented Programming)- proqramlaşdırma
metodu konkret predmet sahəsi üçün obyektlər konsepsiyasına əsaslanır. Bu halda
verilənlər obyektlərin üzərində yerinə
yetirilən prosedur ilə sıx əlaqəlidir.
6. Ekstremal proqramlaşdırma
7. Aspekt- yönümlü proqramlaşdırma
8. Avtomat proqramlaşdırma

III. YÜKSƏK SƏVIYYƏLI PROQRAMLAŞDIRMA
3.1.
Obyekt-yönümlü proqramlaşdırma
Obyekt-yönümlü proqramlaşdırma–(OYP) proqramlaşdırmanın elə bir bölməsidir ki,
burada əsas konsepsiyasını obyekt və sinif (yaxud, daha az məlum olan variantda
- prototip) anlayışı təşkil edir.
Sinif – obyektlərin mexanizmini – nümunələrini təsvir edən tipdir.
Sinfi çertyojla da müqayisə etmək olar. Bu çertyojlar əsasında obyektlər
yaradılır. Adətən, siniflər elə üsulla yaradılır ki, onların obyektləri
əlamətlər fəzasının obyektlərinə uyğun gəlsin.
Prototip – bu nümunəlik obyektidir. Onun obrazında ona oxşar olaraq
digər obyektlər yaradılır. Obyekt- yönümlü
proqramlaşdırma (OYP) prosedur proqramlaşdırmanın (burada verilənlər, prosedur
və funksiyalar və onların işlənib hazırlanması formal olaraq bir-birindən asılı
deyil) ideologiyasının inkişafı nəticəsində yaranmışdır. Bundan əlavə, müasir
obyekt-yönümlü proqramlaşdırmada daha çox hadisə (hadisə-yönümlü
proqramlaşdırma) və komponent (komponent proqramlaşdırma) anlayışına üstünlük
verilir [8,9].
Hal-hazırda obyekt-yönümlü
proqramlaşdırma tətbiqi proqramlaşdırma (Java, C#, C++,JavaScript,Action Script və s.) sahəsində mütləq liderliyə malikdir.
Eyni zamanda sistem proqramlaşdırma sahəsində hələ də prosedur proqramlaşdırma paradiqması
(nümunəsi) liderlik edir və
proqramlaşdırmanın əsas dili C dili olaraq qalır. Lakin sistem və tətbiqi
əməliyyat sistemlərinin qarşılıqlı əlaqəsinə obyekt-yönümlü proqramlaşdırma dilləri daha çox təsir etməyə
başlamışdır [8].
Obyekt-yönümlü
yanaşmanın əsas prinsipləri qeyd olunmuş ilk proqramlaşdırma dili Simula dili
olub. Bu dil həmin dövr üçün (1967-ci
il) həqiqətən böyük ideyalara malik idi: obyektlər, siniflər, virtual üsullar
və s. Lakin bütün bunlar o dövrün müasirləri tərəfindən elə də böyük bir
çevriliş kimi qəbul olunmamışdır. Buna baxmayaraq, konsepsiyaların çoxu Alan
Keym və Den İnqallas tərəfindən Smalltalk dilində inkişaf etdirilməyə başlandı.
Məhz bu dil proqramlaşdırmada ən geniş
yayılmış ilk dil oldu [8].

Müasir
OYP dillərində aşağıdakı metodlardan istifadə olunur:
·
Varislk
(Inheritance). Yeni
elementlərin əlavə edilməsi ilə yeni obyektlər sinfinin təşkil edilməsi. Bu
halda bir sinifdə bir neçə sinif birləşdirilə bilər.
·
İnkapsulyasiya
(Encapsulation).
Buna bəzən kip bağlama da deyirlər. Bu halda proqramın hər hansı bir hissəsində
dəyişiklik etmək mümkündür, lakin bu proqramın məzmununa xələl gətirmir.
·
Polimorfizm
(Polymorphism).
Bu halda əsas siniflər yeniləri ilə əvəz olunur. Beləliklə, siniflərin
interfeysi əvvəlki kimi qalır, eyni adlı metodların realizəsi və parametrlər
yığımı fərqlənirlər.
·
Abstraksiya (Abstraction). Kompilyasiya zamanı çoxlu səhvləri
kənarlaşdırmağa imkan verir, əməliyyatlar uyğun tipli obyektlər üzərində
aparılır.
OYP-ya misal olaraq, Java, C#, C++, Object Pascal (Delphi) ,
Perl, PHP, JavaScript, Ada, Xbase++, X++
və s. göstərmək olar [6,7].
Unix əməliyyat sistemi ilə C proqramlaşdırma dili bir-birləri ilə
əlaqəlidir. Hər ikisinin tarixi 70-ci illərdən başlayır. AT&T Bell
Laboratoriyasında işləyən Ken Thompson oyun proqramı yazmaq
istəyir. O, bu proqramı PDP-7 maşınında yazmaq istəyirdi. Lakin onun
əməliyyatlar sistemi xoşuna gəlmədi. O, MULtics sisteminin sadələşdirilmiş
və dəyişdirilmiş versiyasını yazmağa qərar verdi. Daha sonra
isə Dennis Ritchie və Brain Kernighan da ona qoşuldu. Unix və C-nin
tarixində bu 3 nəfər böyük rol oynadı. Əvvəlcə Thompson BCPL
dilindən istifadə edərək B dilini yaratdı. Bundan sonra isə Dennis Ritchie
Unixi daha asan halda yazmaq üçün C dilini yaratdı. 1973-cü ildə C-dən istifadə
edərək Unix-i yenidən yazdılar. Və bu işlərinə görə 1983-cü ildə ACM-in
Turing mükafatını aldılar.
3.2. Ekstremal proqramlaşdırma
Son vaxtlar proqram məhsullarının işlənib hazırlandığı mühitdə
“ağır”, “ağırçəkili” terminlərinə əks olaraq “yüngül” və ya “yüngülçəkili” kimi
terminlərdən istifadə olunmağa başlanılmışdır. Bu terminlər emosional xarakter
daşımır, sadəcə olaraq, ikinci termin proqramlaşdırmada
hər bir mərhələnin ilkin analizi, planlaşdırılması, layihələndirilməsi,
sənədləşdirilməsinin klassik yanaşma üsulunu ifadə edir. “Yüngül” yanaşma adı
altında bu mərhələlərin həddən artıq ixtisar olunması və ya ümumiyyətlə olmaması
metodologiyası başa düşülür. Təbii ki, hər hansı bir mərhələnin diqqətdən
kənarda qalması çox güman ki, layihənin müvəffəqiyyətsizliyinə gətirib
çıxaracaq, buna görə də “yüngül” metodologiya onların qarşılığının ödənilməsi
üçün nəzərdə tutulmuşdur. “Ekstremal proqramlaşdırma”, qısaca XP adlanır [12].
İlk
növbədə “yüngül” yanaşma nə dərəcədə yenidir? Niyə ona ehtiyac yaranmışdır? O,
harada və nə vaxt tətbiq olunmuşdur? Əslində bu yanaşma elə də yeni deyil, onun
tətbiqinə çoxdan başlanılmışdır. Həyatda bəzən elə anlar olur ki, elə də çətin
olmayan, lakin mühüm olan bir layihəni bəzi keyfiyyət itkiləri ilə də olsa,
qısa müddət ərzində yerinə yetirmək lazım gəlir. Bu zaman hazırlıq və hesabat
mərhələlərinin bir hissəsindən imtina etmək lazım gəlir. Hətta layihənin uğurlu
alınmasından sonra belə, işin düzgün yerinə yetirilməməsi kimi hisslər yaranır.
Lakin zaman-zaman belə istisnalar daha çox baş verir. Bunun səbəbini E.Yordan
“Kamikadzenin yolu” (Moskva, “Lori” 2001) adlı əsərində daha yaxşı izah
etmişdir. Burada hər şeydən öncə tez və ucuz yerinə yetirilməli olan layihələr
daha mühüm rola malikdir. Belə şəraitdə vaxtsız qərar qəbul etmək artıq normaya
çevrilir və yalnız layihəni uğurla sona çatdırmağa kömək edən “oyunun
qaydaları”na düzgün və dürüst riayət etmək qalır [12].
Ekstremal proqramlaşdırma (XP)
metodologiyasının müəllifləri daha çox təbii adlandırdıqları yanaşmadan
istifadə etməyi təklif edirlər. Resursların çatışmazlığı şəraitində istehsal
olunan layihədən (Yordan layihəsi) fərqli olaraq, XP proqramının işlənilməsi
elə həyata keçirilməlidir ki, sanki hər şey, xüsusilə də vaxt yetərincədir. Bu
zaman “XP-nin on iki qanunu” adlanan bəzi qaydalara riayət etmək lazımdır.
Bundan əlavə, müəlliflər dörd dəyişəni və XP-də dəstəklənən dörd dəyəri müəyyən
edirlər. XP-nin fəaliyyəti beş prinsipə əsaslanıb ancaq əsas fəaliyyət növü
dörddür. Onları ardıcıllıqla nəzərdən keçirək.
İlk növbədə dəyişənlərdən başlayaq. Onlar kifayət qədər məlumdurlar
və onların adlarına ədəbiyyatda tez-tez rast gəlinir. Bunlar məxaric, vaxt,
keyfiyyət və işin həcmidir. Bütün bunlar öz aralarında qarşılıqlı əlaqəyə
malikdirlər, lakin bir-birini əvəz etmirlər. Heç bir pul layihənin hazırlanması
üçün lazım olan vaxtı əvəz edə bilməz, əlavə insanların işə cəlb olunması isə
vəziyyəti korlaya bilər. Layihənin hazırlanma müddəti funksionallığı, həm də sifarişçini qane edə
biləcək keyfiyyət ilə müəyyən olunur.
Dəyərlər metodologiyası işə ümumi
yanaşmanı təyin edir. XP – kommunikasiya, sadəlik, əks əlaqə və cəsarətlilikdir.
Çox tez-tez hallarda sifarişçinin mühüm məlumatı unutması və ya proqramçının
mövcud dəyişikliklər haqqında xəbər verməməsi və ya layihənin rəhbərinin işçiyə
vacib olan sualı verməməsi ucbatından layihədə problemlər yaranır. Kommunikasiya
layihələndirmənin əsas hissəsindən biridir,
XP-də hətta kommunikasiyaya cavabdeh olan xüsusi işçi də vardır. Sadəlik XP-nin
ikinci mühüm dəyərlərindən biridir, elə
də aşkar olmasa da ideologiya nəzəri nöqtəsindən vacibdir. Onun mahiyyəti ondan
ibarətdir ki, layihəyə yalnız cari məsələnin durumuna uyğun olan real
verilənlər daxil edilir. Əgər sabah şəklini dəyişmiş funksiya tələb olunarsa,
onu elə sabah da dəyişmək lazımdır. Əks əlaqə sistemin vəziyyəti haqqında dəqiq
məlumatı təmin edir. O, testlərdən geniş tətbiq edilməklə təmin olunur. Testlər əhəmiyyətli və az
əhəmiyyətli olan hallarda da yazılır, bu demək olar ki, XP-nin ənənəsidir. Beləliklə,
sifarişçi ilə əks əlaqəyə nail olunur. Cəsarətlik XP-nin dördüncü dəyəridir, əslində bu dəyər proqramçının təbii
xüsusiyyətlərindən biridir. Proqramçıya bu cəhət ona görə lazımdır ki, onun
yeri gəldikdə demək olar ki, tam hazır vəziyyətdə olan layihəyə böyük
dəyişikliklər etməyə, mövcud koddan imtina edib onu yenidən yaratmağa,
funksiyanın bir neçə variantını reallaşdırıb lazım olmayanlardan imtina etməyə
cəsarəti çatsın. Dəyərlər də dəyişənlər kimi bir-biri ilə qarşılıqlı əlaqəyə
malikdirlər, lakin onlar arasındakı əlaqə daha mürəkkəb görünə bilər [12].
Bazanın prinsiplərinə sürətli əks
əlaqə, qəbul oluna bilən sadəlik, müntəzəm dəyişiklik, qəbul oluna bilən
dəyişiklik, keyfiyyətli iş daxildir. Onlar dəyərlərlə uyğunlaşırlar, lakin bir
qədər başqa qiymətə malikdirlər. Sürətli əks əlaqə hazırlanan layihənin məhz
“həftənin əvvəlində olan” vəziyyətini deyil, məhz bu andakı vəziyyətini bilmək
üçündür. Qəbul olunan sadəlik ona görə lazımdır ki, proqramçı sabahkı deyil,
məhz bu gün qarşıya qoyulan məsələnin həlli barədə fikirləşsin. XP üçün
xarakterik hallardan biri olan dəyişikliyi nəzərə alsaq, onda bu məsələnin
sabah əhəmiyyəti olmaya da bilər. Müntəzəm dəyişiklik onu deməyə imkan verir
ki, problemi böyük dəyişiklik etmədən xırda addımlarla həll etmək lazımdır. Bu
həm vaxta qənaət etməyə, həm də qarşıya qoyulan məqsədə çatmaq üçün şərait
yaradır. Qəbul oluna bilən dəyişiklik gələcək işə mane olmayan reallaşmanın
həyata keçirilməsi ilə bağlıdır. Keyfiyyətli iş – hər bir proqramçının məqsədi
olmalıdır. Kent Bekin fikrincə bu dəyişən yalnız iki mənada qəbul oluna bilər:
“gözəl” və “həddən artıq gözəl”.
Ekstremal proqramlaşdırma prosesində daha hansı fəaliyyət növləri
istehsal olunur? Onlar dörddür: kodlaşdırma, testdən keçirmə, dinləmə,
layihələndirmə. Kent Bekin fikrincə,
kodlaşdırma ən böyük fəaliyyət növüdür, belə ki, hər şey kodun terminlərində
təsvir olunur. Kiçik bir sitatı misal gətirmək kifayətdir: “Kod ritorik gücə və
məntiqə malik deyil. Koda elmi dərəcə, ictimai nüfuzla və yüksək məvaciblə
təsir etmək olmaz. Kod sadəcə olaraq sizin kompyuterinizdədir və sadəcə olaraq
sizin ona verdiyiniz əmrləri yerinə yetirir”. Bundan əlavə kod mühüm
informasiya mübadiləsinə xidmət edir. Lakin kodun malik olduğu imkanları
nümayiş etdirmək mümkün deyilsə, onda o mövcud deyildir. Nümayiş etdirmənin üsulu
- testlərdir. XP - yə görə əgər funksiya üçün testlər hazırlanmayıbsa, onda
onun üzərində işə başlamaq olmaz. Testlər işçinin layihənin gedişində hər şeyin
qaydasında olmasına, eyni zamanda sistemə edilən dəyişikliklərdən sonra hər
şeyin nəzarət altında olmasına əminlik yaradılmasına xidmət edir. Dinləmə -
bu yolla işçi sifarişçidən və ya iş yoldaşlarından layihə haqqında məlumat
alır. Və ən nəhayət layiləndirmə. XP-də bura sifarişçinin istəklərini müəyyən
etmək və görülmüş iş haqqında öz şəxsi fikirlərini bildirmək kimi məsələlər daxildir. Müəlliflər xüsusilə
qeyd edirlər ki, bu, ayrıca mərhələdə olmayan, bütün iş ərzində mövcud olan
daimi fəaliyyət növüdür.
İndi isə “XP-nin on iki qanununu nəzərdən
keçirək. Qanunlar aşağıdakılardır:
•
Məntiqli planlaşdırma
•
Kiçik versiyalar
•
Metafora
•
Sadə dizayn
•
Testdən keçirmə
•
Yenidən işlənmə
•
Qoşa proqramlaşdırma
•
Kollektiv mənimsəmə
•
Daimi inteqrasiya
•
40 saatlıq iş həftəsi
•
Sifarişçi iş yerində
•
Kodlaşdırmanın standartları
Məntiqli planlaşdırma – (planing game, bu bəzən “Planlaşdırma oyunu”
kimi də tərcümə edilir) – bu qısamüddətli planlaşdırma nəticəsində növbəti
versiyaya nəyin daxil ediləcəyi müəyyən edilir. Kiçik versiyalar – buna uyğun
olaraq elə də böyük dəyişikliyə malik olmayan yeni versiyaları daha tez-tez
qurmaq faydalıdır. Metafora – sistemin işini asan şəkildə təsvir etməyə imkan
verən analoqdur. Testdən keçirtmədən isə layihənin işlənib hazırlanma
müddətində istifadə olunur. Bu zaman həm sifarişçinin testlərindən, həm də
proqramçının testlərindən istifadə olunur ki, bu testlər də müxtəlif səviyyəyə
malik olurlar. Haqlı olaraq hesab edilir ki, sistem bu dövr ərzində kodun sadələşdirilməsi
və daha da yaxşılaşdırılması məqsədilə daima yenidən işlənib hazırlanır. Qoşa
proqramlaşdırma – XP-nin demək olar ki, ən mübahisəli qanunudur. Ona əsasən
bütün işlər eyni kompyuter arxasında əyləşən iki proqramçı tərəfindən aparılır.
Təsdiq olunmuşdur ki, bu işin məhsuldarlığını aşağı salmır, əksinə əlavə
nəzarət və qarşıya çıxan çətinliklərin müasir yolla həll olunması hesabına işin
məhsuldarlığını daha da artırır. Kollektiv mənimsəmə-bu
qanuna uyğun olaraq layihənin hər bir iştirakçısı təkcə özü tərəfindən yazılan
kodun deyil, bütün kod sisteminin sahibi hesab olunur. Bu başqa modullara
dəyişiklik edilən zaman elastiklik üçün vacibdir. Daimi inteqrasiya onu
bildirir ki, layihənin işlənib hazırlandığı dövr ərzində sistem gündə bir neçə
dəfə işlək vəziyyətə gətirilir. Bu növbəti versiyanın vəziyyəti haqqında tam
məlumat almağa imkan verir. 40 saatlıq iş həftəsi-bu
proqramçıların iş vaxtından artıq işləməmələri haqqında olan, bir az fantastik
səslənən qanundur. Yordanın fikrincə, iş vaxtından artıq işləmə layihəni
uğursuzluqdan xilas etmənin yeganə yoludur. Sifarişçi özü layihə üzərində
çalışan komandanın tərkibinə daxil olmalıdır. Bu layihənin uğurlu alınmasının
ən düzgün yoludur. Onun dəyəri, xüsusilə XP-nin qəbul etdiyi stil üçün çox
böyükdür. Kodlaşdırmanın standartları – birgə iş üçün olan təbii qanundur.
Ondan imtina etmək, çox ehtimal ki, sistemi müşayiət etməyi çətinləşdirmək
deməkdir.
Sonda isə bu metodologiyanın tətbiq edilmə üsulları haqqında məlumat
vermək olar. Ehtimal ki, bu daha çox az tanınan və ya tez-tez dəyişən sahənin
işlənmə variantı üçün daha çox əlverişlidir. Sabit istehsal prosesi üçün olan
nəhəng sistemləri ənənəvi üsullarla layihələndirmək daha yaxşı olardı. Görünür,
XP üçün böyük təşkilatlarda olduğu kimi formal işçi kollektivinin olması elə də
münasib deyil. Ehtimal ki, xüsusilə də metodologiyanın tətbiqinin başlanğıc
mərhələlərində heç də bütün qanunlara riayət etmək alınmayacaq. Baxmayaraq ki,
müəlliflər bütün qanunlara riayət etməklə effektiv nəticələr əldə etməyi qeyd
edirlər, lakin bu heç də hər zaman alınmır. Hal-hazırda elə işçi qrupları var
ki, onlar XP-nin qanunlarına qismən riayət etməklə uğurlar əldə edirlər.
3.3. Aspekt- yönümlü proqramlaşdirma
Aspekt-yönümlü
proqramlaşdırma müxtəlif xarakterli məsələlərin tətbiqində istifadə olunmaq
üçün nəzərdə tutulub. Aspekt-yönümlü
proqramlaşdırmanın tətbiq edilmə dəyəri obyekt-yönümlü
və aspekt-yönümlü
yanaşmaların müqayisəli təhlili nəticəsində yaranmışdır [13].
Aspekt-yönümlü
proqramlaşdırma (AYP) prosedur və obyekt-yönümlü
proqramlaşdırma (OYP) gələcək inkişafını təmin edən proqramlaşdırmanın
konsepsiyalarından birini təşkil edir. Bu metodologiya müasir proqram
təminatında vaxtın, dəyərin və mürəkkəbliyin aşağı salınmasına şərait yaradır.
Mütəxəssislərin fikrincə, layihənin hazırlanmasına sərf olunan vaxtın 70%-i
hazır proqram koduna dəyişikliklərin daxil olunmasına sərf olunur. Buna görə də
AYP belə transformasiya yanaşmalarında mühüm perspektivə malik olur. Müqayisəli
şəkildə yeni texnologiya keçirilən testlərdə öz effektliyini göstərərək kifayət
qədər geniş yayılmışdır, proqram təminatı sahəsində bu yanaşmanın yeri hələ də
obyektiv səbəblərdən müəyyən olunmamışdır.
Proqram sisteminin vacib xüsusiyyəti onun
mürəkkəblik dərəcəsidir: müasir proqram sistemlərinin mürəkkəbliyini nəzərə
alsaq, bir işçinin bütün sistemin detallarını mənimsəməsinin qeyri-mümkün
olduğunu görərik. Bu mürəkkəblik qaçılmazdır: onun öhdəsindən gəlmək olar,
yalnız ondan boyun qaçırmaq olmaz. Proqram sistemlərinin çətinliyi 4 əsas
səbəblə bağlıdır: layihədə sifarişin qərara alındığı real maddi sahənin
mürəkkəbliyi; layihənin hazırlandığı prosesin idarə olunmasının mürəkkəbliyi;
proqramın kifayət qədər elastikliyini təmin etməyin vacibliyi; böyük diskret
sistemlərin qeyri-qənaət üsullarla həyata keçirilməsi.
Bu işin
əsas tətbiq obyekti proqram sistemlərinin hazırlanması zamanı istifadə olunan
aspekt-yönümlü
proqramlaşdırmadır. AYP ayrı-ayrı modullara ikitərəfli funksionallığı tətbiq
etməyə imkan verən dil vasitələrindən istifadə etməyi təklif edir ki, bu yolla
da sistemin işini asanlaşdırmaq olar. Burada və daha sonrakı mərhələdə “modul”
sözü adı altında vahid proqram strukturlu– prosedur, funksiya, üsul, sinif və
paket başa düşülür. Proqramlaşdırma paradiqmasında (nümunə) adı çəkilən proqram
modulunu komponent adlandırırlar [13].
Araşdırmanın
əsas məqsədi proqram məhsullarının artan mürəkkəbliyinin həll olunmasında yeni
yanaşmanın tətbiq edilməsinin mümkün variantlarının analiz edilməsini, təklif
olunan variantların ənənəvi obyekt yönümlü reallaşma ilə müqayisəsinin
aparılmasını və eyni zamanda yeni metodologiyanın gələcək inkişaf perspektlərini
nəzərdən keçirilməsidir.
Qarşıya qoyulan məsələnin həll edilməsi üçün
hal-hazırda proqram sistemlərində mövcud olan yanaşmaların analizini həyata keçirmək, ikitərəfli sistem tələblərinin mövcudluğu şəraitində funksional dekompozisiyadan istifadə zamanı yaranan problemləri qeyd etmək vacibdir. Obyekt və aspekt-yönümlü reallaşdırmanın kriteriyalarının müqayisəsini aparmaq, eyni zamanda nümunələr şəklində aspekt yönümlü yanaşmanın tətbiq edilməsi üçün müxtəlif variantları hazırlamaq lazımdır. Hər bir nümunə üçün Java dilində reallaşma, eyni zamanda onun aspekt yönümlü analoqu və onların müqayisəli təhlili həyata keçirilib.
hal-hazırda proqram sistemlərində mövcud olan yanaşmaların analizini həyata keçirmək, ikitərəfli sistem tələblərinin mövcudluğu şəraitində funksional dekompozisiyadan istifadə zamanı yaranan problemləri qeyd etmək vacibdir. Obyekt və aspekt-yönümlü reallaşdırmanın kriteriyalarının müqayisəsini aparmaq, eyni zamanda nümunələr şəklində aspekt yönümlü yanaşmanın tətbiq edilməsi üçün müxtəlif variantları hazırlamaq lazımdır. Hər bir nümunə üçün Java dilində reallaşma, eyni zamanda onun aspekt yönümlü analoqu və onların müqayisəli təhlili həyata keçirilib.
Proqramlaşdırmada yeni paradiqmaların yaranması hər zaman maraqlı
mövzu olub, çünki proqram təminatında yaranan hər yeni metodologiya Computer
Science elminin və ümumilikdə proqram təminatı industriyasının kifayət qədər
inkişafını təmin edib. Proqram sistemlərinin mürəkkəbləşməsi qlobal problem kimi
daim diqqət və tədqiq edilməyi tələb edir, buna görə də aspekt yönümlü
yanaşmanın meydana çıxması tətbiq edilmə üçün geniş şərait yaratmışdır.
Aspekt-yönümlü
proqramlaşdrmanın əsas ideyaları metodologiyanın ideoloqu Qreqor Kikzales
(Greogor Kiczales) tərəfindən verilmişdir [13].
AYP-nın metodologiyasının əsasını proqramlaşdırma texnologiyası
sahəsində çoxdan rast gəlinən ideyalar təşkil edir. Bu subyekt-yönümlü
proqramlaşdırma (subject–oriented programming), kompozisiyalı filtrlər
(composition filters), uyğunlaşdırılmış proqramlaşdırmadır (adaptive
programming). AYP məqsədyönlü-proqramlaşdırma
ilə (intentional programming) sıx bağlıdır, onun əsas konsepsiyaları Çarlz
Saymonun məqalələrində öz əksini tapmışdır. Buna daha yaxın olan ideologiyadan
biri də törəmə və ya transformasiyalı proqramlaşdırmadır. (generative programming, transformational programming).
3.4. Avtomat proqramlaşdırma
Son illər proqramlaşdırma texnologiyalarında daha çox keyfiyyətli
proqram təminatının və real zaman sistemlərinin işlənib hazırlanmasına üstünlük
verilir. Bu istiqamətdə daha çox məlum olan yanaşmalardan biri də sinxron proqramlaşdırmadır. Avropada
sinxron proqramlaşdırmanın inkişafı ilə
paralel olaraq Rusiyada proqram təminatında yeni yanaşma olan “avtomat
proqramlaşdırma” yaradılır. Bu proqramlaşdırma sinxron proqramlaşdırmanın bir
növü kimi qiymətləndirilir. Hal-hazırkı
işdə “avtomat proqramlaşdırmanın” əsas müddəaları qeyd olunub. O özündə
layihələndirmə, reallaşdırma, sazlama, sənədləşdirmə kimi mərhələləri
birləşdirir [14].
Əgər son vaxtlar proqramlaşdırmada
daha çox “hadisə” anlayışından istifadə olunursa, bu yanaşmada
“vəziyyət” anlayışına üstünlük verilir. Bu terminə eyni zamanda “giriş təsiri”
termini də əlavə olunur ki, burada da “çıxışsız avtomat” termini daxil edilir.
Sonuncuya “çıxış təsiri” anlayışını əlavə edərək “avtomat” termini kimi
istifadə edilir. Ona görə də bu anlayışa əsaslanaraq proqramlaşdırmanın bu
sahəsi hal-hazırki işdə “avtomat proqramlaşdırma”, belə proqramların
yaradılması prosesi isə “proqramın avtomatik layihələndirilməsi” adlandırılır.
Bu yanaşmanın əsas xüsusiyyəti ondan ibarətdir ki, onun istifadəsi
zamanı avtomatlara təpələri fərqləndirmək üçün “vəziyyətin kodlaşdırılması”
anlayışı daxil edilən keçid qrafları verilir. Bir dəyişənin köməyi ilə
“çoxədədli kodlaşdırma” seçildikdə seçilən dəyişənlə üst-üstə düşən vəziyyəti
ayırd etmək olur. Bu da proqramlaşdırmaya “proqramın müşahidəsi” anlayışını
daxil etdi [15].
Təklif olunan yanaşma çərçivəsində proqramlaşdırma “dəyişənlər
vasitəsilə” (bayraqlar) deyil, məhz “vəziyyət vasitəsilə” yerinə yetirilir. Bu
da işin əsas məğzini başa düşməyə və onun spesifik xüsusiyyətlərini üzə
çıxarmağa imkan verir. Lakin qeyd etmək lazımdır ki, avtomat proqramlaşdırmada
sazlama avtomat terminlərində protokollaşma yolu ilə həyata keçirilir. Bu
yanaşma çərçivəsində keçid qraflarından proqram mətninə formal və izomorf
şəklində keçid təklif olunduğu halda, bunu yüksək səviyyəli proqram dillərinin -
C dilinin switch konstruksiyasından və onun
başqa dillərdəki analoqlarından istifadə etməklə daha səmərəli etmək olar.
Buna görə də avtomat proqramlaşdırmada istifadə olunan texnologiya hazırki işdə
“Switch – texnologiyası” adlandırılır.
Hal-hazırda bu texnologiya həll olunan məsələlər sinfinin və eyni
zamanda proqramlaşdırmanın həyata keçirildiyi hesablama qurğularının
fərqləndiyi bir neçə variantlarda işlənilib hazırlanır.
Комментариев нет:
Отправить комментарий