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
© Copyright 2024 Paperzz