Paradigma Pemrograman

Paradigma yaitu sudut pandang dalam suatu persoalan maupun realitas. Begitu pula dalam pemrograman, ada pendekatan-pendekatan untuk menyelesaikan suatu persoalan yang disebut dengan paradigma pemrograman.

Jenis paradigma pemrograman :

- Pemrograman Fungsional
- Pemrograman Prosedural / Iteratif
- Pemrograman Berorientasi Objek
- Pemrograman Deklaratif, Predikatif / Logis

- Pemrograman Fungsional

Dalam ilmu komputer, pemrograman fungsional adalah paradigma pemrograman yang memperlakukan proses komputasi sebagai evaluasi fungsi-fungsi matematika.

Contoh bahasa pemrograman yang mendukung pemrograman fungsional antara lain:

-> Lisp (List Programming)
-> Scheme
-> ML (Meta Language)
-> Haskell

- Pemrograman Prosedural / Iteratif

Pemrograman Prosedural adalah dilakukan dengan memberikan serangkaian perintah yang berurutan. 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 nilai, 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 sering digunakan dalam paradigma ini adalah:

Algoritma + Struktur Data = Program

Contoh bahasa pemrogaman yang menggunakan paradigma prosedural atau imperatif adalah: Bahasa-bahasa tingkat tinggi seperti Cobol, Basic, Pascal, Fortran, dan C/C++ mendukung kegiatan pemrograman prosedural, karena itu mereka dinamakan juga bahasa prosedural.

Pada pemrograman procedural, program dibedakan antara bagian data dengan bagian instruksi. Bagian instruksi terdiri atas runtutan (sequence) instruksi yang dilaksanakan satu per satu secara berurutan oleh pemroses. Alur pelaksanaan instruksi dapat berubah karena adanya pencabangan kondisional. Data yang disimpan di dalam memori dimanipulasi oleh instruksi secara beruntun atau procedural.

- Pemrograman Berorientasi Objek

Pemrograman berorientasi objek (Inggris: object-oriented programming disingkat OOP) merupakan paradigma pemrograman yang berorientasikan kepada objek. Semua data dan fungsi di dalam paradigma ini dibungkus dalam kelas-kelas atau objek-objek. Bandingkan dengan logika pemrograman terstruktur. Setiap objek dapat menerima pesan, memproses data, dan mengirim pesan ke objek lainnya,

Model data berorientasi objek dikatakan dapat memberi fleksibilitas yang lebih, kemudahan mengubah program, dan digunakan luas dalam teknik piranti lunak skala besar. Lebih jauh lagi, pendukung OOP mengklaim bahwa OOP lebih mudah dipelajari bagi pemula dibanding dengan pendekatan sebelumnya, dan pendekatan OOP lebih mudah dikembangkan dan dirawat.

