Paradigma bahasa pemrograman

PARADIGMA PEMROGRAMAN

A. Sejarah Singkat Bahasa Pemrograman
Menurut catatan sejarah komputer, bahasa pemrograman dikenal pertama kali sejak penemuan komputer digital pada tahun 1940-an. Bahasa pemrograman mulai berkembang dan dikembangkan sejak tahun 1950-an dengan dimulainya bahasa assembly yang mengiringi berkembangnya komputer untuk keperluan komersial. Bahasa komputer yang pertama kali adalah FORTRAN yang merupakan singkatan dari Formula Translation. Bahasa ini dibuat oleh John Bacus pada awal 1950-an hingga awal 1960-an. Bahasa ini bermanfaat dalam dunia perbankan dan pencatatan keuangan atau akuntansi.
Setelah itu bahasa pemrograman mulai beragam dalam segi jumlah maupun fungsinya. Bahasa yang dikembangkan di era tersebut misalnya dalah COBOL yang merupakan singkatan dari Common Bussiness Oriented Languange oleh Grace Hopper dan LISP yang merupakan singkatan dari List Processing yang dibuat oleh John McCarthy. Lalu kemudian bahasa-bahasa pemrograman berkembang semakin pesat dan muncul bahasa pemrograman tingkat tinggi yang lebih multifungsi seperti C, C++, BASIC, PASCAL dan ADA. Dari berbagai bahasa pemrograman tersebut, bahasa C adalah yang paling populer dan memiliki turunan yang digunakan untuk kepentingan lain seperti PHP untuk Web dan Java untuk multiplatform application.

B.  Paradigma Bahasa Pemrograman

Paradigma pemrograman  suatu sudut pandang dalam dunia pemrograman dan menjadi suatu pendekatan khusus dalam memecahkan suatu persoalan dalam menyelesaian masalah pemrograman. Ada banyak cara untuk menyelesaikan masalah mengikuti aliran atau “genre” tertentu dari program dan bahasa. Empat paradigma pemrograman yang sangat mendasar yaitu:
1. Imperative  Programming
Paradigma ini didasari oleh konsep mesin Von Newman (stored program concept) sekelompok tempat penyimpanan (memori), yang dibedakan menjadi memori instruksi dan memori data, masing-masing memori tersebut dapat diberi nama dan dinilai, selanjutnya instruksi akan dieksekusi satu persatu secara sekuensial oleh sebuah proses tunggal.
Program dalam paradigma ini berdasarkan pada struktur informasi di dalam memori dan manipulasi dari informasi yang disimpan tersebut. Kata kunci yang digunakan dalam paradigma ini adalah:
           Algoritma + struktur data = program
Kelebihan dari paradigma ini adalah efisiensi karena lebih dekat dengan konsep mesin, kekurangan adalah batasan yang sangat mengikat sehingga terkadang menyulitkan programmer yang tidak terbiasa. Contoh bahasa pemrograman yang menggunakan paradigma imperative atau procedural adalah: Algol, Pascal, Fotran, Basic, Cobol, C, Ada dan Perl.
Pemrograman Imperatif mempunyai karakteristik berupa status dan instruksi/perintah untuk mengubah status program. Status diwakili oleh variabel sedangkan instruksi diwakili oleh statement. Ciri-ciri pemrograman imperatif yaitu :
a.  Adanya instruksi/command/perintah/kalimat-kalimat perintah
     contoh : GOTO 10
b.  Adanya status yang berubah
contoh : dengan adanya perintah GOTO 10 maka status program akan loncat mengerjakan   statement yang ada di line number 10

Variabel dan Penugasan
      Variabel adalah identifier/pengenal yang berisi data yang dapat berubah-ubah nilainya di dalam program. Penugasan(Assignment) adalah suatu aksi yang menyebabkan peletakan atau pemberian suatu nilai di suatu lokasi atau variabel

Contoh :
A = 3 (statement penugasan pada bahasa BASIC)
A := 3 (statement penugasan pada bahasa PASCAL)

            Statement/Perintah Tidak Terstruktur
Statement/perintah tidak terstruktur merupakan statement yang berisi perintah untuk mengerjakan statement tertentu yang diidentifikasi dengan suatu label, baik menggunakan statement GOTO bersyarat maupun tanpa syarat. Salah satu program yang mengandung perintah tidak terstruktur  adalah bahasa BASIC.

Contoh program:
 10 LET A = 5
20 LET B = A + 1
30 GOTO 50
40 LET B = A * 2
50 PRINT B
60 END

2. Functional Programming

