Senin, 12 April 2010

Membuat aplikasi ANtrian dalam suatu perusahaan

PT Angin Ribut memerlukan sebuah aplikasi inventory yang dapat dijalankan secara multi-user. Dari 10 orang programer yang mengajukan diri, Anda lah yang terpilih untuk membuat aplikasi tersebut. Setelah mentraktir teman-teman Anda untuk merayakan hari bersejarah tersebut, Anda duduk di depan komputer dan bertanya, mulai dari mana ya?

Bagi Anda yang baru pertama kali membuat program untuk sebuah perusahaan, tentunya situasi yang Anda hadapi saat ini berbeda dibandingkan membuat program untuk tugas kuliah atau skripsi. Perbedaannya tidak semata-mata dari kompleksitas, tetapi lebih merujuk pada tanggung-jawab dan bagaimana memberikan aplikasi yang baik untuk perusahaan.

Hal pertama yang perlu diingat, sebuah perusahaan seharusnya memiliki jaringan komputer yang berpotensi menjadi semakin besar dan luas, sehingga aplikasi untuk perusahaan dapat berkembang menjadi besar baik dalam kaitannya dengan pengguna atau kode program.

Aplikasi yang dibuat untuk perusahaan mutlak harus stabil dan dapat menangani dengan baik kesalahan yang mungkin terjadi, mengingat operasi bisnis perusahaan tergantung pada aplikasi tersebut.

Client Server

Kita akan membahas client server yang tentunya harus Anda pertimbangkan untuk membuat aplikasi perusahaan. Pada model client server umumnya, client akan melakukan request langsung kepada server. Client bertanggung jawab menangani input dari pengguna, sementara server bertanggung jawab menangani permintaan operasi database.

Aplikasi client server tidak selalu harus merujuk pada dua komputer dimana satu komputer berlaku sebagai server dan komputer lainnya sebagai client. Anda dapat melakukan development dengan menggunakan satu komputer.

Kenyataannya, hanya dengan melakukan pemrograman untuk satu komponen object yang memanggil object yang lain, sudah menggambarkan satu contoh dari teknologi client server.

Perancangan aplikasi client server harus mempertimbangkan hal-hal sebagai berikut:

1. Banyaknya client didalam sistem.
2. Apakah sistem menggunakan lebih dari satu DBMS.
3. Kebutuhan update aplikasi di masa mendatang.

Terdapat dua pendekatan arsitektur aplikasi client server, yaitu two-tier (2-tier) dan n-tier.

Two-tier

Tier dapat diartikan sebagai tingkatan. Konsep tier menjelaskan arsitektur aplikasi secara logical ketimbang secara physical. Arsitektur two-tier menerangkan aplikasi yang dirancang digunakan oleh satu atau lebih client yang terkoneksi pada server database.

Contoh two-tier yang paling sederhana adalah saat seluruh client yang terkoneksi menjalankan aplikasi yang sama dan mengakses satu database.

Secara sederhana, konsep two-tier dapat digambarkan sebagai berikut.

Pada two-tier konvensional, aplikasi pada sisi client umumnya menangani beberapa business logic. Contoh business logic dari sebuah aplikasi client server yaitu sekumpulan komponen object yang memiliki fungsi tertentu. Pada lingkungan jaringan, business logic ini menempati dan dijalankan pada masing-masing komputer client.

Dari penjelasan diatas, aplikasi dengan arsitektur two-tier seperti digambarkan diatas bisa jadi cukup sederhana untuk diterapkan, tetapi dapat menjadi masalah yang cukup sulit dan memakan waktu, biaya dan tenaga jika tiba saatnya untuk melakukan update aplikasi. Mengapa demikian?

Karena penerapan business logic pada two-tier yang digambarkan diatas harus dijalankan pada masing-masing komputer client, sehingga jika dilakukan update aplikasi, maka pada seluruh komputer client yang terkait harus dilakukan proses update.

Anda dapat menghindari permasalahan ini dengan melakukan sentralisasi business logic pada server. Teknologi DBMS seperti pada Microsoft SQL Server menyediakan fasilitas stored procedure untuk menyimpan business logic.

Dengan demikian, masing-masing client tidak lagi melakukan proses business logic pada dirinya, tetapi memanggil stored procedure untuk melakukan business logic, kemudian business logic akan menjalankan operasi database yang diminta.

Dengan cara ini, saat Anda ingin melakukan update business logic, cukup dengan melakukan update pada stored procedure yang terletak pada server database, maka perubahan business logic telah berlaku secara keseluruhan sistem.

Perubahan business logic ini berlaku transparan pada client, dalam artian client hanya perlu mengetahui nama dari procedure yang ada, tidak perlu merisaukan kode program yang terdapat pada procedure tersebut.

Solusi ini cukup menenangkan dan menghindari Anda dari kerja lembur selama dua malam untuk mengupdate seluruh komputer client pada sistem, yang mana Anda harus melakukannya setelah jam pulang kantor pada saat tidak ada lagi yang menggunakan komputer, selain Anda tentunya.

N-tier

Stored procedure ternyata tidak mencukupi untuk sistem dimana database disimpan pada lebih dari satu server, karena bisa jadi terdapat client yang tidak dapat mengakses procedure tersebut. Mungkin Anda bertanya, apa perlunya menyimpan database lebih dari satu server?

Tentu saja Anda juga menginginkan perusahaan yang menggunakan aplikasi Anda dapat berkembang, bukan? Penggunaan lebih dari satu database sangat memungkinkan saat sebuah perusahaan telah memiliki divisi yang cukup besar dimana harus memiliki database tersendiri.

Dalam kasus penggunaan lebih dari satu server database, Anda perlu mengimplementasikan strategi development yang berbeda, pendekatan yang baik adalah dengan menggunakan model n-tier.

Huruf “n” pada n-tier menunjukkan variabel numerik yang dapat berisi angka sebanyak apapun, misalnya 3-tier, 4-tier dan seterusnya. Karena itu sebuah aplikasi n-tier memiliki 3 atau lebih tingkatan logical, umumnya aplikasi n-tier saat ini menggunakan 3-tier.

Untuk menggambarkannya, Anda dapat membayangkan skema disain aplikasi two-tier yang mengimplementasikan business logic pada stored procedure seperti yang telah diterangkan diatas, kemudian melakukan improvisasi disain dengan menambahkan sebuah tingkatan (tier) sebagai middle tier sebagai business object, arsitektur inilah yang dikenal dengan 3-tier.

Perbedaan nyata dengan 2-tier adalah, business object pada 3-tier terpisah dari aplikasi client dan elemen database. Sehingga dapat digambarkan bahwa sistem 3-tier secara umum terbentuk dari tingkatan client, business dan database.

Untuk membayangkan penerapan 3-tier dalam kehidupan sehari-hari yang mungkin paling sering Anda temui adalah penerapan Internet ataupun Intranet.

Pada aplikasi Internet/Intranet, terdapat client yang menjalankan browser dan meminta informasi dari middle-tier yang berupa HTTP Server. Middle-tier akan meminta data pada server database, kemudian mengirimkannya kembali kepada HTTP Server. HTTP Server akan mengirimkan kepada browser dalam bentuk page/halaman web.

Diagramnya terlihat seperti dibawah ini:

Sebuah sistem 3-tier menyediakan support multi-user yang stabil, bahkan saat pada client menjalankan aplikasi yang berbeda, juga dapat mendayagunakan beberapa database yang digunakan secara bersamaan.