Konsep dasar :

  • Kelas — kumpulan atas definisi data dan fungsi-fungsi dalam suatu unit untuk suatu tujuan tertentu. Sebagai contoh ‘class of dog’ adalah suatu unit yang terdiri atas definisi-definisi data dan fungsi-fungsi yang menunjuk pada berbagai macam perilaku/turunan dari anjing. Sebuah class adalah dasar dari modularitas dan struktur dalam pemrograman berorientasi object. Sebuah class secara tipikal sebaiknya dapat dikenali oleh seorang non-programmer sekalipun terkait dengan domain permasalahan yang ada, dan kode yang terdapat dalam sebuah class sebaiknya (relatif) bersifat mandiri dan independen (sebagaimana kode tersebut digunakan jika tidak menggunakan OOP). Dengan modularitas, struktur dari sebuah program akan terkait dengan aspek-aspek dalam masalah yang akan diselesaikan melalui program tersebut. Cara seperti ini akan menyederhanakan pemetaan dari masalah ke sebuah program ataupun sebaliknya.
  • Objek – membungkus data dan fungsi bersama menjadi suatu unit dalam sebuah program komputer; objek merupakan dasar dari modularitas dan struktur dalam sebuah program komputer berorientasi objek.
  • Abstraksi – Kemampuan sebuah program untuk melewati aspek informasi yang diproses olehnya, yaitu kemampuan untuk memfokus pada inti. Setiap objek dalam sistem melayani sebagai model dari “pelaku” abstrak yang dapat melakukan kerja, laporan dan perubahan keadaannya, dan berkomunikasi dengan objek lainnya dalam sistem, tanpa mengungkapkan bagaimana kelebihan ini diterapkan. Proses, fungsi atau metode dapat juga dibuat abstrak, dan beberapa teknik digunakan untuk mengembangkan sebuah pengabstrakan.
  • Enkapsulasi – Memastikan pengguna sebuah objek tidak dapat mengganti keadaan dalam dari sebuah objek dengan cara yang tidak layak; hanya metode dalam objek tersebut yang diberi izin untuk mengakses keadaannya. Setiap objek mengakses interface yang menyebutkan bagaimana objek lainnya dapat berinteraksi dengannya. Objek lainnya tidak akan mengetahui dan tergantung kepada representasi dalam objek tersebut.
  • Polimorfisme melalui pengiriman pesan. Tidak bergantung kepada pemanggilan subrutin, bahasa orientasi objek dapat mengirim pesan; metode tertentu yang berhubungan dengan sebuah pengiriman pesan tergantung kepada objek tertentu di mana pesa tersebut dikirim. Contohnya, bila sebuah burung menerima pesan “gerak cepat”, dia akan menggerakan sayapnya dan terbang. Bila seekor singa menerima pesan yang sama, dia akan menggerakkan kakinya dan berlari. Keduanya menjawab sebuah pesan yang sama, namun yang sesuai dengan kemampuan hewan tersebut. Ini disebut polimorfisme karena sebuah variabel tungal dalam program dapat memegang berbagai jenis objek yang berbeda selagi program berjalan, dan teks program yang sama dapat memanggil beberapa metode yang berbeda di saat yang berbeda dalam pemanggilan yang sama. Hal ini berlawanan dengan bahasa fungsional yang mencapai polimorfisme melalui penggunaan fungsi kelas-pertama.
  • Dengan menggunakan OOP maka dalam melakukan pemecahan suatu masalah kita tidak melihat bagaimana cara menyelesaikan suatu masalah tersebut (terstruktur) tetapi objek-objek apa yang dapat melakukan pemecahan masalah tersebut. Sebagai contoh anggap kita memiliki sebuah departemen yang memiliki manager, sekretaris, petugas administrasi data dan lainnya. Misal manager tersebut ingin memperoleh data dari bag administrasi maka manager tersebut tidak harus mengambilnya langsung tetapi dapat menyuruh petugas bag administrasi untuk mengambilnya. Pada kasus tersebut seorang manager tidak harus mengetahui bagaimana cara mengambil data tersebut tetapi manager bisa mendapatkan data tersebut melalui objek petugas adminiistrasi. Jadi untuk menyelesaikan suatu masalah dengan kolaborasi antar objek-objek yang ada karena setiap objek memiliki deskripsi tugasnya sendiri.

Bahasa pemrograman yang mendukung OOP antara lain:

-> Visual Foxpro
-> Java
-> C++
-> Pascal (bahasa pemrograman)
-> SIMULA
-> Smalltalk
-> Ruby
-> Python
-> PHP
-> C#
-> Delphi
-> Eiffel
-> Perl
-> Adobe Flash AS 3.0

- Pemrograman Deklaratif, Predikatif / Logis

Dalam ilmu komputer, pemrograman deklaratif adalah sebuah paradigma pemrograman yang mengungkapkan logika dari sebuah komputasi tanpa menggambarkan aliran kontrol.

Dalam pemrograman ini, programmer menguraikan sekumpulan fakta dan aturan-aturan (inference rules). Ketika program dieksekusi, pemakai akan mengajukan pertanyaan, selanjutnya program akan menggunakan aturan deduksi dan mencocokkan pertanyaan dengan fakta-fakta yang ada untuk menjawab pertanyaan. Selain itu, pemrograman deklaratif disebut juga pemrograman yang bersifat predikatif / lojik.

