Programming Language Concept Session 4

Programming Language Concept Session 4


  • Data type menjelaskan suatu collection nilai data dan suatu set predefined operation pada nilai tersebut
  • Descriptor merupakan collection atribut dari suatu variable
  • Suatu object mewakili suatu instansi dari tipe user-defined (abstract type)

Primitive Data Type


  • Primitive data type merupakan tipe data yang tak didefinisikan dalam hal tipe data lain
  • Hampir semua bahasa pemrograman menyediakan suatu set primitive data type
  • Beberapa primitive data type hanyalah cerminan dari hardware
  • Yang lainnya hanya memerlukan sedikit dukungan non-hardware untuk implementasinya
  • Primitive Data Type:
    – Integer
    – Floating Point
    – Complex
    – Decimal
    – Boolean
    – Character

Character String Type


  • Character string type merupakan tipe data yang berisi rentetan atau kumpulan karakter
  • Operasi pada character string type:
    Assignment dan copying
    – Pembandingan (Comparison)
    – Catenation
    – Substring reference
    – Pattern matching
  • Panjang string dapat dijadikan static dan ditetapkan ketika string dibuat, dikenal dengan static length string (COBOL, kelas string di Java)
  • Memperbolehkan string memiliki panjang yang berbeda dengan maksimum sampai yang dideklarasikan dikenal dengan dynamic length string (C, C++)
  • Memperbolehkan string memiliki panjang yang berbeda dan tidak memiliki batas maksimum, dikenal dengan dynamic length string (Javascript, Perl, dll)
  • Implementasi character string:
    Static length : compile-time descriptor
    Limitied dynamic length : mungkin memerlukan run-time descriptor untuk panjang (namun tidak di C dan C++)
    Dynamic length : memerlukan run-time descriptor; alokasi/de-alokasi merupakan masalah implementasi terbesar

User-Defined Ordinal Type


  • Ordinal type merupakan tipe yang kemungkinan rentang nilainya dapat dengan mudah dihubungkan dengan suatu set integer positif
  • Contoh primitive ordinal type di Java
    – Integer
    – Char
    – Boolean

Enumaration Type


  • Enumaration type merupakan tipe yang semua kemungkinan nilainya, yang dinamakan konstan, disediakan, atau dienumerasi, di definisi
  • Contoh di C#

enum days {Mon, Tue, Wed, Thu, Fri, Sat, Sun};

  • Membantu readability, karena tidak perlu meng-code suatu warna sebagai angka
  • Membantu reliability, compiler dapat memeriksa:
    – Operasi
    – Tidak ada variable enumeration yang dapat di-assign ke suatu nilai diluar rentang yang telah ditetapkan

Subrange Type


  • Subrange Type merupakan urutan rentetan kelanjutan berdampingan dari ordinal type
  • Membantu readability, memperjelas pada pembaca bahwa variable dari subrange hanya dapat menyimpan rentang nilai tertentu
  • Reliability, menugaskan (assigning) suatu nilai ke variable subrange yang berada diluar rentang yang telah ditentukan akan dideteksi sebagai error
  • Contoh di 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 : Weekdays;

. . .

Day2 := Day1;

Implementasi User-Defined Ordinal Type


  • Enumeration type diimplementasikan sebagai integer
  • Subrange type diimplementasikan seperti parent type dengan memasukkan code (oleh compiler) untuk membatasi assignment ke variable subrange

Array Type


  • Array merupakan agregat homogen elemen data yang mana tiap elemen individunya diidentifikasi dengan posisinya di agregat tersebut, dengan patokan elemen pertama
  • Indexing (atau subscripting) merupakan suatu pemetaan dari index ke elemen

array_name (index_value_list) -> an element

  • Beberapa bahasa seperti Fortran dan Ada menggunakan kurung (parentheses) sebagai syntax, sedangkan kebanyakan bahasa lainnya menggunakan kurung kotak (bracket)
  • Tipe index array:
    – FORTRAN, C : hanya integer
    – Ada : integer atau enumeration (termasuk Boolean dan char)
    – Java : hanya integer
  • Pengecekan rentang index:
    – C, C++, Perl, dan Fortran tidak menjelaskan pemeriksaan rentang index
    – Java, ML, C# menjelaskan pengecekan rentang index
    – Di Ada, defaultnya membutuhkan pemeriksaan, namun dapat dinon-aktifkan

Subscripting Binding


  • Static, rentang subscript terikat secara static dan alokasi penyimpanan juga static (sebelum run time), contoh C dan C++
  • Fixed stack-dynamic, rentang subscript terikat secara static, namun alokasi penyimpanan dilakukan saat elaborasi deklarasi selama eksekusi, contoh C#
  • Stack-dynamic, rentang subscript maupun alokasi penyimpanan diikat secara dynamic pada waktu elaborasi, contoh C dan C++
  • Fixed heap-dynamic, sama seperti fixed stack-dynamic yang rentang subscript dan pengikatan penyimpanannya ditentukan setelah penyimpanan dialokasikan, namun bedanya keduanya selesai ketika user program meminta mereka saat eksekusi, contoh C dan C++
  • Heap-dynamic, pengikatan rentang subscript dan alokasi penyimpanan secara dynamic dan dapat berubah-ubah selama lifetime array, contoh Perl, JavaScript, dll

Array Homogen dan Heterogen


  • Array heterogen merupakan array yang elemennya boleh berbeda tipe
  • Array yang elemennya hanya berisi satu tipe disebut array homogen
  • Array heterogen didukung oleh bahasa Perl, Python, JavaScript, dan Ruby

