01/31/2013
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.
PENDAHULUAN Bahasa Pemrograman Kuliah #1
JULIO - ILMU KOMPUTER IPB
Kontrak Kuliah
Kontrak Kuliah
Tujuan Setelah mengikuti matakuliah ini, mahasiswa diharapkan mampu memecahkan masalah yang berbeda dengan menggunakan bahasa pemrograman yang sesuai
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 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
Kontrak Kuliah
2
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
3
JULIO - ILMU KOMPUTER IPB
4
Kontrak Kuliah
Tata Tertib Mahasiswa
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:
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.
– 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.
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. JULIO - ILMU KOMPUTER IPB
Julio Adisantoso
5
JULIO - ILMU KOMPUTER IPB
6
1
01/31/2013
Prinsip Bahasa Pemrograman • Bahasa pemrograman vs bahasa alami Memfasilitasi komunikasi antar manusia Bahasa pemrograman juga memfasilitasi komunikasi manusia dengan mesin
OVERVIEW
Bahasa pemrograman hanya pada domain komputasional
Tucker & Noonan Chapter 1
• Perancang bahasa memiliki vocabulary dasar tentang: Struktur bahasa Arti JULIO - ILMU KOMPUTER IPB
Prinsip Bahasa Pemrograman
Paradigma
• Prinsip perancangan bahasa : (1) Sintaks, (2) Nama dan Tipe, (3) Semantik.
• Paradigma pemrograman adalah bentuk pemecahan masalah mengikuti aliran atau “genre” tertentu dari program dan bahasa.
• Sintaks menjelaskan bagaimana struktur program yang benar. Struktur bahasa pemrograman modern didefinisikan menggunakan bahasa formal yang disebut context-freegrammar.
• Empat paradigma pemrograman pada tiga dekade terakhir: Imperative programming Object-oriented programming
• Nama dan Tipe menunjukkan bagaimana aturan penamaan entitas (variabel, fungsi, class, parameter, dsb).
Functional programming Logic programming
• Semantik, arti dari program. Ketika program dijalankan, efek tiap instruksi didefinisikan oleh semantik dari bahasa.
JULIO - ILMU KOMPUTER IPB
• Beberapa bahasa dirancang mendukung lebih dari satu paradigma. Contoh: C++ (imperative dan OOP), Leda (imperative, OOP, functional, logic). 9
Imperative Programming
JULIO - ILMU KOMPUTER IPB
• Program adalah kumpulan dari obyek yang saling berinteraksi satu sama lain.
• Program dan variabel disimpan bersama.
• Program membungkus (encapsulate) data dan fungsi atau prosedur menjadi suatu obyek (class).
• Program terdiri dari instruksi yang membentuk perhitungan, asignment, input, output, dan kontrol.
• Meliputi mekanisme obyek, pewarisan, dan passing parameter.
• Contoh: Cobol, Fortran, C, Ada, Perl
input
• Contoh: Smalltalk, C++, Java, C#
arithmetic/logic program
10
Object-oriented Programming
• Paradigma paling tua, didasari oleh model komputasi klasik “von Neumann-Eckert”.
control
8
output
variables JULIO - ILMU KOMPUTER IPB
Julio Adisantoso
11
JULIO - ILMU KOMPUTER IPB
12
2
01/31/2013
Functional Programming
Logic Programming
• Memodelkan masalah komputasi sebagai suatu fungsi matematika, yang mempunyai input (domain) dan hasil atau output (range).
• Disebut juga Declarative Programming
• Tidak menggunakan mekanisme assignment, karena tidak dapat diterima secara matematika, misalnya:
• Kadang disebut juga sebagai rule-based languages.
• Memodelkan masalah menggunakan bahasa deklaratif, yang terdiri dari fakta dan aturan. • Contoh: Prolog (Programming in Logic).
x = x + 1 • Fungsi mengkombinasikan kondisi dan rekursif. • Contoh: Lisp (List Programming), Scheme, Haskell.
JULIO - ILMU KOMPUTER IPB
13
PL History
JULIO - ILMU KOMPUTER IPB
14
Disain Bahasa Pemrograman • Menciptakan bahasa sehingga pemrogram dapat memecahkan persoalan yang kompleks. • Kendala yang harus diperhatikan: Architecture Technical Setting Standards
JULIO - ILMU KOMPUTER IPB
JULIO - ILMU KOMPUTER IPB
15
Disain Bahasa Pemrograman
16
Disain Bahasa Pemrograman
• Architecture. Bahasa pemrograman dirancang untuk komputer: well-match atau tidak dengan arsitektur komputer yang ada.
Goals:
• Technical Setting, memperhatikan sistem operasi, IDE (Integrated Development Environment), network, dan referensi lingkungan lainnya.
• Clarity about Binding, memiliki batasan definisi dan waktu yang jelas, misalnya reserved words, ukuran memori suatu tipe data, run time, dsb.
• Standards: ANSI (American National Standards Institute), atau ISO (International Standards Organization). Contoh: ISO Pascal (1990), ANSI/ISO C++ (2003), dsb.
• Reliability, program akan melakukan hal yang sama ketika memperoleh input data yang sama.
• Simplicity and Readability, program harus mudah ditulis, dan mudah dibaca oleh programmer umumnya.
• Support, mudah diakses, dipelajari, dan di-install oleh siapa saja. • Efficient.
JULIO - ILMU KOMPUTER IPB
Julio Adisantoso
17
JULIO - ILMU KOMPUTER IPB
18
3
01/31/2013
Compilers & Virtual Machines
Compilers
Bahasa program dianalisis dan selanjutnya diterjemahkan ke dalam bentuk yang dapat dipahami mesin:
Source program
• Dijalankan oleh komputer – “real machine” compiling Lexical analyzer
• Dijalankan oleh interpreter – software yang mensimulasikan “virtual machine” dan menjalankan dalam “real machine” interpreting
Syntactic analyzer
Type checker
Code optimizer
Code generator Machine code
Input
Computer
Output JULIO - ILMU KOMPUTER IPB
19
JULIO - ILMU KOMPUTER IPB
20
Virtual Machines & Interpreters Source program
Lexical analyzer
Syntactic analyzer
Abstract syntax
Type checker
FUNCTIONAL PROGRAMMING
Interpreter
Input
Tucker & Noonan Chapter 14
Computer
Output
JULIO - ILMU KOMPUTER IPB
21
Functional Programming
Function & Lambda Calculus
• Program serba fungsi, artinya setiap persoalan diselesaikan dengan menggunakan fungsi.
• Contoh fungsi matematika:
• Mulai dikembangkan tahun 1960an, dimotivasi oleh peneliti bidang artificial intelligence, symbolic computation, theorem proving, rule-based system, dan NLP.
• Kuadrat adalah fungsi yang memetakan suatu himpunan bilangan real R (domain) ke bilangan real R (range). Atau secara formal didefinisikan:
Kuadrat(n) = n * n
• Bahasa fungsional pertama adalah Lisp (McCarthy, 1960).
Kuadrat: R R
• Memodelkan masalah komputasi sebagai suatu fungsi matematika, yang mempunyai input (domain) dan hasil atau output (range).
JULIO - ILMU KOMPUTER IPB
Julio Adisantoso
• 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. 23
JULIO - ILMU KOMPUTER IPB
24
4
01/31/2013
Function & Lambda Calculus
Lambda Calculus
• Dasar dari pemrograman fungsional adalah lambda calculus.
• Setiap identifier adalah ekspresi lambda.
• Ekspresi lambda menunjukkan parameter dan definisi dari fungsi, BUKAN nama fungsi.
• Jika M dan N adalah ekspresi lambda, maka aplikasi dari M dan N, ditulis sebagai (M N), adalah ekspresi lambda.
• Contoh, ekspresi lambda yang mendefinisikan fungsi Kuadrat adalah:
• Abstraksi, ditulis sebagai (x . M), dimana x adalah identifier dan M adalah ekspresi lambda, juga merupakan ekspresi lambda.
(x . x * x)
• BNF grammar:
• Identifier x adalah parameter yang digunakan dalam fungsi (tanpa nama) x * x.
LambdaExpression variable | (M N) | ( variable . M)
• Contoh aplikasinya: ((x . x * x)2)
M
LambdaExpression
N
LambdaExpression
menjadi 4. JULIO - ILMU KOMPUTER IPB
25
Lambda Calculus
JULIO - ILMU KOMPUTER IPB
26
Scheme
• Contoh ekspresi lambda:
• Lisp (List Programming) adalah bahasa pemrograman fungsional yang asli. Saat ini mempunyai dua varian, yaitu:
x
Common Lisp (Steele, 1990)
(x . x)
Scheme (Kelsey, 1998) – http://www.drscheme.org/
((x . x) (y . y))
• Tidak memiliki pernyataan assignment.
• Aplikasi fungsi:
• Program ditulis sebagai fungsi rekursif.
((x . * x x)5) = (* 5 5)
JULIO - ILMU KOMPUTER IPB
27
Scheme
JULIO - ILMU KOMPUTER IPB
28
Scheme
Ekspresi
Variabel global
• Ekspresi disusun dalam notasi Cambridge-prefix.
• Didefinisikan dengan menggunakan fungsi define.
• Contoh:
• Contoh: (define f 120)
(+ 2 2)
Evaluasi ekspresi f (+ f 5) (f) 5 #f #t
• Operasi aritmatika: (+) 0 (+ 5) 5 (+ 5 4 3 2 1) 15 (*) 1 (* 5) 5 (* 1 2 3 4 5) 120
120 125 error, kenapa? 5 false true
• Contoh lain: (+ (* 5 4) (- 6 2) JULIO - ILMU KOMPUTER IPB
Julio Adisantoso
29
JULIO - ILMU KOMPUTER IPB
30
5
01/31/2013
Scheme Evaluasi ekspresi (define warna (quote (merah kuning hijau))) (define warna '(merah kuning hijau)) (define x f) (define x ' f) (define warna ' merah) (define warna merah)
120 x berisi simbol f error, kenapa?
JULIO - ILMU KOMPUTER IPB
Julio Adisantoso
31
6