Pemrograman deklaratif sering didefinisikan sebagai gaya setiap program yang tidak penting.

Contoh:

Program yang menjelaskan apa yang harus dilakukan perhitungan dan bukan bagaimana untuk menghitung itu
Setiap bahasa pemrograman yang tidak memiliki efek samping (atau lebih spesifik, adalah referentially transparan)
Suatu bahasa dengan korespondensi yang jelas logika matematika.

Contoh bahasa pemrograman yang menggunakan pemrograman deklaratif adalah: Prolog.

Sumber : https://goo.gl/f41IPm | https://goo.gl/adWDdb

“Animasi” di Multimedia

Modal utama seorang animator adalah kemampuan meng-capture momentum ke dalam runtutan gambar sehingga seolah-olah menjadi bergerak atau hidup. Sedikit berbeda dengan komikus, ilustrator, atau -katakanlah- karikaturis yang menangkap suatu momentum ke dalam sebuah gambar diam (still). Animator harus lebih memiliki ‘kepekaan gerak’ daripada ‘hanya’ sekedar kemampuan menggambar. Gambar yang bagus akan percuma tanpa didukung kemampuan meng-’hidup’-kan. Sebagaimana definisi dasar animasi yang berarti: membuat seolah-olah menjadi hidup.

Ada berbagai macam teori dan pendapat tentang bagaimana seharusnya animasi itu dibuat. Tetapi setidaknya ada 12 prinsip yang harus dipenuhi untuk membuat sebuah animasi yang ‘hidup’. Ke-12 prinsip ini meliputi dasar-dasar gerak, pengaturan waktu, peng-kaya-an visual, sekaligus teknis pembuatan sebuah animasi.

 

1. Solid Drawing

Menggambar sebagai dasar utama animasi memegang peranan yang signifikan dalam menentukan -baik proses maupun hasil- sebuah animasi, terutama animasi klasik. Seorang animator harus memiliki kepekaan terhadap anatomi, komposisi, berat, keseimbangan, pencahayaan, dan sebagainya yang dapat dilatih melalui serangkaian observasi dan pengamatan, dimana dalam observasi itu salah satu yang harus dilakukan adalah: menggambar.

Meskipun kini peran gambar -yang dihasilkan sketsa manual- sudah bisa digantikan oleh komputer, tetapi dengan pemahaman dasar dari prinsip ‘menggambar’ akan menghasilkan animasi yang lebih ‘peka’.

2. Timing & Spacing

Grim Natwick -seorang animator Disney pernah berkata, “Animasi adalah tentang timing dan spacing”. Timing adalah tentang menentukan waktu kapan sebuah gerakan harus dilakukan, sementara spacing adalah tentang menentukan percepatan dan perlambatan dari bermacam-macam jenis gerak.

Contoh Timing: Menentukan pada detik keberapa sebuah bola yang meluncur kemudian menghantam kaca jendela.

Contoh Spacing: Menentukan kepadatan gambar (yang pada animasi akan berpengaruh pada kecepatan gerak) ketika bola itu sebelum menghantam kaca, tepat menghantam kaca, sesudahnya, atau misalnya ketika bola itu mulai jatuh ke lantai. Spacing (pengaturan kepadatan gambar) akan mempengaruhi kecepatan gerak bola, percepatan dan perlambatannya, sehingga membuat sebuah gerakan lebih realistis.

3. Squash & Stretch

Squash and strecth adalah upaya penambahan efek lentur (plastis) pada objek atau figur sehingga -seolah-olah ‘memuai’ atau ‘menyusut’ sehingga memberikan efek gerak yang lebih hidup. Penerapan squash and stretch pada figur atau benda hidup (misal: manusia, binatang, creatures) akan memberikan ‘enhancement’ sekaligus efek dinamis terhadap gerakan/ action tertentu, sementara pada benda mati (misal: gelas, meja, botol) penerapan squash and stretch akan membuat mereka (benda-benda mati tersebut) tampak atau berlaku seperti benda hidup.