Functional programming disebut-sebut sebagai paradigma pemrograman para hipster (yang mainstream saat ini adalah imperative programming dan OOP), karena baru naik beberapa tahun belakangan semenjak banyak startup di Silicon Valley beralih menggunakan bahasa-bahasa pemrograman yang menganut paradigma ini. Sebenarnya functional programming ini bukanlah sesuatu yang baru, karena akar dari functional programming itu adalah Lambda Calculus yang sudah ada dari tahun 1930. Bahasa pemrograman yang sudah mulai menganut paradigma ini pun sudah ada dari tahun 1950, yaitu Lisp yang dikembangkan oleh John McCarthy.
Functional programming sekarang ini mulai populer kembali karena kebutuhan yang tinggi akan high-reliable dan high-performance application. Selain itu konsep functional programming juga menjanjikan suatu product aplikasi yang terbebas dari banyaknya bug. Kita bisa mengaplikasikan functional programming dengan untuk pemrograman sehari-hari yang bertujuan membuat aplikasi kita lebih reliable.
Paradigma programming fungtional melakukan komputasi sebagai evaluasi dari mathematical functions dan menghindari keadaan (state) dan perubahan (mutable) data. Penekanan aplikasi dari functions, sangat kontras dengan gaya imperative programming, yang menekannkan perubahan keadaan (state)
        Bahasa Pemrograman fungsional sering disebut aplikatif. Program yang terdiri dari teori fungsi matematika atau algoritmik Pemrograman Fungsional itu sendiri adalah suatu program yang setiap persoalan diselesaikan dengan menggunakan sebuah fungsi matematika. Dengan cara menggambarkan sebuah kasus dengan suatu fungsi matematika dan memberikan input atau domain lalu mengeluarkan hasil atau output yang disebut range.
        Functional programming ini memiliki cara kerja atau proses kerja dengan fungsi kelas  satu , dimana fungsi yang di susun pada sebuah program tersebut dapat dikirm sebagai sebuah argumen untuk fungsi yang lainnya.
    Pemrograman Fungsional berdasarkan konsep matematika dari sebuah fungsi meliputi:
Suatu set fungsi primitif
Suatu set format fungsional
Aplikasi operasi

Operator
Sebuah simbol untuk pengoperasian suatu fungsi, Jenis Operator yang masih sama dengan prosedural paradigma:
Aritmatika (+,-,/,*)
Logika (and.or,not,xor)
Boolean
Untai
Himpunan
Relasi
Functional programming paradigma sangat bergantung pada immutable data structure sehingga dapat memberi keuntungan tersendiri, seperti kemudahan saat melakukan unit testing karena output-nya akan selalu sama dengan yang diharapkan tanpa ada perubahan data. Kode yang kita tulis pun akan lebih mudah terbaca, karena functional programming sangat fokus kepada hal apa yang ingin diselesaikan, tidak seperti imperative programming yang lebih menekankan bagaimana cara menyelesaikannya.
Functional programming pada dasarnya dapat diterapkan ke bahasa pemrograman apa pun, hanya saja ada beberapa fitur yang tidak tersedia atau fitur yang tidak optimal. Berbeda jika kita memang coding menggunakan bahasa pemrograman yang dirancang untuk paradigma functional programming.
   Pemrograman Fungsional dikenal mampu menyediakan dukungan yang lebih baik untuk pemrograman yang terstruktur dari pada pemrograman imperatif. Contoh  pemrograman  fungsional   yakni   LISP, Scheme, Haskell, ML, APL dan LOGO.
Contoh program:

LISP merupakan sebuah bahasa ekspresi, awal nya di rancang untuk memproses List dengan  memanipulasi   symbol.   Di mulai   pertama   Implementasi LISP, digunakan untuk mendefinisikan dirinya sendiri.
Mulanya LISP adalah bahasa yang sangat kecil dan sederhana, yaitu:
- Fungsi untuk membentuk dan mengakses list
- Mendefinisikan fungsi baru
- Mendeteksi kesamaan
- Evaluasi ekspresi
- Kendali Program: Rekursi dan Kondisi tunggal
LISP merupakan bahasa yang memiliki fitur unik. Bahasa LISP menjadi media yang menyenangkan untuk dipelajari yang berupa bentukan-bentukan pemrograman dan struktur data serta dapat menghubungkan ke fitur-fitur bahasa yang mendukungnya.
Selain itu, adanya penambahan pada LISP yaitu :
- Fungsi untuk penstrukturan data
- Kendali program
- Aritmatika real dan integer
- I/O
- Penyuntingan fungsi LISP
- Penelusuran eksekusi program.

