download

Matakuliah : KONSEP BAHASA PEMROGRAMAN
Tahun
: 2010
TIPE DATA
Pertemuan 4
Outline Materi
•Pendahuluan
•Tipe data primitif
•Tipe data string karakter
•Tipe data ordinal user-defined
•Tipe data array
•Tipe data record
•Tipe data union
•Tipe data pointer dan reference
Bina Nusantara University
3
Pendahuluan
•
•
•
•
Tipe data mendefinisikan koleksi data obyek dan
himpunan predefined operasi pada obyek tersebut
Descriptor adalah koleksi atribut variabel
Obyek mewakili instan user-defined TDA
Isu desain tipe data: operasi apa yang perlu
didefinisikan dan bagaimana mereka dispesifikasi.
Bina Nusantara University
4
Tipe Data Primitif
• Hampir semua bahasa pemrograman mempunyai
himpunan tipe data primitif
• Tipe data primitif adalah tipe data yang tidak
didefinisikan pada tipe data lain
• Sejumlah tipe data primitif semata-mata mewakili
hardware
• Yang lain memerlukan sedikit dukungan non-hardware
Bina Nusantara University
5
Tipe Data Primitif : Integer
• Hampir selalu merupakan refleksi eksak hardware
sehingga mapping adalah trivial
• Disajikan sebagai string of bits dengan bit paling kiri
sebagai tanda
• Ada sebanyak delapan tipe data integer berbeda dalam
bahasa
• C/C++: mencakup juga integer tanpa tanda
• Java integer bertanda: byte, short, int, long
Bina Nusantara University
6
Tipe Data Primitif : Floating Point
• Model bilangan real, tetapi hanya aproksimasi
• π dan e tidak dapat disajikan secara tepat di floating
point
• Desimal 0.1 tidak dapat disajikan oleh finite number of
binary digits
• Bahasa untuk sains paling sedikit mendukung dua tipe
data floating-point , e.g., float and double
• Biasanya exactly like the hardware, tetapi tidak selalu
• IEEE Floating-Point Standard 754
Bina Nusantara University
7
Tipe Data Primitif : Desimal
• Untuk aplikasi bisnis (uang)
– Esensial di COBOL
– C# menawarkan tipe data desimal
• Menyimpan bilangan digit desimal dengan titik desimal
diposisi tetap
• Disimpan menggunakan kode biner yang disebut BCD
• Satu digit per byte atau dua digits per byte. Paling sedikit
empat bit untuk mengkode desimal
• Keuntungan: akurat
• Kerugian : rentang terbatas, boros memori
• Untuk menyimpan enam digit BCD memerlukan 24 bits.
Hanya 20 bits untuk menyimpn bilangan yang sama di
binary
8
Bina Nusantara University
Tipe Data Primitif : Boolean
•
•
•
•
•
Dikenalkan di Algol 60
Paling sedehana
Rentang nilai: “true” dan “false”
Digunakan sebagai kondisional, switch atau flag
Perkecualian di C : numerik digunakan sebagai
kondisional; nol dipandang sebagai False dan nonzero
dipandang sebagai True
• Dapat diimplementasikan sebagai bits, tetapi lebih
sering sebagai bytes
• Keuntungan : readability
Bina Nusantara University
9
Tipe Data Primitif : Karakter
• Disimpan sebagai kode numerik
• Kode yang paling banyak digunakan: ASCII
• Alternatif, 16-bit kode: Unicode
– Mencakup juga karakter dari sebagian bahasa natural
– Aslinya digunakan di Java
– C# dan JavaScript juga mendukung Unicode
Bina Nusantara University
10
Tipe string Karakter
• Bentuknya adalah sekuen karakter
• Isu desain:
– Tipe primitif atau bentuk khusus dari array?
– Panjang string, statik atau dinamik?
• Operasi:
–
–
–
–
–
Assignment dan copy
Komparasi (=, >, etc.)
Catenation
Referensi substring
Pattern matching
Bina Nusantara University
11
Tipe string karakter di bahasa tertentu
• C dan C++
– Tidak primitif
– Array char dan fungsi kepustakaan yang
menyediakan operasi-operasi
• SNOBOL4 (bahasa manipulasi string)
– Primitif
– Banyak operasi, termasuk elaborasi pattern matching
• Java
– Primitif melalui klas String
Bina Nusantara University
12
Panjang dan Evaluasi string
• Panjang
– Statik: COBOL, Java’s String class
– Limited Dynamic : C dan C++
• Di bahasa berbasis C, karakter khusus digunakan untuk menandai
akhir string karakter, bukannya maintaining the length
– Dynamic (tak ada maksimum): SNOBOL4, Perl, JavaScript
• Ada mendukung ketiganya
• Evaluasi
– Membantu writability
– Sebagai tipe primitif dengan panjang statik, mereka tidak tinggi
cost-nya --- mengapa tidak menggunakannya?
– Panjang dinamik menyenangkan, tetapi bagaimana cost-nya?
Bina Nusantara University
13
Implementasi string
• Static: compile-time descriptor
• Limited dynamic: mungkin butuh run-time
descriptor untuk panjang, tetapi tidak di C/C++
karena akhir string ditandai dengan karakter null
• Dynamic : butuh run-time descriptor; alokasi/dealokasi adalah masalah utama implementasi
– Alternatif: simpan di linked-list atau di ruang sel yang
bersebelahan (adjacent)
Bina Nusantara University
14
Deskriptor Compile- dan Run-Time
Compile-time descriptor
for static strings
Bina Nusantara University
Run-time descriptor for
limited dynamic strings
15
Tipe Ordinal
• Tipe ordinal adalah tipe yang rentang nilainya dapat
diasosiasikan dengan himpunan integer positif
• Contoh tipe ordinal primitif di Java
– integer
– char
– boolean
Bina Nusantara University
16
Tipe Enumerasi
• Semua nilai yang mungkin, disebut constant, disediakan
di definisi
• Contoh C#
enum days {mon, tue, wed, thu, fri, sat, sun};
• Isu desain
– Apakah constant boleh muncul dalam lebih dari satu kali tipe
definisi, jika ya, bagaimana menceknya?
– Apakah nilai enumerasi di-coerce ke integer?
Bina Nusantara University
17
Evaluasi Tipe Enumerasi
• Membantu readability, e.g., tak perlu mengkode
color sebagai integer
• Membantu reliability, e.g., kompiler dapat mencek:
– Operasi (tidak membolehkan color ditambahkan)
– Tak ada variabel enumerasi yang diberi nilai di luar
rentang nilai yang didefinisikan
– Ada, C#, dan Java 5.0 menyediakan dukungan yang
lebih baik daripada C++ karena tipe enumerasi di
bahasa ini tidak di-coerce kedalam tipe integer
Bina Nusantara University
18
Tipe Subrange
•
Subsekuen kontinu terurut dari tipe ordinal
– Contoh: 12..18 adalah subrange dari tipe integer
•
Ada
type Days is (mon, tue, wed, thu, fri, sat, sun);
subtype Weekdays is Days range mon..fri;
subtype Index is Integer range 1..100;
Day1: Days;
Day2: Weekday;
Day2 := Day1;
•
Membantu readability
– Membuat mudah bagi pengguna bahwa variabel subrange hanya dapat
menyimpan rentang nilai tertentu
•
Reliability
– Memberikan nilai ke variabel subrange yang berada di luar rentang nilai yang
ditentukan dideteksi sebagai eror
Bina Nusantara University
19
Implemantasi Tipe Ordinal
• Tipe enumerasi diimplementasikan sebagai integer
• Tipe subrange diimplementaskan seperti tipe induknya
dengan kode disisipkan oleh kompiler untuk membatasi
pemberian nilai ke variabel subrange
Bina Nusantara University
20
Tipe Array
• Array adalah agregasi elemen data homogen di mana
elemen individual diidentifikasi oleh posisinya relatif
terhadap posisi pertama
• Isu desain
-Tipe apa yang legal untuk subscript?
- Apakah referensi keelemen dalam bentuk ekspresi di-cek?
- Kapan rentang subscript diikat?
- Kapan alokasi terjadi?
- Berapa banyak subskrip maksimum?
- Dapatkah obyek array diinisialisasi?
- Apakah slices dibolehkan?
Bina Nusantara University
21
Pengindeksan Array
• Batas bawah subscript kadang-kadang implisit
– C, C++, Java: tetap di 0
– FORTRAN I,II, IV : tetap di 1
– FORTRAN 77, 90, 95: default 1
• Pengindeksan (atau subscripting) adalah pemetaan dari
indeks ke elemen
array_name (index_value_list) 
an element
• Sintaks indeks
– FORTRAN, PL/I, Ada menggunakan parentheses
• Ada eksplisit menggunakan parentheses untuk menunjukkan
uniformitas antara referensi array dan pemanggilan fungsi
karena dua-duanya adalah mappings
– Sebagian besar bahasa lain menggnaan brackets
Bina Nusantara University
22
Tipe Indeks Array
• FORTRAN, C, Java: hanya integer
• Pascal: sembarang tipe ordinal (integer, Boolean, char,
enumeration)
• Ada: integer atau enumeration (termasuk Boolean dan
char)
• C, C++, Perl, dan Fortran tidak mencek rentang nilai
indeks
• Java, ML, C# menspesifikasi range checking
Bina Nusantara University
23
Kategori Pengikatan Subskrip dan Array
• Pengikatan biasanya statik, tetapi nilainya
kadang-kadang dinamik
• Static: rentang subscript adalah statically bound
dan alokasi ruang adalah static (sebelum runtime)
– Keuntungan: efisien (tak ada alokasi dinamik)
• Fixed stack-dynamic: rentang subscript adalah
statically bound, tetapi alokasi dilakukan saat
deklarasi
– Keuntungan : efisiensi ruang
Bina Nusantara University
24
Kategori Pengikatan Subskrip dan Array
• Stack-dynamic: rentang subscript adalah dynamically
bound dan alokasi ruang adalah dinamik (saat run-time)
– Keuntungan : fleksibel (ukuran array tak perl diketahui sampai ia
digunakan)
• Fixed heap-dynamic: mirip dengan fixed stack-dynamic
yaitu pengikatan ruang adalah dinamik tetapi tetap
setelah alokasi (i.e., pengikatan dilakukan saat diminta
dan ruang dialokasikan dari heap bukan stack)
• Heap-dynamic: pengikatan rentang subscript ranges dan
alokasi ruang adalah dinamik dan dapat berubah setiap
waktu
– Keuntungan: fleksibel (array dapat mengembang dan menciut
Bina Nusantara University
selama eksekusi program)
25
Kategori Pengikatan Subskrip dan Array
• Array C dan C++ dengan modifier static adalah static
• Array C dan C++ tanpa modifier static adalah fixed
stack-dynamic
• Array Ada dapat stack-dynamic
• C dan C++ menyediakan array fixed heap-dynamic
• C# mencakup array kedua class ArrayList yang
menyediakan fixed heap-dynamic
• Perl dan JavaScript mendukung heap-dynamic arrays
Bina Nusantara University
26
Inisialisasi Array
• Sejumlah bahasa membolehkan inisialisasi saat
alokasi ruang
– Contoh di C, C++, Java, C#
int list [] = {4, 5, 7, 83}
– String karakter di C dan C++
char name [] = “freddie”;
– Arrays of strings di C dan C++
char *names [] = {“Bob”, “Jake”, “Joe”];
– Inisialisasi string objects Java
String[] names = {“Bob”, “Jake”, “Joe”};
Bina Nusantara University
27
Operasi Array
• APL menyediakan operasi array yang paling powerful
untuk vektor , matriks dan operator uner (misalnya,
membalik elemen array)
• Ada membolehkan array assignment dan juga
catenation
• Fortran menyediakan operasi elemental , misalnya
operator + antara dua array menghasilkan array baru
yang elemennya adalah jumlah dari pasangan dua array
yang dijumlahkan
Bina Nusantara University
28
Array Segi-empat dan Jagged
• Array segi-empat adalah array multi-dimensi di mana
semua baris mempunyai banyak elemen yang sama dan
semua kolom juga mempunyai banyak elemen yang
sama
• Array jagged mempunyai baris dengan banyak elemen
yang bervariasi
– Mungkin terjadi jika array multi-dimensi muncul sebagai array of
array
Bina Nusantara University
29
Slices
• Slice adalah suatu substruktur dari array; tidak
lain adalah mekanisme referensi
• Slices hanya bermanfaat pada bahasa yang
mempunyai operasi array
• Fortran 95
Integer, Dimension (10) :: Vector
Integer, Dimension (3, 3) :: Mat
Integer, Dimension (3, 3) :: Cube
Vector (3:6) adalah array empat elemen
Bina Nusantara University
30
Contoh slice di Fortran 95
Bina Nusantara University
31
Implementasi Array
• Fungsi akses memetakan ekspresi subskrip ke
alamat dalam array
• Array dimensi satu:
address(list[k]) = address (list[lower_bound])
+ ((k-lower_bound) * element_size)
• Array dimensi dua:
– RMO (per baris) – digunakan oleh sebagian besar
bahasa
– CMO (per kolom) – digunakan oleh Fortran
Bina Nusantara University
32
Melokasi elemen array multi-dimensi
• Bentuk umum
– Lokasi (a[I,j]) = alamat a [row_lb,col_lb] + (((I - row_lb) * n)
+ (j - col_lb)) * ukuran_elemen
Bina Nusantara University
33
Deskriptor Compile-Time
Bina Nusantara University
34
Array Asosiatif
•
Array associative adalah koleksi elemen data tak urut
yang diindeks dengan equal number of values yang
disebut key
–
•
•
User defined keys harus disimpan
Isu desain: apa bentuk referensi ke elemen?
Perl
– Nama mulai dengan %; literal dipisahkan oleh parentheses
%hi_temps = ("Mon" => 77, "Tue" => 79, “Wed” =>
65, …);
– Subscripting dilakukan menggunakan braces dan keys
$hi_temps{"Wed"} = 83;
– Elemen dapat dihapus dengan delete
Bina Nusantara University
delete $hi_temps{"Tue"};
35
Tipe Record
• Record adalah agregasi elemen data mungkin heterogen
di mana elemen individual diidentifikasi oleh namanya
• FORTRAN pra-90 tidak punya tipe record
• C++ menggunakan struct untuk record
• Java tidak punya struct
• Isu desain
– Bagaimana bentuk sintaks referensi ke field?
– Apakah referensi eliptikal dibolehkan?
Bina Nusantara University
36
Definisi Record
• COBOL menggunakan nomor level untuk
menunjukkan nested records; yang lain
menggunakan definisi rekursif
• Record Field References
1. COBOL
field_name OF record_name_1 OF ... OF
record_name_n
2. Others (dot notation)
record_name_1.record_name_2. ...
record_name_n.field_name
Bina Nusantara University
37
Record di COBOL
• COBOL menggunakan nomor level untuk menunjukkan
nested records; yang lain menggunakan definisi rekursif
01 EMP-REC.
02 EMP-NAME.
05 FIRST PIC X(20).
05 MID
PIC X(10).
05 LAST PIC X(20).
02 HOURLY-RATE PIC 99V99.
Bina Nusantara University
38
Record di Ada
• Struktur record disajikan secara ortogonal
type Emp_Rec_Type is record
First: String (1..20);
Mid: String (1..10);
Last: String (1..20);
Hourly_Rate: Float;
end record;
Emp_Rec: Emp_Rec_Type;
Bina Nusantara University
39
Referensi ke Record
• Kebanyakan bahasa menggunakan notasi dot
Emp_Rec.Name
• Fully qualified references harus mencakup semua nama
record
• Elliptical references membolehkan leaving out nama
record asalkan refrensi unambiguous, sebagai contoh di
COBOL
FIRST, FIRST OF EMP-NAME, and FIRST of EMPREC adalah elliptical references ke employee’s first
name
Bina Nusantara University
40
Operasi di Record
• Assignment adalah yang paling umum jika tipenya
identik
• Ada membolehkan perbandingan record
• Record Ada dapat diinisialisasi dengan agregasi literal
• COBOL menyediakan MOVE CORRESPONDING
– Copy field record sumber ke field pasangannya di record target
Bina Nusantara University
41
Array vs Record
• Record digunakan jika koleksi nilai data heterogen
• Akses ke elemen array jauh lebih lambat ke field, karena
subscript bersifat dinamik sedangkan nama field statik
• Subscript dinamik dapat digunakan bersama-sama
dengan akses field record, tetapi tidak ada cek tipe dan
akan jauh lebih lambat
Bina Nusantara University
42
Implementasi Tipe Record
• Alamat offset relatif ke awal record diasosiasikan untuk setiap field
Bina Nusantara University
43
Tipe Union
• Union adalah tipe data yang variabelnya dibolehkan
untuk menyimpan nilai berbeda tipe selama eksekusi
berlangsung
• Isu desain
– Apakah cek tipe dibutuhkan?
– Bolehkan union di-embedded dalam record?
• Konstruksi tidak aman karena tak ada pencekan tipe
• Java dan C# tidak mendukung union
– Refleksi tumbuhnya perhatian untuk bahasa pemrograman yang
lebih aman
Bina Nusantara University
44
Discriminate vs Free Union
• Fortran, C, dan C++ menyediakan konstruksi union di
mana tak ada dukungan bahasa untuk melakukan cek
tipe; union tipe ini disebut free union
• Pencekan tipe di union memerlukan bahwa setiap union
mempunyai tipe indikator yang disebut discriminant atau
tag
– Didukung oleh Ada
• Union dengan discriminant disebut discriminated union
• Discriminated union di Pascal disebut record variant
Bina Nusantara University
45
Tipe Union Ada
type Shape is (Circle, Triangle, Rectangle);
type Colors is (Red, Green, Blue);
type Figure (Form: Shape) is record
Filled: Boolean;
Color: Colors;
case Form is
when Circle => Diameter: Float;
when Triangle =>
Leftside, Rightside: Integer;
Angle: Float;
when Rectangle => Side1, Side2: Integer;
end case;
end record;
Bina Nusantara University
46
Ilustrasi Union Ada
• Descriminated union dengan tiga variabel
Bina Nusantara University
47
Tipe Pointer dan Reference
• Variabel tipe pointer mempunyai rentang nilai
yang berbentuk alamat memori dan nilai khusus
nil
• Untuk melakukan indirect addressing
• Cara untuk mengelola memori dinamik
• Pointer dapat digunakan untuk mengakses
lokasi di mana ruang memori dibentuk secara
dinamis, biasa disebut heap
• Representasi pointer
– Komputer besar menggunakan single values
– Intel microprocessors menggunakan segment dan
Bina Nusantara University
48
Isu Desain Pointer
• Apa lingkup dan lifetime variabel pointer?
• Apa lifetime dari variabel heap-dynamic?
• Apakah pointer dibatasi pada tipe nilai yang dapat
ditunjuknya?
• Apakah pointer digunakan untuk pengelolaan ruang
dinamik, pengalamatan tak langsung atau keduanya?
• Apakah bahasa perlu mendukung pointer, reference
atau keduanya?
Bina Nusantara University
49
Operasi Pointer
• Dua operasi dasar: assignment dan dereferencing
• Assignment digunakan untuk men-set nilai variabel
pointer ke alamat yang diperlukan
• Dereferencing menghasilkan nilai yang disimpan di
lokasi yang ditunjuk oleh pointer
– Dereferencing bisa eksplisit atau implisit
– C++ menggunakan operasi eksplisit melalui *
j = *ptr
set j ke nilai yang ditunjuk oleh ptr
Bina Nusantara University
50
Ilustrasi Pointer Assignment
• Operasi assignment j = *ptr
Bina Nusantara University
51
Masalah dengan Pointer
• Dangling pointers (bahaya)
– Pointer menunjuk ke variabel heap-dynamic yang telah di deallocated
• Lost heap-dynamic variable
– Alocated heap-dynamic variable yang tidak dapat lagi diakses
oleh pemrogram, disebut garbage
• Pointer p1 di-set ke variabel heap-dynamic
• Pointer p1 kemudian di-set untuk menunjuk variabel heap-dynamic
lain yang baru dibentuk
• Dangling pointers tidak dimungkinkan di Ada karena
obyek dinamik otomatis akan di de-allocated di akhir
lingkup pointer
• Masalah lost heap-dynamic variable tidak dieleminir di
Ada
Bina Nusantara University
52
Pointer di C/C++
• Sangat luwes tetapi harus digunakan secara hati-hati
• Pointer dapat menunjuk ke sembarang variabel tanpa
memperhatikan kapan ia dialokasikan
• Digunakan untuk dynamic storage management dan
addressing
• Aritmatika pointer dimungkinkan
• Ekplisit dereferencing dan address-of operators
• Domain type tak perlu tetap (void *)
• void * dapat menunjuk tipe sembarang dan dapat
dicek tipenya ( tak dapat de-referenced)
Bina Nusantara University
53
Aritmatika Pointer di C/C++
float stuff[100];
float *p;
p = stuff;
*(p+5) is equivalent to stuff[5] and p[5]
*(p+i) is equivalent to stuff[i] and p[i]
Bina Nusantara University
54
Pointer di Fortran 95
• Pointer menunjuk ke variabel heap dan non-heap
• Implisit dereferencing
• Pointer hanya dapat menunjuk variabel yang
mempunyai atribut TARGET
• Atribut TARGET di-assign deklarasi:
INTEGER, TARGET :: NODE
Bina Nusantara University
55
Tipe Reference
• C++ mencakup pointer khusus disebut tipe reference
yang utamanya digunakan untuk parameter formal
– Manfaat untuk pass-by-reference dan pass-by-value
• Java memperluas reference C++ dan memungkinkan
mereka untuk mengganti pointer seluruhnya
• C# mencakup Java reference dan C++ pointer
Bina Nusantara University
56
Evaluasi Pointer dan Reference
• Dangling pointer dan dangling object adalah masalah
seperti halnya heap management
• Pointer mirip goto—ia memperlebar rentang sel yang
dapat diakses oleh variabel
• Pointer atau reference diperlukan untuk struktur data
dinamik sehingga kita tidak dapat mendesain tanpa
keduanya.
Bina Nusantara University
57
Solusi Dangling Pointer
• Tombstone: sel heap tambahan yaitu pointer ke heapdynamic variable
– Variabel pointer aktual hanya menunjuk ke tombstone
– Jika variabel heap-dynamic di de-allocated, tombstone tetap ada
tetapi di-set ke nil
– Costly menurut waktu dan ruang
. Locks-and-keys: nilai pointer disajikan sebagai pasangan
(key, address)
– Variabel heap-dynamic disajikan sebagai variabel plus sel nilai
integer lock
– Jika variabel heap-dynamic dialokasi, nilai lock di-create dan
diletakkan di sel lock dan sel key
Bina Nusantara University
58
Pengelolaan Heap
• Proses run-time yang sangat kompleks
• Sel single-size vs variable-size
• Pendekatan untuk mengisi kembali garbage
– Reference counters (eager approach): reklamasi gradual
– Garbage collection (lazy approach): reklamasi dilakukan jika
ruang variabel telah kosong
Bina Nusantara University
59
Reference Counter vs Garbage Collection
• Reference counter: menjaga counter di dalam setiap sel yang
menyimpan pointer-pointer yang sedang menunjuk ke sel
– Kerugian: dibutuhkan ruang, dibutuhkan waktu eksekusi, komplikasi
untuk sel-sel yang dihubungkan secara sirkular
• Garbage Collection : sistem run-time mengalokasikan ruang sel
seperti yang diminta dan menentukan pointer dari sel jika perlu;
kemudian koleksi garbage mulai
– Setiap sel heap mempunyai bit tambahan yang digunakan oleh koleksi
algoritma
– Semua sel awalnya di-set ke garbage
– Semua pointer menelusuri heap dan sel yang dicapai ditandai sebagai
not garbage
– Semua sel garbage dikembalikan ke list sel yang tersedia
– Kerugian: jika kita ingin maksimal, kinerja sangat jelek( sebagian besar
waktu dibutuhkan jika program menginginkan sebagian besar sel di
Bina Nusantara University
60
heap )
Variable-Size Cell
• Semua kesulitan single-size cells plus sejumlah
masalah baru
• Dibutuhkan oleh sebagian besar bahasa
pemrograman
• Jika koleksi garbage digunakan, tambahan
masalah muncul
– Setting awal indikator sel dalam heap sulit
– Proses marking nontrivial (algoritma marking)
– Pengelolaan list ruang yang tersedia adalah sumber
lain masalah
Bina Nusantara University
61
LATIHAN
A. SOAL URAIAN
1. Keyword di bahasa C untuk membuat variable local menjadi history sensitive
adalah
a. auto
b. extern
c. static
d. register
2.Union di Pascal disebut
a. free union
c. EQUIVALENCE
b. discriminating union
c. record variant
3. Aliases dapat terjadi dengan berbaga cara pada bahasa yang berbeda yaitu
– EQUIVA:LENCE (FORTRAN) dan variant record (Pascal. Ada0
– EQUIVA:LENCE (FORTRAN) dan union (C/C++)
– Variant record (Pascal, Ada) dan union (C/C++)
– EQUIVA:LENCE (FORTRAN), variant record (Pascal, Ada) dan union (C/C++).
Bina Nusantara University
62
LATIHAN
4. Pilih yang benar
a. Pointer dan reference menunjuk lokasi memori
b. Pointer menunjuk lokasi memori dan reference menunjuk
instance class
c. Pointer menunjuk instance class dan reference menunjuk lokasi
memori
d. Pointer dan reference menunjuk instance class
5. Union C disebut
a. free union
c. record variant
Bina Nusantara University
b. discriminating union
d. non discriminating union
63
LATIHAN
B. SOAL PILIHAN
1. Pointer pertama kali dikenalkan di bahasa PL/I. Ia sangat powerful tetapi
kadangkadang unsave jika kita tidak hati-hati menggunakannya. Ada masalah yang
dihadapi saat menggunakan pointer yaitu dangling pointer . Solusi teoritis
ditawarkan untuk menghindari terjadinya dangling pointer yaitu
menggunakan extra heap cells yang disebut tombstones dan pendekatan
locks-and-keys seperti yang diimplementasikan di UW Pascal. Uraikan apa
yang kamu ketahui tentang dangling pointer, tombstones dan locks-andkeys.
2. Uraikan apa yang kamu ketahui tentang tipe data pointer dan tipe data
reference.
Berikan contoh bagaimana kedua tipe data tadi dideklarasikan.
C++ dan Java keduanya mempunyai tipe data reference tetapi tidak sama
pengertiannya.
Uraikan perbedaan antara tipe data reference di C++ dan
Bina Nusantara
University
Java.
64
Ringkasan
• Tipe data suatu bahasa faktor utama untuk menentukan
manfaat dan ciri bahasa
• Tipe data primitif dari sebagian besar bahasa imperatif
mencakup tipe numerik, karakter, dan Boolean
• Tipe enumerasi user-defined dan tipe subrange sangat
membantu readability dan reliability program
• Array dan record ada disebagian besar bahasa
• Pointer digunakan untuk keluwesan pengalamatan dan
mengkontrol pengelolaan ruang dinamik
Bina Nusantara University
65