Slice


  • Slice merupakan beberapa substructure dari suatu array, tak lebih dari sebuah mekanisme pengalamatan
  • Slice hanya berguna di bahasa yang memiliki operasi array
  • Contoh di Python:

vector = [2, 4, 6, 8, 10, 12, 14, 16]

mat = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]

vector (3:6) is a three-element array

mat[0][0:2] is the first and second element of the first row of mat

Implementasi Array


  • Fungsi akses array satu dimensi:

address(list[k]) = address (list[lower_bound]) + ((k-lower_bound) * element_size)

  • Fungsi akses array berdimensi banyak:

Location (a[I,j]) = address of a [row_lb,col_lb] + (((I – row_lb) * n) + (j – col_lb)) * element_size

  • Ada dua cara umum mengkases array berdimensi banyak:
    – Row major order, diurutkan berdasarkan baris dan kebanyakan bahasa menggunakan cara ini
    – Coloumn major order, diurutkan berdasarkan kolom, digunakan di Fortran
  • Compile-Time Descriptor:
    – Array satu dimensi:

    – Array berdimensi banyak:

Associative Array


  • Associative array merupakan kumpulan elemen data tidak berurutan yang di-index oleh nilai angka setara yang dikenal dengan key
  • Used-defined key harus disimpan
  • Merupakan built-in type di Perl, Python, Ruby, dan Lua (didukung dengan tabel)

Record Type


  • Record merupakan kemungkinan agregat heterogen elemen data yang elemen individualnya diidentifikasi dengan nama
  • Pengalamatan ke individual record field dapat dengan menamakan field dan penutup record yang dinginkan
    COBOL:

MIDDLE OF EMPLOYEE-NAME OF EMPLOYEE-RECORD

  • Cara lain dapat dengan menggunakan dot notation
    Ada:

Employee_Record.Employee_Name.Middle

  • Array digunakan ketika nilai data memiliki tipe yang sama atau diproses dengan cara yang sama, sedangkan record digunakan ketika nilai data heterogen dan diproses dengan cara berbeda
  • Implementasi record type:

Tuple Type


  • Tuple merupakan tipe data yang mirip dengan record, namun bedanya elemen di tuple tidak dinamakan
  • Tuple digunakan di Python, ML, dan F# untuk memperbolehkan function mengembalikan banyak nilai
  • Contoh di Python:

myTuple = (3, 5.8, ′apple′)

Alamat dengan subscript (mulai dari 1)

Catenation dengan + dan dihapus dengan del

List Type


  • Pertama kali didukung di LISP sebagai bahasa pemrograman fungsional pertama
  • List di LISP dibatasi dengan kurung dan tidak menggunakan koma, seperti

(A B C D)  atau (A (B C) D)

  • Untuk membedakan antara list dan data, maka digunakan apostrophe (‘), seperti:

′(A B C)

Union Type


  • Union merupakan tipe yang variablenya diperbolehkan untuk menyimpan tipe nilai berbeda di waktu yang berbeda selama eksekusi
  • Implementasi union:

type Node (Tag : Boolean) is

record

    case Tag is

when True => Count : Integer;

when False => Sum : Float;

end case;

end record;

Pointer Type


  • Pointer type variable merupakan variable yang nilainya berisi alamat memori dan nilai spesial, nil
  • Menyediakan kemampuan untuk akses alamat secara tak langsung
  • Menyediakan cara untuk mengatur memori secara dynamic
  • Ada dua operasi fundamental pointer, yaitu assignment dan deferencing
  • Assignment digunakan untuk menetapkan nilai variable pointer ke alamat yang diinginkan
  • Deferencing menghasilkan nilai yang disimpan di lokasi yang diwakilkan dengan nilai pointer
  • Deferencing dapat explisit atau implisit (Eksplisit di C++ menggunakan *)
  • Ada dua macam masalah dengan pointer:
    Dangling pointer, suatu pointer menunjuk ke variable heap-dynamic yang telah di de-alokasi
    Lost heap-dynamic variable, suatu variable heap-dynamic yang telah dialokasi yang tak dapat di akses lagi ke user program (biasa dikenal garbage)
  • Contoh di C dan 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]

Reference Type


  • Reference type mirip dengan pointer, namun reference menunjuk ke suatu objek atau suatu nilai di memori
  • Dijelaskan di definisi dengan memulai suatu nama menggunakan ampersand (&)
  • Contoh:

int result = 0;

int &ref_result = result;

. . .

ref_result = 100;

Type Checking


  • Type checking merupakan aktivitas untuk meyakinkan bahwa operand dari suatu operator memiliki tipe yang sesuai
  • Type error merupakan aplikasi dari suatu operator ke operand dari tipe yang tak sesuai
  • Jika semua tipe binding adalah static, maka hampir semua type checking dapat static
  • Jika type binding dynamic, maka type checking harus dynamic

Strong Typing


  • Suatu bahasa programan disebut strong typed jika type error selalu dideteksi
  • Kelebihan : dapat mendeteksi kesalahan penggunaan variable
  • Beberapa contoh bahasa:
    – C dan C++ tidak, karena pengecekan tipe parameter dapat dihindari
    – Ada, Java, C# hampir

Sumber:

  • Concept of Programming Languages 10th. Ed  / Robert W. Sebesta (Chapter 6)
  • Data Types / Binus Powerpoint Presentation

This entry was posted in Computer Science, Programming Language Concept and tagged , , , . Bookmark the permalink.

Leave a Reply

Your email address will not be published. Required fields are marked *