Ekspresi Fungsional
adalah sebuah teks yang terdiri dari nama simbol, operator/fungsi, ( ), yang dapat menghasilkan nilai hasil dari evaluasi ekspresi. Hasilnya dapat berupa nilai numerik atau Boolean.

Ekspresi Rekursif
disebut rekursif jika definisi tersebut mengandung terminologi dirinya sendiri. Ekspresi rekursif direalisasikan dengan membuat fungsi rekursif dan didasari analisis rekurens.

Mendefinisikan Type
Struktur dan nama type
Atom adalah angka atau seutu karakter yang pada penulisannya di awali dengan sebuah tanda ' (quote)
List adalah kumpulan dari atom atau list
Selektor
Untuk menentukan komponen-komponen type
Konstruktor
Untuk menentukan type
Predikat
Untuk menentukan karekteristik dan pemeriksaan besaran

3.  Object Oriented Programming
Konsep OOP bermula pada era 1960-an. Sebuah bahasa pemrograman Simula memperkenalkan berbagai konsep yang mendasari OOP dengan SIMULA I (1962-65) dan Simula 67 (1967). Kemudian pada tahun 70-an, bahasa pemrograman Smalltalk menjadi yang pertama kali disebut object-oriented.
Pada tahun 1980-an, dua bahasa pemrograman ADA (US Department of Defense) dan PROLOG (the Japanese “Fifth Generation Computer Project”) dipercayai akan bersaing ketat sebagai bahasa pemrograman yang paling dominan. Namun justru OOP yang menjadi paradigma pemrograman yang paling dominan sampai sekarang. Bahasa pemrograman yang object-oriented seperti C++ pada tahun 80-an menjadi populer. Pada tahun 90-an, bahasa-bahasa pemrograman seperti Java mulai menerapkan OOP. Sampai pada 2002, Microsoft Visual Studio memperkenalkan bahasa object-oriented baru yang diberi nama C#. Disusul VB.NET yang merupakan penyempurnaan Visual Basic 6.0 yang tidak mendukung OOP.  Contoh Pemrograman yang berbasis Paradigma Objek Oriented adalah Visual Foxpro, Delphi, Java, C#, C++, Pascal, VB.Net, Smalltalk, Simula, Ruby, Python, Eifel dan PHP.

Mengapa menggunakan OOP?
Programming tipe ini bekerja dengan baik untuk program kecil yang berisi code relative sedikit, tetapi pada saat program menjadi besar, mereka cenderung susah untuk di-manage dan di-debug. Dalam usaha untuk me-manage program, struktur programming diperkenalkan cara untuk mem-break down code-code tersebut melalui  functions dan procedures.
Ini adalah sebuah langkah perbaikan, namun pada saat program dijalankan dalam sebuah fungsi bisnis yang kompleks dan berinteraksi dengan sistem lain, maka kelemahan dari struktur metodologi programming muncul kepermukaan meliputi program menjadi lebih susah untuk dimaintain. Fungsi yang tersedia, susah untuk diubah tanpa harus mempengaruhi fungsi sistem secara keseluruhan.Programming tidak baik untuk team development. Programmers harus mengetahui setiap aspek bagaimana program itu bekerja dan tidak menyebabkan terisolasi usaha mereka atas aspek yang lain dari sistem.
Butuh usaha yang keras untuk menterjemahkan Business Models dalam programming models. Mungkin dapat bekerja dengan baik pada saat terisolasi tapi tidak pada saat terintegrasi dengan sistem lain.
    Pengertian OOP (Object Oriented Programming)
OOP (Object Oriented Programming) adalah suatu metode pemrograman yang berorientasi kepada objek. Tujuan dari OOP diciptakan adalah untuk mempermudah pengembangan program dengan cara mengikuti model yang telah ada di kehidupan sehari-hari. Jadi setiap bagian dari suatu permasalahan adalah objek, objek itu sendiri merupakan gabungan dari beberapa objek yang lebih kecil lagi.  Begitu juga dengan program, sebuah objek yang besar dibentuk dari beberapa objek yang lebih kecil, objek-objek itu saling berkomunikasi, dan saling berkirim pesan kepada objek yang lain.
    Konsep OOP (Object Oriented Programming)
         Kelas Abstrak (Class Abstraksi)
