PENDAHULUAN
Bahasa Pemrograman
Kuliah #1
Kontrak Kuliah
Deskripsi
Konsep bahasa pemrograman (functional programming, logic programming, concurent programming, imperative programming, object oriented programming), jenis dan ciri; aturan-aturan dalam struktur pemrograman; elemen-elemen bahasa pemrograman: notasi, deklarasi, scope. Functional programming: ciri-ciri, sintaks, list, dan beberapa aplikasi lainnya. Logic programming : ciri-ciri, relasi, aturan, fakta, goal, prolog search tree, place holder, cut, list, database. Object oriented programming: pengertian obyek, kelas dan data, operator overloading, inheritance, fungsi virtual, polymorphism, stream.
JULIO - ILMU KOMPUTER IPB 2
Kontrak Kuliah
Tujuan
Setelah mengikuti matakuliah ini, mahasiswa diharapkan mampu memecahkan masalah yang berbeda dengan menggunakan bahasa pemrograman yang sesuai
Strategi Perkuliahan
Kuliah diberikan kepada mahasiswa S1 IPB yang mengambil mata kuliah ini sebagai mayor (G6: Ilmu Komputer), baik reguler maupun penyelenggaraan khusus (ekstensi). Perkuliahan dilakukan sebanyak 14 kali pertemuan kuliah tatap muka dan 12 kali praktikum. Metode perkuliahan adalah kombinasi antara ceramah, diskusi, dan latihan. Sedangkan praktikum dilaksanakan dengan metode tutorial dan latihan. Mahasiswa wajib mengikuti perkuliahan minimal 80 persen, dan praktikum 80 persen. Mahasiswa pengulang matakuliah Bahasa Pemrograman diwajibkan mengikuti keseluruhan kegiatan kuliah dan praktikum selama satu semester.
JULIO - ILMU KOMPUTER IPB 3
Kontrak Kuliah
Tugas
Tugas pemrograman diberikan pada saat kuliah dan wajib dikerjakan oleh mahasiswa, dan hasilnya dikumpulkan sesuai dengan waktu yang telah ditetapkan. Keterlambatan pengumpulan tugas akan mengurangi nilai sebesar 10 satuan per hari dengan batas maksimum keterlambatan adalah 5 hari. Mahasiswa yang melakukan kecurangan dan/atau plagiarism akan mendapatkan sanksi tegas
Strategi Perkuliahan
Programming Languages: Principles and Paradigms. 2nd Ed. Allen B. Tucker & Robert E. Noonan.
C: How to Program. 3rd Ed. Deitel, H. M. & P. J. Deitel. Pearson Education Prentice Hall. Prentice-Hall, New Jersey.
Java: How to Program. 3rd Ed. Deitel, H. M. & P. J. Deitel. Pearson Education Prentice Hall. Prentice-Hall, New Jersey
JULIO - ILMU KOMPUTER IPB 4
Kontrak Kuliah
JULIO - ILMU KOMPUTER IPB 5
Sesuai dengan ketentuan yang terdapat pada Buku Panduan Sarjana IPB Hadir paling lambat 15 menit. Mahasiswa TIDAK DIPERKENANKAN masuk kelas setelah 15 menit kuliah dimulai.
• Jika dalam keadaan mendesak (misal transportasi, cuaca), bisa memberitahu terlebih dahulu via sms/call ke Sekretariat paling lambat pukul 18:00
• Seketariat akan memberi lembar ijin masuk melebihi batas 15 menit. Mahasiswa harus mengambil lembar ini sebelum masuk kelas. Tanpa lembar ijin ini, mahasiswa tidak diperkenankan masuk kelas melebih batas 15 menit.
Berpenampilan dan berbusana sopan serta rapi. Tidak menggunakan sandal atau sejenisnya.
Tidak mengoperasikan handphone, laptop, atau sejenisnya. Kehadiran mahasiswa minimal 70% untuk dapat mengikuti UAS.
Tata Tertib Mahasiswa
Kontrak Kuliah
Kriteria Penilaian
• Nilai akhir (NA) adalah nilai kumulatif dari nilai ujian tengah semester (UTS), ujian akhir semester (UAS), dan nilai LL (tugas atau praktikum atau kehadiran). Metode dan bobot nilai sebagai berikut:
–UTS+UAS dilakukan melalui ujian tertulis, bobot total 75% –LL dinilai melalui aktivitas mahasiswa (praktikum,
kehadiran), dan nilai tugas, dengan bobot total 25%
• Selang nilai untuk menetapkan huruf mutu A, B, C, D, atau E ditentukan berdasarkan nilai rataan dan standard deviasi dengan menggunakan sebaran normal. Ketentuan ini berlaku sama untuk semua mahasiswa baru atau pengulang.
OVERVIEW
Tucker & Noonan
Chapter 1
Prinsip Bahasa Pemrograman
• Bahasa pemrograman vs bahasa alami Memfasilitasi komunikasi antar manusia
Bahasa pemrograman juga memfasilitasi komunikasi manusia dengan mesin
Bahasa pemrograman hanya pada domain komputasional
• Perancang bahasa memiliki vocabulary dasar tentang:
Struktur bahasa Arti
JULIO - ILMU KOMPUTER IPB 8
Prinsip Bahasa Pemrograman
• Prinsip perancangan bahasa : (1) Sintaks, (2) Nama dan Tipe, (3) Semantik.
• Sintaks menjelaskan bagaimana struktur program yang benar. Struktur bahasa pemrograman modern didefinisikan menggunakan bahasa formal yang disebut context-free-grammar.
• Nama dan Tipe menunjukkan bagaimana aturan penamaan entitas (variabel, fungsi, class, parameter, dsb).
• Semantik, arti dari program. Ketika program dijalankan, efek tiap instruksi didefinisikan oleh semantik dari bahasa.
JULIO - ILMU KOMPUTER IPB 9
Paradigma
• Paradigma pemrograman adalah bentuk pemecahan masalah mengikuti aliran atau “genre” tertentu dari program dan bahasa.
• Empat paradigma pemrograman pada tiga dekade terakhir: Imperative programming
Object-oriented programming Functional programming Logic programming
• Beberapa bahasa dirancang mendukung lebih dari satu paradigma. Contoh: C++ (imperative dan OOP), Leda (imperative, OOP, functional, logic).
JULIO - ILMU KOMPUTER IPB 10
Imperative Programming
• Paradigma paling tua, didasari oleh model komputasi klasik “von Neumann-Eckert”.
• Program dan variabel disimpan bersama.
• Program terdiri dari instruksi yang membentuk perhitungan, asignment, input, output, dan kontrol.
• Contoh: Cobol, Fortran, C, Ada, Perl
JULIO - ILMU KOMPUTER IPB
input output control arithmetic/logic program variables program variables 11
Object-oriented Programming
• Program adalah kumpulan dari obyek yang saling berinteraksi satu sama lain.
• Program membungkus (encapsulate) data dan fungsi atau prosedur menjadi suatu obyek (class).
• Meliputi mekanisme obyek, pewarisan, dan passing parameter.
• Contoh: Smalltalk, C++, Java, C#
Functional Programming
• Memodelkan masalah komputasi sebagai suatu fungsi matematika, yang mempunyai input (domain) dan hasil atau output (range).
• Tidak menggunakan mekanisme assignment, karena tidak dapat diterima secara matematika, misalnya:
x = x + 1
• Fungsi mengkombinasikan kondisi dan rekursif. • Contoh: Lisp (List Programming), Scheme, Haskell.
JULIO - ILMU KOMPUTER IPB 13
Logic Programming
• Disebut juga Declarative Programming
• Memodelkan masalah menggunakan bahasa deklaratif, yang terdiri dari fakta dan aturan.
• Kadang disebut juga sebagai rule-based languages. • Contoh: Prolog (Programming in Logic).
JULIO - ILMU KOMPUTER IPB 14
PL History
JULIO - ILMU KOMPUTER IPB 15
Disain Bahasa Pemrograman
• Menciptakan bahasa sehingga pemrogram dapat memecahkan persoalan yang kompleks. • Kendala yang harus diperhatikan:
Architecture Technical Setting Standards
JULIO - ILMU KOMPUTER IPB 16
Disain Bahasa Pemrograman
• Architecture. Bahasa pemrograman dirancang untuk komputer: well-match atau tidak dengan arsitektur komputer yang ada.
• Technical Setting, memperhatikan sistem operasi, IDE (Integrated Development Environment), network, dan referensi lingkungan lainnya.
• Standards: ANSI (American National Standards Institute), atau ISO (International Standards Organization). Contoh: ISO Pascal (1990), ANSI/ISO C++ (2003), dsb.
JULIO - ILMU KOMPUTER IPB 17
Disain Bahasa Pemrograman
Goals:
• Simplicity and Readability, program harus mudah ditulis, dan mudah dibaca oleh programmer umumnya.
• Clarity about Binding, memiliki batasan definisi dan waktu yang jelas, misalnya reserved words, ukuran memori suatu tipe data, run time, dsb.
• Reliability, program akan melakukan hal yang sama ketika memperoleh input data yang sama.
• Support, mudah diakses, dipelajari, dan di-install oleh siapa saja.
• Efficient.
Compilers & Virtual Machines
Bahasa program dianalisis dan selanjutnya diterjemahkan ke dalam bentuk yang dapat dipahami mesin:
• Dijalankan oleh komputer – “real machine” compiling • Dijalankan oleh interpreter – software yang mensimulasikan
“virtual machine” dan menjalankan dalam “real machine” interpreting
JULIO - ILMU KOMPUTER IPB 19
Compilers
JULIO - ILMU KOMPUTER IPB Lexical analyzer Syntactic analyzer Type checker Code optimizer Code generator Computer Input Output Source program Machine code 20
Virtual Machines & Interpreters
JULIO - ILMU KOMPUTER IPB Lexical analyzer Syntactic analyzer Type checker Interpreter Computer Input Output Source program Abstract syntax 21
FUNCTIONAL PROGRAMMING
Tucker & Noonan
Chapter 14
Functional Programming
• Program serba fungsi, artinya setiap persoalan diselesaikan dengan menggunakan fungsi.
• 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). • Memodelkan masalah komputasi sebagai suatu fungsi
matematika, yang mempunyai input (domain) dan hasil atau output (range).
JULIO - ILMU KOMPUTER IPB 23
Function & Lambda Calculus
• Contoh fungsi matematika: Kuadrat(n) = n * n
• Kuadrat adalah fungsi yang memetakan suatu himpunan bilangan real R (domain) ke bilangan real R (range). Atau secara formal didefinisikan:
Kuadrat: R R
• Suatu fungsi disebut total jika terdefinisi untuk semua elemen dalam domain, dan disebut parsial untuk selainnya. • Fungsi Kuadrat adalah total karena domainnya seluruh
himpunan bilangan real.
Function & Lambda Calculus
• Dasar dari pemrograman fungsional adalah lambda calculus. • Ekspresi lambda menunjukkan parameter dan definisi dari
fungsi, BUKAN nama fungsi.
• Contoh, ekspresi lambda yang mendefinisikan fungsi Kuadrat adalah:
(x . x * x)
• Identifier x adalah parameter yang digunakan dalam fungsi (tanpa nama) x * x.
• Contoh aplikasinya: ((x . x * x)2) menjadi 4.
JULIO - ILMU KOMPUTER IPB 25
Lambda Calculus
• Setiap identifier adalah ekspresi lambda.
• Jika M dan N adalah ekspresi lambda, maka aplikasi dari M dan N, ditulis sebagai (M N), adalah ekspresi lambda. • Abstraksi, ditulis sebagai (x . M), dimana x adalah identifier
dan M adalah ekspresi lambda, juga merupakan ekspresi lambda.
• BNF grammar:
LambdaExpression variable | (M N) | ( variable . M)
M LambdaExpression
N LambdaExpression
JULIO - ILMU KOMPUTER IPB 26
Lambda Calculus
• Contoh ekspresi lambda: x
(x . x) ((x . x) (y . y)) • Aplikasi fungsi:
((x . * x x)5) = (* 5 5)
JULIO - ILMU KOMPUTER IPB 27
Scheme
• Lisp (List Programming) adalah bahasa pemrograman fungsional yang asli. Saat ini mempunyai dua varian, yaitu:
Common Lisp (Steele, 1990)
Scheme (Kelsey, 1998) – http://www.drscheme.org/ • Tidak memiliki pernyataan assignment.
• Program ditulis sebagai fungsi rekursif.
JULIO - ILMU KOMPUTER IPB 28
Scheme
Ekspresi
• Ekspresi disusun dalam notasi Cambridge-prefix. • Contoh: (+ 2 2) • Operasi aritmatika: (+) 0 (+ 5) 5 (+ 5 4 3 2 1) 15 (*) 1 (* 5) 5 (* 1 2 3 4 5) 120 • Contoh lain: (+ (* 5 4) (- 6 2)
JULIO - ILMU KOMPUTER IPB 29
Scheme
Variabel global
• Didefinisikan dengan menggunakan fungsi define. • Contoh: (define f 120) Evaluasi ekspresi f 120 (+ f 5) 125 (f) error, kenapa? 5 5 #f false #t true
Scheme
Evaluasi ekspresi
(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, kenapa?