Bab XI : Functional Programming Languages

  1. Functional programming adalah program serba fungsi, yang artinya setiap persoalan diselesaikan dengan menggunakan fungsi. Functional programming sendiri mulai dikembangkan tahun 1960an, dimotivasi oleh peneliti bidang artificial intelligence, symbolic computation, theorem proving, rule-based system, dan NLP. Bahasa fungsional pertama adalah Lisp (McCarthy, 1960) yang memodelkan masalah komputasi sebagai suatu fungsi matematika, yang mempunyai input (domain) dan hasil atau output (range).

 

  1. Design dari functional languages berdasarkan fungsi matematika, yang merupakan mapping dari anggota suatu set yang dinamakan domain set, ke set lainnya yang dinamakan range set.

 

  1. Ekspresi lambda menspesifikasi parameter dan mapping dari fungsi:

l(x) x * x * x

 

for the function cube(x) = x * x * x

 

  1. Lambda digunakan untuk mendeskripsikan fungsi yang tidak bernama dan di aplikasikan dengan menaruh parameter setelah ekspresi, misalnya (l(x) x * x * x)(2) yang menghasilkan angka 8

 

  1. Bentuk Fungsional adalah bentuk fungsi yang lebih tinggi yang mengambil fungsi sebagai parameter atau menghasilkan fungsi sebagai hasilnya, ataupun kedua-duanya.

 

  1. Bentuk fungsi yang membutuhkan dua funsgi sebagai parameternya dan menghasilkan fungsi yang valuenya adalah fungsi pertama yang diaplikasikan kepada fungsi kedua. Contohnya:

Form: h º f ° g

 

Yang berarti h (x) º f ( g ( x))

For f (x) º x + 2 dan g (x) º 3 * x,

h º f ° g menghasilkan (3 * x)+ 2

 

  1. Data object types secara original hanya merupakan atom dan lists (List form: koleksi yang berada di dalam kurung yang berisi sublists atau atom, conthnya (A B (C D) E) ). LISP dulunya merupakan bahasa yang tidak bertipe dan di strore secara internal ke single-linked lists.

 

  1. LISP Interpretation
  • Notasi lambda digunakan untuk menspesifikasi fungsi dan definisinya. Ekspresinya disusun dalam notasi Cambridge-prefix. Contoh:

Operasi aritmatika:

(+) 0

(+ 5)  5

(+ 5 4 3 2 1)  15 // maksud nya 5+4+3+2+1 = 15

(*) 1

(*5)  5

(* 1 2 3 4 5)  120 // maksud nya 1*2*3*4*5 = 120

 

Contoh lain: (+ (* 5 4) (− 6 2) //maka akan menghasilkan (5 * 4) + (6 − 2) = 24

 

  • Didefinisikan dengan variable global

Contoh: (define f 120)

Evaluasi ekspresi

f120

(+ f 5) 125

(f)error, karena memiliki kurung tapi tidak melakukan sebuah operasi

5 5

#ffalse

#ttrue

 

  1. Special Form Function: Define

Example:

(define warna (quote (merah kuning hijau)))

(define warna ’(merah kuning hijau))

(define x f)                                          120

(define x ’f)                                         x berisi simbol f

(define warna ’ merah)

(define warna merah)                         error, karena merah bukanlah suatu variable yang memiliki suatu isi

Evaluasi proses dari DEFINE berbeda, parameter pertama tidak akan di evaluasi. Paramete kedua akan di evaluasi, dan terikat pada parameter pertama.

 

  1. Untuk dapat menuliskan discriminated union syntax pada C maka header yang dibutuhkan adalah

#include <glib.h>

#include <stdio.h>

#include <assert.h>

#include <stdbool.h>

#include <signal.h>

#include <string.h>

Penulisan syntax union_type sama seperti penulisan struct declaration yaitu:

union_decl (Car, Volvo, Fiat, Ferrari)

union_type (Volvo, int x; double y) ;

union_type (Fiat, char* brand, *model) ;

union_type (Ferrari, char* brand, *model);

union_end (Car)

 

static void printCar(Car*);

static void testUnion() {

Car c;

union_set (&c, Volvo, .x = 3, .y = 4);

printCar (&c);

union_set (&c, Ferrari, .brand = “Ferrari”);

printCar (&c);

union_set (&c, Fiat, .brand = “Fiat”, .model = “234”);

printCar (&c);

}

 

Discriminated Union yang telah ditulis dapat diakses dengan pernyataan if

static void testCar(Car*, char const *);

static void printCar(Car* c) {

if(c->kind == Volvo)

{ int x = c->Volvo.x;

g_assert_cmpint(x, ==, 3);

}

static void testCar(Car* c, char const * value)

{

if(c->kind == Volvo) g_assert_cmpstr(value, ==, “3”);

else if (c->kind == Fiat) g_assert_cmpstr(value, ==, “234”);

else if (c->kind == Ferrari) g_assert_cmpstr(value, ==, “Ferrari”);

else g_assert_not_reached();

}

 

  1. Output Tools biasa nya tidak dibutuhkan, karena interpreter selalu menampilkan hasil dari fungsi yang di evaluasi pada top level (tidak nested). Explicit input dan output bukan bagian dari fungsional programming model murni, karena input operasi merubah kondisi program dan output operasi adalah side effects. PLT Scheme memiliki dua tools utama
  • MzScheme : the core compiler, interpreter, and run-time system
  • DrScheme : the programming environment DrScheme memiliki beberapa variant.

Untuk menggunakan Scheme standar: pilih Module (Choose Language— Module) Definisikan #lang scheme pada definition area.

 

  1. List Function, mengambil satu parameter dan mengembalikan parameter tersebut tanpa evaluasi dan selalu dibutuhkan sebab interpreter Sceheme yang bernama Eval, akan selalu mengevaluasi parameters ke aplikasi fungsi sebelu mengaplikasikan fungsi tersebut. Dapat ditulis : ‘ ( A B) sama dengan (quote (A B) )

 

  1. Predicate terdiri dari beberapa macam jenis
  2. EQ

Mengambil dua ekspresi sebagai parameter, akan mengembalikan true apabila kedua parameter memiliki pointer value yang sama dan false apabila tidak.

(EQ? ‘A ‘A) yields #T

(EQ? ‘A ‘B) yields #F

(EQ? ‘A ‘(A B)) yields #F

(EQ? ‘(A B) ‘(A B)) yields #T or #F

(EQ? 3.4 (+ 3 0.4))) yields #T or #F

 

  1. EQV

Hampir serupa dengan EQ hanya saja ini dapat digunakan oleh simbolik maupun nmerik atom dan berfungsi unduk membandingkan value.

EQV? 3 3) yields #T

(EQV? ‘A 3) yields #F

(EQV 3.4 (+ 3 0.4)) yields #T

(EQV? 3.0 3) yields #F (floats and integers are different)

 

  1. List? Dan Null?

List? Mengambil satu parameter dan mengembalikan false apabila parameter sebuah list dan true bila sebaliknya.

(LIST? ‘()) yields #T

Null? Mengambil satu parameter dan mengembalikan true apabila parameter merupakan list yang kosong, dan false bila sebaliknya.

(NULL? ‘(())) yields #F

 

  1. Scheme Function pada C ada beberapa macam yaitu:
  • Member

Mengambil sebuah atom dan simple list, mengembalikan true apabila atom ada di dalam list dan false bila sebaliknya.

DEFINE (member atm a_list)