Kelas merupakan deskripsi abstrak informasi dan tingkah laku dari sekumpulan data.
Kelas dapat diilustrasikan sebagai suatu cetak biru(blueprint) atau prototipe yang digunakan untuk menciptakan objek.
Kelas merupakan tipe data bagi objek yang mengenkapsulasi data dan operasi pada data dalam suatu unit tunggal.
Kelas mendefinisikan suatu struktur yang terdiri atas data kelas (data field), prosedur atau fungsi (method), dan sifat kelas (property).
Enkapsulasi (encapsulation)
Istilah enkapsulasi sebenarnya adalah kombinasi data dan fungsionalitas dalam sebuah unit tunggal sebagai bentuk untuk menyembunyikan detail informasi.
Proses enkapsulasi memudahkan kita untuk menggunakan sebuah objek dari suatu kelas karena kita tidak perlu mengetahui segala hal secara rinci.
Enkapsulasi menekankan pada antarmuka suatu kelas, atau dengan kata lain bagaimana menggunakan objek kelas tertentu.
Contoh: kelas mobil menyediakan antarmuka fungsi untuk menjalankan mobil tersebut, tanpa kita perlu tahu komposisi bahan bakar, udara dan kalor yang diperlukan untuk proses tersebut.
Pewarisan (Inheritance)
Kita dapat mendefinisikan suatu kelas baru dengan mewarisi sifat dari kelas lain yang sudah ada.
Penurunan sifat ini bisa dilakukan secara bertingkattingkat, sehingga semakin ke bawah kelas tersebut menjadi semakin spesifik.
Sub kelas memungkinkan kita untuk melakukan spesifikasi detail dan perilaku khusus dari kelas supernya.
Dengan konsep pewarisan, seorang programmer dapat menggunakan kode yang telah ditulisnya pada kelas super berulang kali pada kelas-kelas turunannya tanpa harus menulis ulang semua kodekode itu.
Polimorfisme (polymorphism)
Polimorfisme merupakan kemampuan objekobjek yang berbeda kelas namun terkait dalam pewarisan untuk merespon secara berbeda terhadap suatu pesan yang sama.
Polimorfisme juga dapat dikatakan kemampuan sebuah objek untuk memutuskan method mana yang akan diterapkan padanya, tergantung letak objek tersebut pada jenjang pewarisan.
Method overriding.
Method name overloading.
 Karakteristik OOP (Object Oriented Programming)
Semua adalah objek.
Komputasi dilakukan dengan komunikasi antar objek. Setiap objek berkomunikasi dengan objek yang lain melalui pengiriman dan penerimaan pesan.
Sebuah pesan merupakan permintaan atas sekumpulan aksi dengan semua argumen yang diperlukan untuk menyelesaikan suatu tugas tertentu.
Setiap objek memiliki memori sendiri, yang dapat terdiri dari objek-objek lainnya.
Setiap objek adalah wakil atau representasi dari suatu kelas. Sebuah kelas dapat mewakili sekelompok objek yang sama.
Kelas merupakan kumpulan tingkah laku yang berkaitan dengan suatu objek. Jadi, semua objek yang merupakan wakil dari kelas yang sama dapat melakukan aksi yang sama pula.
Kelas-kelas diorganisasikan ke dalam struktur pohon yang berakar tunggal, yang dinamakan dengan jenjang pewarisan (inheritance hierarchy).
Setiap objek pada umumnya memiliki tiga sifat, yaitu keadaan, operasi dan identitas objek.
Operasi merupakan tindakan yang dapat dilakukan oleh sebuah objek.
Keadaan objek merupakan koleksi dari seluruh informasi yang dimiliki oleh objek pada suatu saat.
Informasi yang terkandung pada objek tersebut pada akhirnya memberikan identitas khusus yang membedakan suatu objek dengan objek lainnya.


Contoh Program:
class Kendaraan{
int posisi1;
int kecepatan;
int posisi2;
int pergerakan;
int getPosisi1(){
return posisi1;
}
void setPosisi1(int theposisi1){
posisi1 = theposisi1;
}
int getKecepatan(){
return kecepatan;
}
void setKecepatan(int thekecepatan){
kecepatan = thekecepatan;
}
posisi2 bergerak(){
int jarak;
int waktu;
posisi2 = getKecepatan * waktu;
}
}
class Mobil extends Kendaraan{
}
class KendaraanTestDrive{
Mobil avanza = new Mobil;
avanza.setPosisi1(30);
avanza.setKecepatan(45);
avanza.bergerak();
}