Dalam pembahasan berikut ini, akan dijelaskan contoh kasus penerapan 3-tier. Bayangkan sebuah sistem 3-tier, yang terdiri dari client, business dan database. Sistem tersebut harus melakukan kalkulasi gaji karyawan berdasarkan pajak dan peraturan lainnya yang dapat berubah dari tahun ke tahun.

Pada tahun ini, terdapat perubahan peraturan pajak yang harus diterapkan pada sistem, pada tingkatan mana Anda harus melakukan update? Anda hanya perlu melakukan update pada tingkatan business object, yang ada karena arsitektur 3-tier ini.

Satu hal yang harus terus diingat sebagai konsep dasar, bahwa pengertian arsitektur 2-tier maupun 3-tier adalah secara logical dan bukan secara physical. Sehingga pada sebuah sistem kecil Anda dapat menjalankan business logic dan database pada komputer yang sama.

Tetapi pada sistem yang besar, Anda mungkin memerlukan beberapa komputer untuk menjalankan baik tingkatan business ataupun database.

Keuntungan Dan Kerugian n-tier

Diantara keuntungan-keuntungan yang dapat diperoleh dari arsitektur n-tier (atau 3-tier pada umumnya), yang terutama adalah:

1. Kemudahan perubahan business logic di masa yang akan datang.
2. Business logic yang mudah diimplementasi dan dipelihara.
3. Aplikasi client dapat mengakses berbagai tipe DBMS yang berbeda-beda secara transparan.

Apakah terdapat kerugian n-tier? Mungkin lebih tepat dikatakan sebagai konsekuensinya, yaitu sistem n-tier relatif mahal untuk development dan instalasinya.

Hal ini dikarenakan perencanaan software pada 3-tier bisa jadi sangat kompleks. Bahkan pada awal tahap perencanaan, Anda telah harus mempertimbangkan potensi pengembangan perusahaan pada masa yang akan datang.

Kompleksitas dalam hal ini meliputi seluruh aspek, baik infrastruktur maupun pembuatan software secara keseluruhan. Sementara dalam suatu perusahaan, semakin besar perubahan sistem yang dilakukan, maka akan semakin memerlukan adaptasi yang semakin luas ruang lingkupnya. Karena itu secara otomatis memerlukan rentang waktu relatif lebih lama.

Terutama jika sistem 3-tier tersebut akan menggantikan sistem yang telah lama digunakan, terdapat cukup banyak tantangan untuk sosialisasi sistem yang baru. Dalam hal ini, interaksi dan komunikasi dengan pengguna sistem secara keseluruhan sangat diperlukan.

Karena itu terdapat dua sisi yang harus Anda temukan titik imbangnya, antara keuntungan-keuntungan yang dapat diraih oleh arsitektur aplikasi n-tier berbanding dengan biaya, tenaga dan waktu yang diperlukan untuk development dan implementasinya.

Keuntungan Dan Kerugian 2-tier

Karena berbagai faktor, jika konsekuensi arsitektur aplikasi n-tier masih terlalu besar dibandingkan dengan keuntungan-keuntungannya, maka Anda dapat mempertimbangkan arsitektur aplikasi 2-tier.

Berlawanan dengan n-tier, sistem 2-tier relatif lebih sederhana untuk didevelop dan diimplementasikan, dibandingkan dengan sistem 3-tier. Sehingga untuk kasus-kasus tertentu, contohnya untuk bisnis kecil, sistem 2-tier lebih cocok untuk diterapkan.

Teknologi Pendukung

Konsep arsitektur tanpa teknologi pendukung tidak akan dapat diterapkan. Termasuk dalam arsitektur 2-tier dan n-tier. Beberapa contoh teknologi yang umum dipergunakan untuk mendukung 2-ter dan n-tier:

1. Component Object.

Umumnya merupakan model object oriented dimana dapat dipergunakan oleh aplikasi yang berbeda dan penggunaan ulang komponen. Contohnya adalah COM/DCOM. Aplikasi yang ditulis dengan bahasa pemrograman yang berbeda dapat saling berkomunikasi dengan menggunakan Component Object.

Component Object itu sendiri dapat ditulis dengan bahasa pemrograman yang berbeda-beda. Pada prinsipnya komponen tersebut terdiri dari class yang memiliki sekumpulan method.

2. Microsoft Transaction Server.

MTS atau Microsoft Transaction Server merupakan software yang dikembangkan oleh Microsoft untuk keperluan monitoring transaksi pada aplikasi terdistribusi. MTS beroperasi pada middle-tier dan menyediakan control transaksi.

Sebagai contoh, jika Anda mengembangkan sistem 3-tier yang mana menempatkan business object pada middle-tier, maka Anda dapat membuat ActiveX DLL sebagai business objectnya, dan melakukan instalasi didalam lingkungan MTS pada middle-tier.

MTS akan bertanggung-jawab dalam menangani akses multi-client pada busines object tersebut. MTS menyediakan fasilitas seperti transaksi rollback, commit dan deadlock pada middle-tier.

3. HTTP/Web Server.

Untuk aplikasi n-tier pada aplikasi Internet/Intranet, Anda mutlak memerlukan Web Server. Terdapat cukup banyak web server yang umum digunakan seperti Apache Web Server atau Internet Information Server (IIS).

Anda dapat menggunakan web server sebagai middle-tier untuk menangani permintaan dari browser komputer client.

4. Microsoft Message Queue Server.

MMQS atau Microsoft Message Queue Server merupakan teknologi yang dikembangkan oleh Microsoft yang berjalan pada middle-tier dan berfungsi untuk mengelola antrian permintaan.

Hal ini dilatarbelakangi karena didalam jaringan yang besar, tidak semua komputer yang terkoneksi berfungsi pada saat yang diperlukan, sehingga diperlukan sebuah aplikasi yang dapat mengelola antrian request dari client dan response dari server yang akan dikirimkan lagi ketika komputer tujuan telah berfungsi.

Bahkan jika Anda menggunakan banyak server dan keseluruhan server sedang dalam kondisi down, MMQS akan menyimpan semua request hingga beberapa atau semua server kembali online.

Satu keuntungannya lagi, jika client-client meminta request yang melebihi kapasitas sebuah server, maka MMQS dapat menyimpannya untuk kemudian mendelegasikannya pada server yang tidak sibuk. Untuk kebutuhan ini diperlukan aplikasi pada server yang berfungsi sebagai listener atau referral.

5. Database Management System.

Database Management System atau dikenal dengan singkatan DBMS merupakan sumber penyimpanan data dan tentu saja memegang peranan vital dalam keseluruhan sistem.

Untuk arsitektur 2-tier dan n-tier, diperlukan aplikasi DBMS yang mampu bekerja pada lingkungan tersebut, beberapa contohnya adalah MySQL, Microsoft SQL Server dan Oracle.

Jika pada DBMS yang dipergunakan terdapat fasilitas stored procedure, maka dimungkinkan untuk menyimpan business logic didalam stored procedure yang akan diakses oleh client.

Conceptual Model

Tahap disain untuk merancang aplikasi untuk perusahaan bisa jadi merupakan pekerjaan yang rumit dan harus berhati-hati. Sehingga sangat disarankan Anda mencurahkan waktu yang cukup pada tahap disain.

