Bab 4
description
Transcript of Bab 4
1
Bab 4
Paradigma Pengaturcaraan
2
4.1. Bahasa Imperatif Menurut Milulinovic (1989), bahasa pengaturcaraan boleh
diklasifikasikan mengikut taksonomi arkitektur yang berpandukan kepada aliran pengiraan (computational flow) seperti berikut: Arkitektur aliran-kawalan atau berasaskan kawalan (control-
driven) – jujukan arahan menentukan aktiviti pemprosesan, dan data dikumpul apabila arahan memerlukannya
Arkitektur aliran-data atau berasaskan data (data-driven) – aktiviti pemprosesan dikawal oleh kesediaaan atau kewujudan data, iaitu arahan dilaksanakan apabila data yang diperlukan oleh arahan tersebut bersedia untuk dioperasi
Arkitektur berasaskan permintaan (demand-driven) – suatu arahan disediakan (enabled) untuk dilaksanakan apabila hasil perlaksanaannya diperlukan, iaitu apabila operan bagi suatu arahan yang lain telah bersedia untuk dioperasikan.
3
4.1.1. Prinsip Rekabentuk Pengaturcaraan Imperatif Bahasa imperatif adalah suatu implementasi
arkitektur aliran-kawalan Prinsip rekabentuk bahasa imperatif adalah
berasaskan kepada konsep aliran kawalan perlaksanaan suatu aturcara yang digunakan dalam model Von Neumann
Dalam model ini, suatu aturcara terdiri daripada arahan-arahan ang disimpan dalam lokasi ingatan, dan suatu daftar (register) yang dikenali sebagai pembilang aturcara. Pembilang aturcara ini menentukan arahan yang mana yang perlu dulaksanakan seterusnya.
4
4.1.1. Prinsip Rekabentuk Pengaturcaraan Imperatif Secara amnya, suatu bahasa pengaturcaraan
dikategorikan sebagai bahasa imperatif sekiranya ia mempunyai ciri-ciri berikut: Perlaksanaan arahan secara berjujukan Menggunakan pembolehubah yang mewakili nilai suatu
lokasi ingatan Menggunakan pernyataan umpukan untuk mengubah nilai
suatu pembolehubah dan membenarkan aturcara melakukan operasi terhadap nilai-nilai ini.
Bahasa imperatif juga dipanggil bahasa berprosedur (procedural language) atau bahasa berstruktur (structured language).
5
4.1.1. Prinsip Rekabentuk Pengaturcaraan Imperatif Unit asas suatu bahasa imperatif adalah tindakan
(action) yang boeh diklasifikasikan kepada 3: Tindakan pengiraan (computational), seperti operasi
aritmetik Tindakan aliran-kawalan seperti perbandingan dan
pernyataan gelung Tindakan input-output seperti operasi tulis dan baca
Tindakan-tindakan ini mempunyai capaian ke atas storan umum yang mengandungi lokasi-lokasi ingatan.
6
4.1.1. Prinsip Rekabentuk Pengaturcaraan Imperatif Setiap lokasi ingatan boleh berkeadaan seperti berikut:
Mengandungi data, bermakna lokasi ini telah diikat kepada suatu objek data (allocated), dan mengandungi data
Tidak didefinasikan, bermakna lokasi ini telah diikat, tetapi belum mengandungi data
Tidak digunakan, bermakna lokasi ini tidak diikat ke mana-mana objek data (not allocated)
Data yang disimpan di dalam lokasi ingatan berada dalam keadaan yang stabil selagi pengikatan tidak dimansuhkan (deallocated) atau data baru dimasukkan ke dalamnya.
7
4.1.1. Prinsip Rekabentuk Pengaturcaraan Imperatif Perubahan boleh yang berlaku kepada suatu lokasi
ingatan termasuk: Penyimpanan data ke dalam suatu lokasi Deallocation suatu lokasi ingatan mengubah keadaan
suatu lokasi ingatan kepada ‘tidak digunakan’ (unused) Allocation suatu lokasi ingatan suatu lokasi ingatan
yang tidak digunakan dicari, dan menukarkan status lokasi tersebut kepada ‘allocated’.
Capaian suatu lokasi ingatan mendapatkan data semasa yang disimpan di dalam lokasi
8
4.1.2. Aliran Kawalan Pengaturcaraan Imperatif Pengaturcaraan imperatif menggunakan prinsip aliran
kawalan yang berstruktur. Suatu aturcara dikatakan berstruktur jika aliran
kawalannya jelas pada struktur sintaks teks aturcara. Secara amnya, aliran kawalan atau jujukan
perlaksanaan suatu aturcara imperatif adalah berasaskan konsep ‘single-entry and single-exit’ perlaksanaan aturcara dilakukan melalui struktur binaan (constructs) yang menentukan tindakan-tindakan tertentu, dan boleh dilihat pada dua paras: Struktur berorientasikan-pernyataan (statement-oriented) Struktur berorientasikan-blok (block-oriented)
9
Struktur Berorientasikan-Pernyataan Merujuk kepada perlaksanaan suatu pernyataan yang
membentuk komponen-komponen individu suatu aturcara. Contohnya:
x = y; Perlaksanaan pernyataan ini dilakukan dengan
menggunakan suatu jujukan pernyataan seperti di bawah:
temp = x;
x = y;
y = temp;
10
Struktur Berorientasikan-Blok Merujuk kepada komponen individu aturcara yang
sebenarnya adalah suatu blok – suatu koleksi pernyataan yang mana pembolehubah dan pernyataan adalah bersifat setempat
Contohnya, prosedur dan modul. Dalam bahasa Ada, ALGOL-68, Modula, dan C,
prosedur adalah binaan blok yang utama
11
4.1.3. Langkah Perlaksanaan Pengaturcaraan Imperatif Secara amnya, perlaksanaan dilakukan seperti berikut:
Kompilasi – aturcara diterjemahkan kepada kod objek yang boleh di’relocate’ (relocatable) kod intermediate yang sesuai dengan sistem komputer yang sedang digunakan
Pemautan – Incorporate pustaka yang diperlukan kepada aturcara, yang mana pusataka ini telahpun dikompil
Pemuatan – kod objek tadi disimpan ke dalam ingatan untuk dilaksanakan kod objek ditukar kepada format yang sesuai untuk dilaksanakan, dan proses pengikatan berlaku
Perlaksanaan – aliran kawalan perlaksanaan aturcara berlaku mengikut jujukan pernyataan
12
4.1.4. Kelemahan Pengaturcaraan Imperatif
Terdapat beberapa masalah dalam pengaturcaraan imperatif: Kesukaran dalam reasoning (difficulty in
reasoning) Rujukan yang telus (referential transparency) Kesan sampingan (side effects) Capaian yang bebas (Indiscriminate Access) Capaian yang vulnerable (Vulnarability access) Tiada tindanan takrifan (no overlapping definitions)
13
Kesukaran dalam reasoning (difficulty in reasoning)
Sukar untuk menyemak kebenaran (correctness) suatu atucara kerana ia bergantung kepada kandungan setiap lokasi ruang ingatan.
Untuk memahami perjalanan suatu aturcara, ia perlu dijejak secara mental menjadi suatu tugas yang remeh jika melibatkan banyak lokasi ingatan
14
Ketelusan rujukan (referential transparency) Suatu sistem dikatakan telus rujukannya jika makna
keseluruhan sistem boleh ditentukan dengan hanya melihat makna komponen-komponennya.
Misalnya, bagi ungkapan matematik F(x) + G(x), F(x) boleh ditukar dengan H(x) sekiranya diketahui H(x) menghasilkan nilai yang sama seperti (F(x).
Tetapi dalam bahasa pengaturcaraan imperatif, ini tidak dapat dipastikan kerana maksud suatu ungkapan bergantung kepada pengiraan yang telah berlaku ke atas subungkapannya.
Pernyataan umpukan, penghantaran parameter secara rujukan, dan pembolehubah sejagat adalah sebab utama kenapa bahasa imperatif tidak telus secra rujukannya menjadikan aturcara sukar untuk dibaca, modifikasi, dan ditentukan kebenarannya
15
Kesan sampingan (side effects) Dalam bahasa imperatif, terdapat pernyataan yang
diolah khusus untuk kesan sampingan yang dihasilkan oleh suatu pengiraan. Contohnya, penggunaan operasi tokokan dan susutan dalam C
sum[i++] = total; Pengoperasi ini mempunyai kesan sampingan
disamping menghasilkan nilai tertentu, ia juga mengubah nilai pembolehubah yang digunakan
Walaupun penggunaan ini memudahkan, tetapi ia boleh menimbulkan masalah.
16
Kesan sampingan (side effects)
Contoh 1:class_list[index++] = class_list[index++] = 0;
bergantung kepada bila index ditambah, penyataan boleh menghasilkan output yang berbeza
adalah lebih selamat jika pernyataan dipecahkan kepada:
class_list[index++] = 0;
class_list[index++] = 0;
17
Kesan sampingan (side effects) – Contoh 2Kesan sampingan fungsian berlaku apabila sautu fungs
mengubah nilai pembolehubah sejagatint number = 10;int check_first() {
number = 25;return 5;
}void check-second() {
number = number + check_first();}void main() {
check_second();}nilai yang dihasilkan bergantung kepada bagaimana operan dalam pernyataan number = number + check_first(); dinilai hasil boleh menjadi 15 atau 30
18
Capaian yang bebas (Indiscriminate Access)
Berlaku apabila pengaturcara tidak dapat mengekang atau mengelak suatu pembolehubah atau struktur data dari dicapai secara bebas.
Contohnya, penggunaan timbunan dalam suatu aturcara ALGOL:
19
Capaian yang bebas (Indiscriminate Access)
BeginInteger array S[1:100];Integer TOP;Procedure PUSH(x);Integer x;Begin
TOP = TOP + 1;S[TOP] = x;
End;Procedure POP(x);Integer x;Begin
POP = S[TOP];TOP = TOP – 1;
End;TOP = 0;:(penggunaan PUSH dan POP)
end;
20
Capaian yang bebas (Indiscriminate Access)
S, suatu timbunan mesti diisytiharkan dalam blok yand sama seperti PUSH dan POP, supaya ia boleh ‘dilihat’ (dicapai) oleh kedua-dua prosedur ini
PUSH dan POP perlu dilihat oleh segmen yang menggunakannya perlu diisytiharkan dalam blok yang sama dengan penggunanya timbunan S juga ‘dilihat’ oleh pengguna PUSH dan POP
Masalahnya, tiada jaminan bahawa pengguna ini akan melakukan modifikasi terhadap timbunan S hanya melalui prosedur PUSH dan POP, sebaliknya mungkin mengubahnya secara langsung tanpa menggunakan PUSH dan POP
21
Capaian yang vulnerable (Vulnarability access) Berlaku apabila suatu segmen aturcara tidak dapat mengawal andaian yang
telah dibuat tentang perlaksanaannya. Punca masalah adalah pengisytiharan baru yang boleh diselitkan di antara
blok takrifan dan penggunaan suatu pembolehubah Contohnya, pertimbangkan segmen aturcara ALGOL berikut:
BeginInteger x;:begin
real x;:x = x + 1;:
end; :
end;
22
Capaian yang vulnerable (Vulnarability access) masalah timbul apabila secara tidak sengaja semasa
penyelenggaraan, suatu pembolehubah setempat diperlukan dalam aturcara yang panjang
Secara amnya, kesan sampingan, capaian bebas dan vulnerable boleh disimpulkan sebagai hasil daripada konsep pewarisan implicit yang digunakan dalam bahasa pengaturcaraan imperatif skop suatu pembolehubah dipanjangkan kepada blok dalaman
23
Tiada tindanan takrifan (no overlapping definitions) Masalah timbul apabila suatu aturcara yang besar ingin diubah
ke bentuk bermodular Contohnya, andaikan suatu aturcara terdiri daripada prossedur
P1, P2, P3 dan P4, yang mana P1 dan P2 berkomunikasi melalui suatu struktur data yang dikongsi, DATA1, manakala P2, P3, dan P4 berkomunikasi melalui suatu struktur data yang dikongsi, DATA2.
Rajah Hasilnya, secara tidak langsung, P1 boleh juga mencapai
DATA2, dan P3 dan P4 boleh mencapai DATA1, sedangkan capaian ini tidak diperlukan boleh mengakibatkan masalah penyelenggaraan dan keselamatan data.
24
4.1.5. Kriteria yang Diingini dalam Pengaturcaraan Imperatif
Berikut adalah beberapa criteria yang dingini dalam bahasa imperative, yang dijangka dapat menghindari kebanyakan masalah yang telah dibincangkan: Tiada pewarisan implicit Terdapat perbezaan capaian ke atas struktur data Bentuk Ungkapan yang natural Penggunaan Kurungan untuk mengelak ambiguity Memecahkan Ungkapan yang kompleks
25
Tiada pewarisan implicit
Secara default, skop suatu pembolehubah tidak dipanjangkan (diwariskan) kepada blok dalaman tiada pewarisan implicit
Ini boleh mengelak masalah kesan sampingan, capaian bebas, dan vulnerable
26
Terdapat perbezaan capaian ke atas struktur data Terdapat jenis capaian data yang berbeza. Contohnya, mungkin penggun ahanya boleh
membuat capaian read-only manakala pengguna lain capaian read-write.
Ini juga boleh mengelak maslaah kesan sampingan san vulnerability
27
Bentuk Ungkapan yang natural Ungkapan perlu ditulis dalam bentuk yang boleh
difahami Contohnya, ungkapan perbandingan yang
mengandungi negasi sukar difahami :If ( !(block_id < block_1) || !(block_id >= block_2) )Ungkapan ini boleh ditulis dalam bentuk positif seperti berikut:If ( ( block_id >= block_1 ) || ( ( block_id < block_2 ) )
28
Penggunaan Kurungan untuk mengelak ambiguity Perlu gunakan kurungan apabila menggabungkan
beberapa pengoperasi yang berbeza jenisnya Misalnya dalam C, terdapat petua keutmaan, dan
tanpa kurungan, kesilapan mudah berlakuIf ( *&MASK == BITS)BermaksudIf ( * & (MASK == BITS) ) Kerana dalam C, pengoperasi bit seperti & dan | mempunyai keutamaan yang lebih rendah berbanding pengoperasi hubungan seperti ==Oleh itu , ia perlu ditulis sebagai:If ( (*&MASK) == BITS)
29
Memecahkan Ungkapan yang kompleks Bahasa C, C++ dan Java mempunyai ungkapan,
sintaks dan pengoperasi yang boleh diperlbagaikan, membolehkan pengolahan ungkapan yang berbeza dalan satu binaaan tunggal
Contohnya:Y = m ? m * x + c : c;Pernyataan ini lebih mudah dibaca jika ditulis seperti berikut:if (m)
y = m*x + c;else
y = c;