11/18/2009
Silabus 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 Functional programming: ciri ciri, sintaks, list, dan beberapa 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 18 November 2009
JULIO ‐ ILMU KOMPUTER IPB
Pokok Bahasan 1. 2. 3. 4.
Functional Programming ` LISP Scheme LISP Scheme, Haskell Programming in Logic ` PROLOG Imperative Programming ` C, Ada, Perl Object Oriented Programming ` C++ C++, , Java Java
•
Situs materi, tugas, dan lainnya di http://web.ipb.ac.id/~julio/basprog0910/
JULIO ‐ ILMU KOMPUTER IPB
2
Buku Acuan • 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. P Pearson Education Prentice Hall. Prentice‐Hall, New Jersey. Ed ti P ti H ll P ti H ll N J
3
JULIO ‐ ILMU KOMPUTER IPB
4
Penilaian • • • •
Ujian tulis (70 – 80%) Tugas/Proyek (20 ‐ 30%) Tidak ada ujian perbaikan Tugas/Proyek diberikan saat kuliah
OVERVIEW Tucker & Noonan Chapter 1
JULIO ‐ ILMU KOMPUTER IPB
Julio Adisantoso
5
1
11/18/2009
Prinsip Bahasa Pemrograman
Prinsip Bahasa Pemrograman
• Bahasa pemrograman vs bahasa alami
• Prinsip perancangan bahasa : (1) Sintaks, (2) Nama dan Tipe, (3) Semantik.
9 Memfasilitasi komunikasi antar manusia 9 Bahasa pemrograman juga memfasilitasi komunikasi manusia dengan mesin
• Sintaks menjelaskan bagaimana struktur program yang benar. Struktur bahasa pemrograman modern didefinisikan menggunakan bahasa formal yang disebut context‐free‐ grammar.
9 Bahasa pemrograman hanya pada domain komputasional
• Nama dan Tipe menunjukkan bagaimana aturan penamaan entitas (variabel, fungsi, class, parameter, dsb).
• Perancang bahasa memiliki vocabulary dasar tentang:
• Semantik, arti dari program. Ketika program dijalankan, efek tiap instruksi didefinisikan oleh semantik dari bahasa.
9 Struktur bahasa 9 Arti JULIO ‐ ILMU KOMPUTER IPB
7
JULIO ‐ ILMU KOMPUTER IPB
8
Paradigma
Imperative Programming
• Paradigma pemrograman adalah bentuk pemecahan masalah mengikuti aliran atau “genre” tertentu dari program dan bahasa.
• Paradigma paling tua, didasari oleh model komputasi klasik “von Neumann‐Eckert”.
• Empat paradigma pemrograman pada tiga dekade terakhir:
• Program dan variabel disimpan bersama.
p p g g 9 Imperative programming
• Program terdiri dari instruksi yang membentuk perhitungan, g p p asignment, input, output, dan kontrol.
9 Object‐oriented programming
• Contoh: Cobol, Fortran, C, Ada, Perl
9 Functional programming
control
arithmetic/logic
9 Logic programming • Beberapa bahasa dirancang mendukung lebih dari satu paradigma. Contoh: C++ (imperative dan OOP), Leda (imperative, OOP, functional, logic). JULIO ‐ ILMU KOMPUTER IPB
input
program
output
variables 9
JULIO ‐ ILMU KOMPUTER IPB
10
Object‐‐oriented Programming Object
Functional Programming
• Program adalah kumpulan dari obyek yang saling berinteraksi satu sama lain.
• Memodelkan masalah komputasi sebagai suatu fungsi matematika, yang mempunyai input (domain) dan hasil atau output (range).
• Program membungkus (encapsulate) data dan fungsi atau prosedur menjadi suatu obyek (class).
• Tidak menggunakan mekanisme assignment, karena tidak dapat diterima secara matematika, misalnya:
p y p p g • Meliputi mekanisme obyek, pewarisan, dan passing parameter.
x = x + 1
• Contoh: Smalltalk, C++, Java, C#
• Fungsi mengkombinasikan kondisi dan rekursif. • Contoh: Lisp (List Programming), Scheme, Haskell.
JULIO ‐ ILMU KOMPUTER IPB
Julio Adisantoso
11
JULIO ‐ ILMU KOMPUTER IPB
12
2
11/18/2009
Logic Programming
PL History
• 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). Contoh: Prolog (Programming in Logic)
JULIO ‐ ILMU KOMPUTER IPB
13
JULIO ‐ ILMU KOMPUTER IPB
Disain Bahasa Pemrograman
Disain Bahasa Pemrograman
• Menciptakan bahasa sehingga pemrogram dapat memecahkan persoalan yang kompleks.
• Architecture. Bahasa pemrograman dirancang untuk komputer: well‐match atau tidak dengan arsitektur komputer yang ada.
• Kendala yang harus diperhatikan:
14
• Technical Setting, memperhatikan sistem operasi, IDE (Integrated Development Environment), network, dan referensi lingkungan lainnya. f i li k l i
9 Architecture 9 Technical Setting Technical Setting 9 Standards
• Standards: ANSI (American National Standards Institute), atau ISO (International Standards Organization). Contoh: ISO Pascal (1990), ANSI/ISO C++ (2003), dsb.
JULIO ‐ ILMU KOMPUTER IPB
15
JULIO ‐ ILMU KOMPUTER IPB
Disain Bahasa Pemrograman
Compilers & Virtual Machines
Goals:
Bahasa program dianalisis dan selanjutnya diterjemahkan ke dalam bentuk yang dapat dipahami mesin:
• Simplicity and Readability, program harus mudah ditulis, dan mudah dibaca oleh programmer umumnya. • Clarity about Binding, memiliki batasan definisi dan waktu y gj yang jelas, misalnya reserved words, ukuran memori suatu y tipe data, run time, dsb.
16
• Dijalankan oleh komputer – “real machine” Æ compiling • Dijalankan oleh interpreter – software yang mensimulasikan j “virtual machine” dan menjalankan dalam “real machine” Æ interpreting
• Reliability, program akan melakukan hal yang sama ketika memperoleh input data yang sama. • Support, mudah diakses, dipelajari, dan di‐install oleh siapa saja. • Efficient. JULIO ‐ ILMU KOMPUTER IPB
Julio Adisantoso
17
JULIO ‐ ILMU KOMPUTER IPB
18
3
11/18/2009
Compilers
Virtual Machines & Interpreters Source program
Source program
Lexical analyzer
Syntactic analyzer
Type checker
Code optimizer
Code generator
Lexical analyzer
Syntactic analyzer
Machine code Input
Abstract syntax
Type checker
Interpreter
Input
Computer
Computer
Output Output JULIO ‐ ILMU KOMPUTER IPB
19
JULIO ‐ ILMU KOMPUTER IPB
20
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.
FUNCTIONAL PROGRAMMING
• Bahasa fungsional pertama adalah Lisp (McCarthy, 1960).
Tucker & Noonan Chapter 14
• Memodelkan masalah komputasi sebagai suatu fungsi matematika, yang mempunyai input (domain) dan hasil atau output (range).
JULIO ‐ ILMU KOMPUTER IPB
Function & Lambda Calculus
22
Function & Lambda Calculus
• Contoh fungsi matematika:
• Dasar dari pemrograman fungsional adalah lambda calculus.
Kuadrat(n) = n * n
• Ekspresi lambda menunjukkan parameter dan definisi dari fungsi, BUKAN nama fungsi.
• Kuadrat adalah fungsi yang memetakan suatu himpunan bilangan real R (domain) ke bilangan real R (range). Atau secara formal didefinisikan: secara formal didefinisikan:
• Contoh, ekspresi lambda yang mendefinisikan fungsi Kuadrat adalah:
Kuadrat: R Æ R
(λx . x * x)
• Suatu fungsi disebut total jika terdefinisi untuk semua elemen dalam domain, dan disebut parsial untuk selainnya.
• Identifier x adalah parameter yang digunakan dalam fungsi (tanpa nama) x * x.
• Fungsi Kuadrat adalah total karena domainnya seluruh himpunan bilangan real.
• Contoh aplikasinya: ((λx . x * x)2) menjadi 4.
JULIO ‐ ILMU KOMPUTER IPB
Julio Adisantoso
23
JULIO ‐ ILMU KOMPUTER IPB
24
4
11/18/2009
Lambda Calculus
Lambda Calculus
• Setiap identifier adalah ekspresi lambda.
• Contoh ekspresi lambda:
• Jika M dan N adalah ekspresi lambda, maka aplikasi dari M dan N, ditulis sebagai (M N), adalah ekspresi lambda.
x
• Abstraksi, ditulis sebagai (λx . M), dimana x adalah identifier dan M adalah ekspresi lambda juga merupakan ekspresi dan M adalah ekspresi lambda, juga merupakan ekspresi lambda.
((λx . x) (λy . y))
(λx . x) • Aplikasi fungsi: ((λx . * x x)5) = (* 5 5)
• BNF grammar: LambdaExpression Æ variable | (M N) | (λ variable . M) M
Æ LambdaExpression
N
Æ LambdaExpression JULIO ‐ ILMU KOMPUTER IPB
25
Scheme
JULIO ‐ ILMU KOMPUTER IPB
26
Scheme Ekspresi
• Lisp (List Programming) adalah bahasa pemrograman fungsional yang asli. Saat ini mempunyai dua varian, yaitu:
• Ekspresi disusun dalam notasi Cambridge‐prefix. • Contoh:
9 Common Lisp (Steele, 1990)
(+ 2 2)
9 Scheme (Kelsey, 1998) – http://www.drscheme.org/
• Operasi Operasi aritmatika: aritmatika: (+) 0 (+ 5) 5 (+ 5 4 3 2 1) 15 (*) 1 (* 5) 5 (* 1 2 3 4 5) 120
• Tidak memiliki pernyataan assignment. Tid k iliki i • Program ditulis sebagai fungsi rekursif.
• Contoh lain: (+ (* 5 4) (‐ 6 2) JULIO ‐ ILMU KOMPUTER IPB
27
JULIO ‐ ILMU KOMPUTER IPB
Scheme
Scheme
Variabel global
Evaluasi ekspresi (define warna (quote (merah kuning hijau))) (define warna '(merah kuning hijau))
• Didefinisikan dengan menggunakan fungsi define. • Contoh:
(define x f) (define x ' f) (define warna ' merah) (define warna merah)
(define f 120) Evaluasi ekspresi Evaluasi ekspresi f (+ f 5) (f) 5 #f #t
120 125 error, kenapa? 5 false true JULIO ‐ ILMU KOMPUTER IPB
Julio Adisantoso
29
28
120 x berisi simbol f error, kenapa?
JULIO ‐ ILMU KOMPUTER IPB
30
5