download

Matakuliah : Konsep Bahasa Pemrograman
Tahun
: 2010
NAMA, PENGIKATAN, CEK TIPE DAN
LINGKUP VARIABEL
Pertemuan 3
Outline Materi
•
•
•
•
•
Pendahuluan
Nama
Variabel
Konsep Pengikatan
(binding)
Pencekan Tipe
•
•
•
•
•
Bina Nusantara University
Tipe Strong
Kompatibilitas Tipe
Lingkup (scope) dan
Lifetime
Lingkungan
Referensi
Nama Konstan
3
Pendahuluan
• Bahasa imperatif adalah abstraksi dari arsitektur von
Neumann: memori dan prosesor
• Variable adalah abstraksi dari sel memori
• Sel memori abstrak – sel atau koleksi sel fisik yang
berasosiasi dengan variabel
• Variabel dikarakterisasi oleh enam atribut:
– Nama
– Alamat
– Nilai
Bina Nusantara University
- Tipe
- Lingkup
- Lifetime
4
Nama
• Nama – tidak semua variabel punya nama
• Isu desain
–
–
–
–
Panjang maksimum?
Boleh pakai konektor karakter?
Apakah nama case sensitive?
Apakah kata khusus reserved words atau keywords?
• Panjang: jika terlalu pendek mereka tidak konotatif
–
–
–
–
–
FORTRAN I: maksimum 6
COBOL: maksimum 30
FORTRAN 90 dan ANSI C: maksimum 31
Ada dan Java: tak ada batas, semua signifikan
C++: tak ada batas tetapi implementasi kerap dibatasi
Bina Nusantara University
5
Nama (lanjutan)
• Konektor
– Pascal, Modula-2, dan FORTRAN 77 tak boleh
– Yang lain OK
• Case sensitivity
– Kerugian: readability (nama yang kelihatan mirip
adalah berbeda)
• Buruk di C++ dan Java karena predefined names adalah
mixed case (e.g. IndexOutOfBoundsException)
– C, C++, dan Java adalah case sensitive, di bahasa
lain tidak.
Bina Nusantara University
6
Nama (lanjutan)
• Kata-kata khusus
– Membantu readability; digunakan untuk memisahkan klausa
pernyataan
• keyword adalah kata khusus dalam konteks
tertentu e.g., di Fortran
– Real VarName (Real is a data type followed with a name,
therefore Real is a keyword)
– Real = 3.4 (Real is a variable)
– reserved word adalah kata khusus yang tidak dapat
digunakansebagai user-defined name
Bina Nusantara University
7
Alamat
• Alamat memori di mana dia disimpan
• Variabel mungkin punya alamat berbeda saat
eksekusi berlangsung
• Variabel mungkin punya alamat berbeda di
tempat berbeda dalam program
• Jika dua nama variabel digunakan untuk
mengakses lokasi memori yang sama mereka
disebut alias
• Alias di-created melalui pointers, reference
variables, union C dan C++
• Alias sangat mengganggu readability
Bina Nusantara University
8
Tipe dan Nilai
• Tipe
– menentukan rentang nilai suatu variabel dan
himpunan operasi yang didefinisikan pada nilai
tersebut; dalam hal floating point, tipe juga
menentuan presisinya
– untuk mendesain harus mempertimbangkan scope,
lifetime, type checking, initialization, dan type
compatibility
• Nilai
– isi lokasi memori di mana variabel disimpan
Bina Nusantara University
9
Konsep Pengikatan (binding)
• l-value variabel adalah alamat
• R-value variabel adalah nilainya
• Pengikatan adalah asosiasi seperti antara atribut dan
entitas atau antara operasi dan simbol
• Waktu pengikatan adalah waktu terjadinya binding
Bina Nusantara University
10
Kemungkinan Waktu Pengikatan
• Language design time -- simbol operator ke operasi
• Language implementation time-- tipe floating point ke
representasi
• Compile time – variabel ke tipe di C atau Java
• Link time: call ke fungsi kepustakaan
• Load time -- variabel FORTRAN 77 ke sel memori (atau
variabel C static )
• Runtime -- vaiabel lokal non statik ke sel memori
Bina Nusantara University
11
Contoh
• int count;
count = count + 5;
• Himpunan tipe yang mungkin untuk count: language
design time
• Tipe count: compile time
• Himpunan nilai yang mungkin untuk count: compiler
design time
• Nilai count: execution time
• Himpunan arti yang mungkin untuk simbol + : language
definition time
• Arti dari simbol + : compile time
• Representasi internal dari literal 5: compiler design time
Bina Nusantara University
12
Pengikatan Statik dan Dinamik
• Pengikatan adalah static jika pertama kali terjadi
sebelum run time dan tetap tak berubah selama
eksekusi program
• Pengikatan adalah dynamic jika pertama kali terjadi
selama ekseskusi atau dapat berubah selama eksekusi
program
Bina Nusantara University
13
Pengikatan Tipe Statik
• Bagaimana tipe dispesifikasi?
• Kapan pengikatan terjadi?
• Jika statik, tipe mungkin dispesifikasi melalui deklarasi
secara eksplisit atau implisit
• Deklarasi explisit pernyatan program yang digunakan
untuk mendeklarasikan tipe variabel
• Deklarasi implicit mekanisme default untuk
menspesifikasi tipe variabel (kemunculan pertama kali
variabel dalam program)
• FORTRAN, PL/I, BASIC, dan Perl menyediakan
deklarasi implisit
– Keuntungan: writability
Bina Nusantara
–University
Kerugian: reliability (kecuali mungkin Perl)
14
Pengikatan Tipe Dinamik
• JavaScript dan PHP
• Dispesifikasi mlalui pernyataan penugasan mis. di
JavaScript
list = [2, 4.33, 6, 8];
list = 17.3;
• Keuntungan: fleksibel (unit program generik)
• Kerugian:
– Biaya tinggi (dynamic type checking dan interpretasi )
– Deteksi tipe eror oleh kompilator sukar
• i integer dan y floating point
• i=j; // tak ada eror dideteksi oleh kompilator atau run time system
Bina Nusantara University
15
Atribut Variabel (lanjutan)
• Type Inferencing (ML, Miranda, dan Haskell)
– Selain melalui assignment statement, tipe ditentukan dari
konteks referensi
• Pengikatan storage dan lifetime
– Alokasi - mengambil sel dari sejumlah sel memori yang tersedia
– De-alokasi – meletakkan kembali sel kedalam kelompok sel
• Lifetime variabel adalah waktu selama variabel terikat ke
sel memori tertentu
Bina Nusantara University
16
Kategori Variabel menurut Lifetime
•
Statik—terikat ke sel memori sebelum eksekusi mulai
dan tetap terikat ke sel yang salama selama eksekusi ,
e.g., semua varaibel FORTRAN 77, variabel C
• Keuntungan: efsiensi (direct addressing), mendukung
subprogram history-sensitive
• Kerugian: kurang luwes (tak ada rekursi)
Bina Nusantara University
17
Kategori variabel menurut Lifetime (lanjutan)
•
Stack dynamic: pengikatan ruang di-create saat
pernyataan deklarasi variabel dielaborasi
• Jika skalar, semua atibut kecuali alamat terikat secara
statik
– Variabel lokal di subprogram C dan Java methods
• Keuntungan: membolehkan rekusri; conserves storage
• Kerugian:
– Overhead alokasi dan de-alokasi
– Subprogram tidak bisa history sensitive
– Referensi tidak efisien (pengalamatan tidak langsung)
Bina Nusantara University
18
•
Kategori Variabel menurut Lifetime
(lanjutan)
Explicit heap-dynamic – memori tanpa nama yang di
alokasi dan de-alokasi secara eksplisit oleh pemrogram
yang efektif selama eksekusi program
• Referensi hanya melalui pointer atau reference, e.g.
obyek dinamik di C++ (melalui new dan delete), semua
obyek di Java
• Keuntungan : pengelolaan ruang dinamik (tree, linked list
etc)
• Kerugian: tak efisien (cost untuk referensi, alokasi dan
de-alokasi) dan tidak reliabel (kesulitan menggunakan
pointer )
Bina Nusantara University
19
Kategori Variabel menurut Lifetime
(lanjutan)
• Implicit heap-dynamic—Alokasi dan de-alokasi
disebabkan oleh assignment statements
– Semua variabel di APL; semua string dan array di Perl dan
JavaScript
• Keuntungan: fleksibel
• Kerugian :
– Tak efisien karena semua atribut adalah dinamik
– Loss of error detection by compiler
Bina Nusantara University
20
Pencekan Tipe
• Generalisasi dari konsep operand dan operator sehingga
mencakup subprogram dan assignment
• Type checking adalah aktivitas untuk meyakinkan bahwa
operand suatu operator adalah tipe yang kompatibel
• Tipe kompatibel adalah salah satu dari legal bagi
operator, atau dibolehkan oleh aturan yang berlaku
untuk dikonversi secara implisit oleh kompilator menjadi
tipe yang legal
– Konversi otomatis ini sisbut coercion.
• Type error adalah aplikasi operator ke operan yang
tidak tepat tipenya.
Bina Nusantara University
21
Pencekan Tipe (lanjutan)
• Jika semua bentuk pengikatan adalah statik, hampir
semua type checking dapat static
• Jika bentuk pengikatan adalah dinamik, type checking
harus dinamik
• Bahasa pemrograman adalah strongly typed jika semua
bentuk error selalu dideteksi
Bina Nusantara University
22
Strong Typing
• Keuntungan strong typing: memungkinkan mendeteksi
penggunaan variabel yang salah yang bisa
menghasilkan bentuk eror
• Contoh :
– FORTRAN 77 tidak: parameter (relasi antara parametr aktual
dan formal tidak dicek), EQUIVALENCE (memungkinkan
suatu tipe variabel merujuk nilai yang berbeda
tipe)
– Pascal tidak: record varian memungkinkan penghapusan tag
yang menyimpan tipe variabel saat ini
– C dan C++ tidak: parameter type checking dapat dihindari;
union tidak type checked
– Ada ya, hamir semua (UNCHECKED CONVERSION is loophole)
(Java mirip)
Bina Nusantara University
23
Strong Typing (lanjutan)
• Aturan coercion mempengaruhi strong typing—mereka
dapat melemahkannya (C++ versus Ada)
• Meskipun Java hanya mempunyai separuh coercionnya C++, strong typing-nya tetap kurang efektif
daripada Ada
Bina Nusantara University
24
Kompatibilitas Tipe Nama
• Tipe kompatibilitas: by name (bandingkan nama) atau by structures
(bandingkan seluruh struktur).
• Name type compatibility berarti dua variabel mempunyai tipe yang
kompatibel jika mereka sama deklarasinya atau dalam deklarasi
menggunakan nama tipe yang sama
• Mudah diimplementasikan tetapi sangat restriktif:
– Sub-ranges dari tipe integer tidak kompatibel dengan tipe integer
type indextype = 1..100; {a subrange type}
var count : integer;
index : indextype;
count dan index tidak kompatibel; count tak dapat diassign ke index
atau sebaliknya.
– Parameter formal harus mempunyai tipe yang sama dengan parameter
aktual pasangannya (Pascal)
Bina Nusantara University
25
Kompatibilitas Tipe Struktur
• Structure type compatibility berarti bahwa dua variabel
mempunyai tipe kompatibel jika tipenya mempunyai
struktur yang identik
• Lebih luwes tetapi sukar diimplementasikan
• Perhatikan dua masalah dua tipe struktur:
– Apakah dua tipe record kompatibel jika mereka secara struktur
sama tetapi menggunakan nama field berbeda.
– Apakah dua tipe array kompatibel jika mereka sama kecuali
bahwa subscriptnya berbeda?
(e.g. [1..10] and [0..9])
– Apakah dua tipe enumerasi kompatibel jika komponennya dieja
secara berbeda?
– Dengan structural type compatibility, kita tidak dapat
membedakan antara tipe dari struktur yang sama (mis. unit
Bina Nusantara University
kecepatan berbeda, keduanya float)
26
Atribut Variabel: Lingkup
• Lingkup (scope) variabel adalah rentang pernyataan di
mana ia dikenal
• Variabel nonlocal suatu unit program adalah variabel
dikenal tetapi tidak didekalrasikan
• Dikenal artinya dapat dirujuk
• Aturan lingkup suatu bahasa menentukan bagaimana
referensi ke suatu nama diasosiasikan dengan variabel
Bina Nusantara University
27
Lingkup Statik
• Didasarkan pada teks program
• Untuk menghubungkan nama yang dirujuk ke variabel
kita (atau kompilator) harus mencari deklarasinya
• Proses pencarian: cari deklarasi, pertama lokal,
kemudian naik ke lingkup yang meliputinya, (enclosing),
sampai ditemukan nama yang dicari
• Enclosing static scopes (terhadap lingkup spesifik)
disebut static ancestors; static ancestor terdekat disebut
static parent
Bina Nusantara University
28
Lingkup (lanjutan)
• Variabel dapat disembunyikan dari unit dengan
mempunyai "closer" variable dengan nama yang sama
• Cara C++ dan Ada mengkases "hidden" variables ini
– Ada: unit.name
– C++: class_name::name
– Gunakan scope resolution operator :: untuk
mengakses hidden variable di C++
Bina Nusantara University
29
Blok
– Metode untuk membentuk static scopes didalam unit
program –dari ALGOL 60
– Ruang dialokasikan saat blok dimasuki dan di dealokasi saat blok ditinggalkan
– Contoh:
C dan C++: for (...) {
int index;
...
}
Ada: declare LCL : FLOAT;
begin
...
end
Bina Nusantara University
30
Evaluasi Lingkup Statik
• Main memanggil A dan B
• A memanggil C dan D
• B memanggil A dan E
MAIN
MAIN
A
C
A
B
D
C
B
D
E
E
Bina Nusantara University
31
Contoh Lingkup Statik
MAIN
A
C
MAIN
B
D
A
E
C
B
D
E
1-32
Lingkup Statik (lanjutan)
• Andaikan spesifikasinya diubah sehingga D sekarang
harus mengakses data di B
• Solusi
– Letakan D di B (tetapi kemudian C tak dapat lagi memanggilnya
dan D tidak dapat mengakses variabel di A)
– Pindahkan data dari B yang diinginkan D ke MAIN (tetapi
kemudian semua prosedur dapat mengakses mereka)
• Simpulan: static scoping mendorong pemakaian banyak
global variabel
Bina Nusantara University
33
Lingkup Dinamik
• Didasarkan pada pemanggilan unit program secara
berurutan bukannya pada tataletak (temporal versus
spatial)
• Referensi ke variabel dihubungkan ke deklarasi dengan
pencarian kembali menelusuri rangkaian pemanggilan
subprogram yang memaksa eksekusi ke titik ini.
Bina Nusantara University
34
Contoh Lingkup
MAIN
- declaration of x
SUB1
- declaration of x ...
call SUB2
...
MAIN memanggil SUB1
SUB1 memanggil SUB2
SUB2 menggunakan x
SUB2
...
- reference to x ...
...
call SUB1
…
Bina Nusantara University
35
Contoh Lingkup
• Static scoping
– Reference to x is to MAIN's x
• Dynamic scoping
– Reference to x is to SUB1's x
• Evaluasi Dynamic Scoping:
– Keuntungan: parameters yang dikirim menyenangkan karena
mereka kelihatan secara implisit di subprogram yang dipanggil
– Kerugian:
• Kurang reliable daripada static scoping: tak ada cara
memproteksi variabel lokal
• Inability to statically type check reference ke non-local
• Lebih sukar dibaca karena sekuen pemanggilan subprogram
harus diketahui
• Akses ke non-local lebih lama daripada static scoping
Bina Nusantara University
36
Lingkup dan Lifetime
• Scope dan lifetime kadang-kadang sangat berhubungan
erat tetapi mereka berbeda konsep
• Related
– Tak ada pemanggilan subprogram
– Scope: dari deklarasi sampai ke akhir reserved word
– Lifetime : mulai saat prosedur dimasuki dan berakhir saat
eksekusi mencapai akhir
• Pandang variabel static di fungsi C /C++ function :
– static int x;
– Scope: statik dan lokal ke fungsi
– Lifetime: selama eksekusi program berlangsung
Bina Nusantara University
37
Lingkup dan lifetime (lanjutan)
• Unrelated
– Ada pemanggilan subprogram
• void printHeader() {
…
}
void compute() {
int sum;
…
printHeader();
…
}
– Scope of sum: di dalam fungsi compute
– Life time of sum: sepanjang waktu selama eksekusi
printHeader()
Bina Nusantara University
38
Lingkungan Referensi
• The referencing environment suatu statement adalah
koleksi semua nama yang kelihatan di dalam statement
• Di bahasa static-scoped , ia adalah variabel lokal
ditambah semua variabel yang visibel didalam semua
lingkup yang mencakupnya.
• Subprogram adalah aktif jika eksekusinya telah dimulai
tetapi belum berakhir
• Di bahasa dynamic-scoped , referencing environment
adalah variabel lokal ditambah semua variabel visibel di
dalam semua subprogram aktif.
Bina Nusantara University
39
Named Constant
• named constant adalah variabel yang terikat ke suatu
nilai hanya jika ia terikat ke ruang
• Keuntungan: readability dan modifiability
• Digunakan untuk parameterize programs
• Pengikatan nilai ke named constants dapat statik
(disebut manifest constants) atau dinamik
• Bahasa :
– FORTRAN 90: constant-valued expressions
– Ada, C++, dan Java: ekspresi sembarang bentuk
Bina Nusantara University
40
Inisialisasi Variabel
• Pengikatan variabel ke nilai saat ia terikat ke ruang
disebut initialisasi
• Initialisasi kerap dilakukan di pernyataan deklarasi , e.g.,
di Java
int sum = 0;
Bina Nusantara University
41
LATIHAN
4. Opsi berikut yang merupakan bahasa strong typed adalah
a. FORTRAN dan Ada
b. C/C++ dan Pascal
c. Java dan ML
d. Java, Pascal, Ada, C/C++, Ada
dan ML.
5. Selain static, kategori lain dari scalar variable menurut life time adalah
a. stack dynamic dan explicit heap dynamic
b. stack dynamic dan implicit heap dynamic
c. explicit dan implicit heap dynamic
d. stack dynamic, explicit dan implicit heap dynamic.
Bina Nusantara University
42
LATIHAN
B. SOAL PILIHAN
1. Ada dua aspek penting pada tipe binding yaitu bagaimana tipe variable
dispesifikasi (i.e. dideklarasikan) dan kapan binding terjadi. Uraikan apa
yang kamu ketahui tentang deklarasi variable dan dynamic type binding.
2. Menurut lifetime-nya, variable dibagi menjadi 4 kategori yaitu static, stack
dynamic, explicit heap dynamic dan implicit heap dynamic. Uraikan apa
yang kamu ketahui tentang ke-empat kategori tersebut. Uraian kamu paling
tidak harus mencakup tentang: definisi atau pengertian, di bahasa apa
mereka diimplementasikan, keuntungam (advantage) dan kerugian
(disadvantage) dari implementasi.
Bina Nusantara University
43
LATIHAN
A. SOAL URAIAN
1. Structured dynamic seperti linked-list dan graph, dibentuk menggunakan
variable
a. static
b. stack dynamic
c. explicit heap dynamic
d. implicit heap dynamic
2.Scope operator :: digunakan untuk mengakses hidden global variable
oleh bahasa
a. Ada
b. Pascal
c. Algol 60
d. C++
3. Di C++ dan Java, variable local by default adalah
a. static
b. stack dynamic
c. explicit heap dynamic
d. implicit heap dynamic
Bina Nusantara University
44
Ringkasan
• Case sensitivity dan keterkaitan nama ke special words
merupakan isu utama mendesain nama
• Variablel dikarakterisir oleh enam atribut: nama, alamat,
nilai, tipe, lifetime, lingkup
• Pengikatan adalah asosiasi atribut dengan program
• Variabel skalar digolongkan sebagai: statick stack
dynamic, explicit heap dynamic, implicit heap dynamic
• Strong typing berarti mendeteksi semua tipe eror
Bina Nusantara University
45