Contoh pada benda mati: Ketika sebuah bola dilemparkan. Pada saat bola menyentuh tanah maka dibuat seolah-olah bola yang semula bentuknya bulat sempurna menjadi sedikit lonjong horizontal, meskipun nyatanya keadaan bola tidak selalu demikian.Hal ini memberikan efek pergerakan yang lebih dinamis dan ‘hidup’.

Contoh pada benda hidup: Sinergi bisep dan trisep pada manusia. Pada saat lengan ditarik (seperti gerakan mengangkat barbel) maka akan terjadi kontraksi pada otot bisep sehingga nampak ‘memuai’, hal inilah yang disebut squash pada animasi. Sedangkan stretch nampak ketika dilakukan gerakan sebaliknya (seperti gerakan menurunkan lengan), bisep akan nampak ‘menyusut’.

4. Anticipation

Anticipation boleh juga dianggap sebagai persiapan/ awalan gerak atau ancang-ancang. Seseorang yang bangkit dari duduk harus membungkukkan badannya terlebih dahulu sebelum benar-benar berdiri. Pada gerakan memukul, sebelum tangan ‘maju’ harus ada gerakan ‘mundur’ dulu. Dan sejenisnya.

5. Slow In and Slow Out

Sama seperti spacing yang berbicara tentang akselerasi dan deselerasi. Slow In dan Slow Out menegaskan kembali bahwa setiap gerakan memiliki percepatan dan perlambatan yang berbeda-beda. Slow in terjadi jika sebuah gerakan diawali secara lambat kemudian menjadi cepat. Slow out terjadi jika sebuah gerakan yang relatif cepat kemudian melambat.

Contoh: Dalam gerakan misalnya mengambil gelas. Tangan akan memiliki kecepatan yang berbeda ketika sedang akan menjamah gelas, dengan ketika sudah menyentuhnya. Ketika tangan masih jauh dari gelas, tangan akan bergerak relatif cepat. Sedangkan ketika tangan sudah mendekati gelas, maka secara refleks tangan akan menurunkan kecepatannya (terjadi perlambatan) atau dalam konteks ini kita menyebutnya slow out.

6. Arcs

Dalam animasi, sistem pergerakan tubuh pada manusia, binatang, atau makhluk hidup lainnya bergerak mengikuti pola/jalur (maya) yang disebut Arcs. Hal ini memungkinkan mereka bergerak secara ‘smooth’ dan lebih realistik, karena pergerakan mereka mengikuti suatu pola yang berbentuk lengkung (termasuk lingkaran, elips, atau parabola). Pola gerak semacam inilah yang tidak dimiliki oleh sistem pergerakan mekanik/ robotik yang cenderung patah-patah.

7. Secondary Action

Secondary action adalah gerakan-gerakan tambahan yang dimaksudkan untuk memperkuat gerakan utama supaya sebuah animasi tampak lebih realistik. Secondary action tidak dimaksudkan untuk menjadi ‘pusat perhatian’ sehingga mengaburkan atau mengalihkan perhatian dari gerakan utama. Kemunculannya lebih berfungsi memberikan emphasize untuk memperkuat gerakan utama.

Contoh: Ketika seseorang sedang berjalan, gerakan utamanya tentu adalah melangkahkan kaki sebagaimana berjalan seharusnya. Tetapi seorang animator bisa menambahkan secondary action untuk memperkuat kesan hidup pada animasinya. Misalnya, sambil berjalan ‘seorang’ figur atau karakter animasi mengayun-ayunkan tangannya atau bersiul-siul. Gerakan mengayun-ayunkan tangan dan bersiul-siul inilah secondary action untuk gerakan berjalan.

8. Follow Through and Overlapping Action

Follow through adalah tentang bagian tubuh tertentu yang tetap bergerak meskipun seseorang telah berhenti bergerak. Misalnya, rambut yang tetap bergerak sesaat setelah berhenti berlari.

