PENDAHULUAN
PENDAHULUAN
Bahasa Pemrograman
Kuliah #1
18 November 2009
Silabus
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 sintaks list dan beberapa 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
Pokok
Pokok Bahasan
Bahasan
1. Functional Programming ` LISP SchemeLISP Scheme, Haskell
2. Programming in Logic ` PROLOGPROLOG
3. Imperative Programming ` C, Ada, PerlPerl
4. Object Oriented Programming ` C++C++, , JavaJava
• Situs materi, tugas, dan lainnya di http://web.ipb.ac.id/~julio/basprog0910/
JULIO ‐ ILMU KOMPUTER IPB 3
Buku
Buku Acuan
Acuan
• Programming Languages: Principles and Paradigms. 2nd Ed. Allen B. Tucker & Robert E. Noonan. • C: How to Program. 3rdEd. Deitel, H. M. & P. J. Deitel. Pearson Education Prentice Hall. Prentice‐Hall, New Jersey. • Java: How to Program. 3rdEd. Deitel, H. M. & P. J. Deitel. P Ed ti P ti H ll P ti H ll N J Pearson Education Prentice Hall. Prentice‐Hall, New Jersey. JULIO ‐ ILMU KOMPUTER IPB 4
Penilaian
Penilaian
• Ujian tulis (70 – 80%) • Tugas/Proyek (20 ‐ 30%) • Tidak ada ujian perbaikan • Tugas/Proyek diberikan saat kuliah JULIO ‐ ILMU KOMPUTER IPB 5OVERVIEW
OVERVIEW
Tucker & Noonan
Chapter 1
Prinsip Bahasa Pemrograman
Prinsip Bahasa Pemrograman
• Bahasa pemrograman vs bahasa alami 9 Memfasilitasi komunikasi antar manusia 9 Bahasa pemrograman juga memfasilitasi komunikasi manusia dengan mesin 9 Bahasa pemrograman hanya pada domain komputasional • Perancang bahasa memiliki vocabulary dasar tentang: 9 Struktur bahasa 9 Arti JULIO ‐ ILMU KOMPUTER IPB 7Prinsip Bahasa Pemrograman
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 8Paradigma
Paradigma
• Paradigma pemrograman adalah bentuk pemecahan masalah mengikuti aliran atau “genre” tertentu dari program dan bahasa. • Empat paradigma pemrograman pada tiga dekade terakhir: 9 Imperative programmingp p g g 9 Object‐oriented programming 9 Functional programming 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 9Imperative Programming
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.g p p • Contoh: Cobol, Fortran, C, Ada, Perl JULIO ‐ ILMU KOMPUTER IPB input output control arithmetic/logic program variables 10Object
Object‐‐oriented Programming
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 p y p p g parameter. • Contoh: Smalltalk, C++, Java, C# JULIO ‐ ILMU KOMPUTER IPB 11Functional Programming
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 12Logic Programming
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)• Contoh: Prolog (Programming in Logic). JULIO ‐ ILMU KOMPUTER IPB 13
PL History
PL History
JULIO ‐ ILMU KOMPUTER IPB 14Disain Bahasa Pemrograman
Disain Bahasa Pemrograman
• Menciptakan bahasa sehingga pemrogram dapat memecahkan persoalan yang kompleks. • Kendala yang harus diperhatikan: 9 Architecture 9 Technical Setting 9 Technical Setting 9 Standards JULIO ‐ ILMU KOMPUTER IPB 15Disain Bahasa Pemrograman
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 f i li k l i 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 16Disain Bahasa Pemrograman
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 y g j y 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. JULIO ‐ ILMU KOMPUTER IPB 17Compilers & Virtual Machines
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” Æj interpreting
Compilers
Compilers
Lexical analyzer Syntactic analyzer Type checker Code optimizer Code generator Source program JULIO ‐ ILMU KOMPUTER IPB Computer Input Output Machine code 19Virtual Machines & Interpreters
Virtual Machines & Interpreters
Lexical analyzer Syntactic analyzer Type checker Interpreter Source program Abstract syntax JULIO ‐ ILMU KOMPUTER IPB Computer Input Output 20FUNCTIONAL PROGRAMMING
FUNCTIONAL PROGRAMMING
Tucker & Noonan
Chapter 14
Functional Programming
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 22Function & Lambda Calculus
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: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. JULIO ‐ ILMU KOMPUTER IPB 23
Function & Lambda Calculus
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: 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 24Lambda Calculus
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 identifierdan M adalah ekspresi lambda juga merupakan ekspresi 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 25