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