Pendekatan terbaik untuk melakukan disain adalah dengan membagi aplikasi kedalam unit-unit kecil yang disebut modul. Pada awalnya Anda dapat membuat modul standalone yang dapat dipanggil oleh modul lainnya dan dapat digunakan berulang kali (reused) pada project yang lain.

Hal ini akan mempermudah pekerjaan Anda dan menghindari duplikasi pengkodean yang tidak perlu, serta menghemat waktu kerja Anda.

Pada tahap disain ini juga, Anda perlu mengenal apa yang dinamakan dengan conceptual model, yang juga dikenal dengan sebutan service model atau application model.

Pada implementasi siste 3-tier, dikenal tingkatan sebagai berikut:

1. User service/Presentation tier.
Saat Anda melakukan perancangan pada tahap awal, presentation tier merupakan tingkatan yang mengijinkan pengguna berkomunikasi dengan aplikasi.

2. Business service/Application server tier.
Digunakan untuk melakukan implementasi business logic.

3. Data service/Data source tier.
Tingkatan terakhir ini berfungsi untuk mengelola permintaan operasi data.

Mengenal Ruang Lingkup

Keberhasilan membuat aplikasi perusahaan juga sangat tergantung pada informasi yang Anda dapatkan mengenai perusahaan yang bersangkutan. Pengertian perusahaan tidak selalu mengacu pada PT Angin Ribut seperti pada contoh, tetapi bisa jadi organisasi seperti sekolah, universitas, atau bahkan pemerintah.

Yang pasti, aplikasi tersebut memiliki nilai guna yang besar bagi customer maupun perusahaan yang bersangkutan, mengenal business rule perusahaan yang bersangkutan merupakan kata lain dari mengenal “medan tempur”, dimana masing-masing perusahaan memiliki orientasi yang bisa jadi berbeda. Sehingga sisi komunikasi yang baik pun harus dimiliki untuk menghindari kesalahan interpetasi.

Menciptakan komunikasi yang baik dengan user yang secara langsung akan menggunakan aplikasi Anda juga akan sangat membantu pemahaman dan kesulitan yang dialami, sehingga pemecahan atau solusinya akan lebih mudah ditemukan dan diimplementasikan dalam aplikasi Anda.

Posted in Uncategorized | Leave a Comment »
Antrian dalam struktur data / Quequ

Possibly related posts: (automatically generated)

* Pengertian Client Server
* PERKEMBANGAN SIM
* Merakit Komputer Sendiri
* Aplikasi Pada Sistem Terdistribus

Contoh penerapan stack dalam kehidupan sehari – hari

Stack adalah salah satu struktur data yang memiliki sistem kerja Last In First Out (LIFO), yang terakhir masuk pertama keluar. Dapat di ilustrasikan seperti sebuah tumpukan buku, ketika mengambil sebuah buku di dalam tumpukan itu maka harus diambil satu persatu dari buku yang paling atas dari tumpukan buku tersebut.

Beberapa contoh ilustrasi yang dapat menggambarkan tumpukan dan cara beroperasinya adalah tumpukan sate, tumpukan Compact Disk (CD), dan lain-lain. Sate misalnya, si pembuat sate menusukan (memasukan) daging sate ke tusukan satu per satu dari ujung tusukan (ujung yang runcing) menuju/mendekati batas pangkal, jika telah dimasak, maka si pemakan sate akan mengeluarkan (memakan) sate satu persatu dari ujung (yang akhir-akhir dimasukan si pembuat, itulah yang awal-awal dimakan). Demikian juga dengan tumpukan CD, orang akan mengambil CD dari tumpukan teratas yang mana merupakan yang terakhir dimasukan di dalam tumpukan.

Fungsi dalam Stack:

* Fungsi init: fungsi yang digunakan untuk inisialisasi atau membuat stack baru yang masih kosong.
* Fungsi full: digunakan untuk mengetahui stack penuh atau tidak.
* Fungsi empty: digunakan untuk mengetahui stack kosong atau tidak.
* Fungsi clear: digunakan untuk mengosongkan stack. Stack dianggap kosong apabila puncak stack berada pada posisi -1.
* Fungsi push: digunakan untuk menambahkan data ke dalam stack. Penambahan data tidak bisa dilakukan apabila stack sudah penuh. Urutan perintahnya adalah: menambahkan nilai top dan menambahkan data pada posisi nilai top. Jika dalam Linked List menggunakan method addLast
* Fungsi pop: digunakan untuk mengeluarkan data teratas stack dengan syarat bahwa stack tidak kosong. Urutan perintahnya adalah : menghapus data pada posisi nilai top dan menurunkan nilai top. Jika dalam Linked List menggunakan method removeLast

Antrian dalam Struktur data

Queue (Antrian) adalah list linier yang :
1. Elemen yang pertama kali masuk antrian akan keluar pertama kalinya
2. Dikenali elemen pertama (Front) dan elemen terakhirnya (Tail)
3. Aturan penyisipan dan penghapusan elemennya disefinisikan sebagai berikut :
a) Penyisipan selalu dilakukan setelah elemen terakhir
b) Penghapusan selalu dilakukan pada elemen pertama
4. Satu elemen dengan elemen lain dapat diakses melalui informasi Next
5. Antrian dapat dibuat dengan menggunakan: Linier Array dan Circular Array

Front dan tail selalu bergerak maju/naik sehingga
1. Bila tail telah mencapai elemen terakhir array, antrian dianggap penuh walau sebenarnya mungkin elemen-elemen awal antrian telah dihapus (dikosongkan).
2. Bila front dan tail mencapai nilai yang sama berarti antrian dalam keadaan kosong maka front dan tail dapat diinisialisasi kembali ke kondisi semula.

Deklarasi queue menggunakan singly linked list:

Type
TData=…;
TKey= …;
PNode=^Node;
Node=record
Key:TKey;
Data:TData;
Next:PNode;
End;
Queue=record
Count:integer;
Front,tail:PNode;
End;
Opersi-operasi di QUEUE
1. InitQ(Q)menciptakan Qdengan queue kosong

Procedure InitQ(var Q:Queue);
Begin
Q.count:=0;
Q.front:=nil;
Q.tail:=nilai;
End;

2. AddQ(Q,x) menambah elemen x ke rear queue

Procedure AddQ(var Q:Queue; p:PNode);
{sama dengan insert last, yang elemen last-nya disimpan}
Begin
Q.tail^.next:=p;
Q.tail:=p;
If Q,front=nil then q.front:=Q.tail; {elemen pertama dan satu-satunya dari queue}
Q.count:=Q.count+1;
End;

3. RemoveQ(Q,x) menghilangkan elemen pada front dari queue Q

Procedure removeQ(var Q:Queue; var k:TKey; d:TData);
{sama dengan delete first}
Var p:PNode;
Begin
If (Q.frontNil) then
Begin
P:=Q.Front;
Q.front:=Q.front^.Next;
If Q.front=nil then Q.tail:=nil; {elemen satu2nya dihapus}
K:=p^.key;
D:=p^.data;
Q.Count:=Q.count-1;
Dispose(p);
End;
End;

4. Front(Q) mengirim elemen front dari queue

Function frontQ (Q:queue):listPtr;
Begin
FrontQ:=Q.front;
End;

5. IsEmptyQ(Q) yang mengembalikan true if Q kosong else false

Function isEmpityQ(Q:queue):Boolean;
Begin
isEmptyQ:=(S.front=nil);
end;

