bab 4

29
1 Bab 4 Paradigma Pengaturcaraan

Upload: lloyd

Post on 15-Jan-2016

64 views

Category:

Documents


0 download

DESCRIPTION

Bab 4. Paradigma Pengaturcaraan. 4.1.Bahasa Imperatif. Menurut Milulinovic (1989), bahasa pengaturcaraan boleh diklasifikasikan mengikut taksonomi arkitektur yang berpandukan kepada aliran pengiraan (computational flow) seperti berikut: - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Bab 4

1

Bab 4

Paradigma Pengaturcaraan

Page 2: Bab 4

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.

Page 3: Bab 4

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.

Page 4: Bab 4

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).

Page 5: Bab 4

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.

Page 6: Bab 4

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.

Page 7: Bab 4

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

Page 8: Bab 4

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)

Page 9: Bab 4

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;

Page 10: Bab 4

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

Page 11: Bab 4

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

Page 12: Bab 4

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)

Page 13: Bab 4

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

Page 14: Bab 4

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

Page 15: Bab 4

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.

Page 16: Bab 4

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;

Page 17: Bab 4

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

Page 18: Bab 4

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:

Page 19: Bab 4

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;

Page 20: Bab 4

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

Page 21: Bab 4

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;

Page 22: Bab 4

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

Page 23: Bab 4

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.

Page 24: Bab 4

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

Page 25: Bab 4

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

Page 26: Bab 4

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

Page 27: Bab 4

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 ) )

Page 28: Bab 4

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)

Page 29: Bab 4

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;