Overlapping action secara mudah bisa dianggap sebagai gerakan saling-silang. Maksudnya, adalah serangkaian gerakan yang saling mendahului (overlapping). Pergerakan tangan dan kaki ketika berjalan bisa termasuk didalamnya.

9. Straight Ahead Action and Pose to Pose

Dari sisi resource dan pengerjaan, ada dua cara yang bisa dilakukan untuk membuat animasi.

Yang pertama adalah Straight Ahead Action, yaitu membuat animasi dengan cara seorang animator menggambar satu per satu, frame by frame, dari awal sampai selesai seorang diri. Teknik ini memiliki kelebihan: kualitas gambar yang konsisten karena dikerjakan oleh satu orang saja. Tetapi memiliki kekurangan: waktu pengerjaan yang lama.

Yang kedua adalah Pose to Pose, yaitu pembuatan animasi oleh seorang animator dengan cara menggambar hanya pada keyframe-keyframe tertentu saja, selanjutnya in-between atau interval antar keyframe digambar/ dilanjutkan oleh asisten/ animator lain. Cara yang kedua ini lebih cocok diterapkan dalam industri karena memiliki kelebihan: waktu pengerjaan yang relatif lebih cepat karena melibatkan lebih banyak sumber daya.

10. Staging

Seperti halnya yang dikenal dalam film atau teater, staging dalam animasi juga meliputi bagaimana ‘lingkungan’ dibuat untuk mendukung suasana atau ‘mood’ yang ingin dicapai dalam sebagian atau keseluruhan scene.

11. Appeal

Appeal berkaitan dengan keseluruhan look atau gaya visual dalam animasi. Sebagaimana gambar yang telah menelurkan banyak gaya, animasi (dan ber-animasi) juga memiliki gaya yang sangat beragam. Sebagai contoh, anda tentu bisa mengidentifikasi gaya animasi buatan Jepang dengan hanya melihatnya sekilas. Anda juga bisa melihat ke-khas-an animasi buatan Disney atau Dreamworks. Hal ini karena mereka memiliki appeal atau gaya tertentu.

Ada juga yang berpendapat bahwa appeal adalah tentang penokohan, berkorelasi dengan ‘kharisma’ seorang tokoh atau karakter dalam animasi. Jadi, meskipun tokoh utama dari sebuah animasi adalah monster, demit, siluman atau karakter ‘jelek’ lainnya tetapi tetap bisa appealing.

12. Exaggeration

Exaggeration adalah upaya untuk mendramatisir sebuah animasi dalam bentuk rekayasa gambar yang bersifat hiperbolis. Dibuat untuk menampilkan ekstrimitas ekspresi tertentu, dan lazimnya dibuat secara komedik. Banyak dijumpai di film-film animasi sejenis Tom & Jerry, Donald Duck, Doraemon dan sebagainya.

Contoh: 1) Bola mata Tom yang ‘melompat’ keluar karena kaget, 2) Muka Donald yang membara ketika marah, 3) Air mata Nobita yang mengalir seperti air terjun ketika menangis

Animasi Cel adalah suatu bentuk animasi di mana tangan gambar yang diambil adalah dialihkan ke lembaran plastik, masing-masing dengan elemen yang berbeda seperti karakter dan latar belakang, dan berlapis di atas satu sama lain untuk menciptakan sebuah adegan yang lengkap. Komposisi ini kemudian difoto dan dimasukkan dalam film selesai. Itu adalah mendominasi bentuk animasi sampai munculnya animasi komputer yang dihasilkan pada tahun 1990 pertengahan.

Animasi Digital adalah animasi karakter imajinasi yang dibuat dari hasil proses kerja komputer. Sebelum menggunakan komputer, animasi diselesaikan dengan membuat film dari gambar tangan atau urutan-urutan gambar di atas plastik atau kertas (yang disebut dengan cels), satu frame untuk 1/60 detik. Komputer pertama kali digunakan untuk mengontrol pergerakan dari karakter. Digital animation dapat juga membuat special effects dan simulasi gambar yang hampir tidak mungkin dilakukan dengan tanpa animasi, seperti memberikan penjelasan mengenai suatu hal yang sulit, contoh animasi solar flare pada matahari. Digital animation juga dapat digunakan untuk merekonstruksi ulang suatu kejadian.

