Professional Documents
Culture Documents
Jenis Data
Data suatu koleksi bit-bit Objek data atau pembolebubah atau pencam mempunyai 4 komponen berikut:
L lokasi yang menyimpan nilai suatu objek data.
Tindakan yang mengumpukkan lokasi kepada suatu objek data dipanggil pengumpulan (allocation) .
Pengumpukan statik pengumpukan sebelum perlaksanaan Pengumpukan dinamik pengumpukan semasa larian
N Nama yang digunakan untuk merujuk objek data V nilai objek data dan diwakilkan dalam bentuk kod pada
lokasi yang diumpukkan T - jenis data, yang mewakilkan bentuk nilai yang boleh disimpan oleh objek data
2
Klasifikasi Data
Dari pandangan pengguna, jenis data atau maklumat
didefinasikan menggunakan pengisytiharan jenis sebelum boleh digunakan pada pengisytiharan objek data
asas dan tidak boleh dipermudahkan lagi. - kadangkala juga dipanggil jenis data tidak berstruktur - Contohnya: integer, nyata (real), Boolean, dan aksara
Jenis data komposit nilainya terdiri dari gabungan
komputer.
Komputer bersaiz kecil menggunakan 2 bait untuk
menyimpan setiap integer, maka julat integer yang boleh digunakan adalah dari -32,768 kepada 32,767. Kenapa?
Hint: Gunakan 1 bait = 8 bit
23,400
Nombor nyata biasanya diwakilkan sebagai real atau float Ada bahasa yang menyediakan perwakilan nombor nyata
yang mempunyai ketepatan lebih tinggi seperti double dan long double
aksara disimpan di dalam 1 bait Pada kebanyakan komputer 1 bait = 8 bit, maka sebanyak 28 = 256 perwakilan aksara boleh digunakan Java menggunakan kod numeric Unicode yang menggunakan 16 bit untuk setiap perwakilan aksara lebih banyak simbol boleh diwakilkan
8
dipanggil elemen tatasusunan, yang dikaitkan dengan suatu nama simbolik untuk menyimpan suatu set data berjenis sama
Setiap elemen tatasusunan dirujuk menggunakan nama
nama_tts[nilai_indeks] elemen
Contoh implementasi:
Fortran : REAL class(8) C dan C++ : int class[5]; Indeks di dalam Fortran bermula dengan 1, bermakna class(1) merujuk elemen yang pertama, manakala indeks di dalam C bermula dengan 0, bermakna class[0] merujuk elemen pertama. 10
yang mana: isnin = 1, selasa = 2, rabu = 3 , dan seterusnya Di dalam C, nilai integer bermula dengan 0, dan pernyataan yang setara adalah:
enum hari {isnin, selasa, rabu }
contohnya :
enum hari {isnin=1, selasa, rabu, }
12
seperti ruang ingatan yang tidak boleh digunakan, menyebabkannya rosak, dan membawa kepada crash
Pembolehubah data berjenis penunjuk perlu diisytiharkan
bermaksud bahawa suatu pembolehubah bernama pjk mengandungi alamat lokasi suatu pembolehubah lain yang berjenis integer.
Nilai awal kepada pembolehubah penunjuk boleh diumpukkan
akan menyebabkan alamat lokasi bagi pembolehubah nom disimpan sebagai nilai kepada pjk
14
pjkpjk = &pjk
15
data dari jenis yang berlainan Selalunya digunakan untuk menakrifkan rekod untuk disimpan ke dalam fail. Contoh implementasi dalam C:
struct kursus { int kod; char gred;
};
gred. Setiap ahli boleh dicapai dengan menyelitkan titik di antara nama pembolehubah dan nama ahli seperti berikut:
kursus.kod
Implementasi dalam Pascal dan Cobol menggunakan perkataan record Cobol menyediakan kemudahan operasi rekod, seperti
dan berkembang di sepanjang perlaksanaan aturcara. Senarai yang tiada komponen (ahli) dipanggil senarai kosong
Senarai boleh berbentuk homogeneous atau hetergeneous Kemasukan pada senarai boleh samada satu objek, atau suatu
senarai lain
19
20
asas:
Penciptaan senarai terpaut Penciptaan nod baru
Setiap kali sebuah nod baru ingin dicipta, ruang ingatan perlu
diumpukkan Begitu juga, setiap kali suatu nod dihapuskan, runga ingatan yang telah diumpukkan kepadanya perlu dibebaskan, menggunakan fungsi free Contoh :
free(nodbaru);
22
23
entiti atau di antara operasi dan simbol Masa pengikatan masa berlakunya proses pengikatan Contoh : suatu pengisytiharan akan menghasilkan suatu hubungan atau pengikatan di antara pencam yang diisytiharkan dengan entity (objek data) yang diwakilkannya. int A; Diterjemahkan sebagai : Suatu lokasi yang boleh memegang suatu nombor integer akan dicipta dan dirujuk menggunakan nama A Pencam A diikat kepada lokasi tertentu ( yang hanya diketahui oleh pengkompil) dan jenis Integer
24
pengikatan:
Pengikatan masa-kompil
Pengikatan masa-muat Pengikatan masa -larian
25
Pengikatan masa-kompil
Juga dikenali sebagai pengikatan statik, atau pengikatan awal
Berlaku apabila aturcara diterjemahkan kepada bahasa
mesin semasa kompilasi Pengikatan nama dan jenis adalah beberapa contoh pengikatan masa-kompil
26
Pengikatan masa-muat
Berlaku apabila kod mesin yang telah diterjemahkan oleh pengkompil disimpan ke dalam lokasi-okasi ingatan
Pengikatan lokasi adalah tergolong dalam jenis ini Bergantung kepada bahasa, proses pengikatan ini boleh berlaku secara statik, atau dinamik
27
Pengikatan masa-larian
Juga dikenali sebagai pengikatan dinamik atau pengikatan lewat.
Ia berlaku semasa aturcara sedang dilarikan. Pengikatan nilai adalah tergolong dalam jenis ini
28
fleksibel suatu bahasa itu. Manakala, lebih awal pengikatan berlaku, lebih efisen suatu bahasa itu. Setiap bahasa pengaturcaraan adalah berbeza dari segi atribut yang mana diikat secara statik dan atribut yang mana diikat secara dinamik. Bahasa fungsian misalnya, mengimplimenkan lebih banyak pengikatan dinamik berbanding bahasa imperatif Contoh pengikatan statik: int x = 2; Nilai 2 dan jenis integer diikat secara static kepada objek data bernama x
29
main() { int x; x = 10; } Pernyataan umpukan x = 10 menyebabkan nilai 10 diikat secara dinamik kepada objek data bernama x.
30
samada semua pengumpukan pemalar, pembolehubah, fungsian dan sebagainya di dalam aturcara adalah sah dari segi jenisnya. Contoh:
Z = X + 5 * Y;
kesamaan yang mengandungi petua-petua tertentu untuk menentukan samada dua jenis yang diuji adalah sama.
31
ralat masa larian. Jika ujian ini tidak dilakukan, adalah menjadi tanggungjawab pengaturcara sendiri untuk melakukan penyemakan jenis Penyemakan jenis terdiri dari dua kategori, bergantung kepada masa berlakunya penyemakan tersebut:
Penyemakan masa-kompil Penyemakan masa-larian
32
Penyemakan Masa-kompil
Jenis disemak semasa kompilasi
Ianya dilakukan oleh pengkompil yang menyemak berdasarkan
kepada pernyataan pengisytiharan setiap objek data. Ia juga boleh dianggap sebagai penyemakan jenis statik, yang mana maklumat mengenai jenis suatu objek data ditentukan dan disemak semasa penterjemahan Penyemakan jenis ini mudah diimplimenkan dan tidak memerlukan ruang ingatan dan masa yang banyak, tetapi menggunakan petua yang kompleks dan terhad
33
Penyemakan Masa-larian
Jenis disemak semasa aturcara dilarikan, iaitu setiap kali
suatu objek data dalam aturcara dicapai. Ia juga boleh dianggap sebagai penyemakan jenis dinamik. Kaedah ini memerlukan masa dan runag ingatan yang tinggi kerana pengujian perlu dilakukan setiap kali suatu objek data dirujuk.
34
(strongly typed) jika kesemua pengujian jenis yang boleh dilaksana dilakukan semasa kompilasi manaka selebihnya disemak semasa aturcara dilarikan. Dalam kes ini, kesemua objek data mesti mempunyai jenis yang ditakrifkan dengan baik, beserta dengan suatu set petua yang lengkap untuk membolehkan penyemakan jenis dilakukan semasa larian. Secara amnya, penyemakan jenis boleh menjamin keselamatan data Ada adalah satu contoh bahasa pengaturcaraan ayng sangat berjenis, manakala C adalah satu contoh bahasa pengaturcaraan yang tidak begitu berjenis.
35
sangat berjenis Salah satu proses yang penting dalam penyemakan jenis adalan inferens jenis.
Dalam proses ini, jenis bagi suatu ungkapan ditentukan atau
36
menghasilkan ourput yang masih lagi betul. Inilah yang dikatakan jenis yang serasi (compatible) Dalam penyataan di atas, selepas suatu nilai nyata diperolehi daripada B+3.15, nilai ini dipangkas untuk membentuk nilai integer yang akan diumpukkan kepada A. Dalam suatu bahasa yang sangat berjenis seperti Modula-2, nombornombor nyata dan intger tidak boleh digabungkan dalam satu ungkapan aritmetik yang sama. Jika di dalam Modula-2, pernyataan di atas akan menghasilkan ralat jenis. Untuk itu, ia perlu ditulis sebegini: A = TRUNC (FLOAT(B) + 3.15);
37
iaiatu B + 3.15 perlu dinilai dan nilai yang diperolehi perlu diumpukkan ke sebelah kiri iaitu kepada A. Andaikan A berjenis nyata, manakala B berjenis integer. Suatu nombor integer biasanya boleh diwakilkan dalam bentuk nombor nyata. Oleh itu, jika nilai bagi B diungkapkan dalam bentuk nyata, hasil penilaian yang betul boleh diumpukkan kepada A.
38
39
daripada int, maka ketiga-tiga jenis ini boleh ditukarkan kepada int. B dan C ditukarkan kepada int, dan jumlah (B + C) kemudiannya ditukarkan semula kepada byte untuk disimpan di dalam A
40
41
Penukaran Jenis Implisit Penukaran jenis secara implicit ini juga dirujuk sebagai
(coercion) pemaksaan. Satu kelebihan penukara secara implicit adalah kemudahan kepada pengaturcara yang tidak perlu menulis kod tambahan untuk melakukan penukaran jenis. Kelemahannya pula, kesilapan mungkin berlaku secara tidak sedar. Contoh dalam PL/1:
1/3 + 15 akan menghasilkan 5.33333333333333 pada sistem yang mempunyai ketepatan sehingga 15 digit. Ini adalah kerana berlaku limpahan yang disebabkan oleh kejituan yang mesti diutamakan.
42
avg = sum / count; Andaikan avg berjenis nyata, manakala sum dan count berjenis int. Jika sum bernilai 15, manakala count bernilai 2, hasil (sum / count) yang diumpukkan kepada avg adalah 7.0 dan bukannya 7.5. Ini adalah kerana hasil pembahagian dipangkas dahulu untuk membentuk integer, keranan suatu integer dibahgai dengan integer menghasilkna integer juga. Apabila bentuk ini ditukarkan kepada nyata, nilai yang diberikan tidak lagi tepat.
43
yang dikhaskan untuk menukarkan jenis satu objek data kepada satu jenis yang lain. Contoh dalam Pascal:
trunc dan round
Tugasan 1
Adalah bahasa C dan Java mempunyai sistem
penyemakan yang kuat atau lemah ? Bagi setiap bahasa C dan Java, berikan contoh-contoh di mana penyemakan dilakukan secara statik dan dinamik.
45