6. HowManyIn(Q) mengirimkan jumlah elemen di Queue

Function howManyInQ(Q:queue):integer;
Begin
howManyInQ:=Q.count;
End;

Stack

Definisi 2.
Stack adalah suatu koleksi atau kumpulan item data yang teroganisasi dalam bentuk urutan linear, yang operasi pemasukan dan penghapusan datanya dilakukan pada salah satu sisinya[1]
Definisi 3.
Diberikan suatu himpunan yang terurut himpunan sebagai S = {S1, S2, ……., ST}, T pada anggota S merupakan linear order, sehingga stack dari himpunan tersebut memiliki informasi sebagai berikut [1] :
1. Elemen puncak dari stack dalam himpunan S dikatakan sebagai TOP, sehingga :
TOP[S} = ST ............................................................................(1)
2. Banyaknya elemen stack dalam himpunan S dikatakan sebagai NOEL, sehingga NOEL = T, dimana himpunan dari S tersebut dapat disusun sebagai :
S = {S1, S2, .........., SNOEL} .............................(2)
Dari dua definisi tersebut di atas maka suatu stack dapat digambarkan sebagai berikut :
1. Suatu stack dalam keadaan kosong akan memiliki informasi NOEL(S) = 0 dan TOP(S)= undefined.

S
2. Untuk stack yang bukan kosong, maka akan memiliki informasi seperti yang digambarkan di bawah ini dimana informasi yang ada adalah NOEL(S) = 1 dan TOP(S) = Merah

S
Untuk stack yang berisi lebih dari n jumlah data maka informasi yang ada pada stack tersebut berisikan NOEL(S) = 2 (jika berisi 2 data) dan TOP(S) = Biru seperti ditunjukan pada gambar di bawah ini :

S
Elemen-elemen yang berada dalam stack tersebut di atas, memiliki prinsip dasar dalam pengoperasiannya yaitu prinsip LIFO (Last In First Out) atau yang masuk paling belakang akan memiliki prioritas untuk keluar paling depan.
Suatu stack dapat digambarkan sebagai suatu array (larik) berdimensi satu yang elemen-elemennya berkisar antara 1 sampai n elemen. Dengan demikian jika suatu stack didefinisikan dengan n elemen maka dapat dikatakan jumlah maksimum dari stack atau NOEL(S) nya adalah n, sehingga penambahan elemen stack yang ke n+1 tidak diperkenankan atau stack tersebut dalam kondisi overflow. Hal tersebut juga berlaku untuk stack dengan nilai minimum yaitu NOEL(S) dari stack dalam kondisi 0, jika dilakukan operasi pengambilan elemen atas stack tersebut akan mengakibatkan stack tersebut dalam kondisi underflow. Dua kondisi tersebut merupakan dasar dalam merancang suatu aplikasi pemrograman komputer.

OPERASI DASAR PADA STACK
Dalam penggunaannya suatu stack memiliki beberapa operasi yang dapat diterapkan seperti membuat stack, penambahan eleme ke dalam stack, menghapusan elemen dari dalam stack, dan operasi lain yang berhubungan dengan stack tersebut. Adapun operasi-operasi dasar dari suatu stack adalah :
1. CREATE(stack)
2. ISEMPTY(stack)
3. PUSH(elemen,stack)
4. POP(stack)

CREATE
Operator ini berfungsi untuk membuat sebuah stack kosong dan didefinisikan bahwa :

NOEL(CREATE(S)) = 0 dan TOP(CREATE(S)) = null

ISEMPTY
Operator ini berfungsi untuk menentukan apakah suatu stack adalah stack kosong. Operasinya akan bernilai boolean, dengan definisi sebagai berikut :
ISEMPTY(S) = true, jika S adalah stack kosong
= false, jika S bukan stack kosong
atau
ISEMPTY(S) = true, jika NOEL(S) = 0
= false, jika NOEL(S) ¹ 0

Catatan : ISEMPTY(CREATE(S)) = true.

PUSH
Operasi ini merupakan operasi untuk menambahkan satu elemen dengan nilai X pada puncak suatu stack, sehingga posisi TOP(S) akan bernilai X, penerapan operasi push pasa suatu stack S akan berakibat overflow jika NOEL(S) dari stack tersebut telah bernilai maksimum.
Operator ini berfungsi untuk menambahkan satu elemen ke dalam stack. Notasi yang digunakan adalah :

PUSH(E,S)

Artinya : menambahkan elemen E ke dalam stack S.

Elemen yang baru masuk ini akan menempati posisi TOP.
Jadi : TOP(PUSH(E,S)) = E.
Akibat dari operasi ini jumlah elemen dalam stack akan bertambah, artinya NOEL(S) menjadi lebih besar atau stack menjadi tidak kosong (ISEMPTY(PUSH(E,S)) = false).

POP
Operasi ini berfungsi untuk menghapus satu elemen dari stack S, sehingga posisi NOEL(S) akan berkurang satu elemen, dan TOP(S) akan berubah. Operasi pop dapat menyebabkan kondisi underflow jika suatu stack S yang berada dalam kondisi minimum dikenakan operasi pop.
Operator ini berfungsi untuk mengeluarkan satu elemen dari dalam stack. Notasinya :
POP(S)

Elemen yang keluar dari dalam stack adalah elemen yang berada pada posisi TOP. Akibat dari operasi ini jumlah elemen stack akan berkurang atau NOEL(S) berkurang dan elemen pada posisi TOP akan berubah. Operator POP ini tidak dapat digunakan pada stack kosong, artinya :

POP(CREATE(S)) = error condition

Catatan : TOP(PUSH(E,S)) = E

DEKLARASI STACK PADA BAHASA PEMROGRAMAN
Dalam bahasa pemrograman, untuk menempatkan stack biasanya digunakan sebuah array. Tetapi perlu diingat di sini bahwa stack dan array adalah dua hal yang berbeda. Misalkan suatu variabel S adalah sebuah stack dengan 100 elemen. Diasumsikan elemen S adalah integer dan jumlah elemennya maksimum adalah 100 elemen. Untuk mendeklarasikan stack dengan menggunakan array, harus dideklarasikan pula variabel lain yaitu TOP_PTR yang merupakan indeks dari array. Variabel TOP_PTR ini digunakan untuk menyatakan elemen yang berada pada posisi TOP dalam stack tersebut. Selanjutnya gabungan kedua variabel ini diberi nama STACK_STRUCT. Kemudian didefinisikan bahwa :

NOEL(S) = TOP_PTR
ISEMPTY(S) = TRUE, jika TOP_PTR = 0 dan
FALSE, jika TOP_PTR > 0.

Maka bentuk deklarasinya dalam PASCAL adalah :

TYPE Stack_Struct = Record
Stack : array[1..100] of integer;
TopPtr : integer;
End;
VAR S : Stack_Struct;

Selanjutnya, untuk keperluan operasi PUSH dan POP harus dibuat suatu prosedur tersendiri, yaitu :

PROCEDURE PUSH(Eon : integer);
Begin
If (S.TopPtr 0) Then Begin
Eoff := S.Stack[S.TopPtr];
S.TopPtr := S.TopPtr – 1
End
Else Underflow_Condition
End;

Catatan :
Overflow adalah suatu keadaan di mana kita melakukan operasi PUSH terhadap stack dalam keadaan penuh. Underflow adalah keadaan di mana kita melakukan operasi POP terhadap stack kosong. Eon adalah elemen yang akan dimasukkan ke dalam stack dan Eoff adalah elemen yang akan dikeluarkan dari dalam stack.