4. Logic Programming
Pemrograman Logika dalam arti pertama dan lebih luas menimbulkan beberapa implementasi, seperti yang oleh Fischer Black (1964), James Slagle (1965) dan Cordell Green (1969), yang pertanyaan-menjawab sistem dalam semangat nasihat McCarthy -taker. Foster dan Absys Elcock’s (1969), di sisi lain, mungkin bahasa pertama yang secara eksplisit dikembangkan sebagai bahasa pemrograman assertional.
Logika pemrograman, dalam arti luas, penggunaan logika matematika untuk pemrograman komputer. Dalam pandangan pemrograman logika, yang dapat ditelusuri setidaknya sejauh [1958] proposal saran-taker John McCarthy, logika digunakan sebagai bahasa representasi murni deklaratif, dan teorema-prover atau model-generator digunakan sebagai pemecah masalah. Tugas pemecahan masalah dibagi antara programmer, yang bertanggung jawab hanya untuk memastikan kebenaran program dinyatakan dalam bentuk logis, dan teorema-prover atau model-generator, yang bertanggung jawab untuk memecahkan masalah efisien.
Namun, logika pemrograman, dalam arti sempit yang lebih umum dipahami, adalah penggunaan logika baik sebagai bahasa representasi deklaratif dan prosedural. Hal ini didasarkan pada kenyataan bahwa penalaran mundur teorema-prover diterapkan pada kalimat deklaratif dalam bentuk implikasi. Contoh bahasa pemrograman kelompok ini adalah Prolog (Programming in Logic)

 Contoh program:
 Jika B1 dan … dan Bn kemudian H
memperlakukan implikasi sebagai prosedur tujuan-pengurangan:
untuk menunjukkan / memecahkan H, menampilkan / memecahkan B1 dan … dan Bn.
Misalnya, memperlakukan implikasinya:
Jika Anda menekan tombol sinyal alarm,
maka Anda waspada pengemudi kereta dari kemungkinan darurat
sebagai prosedur:
Untuk peringatan pengemudi kereta dari darurat mungkin,
tekan tombol sinyal alarm.

Perhatikan bahwa ini konsisten dengan interpretasi BHK logika konstruktif, di mana implikasi akan diinterpretasikan sebagai solusi solusi masalah H tertentu B1 … Bn. Namun, ciri pemrograman logika adalah bahwa set formula dapat dianggap sebagai program dan mencari bukti dapat diberikan arti komputasi. Hal ini dicapai dengan membatasi logika yang mendasari untuk sebuah fragmen “berkelakuan baik” seperti klausa Horn atau herediter Harrop formula. Lihat D. Miller et al., 1991.

    Seperti dalam kasus murni deklaratif, programmer bertanggung jawab untuk memastikan kebenaran program. Tetapi karena pencarian bukti otomatis umumnya infeasible, logika pemrograman seperti umumnya dipahami juga bergantung pada programmer untuk memastikan bahwa kesimpulan yang dihasilkan secara efisien (lihat # Soal pemecahan). Dalam banyak kasus, untuk mencapai efisiensi, orang perlu untuk menyadari dan mengeksploitasi perilaku pemecahan masalah dari prover-teorema. Dalam hal ini, pemrograman logika adalah sebanding dengan pemrograman konvensional menggunakan program untuk mengontrol perilaku pelaksana program. Namun, tidak seperti program-program penting konvensional, yang hanya memiliki interpretasi prosedural, program logika juga memiliki interpretasi, deklaratif logis, yang membantu untuk memastikan kebenaran mereka. Selain itu, program-program tersebut, yang deklaratif, berada pada tingkat konseptual murni lebih tinggi daripada program-program penting, dan pelaksana program mereka, karena dalil-Prover, beroperasi pada tingkat konseptual lebih tinggi daripada konvensional kompiler dan interpreter.
    Beberapa bahasa dirancang mendukung lebih dari satu paradigma. Sebagai contoh C++  merupakan campuran antara bahasa imperative dan object-oriented, sedangkan Leda dirancang untuk mendukung paradigm pemrograman imperative, object-oriented, functional, dan logic.
    Masing-masing paradigma tersebut mempunyai strategi analisa yang khusus untuk memecahkan persoalan. Setiap paradigma mempunyai kekurangan dan kelebihan sehingga tidak semua persoalan dapat dipecahkan dengan satu jenis paradigma, sehingga diperlukan analisis secara menyeluruh terhadap persoalan yang akan diselesaikan sebelum menentukan paradigm pemrograman seperti apa yang akan digunakan untuk menyelesaikan persoalan tersebut.









REFERENCE


http://id.wikipedia.org/
http://bit.ly/copynwin
http://thoriqaziz.blogspot.com/2011/04/paradigma-pemrogramman.html
http://alpro-gilangardi.blogspot.com/2012/04/functional-programming-dan-lisp.html

Komentar

Postingan populer dari blog ini

ANGKET EVALUASI TATA KELOLA TI DENGAN FRAMEWORK COBIT 5