(COND

((NULL? a_list) #F)

((EQ? atm (CAR lis)) #T)

((ELSE (member atm (CDR a_list)))

))  

 

  • Equalsimp

Mengambil dua simple list sebagai parameter dan mengembalikan true apabila kedua list setara dan false bila sebaliknya.

(DEFINE (equalsimp list1 list2)

(COND

((NULL? list1) (NULL? list2))

((NULL? list2) #F)

((EQ? (CAR list1) (CAR list2))

(equalsimp(CDR list1)(CDR list2)))

(ELSE #F)

))

 

  • Equal

Mengambil dua general list sebagai parameternya dan mengemalikan true bila kedua list setara dan false bila sebaliknya.

(DEFINE (equal list1 list2)

(COND

((NOT (LIST? list1))(EQ? list1 list2))

((NOT (LIST? lis2)) #F)

((NULL? list1) (NULL? list2))

((NULL? list2) #F)

((equal (CAR list1) (CAR list2))

(equal (CDR list1) (CDR list2)))

(ELSE #F)

))

 

  • Append

Mengambil dua list sebagai parameternya dan mengembalikan parameter pertama dengan elemen dari parameter kedua yang di tambahkan di bagian akhir.

(DEFINE (append list1 list2)

(COND

((NULL? list1) list2)

(ELSE (CONS (CAR list1)

(append (CDR list1) list2)))

))

 

  • Let

Let merupakan kependekan dari ekspresi lambda yang diaplikasikan ke dalam sebuah parameter.

(LET ((alpha 7))(* 5 alpha))

Sama artinya dengan

((LAMBDA (alpha) (* 5 alpha)) 7)

 

  1. Operasi disebut tail recursion jika di panggil reculsive dan pada akhir dari fungsi operasi. Fungsi Tail reculsive dapat di convert secara otomatis oleh compiler untuk iterasi dengan membuat nya cepat. Scheme language definisi membutuhkan konversi scheme language system all tail reculsive fungsi untuk menggunakan iterasi.

 

  1. Contoh penulisan untuk membuatnya recursive

 

Original:         (DEFINE (factorial n)

(IF (<= n 0)

1

(* n (factorial (- n 1)))

))

 

Tail recursive: (DEFINE (facthelper n factpartial)

(IF (<= n 0)

factpartial

facthelper((- n 1) (* n factpartial)))

))

(DEFINE (factorial n)

(facthelper n 1))


By:
– Faustina Sidik (2001537746)
– Alexandra Ursula (2001536913)
– Fidelia Queensy (2001536983)
– Natalia Evelyn (2001536996)
– Yvonne Priscilla (2001536415)

Posted in Programming Language Program ( Konsep Bahasa Program) | Comments Off on Bab XI : Functional Programming Languages

Bab X : Exception Handling and Event Handling

Exception Handling dalam Bahasa C

 

Bahasa C tidak memberikan cara langsung untuk Exception Handling atau disebut Error Handling dalam C, tapi ada cara lainnya untuk melakukan error handling. Dalam Bahasa C, programmer itu diminta untuk mencegah error-error yang terjadi, dan menguji nilai return dari fungsi. Misalnya, banyak panggilan return -1 atau NULL pada beberapa fungsi kalau terjadi error seperti socket() (Unix Socket Programming) atau malloc() untuk mengindikasikan masalah yang perlu diketahui oleh si programmer. Jadi, pengujian yang cepat pada nilai return ini akan lebih mudah dilakukan misalnya dengan ‘if statement’.

 

Misalnya, kalau suatu program berhasil itu karena nilai return programnya itu nol. Kalau programnya error, biasanya dikarenakan angka yang lebih besar dari nol itu dikembalikan (misalnya 1). (Dengan command ‘echo $?’ di command line, kita bisa menampilkan kode return program yang sebelumnya dijalankan). Jadi, yang perlu diingat adalah, kita sebagai programmer bertanggung jawab atas error handling.

 

Fungsi errno, perror() dan strerror()

 

Bahasa C menyediakan fungsi perror() dan strerror() yang bisa digunakan untuk menampilkan pesan teks yang dihubungkan dengan errno.

 

Variabel Global errno digunakan oleh fungsi C dan integer ini telah ditentukan kalau ada error saat pemanggilan fungsi. Untuk menggunakan errno, kita perlu header file errno.h dan memanggil ‘extern int errno;

 

Fungsi perror() menampilkan string yang kita lempar kedalamnya, diikuti tanda kurung kurawal dan pesan teks nilai errno saat itu.

 

Fungsi strerror() mengembalikan pointer ke representasi teks nilai errno saat itu.

 

Mari coba menstimulasikan kondisi error dan coba buka file yang tidak ada. Pada contoh dibawah ini, kita akan mencoba menggunakan kedua fungsi tersebut, yaitu perror() dan strerror() untuk menampilkan penggunaannya. Kita bisa juga menggunakan salah satu atau lebih cara mengeluarkan atau mem-print kan error-error tersebut.

 

Perlu diingat, kalau kita harus menggunakan file stream stderr untuk mengeluarkan atau menampilkan semua error-error tersebut.

Contoh:

Untitled29

Output:

Untitled30

Untuk menggenerasikan error, kita membuka file yang tidak ada. Kalau file pointer (fp) sama dengan NULL, maka akan di print nilai errno. Kalau mendapatkan file pointer (kalau file nya ada) file nya akan ditutup.

 

Disini, pertama-tama kita memprint errno, kemudian menggunakan fungsi strerror() untuk memberikan pesan kita sendir dan menampilkan teks errno. Kemudian fungsi perror digunakan untuk memberikan pesan kita sendiri, diikuti dengan tanda kurung kurawal dan representasi teks errno.

 

Error Divide by Zero

 

Divide by Zero adalah salah satu error yang sering ditemukan. Error ini dikarenakan ada bilangan yang dibagi nol dalam program yang dibuat. Contoh kode dibawah inilah yang akan menampilkan runtime error dan keluar dari program.

Untitled31 Hal ini terjadi karena programmer tidak mengecek kalau ada pembilang yang sama dengan nol dan hal ini akhirnya membuat runtime error. Karena itu, programmer harus memastikan kalau pembagi tidak pernah boleh nol.

Kode dibawah ini memperbaiki error diatas dengan mengecek kalau pembagi nya itu nol atau bukan sebelum dilakukan pembagiannya:

Untitled32

Program Exit Status

 

Akan lebih baik untuk keluar dari program dengan nilai EXIT_SUCCESS dimana program keluar setelah operasi nya berhasil. Disini, EXIT_SUCCESS adalah macro yang didefinisikan sebagai 0. Kalau ada kondisi error dalam program, kita harus keluar dari program dengan status EXIT_FAILURE yang didefinisikan sebagai -1.

 

EXIT_SUCCESS dan EXIT_FAILURE itu didefinisikan dengan header file stdlib.h. Dibawah ini contoh penggunaannya:

Untitled33

Signal Handling dalam Bahasa C

Signal adalah suatu kondisi yang dilaporkan saat mengeksekusi suatu program, dan bisa di abaikan saja. Biasanya signal itu merupakan sistem operasi yang menunjukkan error-error tertentu yang terjadi, seperti division by zero, interrupt, dll.

Namun, signal ini bukan digunakan untuk menangkap error-error yang ada; biasanya untuk menunjukkan error kritis yang akan mengganggu laju program yang normalnya.

Satu fungsi mengirim signal, fungsi lainnya digunakan untuk memastkan bagaimana suatu signal akan di proseskan. Banyak signal-signal ini yang dihasilkan oleh operasi sistem dan juga sebagai fungsi pengirim signal.

Signal itu didefinisikan dengan header signal.h. Selain di definisikan, fungsi signal() juga perlu dipanggil. Signal handler ini akan diperlukan untuk memastikan beberapa sumber itu sudah dibersihkan dengan baik sebelum program diakhiri.

IGABRT
      Terminasi abnormal, seperti yang dipicu oleh fungsi abort. (Abort)

SIGFPE
      Operasi arimatika error, seperti divide by 0 atau overflow. (Floating point expetion)

SIGILL
      Terdeteksinya ‘program objek yang invalid’. Biasanya karena ada instruksi illegal dalam
suatu program. (Illegal Instruction)

SIGINT
      Perhatian signal interaktif; pada sistem interaktif ini biasanya dihasilkan dengan mengetik
beberapa kunci ‘break-in’ di terminal. (Interrupt)

SIGSEGV
     Akses penyimpanan yang invalid; paling sering disebabkan karena menyimpan suatu nilai
dalam objek yang ditunjuk oleh pointer yang buruk. (Segment Violation)

SIGTERM
     Permintaan mengakhiri suatu program oleh program itu sendiri. (Terminate)

Beberapa implementasi memiliki tambahan signal yang namanya itu akan selalui dimulai dengan SIG, dan akan memiliki nilai yang unik. Fungsi signal memungkinkan kita untuk menentukan tindakan mana yang diambil pada penerimaan signal. Fungsi signal ini mengubah pointer dan mengembalikan nilai aslinya. Jadi, fungsi nya itu seperti ini:

Untitled34

Fungsi kedua mengambil argument satu int dan mengembalikan void. Argumen kedua ke signal itu mirip dengan pointer ke fungsi yang mengembalikan void yang mengambil argument int.

 

Kalau panggilan ke signal berhasil, nilai fungsi sebelumnya untuk signal tertentu itu akan dikembalikan. Kalau tidak, SIG_ERR dikembalikan dan errno di set.

Ketika signal event terjadi, kalau dihubungkan dengan fungsi pointer ke fungsi, pertama, persamaan signal (sig, SIG_DFL) itu di eksekusi. Hal ini akan mereset signal handler menjadi default, yaitu menghentikan program. Kalau signalnya SIGILL, berarti soal reset ini merupakan implementasi yang didefinisikan. Implementasi ini bisa memilih untuk memblokir masukan lebih lanjut pada signal. Kemudian, fungsi signal-handling dipanggil. Kalau fungsi kembali secara normal, berarti programnya akan terus berlanjut. Namun, kalau nilai sig adalah SIGFPE, atau implementasi lainnya, berarti hal ini tidak terdefinisi.

 

Berikut adalah contoh penggunaan signal handler:

Untitled35

Suatu program dapat mengirimkan signal ke dirinya sendiri dengan fungsi raise yang ditulis seperti ini:

Untitled36

Dimana signal sig dikirim ke program. Raise mengembalikan nol kalau sukses, non-zeru sebaliknya. Fungsi library abort itu diimplementasikan sebagai berikut: Untitled37

Kalau signal nya terjadi buat alsan lain selain memanggil abort atau raise, fungsi signal-handling hanya akan memanggil signal atau memberikan nilai ke objek static tipe sig_atomic_t. Tipe sig_atomic_t itu di deklarasikan dalam <signal.h>. Tipe tersebut hanyalah tipe objek yang bisa di modifikasi sebagai kesatuan atomic yang aman. Tapi, fungsi ini tidak mengikuti aturan Standard.

 

Setjmp

 

Fungsi setmp bisa digunakan untuk meniru fitur yang menangani exception pada Bahasa pemrograman yang lain. Panggilan pertama setjmp memberikan titik referensi untuk mengembalikan fungsi yang diberikan, dan valid selama fungsi yang memiliki setjmp() tidak kembali atau keluar. Kalau kita memanggil longjmp, itu bisa menyebabkan eksekusi untuk kembali ke titik dimana setjmp dipanggil. Berikut contohnya:

Untitled38 Untitled39

Nilai variabel yang tidak dapat berubah bisa saja corrupt ketika setjmp kembali dari panggilan longjmp.

Selama setjmp() dan longjmp() bisa digunakan untuk error handling, biasnya lebih digunakan untuk mengembalikn nilai suatu fungsi untuk menunjukkan sebuah error.


By:
– Faustina Sidik (2001537746)
– Alexandra Ursula (2001536913)
– Fidelia Queensy (2001536983)
– Natalia Evelyn (2001536996)
– Yvonne Priscilla (2001536415)

Posted in Programming Language Program ( Konsep Bahasa Program) | Comments Off on Bab X : Exception Handling and Event Handling

Bab IX : Concurrency

Ada beberapa alasan mengapa programmer menjadi tertarik pada Concurrency:

  1. Untuk lebih memahami arsitektur komputer (memiliki banyak concurrency
    dengan pipelining (beberapa langkah) dan super-skalar (beberapa instruksi))
  2. Desain compiler
  3. Beberapa yang paling alami diselesaikan dengan menggunakan satu set co-
    operasi proses
  4. Sebuah solusi sekuensial lebih dari spesifikasi
  5. Untuk mengurangi waktu eksekusi.

 

Bahasa Pemrograman Concurrent Programming

  Java

  C#

  Erlang

  Occam

  Limbo SR

  Ad

Tidak dalam bahasa C

 

Kelebihan Concurrent Programming

  Lebih memahami Arsitektur Komputer

  Design compiler

  Beberapa permasalahan diselesaikan dengan menggunakan co-operating proses

  Waktu pengerjaan lebih singkat

 

Concurrency pada sebuah mesin dapat terjadi pada 4 buah level :

–         Instruksi level (eksekusi 2 atau lebih instruksi mesin serentak)

–         Statement level (eksekusi 2 atau lebih statement bahasa tingkat tinggi serentak)

–         Unit level (eksekusi 2 atau lebih subprogram unit serentak)

–         Program level (eksekusi 2 atau lebih program serentak)

Ada 2 kategori concurrent unit control yaitu :

–         Physical concurrency

Memiliki lebih dari 1 processor, beberapa program unit dari program yang sama di eksekusi serentak.

–         Logical concurrency

Relaxation konsep dari concurrency yang membolehkan programmer dan aplikasi software memberikan concurrency asli.

 

Subprogram level concurrency

Task atau process atau thread adalah sebuah program unit yang dapat di eksekusi bersamaan dengan program unit yang lain.

Task berbeda dari subprogram biasa, terletak pada :

–         Sebuah task dapat implicit

–         Ketika program unit menjalan kan eksekusi task, maka tidak perlu dilakukan penundaan

–         Ketika eksekusi task selesai, control dapat tidak kembali kepada pemanggil nya

Task dapat di bagi menjadi 2 kategori yaitu :

–         Heavyweight

Task eksekusi pada ruang alamat nya sendiri

–         Lightweight

Semua task berjalan pada ruang address yang sama

Jika sebuah task tidak berkomunikasi terhadap eksekusi pada sebuah program di sebut disjoint.

Untitled27

Synchronization adalah meknisme yang mengontrol urutan dari sebuah eksekusi task.

Terdapat 2 tipe synchronization :

–         Cooperation synchronization

Dibutuhkan antara task A dan task B ketika task A harus menunggu task B untuk menyelesaikan aktivitas spesifik sebelum task A dapat melanjutkan eksekusi.

–         Competition synchronization

Dibutuhkan antara 2 task ketika keduanya membutuhkan resource yang tidak dapat digunakan secara serentak.

Scheduler berfungsi memberikan synchronisasi ke mekanisme eksekusi task yang terlambat.

Task eksekusi control di atur oleh program bernama scheduler.

Macam-macam task eksekusi states :

–         New (dibuat tapi belum dijalankan)

–         Ready (siap untuk dijalankan tapi belum berjalan)

–         Running (task yang sedang berjalan / eksekusi)

–         Blocked (task yang diblok ketika sedng berjalan / interrupted oleh sesuatu)

–         Dead (task yang tidak lagi aktif)

 

Liveness = karakteristik dari program unit yang mungkin / tidak mungkin memiliki sequential code (unit akan menyelesaikan eksekusinya)

Deadlock = semua task pada concurrent environment kehilangan liveness nya

 

Semaphore

Semaphore adalah data struktur mengandung counter dan queue untuk menyimpan task descriptor (data struktur yang menyimpan semua informasi relevan tentang state eksekusi dari sebuah task) / mekanisme simple yang dapat digunakan untuk memberikan syncronisasi task.

Contoh semaphore :

wait(aSemaphore)

if aSemaphore’s counter > 0 then

decrement aSemaphore’s counter

else

put the caller in aSemaphore’s queue

attempt to transfer control to some ready task

(if the task ready queue is empty, deadlock occurs)

end if

release(aSemaphore)

if aSemaphore’s queue is empty (no task is waiting) then

increment aSemaphore’s counter

else

put the calling task in the task-ready queue

transfer control to a task from aSemaphore’s queue

end

Untitled28

Gambar Semaphore Monitor

Monitor

Mengenkapsulasi shared data dan operasi nya pada akses terbatas. Monitor adalah abstract data type (ADT) untuk shared data.

Posted in Programming Language Program ( Konsep Bahasa Program) | Comments Off on Bab IX : Concurrency

Bab VIII : Object-Oriented Programming

  1. Tipe-tipe bahasa yang memiliki object oriented programming:
  • Beberapa mendukung procedural dan data-oriented programming (contohnya Ada 95+ dan C++)
  • Beberapa mendukung functional program (contoh CLOS)
  • Beberapa bahasa yang baru tidak mendukung paradigm lain tapi menggunakan struktur imperative yang mereka miliki (contoh: Java dan C#)
  • Beberapa bahasa adalah bahasa yang murni OOP (contoh : Smalltalk dan Ruby)

 

  1. Object-Oriented Programming memiliki tiga konsep dasar yaitu:
  • Abstract Data Type
  • Inheritance (tema sentral dari OOP dan bahasa yang mendukungnya)
  • Polimorfisme

 

  1. Object Oriented Programming Language juga mendukung paradigm menggunakan class, methods, object dan message passing.

 

  1. Inheritance adalah pewarisan sifat dari superclass ke subclass, yang mewarisi attribute dan method yang masih sejenis beserta attribute dan method tambahan yang merupakan sifat khusus subclass. Sebagai contoh class sapi adalah hewan bertulang belakang / vertebrata yang merupakan mamalia pemakan tumbuhan / herbivora.

 

  1. Konsep OOP:
  • Abstract Data Type dalam OOP sering disebut sebagai classes
  • Class instances disebut sebagai objek
  • Sebuah class yang mewarisi sesuatu disebut sebagai derived class atau subclass
  • Sebuah class yang sifatnya diwarisi oleh class lain dinamakan parent class atau superclass
  • Subprogram yang mendefinisikan sebuah operasi dari suatu objek disebut sebagai methods.
  • Dari calls ke methods dinamankan messages
  • Serangkaian koleksi methods dari suatu objek dinamakan message protocol atau message interface
  • Messagaes mempunyai dua bagian, method name dan destinasi dari objek.
  • Secara garis besar, sebuah class mewarisi seluruh sifat yang tadinya ada di parent class

 

  1. Inheritance dapat di komplikasikan dengan akses control terhadap enkapsulasi entities
  • Class dapat menyembunyikan entities dari subclass nya
  • Class dapat menyembunyikan entities dari client nya
  • Class dapat menyembunyikan entities dari client nya tetapi memperbolehkan subclass mengakses nya

 

  1. Sebuah class dapat memodifikasi method dari class turunan nya
  • Method yang baru melakukan override terhadap method yang lama
  • Method pada parent di overridden

 

  1. Tiga cara membedakan dari class parent nya:
  • Class parent dapat mendefinisikan beberapa variable atau method nya untuk memiliki private akses, yang berarti mereka tidak akan terlihat oleh kelas turunan nya.
  • Subclass dapat menambahkan variable atau method untuk yang di wariskan dari parent
  • Subclass dapat memodifikasi sikap dari satu atau banyak method yang diwariskan.

 

  1. Terdapat 2 jenis variable pada sebuah class :
  • Class variable – satu / class
  • Instance variable – satu / objek

Terdapat 2 jenis method pada sebuah class :

  • Class method – menerima pesan kepada class.
  • Instance method – menerima pesan kepada objek.

 

  1. Konsep Dynamic Binding
  • Polymorphic variable dapat di definisikan pada kelas yang dapat melakukan referensi objek kelas dan objek dari turunan nya
  • Ketika hierarki kelas mengandung kelas yang override method biasa disebut dengan polymorphic variable, binding ke method akan dynamic
  • Mengizinkan system software lebih mudah di perpanjang ketika dikembangkan dan maintenance
  • Abstrak method adalah salah satu yang tidak dimiliki pada definisi (hanya mendefinisikan protocol)
  • Abstrak kelas memiliki setidak nya satu virtual method
  • Abstrak kelas tidak dapat di instansikan.

 

  1. Hal-hal yang dapat menjadi suatu masalah dalam OOP Languages:
  • Ekslusivitas Objek
  • Semua adalah suatu objek
  • Keuntungan : Elegan dan kemurnian
  • Kekurangan : Lambat pada operasi objek yang simple
  • Menambah objek untuk menyempurnakan typing system
  • Kelebihan : Cepat pada operasi objek yang simple
  • Kekurangan : Hasil membingungkan type system
  • Memasukan gaya imperative typing system untuk primitf tapi membuatnya menjadi objek
  • Kelebihan : Cepat pada operasi objek yang simple secara relative system typing lebih kecil
  • Kekurangan : Masih membingungkan type system
  • Jika kelas turunan adalah kelas parent maka objek pada kelas turunan harus bersifat sama dengan objek pada kelas parent.
  • Subclass dapat menambah variable dan method dan override method turunan dengan cara compatible
  • Single dan Multiple Inheritance
  • Multiple inheritance mengizinkan kelas baru untuk di warisi dari 2 atau lebih kelas

Kekurangan :

  • Bahasa dan implementasi yang kompleks
  • Potensial tidak efisien – dynamic binding memiliki biaya lebih disbanding dengan multiple inheritance

Kelebihan :

  • Terkadang berharga dan berguna
  • Alokasi dan Dealokasi Objek
  • Jika bersifat ADT, maka dapat di alokasikan dari semua tempat
  • Alokasi dari run-time stack
  • Secara explicit membuat pada heap
  • Jika heap-dynamic referensi dapat melalui pointer atau referensi variable
  • Memudahkan assignment – melakukan referensi ulang secara implicit
    • Jika objek stack dynamic, akan memiliki masalah pada subtype – object slicing
  • Dynamic dan Static Binding
    • Seluruh binding message to methods harus dynamic sehingga kita tidak kehilangan kelebihan dari dynamic binding namun hal ini menjadi tidak efisien. Akan lebih baik bila design nya memungkingkan si pengguna untuk menspesifikasi tipe bindingnya.
  • Nested Classes
    • Jika kelas baru dibutuhkan oleh satu kelas, maka tidak ada alasan untuk mendefinisikan agar dapat terlihat oleh kelas lain nya
  • Inisialisasi Objek

 

  1. Kelebihan dari Object Oriented Programming adalah;
    • Representasi data dan fungsionalitasnya terpisah dari pemakaian
    • Divide dan Conquer
    • Penggunaan kembali kode
    • Meningkatkan readability kode

 

  1. Kelebihan penggunaan Object Oriented Programming dalam bahasa C adalah
  • Lebih cepat
  • Sebuah lingkungan penulisan kode dimana C++ dan compiler lain nya tidak available

 

  1. Kekurangan dari penggunaan Object Oriented Programming dalam bahasa C adalah:
  • Kode yang ditulis lebih kompleks
  • Ada kemungkinan akan kehilangan type safety
  • Memakan waktu programmer lebih lama (Proses pembuatan lebih lama)
  • Lebih cenderung error
  • Management memori secara manual

 

  1. Dalam bahasa C, sebenarnya tidak benar-benar bisa digunakan untuk menuliskan kode berbasis Object-Oriented namun dapat dibuat menyerupai kode yang ditulis di dalam bahasa yang mendukung Object Oriented Language. Enkapsulasi dapat dilakukan dengan menaruh definisi dari struktur kode di dalam .c file dan bukan di dalam header seperti biasanya. Objek akan dihandle dengan menggunakan pointer dan programmer dapat menyediakan function yang dapat memproses pointer tersebut sebagai “method” dari objek tersebut

 

  1. Sifat polimorfisme bisa kita dapatkan dengan menggunakan function pointer, biasanya dikelompokan ke dalam struktur operasi, mirip dengan virtual method table di dalam C++.

 

  1. Ops structure bisa berisikan hal lain seperi konstanta yang value nya spesifik kepada suatu “subclass”. Struktur “Parent” dapat mempunyai reference ke ops-specific data melalui voi* pointer.

 

  1. Contoh

Untitled24 Untitled25 Untitled26

Contoh di atas, struct printer itu adalah abstract class yang dapat di “derived” dengan cara mengisi struktur pr_ops dan menyediakan constructor function pr_create(). Setiap subtype akan mempunyai strukturnya tersendiri yang akan ter-“anchored” ke objek struct printer oleh pointer data. Ini didemonstrasikan dalam subtype fileprinter. yang secara dinamis

 

  1. Class Instance Records menyimpan keadaan suatu objek (static, terbentuk saat compile time). Apabila sebuah class mempunyai parent, maka variable subclass instance akan ditambahkan ke dalam parent CIR dan karena CIR itu static, maka semua akses ke instance variables dilakukan seperti record.

 

  1. Method yang berada di dalam class yang secara static terikat tidak perlu dimasukan ke dalam CIR, sebaliknya methods terikat harus memiliki entry di CIR.

By:
– Faustina Sidik (2001537746)
– Alexandra Ursula (2001536913)
– Fidelia Queensy (2001536983)
– Natalia Evelyn (2001536996)
– Yvonne Priscilla (2001536415)

Posted in Programming Language Program ( Konsep Bahasa Program) | Comments Off on Bab VIII : Object-Oriented Programming

Bab VII : Abstract Data Type

Tipe data abstrak (Abstract Data Type – ADT) adalah tipe data yang diatur menggunakan struktur data tertentu sehingga spesifikasi data dan spesifikasi operasinya terpisah dari representasi dan implementasinya. Pengguna hanya perlu memperhatikan spesifikasi data dan operasinya saja namun seorang program designer harus tahu implementasi program yang ia buat.

Abstract data types menurut Weiss merupakan abstraksi matematis yang menunjukkan bahwa antara spesifikasi operasi dan implementasi operasi merupakan dua bagian yang terpisah.

Abstrak Data Type adalah sebuah tipe data yang user-defined (ini maksudnya apa ya) yang memenuhi dua kondisi yaitu:

  • Representasi dari objek nya tersembunyi dari program uni yang menggunakan objek tersebut sehingga operasi yang dapat digunakan adalah operasi yang tercantum di dalam definisi dari tipe data tersebut.
  • Deklarasi dari tipe dan protokol objek tipe data tersebut dimasukan ke dalam sebuah unit sintaks.

 

Keuntungan yang dimiliki dari Abstract Data Type adalah

  • Struktur data dapat di modifikasi.
  • User tidak perlu secara langsung mengakses objek data tersebut.
  • Kompilasi yang terpisah.

 

Adapun 3 level abstraksi data yaitu :

  • Level fisik (physical level)

Level fisik merupakan level terendah dalam abstraksi data, yang menunjukkan bagaimana sesungguhnya suatu data disimpan.

Contoh : sebuah data di simpan pada memori.

  • Level logic / konsep

Level logic menjelaskan data yang disimpan dalam basis data serta hubungan anatar data.

Contoh : data siswa pada tbl_siswa.

  • Level view

Level view adalah level tertinggi dari abstraksi data yang hanya menunjukkan sebagian dari basis data / informasi data yang kemunculannya di mata user diatur oleh aplikasi end-user.

Contoh : dalam sebuah sekolah memiliki bagian keuangan, bagian perpustakaan, bagian akademik, dll.

 

Constructor

Constructor berfungsi sebagai inisialisasi sebuah data dari suatu instance. Dalam class harus dibuat.

Destructor

Destructor berfungsi sebagai penghancur sebuah data dari suatu constructor. Dalam class harus dibuat jika tidak di buat maka memori akan penuh karena data tidak pernah di hancurkan.

 

Permisalan penggunaan abstract data type dalam daftar terurut yang berisikan daftar nama mahasiswa dalam sebuah kelas. Data mahasiswa terdiri dari NIM dan nama. Tentunya ‘daftar terurut’ (sorted list) dalam imaginasi pengguna, memiliki spesifikasi data sebagai berikut;

  1. Data terdiri dari nilai kunci (yaitu NIM) untuk mengurutkan berupa sebuah string dan string lainnya (yaitu nama mahasiswa),
  2. Ukuran maksimal daftar tersebut, misalnya 100 (seratus) karena dalam sebuah kelas tidak lebih dari 100 (seratus) mahasiswa
  3. Jumlah mahasiswa dalam kelas

 

Pengguna akan melakukan beberapa hal seperti dalam imajinasi (spesifikasi operasi), misalnya:

  1. Membentuk sebuah daftar baru
  2. Menambahkan sebuah data mahasiswa pada daftar
  3. Mencari nama mahasiswa sesuai sebuah nilai, misalnya NIM
  4. Mengetahui jumlah data pada daftar
  5. Mengetahui jumlah data maksimal pada daftar
  6. Menghapus seluruh data pada daftar
  7. Mencetak seluruh data pada daftar
  8. Memeriksa apakah daftarurut sudah penuh
  9. Memeriksa apakah daftarurut masih kosong

 

Untuk membentuk tipe data ‘daftar terurut’ diatas, tentu ada semacam “interface” untuk pengguna agar bisa mengoperasikan ‘daftar terurut’ tersebut.

Untitled14

Ditekankan bahwa objek seperti list (daftar terurut) memiliki operasi-operasi. Operasi yang disediakan dan termasuk didalamnya adalah error-handling (penanganan kesalahan) tergantung kebutuhan dan rancangan pemrogram.

 

Untuk visualisasinya, dapat dliihat dari gambar di bawah

Untitled15

Untuk menyimpan data didalam memori komputer, harus diatur penyimpanan data dalam memori. Pada C, bisa digunakan ‘struct’. Jumlah data pada daftar terurut dan ukuran daftar terurut berupa bilangan bulat, sehingga digunakan tipe data ‘int’. NIM berupa string dengan panjang misalnya 12 karakter, dimana disimpan berupa deretan tipe data char (array of char).

 

Contoh bentuk code nya :

 

typedef struct tdata {

char nim[12];

char nama[30];

};

typedef struct daftarurut {

tdata *data;

int max;

int jdata;

};

 

Untuk menyimpan 100 (seratus) data, maka max diberi nilai 100 (seratus), dan akan disediakan sebuah array yang terdiri dari elemen sejumlah max. Sedangkan jdata

 

dimulai dari 0 (nol). Jdata akan bertambah otomatis setiap kali terjadi penambahan data. Jika dimasukkan sebuah data berisi NIM dan nama, misalnya“James Dean”, maka jdata akan bertambah 1 (satu). Ilustrasinya

Untitled16

Beberapa contoh implementasi menggunakan Array dalam bahasa C

Interface Operasi dan Penjelasan Operasi dan implementasi dalam bahasa C

 

  • Createlist(ukuran) : Membentuk sebuah daftar dengan ukuran tertentu, misalkan ‘ukuran’

 

_ daftarurut createlist(int ukuran)

{

int i;

daftarurut xyz;

xyz.max = ukuran;

xyz.data =(tdata *)malloc(sizeof(tdata) * xyz.max);

xyz.jdata = 0;

 

for(i=0;i<ukuran;i++)

{

xyz.data[i].nim[0] = ‘\0′;

xyz.data[i].nama[0] =’\0’;

}

 

printf(“ukuran list = %d\n”,xyz.max);

printf(“jumlah data dalam list = %d\n”,xyz.jdata);

 

return xyz;

}

 

  • Insert(xyz,baru) : Menambah sebuah data ‘baru’ pada daftar ‘xyz’, mengembalikan status 1 jika berhasil dan 0 jika gagal

 

_ int insert(daftarurut *a, tdata baru)

{

int i,j;

 

if (isempty(a))

{

(*a).data[0] = baru;

(*a).jdata++;

 

return 1;

}

 

if(!isfull(a))

{

j = sizelist(*a);

 

while (j >= 0 && strcmp(baru.nim,(*a).data[j-1].nim)<0)

{

(*a).data[j] = (*a).data[j-1];

j = j – 1;

}

 

(*a).data[j] = baru;

(*a).jdata++;

 

return 1;

}

 

else

{

printf(“Daftar sudah penuh”);

printf(“,jumlah data = %d”,(*a).jdata);

printf(“maksimal data = %d\n”,(*a).max);

 

return 0;

}

}

  • search(xyz,key): Mencari sebuah data dengan nilai ‘key’ pada daftar ‘xyz’, mengembalikan posisirecord jika ditemukan, dan -1 jika tidak ditemukan

 

_ int searchlist(daftarurut a, char key[])

{

int i;

 

for(i=0;i<a.jdata;i++)

{

if(strcmp(a.data[i].nim, key)==0)

return i;

}

 

return -1;

}

 

Contoh program menggunakan ADT Daftar Terurut dalam bahasa C

Untitled17 Untitled18 Untitled19 Untitled20 Untitled21 Untitled22 Untitled23

Enkapsulasi adalah sebuah konsep dalam penyembunyian sebuah informasi atau sebuah grup dari subprogram yang terhubung secala logis melalui sebuah unit yang dapat di compile secara terpisah. Ex: class

 

Enkapsulasi pada C

File berisi satu atau lebih subprogram dapa melakukan kompilasi sendiri

Interface ditempatkan pada header file

Memiliki masalah pada hubungan antara header dan implementasi asosiasi

 


By:
– Faustina Sidik (2001537746)
– Alexandra Ursula (2001536913)
– Fidelia Queensy (2001536983)
– Natalia Evelyn (2001536996)
– Yvonne Priscilla (2001536415)

Posted in Programming Language Program ( Konsep Bahasa Program) | Comments Off on Bab VII : Abstract Data Type

Bab VI : Subprograms

Fungsi dalam Bahasa C adalah subprogram. Subprogram adalah sekumpulan perintah operasi program yang dapat menerima argument input dan dapat memberikan hasil output yang dapat berupa nilau ataupun sebuah hasil operasi. Hasil akhir fungsi akan berupa sebuah nilai balik (return). Nama fungsi yang didefinisikan sendiri oleh programmer tidak boleh sama dengan nama build-in function pada compiler C.

Suatu program itu merupakan kumpulan dari pernyataan-pernyataan. Ada program yang membutuhkan pernyataan yang berulang-ulang. Pengulangan pernyataan-pernyataan tersebut akan membuat program menjadi tidak efisien. Dengan fungsi, maka pengulangan tersebut tidak perlu terjadi lagi, karena kita hanya perlu memanggil kembali fungsi tersebut.

Sifat-sifat Fungsi

Berikut adalah sifat-sifat fungsi dalam Bahasa C:

  • Masing-masing fungsi mempunyai nama, aturan penamaan fungsi sama seperti penamaan variable.
  • Nama fungsi diikuti sepasang tanda kurung untuk membedakan fungsi dengan variable. Didalam tanda kurung dapat diisi argument-argumen fungsi tersebut. Kalau tidak perlu argumen tidak perlu diisi apa-apa.
  • Bagian tubuh dari fungsi harus memiliki tanda kurung kurawal ( { ) dan diakhiri tanda kurung kurawal ( } ). Bagian tubuh dari fungsi berisi deklarasi variabel dan pernyataan.

Manfaat Fungsi

Berikut adalah manfaat-manfaat fungsi dalam Bahasa C:

  • Menghindari penulisan program yang berulang
  • Membagi program menjadi modul-modul yang lebih kecil, jadi kesalahan dalam program akan lebih mudah untuk dilacak.
  • Fungsi dalam C ini dapat menghasilkan nilai, data ataupun hasil atau kegiatan lain yang bukan berupa data maupun nilai.

Struktur Fungsi dalam Bahasa C

Deklarasi fungsi secara umum:

kbp1

FUNGSI main() dalam C itu mutlak harus ada, karena dari fungsi inilah program akan dimulai. Dalam sebuah program yang terdapat beberapa fungsi, main() boleh diletakkan dimana saja, tapi sebaiknya fungsi main() diletakkan dipaling atas.

Dalam mendefinisikan sebuah fungsi, pasti akan dijumpai dengan:

  1. Parameter fungsi
  2. Parameter formal dan aktual
  3. Variabel lokal dan global
  4. Isi fungsi

Parameter fungsi adalah sarana komunikasi antar fungsi. Antar fungsi itu sendiri berarti fungsi dengan fungsi lain termasuk antara fungsi dengan fungsi utama. Ada dua jenis parameter dalam hubungannya dengan penggunaan fungsi dalam program, yaitu:

  1. Parameter Formal: parameter yang diberi nilai. Parameter formal merupakan parameter yang terdapat pada prototype fungsi atau deklarasi fungsi.

Untitled11 Untitled22

 

 

 

  1. Parameter Aktual: parameter yang memberi nilai. Parameter actual merupakan parameter dalam daftar pemanggilan fungsi.

 

Untitled31 Untitled42

 

 

 

 

Pemanggilan Secara Nilai (Call by Value) 

Call by Value, merupakan nilai dari parameter actual yang dimasukkan kedalam parameter formal. Dengan cara ini, nilai parameter actual tidak akan berubah walaupun nilai dari parameter formal berubah.

Contoh Call by Value:

Untitled52

Jadi, walaupun nilai a dan b pada fungsi tambah berubah menjadi 6 dan 11 dan pada fungsi main di panggil lagi nilai a dan b, maka nilai tersebut akan tetap menjadi nilai awalnya, yaitu 2 dan 5. Artinya, nilai variabel fungsi tambah tidak akan mempengaruhi nilai pada variabel fungsi main.

Pemanggilan Secara Referensi (Call by Reference)

 Call by reference merupakan pemanggilan alamat dari suatu variabel ke dalam fungsi. Perubahan nilai di fungsi akan merubah nilai asli di bagian program yang memanggil fungsi. Call by reference ini mempergunakan fungsi dari pointer untuk memanggil alamat variabel tersebut.

Contoh Call by Reference:

Untitled62

 

 

 

 

Berbeda dengan call by value yang tidak mempengaruhi nilai variabel pada fungsi main, Call by Reference mempengaruhi nilai variabel pada fungsi main. Nilai a = 4, b = 7. Fungsi kurang dipanggil, nilai a dan b mengikuti nilai variabel kurang menjadi 2 dan 3.

Variabel lokal merupakan fungsi dimana variabel local tersebut dideklarasikan. Variabel local juga memiliki sifat dinamis / otomatis yang dideklarasikan didalam suatu fungsi.

Untitled7

Contoh:

Untitled8

Ingat, setiap variabel HARUS diletakan dibawah tanda kurung kurawal ( { )

Variabel local hanya berfungsi di dalam blok saja. Misalnya kalau dari contoh diatas, maka variabel tersebut hanya berlaku pada blok int main saja.

Variabel global merupakan fungsi yang dideklarasikan diluar semua fungsi, dikenali oleh semua fungsi, selalu ada selama program dijalankan dan memiliki sifat statis.

Untitled9

Contoh:

Untitled10

Jadi, variabel global pada contoh tersebut akan berlaku
pada semua fungsi contoh disamping, variabel usia bisa
digunakan dalam fungsi coba dan fungsi main.

 

Untuk struktur fungsi tipe return, deklarasinya seperti ini:
Untitled11Tipe return merupakan tipe data yang dipakai ketika suatu fungsi mengembalikan nilai, dapat berupa int, char, float dan tipe data lainnya kecuali tipe data void. Karena, void itu menyatakan bahwa fungsi tersebut tidak mengembalikan nilai.

 

Argumen atau parameter fungsi merupakan suatu variabel yang digunakan untuk menerima suatu nilai yang dikirimkan ke dalam suatu fungsi oleh fungsi lain.

Contoh:
Untitled12

Perlu diingat, untuk void, void tidak perlu menggunakan keyword return. Walau boleh dipakai, tapi sangat tidak disarankan.

Untitled13


By:
– Faustina Sidik (2001537746)
– Alexandra Ursula (2001536913)
– Fidelia Queensy (2001536983)
– Natalia Evelyn (2001536996)
– Yvonne Priscilla (2001536415)

Posted in Programming Language Program ( Konsep Bahasa Program) | Comments Off on Bab VI : Subprograms

Bab V : Control Structures Statement

Control structure (Kontrol struktur) adalah statement kontrol dan statement yang eksekusi nya di atur oleh kontrol.

 

Statement yang menyediakan jenis-jenis  kemampuan sering di sebut dengan kontrol statement.

 

Selection statement (Statement Seleksi) memberikan arti pada pemilihan antara 2 atau lebih dari jalan eksekusi.

 

Kategori :

  • Two-way selector

Sebagai contoh :

if control_expression

then clause

else clause

 

o   Nesting selector

if (sum == 0)

if (count == 0)

result = 0;

else

result = 1;

 

Statement diatas dapat di interpretasikan dengan 2 cara, berdasar pada fungsi else di samakan dengan fungsi then atau yang kedua.

 

  • Multiple-way selector

Multiple selection statement memperbolehkan seleksi satu dari banyak nomor dari statement / statement group.

 

Contoh :

switch (expression)

{

case constant_expression1:statement1;

. . .

case constantn: statement_n;

[default: statementn+1]

}

Counter controlled loop

Counting iterative control statement memiliki variable yang di sebut dengan loop variable, yang count value nya di simpan. Termasuk menjelaskan initial dan terminal nilai dari loop variable, dan perbedaan antara sequential loop variable value, yang biasa di sebut stepsize. Initial, terminal, dan stepsize merukapak sepsifikasi dari loop yang di sebut loop parameter.

 

Logical controlled loops

Pengulangan ekspresi terhadap Boolean ekspresi

 

Sebagai contoh :

while (control_expression)

loop body

and

do

loop body

while (control_expression);

 

User-Located Loop Control Mechanisms

Terkadang, fungsi ini emudah kan programmer untuk memilih lokasi dari kontrol loop dari pada menggunakan sistem top atau bottom dari sebuah loop body.

 

Sebagai contoh :

while (sum < 1000) {

getnext(value);

if (value < 0)

break;

sum += value;

}

 

Nilai negatif akan memberhentikan fungsi loop diatas.

 

Iterasi berdasar data struktur

Kontrol mekanisme biasa di sebut iterator yang mengembalikan element berikutnya dari sebuah urutan.

 

Contoh :

Do Count = 1, 9, 2

 

Pada statement diatas nilai 1 sebagai nilai awal dari count, dan nilai 9 sebagai nilai akhir, dan stepsize antar nilai adalah 2. Maka fungsi internal, iterator(iterasi), harus di panggil untuk setiap iterasi untuk menghitung nilai selanjut nya dari count (dengan menambah 2 sebagai nilai akhir dari count, pada contoh tadi).

Unconditional branching statement

Unconditional branching statement mentransfer kontrol eksekusi ke lokasi spesifik dari sebuah program. Memiliki masalah pada goto logic yaitu tanpa restriksi pada penggunaan akan membuat program menjadi sulit dibaca, yang dapat menyebabkan tidak handal dan mahal perawatan.

 

Guarded Command

Guarded command adalah setiap baris dari seleksi statement yang mengandung Boolean ekspresi dan statement atau statement sequence. Sebagai contoh :

if i = 0 -> sum := sum + i

[] i > j -> sum := sum + j

[] j > i -> sum := sum + i


By:
– Faustina Sidik (2001537746)
– Alexandra Ursula (2001536913)
– Fidelia Queensy (2001536983)
– Natalia Evelyn (2001536996)
– Yvonne Priscilla (2001536415)

Posted in Programming Language Program ( Konsep Bahasa Program) | Comments Off on Bab V : Control Structures Statement

Bab IV : Expression and Assignment Statements

Ekspresi dalam bahasa C

 

Pada dasarnya, ekspresi adalah gabungan antara operator dan operand. Dari penggabungan operator dan operand ini dapat dibangun ekspresi-ekspresi yang lebih rumit. Namun demikian, bisa saja dalam bentuk paling sederhana, sebuah ekspresi hanya terdiri dari sebuah operand.

 

  1. Operator & Operand

 

Operator adalah karakter khusus yang berupa symbol atau tanda yang digunakan untuk mengoprasikan (memproses) dua operand atau lebih untuk mendapatkan hasil.

 

Operand adalah suatu variabel (angka atau karakter) yang akan dioprasikan (diproses) oleh operator untuk mengetahui hasil.

 

  • Operator Aritmatika

Operator adalah simbol-simbol yang digunakan untuk melaksanakan suatu pengolahan data, baik berupa bilangan maupun teks. Operator aritmatika adalah sekelompok operator yang digunakan untuk mengolah aritmatik.

 

Tabel 1.1 Daftar operator aritmatika

Operator Nama Contoh Penjelasan
* Perkalian x * y Kalikan x dengan y
/ Pembagian x / y Bagi x dengan y
% Modulo x % y Sisa pembagian x oleh y
+ Penjumlahan x + y Tambahkan x dengan y
Pengurangan x – y Kurangkan x dengan y
++ Postfix Inkremen

Prefix Inkremen

++x

x++

Inkremen x setelah digunakan

Inkremen x sebelum digunakan

Postfix Dekremen

Prefix Dekremen

–x

x–

Dekremen x sebelum digunakan

Dekremen x sesudah digunakan

Negasi -x Negasikan nilai x
+ Unary plus +x Nilai positif x

 

Operator-operator *, /, %, +, dan – merupakan operator dyadic ataubinary operator, yakni operator yang membutuhkan dua operand: kiri dan kanan. Sedangkan operator yang hanya membutuhkan satu operand, disebutmonadic atau operator unary. Yang termasuk golongan operator ini adalah:inkremen (++) dekremen (–), unary minus (-), unary plus (+).

Operasi unary inkremen dan dekremen masing-masing berfungsi untuk menambah nilai variabel dengan satu dan mengurangi nilai variabel dengan satu. Operator unary minus dan unary plus berturut-turut digunakan untuk mengambil nilai negatif dan nilai positif dari suatu bilangan.

Tabel 1.2 Presedensi operator aritmatika

Operator Asosiatifias Presedensi
++ — Kanan ke kiri Tertinggi
Kiri ke kanan
* / % Kiri ke kanan
+ – Kiri ke kanan Terendah
  • Operator Relasional

 

Operator relasional adalah binary operator yang digunakan untuk membandingkan suatu nilai. Dalam C, ada enam jenis operator relasional: lebih besar, lebih besar atau sama dengan, lebih kecil, lebih kecil atau sama dengan, sama dengan, dan tidak sama dengan.

 

Tabel 1.3 Daftar operasi relasional

Operator Nama Contoh Penjelasan
< Lebih kecil dari x > y 1 jika x lebih besar y, 0 jika tidak
<= Lebih kecil atau sama dengan x >=y 1 jika x lebih besar atau sama dengan y, 0 jika tidak
> Lebih besar dari x < y 1 jika x lebih kecil y, 0 jika tidak
>= Lebih besar atau sama dengan x <=y 1 jika x lebih kecil atau sama dengan y, 0 jika tidak
== Sama dengan x == y 1 jika x sama dengan y, 0 jika tidak
!= Tidak samadengan x != y 1 jika x dan y tidak sama, 0 jika tidak

 

  • Operator Unary ‘++’ dan operator unary ‘- -‘ merupakan operator khusus yang ada pada bahasa C dan jarang dijumpai di Bahasa yang lain. Operator ‘++’ akan menambah nilai numerik 1 ke pengenal yang menggunakannya dan operator ‘- – ‘ akan mengurangi dengan nilai numerik 1 untuk pengenal yang menggunakannya. Misalnya bentuk X=X+1 dapat dituliskan sebagai X++. Sedangkan bentuk X=X-1 dapat dituliskan sebagai X–. Operator ini banyak dijumpai di statement for yang berbentuk sebagai berikut

For(I=1; I<10;I=I+1)

Dapat ditulis dengan operator ‘++’ sebagai berikut

For(I=1;I<10;I++)

 

Contoh 1:

Nilai A adalah 5, nilai B adalah 7, dan nilai C adalah “a”. Beberapa ungkapan hubungan yang menggunakan variable-variebel ini dan hasilnya tampak sebagai berikut :

#include <stdio.h>

 

main()

{

int A=5,B=7;

 

printf(“%d < %d hasilnya adalah %d \n”, A,B,A<B);

 

printf(“%d<=%d hasilnya adalah %d \n”, A,B,A<=B);

 

printf(“%d>%d hasilnya adalah %d \n”,A,B,A>B);

 

printf(“%d>=%d hasilnya adalah %d \n”,A,B,A>=B);

 

printf(“%d==%d hasilnya adalah %d \n”,A,B,A==B);

 

printf(“%d !=%d hasilnya adalah %d \n”,A,B,A!=B);

}

 

Jika program ini dijalankan akan didapatkan hasil :

5 <   7 hasilnya adalah 1

 

5 <= 7 hasilnya adalah 1

 

5 >   7 hasilnya adalah 0

 

5 >= 7 hasilnya adalah 0

 

5 == 7 hasilnya adalah 0

 

5 != 7 hasilnya adalah 1

 

Operator hubungan banyak digunakan untuk penyeleksian kondisi dengan statement if, do-while

 

1.3  Operator Logika

 

Operator logika adalah operator-operator yang berkaitan dengan operasi logika, seperti negasi, (ingkaran), konjungsi (dan), dan disjungsi (atau).

 

Tabel 1.4 Daftar operator logika

Operator Nama Contoh Penjelasan
! NOT logika !x 1jika x nol, 0 jika tidak
&& AND logika x && y 1 jika x dan y keduanya 1
|| OR logika x ll y 0 jika x dan y keduanya 0

 

Misalnya nilai A adalah 5, B adalah 7, dan C adalah ‘ a’, maka ungkapan logika berikut ini akan mempunyai hasil akhir benar.

Hasil akhir benar dari ungkapan logika tersebut didapat dari langkah-langkah sebagai berikut ini.

 

  • Jenjang operator hubungan lebih tinggi dibandingkan dengan jenjang operator logika, sehingga ungkapan-ungkapan hubungan dikerjakan terlebih dahulu. Ungkapan hubungan A < B adalah benar, maka akan bernilai 1. Ungkapan hubungan B == 7 adalah benar dan bernilai 1. Ungkapan hubungan C > ‘ z ‘ adalah salah maka bernilai 0.

 

  • Operator logika ‘ && ‘ mempunyai jenjang yang lebih tinggi dibandingkan dengan operator logika ‘ || ‘ , sehingga ungkapan logika 1 && 0 dikerjakan terlebih dahulu dengan hasil logikanya adalah 0.

 

  • Ungkapan logika 1 || 0 selanjutnya dikerjakan dengan memberikan hasil akhir bernilai logika benar atau 1.

 

1.4  Operator Bitwise Logika

 

Operator bitwise logika memperlakukan operan-operand-nya sebagai sebuah kuntitas yeng terdiri dari bit-bit. Operasi dilakukan terhadap masing-masing bittersebut satu demi satu. Operator &&, ||, dan ! memperlakukan seluruhoperand-nya sebagai sebuah nilai benar atau salah yang tunggal. Sedangkan operator bitwise logika dikenakan secara parallel terhadap posisi bit secara individu.

 

 

 

Tabel 1.5 Operator bitwise logika

Operator Nama Contoh Penjelasan
~ Bit-NOT ~x Mengubah bit 1 menjadi 0 dan bit 0 menjadi 1
& Bit-AND x & y AND bitwise dari x dan y
| Bit-OR x / y OR bitwise dari x dan y
^ Eksklusif-OR x ^ y Bernilai 1 bila bit-bit x dan y berbeda
<< Left Shift x << 4 x digeser ke kiri sebanyak 4 posisi bit
>> Right Shift x >> 4 x digeser ke kanan sebanyak 4 posisi bit

 

1.5 Operator-operator Khusus

 

Disamping operator-operator yang telah dibahas sebelumnya, C memiliki beberapa operator lain yang bersifat khusus dan digunakan untuk maksud-maksud tertentu. Beberapa diantaranya adalah sebagai berikut

 

  1. Operator sizeof

 

Operator sizeof adalah sebuah operator unary yang digunakan pada perhitungan jumlah byte yang dibutuhkan untuk menyimpan sebuah objek atau jenis data. Penentuan ini diperlukan karena sebagian besar jenis data dan variabel membutuhkan tempat penyimpanan internal yang berbeda antara satu komputer dengan komputer yang lain. Dengan penentuan ini, konsistensi data yang digunakan pada program dapat dipertahankan.

 

Contoh :
#include <stdio.h>

main()
{
char C;
int I;
long int LI;
float F;
double D;
long double LD;

    printf (“ukuran karakter = %d byte \n”, sizeof C);
printf (“ukuran integer= %d byte\n”, sizeof I);
printf(“ukuran long integer= %d byte \n”,sizeof LI);
printf (“ukuran float= %d byte \n”,sizeof F);
printf (“ukuran double= %d byte \n”,sizeof D);
printf (“ukuran long double= %d byte \n”,sizeof LD);
}

Jika program ini dijalankan maka akan didapatkan hasil:
ukuran karakter= 1 byte

ukuran integer= 2 byte

ukuran long integer= 4 byte

ukuran float= 4 byte

ukuran double= 8 byte

ukuran long double= 10 byteB.

  1. Operator penugasan

Operator penugasan (assignment operator) adalah operator yang digunakan untuk memberikan nilai pada suatu variabel. Operator ini adalah binaryoperator, dengan sisi sebelah kirinya berupa lvalue, yaitu sebuah variabel tunggal yang mengacu ke memori komputer, sementara sisi sebelah kanannya dapat berupa lvalue atau rvalue. Rvalue adalah sebuah ekspresi yang bukan lvlaue, contohnya paling sederhana adalah konstanta. Selain itu operator penugasan juga dapat digabungkan dengan operator aritmatika dan operatorbitwise logika.

 

Tabel 1.6 Daftar operator gabungan

Operator Contoh Ekspresi ekivalen Penjelasan
+= x += n x = x + n Tambah x dengan n
-= x -= n x = – n Kurangi x dengan n
*= x *= n x = * n Kalikan x dengan n
/= x /= n x = / n Bagi x dengan n
%= x %= n x = % n Pembagian sisa x dengan n
<<= x <<= n x = << n x digeser ke kiri sebanyak n posisi bit
>>= x >>= n x = >> n x digeser ke kanan banyak n posisi bit
&= x &= n x = & n Setiap bit x di-AND kan dengan setiap bit n
|= x |= n x = | n Setiap bit x di-OR kan dengan setiap bit n
^= x ^= n x = ^ n Setiap bit x di-XOR kan dengan setiap bit n

 

Contoh :

 

Misal “=” adalah operator pengerjaan yang akan memberikan nilai dari ungkapan kepada variabel.

 

Contoh :

Misalnya variabel I dan J adalah variable-variabel tipe interger dengan nilai awal keduanya adalah 10. Statement-statement berikut ini menggunakan variable-variabel I dan J dan hasil  ungkapannya.

tabel 5 Contoh Operator Pengerjaan

Statement Ekuivalen dengan Hasil ungkapan
I += 3; I = I + 3; I = 10+3 = 13
I -= 2; I = I – 2; I = 10-2 = 8
I *= J/2; I = I*(J/2); I=10* (10/2)=50
I /= J-8; I = I/(J-8); I= 10/ (10-8)= 5

 

 

  1. Operator koma

 

Operator koma digunakan untuk memisahkan sederetan nama variabel dalam sebuah deklarasi, memisahkan argument fungsi, menyatukan dua ekspresi menjadi sebuah pernyataan, memungkinkan pemberian lebih besar dari satu ekspresi pada harga awal, dan perbaikan harga pada struktur pengulangan.

 

Misalnya Statement berikut ini:

X= ( B= 5, B*2);

Akan dihasilkan nilai X adalah 10, karena B= 5 akan diproses terlebih dahulu dan kemudian nilai B di kalikan dengan nilai 2. Hasil akhir ini yaitu nilai 10 diberikan ke variabel X. Nilai B terakhir adalah 5, sedangkan operasi B*2 tidak merubah nilai B karena operasi ini hasilnya tidak disimpan di variabel B.

 

  1. Operator bertingkat

 

Operator bertingkat (nested operator) adalah beberapa operator yang dikenakan di dalam sebuah ekspresi. Masing-masing operator di dalam ekspresi tersebut memberikan sebuah nilai yang kemudian dapat digunakan didalam ekspresi yang lebih besar.

 

  1. Operator alamat

 

Operator alamat adalah operator yang memberikan alamat dari operand­-nya, misalnya &x memberikan alamat dari x. Operand yang dikenakan pada & haruslah merupakan lvalue¸yang memiliki tempat penyimpanan di dalam memori.

 

  1. Operator bersyarat

 

Operator yang satu-satunya bersifat triadic (ternary operator) yang membutuhkan tiga buah operand dan dikenal juga sebagai ekspresi bersyarat. Ketiga buah operand yang dibutuhkan pada operator ini terdiri dari: satu ekspresi yang akan diuji dan dua ekspresi pilihan.

 

  1. Operator cast

 

Dalam sebuah program, pengkonversian jenis data secara otomatis sedapat mungkin hendaklah dihindarkan, khususnya pada kasus demosi, karena hal ini akan dapat menimbulkan hal-hal yan tidak diinginkan, misalnya terjadi pemotongan nilai (truncation).

 

Adakalanya pengkonversian jenis data malah berguna dan perlu dilakukan. Dalam hal ini, C berprinsip untuk tidak memberikan batasan apapun dan melimpahkan tanggung jawab ke pemrogram untuk tidak menyalahgunakan kebebasan ini. Jadi, hendaklah pengkonversian dilakukan dengan dangat hati-hati sekali, sehingga jenis data yang dikonversi dapat dilakukan dengan tepat. Metode melakukan hal itu disebut casting, menggunakan operator berupa sepasang tanda kurung biasa.

 

  1. Assignment Statement

 

  1. The Assignment Operator (=)

 

Dalam bahasa Indonesia assignment ini adalah penugasan. Saya rasa arti kata ini akan membingungkan kita, dalam bahasa saya arti yang lebih cocok dengan yang dilakukan oleh Assignment operator (=) ini dapat diartikan dengan “diisi. untuk lebih jelasnya mari kita lihat contoh dibawah ini :

 

variable = expression;

<target_var> <assign_operator> <expression>

 

A == 7;   ==>variable A diisi dengan 7.

 

= can be bad when it is overloaded for the relational operator for equality (that’s why the C-based languages use == as the relational operator)

 

B = 1 + 1; ===> variable B diisi dengan hasil 1+1 yaitu 2.

 

C = A + 1; ===> variable C diisi dengan hasil varaibel A ditambah 1 yaitu 7 +1 = 8.

 

2.Assignment Statement : Conditional Target

Statement yang akan ditampilkan bergantung pada kondisi yang telah kita deklarasi kan

Contoh:

if (x%2==0) {

    printf(“genap”);

}

 

Else {

    printf(“ganjil”);

}

 

Jika kita memasukkan angka yang akan habis dibagi 2 maka output yang dikeluarkan adalah “GENAP”, Sebalik-nya jika angka yang dimasukkan tidak habis dibagi 2 maka output yang dikeluarkan adalah “GANJIL”.

 

  1. Assignment Statements: Compound Assignment Operators

 

Cara sederhana untuk mendeklarasikan sebuah form

Contoh :

i = i*2

 

dapat ditulis lebih singkat menjadi : i*=2

 

  1. Assignment Statements: Unary Assignment Operators

 

Operator penetapan Unary dalam C-bahasa berbasis menggabungkan pertambahan dan pengurangan operasional perusahaan dengan contoh-contoh penetapan:

sum     = x++ (x ditulis dahulu, baru ditambah)
sum     = ++x (ditambah dulu x nya, baru ditulis x nya)
sum     = x– (x ditulis dahulu, baru dikurangi)
sum     = –x (x dikurang dahulu, baru ditulis)
count++ (count incremented)
-count++ (count incremented then negated)

 

  1. Assignment as an Expression

 

Dalam bahasa c, assignment statement menghasilkan hasil dan dapat digunakan sebagai operand

int c;

while((c=10)>0)

 

  1. Multiple Assignments

Untuk mendeklarasi kan hal hal yang bernilai sama dalam suatu variabel

sample1 = sample2 = 0;

sama seperti

sample1 = (sample2 = 0);

yang berarti sama dengan

sample2 = 0;

sample1 = sample2;

yang berarti sample1 dan sample2 sebenarnya bernilai sama yaitu 0.

  1. Assignment in Functional Languages

 

Identifiers dalam functional languages hanya nama dari nilai

Names are bound to values with val

 

val fruit = apples + oranges;

 

Jika satu lagi val untuk buah-buahan dibuat, ia adalah sebuah nama yang berbeda dan baru

 

  1. Mixed-Mode Assignment

 

Dalam C , setiap nilai numerik dapat ditetapkan untuk setiap variabel scalar angka; hal-hal yang penting adalah konversi dilakukan.

int a, b;

float c;

c = a / b;

karena c adalah float, nilai-nilai a dan b dapat dipaksa untuk di hasilkan dalam bentuk float sebelum divisi, yang dapat menghasilkan nilai yang berbeda untuk c jika dibanding dengan cara-cara pemaksaan ditunda (misalnya, jika a adalah 2 dan b adalah 3).


By:
– Faustina Sidik (2001537746)
– Alexandra Ursula (2001536913)
– Fidelia Queensy (2001536983)
– Natalia Evelyn (2001536996)
– Yvonne Priscilla (2001536415)

Posted in Programming Language Program ( Konsep Bahasa Program) | Comments Off on Bab IV : Expression and Assignment Statements

Bab III : Data Types

Tipe data adalah jenis data yang mempunyai batasan tempat dan karakteristik sesuai dengan interprestasi data dan dapat diolah oleh komputer untuk memenuhi kebutuhan dalam pemrograman komputer. Tipe data pada umumnya termasuk tipe data primitif, yaitu interger, floating point number dan character (string). Kumpulan dari tipe data primitif yang sejenis juga dapat disatukan dalam sebuah blok yang disebut array.

Jenis-jenis tipe data

  1. Numeric/Number

Tipe data yang digunakan pada variabel atau konstanta untuk menyimpan nilai dalam bentuk bilangan atau angka baik angka atau bilangan tersebut merupakan bilangan bulat ataupun bilangan real.

Tipe data Numeric/Number terbagi menjadi 2 bagian antara lain :

  • Tipe Bilangan Bulat

Tipe bilangan yang hanya dapat menampung data bernilai positif, negatif dan nol ( 0 ). Didalam tipe bilangan bulat sendiri sebenarnya masih dapat terbagi lagi menjadi beberapa golongan berdasarkan rentang datanya. Misalnya, jika yang digunakan adalaha bahasa pemrograman java maka tipe bilangan bulat dibagi menjadi sebagai berikut :

Tipe Data Ukuran (bit) Range
Byte 8 -128 s.d. 127
Short 16 -32768 s.d. 32767
Int 32 -2147483648 s.d. 2147483647
Long 64 -9223372036854775808  s.d. 9223372036854775807

  • Tipe Bilangan Pecahan

Tipe bilangan yang hanya dapat menampung data bernilai positif, negatif, nol, yang bernilai pecahan. Didalam tipe bilangan pecahan sendiri sebenarnya masih dapat terbagi lagi menjadi beberapa golongan berdasarkan rentang datanya. Misalnya, jika yang digunakan adalaha bahasa pemrograman java maka tipe bilangan bulat dibagi menjadi sebagai berikut :

Tipe Ukuran Range Presisi (jumlah digit)
bytes bit
float 4 32 +/- 3.4 x 1038 6-7
double 8 64 +/- 1.8 x 10308 15

  1. String/Karakter

Tipe data yang digunakan pada variabel atau konstanta untuk menyimpan nilai dalam bentuk karakter (angka, huruf, karakter khusus atau simbol).

  1. Boolean

Tipe data yang digunakan untuk menampung nilai logika, yaitu nilai yang hanya memiliki dua buah kemungkinan (benar atau salah).

Tipe – Data Lain

Sebenarnya selain dari ketiga tipe diatas,dalam bahasa pemrograman masih ada tipe data lain yang tidak mungkin dapat disebutkan dan jelaskan satu persatu. Contoh dari tipe data selain Numerik,String dan Boolean adalah sebagai berikut :

  1. Array

Tipe data sejenis yang dapat menampung data secara bertumpuk,jadi satu tipe data tetapi datanya bisa lebih dari satu.

  1. Date

Tipe data yang hanya dapat menampung data dalam format tanggal saja

  1. Time

Tipe data yang hanya dapat menampung data dalam format waktu saja

  1. Char

Sebenarnya tipe data char hampir sama dengan tipe data String, akan tetapi kalau tipe data string panjangnya tidak tetap sedangkan tipe data char panjangnya selalu tetap sesuai dengan inisialisasi awal pemesanan tipe data.

OPERASI TIPE DATA

  1. Operasi tipe data numerik
  • Operasi aritmatika

Di dalam operasi ini nilai dari suatu tipe data bisa digunakan untuk melakukan perhitungan aritmatik (penambahan(+), pengurangan (-), perkalian (x), pembagian (/),dll).

Contoh :

Private int kuis,uts,uas,na;

Na=(kuis+uts+uas)/3

  • Operasi operator relational

Operasi operator relational sebenarnya harus dikombinasikan dengan operasi aritmatika dan operasi fungsi logika. Berikut simbol dari operator relational:

–          Sama dengan (=)

–          Tidak sama dengan (!=)

–          Lebih kecil dari (<)

–          Lebih besar dari (>)

–          Lebih kecil dari atau sama dengan (<=)

–          Lebih besar dari atau sama dengan (>=)

Contoh :

Private string keterangan;

Private int nilai_akhir=61;

If (nilai_akhir>=61){

Keterangan=”lulus”;

}

  1. Operasi tipe data String

Di dalam operasi ini nilai dari suatu tipe data bisa digunakan untuk melakukan pemenggalan, perhitungan panjang string penggabungan dll.

  • Operasi Pemenggalan

Operasi yang digunakan untuk mengambil suatu karakter dalam nilai data string.

Contoh :

Substring(“sulis wijayanti”,9,4);

Maka hasil diatas adalah “jaya”

  •  Operasi Perhitungan Panjang String

Operasi yang digunakan untuk mengetahui panjang karakter dalam nilai data string.

Contoh :

Length(“sulistiana”);

Maka hasil diatas adalah 10

  •  Operasi Penggabungan

Operasi yang digunakan untuk menggabungan nilai data string.

Contoh :

Concat(“sulis”,”soni”);

Maka hasil diatas adalah sulissoni

  •  Operasi Pencarian Posisi

Operasi yang digunakan untuk mengetahui posisi karakter dalam nilai string

Contoh :

Index(“intan sari wijayanti”,”sari”);

Maka hasil diatas adalah 7

  • Dan masih banyak lagi, misalnya UPPER untuk menjadikan huruf kapital, LOWER untuk menjadikan huruf kecil,L TRIM dan R TRIM untuk menghilangkan spasi pada nilai string dll.
  1. Operasi tipe data boolean

Pada tipe data boolean hanya dapat melakukan operasi logika dan fungsi logika tersebut dapat dikombinasikan dengan fungsi logical(and,or,not,dll) serta dapat dikombinasikan dengan operator relational.

 

Contoh :

Private int na=61;

Private string predikat;

If ( (na>=61) and (na<=70){

Predikat=”C”;

}else If ( (na>=71) and (na<=80){

Predikat=”B”;

}


By:
– Faustina Sidik (2001537746)
– Alexandra Ursula (2001536913)
– Fidelia Queensy (2001536983)
– Natalia Evelyn (2001536996)
– Yvonne Priscilla (2001536415)

Posted in Programming Language Program ( Konsep Bahasa Program) | Comments Off on Bab III : Data Types

Bab II : Names, Bindings and Scopes

Variable dapat di karakteristikkan dengan kumpulan properties, atau attribute, dan yang paling penting adalah tipe dari konsep bahasa pemrograman nya. Names adalah sebuah string karakter yang digunakan untuk mengidentifikasi beberapa entity dalam sebuah program.

• Nama variable tidak boleh berupa angka ataupun diawali oleh karakter yang berupa angka.
contoh:
int 234 ; /*SALAH,karena nama variable berupa angka*/
int 3Dimensi ; /*SALAH, karena nama variable diawali oleh angka*/
int S1 ; /*BENAR, karena nama variable diawali oleh huruf*/

• Nama variable tidak boleh mengandung spasi
contoh:
float Bilangan Riil ; /*SALAH, karena mengandung spasi*/
float BilanganRiil ; /*BENAR*/
float _BilanganRiil; /*BENAR*/
float Bilangan_Riil; /*BENAR*/

• Nama variable tidak boleh menggunakan karakter-karakter yang merupakan simbol (@,?,#,!,dll), meskipun karakter tersebut terletak di tengah atau di belakang nama variable.
Contoh:
int #5 ; /*SALAH, karena mengandung tanda #*/
int 6@ ; /*SALAH, karena mengandung tanda @*/
int tu?juh; /*SALAH, karena mengandung tanda ?*/

• Panjangnya bebas, tetapi hanya 32 karakter pertama yang terpakai.

• Memberi nama variable sedeskriptif mungkin sehingga program akan mudah untuk dibaca dan dimengerti oleh orang lain.
Contoh:
Apabila kita akan mendeklarasikan variable untuk menyimpan nilai dan luas lingkaran, maka kita akan dapat memberinya nama luas, L, LuasLingkaran atau yang lainnya

Bahasa C merupakan bahasa yang bersifat case-sensitive (membedakan penulisan huruf kecil dan huruf huruf besar) sehingga nama variable pada saat dideklarasikan dan digunakan, penulisannya harus sama.
contoh:
Dalam bahasa C, variable a dan A akan dianggap sebagai dua buah varibel yang berbeda.
Special Words
Special words dalam bahasa pemrograman digunakan untuk membuat program lebih dapat dibaca dengan menamai aksi yang akan dilaksanakan. Digunakan juga untuk memisahkan antara statement dan program. Keyword adalah kata dalam sebuah bahasa pemrograman yang special dan berada pada context tertentu saja. Reserved word adalah special kata dari sebuah bahasa pemrograman yang tidak dapat digunakan sebagai nama. Dalam reserved word ada problema sebagai contoh:
Integer Real
Real Integer

Statement diatas mendeklarasikan program variable real itu adalah tipe integer dan variable integer itu adalah tipe real

Variable
Variable adalah abstraksi dari memory cell computer atau kumpulan cell.
Variable attribute terdiri dari :
• Name = nama dari sebuah variable, hamper setiap variable memiliki nama.
• Address = address dari sebuah variable dalam memory yang di asosiasikan.

Asosiasi ini tidak se-simple yang di perkirakan, bisa saja variable yang sama di asosiasikan dengan alamat yang berbeda dan pada waktu yang berbeda pada sebuah program. Aliases adalah ketika satu nama variable dapat mengakses lokasi memory yang sama. kelemahan aliasing adalah memperbolehkan variable untuk mengubah nilai berdasarkan tugas dari variable yang lain.
• Type = variable menentukan range nilai dari variable yang di simpan dan set
operasi yang mendefinisikan nilai dari type.

Contoh : tipe int pada java memiliki range -2147483648 sampai
2147483647.

• Value = variable content dari memory cell atau cell asosiasi dengan variable.

Binding
Binding adalah asosiasi antara attribute dan entity, seperti antara variable dengan tipe nya atau nilai, atau antara sebuah operasi dan symbol. Binding time adalah waktu yang dibutuhkan dalam melakukan binding.
Sebagai contoh :
count = count + 5;
tipe count binding dengan waktu compile.

Binding dapat ditentukan tipe nya.
1. Static binding yaitu terjadi sebelum program berjalan, dan tetap sama selama program eksekusi.
2. Dynamic binding yaitu binding terjadi ketika program sedang berjalan dan nilai dapat berubah selama program dieksekusi.
Storage binding and lifetime
Ada 2 tipe storage binding yaitu :
1. Allocation : mengambil cell dari kolam memori cell yang tersedia
2. Deallocation: selmemori yangtelah tidak terikat dari variabel dikembali ke
kolammemori yang tersedia.

Lifetime variable dimulai ketika cell spesifik terikat, dan berakhir ketika tidak terikat dari cell itu.

Terdapat 4 kategori type binding yaitu :
1. Static
Static = cell yang terikat pada memory cell sebelum eksekusi dimulai, dan tetap terikat pada memory cell yang sama sampai program eksekusi selesai.
(+) semua addressing pada static variable bersifat langsung.
(¬-) mengurangi fleksibilitas(tidak support untuk reculsive program)

2. Stack dynamic
Stack dynamic variable = storage binding dibuat ketika deklarasi statement dijelaskan, tapi tipe nya bersifat terikat.
(+)support dynamic storage(reculsive)
(-)waktu akses yang lambat karena addressing tidak langsung
3. Explicit heap dynamic
Explicit heap dynamic = abstrak memory cell yang di alokasi dan dealokasi dengan instruksi eksplicit run-time yang ditulis oleh programmer. Variable nya hanya bisa dialokasikan oleh pointer atau reference variable. Sebagai contoh :

int *intnode; // Create a pointer
intnode = new int; // Create the heap-dynamic variable
. . .
delete intnode; // Deallocate the heap-dynamic variable
// to which intnode points

Explicit heap dynamic variable pada tipe int dibuat oleh operator new. Variable ini bisa di referensikan melalui pointer , int node. Nantinya variable di deallocation dengan delete operator.
(+) storage manajemen yang dinamis.
(-) tidak efisien dan tidak handal.

4. Implicit heap dynamic
Implicit heap dynamic terikat dengan heap storage ketika ada nilai yang ditugaskan.
Sebagai contoh:

highs = [74, 84, 86, 90, 71];
variable bernama highs sudah di deklarasi di sebelumnya, dan sekarang digunakan pada array 5 data.
(+) memiliki fleksibilitas yang memperbolehkan high generic code untuk ditulis ulang.
(-) run-time overhead mempertahankan semua atribut dinamis, yang akan
mencakup jenis array subscript dan range.

Scope
Scope (atau ruang lingkup variabel) adalah jangkauan kode program dimana perintah program masih bisa mengakses sebuah variabel.

Scope terbagi jadi dua, global dan local.

Scope Global :
Scope global merupakan ruang lingkup dimana variabel dapat digunakan atau dipanggil oleh semua fungsi. Hal ini betujuan untuk menghemat penulisan, karena tidak perlu lagi berkali – kali menuliskan variabel yang sama pada beberapa fungsi/prosedur.

Scope Local
Scope local merupakan ruang lingkup dimana variabel digunakan hanya pada ruang lingkup tertentu (terbatas).

Untitled1


By:
– Faustina Sidik (2001537746)
– Alexandra Ursula (2001536913)
– Fidelia Queensy (2001536983)
– Natalia Evelyn (2001536996)
– Yvonne Priscilla (2001536415)

Posted in Programming Language Program ( Konsep Bahasa Program) | Comments Off on Bab II : Names, Bindings and Scopes