PENGGUNAAN/APLIKASI STACK
Logika stack digunakan untuk menyelesaikan berbagai macam masalah. Antara lain digunakan pada compiler, operating system dan dalam program-program aplikasi. Berikut ini tiga buah contoh aplikasi stack, yaitu :

MATCHING PARENTHESES
Proses ini dilakukan compiler untuk memeriksa kelengkapan tanda kurung yang terdapat pada suatu ekspresi aritmetik. Sedangkan stack di sini digunakan sebagai tempat prosesnya. Algoritma yang digunakan adalah :

1. Elemen-elemen suatu ekspresi aritmetik (string) di-Scan dari kiri ke kanan.
2. Jika ditemukan simbol “(” atau “Left parenthesis”, maka simbol tersebut di-push ke dalam stack.
3. Jika ditemukan simbol “)” atau “Right parenthesis”, maka isi stack diperiksa.
Ÿ Jika stack kosong à terjadi kesalahan.
berarti : ada simbol “)”, tetapi tidak ada simbol “(” yang seharusnya mendahului.
Ÿ Jika stack tidak kosong à artinya ada pasangannya dan langsung di-POP keluar stack.

Misalkan NEXT CHAR adalah suatu karakter terakhir dalam suatu string. Berikut ini bentuk flowchart (logika proses) yang digunakan pada proses matching ini :

LINEAR LIST
Linear List adalah suatu struktur data yang merupakan himpunan terurut. Misal didefinisikan suatu linear list A yang terdiri atas T buah elemen sebagai berikut :

A = [a1, a2, .........., aT]

Jika T = 0, maka A dikatakan sebagai “Null List”.
Suatu elemen dari sembarang posisi pada linear list A dapat dihilangkan. Sebaliknya, suatu elemen baru dapat dimasukkan ke dalam list dan dapat menempati sembarang posisi pada list tersebut. Jadi suatu linear list dapat berkurang atau bertambah setiap saat.

NOTASI POSTFIX
Bentuk aplikasi stack yang lain adalah mengubah suatu ekspresi aritmatik (string) ke dalam notasi postfix. Notasi postfix ini digunakan oleh compiler untuk menyatakan suatu ekspresi aritmatik dalam bahasa tingkat tinggi (high level language). Stack digunakan oleh compiler untuk mentransformasikan ekspresi aritmatik menjadi suatu ekspresi dalam bentuk/notasi postfix.

Contoh :
Misal diberikan ekspresi aritmatik : A + B ;
Maka bentuknya dalam notasi postfix menjadi : AB+
Urutan (prioritas) dari operator adalah :
1. Perpangkatan (^)
2. Perkalian (*) atau Pembagian (/)
3. Penjumlahan (+) atau Pengurangan (-)

Aturan yang digunakan dalam proses transformasi tersebut adalah :
1. Ekspresi aritmatik yang diberikan di- “Scan” dari kiri ke kanan.
2. Bila simbol yang di-scan adalah “(“, maka simbol tersebut di push ke dalam stack.
3. Bila simbol yang di-scan adalah “)”, maka seluruh isi stack di pop keluar mulai dari simbol “(” yang pertama ditemukan dalam stack.
4. Bila simbol adalah operator, maka dilakukan perbandingan dulu dengan simbol (operator) yang berada pada posisi top dalam stack.
a. Jika derajatnya setara atau lebih rendah dari simbol yang berada pada posisi top, maka top stack di-pop keluar sebagai output dan simbol yang baru di-push ke dalam stack.
b. Jika derajatnya lebih tinggi dari simbol yang berada pada posisi top, maka simbol (operator) yang di-scan tersebut di-push ke dalam stack.
5. Bila simbol yang di-scan adalah operand, maka simbol tersebut langsung sebagai output.
6. Bila simbol adalah “;” maka seluruh isi stack di-pop sebagai output.

Contoh :
Misal diberikan sebuah ekspresi aritmatik dengan bentuk sbb:

( (A + B) * C / D + E ^ F ) / G ;

Selanjutnya akan dicari bentuk ekspresi diatas dalam notasi postfix.
Proses yang dilakukan dapat digambarkan dalam tabel berikut :

Urutan
Proses
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Simbol
Yang di
Scan

(

(

A

+

B

)

*

C

/

D

+

E

^

F

)

/

G

;
Top
(
(
(
+
+
(
*
*
/
/
+
+
^
^

/
/

(
(
(
(

(
(
(
(
(
(
+
+

(
(

(
(

Output

A

B
+

C
*
D
/
E

F
^+

G
/

Jadi ekspresi aritmatik : ( ( A + B ) * C / D + E^F ) / G ;
dalam notasi postfix menjadi : AB+D*C/EF^+G/

n PROSES REKURSIF

Stack juga dapat digunakan untuk menelurusuri suatu program atau procedure yang rekursif.

Berikut ini sebuah contoh yang menyelesaikannya menggunakan proses rekursif.

Persoalan :
Agar diperoleh uang sebanyak 1.000.000 rupiah pada 25 tahun yang akan datang, berapakah banyak uang yang harus didepositokan saat ini. dianggap bahwa tingkat bunga tidak berubah selama 25 yahun yaitu sebesar 8% per_tahun.

Penyelesaian :
Untuk menyelesaikan masalah ini akan digunakan logika stack yatiu :
- pada tahun ke-25 jumlah uang = Rp. 1.000.000,-
- pada tahun ke-24 jumlah uang = Rp. 1.000.000 / (1 + 0.8)
- pada tahun ke-23 jumlah uang =
.
dst

Berikut ini sebuh program PASCAL yang mengandung suatu procedure rekursif untuk menghitung jumlah uang diinginkan.

PROGRAM DEPOSITO ;
CONST Goal = 1000000;
Rate = 0.08;
VAR Ju : Real;
Thn: Integer;

PROCEDURE Hitung (VAR Thn : Integer);
BEGIN
IF (Thn > 0) THEN
BEGIN
Ju := Ju/(1.0 + Rate);
Thn := Thn – 1;
Hitung(Thn);
END;
END;
BEGIN
Thn := 25;
Ju := Goal;
HITUNG(Thn);
WRITE(Ju);
END.
Pemanggilan pertama procedure HITUNG dimana nilai Thn =25

Pemanggilan kedua procedure HITUNG dimana nilai Thn = 24

Pemanggilan ketiga procedure HITUNG, dimana nilai Thn = 23

Setelah 25 kali pemanggilan procedure HITUNG keadaan stack adalah :

MAPPING KE STORAGE DARI STACK
Bentuk mapping ke storage dari stack yang paling sederhana adalah dengan menggunakan pendekatan array satu dimensi. Hal ini karena sarana yang digunakan untuk menyatakan suatu stack adalah array.
Jika diberikan stack S dengan m elemen maka bentuk mappingnya seperti mapping array satu dimensi dengan m elemen.

Selanjutnya jika terdapat dua stack S1 dan S2 masing-masing dengan jumlah maksimum elemennya adalah M dan N, maka kedua stack ini dialokasikan dalam dengan bentuk sbb:

Konsep mapping seperti diatas dianggap tidak efisien, terutama jika S1 dan S2 tidak penuh pada saat yang bersamaan.

Cara dianggap lebih baik adalah :
Jika diketahui bahwa jumlah elemen S1 dan S2 tidak melebihi jumlah tertentu, misal N.

NOEL(S1) + NOEL(S2) <= N

Maka bentuk mapping yang digunakan adalah :

Sumber :

http://mugi.or.id/blogs/oke/archive/2008/08/27/aplikasi-stack-pada-struktur-data-untuk-mengkonversikan-notasi-infix-menjadi-notasi-postfix.aspx

http://www.google.co.id/#hl=id&q=deklarasi+stack+dalam+bahasa+pemrograman&meta=cr%3DcountryID&aq=&oq=deklarasi+stack+dalam+bahasa+pemrograman&fp=7e99b3a5df14a093

Array dan Range

1.Array dimensi satu dan banyak
Sebuah array dimensi satu yang misalnya kita beri nama nilai , dapat kita bayangkan berbentuk seperti gambar dibawah ini
Nilai ( 1 ) Nilai ( 2 ) Nilai ( 3 ) – - – Nilai ( n )
Subscript atau indeks dari elemen array menyatakan posisi, elemen pada urutan dalam array tersebut.
Notasi yang digunakan bagi elemen array biasanya adalah nama array dilengkapi dengan subscript. Harga minimum dari subscript dari array disebut batas bawah ( lower bound ), sedangkan harga maksimumnya disebut dengan batas atas ( upper bound ).
Array dimensi banyak ( multi dimensional array ) didefenisikan sebagai sebuah array yang elemennya berupa array juga. Untuk itu diperlukan dua buah subscript, ddimana subscript yang pertama digunakan untuk menyatakan posisi baris sedangkan subscript yang kedua digunakan untuk posisi kolom.
Seperti halnya pada array berdimensi satu, pada array berdimensi dua batas bawah untuk subscript I maupun J dapat diambil secara umum.
Yang dimaksud dengan cross section suatun array berdimensi dua adalah pengambilan salah satu subscript, misalnya subscript baris untuk tetap( konstan ), sedangkan subscriptnya yang satu lagi kita ubah-ubah sepanjang rangenya, dimana notasi yang umum digunakan adalah notasi * ( asterisk ) bagi subscript yang berubah-ubah nilaianya tersebut.
Transpose dari suatu array dimensi dua adalah penulisan baris menjadi kolom ataun kolom menjadi baris dari suatu array.
Contoh :
Transpose dari array berorder A x V adalah array berorder V x A

2. Deklarasi Array dalam bahasa pemprograman

a. Deklarasi array 1 dimensi
Bentuk umum dari deklarasi tipe array adalah :

type pengenal = array [tipe_index] of tipe;

dengan pengenal : nama tipe data
tipe_index : tipe data untuk nomor index
tipe : tipe data komponen

Parameter tipe_index menentukan banyaknya komponen array tersebut. Berikut contoh dari deklarasi :

type vek = array [1…..100] of integer;

menunjukkan bahwa vek adalah nama-pengenal/variabel yang berupa array yang komponennya bertipe integer dan banyaknya 100 buah.
Deklarasi yang demikian ini disebut deklarasi array dimensi satu, yang disebut vektor.

2.deklarasi array 2 dimensi
type tabel = array [1..3, 1..4] of real;
tabel(3,4)
artinya terdapat variabel yang bernama tabel yang di deklarasikan sebagai array dimensi dua dengan jumlah maksimal barisnya = 3 dan kolom = 4; serta tipe komponen datanyaadalah real.

c. Deklarasi array 3 Dimensi
type tabel = array [1..3, 1..4] of real;
tabel(3,4)
artinya terdapat variabel yang bernama tabel yang di deklarasikan sebagai array dimensi dua dengan jumlah maksimal barisnya = 3 dan kolom = 4; serta tipe komponen datanyaadalah real.

3. Pemetaan Array ke Storage

Seperti halnya struktur data yang lain, ada beberapa cara untuk menyajikan array di dalammemori. Skema penyajian dapat dievaluasi berdasarkan
4 karakteristik, yakni:
1. kesederhanaan dari akses elemen
2. mudah untuk ditelusuri
3. efisiensi dari utilitasi storage
4. mudah dikembangkan
Umumnya tidaklah mungkin untuk mengoptimalkan keempat faktor tersebut
sekaligus. Pandang array satu dimensi NOPEG dengan batas bawah subscript 1, dan batas atas subscript = N. Salah satu cara untuk menyimpan array ini adalah sedemikian sehingga urutan fisik dari elemen sama dengan urutan logik dari elemen. Storage untuk elemenNOPEG(I+1) adalah berdampingan dengan storage untuk elemen NOPEG(I), untuksetiap I = 1, 2, 3,…, N-1. Untuk menghitung alamat (address) awal dari elemen NOPEG(I), diperlukan untuk mengetahui 2 hal yakni:
1. address awal dari ruang storage yang dialokasikan bagi array tersebut.
2. ukuran dari masing-masing elemen array.
Address awal dari array, kita nyatakan dengan B, disebut juga base-location. Misalkan
bahwa masing-masing elemen dari array menduduki S byte. Maka, address awal dari elemenke-I adalah:
B + (I-1) * S
Sekarang kita perluas persamaan di atas untuk mendapat address dari elemen ke-I dari
array yang mempunyai batas bawah subscript tidak sama dengan 1. Perhatikan array Z(4:10),
maka address awal dari Z(6) adalah:
B + (64) * S
Untuk array Z2 (-2:2) misalnya, address awal dari Z2(l) adalah:
B + (I -(-2)) * S
Maka secara umum, untuk array:
ARRAY(L:U),
elemen ARRAY(I) mempunyai address awal
B + (U-L) *

4.TRINGULAR ARRAY (ARRAY SEGITIGA)

Akan kita tinjau beberapa aspek pelinearan suatu array yang khusus, yakni tringular array. Tringular array dapat merupakan upper tringular (seluruh elemen di bawah diagonal utama = 0) ataupun lower tringular (seluruh elemen di atas diagonal utama = 0).
Dalam array lower triangular dengan N baris, jumlah maksimum elemen 0 pada
baris ke-I adalah 1, karenanya total elemen 0, tidak lebih dari:
N
Σ I = N ( N+1) / 2
I =I
Rumus ini berlaku pula untuk array upper tringular dengan N baris. Kalau N besar,
alangkah baiknya kalau elemen nol tidak usah kita simpan dalam memori. Suatu pendekatanterhadap problema ini adalah dengan pelinearan array, dan dengan hanya menyimpanbagian array yang tidak nol.
Misalkan kita menyimpan array upper tringular T secara baris dalam array satu dimensi
S, dengan batas subscript I sampai N(N+I)/2. Elemen T(1,1) disimpan sebagai S(1), elemenT(1,2) sebagai S(2) dan seterusnya, sehingga elemen T(1,N) disimpan sebagai S(N). Maka elemen T(2,2) disimpan sebagai S(N+1) (karena T(2,1) = 0). Terakhir sekali, elemenT(N,N) akan disimpan sebagai S(N(N+1)/2).
Kadang-kadang suatu program menggunakan lebih dari satu array tringular. Untuk
itu kita dapat menyimpan 2 array sekaligus. Misalnya array A upper triangular berorder Nx N dan array B lower triangular berorder (N-1) x (N-1). Mereka dapat kita simpan
sebagai array C berorder N x N. Di sini C(l,J) = A(l,J) untuk I = J. Sekarang apabila array A upper tringular berorder N x N sedangkan array B lower tringular, juga berorder N x N, maka array C yang mengandung keduanya harus berorder N x (N+1). Di sini elemen A(I,J) disimpan sebagai C(I,J+1) untuk I = J.

5.Definisi RECORD
Sebuah record merupakan koleksi satuan data yang heterogen, yakni terdiri dari berbagai
type. Satuan data tersebut sering disebut sebagai field dari record. Field dipanggil dengan
menggunakan namanya masing-masing. Suatu field dapat terdiri atas beberapa subfield.
Sebagai Contoh, data personalia dari seorang pegawai suatu perusahaan di Amerika Serikat,merupakan sebuah record yang dapat terdiri dari berbagai field, dan subfield seperti berikut ini:
1. NOMOR-JAMINAN-SOSIAL
2. NAMA, yang terdiri atas:
NAMA-BELAKANG
NAMA-DEPAN
NAMA-TENGAH
3. ALAMAT, terdiri atas:
JALAN
NOMOR RUMAH
NAMA-JALAN
KOTA
NEGARA-BAGIAN
KODE-POS
4. MENIKAH
dan sebagainya lagi.
Pada record tersebut di atas, satuan data seperti NAMA BELAKANG ataupun KOTA
merupakan tipe data string, sedangkan data lain seperti GAJI POKOK, TUNJANGAN
JABATAN dan berbagai data yang akan diolah secara matematis akan disimpan dengan
tipe data numerik, bisa integer maupun real. Data MENIKAH bisa digunakan tipe data
boolean atau logikal.
Seperti telah kita paparkan terdahulu, array berbeda dengan record, yakni array bersifat
homogen (terdiri dari tipe data yang sama), dan komponen array tidak memiliki nama
sendiri, dan hanya diberi identifikasi oleh posisi mereka di dalam array. Penggunaan
keduanya di dalam program juga berbeda, jika penggunaan array pada umumnya akan
disimpan di memori utama komputer (bersifat sementara), sedangkan record biasanya
digunakan dalam filing yang akan disimpan di memori sekunder komputer, seperti hard
disk, disket, dan lainnya.
Sebuah record memberi informasi tentang berbagai kondisi dari obyek padapermasalahan yang nyata sehari-hari. Setiap field memberi uraian tentang satu atribut dari
obyeknya. Sebuah record biasanya diberi identifikasi oleh key-nya. Key atau kunci adalah
salah satu atau lebih field yang dipilih untuk tujuan penyampaian informasi yang terjadi
di dalam record yang bersangkutan.
Koleksi dari record yang sama struktur fieldnya disebut suatu file atau berkas. Jadi, koleksi
dari record semua pegawai perusahaan membentuk sebuah file personalia. Pada umumnya
record disimpan membentuk file, dalam urutan sesuai dengan nilai dari key masing-masing.
Di dalam suatu file PERSONALIA, field NOMOR JAMINAN SOSIAL dari seorang pegawai
dapat digunakan sebagai key. Di dalam bahasa pemrograman tingkat tinggi, record dapat
dinyatakan sebagai struktur data (COBOL dan PL/1) dapat diadakan spesifikasi tentang
nama record, field dan subfield yang bersangkutan.

Selasa, 16 Maret 2010

Laba-laba yang Memanfaatkan Permukaan Air Layaknya Lantai Dansa

Laba-laba pemancing (Dolomedes triton) termasuk makhluk hidup paling berbakat dalam hal melakukan pekerjaan yang tampak sesulit berjalan di atas air. Laba-laba ini benar-benar memperlihatkan keajaiban makhluk hidup dengan cara berjalan di atas air yang mereka terapkan. Bagi laba-laba itu, permukaan air layaknya lantai dansa.

Laba-laba pemancing mengintai di sepanjang tepian kolam atau sungai, dan saat seekor serangga jatuh ke permukaan air, mereka berlari menyeberanginya untuk menyergap mangsa mereka. Selain itu, laba-laba itu juga bisa mencelupkan kaki mereka ke bawah permukaan air dan menangkap berudu dan ikan kecil yang sedang berenang.

Hal pertama yang harus dilakukan hewan-hewan dengan gaya hidup seperti itu adalah kemampuan berpijak di atas permukaan air. Laba-laba pemancing memanfaatkan tegangan permukaan air. Molekul-molekul air memiliki gaya tarik-menarik yang lebih besar dibandingkan dengan molekul-molekul di udara. Daya tarik-menarik molekul ini menjadikan permukaan air menyerupai lapisan karet. Ketika laba-laba meletakkan kakinya di atas air, tekanan berbentuk lesung terbentuk di sekeliling kakinya, dan air mendorong balik ke atas untuk meratakan kembali permukaannya.

Tegangan permukaan bukanlah sebuah gaya berkekuatan besar: misalnya, jika Anda melempar sebuah batu ke dalam air, batu itu akan segera tenggelam. Akan tetapi, laba-laba berbobot ringan dan kaki-kakinya memiliki lapisan luar lilin yang kedap air. Selain itu, mereka memiliki kaki yang panjang dan ini memungkinkannya berdiri di atas permukaan air. Karena tegangan permukaan menolak benda-benda di atas air dari titik terjauhnya, kaki yang panjang berarti tegangan permukaan yang lebih besar. (Itulah mengapa sebatang jarum tidak tenggelam tatkala diletakkan secara mendatar pada permukaan air).

Walaupun tegangan permukaan memungkinkan laba-laba pemancing bertumpu di atas permukaan air, tapi tegangan permukaan tidak memungkinkannya bergerak ke tempat lain. Kaki berlapis lilin sang laba-laba tidak pula mencukupinya untuk berjalan di atas permukaan air. Akan tetapi air menyediakan permukaan yang cukup licin bagi laba-laba untuk bergerak di atasnya.

Laba-laba Pemancing Melintas Dengan Mendayung

Laba-laba pemancing menggunakan 3 cara gerak yang berbeda saat melintas di atas air. Hasil penelitian yang dilakukan oleh Robert Suter dari Vassar College memperlihatkan bahwa laba-laba mendayung di atas air dengan menggunakan lesung yang dibuat kaki-kaki mereka di atas air. Ketika menggerakkan salah satu kakinya ke arah belakang laba-laba pemancing juga mendorong lesungnya ke belakang dengan kaki itu. Saat lesung ini bergerak, kaki laba-laba itu bertindak sebagai dayung dan memberikan tenaga yang mendorong air dan sang laba-laba ke depan. Selain itu, laba-laba itu menggunakan 2 kaki tengahnya dari 4 pasang kakinya untuk mendayung. Kaki depan dan kaki belakang dibiarkan tidak bergerak. Laba-laba menggunakan kaki-kaki ini untuk gerakan yang memungkinkan laba-laba itu berada di atas permukaan air.

Kecepatan laba-laba pemancing terbatas. Untuk meningkatkan kecepatan, seekor laba-laba membuat lesung-lesung yang lebih dalam atau mendorong lesung-lesung itu ke belakang dengan lebih cepat. Kedua cara ini memperbesar tekanan pada permukaan air, dan setelah batas tertentu tekanan ini melebihi tegangan permukaan dan lesung itu hancur.

Spesies Laba-laba Yang Melompat Dan Berlayar

Ada bentuk kedua dari cara-jalan yang dilakukan laba-laba. Apabila mereka harus berjalan dengan kecepatan melebihi 1 meter per detik, laba-laba harus beralih ke cara kedua ini. Mereka mengangkat kaki mereka hingga hampir tegak lurus, lalu menjatuhkannya dengan cara sedemikian rupa untuk menembus air. Ketika laba-laba mendorong kaki-kakinya ke bawah dan ke belakang, air melakukan reaksi berlawanan dan mendorong laba-laba itu ke atas dan ke depan. Gerakan ke atas mencegah laba-laba tenggelam, dan gerakan ke depan memungkinkannya bergerak maju. Gaya berjalan ini sangat menyerupai cara yang digunakan kadal basilisk ketika berlari di atas air.

Meskipun cara berjalan ini agak sulit bagi laba-laba pemancing, akan tetapi laba-laba itu melakukannya saat hendak menangkap mangsa, ketika harus bergerak cepat, atau untuk meloloskan diri dari musuh. Dalam keadaan yang jauh lebih mendesak, laba-laba itu beralih ke cara berjalan ketiga: berlayar…

Di saat ada angin berhembus laba-laba pemancing kadangkala melambaikan kaki-kakinya ke arah angin (laba-laba yang lebih kecil mengangkat seluruh tubuhnya), yang menyebabkan angin mendorongnya seperti kapal layar. Karena air di bawah tubuh laba-laba sangat licin, daya dorong terlemah mampu membawa laba-laba dari satu tempat ke tempat lainnya.

Penciptaan khusus dalam tubuh laba-laba pemancing dan aneka macam cara berjalan mereka hanyalah sedikit contoh yang memperlihatkan keahlian mencipta yang tak tertandingi serta pengetahuan mahatinggi dari Allah.


http://www.harunyahya.com/indo/artikel/090.htm

Lidah Bunglon Lebih Cepat daripada Pesawat Jet Tempur

Buku-buku teks zologi menjelaskan bahwa lidah balistik bunglon diperkuat oleh seutas otot pemercepat (akselerator). Otot ini memanjang ketika menekan ke bawah pada tulang lidah, yang berupa tulang rawan kaku di tengah lidah, yang membungkusnya. Akan tetapi, dalam sebuah penelitian yang telah disetujui untuk diterbitkan oleh majalah ilmiah Proceedings of the Royal Society of London (Series B), dua ahli morfologi yang memelajari kebiasaan makan bunglon menemukan unsur-unsur lain yang terkait dengan gerakan cepat lidah binatang ini. (1)

Kedua peneliti Belanda ini, Jurriaan de Groot dari Universitas Leiden, dan Johan van Leeuwen dari Universitas Wageningen, mengambil film-film sinar X berkecepatan tinggi, yakni 500 bingkai per detik, dalam rangka menyelidiki bagaimana lidah bunglon bekerja ketika menangkap mangsa. Film-film ini menunjukkan bahwa ujung lidah bunglon mengalami percepatan 50 g (g = konstanta gravitasi). Percepatan ini lima kali lebih besar daripada yang dapat dicapai oleh sebuah jet tempur.

Para peneliti ini membedah jaringan lidah dan menemukan bahwa otot pemercepat sama sekali tidak cukup kuat untuk menghasilkan gaya yang diperlukan ini sendirian. Dengan meneliti lidah bunglon, mereka menemukan keberadaan sedikitnya 10 bungkus licin, yang hingga saat itu belum diketahui, di antara otot pemercepat dan tulang lidah. Bungkus-bungkus ini, yang melekat ke tulang lidah di ujungnya yang terdekat dengan mulut, teramati mengandung serat-serat protein berajutan spiral. Serat-serat ini memadat dan berubah bentuk ketika otot pemercepat mengerut dan menyimpan tenaga bagaikan seutas pita karet yang tertekan. Ketika mencapai ujung bulat tulang lidah, bungkus-bungkus yang ketat dan memanjang ini secara bersamaan menggelincir dan mengerut dengan kekuatan dan melontarkan lidah. Secepat serat-serat ini menggelincir dari tulang lidah, bungkus-bungkus saling memisahkan diri bagaikan tabung-tabung sebuah teleskop, dan karena itu lidah mencapai jangkauan terjauhnya. Van Leeuwen berkata, “ini adalah ketapel teleskopis.”

Ketapel ini memiliki ciri lain yang amat menyolok. Ujung lidah mengambil bentuk hampa pada saat menghantam mangsa. Ketika terlontar, lidah ini dapat menjulur sejauh enam kali panjangnya ketika istirahat di dalam mulut, dan dua kali panjang tubuhnya sendiri.

Jelaslah bahwa bungkus-bungkus yang saling terhubung pada lidah bunglon ini tidak pernah dapat dijelaskan menurut evolusi. Dalam wacana itu, mari kita ajukan pertanyaan-pertanyaan berikut:

1. Bagaimanakah masing-masing bungkus ini berevolusi ke tempatnya yang benar?

2. Bagaimanakah lidah tumbuh sedemikian panjang?

3. Bagaimanakah otot pemercepat muncul?

4. Bagaimanakah bungkus-bungkus menyelaraskan gerak-geriknya sehingga membuat lidah mencapai panjang maksimumnya?

5. Bagaimanakah bungkus-bungkus menumbuhkan kemampuan untuk “memanjangkan diri bak tabung-tabung teleskop”?

6. Bagaimanakah binatang tersebut menyatukan semua bagian ini setelah “meluncurkan” lidah?

7. Jika lidah ini diperoleh sebagai sifat menguntungkan akibat proses evolusi, lalu mengapa sifat unggul ini tidak berkembang pada binatang-binatang lain dan mengapa binatang-binatang lain tidak memiliki cara berburu yang sama?

8. Bagaimanakah bunglon (atau binatang yang dianggap moyang peralihannya) dapat bertahan hidup ketika semua sistem yang rumit ini diduga pelan-pelan berevolusi? (2)

Seorang evolusionis tidak akan memiliki jawaban bagi pertanyaan-pertanyaan ini. Gambar di sebelah kiri, sebuah lukisan yang mewakili penampang melintang lidah bunglon, menyingkapkan bahwa sistem sempurna ini bergantung pada penciptaan yang amat khusus. Kelompok-kelompok otot dengan sifat-sifat yang berbeda secara tanpa cela melontarkan lidah, memercepatnya, menyebabkan lidah mengambil bentuk isap ketika menghantam mangsanya dan lalu cepat-cepat menariknya. Kelompok-kelompok otot ini sama sekali tidak saling menghalangi fungsi masing-masing, namun bekerja dengan cara yang terselaraskan dalam menghantam mangsa dan menarik lidah kembali ke mulut dalam waktu kurang dari sedetik. Tambahan lagi, berkat kerjasama antara sistem penglihatan dan otak, kedudukan mangsa diukur dan perintah bagi lidah balistik untuk “menembak!” diberikan oleh syaraf yang mengirimkan isyarat di dalam otak.

Sudah pasti, bunglon tidak dapat memikirkan dan merancang sendiri rancangan yang demikian rumit itu. Penciptaan ini menyingkapkan keberadaan Allah, Sang Mahatahu dan Mahakuasa. Tidak ada keraguan bahwa Allahlah, Yang Mahakuasa, Mahatahu, dan Mahabijaksana, Yang menciptakan bunglon.
http://www.harunyahya.com/indo/artikel/087.htm