Berdasarkan teknik pembuatannya animasi dibedakan menjadi sepuluh jenis yaitu :
animasi cel, animasi frame, animasi sprite, animasi path, animasi spline, animasi vektor, animasi clay, morphing, animasi digital dan animasi karakter.

Text Compression (Kompresi Teks) Menggunakan Algoritma Huffmann

Teks adalah kumpulan dari karakter –karakter atau string yang menjadi satu kesatun. Teks yang memuat banyak karakter didalamnya selalu menimbulkan masalah pada media penyimpanan dan kecepatan waktu pada saat transmisi data. Media penyimpanan yang terbatas, membuat semua orang mencoba berpikir untuk menemukan sebuah cara yang dapat digunakan untuk mengompres teks.
Walaupun pada saat ini terdapat banyak algoritma untuk mengompres data termasuk teks, seperti LIFO, LZHUF, LZ77 dan variannya (LZ78, LZW, GZIP), Dynamic Markov Compression (DMC), Block -Sorting Lossless, Run-Length, Shannon-Fano, Arithmetic, PPM (Prediction byPartial Matching), Burrows-Wheeler Block Sorting, dan Half Byte. Namun penulis menggunakan algoritma Huffman, karena algoritma ini banyak digunakan dan mudah diimplementasikan dalam proses pengompresan teks.
Kompresi adalah proses pengubahan sekumpulan data menjadi bentuk kode dengan tujuan untuk menghemat kebutuhan tempat penyimpanan dan waktu untuk transmisi data[1]. Dengan menggunakan algoritma Huffman, proses pengompresan teks dilakukan dengan menggunakan prinsip pengkodean, yaitu tiap karakter dikodekan dengan rangkaian beberapa bit sehingga menghasilkan hasil yang lebih optimal.
Tujuan dari penulisan makalah ini adalah untuk mengetahui keefektifan algoritma Huffman dalam kompresi teks dan memaparkan cara-cara mengompresi teks dengan menggunakan algoritma Huffman.
Untuk mencapai tujuan diatas penulis melakukan serangkaian kegiatan yaitu mengumpulkan data dan referensi-referensi yang ada, serta melakukan studi pustaka.

ALGORITMA HUFFMANN

Algoritma Huffman, yang dibuat oleh seorang mahasiswa MIT bernama David Huffman pada tahun 1952, merupakan salah satu metode paling lama dan paling terkenal dalam kompresi teks [2]. Algoritma Huffman menggunakan prinsip pengkodean yang mirip dengan kode Morse, yaitu tiap karakter (simbol) dikodekan hanya dengan rangkaian beberapa bit, dimana karakter yang sering muncul dikodekan dengan rangkaian bit yang pendek dan karakter yang jarang muncul dikodekan.dengan rangkaian bit yang lebih panjang.
Berdasarkan tipe peta kode yang digunakan untuk mengubah pesan awal (isi data yang diinputkan) menjadi sekumpulan codeword, algoritma Huffman termasuk kedalam kelas algoritma yang menggunakan metode statik . Metoda statik adalah metoda yang selalu menggunakan peta kode yang sama, metoda ini membutuhkan dua fase (two-pass): fase pertama untuk menghitung probabilitas kemunculan tiap simbol dan menentukan peta kodenya, dan fase kedua untuk mengubah pesan menjadi kumpulan kode yang akan di taransmisikan.
Sedangkan berdasarkan teknik pengkodean simbol yang digunakan, algoritma Huffman menggunakan metode symbolwise. Metoda symbolwise adalah metode yang menghitung peluang kemunculan dari setiap simbol dalam satu waktu, dimana simbol yang lebih sering muncul diberi kode lebih pendek dibandingkan simbol yang jarang muncul. Continue reading