İnformatika 1-11
i fadə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:
Yashar Ahmadov
Hal-hazırda Data və Biznes Analitikası kimi sahələrdə bütün dünya üzrə bum yaşanır. Bunun da özünün səbəbləri var; ələxsus da ona görə ki, data gələcəyin nefti sayılır. Data, Biznes Analitikası, Optimallaşdırma – bunlar fərqli konseptlərdir və bu yazıda aşağıdakı mövzuları aydınlaşdırmağa çalışacağıq:
- Data və Data Elmi nədir?
- Böyük Data nədir?
- Biznes Analitikası sahəsi nə işlər görür?
- Riyazi Optimallaşdırma nə deməkdir?
- Data + Analitika + Optimallaşdırma – bunların üçü bir yerdə işlədildikdə şirkətlər hansı gücləri qazanırlar?
- Gələcəyə baxış – Gələcəkdə bu sahələr nə cür dəyişəcək?
Əvvəlcə Amazona keçidimdən bəzi məqamları açmaq istəyirəm. 2018-ci ildən Dubayda işləyirdim və ilk ilim sona çatmağa yaxınlaşanda LinkedIndə Amazonda Biznes Analitik vəzifəsini gördüm. Maraqlandım, sənəd verdim və intervyu etdilər. Amazonun intervyu prosesi uzundur. Yəni, əvvəlcə HR, sonra işə götürən müdir hərəsi bir saat olmaqla danışırlar və sonra beş saatlıq panel intervyu olur. Həmin gün beş saat dayanmadan danışırsınız. Amazonun çox yorucu bir işə götürmə prosesi var. Amma əvvəldən HR-ın və işə götürən müdirin sizin haqqınızda müsbət rəydə olması bu prosesləri bir az asanlaşdırır. Mən də bütün bu proseslərdən keçdim və sonra iş təklifi gəldi. Artıq 6 aydır ki, Lüksemburqda şirkətin Avropa Birliyi üzrə Biznes Analitikası işini görürəm. Buraya gəldikdən 2-3 ay sonra bütün dünyanın altını üstünə gətirən virus məsələsi ortaya çıxdı. Dünyada müharibə gözləyərdim, nüvə partlayışı gözləyərdim, amma belə bir virusun hər şeyi alt-üst edəcəyini gözləməzdim. Bu mənada da ingilislər demiş çoxlu “lessons learnt” oldu; bu prosesdən çox dərslər götürdük və bizim üçün bir təcrübə oldu.
Qayıdaq əsas mövzuya: Data nədir, Biznes Analitikası nədir, Business Intelligence nədir, Optimallaşdırma nədir? Data şəxslər və ya obyektlər haqqında miqdarlı və ya atributlu kəmiyyətlər çoxluğudur. Yəni, ingiliscə Quantitative və Qualitative Data. Data sadəcə müəyyən ədədlər, rəqəmlər, hərflər, stringlər çoxluğudur. Datanın özü məlumat demək deyil, məlumat bilgi demək deyil, bilgi isə müdriklik demək deyil.
Əvvəlcə DIKW Piramidası haqqında danışmaq yerinə düşər.
Bizim dildə Data və Knowledge sözləri arasında bir fərq olmasa da ingilis dilində fərqi var. Excellərdə olan rəqəmlər, ədədlər datadır, yəni bunlar özü-özlüyündə bir şey demir sizə. Piramidanın növbəti mərhələsində “information”, yəni, məlumat dayanır. Məlumat bu datalardan istifadə edilərək ortalığa çıxarılan qanunauyğunluqdur. Məsəlçün, sizin əlinizdə zavodun 10 illik istehsalat məlumatı var və oradan siz artıq trendləri çıxardırsınız. İldən ilə, məhsuldan məhsula, satışdan satışa nə qədər fərqlər olubsa, artıq bu məlumatdır (information). Data sadəcə rəqəmlərin yatdığı Excel, SQL və ya hər hansı bir məlumat bazasıdır.
Məlumatın bir üst mərhələsi bilgidir (knowledge). Siz yuxarıda bəhs etdiyim trendləri və digər məlumatları götürüb biznes üçün müəyyən bilgiyə çevirirsiniz. Bundan bir yuxarısı isə ( w isdom), yəni müdriklik. Siz o Datanı Exceldən götürüb, oradan trendləri çıxardıb, o trendlərin arxasında yatan səbəbləri araşdırıb, bunun nəticəsində şirkətə bir tövsiyə verdiniz ki, satışları nə cür artırmaq olar. Bu artıq müdriklik mərhələsidir. Məsələn, x məhsulunun istehsalını 10% artırsaq gəlirimiz 20% artar və yaxud da, filan məhsullar faktiki olaraq bizə gəlir gətirmir. Onları çıxarıb, yerinə daha gəlirli bir məhsul istehsal etsək satışlarımız artar. Bunlar ən yuxarı, yəni müdriklik mərhələsidir və hər mərhələ keçdikcə biznes üçün daha bir dəyər əlavə olunur.
Sənaye x.0
Sənaye 4.0 deyirdilər, indi 5.0-6.0 və s. deyirlər və mən artıq onun hesabını itirdiyim üçün Sənaye X.0 qoymuşam. 21-ci əsrə keçəndən, son 20 ildə bəşəriyyətin elədiyi kəşflərin sayı son 200 ildən çoxdur. Yəni, biz 20 il içində bəşəriyyətin iki əsrdən çox qət etdiyi məsafəni keçmişik və bu proses daha da sürətlənərək gedir. Bunun arxasında yatan səbəblərin elmi izahı var. İlk dəfə almanlar tərəfindən yeni eranı Sənaye 4.0 dövrü adlandırmağa başladılar və bu dövrü şərtləndirən faktorları bir-bir qeyd etdilər. Bunlardan ilki Böyük Data və Analizidir. Böyük Data, məsələn, mənim işlədiyim Amazon şirkəti, Ebay, Google, Facebook – bunlarda sutka ərzində milyonlarla sətir, minlərlə fərqli formada data əmələ gəlir. Təsəvvür edin, dünya üzrə nə qədər insan onlayn platformalardan sifariş verir. Qısa vaxt ərzində nəhəng data ortaya çıxır, və buna Big Data deyirik. Artıq siz məsələn Excellə bu işləri idarə edə bilməzsiniz, çünki, Excel 1 Milyondan artıq sətir göstərmir, daha fərqli həllərə ehtiyac duyulur.
ZH: Zənginləşdirilmiş Həqiqət (AR: Augmented Reality)
Bunun ən populyar nümunəsini İKEA tətbiq edir. Otağınızı kameraya çəkirsiniz və istədiyiniz divan, dolab setlərini seçirsiniz və o vizual olaraq göstərir ki, onlar sizin otaqda necə görünəcək. Eləcə də bir çox oyunlar satılır, 3-ölçülü eynəklə oynayırsınız. Bunların hamısı zənginləşdirilmiş həqiqətdir. Yəni, biz olduğumuz yerdə qalırıq, amma bizə elə bir görüntü verir ki, daha üstün və daha fərqli təcrübələr yaşayırıq. Hazırda bəzi avadanlıqların təmirində də ZH-dən istifadə olunur. Mürəkkəb avadanlıqlarının hansı hissəsinin xarab olduğunu çöldən görmək olmur, siz eynək taxırsınız və… Voila!… xarab hissələri görürsünüz və təmir edirsiniz.
Əlavəli İstehsal (Additive Manufacturing)
Bunun ən birinci nümunələri 3 ölçülü printerlərdir, hansı ki, onlarda artıq evlər istehsal olunub, Audi tərəfindən maşınlar düzəldilib. Bu, özü-özlüyündə indiyə qədər bizim yaşadığımız istehsal paradiqmasını alt-üst edən bir şeydir. Məsəlçün biz hansısa plastikdən bir qab düzəldəcəyik. Bir qəlib olur, siz oraya ərimiş plastiki tökürsünüz və o formanı alır. Amma əlavəli istehsal, 3 ölçülü printer isə onu incə laylar şəklində print etmək deməkdir. Bu da gələcəkdə nə kimi şeylər yarada bilər? Məsələn, insanların evlərində bu printerdən olar və artıq nə istəsələr (paltar, müxtəlif əşyalar və s.) sifariş verib bir ay gözləmək əvəzinə onu evdə istehsal edə bilərlər.
Bulud Sistemləri (Cloud Systems)
İndi məlumatların həddindən artıq çox olması, internet sürətinin get-gedə artması Bulud Sistemləri üçün yeni bir era açır. Artıq yaddaş və hesablama gücü yüksək olan kompyuterlər dünyanın o biri ucunda yerləşir (məsələn, Amerikada). Siz sadəcə internetlə bağlanıb, sizə lazım olan qədər yaddaş və hesablama sürətini götürürüb istifadə edirsiniz. Bir çox şirkətlərin istifadə etdiyi alqoritmlər güclü prosessor tələb edir. Modeli işlətmək üçün ortalama HP kompyuterdən 8 dəfə güclü, RAMı 32 GB olan bir kompyuter seçirsiniz və qarşınızda virtual desktop açılır. Orada istədiyiniz hesablamanı, istədiyiniz ağırlıqda modelləri run edə bilirsiniz və tez bir zamanda nəticələri əldə edirsiniz. Halbuki, eyni hesabı evdə/ofisdə edəsi olsanız, gərək 18 ədəd kompyuter alıb, onların prosessorlarını birləşdirəsiniz. Buna ehtiyac yoxdur, çünki, bulud sistemləri bu xidmətləri təklif edirlər və siz də internetə daxil olaraq istədiyiniz cür hesablamalar və manipulyasiyalar edə bilirsiniz.
Kiber – Təhlükəsizlik
İnternetin yayılması, güclənməsi, eləcə də, Bulud sistemlərinin inkişafı çox da təzə olmayan problemi qabardır: Kiber Təhlükəsizlik məsələsini. Bir çox insanların məsələn iCloud hesablarını hack edib, oradan şəxsi şəkillərini götürərək, şantaj yolu ilə Bitcoin istəyirlər. Belə insanlardan öz ətrafımda ən az üç nəfər tanıyıram. Şirkətlərin məxfi məlumatları həddən artıq çox olduğu üçün sıravi insanlardan əlavə şirkətlər üçün də bu problemdir. Buraya işçilər haqqında məlumatlar, istehsalat, xidmət, müştəri bazası, biznes modeli və s. aiddir ki, bunların biri hack olub açığa çıxarsa həmin biznes bata bilər. Ona görə Kiber Təhlükəsizlik sahəsi multimiliardlıq biznesə çevrilir, sırf antivirus, təhlükəsizlik sistemləri və s. inkişaf etdirmək üçün. Daha əvvəllər də verdiyim bir nümunə vardı: Amerikada bir Kazinonu hack etmişdilər. Orada balıqların olduğu akvariumda termostat, yəni, istiliyi tənzimləyən bir çip, qurğu vardı. Onun vasitəsilə Kazinonun sisteminə daxil olub, bütün sistemi hack etmişdilər.
Əşyaların İnterneti (Internet of Things)
Artıq kompyuterlər deyil, əşyalar da internetə bağlanır. Məsələn, Lüksemburqda ağıllı istilik sistemi var. Bütün radiatorların üzərində termostat var. Onların hamısı real vaxtda (real time) şəhərin idarə etmə sisteminə bağlanır, və sistem nəticələrin monitorinqini aparır. “Bütün şəhər üzrə trend nədir?”, “Hazırda ortalama enerji sərfiyyatı nə qədərdir?” kimi suallara cavab axtarırlar. Eləcə də, onun əsasında toplam xərci də hesablayırlar ki, isitmə prosesinə şəhər üzrə nə qədər pul xərclənib. Sensorlar, termostatlar, müxtəlif device-ların internetə bağlanması əşyaların internetidir. Əşyalar artıq öz aralarında internetə bağlanıb məlumat alış-verişi edirlər. Ağıllı evlər (smart houses) artıq sirr deyil. Bir çox insanların mobil telefonunda da var. Evin bütün işıqları, isitmə sistemləri, kombisi, suyu, hamısı telefondadır. İstədiyiniz vaxt istədiyin klapanı açıb-bağlamaq və s. əşyaların internetə bağlanması ilə mümkün olur. Bu, gözəl bir şey olsa da, təhlükəsizlik baxımından böyük çağırışlar, investisiyalar doğuran bir məsələdir.
Proqramların Inteqrasiyası
Artıq şirkətlər hər şöbə, hər tapşırıq üçün fərqli proqramlar işlətmək istəmirlər. Bunun iki səbəbi var: birincisi qeyri-effektiv olması, ikincisi şöbələrin əməliyyatlarının sinxronlaşdırıla bilməməsi. Müxtəlif növ software-lər var ki, onların məsəlçün bir şirkət beş fərqli proqram işlətmək yerinə, onları inteqrasiya edib bir yerdən idarə edə bilər. Bunlara SAP kimi ERP proqramları aid edilə bilər. Şirkətlər SAP proqramının özlərinə lazım olan modullarını (məsələn, Maliyyə, İstehsalat, Satınalma, HR və s.) satın alırlar və bütün şöbələri sinxron şəkildə idarə edirlər.
Simulyasiya
Biz istehsalat konteksində zavodların simulyasiyasını nəzərdə tuturuq. Məsəlçün, bizim bir zavodumuz var və orada iki istehsal xəttimiz, x qədər tonajımız var və s. Biz bilmək istəyirik ki, əgər oraya 3-cü bir aparatı alsaq və yaxud da, əlavə işçi götürsək bizim verimliliyimiz nə qədər artar? Bunların vizual olaraq modelini qururuq. Burada əsas komponent stoxastiklikdir. Yəni, real həyatda heç bir şey stabil, deterministik deyil, hər şey dəyişir. Hər dəfə istehsal edəndə onun xüsusiyyətlərində: ölçülərində, keyfiyyətində müəyyən fərqlər olur. Bütün bu deterministik olmayan, stoxastik (random) olan proseslərin vizual olaraq modelini qururuq. Bunun əsasında (what if scenario?) yəni, “filan şeyi dəyişsək, filan şeyləri etsək gəlirimiz nə qədər artar” kimi suallara biznesdə cavab axtarırıq.
Ağıllı Robotlar
Artıq süni intellektin də inkişafı ilə ağıllı robotlar hər yerdə yayılmağa başlayıb. Bu saydıqlarımın hamısını birləşdirən Data elmidir. Hansının (back ground)-na keçsəniz, hamısının arxasında Data elmi, proqramlaşdırma və riyaziyyat var. Ona görə də, Data Elminin əhəmiyyətini insanlar görürlər. Dünyanın məlumat saxlama tutumu artmaqdadır. Yer üzündə hər gün 2, 5 x 10 15 MB əlavə data yaranır. Bu, nəhəng, terabaytlarla ölçülən bir rəqəmdir. Buna Facebookda paylaşdığımız şəkil, status, Youtube-a yüklənən video, şirkətlərdə tranzaksiyalae və s. kimi məlumatlar daxildir hansı ki, bir yerə yığanda 24 saat ərzində bu qədər məlumat yaranır. Bu qədər məlumatdan faydalı nəticələr çıxarmaq çətinləşir. Məsəlçün, 70-80-ci illərdə idarələrin dəftərdə tutduğu az miqdarda qeydiyyat vardı və onu riyaziyyatla məşğul olan biri həll edə bilirdi. İndi bir günə yaranan data milyonlarla sətirdir və bu işləri görmək üçün yeni metodlar tələb olunur. Hər şeyin kökündə datadan biznes üçün dəyər yaradan nəticələr çıxartmaq durur. Şirkətlərin, qurumların əllərində böyük miqdarda datalar, məlumatlar var və bu datadan istifadə edərək biz öz idarəmizin gələcəyi üçün nə qədər gəlir qazana bilər, hansı qanunauyğunluları tapa bilər, kimə nə sata bilərik, kimi sualları aydınlaşdırmağa imkan verir. Və təbii olaraq bununla da Data Sənayesi böyüyür. Böyük Data Sənayesinin dəyəri 10 il ərzində 100 milyard dollardan 140 milyard dollara qalxıb. Yəni, bu gün bu işi görən şirkətlərin, bölmələrin dəyəri 140 milyard dollardır.
Big Data üçün AWS, Cloud, yəni, siz evdə internetlə bağlanırsınız dünyanın digər tərəfindəki serverə və güclü kompyuterdə öz hesablamanızı edə bilirsiniz.
Data elmindəki metodologiyalar
Data Science dediyimiz elmin əlində müxtəlif metodologiyalar, yəni alətlər var ki, onları istifadə edərək analizlər aparırlar. Bunlardan ilk ağla gələni reqressiya modelləridir. Məsələn, satışlara təsir edən faktorlar (reklam yerləşdirilibmi, reklama nə qədər vəsait ayrılıb, məhsulun xüsusiyyətləri nədir və s.) var. Satışın miqdarı bu kimi fərqli dəyişənlərdən asılıdır və ən təməl yanaşmada bu dəyişənlər arasında bir əlaqə, tənlik qurulur ki, oradakı dəyişənləri manipulyasiya edərək biznesə necə dəyər qazandıra biləcəyinizi və satışları artıra biləcəyinizi proqnozlaşdıra biləsiniz.
Hipotez Testləri və Etibarlılıq İntervallarının Hesablanması
Bunlar sənayedə keyfiyyətə nəzarət üçün tələb olunan ən başlıca metodlardan biridir. Məsələn siz məhsul istehsal edirsiniz və hər dəfə onun fiziki xüsusiyyətləri qeyd olunur. Hipotez testi ilə onu analiz edib nəticə çıxardırsınız ki, bu məhsulun neçə faizi keyfiyyətə yararlıdır, neçə faizi yox. Və yaxud da hansısa prosesdə yaxşılaşdırma etmisiniz və istehsal müddəti 1 saatdan 50 dəqiqəyə düşüb. Bunu riyazi olaraq isbat etmək üçün Statistikanın Hipotez Testləri bölməsindən istifadə edə bilərsiniz.
Qanunauyğunluğun Tapılması
Amerikada WalMartın statistika ilə məşğul olan şöbəsi uşaq bezləri ilə pivə arasında güclü korrelyasiya olduğunu tapmışdı. Gənc atalar işdən çıxanda evə getməmişdən bir pivə alaraq, relax olma fikri ilə marketə girirlər və o vaxt yoldaşı yazır ki, uşağın bezi qurtarıb, Pampers də al. Bu artıq ölkə əsasında bir (pattern) qanunauyğunluq yaradıb. Bu insan məntiqinə yatmır, yalnız data analiz edilərək tapılır. Eləcə də onlayn ticarət şirkətlərin istifadə etdiyi recommendation system. Əgər məsələn Alibaba-dan bir dəfə alış-veriş edirsinizsə, müxtəlif məhsullara baxırsınızsa, sistem gələn səfər sizə uyğun olduğunu düşündüyü başqa məhsulları təklif edir. Eləcə də Netflix. Bir neçə filmə baxdıqdan sonra sistem sizin zövqünüzü anlamağa başlayır və ona uyğun filmlər təklif edir.
Bayes Teoremi
Bayes teoremi fəlsəfi intepretasiyaları və açıqlamaları olan bir teoremdir. Bayes riyaziyyatçı olub və bu, onun qurduğu bir modeldir. Bir ehtimalı hesablayarkən əvvəldən bilinən faktorlar nəzərə alınır və daha dəqiq ehtimallar hesablanır. Riyazi dildə isə B hadisəsi artıq baş veribsə, A-nın ehtimalı neçədir sualına cavab axtarılır.
Neuron Şəbəkələr (Neural Networks)
Neuron şəbəkələr insanın öyrənmə prosesini imitasiya edən riyazi modellərdir. Yəni, biz uşaqlıqdan görüb müəyyən şeyləri qavrayırıq, artıq yaş keçdikcə, nümunələr gördükcə insan təcrübə qazanır və bir çox şeyi əvvəlkindən daha yaxşı qavraya bilir. Neuron Şəbəkələr də insanın öyrənmə prosesinə əsaslanaraq, törəmələrdən, inteqrallardan hazırlanmış riyazi modeldir. Və bu gün insanların üzünün tanınması kimi fuksiyaları bu cür Neuron Şəbəkələr metodu ilə düzəldirlər
Zaman Sıraları
Bir komponenti zaman olan, yəni vaxt üzrə dəyişən hansısa sıralardır. Tutaq ki, illər üzrə satış miqdarı, gəliri, mənfəəti və sairədir. Zaman Sıraları əsasən proqnozlaşdırma məqsədilə istifadə olunur. Burada bir çox fərqli proqnozlaşdırma modelləri istifadə edilə bilər: Holt-Vinter metodu, Hərəkət Edən Orta Ədəd metodu, Eksponensial Düzləşdirmə və s.
Dərin Öyrənmə (Deep Learning)
Bugün çox yayılmağa başlayan, Neuron Şəbəkələrin daha üstün versiyasıdır. Yəni, Dərin öyrənmə bir neçə qatdan ibarət Neuron Şəbəkələrdir. Data bu şəbəkələrdə 3-4 mərhələdən keçir və hər mərhələdən keçdikcə detalları daha yaxşı qavramağa başlayır. Bunlar, süni intellekdin də əsasında yatan ən vacib metodologiyalardır.
Biznes Analitikası
Biznes Analitikasi mütəmadi olaraq biznesin keçmiş performansına baxaraq gələcək üçün lazımlı nəticələr çıxarmaq üçün lazım olan bacarıq, metodologiya və texnologiyalara deyilir. Analitikanın 4 növü var:
- Qərar Analitikası
- Təsviri Analitika
- Proqnozlaşdırma Analitikası
- Preskriptiv Analitika
Qərar Analitikası dedikdə axın diaqramları, təsir diaqramları və qərar ağacları başa düşülür. Bunlar bir növ vizual metodlardır ki qərarvermə prosesində istifadə olunurlar. Bunlardan ən çox istifadə olunanı isə təsviri analitikadır . Bu, şirkətin keçmiş datalarına, məlumatlarına baxaraq nəticə çıxarmaq üçün istifadə olunur. Bura ortalama, dispersiya, yayılma, max, min dəyərlər və s. daxildir. Proqnozlaşdırma da bənzərdir, amma daha çox gələcəyə yönəlik bir proqnoz çıxarılmadır. Bunun ən bəsit istifadəsi məsələn, sizdə illər üzrə istehsalat məlumatı var və siz proqnozlaşdırmaq istəyirsiniz ki, biz gələn il üçün nə qədər istehsal gözləyə bilərik. Bunu edən alqoritmlər də Proqnozlaşdırma analitikası ailəsinə daxil olur. Preskriptiv Analitika isə optimallaşdırma və simulyasiya modellərindən istifadə edərək dəyər qazandırma metodudur. Mənim də bugün işimin ən vacib hissəsi preskriptiv analitikadır. Amazona bir sutka ərzində milyonlarla sifariş gəlir və əgər ağıllı metodlardan istifadə edilməsə bu biznesdə gəlir qazanmaq mümkün deyil. Məsələn, Almaniyanın hansısa kəndində bir nəfər 5 avroluq sifariş verir və siz həmin malı ona İngiltərədə hansısa anbardan 3 gün ərzində çatdırmağa söz verirsiniz. Bu proses yaxından idarə edilməsə, iş riyazi olaraq optimallaşdırılmasa bu biznes batar. Çünki, sizin nə sifariş verəcəyinizə bir limit yoxdur. Girib 0.99 avroluq belə nəsə sifariş versəniz Amazon çatdırmağı öz üzərinə götürür. Bunun arxasında nəhəng riyazi modellər var və bu işi sırf Data Analitikləri optimallaşdıra bilməz. Bu növ işlərdə Sənaye Mühəndisliyi oxuyan insanların bilik və bacarıqları tələb olunur.
Riyazi optimallaşdırma alternativlər arasında ən yaxşı elementin seçilməsidir.
Yəni, x 2 +y 2 +4 funksiyasının 3 ölçülü vizuallaşdırılmasıdır. Tutaq ki, bu, bizim müxtəlif dəyişənlərdən asılı olan mənfəət funksiyamızdır. Bunun ən maksimum nöqtəsini tapmaq riyazi optimallaşdırmadır, Əməliyyatların Tədqiqi elminin gördüyü işdir. Bu funksiyanı üç ölçülü formada çəkib görmək olur, amma biz minlərlə dəyişənlərdən asılı, minlərlə ölçüsü olan funksiyalarla işləyirik və bu funksiyaların optimallaşdırılması sistematik bir yanaşma, mühəndislik bacarıqları tələb edir. Biz bunu Əməliyyatların Tədqiqi fənnində tədris edirik. Burada da müxtəlif növ metodlar var, hərəsi fərqli kontekstlərdə istifadə edilir:
- Xətti Proqramlaşdırma. Məsələnin bütün elementləri xətti tənliklər olur.
- Qeyri Xətti Proqramlaşdırma. Məsələdə qeyri-xətti funksiyalar olduqda istifadə edilir.
- Oyunlar Nəzəriyyəsi. Yəqin ki, John Nash haqqında filmə baxıb, onun yaşadıqlarını görmüsünüz. Oyunlar nəzəriyyəsini məhz o kəşf edib.
- Markov Zəncirləri və Növbələr Nəzəriyyəsi kimi bir çox olan sahələr var ki, riyazi optimallaşdırmada biz bunları tədris edir və sənayedə tətbiq edirik.
Data elmi ilə məşğul olanların əlində müəyyən metodologiyalar, toolboxlar var ki, o datadan lazımlı məlumatlar çıxartsınlar. Analitika isə tək data deyil, proqramlaşdırma, riyaziyyat və mühəndislik məlumatlarını da içinə alan bir elmdir. Optimallaşdırma biznes üçün ən yaxşı qərarlara kömək edən, bunun riyazi hesabını aparan elmdir. Böyük şirkətlər bu üç bacarığı bir arada olan insanlar axtarırlar.
Gələcəyə Baxış
Zaman keçdikcə data elminin əhəmiyyəti artmağa davam edəcək. Data və onlayn xidmətlərə əsaslanmayan, köhnə ideologiya ilə hərəkət edən biznesləri çətin günlər gözləyir. Bu mühitə adaptasiya onların isə gələcəyi daha parlaq olacaq. İxtisaslaşdırma Data elminin öz daxilində də olacaq. 25 il əvvəl Azərbaycanın əmək bazarında kompyuter və xarici dil bilikləri çox böyük üstünlük sayılırdı. İndiki dövrdə ingilis dili və kompyuteri hamı bilir. Belə bir analogiya aparsaq artıq data elmi də müəyyən müddətdən sonra müəyyən sahələr üzrə ixtisaslaşmış insanlar tələb edəcək və ümumi biliklər artıq kifayət etməyəcək. İşə girməyə namizəd olan insanın digər sənayelər haqqında məlumatlı olması üstünlüyü sayılacaq və standart alqoritmlərdən əlavə şirkətlərin öz patentləşdirdikləri metodlar vacib rol oynayacaq. Open source olan metodları indi hamı bilir. Böyük şirkətlərin inkişaf elətdirdiyi alqoritm və heuristik metodlar var ki, onlar patentləşdirilib sahiblərindən başqa heç kim istifadə edə bilməz. Onları istifadə edərək özləri üçün bir dəyər yaradıb (competitive advantage), bazarda rəqabətliliyi ələ alırlar. İndiki sənayedə şirkətlər hər qəpik üstündə mübarizə aparırlar və əgər siz bir məhsulu x qəpik ucuza başa gətirə bilirsinizsə bu artıq bir dəyərdir. Şirkətlərin özünün inkişaf elətdirdiyi metodlar var, hansı ki, illər sonra open source olacaq. Onları istifadə edərək nəhəng şirkətlər bazarda üstünlüyü ələ alırlar. Bulud sistemlərinin əhəmiyyəti artmağa davam edəcək. Adi laptoplarımızda həll edə bilmədiyimiz məsələləri kompyuterdən daxil olaraq, dünyanın o biri tərəfindəki virtual kompyuterə bağlanıb həll edə bilirk. Süni intellekt və avtomatik öyrənmə alqoritmləri daha da inkişaf edəcək. Artıq xəbərlər gəlir ki, Çində hər bir vətəndaşa bal verirlər. Küçələrdə özünü aparmağına, zibil atmağına, alıcılıq keyfiyyətlərinə, banklara borcuna görə və s. faktorlara görə xallar hesablanır və məsələn kredit verərkən nəzərə alınır. Datanın keyfiyyəti prioritet olaraq qalacaq. Biz o nəhəng alqoritmləri istifadə edib, tətbiq edirik və ona bizim zamanımızın heç 30%-i getmir. 70% əlimizdəki məlumatları təmizləməyə, qaydaya salmağa gedir. Bəsit kimi görünsə də, datanın təmiz olmamağı problemidir; bütün xanalar dolu olmur, bəziləri şrifti tanımır, bəziləri xüsusi hərfləri tanımır (“ə” kimi) və s. Datanı təmizləyib, analizə hazır vəziyyətə gətirmək bu gün çox böyük bir problemdir. Bunu həll edə bilənlərin əhəmiyyəti daha da artacaq. Kiber-təhlükəsizlik sahəsi də böyüməyə davam edəcək. Cinin canı şüşədə olan kimi, şirkətlərin də canı bu hard-disklərdə, kompyuterlərin yaddaçlarındadır. Onu qorumaq üçün külli miqdarda vəsaitlər ayrılır və ayrılmağa davam edəcək.
Nəticə olaraq, bu yazıda Data Elmi, Biznes Analitikası və Optimallaşdırma kimi mövzuları və onlar arasındakı əlaqəni izah etməyə çalışdıq. Eləcə də gələcəkdəki trendlərdən bəhs etdik. Yazı xoşunuza gəldisə paylaşmağı unutmayın
İnformatika 1-11
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;
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 ,
i fadə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.
İşarələr
Funksiyalar
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:
• budaqlanan;
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 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 qoyul uşu ;
Ø məsələnin riyazi təsviri;
Ø həll olunma metodunun seçi lməsi və əsaslandırılması;
Ø hesablama prosesinin alqoritm ləşdirilməsi ;
Ø proqramın tərtib e dil mə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
SHAPE \* MERGEFORMAT
deklarativ (məntiqi) proqramlaşdırma
Aspekt yönümlü proqramlaşdırma
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 –nin metodları
Abstraksiya
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ırm a
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.
Comments are closed, but trackbacks and pingbacks are open.