Orang muda harus jatuh cinta sejatuh-jatuhnya, patah hati sepatah-patahnya, tertawa marah sedih rajin dan malas segila-gilanya,
tetapi,
...
dia harus segera bangkit, mendewasa, berdiri gagah, dengan bekas-bekas luka yang indah di wajah dan dada,
dan dengan anggun dan berwibawa,
dia berkata
Dengan kewenangan yang diberikan oleh Tuhan kepadaku,
dengarlah
AKULAH PENENTU KEBESARAN HIDUPKU SENDIRI.
novridianto saputra
Senin, 02 Agustus 2010
Minggu, 23 Mei 2010
10 aset pria yang bikin wanita tergila-gila
VIVAnews - Kehadiran seorang wanita adalah pelengkap dalam kehidupan seorang pria. Wanita bisa mempengaruhi sikap seorang pria menjadi seorang yang pemimpin, atau justru sebaliknya.
Ada pendapat sebagian wanita yang merasa, mereka bisa hidup tanpa kehadiran seorang pria. Namun, tak dapat dipungkiri, selain hal-hal yang dapat mereka lakukan sendiri, wanita juga sangat mencintai beberapa hal dalam diri seorang pria.
Apa saja yang bisa membuat wanita bertekuk lutut pada pria? Your Tango membeberkan 10 di antaranya.
1. Bentuk tubuh
Perbedaan tubuh antara wanita dan pria merupakan hal yang sangat menggoda kaum hawa. Tangan yang lebih besar, dada bidang dan tubuh yang tegap membuat wanita merasa terlindungi saat berada dekat pasangannya. Bentuk wajah lebih maskulin dan otot kuat adalah bentuk fisik yang membuat pria terlihat provokatif sekaligus seksi.
2. Kemampuan melakukan yang tak dapat dilakukan wanita
Bahkan wanita yang sangat mandiri sekalipun mudah menerima pasangan pria yang memanjakannya. Di samping itu, kekuatan fisik pria membuat mereka lebih kuat mengangkat benda-benda berat atau memusnahkan serangga yang sangat menjijikkan di mata wanita.
3. Sisi sensitif
Saat menyaksikan pria menangis, setiap wanita pasti merasa telah memenangkan hatinya. Air mata merupakan tanda keintiman ekstrem, dan fakta bahwa dia perduli dan mempercayai Anda. Sisi sensitif pria di balik tubuhnya menggambarkan kelembutan yang mampu membuat semua hati wanita meleleh.
4.Aroma
Aroma tubuh khas sehabis mandi, wangi aftershave, cologne dan aroma alami tubuh pria adalah sisi menarik seorang pria yang membangkitkan perasaan lawan jenis. Kombinasi yang seringkali membuat wanita penasaran untuk menyelami pria lebih jauh.
5. Otak
Secara ilmiah, otak pria berbeda dari otak wanita. Kemungkinan itu pula yang menyebabkan pria lebih cenderung menyukai olahraga, teknologi dan hal-hal teknis yang sulit disukai wanita. Perbedaan maskulin dan feminin inilah yang membuat kita terlihat istimewa di mata mereka.
6. Selera humor
Semua wanita menyukai seorang pria dengan rasa humor dan melontarkan lelucon. lewat selera humor pria memancarkan pesona yang membuat mereka dengan mudah menertawakan kekurangan dan tidak terlalu serius.
7. Sifat melindungi
Sikapnya yang melindungi saat dan menjaga saat menyeberang jalan atau membantu menuruni tanjakan membuat wanita merasa tersanjung. Meski bisa menjaga diri sendiri, sebuah perhatian pria akan membuat wanita merasa istimewa.
8. Pakaian
Pakaian khas pria seperti kemeja garis-garis biru atau sweater yang menampakkan bentuk tubuh mereka membuat wanita sering tergila-gila menatapnya.
9. Mengedepankan logika
Berbeda dengan wanita, pria sangat dipengaruhi logika dan akal sehat daripada emosi. Meskipun sedang marah, pria mampu mempertahankan sikap tenang di hadapan kita yang mungkin saja telah lepas kendali. Ketenangan pria membuat wanita merasa lebih aman.
10. Hasrat yang selalu menyala pada orang yang ia cintai
Saat mencintai seseorang, pria akan berusaha menjaga gairah mereka terhadap pasangan meski secara fisik telah banyak perubahan.
Bagi mereka, penampilan fisik bukan hal utama lagi, meski mereka akan senang jika pasangan memakai pakaian yang menunjukkan keseksian di hadapan mereka. Mereka akan menerima semua kekurangan dan kelebihan pasangan seperti wanita menerima hal sama.
Ada pendapat sebagian wanita yang merasa, mereka bisa hidup tanpa kehadiran seorang pria. Namun, tak dapat dipungkiri, selain hal-hal yang dapat mereka lakukan sendiri, wanita juga sangat mencintai beberapa hal dalam diri seorang pria.
Apa saja yang bisa membuat wanita bertekuk lutut pada pria? Your Tango membeberkan 10 di antaranya.
1. Bentuk tubuh
Perbedaan tubuh antara wanita dan pria merupakan hal yang sangat menggoda kaum hawa. Tangan yang lebih besar, dada bidang dan tubuh yang tegap membuat wanita merasa terlindungi saat berada dekat pasangannya. Bentuk wajah lebih maskulin dan otot kuat adalah bentuk fisik yang membuat pria terlihat provokatif sekaligus seksi.
2. Kemampuan melakukan yang tak dapat dilakukan wanita
Bahkan wanita yang sangat mandiri sekalipun mudah menerima pasangan pria yang memanjakannya. Di samping itu, kekuatan fisik pria membuat mereka lebih kuat mengangkat benda-benda berat atau memusnahkan serangga yang sangat menjijikkan di mata wanita.
3. Sisi sensitif
Saat menyaksikan pria menangis, setiap wanita pasti merasa telah memenangkan hatinya. Air mata merupakan tanda keintiman ekstrem, dan fakta bahwa dia perduli dan mempercayai Anda. Sisi sensitif pria di balik tubuhnya menggambarkan kelembutan yang mampu membuat semua hati wanita meleleh.
4.Aroma
Aroma tubuh khas sehabis mandi, wangi aftershave, cologne dan aroma alami tubuh pria adalah sisi menarik seorang pria yang membangkitkan perasaan lawan jenis. Kombinasi yang seringkali membuat wanita penasaran untuk menyelami pria lebih jauh.
5. Otak
Secara ilmiah, otak pria berbeda dari otak wanita. Kemungkinan itu pula yang menyebabkan pria lebih cenderung menyukai olahraga, teknologi dan hal-hal teknis yang sulit disukai wanita. Perbedaan maskulin dan feminin inilah yang membuat kita terlihat istimewa di mata mereka.
6. Selera humor
Semua wanita menyukai seorang pria dengan rasa humor dan melontarkan lelucon. lewat selera humor pria memancarkan pesona yang membuat mereka dengan mudah menertawakan kekurangan dan tidak terlalu serius.
7. Sifat melindungi
Sikapnya yang melindungi saat dan menjaga saat menyeberang jalan atau membantu menuruni tanjakan membuat wanita merasa tersanjung. Meski bisa menjaga diri sendiri, sebuah perhatian pria akan membuat wanita merasa istimewa.
8. Pakaian
Pakaian khas pria seperti kemeja garis-garis biru atau sweater yang menampakkan bentuk tubuh mereka membuat wanita sering tergila-gila menatapnya.
9. Mengedepankan logika
Berbeda dengan wanita, pria sangat dipengaruhi logika dan akal sehat daripada emosi. Meskipun sedang marah, pria mampu mempertahankan sikap tenang di hadapan kita yang mungkin saja telah lepas kendali. Ketenangan pria membuat wanita merasa lebih aman.
10. Hasrat yang selalu menyala pada orang yang ia cintai
Saat mencintai seseorang, pria akan berusaha menjaga gairah mereka terhadap pasangan meski secara fisik telah banyak perubahan.
Bagi mereka, penampilan fisik bukan hal utama lagi, meski mereka akan senang jika pasangan memakai pakaian yang menunjukkan keseksian di hadapan mereka. Mereka akan menerima semua kekurangan dan kelebihan pasangan seperti wanita menerima hal sama.
Selasa, 13 April 2010
Senin, 05 April 2010
kata bijak kehidupan
kata kata mutiara, kata bijak tentang kehidupan, semua kata di dunia.
Judul
Bahasa
Categories
Hak Cipta
Rating
link eksternal
Kalimat - kalimat ini adlah kalimat yang dapat menyejukan hati dan dapat dijadikan motivasi hidup.
Jadikanlah pengalaman anda sebagai pelajaran kehidupan. - Komang Leo Triandana Arizona
Kenanglah masa lalu dan hadapi masa depan. - Komang Leo Triandana Arizona
Masa depan itu tidak slalu lebih baik dari pada masa lalu, tapi persiapkanlah diri anda untuk hadapi masa depan, agar masa depan anda menjadi lebih baik dari pada masa lalu. - Komang Leo Triandana Arizona
Lebih baik kita dihargai dari pada kita dipuji. - Komang Leo Triandana Arizona
Cobalah sesuatu itu dari hal yang paling kecil atau mudah barulah anda mencoba untuk ke level selanjutnya. - Komang Leo Triandana Arizona
Kita bisa bukan hanya karena kita pandai, namun kita bisa karena kita biasa melakukannya. - Komang Leo Triandana Arizona
Dunia adalah komedi bagi mereka yang melakukannya, atau tragedi bagi mereka yang merasakannya. - Horace Walpole
Ketahuilah, apapun yang menjadikanmu tergetar, itulah Yang Terbaik untukmu ! Dan karena itulah, Qalbu seorang pecinta-Nya lebih besar daripada Singgasana-Nya. - Jalaludin Rumi
Sesungguhnya seseorang bisa disebut mandiri bukan lantaran ia sudah tidak lagi meminta, tapi lebih karena ia sudah bisa memberi harapan akan kembali diberi. - Anonim
Cinta yang sejati tidak terletak pada apa yang telah dikerjakan dan diketahui, namun pada apa yang telah dikerjakan namun tidak diketahui. - Anonim
Tak ada orang yang terlalu miskin sehingga tidak bisa memberikan pujian. - Anonim
Kesehatan selalu tampak lebih berharga setelah kita kehilangannya. - Jonathan Swift
Kita tidak bisa menjadi bijaksana dengan kebijaksanaan orang lain, tapi kita bisa berpengetahuan dengan pengetahuan orang lain. - Michel De Montaigne
Seorang konsultan psikologi paling jenius sekalipun tidak lebih mengerti tentang pikiran dan keinginan kita lebih daripada diri kita sendiri. - Anonim
Salah satu fungsi diplomasi adalah untuk menutupi kenyataan dalam bentuk moralitas. - Will Dan Ariel Dunant
Do all the goods you can, All the best you can, In all times you can, In all places you can, For all the creatures you can. - Anonim
Yang terpenting dari kehidupan bukanlah kemenangan namun bagaimana bertanding dengan baik. - Baron Pierre De Coubertin
Yang terpenting dalam Olimpiade bukanlah kemenangan, tetapi keikutsertaan ... - Baron Pierre De Coubertin
Hari ini Anda adalah orang yang sama dengan Anda di lima tahun mendatang, kecuali dua hal : orang-orang di sekeliling Anda dan buku-buku yang Anda baca. - Charles "tremendeous" Jones
Jika pekerjaan Anda lenyap, jati diri Anda tidak akan pernah hilang. - Gordon Van Sauter
Jangan biarkan jati diri menyatu dengan pekerjaan Anda. - Gordon Van Sauter
Ketika satu pintu tertutup, pintu lain terbuka; namun terkadang kita melihat dan menyesali pintu tertutup tersebut terlalu lama hingga kita tidak melihat pintu lain yang telah terbuka. - Alexander Graham Bell
Jenius adalah 1 % inspirasi dan 99 % keringat. Tidak ada yang dapat menggantikan kerja keras. Keberuntungan adalah sesuatu yang terjadi ketika kesempatan bertemu dengan kesiapan. - Thomas A. Edison
Sumber kekuatan baru bukanlah uang yang berada dalam genggaman tangan beberapa orang, namun informasi di tangan orang banyak. - John Naisbitt
Uang merupakan hamba yang sangat baik, tetapi tuan yang sangat buruk. - P.t. Barnum
Ingatlah, semua ini diawali dengan seekor tikus, Tanpa inspirasi.... kita akan binasa. - Walt Disney
Kita ada di sini bukan untuk saling bersaing. Kita ada di sini untuk saling melengkapi. - Bill Mccartney
Saat menghadapi kesulitan, beberapa orang tumbuh sayap, sedang yang lain mencari tongkat penyangga. - Harold W. Ruoff
Jika kita sungguh-sungguh menginginkan cinta, maka cintalah pada akhirnya yang justru menunggu kita. - Oscar Wilde
Kebebasan itu berasal dari manusia, tidak dari undang-undang atau institusi. - Clarence Darrow
Lebih mudah menambahkan sesuatu pada reputasi yang besar daripada untuk memperoleh reputasi itu sendiri. - Publius Syrus
Ketika kita menjadi tua, waktu akan membuat kita dikelilingi oleh orang-orang yang mencintai kita, sebagai ganti dari orang-orang yang kita cintai. - J. Petit Senn
Tak melakukan apa-apa merupakan kekuatan setiap orang. - Samuel Johnson
Keberanian bukanlah ketidakhadiran rasa takut, tetapi melakukannya - Montaigne
Kegagalan biasanya merupakan langkah awal menuju sukses, tapi sukses itu sendiri sesungguhnya baru merupakan jalan tak berketentuan menuju puncak sukses. - Lambert Jeffries
kata kata mutiara, kata bijak tentang kehidupan, semua kata di dunia.
Judul
Bahasa
Categories
Hak Cipta
Rating
link eksternal
Halaman sebelumnya / 2
Pastikanlah bahwa kepala Anda tidak lebih tinggi dari topi Anda. - Vergill
Tempat untuk berbahagia itu di sini. Waktu untuk berbahagia itu kini. Cara untuk berbahagia ialah dengan membuat orang lain berbahagia. - Robert G. Ingersoll
Keberanian bukanlah ketidakhadiran rasa takut, tetapi melakukannya. - Montaigne
Sifat Cinta: 1. Tidak membeda-bedakan 2. Cuma-cuma atau tanpa pamrih 3. Ketidaksadaran diri 4. Bebas - Anthony De Mello Sj
Hanya ikan yang bodoh yang bisa dua kali kena pancing dengan umpan yang sama. -
Kebanyakan dari kita yakin bisa membuat orang lain bahagia dengan cara yang kita tentukan. - Robert S. Lynd
Jika kita sungguh-sungguh menginginkan cinta, maka cintalah pada akhirnya yang justru menunggu kita. - Oscar Wilde
Orang yang tidak bisa memaafkan orang lain sama saja dengan orang yang memutuskan jembatan yang harus dilaluinya, karena semua orang perlu di maafkan. - Thomas Fuller
Ada dua hal yang harus Anda lupakan: Kebaikan yang Anda lakukan kepada orang lain dan kesalahan orang lain kepada Anda. - Sai Baba
Suatu kehidupan yang penuh kesalahan tak hanya lebih berharga namun juga lebih berguna dibandingkan hidup tanpa melakukan apapun. - George Bernard Shaw
Pengetahuan ada dua macam : yang telah kita ketahui dengan sendirinya atau yang hanya kita ketahui dimana ia bisa didapatkan. - Samuel Johnson
Judul
Bahasa
Categories
Hak Cipta
Rating
link eksternal
Kalimat - kalimat ini adlah kalimat yang dapat menyejukan hati dan dapat dijadikan motivasi hidup.
Jadikanlah pengalaman anda sebagai pelajaran kehidupan. - Komang Leo Triandana Arizona
Kenanglah masa lalu dan hadapi masa depan. - Komang Leo Triandana Arizona
Masa depan itu tidak slalu lebih baik dari pada masa lalu, tapi persiapkanlah diri anda untuk hadapi masa depan, agar masa depan anda menjadi lebih baik dari pada masa lalu. - Komang Leo Triandana Arizona
Lebih baik kita dihargai dari pada kita dipuji. - Komang Leo Triandana Arizona
Cobalah sesuatu itu dari hal yang paling kecil atau mudah barulah anda mencoba untuk ke level selanjutnya. - Komang Leo Triandana Arizona
Kita bisa bukan hanya karena kita pandai, namun kita bisa karena kita biasa melakukannya. - Komang Leo Triandana Arizona
Dunia adalah komedi bagi mereka yang melakukannya, atau tragedi bagi mereka yang merasakannya. - Horace Walpole
Ketahuilah, apapun yang menjadikanmu tergetar, itulah Yang Terbaik untukmu ! Dan karena itulah, Qalbu seorang pecinta-Nya lebih besar daripada Singgasana-Nya. - Jalaludin Rumi
Sesungguhnya seseorang bisa disebut mandiri bukan lantaran ia sudah tidak lagi meminta, tapi lebih karena ia sudah bisa memberi harapan akan kembali diberi. - Anonim
Cinta yang sejati tidak terletak pada apa yang telah dikerjakan dan diketahui, namun pada apa yang telah dikerjakan namun tidak diketahui. - Anonim
Tak ada orang yang terlalu miskin sehingga tidak bisa memberikan pujian. - Anonim
Kesehatan selalu tampak lebih berharga setelah kita kehilangannya. - Jonathan Swift
Kita tidak bisa menjadi bijaksana dengan kebijaksanaan orang lain, tapi kita bisa berpengetahuan dengan pengetahuan orang lain. - Michel De Montaigne
Seorang konsultan psikologi paling jenius sekalipun tidak lebih mengerti tentang pikiran dan keinginan kita lebih daripada diri kita sendiri. - Anonim
Salah satu fungsi diplomasi adalah untuk menutupi kenyataan dalam bentuk moralitas. - Will Dan Ariel Dunant
Do all the goods you can, All the best you can, In all times you can, In all places you can, For all the creatures you can. - Anonim
Yang terpenting dari kehidupan bukanlah kemenangan namun bagaimana bertanding dengan baik. - Baron Pierre De Coubertin
Yang terpenting dalam Olimpiade bukanlah kemenangan, tetapi keikutsertaan ... - Baron Pierre De Coubertin
Hari ini Anda adalah orang yang sama dengan Anda di lima tahun mendatang, kecuali dua hal : orang-orang di sekeliling Anda dan buku-buku yang Anda baca. - Charles "tremendeous" Jones
Jika pekerjaan Anda lenyap, jati diri Anda tidak akan pernah hilang. - Gordon Van Sauter
Jangan biarkan jati diri menyatu dengan pekerjaan Anda. - Gordon Van Sauter
Ketika satu pintu tertutup, pintu lain terbuka; namun terkadang kita melihat dan menyesali pintu tertutup tersebut terlalu lama hingga kita tidak melihat pintu lain yang telah terbuka. - Alexander Graham Bell
Jenius adalah 1 % inspirasi dan 99 % keringat. Tidak ada yang dapat menggantikan kerja keras. Keberuntungan adalah sesuatu yang terjadi ketika kesempatan bertemu dengan kesiapan. - Thomas A. Edison
Sumber kekuatan baru bukanlah uang yang berada dalam genggaman tangan beberapa orang, namun informasi di tangan orang banyak. - John Naisbitt
Uang merupakan hamba yang sangat baik, tetapi tuan yang sangat buruk. - P.t. Barnum
Ingatlah, semua ini diawali dengan seekor tikus, Tanpa inspirasi.... kita akan binasa. - Walt Disney
Kita ada di sini bukan untuk saling bersaing. Kita ada di sini untuk saling melengkapi. - Bill Mccartney
Saat menghadapi kesulitan, beberapa orang tumbuh sayap, sedang yang lain mencari tongkat penyangga. - Harold W. Ruoff
Jika kita sungguh-sungguh menginginkan cinta, maka cintalah pada akhirnya yang justru menunggu kita. - Oscar Wilde
Kebebasan itu berasal dari manusia, tidak dari undang-undang atau institusi. - Clarence Darrow
Lebih mudah menambahkan sesuatu pada reputasi yang besar daripada untuk memperoleh reputasi itu sendiri. - Publius Syrus
Ketika kita menjadi tua, waktu akan membuat kita dikelilingi oleh orang-orang yang mencintai kita, sebagai ganti dari orang-orang yang kita cintai. - J. Petit Senn
Tak melakukan apa-apa merupakan kekuatan setiap orang. - Samuel Johnson
Keberanian bukanlah ketidakhadiran rasa takut, tetapi melakukannya - Montaigne
Kegagalan biasanya merupakan langkah awal menuju sukses, tapi sukses itu sendiri sesungguhnya baru merupakan jalan tak berketentuan menuju puncak sukses. - Lambert Jeffries
kata kata mutiara, kata bijak tentang kehidupan, semua kata di dunia.
Judul
Bahasa
Categories
Hak Cipta
Rating
link eksternal
Halaman sebelumnya / 2
Pastikanlah bahwa kepala Anda tidak lebih tinggi dari topi Anda. - Vergill
Tempat untuk berbahagia itu di sini. Waktu untuk berbahagia itu kini. Cara untuk berbahagia ialah dengan membuat orang lain berbahagia. - Robert G. Ingersoll
Keberanian bukanlah ketidakhadiran rasa takut, tetapi melakukannya. - Montaigne
Sifat Cinta: 1. Tidak membeda-bedakan 2. Cuma-cuma atau tanpa pamrih 3. Ketidaksadaran diri 4. Bebas - Anthony De Mello Sj
Hanya ikan yang bodoh yang bisa dua kali kena pancing dengan umpan yang sama. -
Kebanyakan dari kita yakin bisa membuat orang lain bahagia dengan cara yang kita tentukan. - Robert S. Lynd
Jika kita sungguh-sungguh menginginkan cinta, maka cintalah pada akhirnya yang justru menunggu kita. - Oscar Wilde
Orang yang tidak bisa memaafkan orang lain sama saja dengan orang yang memutuskan jembatan yang harus dilaluinya, karena semua orang perlu di maafkan. - Thomas Fuller
Ada dua hal yang harus Anda lupakan: Kebaikan yang Anda lakukan kepada orang lain dan kesalahan orang lain kepada Anda. - Sai Baba
Suatu kehidupan yang penuh kesalahan tak hanya lebih berharga namun juga lebih berguna dibandingkan hidup tanpa melakukan apapun. - George Bernard Shaw
Pengetahuan ada dua macam : yang telah kita ketahui dengan sendirinya atau yang hanya kita ketahui dimana ia bisa didapatkan. - Samuel Johnson
yang bikin wanita tertarik
Apa yang membuat Anda tertarik saat pertama kali bertemu pasangan? Mungkin, penampilan fisik menggoda yang bisa bikin hati Anda 'kepincut' padanya.
Tapi, bagi wanita tidak hanya penampilan fisik yang mampu merebut hati mereka. Lima hal yang ada dari pria ini juga punya andil besar dalam memikat hati wanita.
1. Kecerdasan
Kepintaran pria, atau otak 'encer' yang dimiliki si dia menunjukkan kejantannya. Pengetahun serta Wawasan luas yang dimiliki pria bisa bikin wanita merasa kagum, dan bangga bisa menggandeng pria cerdas.
2. Selera humor
Pria dengan lelucon memiliki pesona tersendiri. Sebab, selera humor bisa menunjukkan pada wanita si dia bisa bersikap luwes dan tidak kaku.
3. Sebagai pelindung wanita
Memiliki sikap melindungi adalah salah satu sikap pria yang disukai wanita. Cara pria memperlakukan wanita, misalnya mengulurkan tangan untuk membantu wanita saat menuju tanjakan curam, atau sekadar merangkul, bisa membuat wanita tersenyum. Perhatian pria memang bisa membuat hati wanita berbunga-bunga.
4. Penampilan
Wanita menyukai pria yang pintar memadupadankan busana yang dikenakannya, dan mau merawat dirinya. Tapi, tidak berlebihan, lho. Jangan sampai, perawatan yang dijalani si dia lebih banyak dan lebih detil ketimbang Anda.
5. Aroma dan bentuk tubuh
Lekukan tubuh pria sangat berbeda dari wanita, tentu mampu membuat Anda deg-degan saat melihatnya. Postur tubuh ideal pria dengan perut rata, dan lengan kekar, tidak hanya terlihat seksi tapi juga dianggap bisa melindungi wanita. Selain bentuk tubuh, aroma tubuh pria juga bisa menggoda wanita.
Tapi, bagi wanita tidak hanya penampilan fisik yang mampu merebut hati mereka. Lima hal yang ada dari pria ini juga punya andil besar dalam memikat hati wanita.
1. Kecerdasan
Kepintaran pria, atau otak 'encer' yang dimiliki si dia menunjukkan kejantannya. Pengetahun serta Wawasan luas yang dimiliki pria bisa bikin wanita merasa kagum, dan bangga bisa menggandeng pria cerdas.
2. Selera humor
Pria dengan lelucon memiliki pesona tersendiri. Sebab, selera humor bisa menunjukkan pada wanita si dia bisa bersikap luwes dan tidak kaku.
3. Sebagai pelindung wanita
Memiliki sikap melindungi adalah salah satu sikap pria yang disukai wanita. Cara pria memperlakukan wanita, misalnya mengulurkan tangan untuk membantu wanita saat menuju tanjakan curam, atau sekadar merangkul, bisa membuat wanita tersenyum. Perhatian pria memang bisa membuat hati wanita berbunga-bunga.
4. Penampilan
Wanita menyukai pria yang pintar memadupadankan busana yang dikenakannya, dan mau merawat dirinya. Tapi, tidak berlebihan, lho. Jangan sampai, perawatan yang dijalani si dia lebih banyak dan lebih detil ketimbang Anda.
5. Aroma dan bentuk tubuh
Lekukan tubuh pria sangat berbeda dari wanita, tentu mampu membuat Anda deg-degan saat melihatnya. Postur tubuh ideal pria dengan perut rata, dan lengan kekar, tidak hanya terlihat seksi tapi juga dianggap bisa melindungi wanita. Selain bentuk tubuh, aroma tubuh pria juga bisa menggoda wanita.
Jumat, 11 Desember 2009
ucapan selamat ulang tahun
Home / SMS ucapan
Ucapan Selamat Ulang Tahun
gambar ucapan ulang tahunPada nyari Ucapan Selamat Ulang Tahun yach. Kebetulan nie buat yang pada mampir disini, silahkan terusin ngebaca ucapan ini. Boleh dikirim lewat sms ucapan, atau diomongin langsung lewat telpon, atawa… lewat sepucuk surat? :-)
“Happy B’Day .. XXX !!. Jangan lupa telp gue ntar pas makan-makan. Thx! “
Selamat, qmu sudah makin tua satu tahun :)
Waktu berjalan tiada henti
mengiringi rembulan dan mentari
yang terbit nan tenggelam setiap hari
mengiringi usiamu yang terus bertambah dari hari ke hari
hingga saat ini…..
selamat ulang tahun….
Jln2 k kota Medan, oleh2nya buah tomat.
Hnya ini yg bs Ku ucapkan, Selamat Ulang Thn padamu sobat,,
Moga dg brtambahnya usia, XXX jd tmbah imoet,pjg umuR, sehat sllu, n sgala cita2 dpt trwjud, n bhgia sllu.
Cba hitung di kalkulator. Ambl( tgl klhiranmu) (x 4) (+ 13) (x 25) (- 200) (+ bln klhiranmu) (x 2)( – 40) (x 50) (+ 2 digit trakhir thn klahiranmu) (- 10500)
ADA SesWATU bWt qMu!!, coba yaaa :)
gambar ucapan ulang tahunLearn from yesterday, live for today, hope for tomorrow. Happy Birthday, may happiness, long life and prosperity be with you.
Sebenarnya ku ingin pergi menemuimu tapi ..cape deh
Sebenarnya ku ingin belikanmu kue ulang tahun tapi ..cape deh
Sebenarnya ku ingin pergi memberimu kecupan tapi ..cape deh
Sebenarnya ku ingin berikanmu kado tapi ..cape deh
Sebenarnya ku ingin pergi menemani malammu tapi ..cape deh
Sebenarnya ku ingin pikirkan hadiah terbaik buat ultahmu tapi.. cape deh
Maka kukirimkan sms ini sebagai hadiah ulang tahun kamu yang ke-XX agar aku ga… cape deh
Hii… met ultah yaa….
makin tua jangan makin jadi
uda tua jangan jadi keladi.
malu2 in ;p
met hari jadi……
semoga yang terbaik datang padamu mulai detik ini…
Seiring dering ring tone ini
berkuranglah pulsaku dan jatah hidupmu
nikmatilah apa yang tersisa
semoga bahagia ya ya ya…
Waktu bergulir..
Dtik berganti dtik…
HAri berganti hari..
Bulan berganti bulan..
Dan tanpa terasa 1 tahun sudah terlewati…
Dan kuingat sekarang adalah tahun ke …….. setelah kau lahir..
Dan q ingin menguvcapkan selamat ulang tahun untukmu..
~HAppy Birthday~
gambar ucapan ulang tahunSelamat Ulang Tahun…
ingatlah… jatah mu hidup di dunia sudah berkurang satu tahun…
coba flashback… berapa banyak dosa yang Qmu udah perbuat?
berapa banyak amal baik yang qmu persiapkan buat di akhirat?
berapa banyak waktu yang Qmu buang percuma?
semoga di jatah hidupmu yang makin berkurang ini Qmu bisa menjadi lebih baik…
Ucapan Selamat Ulang Tahun
gambar ucapan ulang tahunPada nyari Ucapan Selamat Ulang Tahun yach. Kebetulan nie buat yang pada mampir disini, silahkan terusin ngebaca ucapan ini. Boleh dikirim lewat sms ucapan, atau diomongin langsung lewat telpon, atawa… lewat sepucuk surat? :-)
“Happy B’Day .. XXX !!. Jangan lupa telp gue ntar pas makan-makan. Thx! “
Selamat, qmu sudah makin tua satu tahun :)
Waktu berjalan tiada henti
mengiringi rembulan dan mentari
yang terbit nan tenggelam setiap hari
mengiringi usiamu yang terus bertambah dari hari ke hari
hingga saat ini…..
selamat ulang tahun….
Jln2 k kota Medan, oleh2nya buah tomat.
Hnya ini yg bs Ku ucapkan, Selamat Ulang Thn padamu sobat,,
Moga dg brtambahnya usia, XXX jd tmbah imoet,pjg umuR, sehat sllu, n sgala cita2 dpt trwjud, n bhgia sllu.
Cba hitung di kalkulator. Ambl( tgl klhiranmu) (x 4) (+ 13) (x 25) (- 200) (+ bln klhiranmu) (x 2)( – 40) (x 50) (+ 2 digit trakhir thn klahiranmu) (- 10500)
ADA SesWATU bWt qMu!!, coba yaaa :)
gambar ucapan ulang tahunLearn from yesterday, live for today, hope for tomorrow. Happy Birthday, may happiness, long life and prosperity be with you.
Sebenarnya ku ingin pergi menemuimu tapi ..cape deh
Sebenarnya ku ingin belikanmu kue ulang tahun tapi ..cape deh
Sebenarnya ku ingin pergi memberimu kecupan tapi ..cape deh
Sebenarnya ku ingin berikanmu kado tapi ..cape deh
Sebenarnya ku ingin pergi menemani malammu tapi ..cape deh
Sebenarnya ku ingin pikirkan hadiah terbaik buat ultahmu tapi.. cape deh
Maka kukirimkan sms ini sebagai hadiah ulang tahun kamu yang ke-XX agar aku ga… cape deh
Hii… met ultah yaa….
makin tua jangan makin jadi
uda tua jangan jadi keladi.
malu2 in ;p
met hari jadi……
semoga yang terbaik datang padamu mulai detik ini…
Seiring dering ring tone ini
berkuranglah pulsaku dan jatah hidupmu
nikmatilah apa yang tersisa
semoga bahagia ya ya ya…
Waktu bergulir..
Dtik berganti dtik…
HAri berganti hari..
Bulan berganti bulan..
Dan tanpa terasa 1 tahun sudah terlewati…
Dan kuingat sekarang adalah tahun ke …….. setelah kau lahir..
Dan q ingin menguvcapkan selamat ulang tahun untukmu..
~HAppy Birthday~
gambar ucapan ulang tahunSelamat Ulang Tahun…
ingatlah… jatah mu hidup di dunia sudah berkurang satu tahun…
coba flashback… berapa banyak dosa yang Qmu udah perbuat?
berapa banyak amal baik yang qmu persiapkan buat di akhirat?
berapa banyak waktu yang Qmu buang percuma?
semoga di jatah hidupmu yang makin berkurang ini Qmu bisa menjadi lebih baik…
Jumat, 30 Oktober 2009
pointer c++
--- Penjelasan tentang pointer
pointer adalah built-in type di C dan C++, dimana C++ mengambil konsep pointer dari C. Pointer sebenarnya sangat terkait dengan "Abstract C Machine", yaitu model mesin abstrak dimana program C bekerja. Abstract C Machine adalah mesin abstrak dimana mesin tersebut memiliki prosesor untuk menginterpretasikan stream of instruction, dan addressable memory yang terbagi kedalam 3 bagian : automatic memory, static memory dan free memory. Addressable memory adalah memory yang konten-nya dapat diambil jika diketahui alamatnya. Lebih jauh lagi, terdapat asumsi bahwa konten memori dapat di ambil dengan waktu konstan, tidak peduli berapa nilai alamat.Hal ini disebut dengan Random Access Memory.
--- Penggunaan Awal Pointer
Jika variabel merupakan isi memori, dan untuk mengakses isi memori tersebut diperlukan address, lalu bagaimana cara kita mengetahui alamat dari suatu variabel ? Jawabannya adalah : untuk kebanyakan kasus kita sama sekali tidak perlu tahu alamat dari sebuah variabel. Untuk mengakses sebuah variabel kita hanya perlu nama dari variabel tersebut. Tugas kompiler lah yang mentranslasikan nama ke alamat mesin yang diperlukan oleh komputer.
Akan tetapi terdapat beberapa kasus dimana kita tidak mungkin memberi nama pada sebuah entitas di program kita. Hal ini terjadi terutama saat kita menggunakan data struktur dinamis seperti linked list, resizeable array, tree dan lain sebagainya. Hal ini karena kita tidak mungkin memberi nama terhadap entitas yang mungkin ada atau tidak ada. Struktur seperti linked list hampir mustahil dibuat tanpa pointer tanpa harus mendefinisikan LISP-like list.
Inilah awal mula penggunaan pointer sebagai moniker. Istilah moniker di sini berarti sesuatu yang menunjuk atau mengacu kepada entitas lain. Istilah moniker ini bukanlah istilah standard dan lazim , tetapi sesuatu yang saya pilih impromptu untuk membedakan dengan pointer atau reference yang sudah memiliki arti tersendiri.
Penggunaan lain pointer sebagai moniker adalah untuk mengatasi kelemahan bahasa C awal : Dahulu fungsi - fungsi di C hanya mengerti pass by value. Pointer digunakan untuk mengemulasi pass by reference karena pointer berisi alamat ke objek lain, sehingga fungsi tersebut dapat mengubah objek tersebut dengan memanipulasi pointer.
Pertanyaanya : siapa yang bertugas menentukan alamat objek yang di tunjuk oleh pointer dalam kasus ini ? jelas bukan kompiler karena objek tersebut tidak bernama. Apakah kita sebagai programmer menentukannya sendiri ? ternyata tidak. Hal tersebut ditentukan oleh fungsi malloc dan sejenisnya (dan juga new di C++), atau untuk kasus passing pointer ke dalam fungsi, operator &. Jadi dalam hal ini kita tidak juga menentukan alamat sebuah objek.
--- Builtin Array di C dan C++
Sebelum membahas array di C dan di C++, ada baiknya kita membahas tentang array. Array adalah asosiasi antara sebuah index dengan nilai. Jika diketahui sebuah index, kita akan mengetahui nilainya. Dari definisi ini :
1. Tidak disebutkan bahwa index harus integer, atau tipe tertentu.
2. Tidak disebutkan range dari indexnya dimulai dari nilai tertentu, Bahkan tidak disebutkan bahwa indeks nya memiliki batas bawah maupun batas atas.
3. Tidak disebutkan bahwa nilai harus disimpan secara contigous, bahkan tidak disebutkan bahwa nilainya harus di simpan sama sekali.
akan tetapi :
1. Banyak bahasa pemrograman yang di desain tahun 60-an hingga tahun 70-an menentukan bahwa index array adalah integer atau sesuatu yang bisa dikonversi menjadi integer atau sesuatu yang memiliki nilai berurutan seperti integer.
2. Beberapa bahasa menentukan bahwa array dimulai dengan nilai tertentu. contohnya di C, array dimulai dari 0 sementara di Pascal Array dimulai dari 1. Dalam Algo-68 programmer dapat menentukan sendiri batas- batas array. Akan tetapi dalam semua bahasa pemrograman mengakses nilai dengan indeks yang di luar batas dianggap sebagai programming error.
3. Semua bahasa pemrogramman yang saya tahu menyimpan elemen - elemen array di memory. beberapa bahasa, misalnya C, menjamin bahwa elemen - elemen tersebut disimpan dalam memory yang contigous.
Sekarang tipe yang lebih mendekati definisi awal array tersedia dengan nama associative array. Tipe ini didukung oleh beberapa bahasa seperti PHP dan JavaScript, dan juga tersedia dalam beberapa bahasa lain sebagai library ( seperti std::map di C++).
Kembali ke C dan C++ array, kita dapat tentukan beberapa property array : zero based, contigous dan convertible to pointer. Banyak alasan dengan dipilihnya property seperti ini, tapi yang paling penting adalah efisiensi, yang akan kita bicarakan sebentar lagi. setiap array dapat dikonversi menjadi pointer yang menunjuk ke elemen pertama. Hal ini sangat konvenien mengingat dynamic array diciptakan dengan alokasi memori dari free memory (dengan fungsi calloc, yang berarti contigous alloc. yang aneh adalah fungsi ini berperilaku mirip dengan malloc kecuali dia menginisialisasi memori dengan nol. ). Kemudian kita tahu bahwa elemen dalam array di simpan secara berurutan, dengan demikian alamat semua elemen array adalah ptr + n * sizeof(elemen). Dengan mendefinisikan pointer arithmatic, didapat kesamaan ar[idx] == *(ar + idx). hal ini menimbulkan sesuatu yang menarik , ar[idx] == *(ar + idx) == *(idx + ar) == idx[ar] (yes, it is valid C !!).
Operasi pointer arithmatic lain juga didefinisikan untuk pointer. yang menarik adalah increment dan decrement. programmer dapat memeriksa semua elemen dalam array dengan cara menginkremen pointer dari pointer penunjuk elemen pertama. Tentu saja hal yang sama dapat dilakukan dengan indexing biasa, ar[idx], akan tetapi dengan operasi pointer bisa lebih efisien. Alasannya terletak pada bagaimana cara komputer membaca data di ar[idx]. Untuk mesin yang memiliki indexed addressing hal ini cukup sederhana dan efisien (ar jadi base, idx jadi index, fetching cukup 1 instruksi mov). Tetapi untuk mesin yang tidak memiliki indexed addressing, akan ada operasi ADD antara ar dan idx, lalu simpan hasilnya ke suatu tempat (register), lalu baru mov. Kadang - kadang register tersebut digunakan untuk operasi ADD sehingga terdapat beberapa mov untuk menyimpan state. Akan tetapi jika menggunakan pointer arithmatic, cukup meng-increase nilai yang sudah ada di register, lalu mov. Tentu saja instruksi di dalam loop juga mempengaruhi efisiensi ini, tetapi untuk mesin yang mendukung operasi increment langsung, iterasi lewat pointer biasanya lebih efisien.
Ini adalah penggunaan pointer sebagai iterator. Nama iterator diambil dari STL, dan iterator di STL adalah abstraksi dari pointer. Yang menakjubkan adalah konsep iterator, yang digeneralisasi dari pointer, adalah konsep yang cukup powerful untuk merepresentasikan semua algoritma yang bekerja untuk linear container ( linear container adalah semua container yang memiliki iterator yang menunjuk pada elemen pertama, memiliki iterator yang menunjuk pada elemen one-past-end, dan semua elemen dapat dicapai dengan melakukan operasi incremen dari iterator penunjuk elemen pertama sebanyak yang diperlukan. Contoh linear container adalah array, vector, linked - list, dan deque. contoh yang bukan linear container adalah graph dan forest.).
---Fixed memory Location
Dalam pemrograman, kita dihadapkan pada beberapa situasi seperti :
- setelah startup, prosesor 80386 akan memulai eksekusi pada alamat ( ... lupa).
- Interrupt vector beberapa prosesor ditaruh pada alamat yang ditentukan oleh pembuat prosesor tersebut.
- Video Memory di DOS dimulai pada alamat (... lupa).
Situasi - situasi tersebut hanya mungkin terjadi jika kita memrogram "close to metal" e.g membuat operating system, atau kita memrogram dalam OS yang super primitif seperti DOS. Dalam kasus - kasus ini kita memerlukan pointer dengan alamat di set ke nilai tertentu. Ini adalah penggunaan pointer sebagai abstraksi alamat di hardware. Penggunaan ini adalah penggunaan pointer paling jarang.
--- So, What's a big deal about it ?
Ketiga fungsi pointer di atas memerlukan operasi yang berbeda- beda. Contohnya jika pointer berfungsi sebagai moniker, operasi yang sangat diperlukan adalah fungsi malloc, calloc, free, new, delete, operator ->, operator * dan operator &. sebagai moniker pointer tidak memerlukan konvertability ke integer dan operasi pointer arihmatic (walaupun ada trik mengakses field struct dari pointer dengan meng-cast pointer to struct menjadi char*, tambahkan offsetnya, lalu baca dengan operator * dan di cast ke tipe field tersebut. trik ini sangat berbahaya dan sebaiknya tidak dipakai ).
Jika pointer berfungsi sebagai iterator, operasi pointer arithmatic adalah esensial. Tetapi operasi new dan delete sama sekali tidak di perlukan (kecuali untuk array of pointer). bottom line is: you do not do memory management via iterator.
Sifat konvertibilitas antara integer dan pointer hanya diperlukan jika pointer tersebut dipakai sebagai abstraksi fixed address. Dua fungsi lain tidak memerlukan sifat ini.
--- Pointer in OOP
C++ mendukung OOP, akan tetapi pada saat yang sama juga kompatibel dengan C. Hal ini menimbulkan masalah. Akan tetapi sebelum melihat apa masalahnya, ada baiknya kita bahas sedikit tentang Polymorphism.
Polymorphism adalah jawaban untuk pertanyaan: bagaimana cara menulis fungsi atau prosedur yang tidak dibatasi oleh tipe. contohnya adalah fungsi average, fungsi ini menjumlahkan sejumlah elemen dan membaginya dengan banyaknya elemen. hal ini benar untuk banyak tipe termasuk integer, koordinat kartesian, bilangan kompleks, kuartenion, matrix ,dsb walau aturan penjumlahan tipe - tipe tersebut berbeda. Untuk bahasa yang tidak mendukung polymorphism, anda harus menulis fungsi seperti averageInt, averageMatrix, averageComplex, etc.
Dari sifatnya, polymorphism terbagi dua: ad-hoc polymorphism dimana polymorphism hanya bekerja pada tipe yang sudah ada. contoh mekanisme ad-hoc polymorphism adalah function dan operator overloading. Sedangkan true polymorphism atau parametric polymorphism dapat digunakan bahkan untuk tipe yang belum dispesifikasi. Perbedaan lainnya adalah untuk ad-hoc polymorphism biasanya anda harus menulis fungsi untuk semua tipe yang berpartisipasi dalam mekanisme polymorphism, sperti menulis average untuk integer, lalu untuk quartenion, lalu satu lagi untuk complex, dll. Sedangkan untuk parametric polymorphism anda hanya perlu menulis satu fungsi.
Dari binding-time nya, polymorphism dapat dibagi 2: static dan dynamic polymorphism. Static polymorphism menentukan fungsi mana yang akan di panggil (atau mungkin di generate ) pada saat kompilasi. Sedangkan dynamic polymorphism menentukan fungsi yang di panggil pada saat run-time. contoh static polymorphism adalah template, sedangkan contoh dynamic polymorphism adalah virtual function.
static polymorphism dapat dibagi menjadi predicative atau impredicative, tetapi hal ini tidak ada hubungannya dengan diskusi kita.
Untuk dynamic polymorphism, dapat dibagi lagi berdasarkan berapa banyak parameter yang berpengaruh dari penentuan fungsi. Jika hanya parameter pertama yang berpengaruh, hal ini disebut dengan single dispatch. Jika lebih dari satu, hal ini disebut dengan multimethod. multimethod yang dipengaruhi oleh dua parameter mempunyai nama khusus yaitu double dispatch. Harap perhatikan bahwa p->somefunc(a,b) itu secara prinsip sama dengan somefunc(p,a,b) dimana p adalah this parameter (walaupun semua kompiler akan mereject kalau anda mengganti fungsi seperti itu).
Dynamic Polymorphism juga dapat dibagi berdasarkan constraint nya menjadi dua: Subtyping Polymorphism dimana polymorphic type harus merupakan turunan dari satu base class yang merupakan sebuah interface yang menentukan sifat mana yang polymorphic. Yang lainnya adalah DuckTyping yang tidak memerlukan base class yang berfungsi sebagai interface. Dalam DuckTyping sebuah object dapat menerima message apa saja, walau jika object tersebut tak dapat merespond message tersebut objeck yang bersangkutan akan mengeluarkan error seperti DoesNotUnderstand message di SmallTalk. Untuk subtype polymorphism, hal ini tidak mungkin karena sebuah object hanya akan menghandle message yang didefinisikan di base class, dan kompiler akan mereject message lain.
Kembali ke bahasan kita, C++ mendukung Subtyping single dispatch dynamic Polymorphism. Jadi untuk dynamic polymorphism, semua tipe yang ingin digunakan secara polymorphic harus diturunkan dari satu base class. C++ juga mengharuskan semua fungsi yang bisa dipanggil secara polymorphic harus dideklarasikan virtual. Dan pemilihan fungsi yang diperlukan hanya ditentukan oleh satu parameter (this parameter) melalui mekanisme vtable.
So, what's the big deal ?
Masalahnya adalah untuk semua bahasa yang menggunakan subtype polymorphism, semua object harus bisa di akses melalui base class nya. Jadi kode berikut harus valid:
Code:
Parent p = create_child(); // asumsi nya create child menghasilkan
// object child;
Hal ini menimbulkan pertanyaan : Bagaimana caranya membuat kode di atas valid ?
Dalam bahasa pemrograman tradisional, ketika anda mendeklarasikan sebuah variabel, anda menciptakan instance dari sebuah tipe, kecuali jika dideklarasikan khusus. Di C
Code:
Sometype somevar;
artinya anda menciptakan sebuah objek somevar bertipe Sometype.
Code:
Sometype somevar2 = somevar;
artinya anda mengkopi nilai somevar ke somevar2
Code:
somevar2 == somevar; // OK, ini tidak didefinisikan di C untuk User Defined Type,
// but you got the idea
artinya anda membandingkan nilai somevar dengan nilai somevar2. Mari kita sebut ini value semantic, dimana sebuah variabel mengandung isi instance dari tipe tertentu.
Lalu perhatikan kode berikut :
Code:
Child child;
Parent parent = child;
See the problem ? Masalahnya adalah anda mencoba mengkopi nilai child ke variabel parent, tapi apa artinya operasi kopi tersebut ? jika berarti mengopi nilai byte by byte, implikasinya adalah ukuran parent dan child harus sama. Akan tetapi hal ini sulit atau tidak mungkin dipenuhi. Bila parent adalah pure interface, parent hampir tidak memiliki data member, tapi child akan memiliki data member untuk mendukung operasi - operasi method-nya.
Bagaimana cara mengatasinya ? salah satu cara yang populer adalah dengan tidak menggunakan value semantic. Di bahasa seperti Java, setiap variable adalah reference ke sebuah instance. Artinya:
1. Ketika anda mendeklarasikan sebuah variabel, anda tidak menginstansiasi sebuah object. object harus di instansiasi secara terpisah, biasanya lewat operator new.
2. Ketika anda mengkopi dua buah variabel, anda tidak mengkopi instance byte by byte, tapi hanya membuat dua reference mengacu pada object yang sama. Jika ingin menghasilkan kopi dari instance, biasanya anda menggunakan method seperti clone.
3. Ketika anda membandingkan dua buah variabel, anda hanya mengetahui apakah dua variabel tersebut merujuk pada objek yang sama atau tidak. jika anda ingin membandingkan nilainya, anda harus menggunakan method seperti equal.
let's call this reference semantic.
Masalahnya C++ karena berbagai alasan (salah satunya kompatibilitas dengan C) tidak mungkin mengadopsi reference semantic dan harus tetap menggunakan value semantic. Akan tetapi reference semantic sepertinya diperlukan untuk subtype polymorphism. so, what to do ? Ternyata Pointer adalah object yang dapat dipakai untuk mengemulasi reference semantic tanpa harus mengubah bahasa menggunakan reference semantic.
Dengan demikian dynamic polymorphism di C++ harus menggunakan pointer (atau reference, yang sebenarnya adalah pointer dengan sedikit perubahan sifat).
--- Bahaya Pointer
1. Bahaya yang mungkin ada dengan pointer sebagai moniker: memory leak, double delete, invalid memory access. Semuanya dapat dihindari dengan ownership analysis yang bagus (pada setiap saat, harus diketahui pihak mana yang bertanggung jawab mendelete sebuah object). Jika hal ini sulit dilakukan, misalnya karena shared ownership, anda dapat menggunakan smart pointer atau garbage collector.
2. Bahaya yang mungkin ada dengan pointer sebagai iterator: array out of bound. Salah satu cara yang efektif menghindari hal ini adalah dengan menggunakan standard algorithm.
3. Bahaya yang mungkin ada dengan pointer sebagai abstraksi fixed memory : Tidak tahu, tetapi ini bukan mainan sembarang programmer.
--- Bahasa Pemrograman tanpa pointer ?
1. Semua Bahasa pemrograman Fungsional, terutama yang murni , tidak mengenal pointer atau memerlukan pointer. Akan tetapi bahasa ini menggunakan model komputasi yang jauh berbeda, bukan abstract C machine.
2. Beberapa bahasa pemrograman dengan reference semantik dapat mengklaim mereka tidak memiliki pointer, akan tetapi setiap variabel sebenarnya adalah pointer. Secara fisik mungkin reference tidak memiliki struktur seperti pointer (biasanya merupakan data struktur yang lebih kompleks sehingga lebih friendly terhadap garbage collector) tapi reference tersebut memiliki fungsi yang mirip dengan pointer di C atau C++. Ada yang bilang bahwa reference dalam bahasa - bahasa ini menyebabkan optimasi lebih mudah karena tidak menyebabkan aliasing, tetapi optimasi tersebut juga mungkin dilakukan di C dan C++ ( dengan restrict pointer, sayangnya belum merupakan bagian dari standard C++).
Type dari variabel pointer y adalah int, yaitu mengikuti type dari variabel x. Untuk menandakan y adalah pointer, di depan variabel y pada saat deklarasi diberi tanda bintang (*) dan di depan x saya beri tanda and (&) yaitu return alamat dari x. Dengan demikian, jika kita panggil y tanpa bintang (*) maka kita akan mendapat alamat dari x, sedangkan jika kita panggil y dengan bintang (*) yaitu *y maka kita akan mendapatkan value dari x.
pointer adalah built-in type di C dan C++, dimana C++ mengambil konsep pointer dari C. Pointer sebenarnya sangat terkait dengan "Abstract C Machine", yaitu model mesin abstrak dimana program C bekerja. Abstract C Machine adalah mesin abstrak dimana mesin tersebut memiliki prosesor untuk menginterpretasikan stream of instruction, dan addressable memory yang terbagi kedalam 3 bagian : automatic memory, static memory dan free memory. Addressable memory adalah memory yang konten-nya dapat diambil jika diketahui alamatnya. Lebih jauh lagi, terdapat asumsi bahwa konten memori dapat di ambil dengan waktu konstan, tidak peduli berapa nilai alamat.Hal ini disebut dengan Random Access Memory.
--- Penggunaan Awal Pointer
Jika variabel merupakan isi memori, dan untuk mengakses isi memori tersebut diperlukan address, lalu bagaimana cara kita mengetahui alamat dari suatu variabel ? Jawabannya adalah : untuk kebanyakan kasus kita sama sekali tidak perlu tahu alamat dari sebuah variabel. Untuk mengakses sebuah variabel kita hanya perlu nama dari variabel tersebut. Tugas kompiler lah yang mentranslasikan nama ke alamat mesin yang diperlukan oleh komputer.
Akan tetapi terdapat beberapa kasus dimana kita tidak mungkin memberi nama pada sebuah entitas di program kita. Hal ini terjadi terutama saat kita menggunakan data struktur dinamis seperti linked list, resizeable array, tree dan lain sebagainya. Hal ini karena kita tidak mungkin memberi nama terhadap entitas yang mungkin ada atau tidak ada. Struktur seperti linked list hampir mustahil dibuat tanpa pointer tanpa harus mendefinisikan LISP-like list.
Inilah awal mula penggunaan pointer sebagai moniker. Istilah moniker di sini berarti sesuatu yang menunjuk atau mengacu kepada entitas lain. Istilah moniker ini bukanlah istilah standard dan lazim , tetapi sesuatu yang saya pilih impromptu untuk membedakan dengan pointer atau reference yang sudah memiliki arti tersendiri.
Penggunaan lain pointer sebagai moniker adalah untuk mengatasi kelemahan bahasa C awal : Dahulu fungsi - fungsi di C hanya mengerti pass by value. Pointer digunakan untuk mengemulasi pass by reference karena pointer berisi alamat ke objek lain, sehingga fungsi tersebut dapat mengubah objek tersebut dengan memanipulasi pointer.
Pertanyaanya : siapa yang bertugas menentukan alamat objek yang di tunjuk oleh pointer dalam kasus ini ? jelas bukan kompiler karena objek tersebut tidak bernama. Apakah kita sebagai programmer menentukannya sendiri ? ternyata tidak. Hal tersebut ditentukan oleh fungsi malloc dan sejenisnya (dan juga new di C++), atau untuk kasus passing pointer ke dalam fungsi, operator &. Jadi dalam hal ini kita tidak juga menentukan alamat sebuah objek.
--- Builtin Array di C dan C++
Sebelum membahas array di C dan di C++, ada baiknya kita membahas tentang array. Array adalah asosiasi antara sebuah index dengan nilai. Jika diketahui sebuah index, kita akan mengetahui nilainya. Dari definisi ini :
1. Tidak disebutkan bahwa index harus integer, atau tipe tertentu.
2. Tidak disebutkan range dari indexnya dimulai dari nilai tertentu, Bahkan tidak disebutkan bahwa indeks nya memiliki batas bawah maupun batas atas.
3. Tidak disebutkan bahwa nilai harus disimpan secara contigous, bahkan tidak disebutkan bahwa nilainya harus di simpan sama sekali.
akan tetapi :
1. Banyak bahasa pemrograman yang di desain tahun 60-an hingga tahun 70-an menentukan bahwa index array adalah integer atau sesuatu yang bisa dikonversi menjadi integer atau sesuatu yang memiliki nilai berurutan seperti integer.
2. Beberapa bahasa menentukan bahwa array dimulai dengan nilai tertentu. contohnya di C, array dimulai dari 0 sementara di Pascal Array dimulai dari 1. Dalam Algo-68 programmer dapat menentukan sendiri batas- batas array. Akan tetapi dalam semua bahasa pemrograman mengakses nilai dengan indeks yang di luar batas dianggap sebagai programming error.
3. Semua bahasa pemrogramman yang saya tahu menyimpan elemen - elemen array di memory. beberapa bahasa, misalnya C, menjamin bahwa elemen - elemen tersebut disimpan dalam memory yang contigous.
Sekarang tipe yang lebih mendekati definisi awal array tersedia dengan nama associative array. Tipe ini didukung oleh beberapa bahasa seperti PHP dan JavaScript, dan juga tersedia dalam beberapa bahasa lain sebagai library ( seperti std::map di C++).
Kembali ke C dan C++ array, kita dapat tentukan beberapa property array : zero based, contigous dan convertible to pointer. Banyak alasan dengan dipilihnya property seperti ini, tapi yang paling penting adalah efisiensi, yang akan kita bicarakan sebentar lagi. setiap array dapat dikonversi menjadi pointer yang menunjuk ke elemen pertama. Hal ini sangat konvenien mengingat dynamic array diciptakan dengan alokasi memori dari free memory (dengan fungsi calloc, yang berarti contigous alloc. yang aneh adalah fungsi ini berperilaku mirip dengan malloc kecuali dia menginisialisasi memori dengan nol. ). Kemudian kita tahu bahwa elemen dalam array di simpan secara berurutan, dengan demikian alamat semua elemen array adalah ptr + n * sizeof(elemen). Dengan mendefinisikan pointer arithmatic, didapat kesamaan ar[idx] == *(ar + idx). hal ini menimbulkan sesuatu yang menarik , ar[idx] == *(ar + idx) == *(idx + ar) == idx[ar] (yes, it is valid C !!).
Operasi pointer arithmatic lain juga didefinisikan untuk pointer. yang menarik adalah increment dan decrement. programmer dapat memeriksa semua elemen dalam array dengan cara menginkremen pointer dari pointer penunjuk elemen pertama. Tentu saja hal yang sama dapat dilakukan dengan indexing biasa, ar[idx], akan tetapi dengan operasi pointer bisa lebih efisien. Alasannya terletak pada bagaimana cara komputer membaca data di ar[idx]. Untuk mesin yang memiliki indexed addressing hal ini cukup sederhana dan efisien (ar jadi base, idx jadi index, fetching cukup 1 instruksi mov). Tetapi untuk mesin yang tidak memiliki indexed addressing, akan ada operasi ADD antara ar dan idx, lalu simpan hasilnya ke suatu tempat (register), lalu baru mov. Kadang - kadang register tersebut digunakan untuk operasi ADD sehingga terdapat beberapa mov untuk menyimpan state. Akan tetapi jika menggunakan pointer arithmatic, cukup meng-increase nilai yang sudah ada di register, lalu mov. Tentu saja instruksi di dalam loop juga mempengaruhi efisiensi ini, tetapi untuk mesin yang mendukung operasi increment langsung, iterasi lewat pointer biasanya lebih efisien.
Ini adalah penggunaan pointer sebagai iterator. Nama iterator diambil dari STL, dan iterator di STL adalah abstraksi dari pointer. Yang menakjubkan adalah konsep iterator, yang digeneralisasi dari pointer, adalah konsep yang cukup powerful untuk merepresentasikan semua algoritma yang bekerja untuk linear container ( linear container adalah semua container yang memiliki iterator yang menunjuk pada elemen pertama, memiliki iterator yang menunjuk pada elemen one-past-end, dan semua elemen dapat dicapai dengan melakukan operasi incremen dari iterator penunjuk elemen pertama sebanyak yang diperlukan. Contoh linear container adalah array, vector, linked - list, dan deque. contoh yang bukan linear container adalah graph dan forest.).
---Fixed memory Location
Dalam pemrograman, kita dihadapkan pada beberapa situasi seperti :
- setelah startup, prosesor 80386 akan memulai eksekusi pada alamat ( ... lupa).
- Interrupt vector beberapa prosesor ditaruh pada alamat yang ditentukan oleh pembuat prosesor tersebut.
- Video Memory di DOS dimulai pada alamat (... lupa).
Situasi - situasi tersebut hanya mungkin terjadi jika kita memrogram "close to metal" e.g membuat operating system, atau kita memrogram dalam OS yang super primitif seperti DOS. Dalam kasus - kasus ini kita memerlukan pointer dengan alamat di set ke nilai tertentu. Ini adalah penggunaan pointer sebagai abstraksi alamat di hardware. Penggunaan ini adalah penggunaan pointer paling jarang.
--- So, What's a big deal about it ?
Ketiga fungsi pointer di atas memerlukan operasi yang berbeda- beda. Contohnya jika pointer berfungsi sebagai moniker, operasi yang sangat diperlukan adalah fungsi malloc, calloc, free, new, delete, operator ->, operator * dan operator &. sebagai moniker pointer tidak memerlukan konvertability ke integer dan operasi pointer arihmatic (walaupun ada trik mengakses field struct dari pointer dengan meng-cast pointer to struct menjadi char*, tambahkan offsetnya, lalu baca dengan operator * dan di cast ke tipe field tersebut. trik ini sangat berbahaya dan sebaiknya tidak dipakai ).
Jika pointer berfungsi sebagai iterator, operasi pointer arithmatic adalah esensial. Tetapi operasi new dan delete sama sekali tidak di perlukan (kecuali untuk array of pointer). bottom line is: you do not do memory management via iterator.
Sifat konvertibilitas antara integer dan pointer hanya diperlukan jika pointer tersebut dipakai sebagai abstraksi fixed address. Dua fungsi lain tidak memerlukan sifat ini.
--- Pointer in OOP
C++ mendukung OOP, akan tetapi pada saat yang sama juga kompatibel dengan C. Hal ini menimbulkan masalah. Akan tetapi sebelum melihat apa masalahnya, ada baiknya kita bahas sedikit tentang Polymorphism.
Polymorphism adalah jawaban untuk pertanyaan: bagaimana cara menulis fungsi atau prosedur yang tidak dibatasi oleh tipe. contohnya adalah fungsi average, fungsi ini menjumlahkan sejumlah elemen dan membaginya dengan banyaknya elemen. hal ini benar untuk banyak tipe termasuk integer, koordinat kartesian, bilangan kompleks, kuartenion, matrix ,dsb walau aturan penjumlahan tipe - tipe tersebut berbeda. Untuk bahasa yang tidak mendukung polymorphism, anda harus menulis fungsi seperti averageInt, averageMatrix, averageComplex, etc.
Dari sifatnya, polymorphism terbagi dua: ad-hoc polymorphism dimana polymorphism hanya bekerja pada tipe yang sudah ada. contoh mekanisme ad-hoc polymorphism adalah function dan operator overloading. Sedangkan true polymorphism atau parametric polymorphism dapat digunakan bahkan untuk tipe yang belum dispesifikasi. Perbedaan lainnya adalah untuk ad-hoc polymorphism biasanya anda harus menulis fungsi untuk semua tipe yang berpartisipasi dalam mekanisme polymorphism, sperti menulis average untuk integer, lalu untuk quartenion, lalu satu lagi untuk complex, dll. Sedangkan untuk parametric polymorphism anda hanya perlu menulis satu fungsi.
Dari binding-time nya, polymorphism dapat dibagi 2: static dan dynamic polymorphism. Static polymorphism menentukan fungsi mana yang akan di panggil (atau mungkin di generate ) pada saat kompilasi. Sedangkan dynamic polymorphism menentukan fungsi yang di panggil pada saat run-time. contoh static polymorphism adalah template, sedangkan contoh dynamic polymorphism adalah virtual function.
static polymorphism dapat dibagi menjadi predicative atau impredicative, tetapi hal ini tidak ada hubungannya dengan diskusi kita.
Untuk dynamic polymorphism, dapat dibagi lagi berdasarkan berapa banyak parameter yang berpengaruh dari penentuan fungsi. Jika hanya parameter pertama yang berpengaruh, hal ini disebut dengan single dispatch. Jika lebih dari satu, hal ini disebut dengan multimethod. multimethod yang dipengaruhi oleh dua parameter mempunyai nama khusus yaitu double dispatch. Harap perhatikan bahwa p->somefunc(a,b) itu secara prinsip sama dengan somefunc(p,a,b) dimana p adalah this parameter (walaupun semua kompiler akan mereject kalau anda mengganti fungsi seperti itu).
Dynamic Polymorphism juga dapat dibagi berdasarkan constraint nya menjadi dua: Subtyping Polymorphism dimana polymorphic type harus merupakan turunan dari satu base class yang merupakan sebuah interface yang menentukan sifat mana yang polymorphic. Yang lainnya adalah DuckTyping yang tidak memerlukan base class yang berfungsi sebagai interface. Dalam DuckTyping sebuah object dapat menerima message apa saja, walau jika object tersebut tak dapat merespond message tersebut objeck yang bersangkutan akan mengeluarkan error seperti DoesNotUnderstand message di SmallTalk. Untuk subtype polymorphism, hal ini tidak mungkin karena sebuah object hanya akan menghandle message yang didefinisikan di base class, dan kompiler akan mereject message lain.
Kembali ke bahasan kita, C++ mendukung Subtyping single dispatch dynamic Polymorphism. Jadi untuk dynamic polymorphism, semua tipe yang ingin digunakan secara polymorphic harus diturunkan dari satu base class. C++ juga mengharuskan semua fungsi yang bisa dipanggil secara polymorphic harus dideklarasikan virtual. Dan pemilihan fungsi yang diperlukan hanya ditentukan oleh satu parameter (this parameter) melalui mekanisme vtable.
So, what's the big deal ?
Masalahnya adalah untuk semua bahasa yang menggunakan subtype polymorphism, semua object harus bisa di akses melalui base class nya. Jadi kode berikut harus valid:
Code:
Parent p = create_child(); // asumsi nya create child menghasilkan
// object child;
Hal ini menimbulkan pertanyaan : Bagaimana caranya membuat kode di atas valid ?
Dalam bahasa pemrograman tradisional, ketika anda mendeklarasikan sebuah variabel, anda menciptakan instance dari sebuah tipe, kecuali jika dideklarasikan khusus. Di C
Code:
Sometype somevar;
artinya anda menciptakan sebuah objek somevar bertipe Sometype.
Code:
Sometype somevar2 = somevar;
artinya anda mengkopi nilai somevar ke somevar2
Code:
somevar2 == somevar; // OK, ini tidak didefinisikan di C untuk User Defined Type,
// but you got the idea
artinya anda membandingkan nilai somevar dengan nilai somevar2. Mari kita sebut ini value semantic, dimana sebuah variabel mengandung isi instance dari tipe tertentu.
Lalu perhatikan kode berikut :
Code:
Child child;
Parent parent = child;
See the problem ? Masalahnya adalah anda mencoba mengkopi nilai child ke variabel parent, tapi apa artinya operasi kopi tersebut ? jika berarti mengopi nilai byte by byte, implikasinya adalah ukuran parent dan child harus sama. Akan tetapi hal ini sulit atau tidak mungkin dipenuhi. Bila parent adalah pure interface, parent hampir tidak memiliki data member, tapi child akan memiliki data member untuk mendukung operasi - operasi method-nya.
Bagaimana cara mengatasinya ? salah satu cara yang populer adalah dengan tidak menggunakan value semantic. Di bahasa seperti Java, setiap variable adalah reference ke sebuah instance. Artinya:
1. Ketika anda mendeklarasikan sebuah variabel, anda tidak menginstansiasi sebuah object. object harus di instansiasi secara terpisah, biasanya lewat operator new.
2. Ketika anda mengkopi dua buah variabel, anda tidak mengkopi instance byte by byte, tapi hanya membuat dua reference mengacu pada object yang sama. Jika ingin menghasilkan kopi dari instance, biasanya anda menggunakan method seperti clone.
3. Ketika anda membandingkan dua buah variabel, anda hanya mengetahui apakah dua variabel tersebut merujuk pada objek yang sama atau tidak. jika anda ingin membandingkan nilainya, anda harus menggunakan method seperti equal.
let's call this reference semantic.
Masalahnya C++ karena berbagai alasan (salah satunya kompatibilitas dengan C) tidak mungkin mengadopsi reference semantic dan harus tetap menggunakan value semantic. Akan tetapi reference semantic sepertinya diperlukan untuk subtype polymorphism. so, what to do ? Ternyata Pointer adalah object yang dapat dipakai untuk mengemulasi reference semantic tanpa harus mengubah bahasa menggunakan reference semantic.
Dengan demikian dynamic polymorphism di C++ harus menggunakan pointer (atau reference, yang sebenarnya adalah pointer dengan sedikit perubahan sifat).
--- Bahaya Pointer
1. Bahaya yang mungkin ada dengan pointer sebagai moniker: memory leak, double delete, invalid memory access. Semuanya dapat dihindari dengan ownership analysis yang bagus (pada setiap saat, harus diketahui pihak mana yang bertanggung jawab mendelete sebuah object). Jika hal ini sulit dilakukan, misalnya karena shared ownership, anda dapat menggunakan smart pointer atau garbage collector.
2. Bahaya yang mungkin ada dengan pointer sebagai iterator: array out of bound. Salah satu cara yang efektif menghindari hal ini adalah dengan menggunakan standard algorithm.
3. Bahaya yang mungkin ada dengan pointer sebagai abstraksi fixed memory : Tidak tahu, tetapi ini bukan mainan sembarang programmer.
--- Bahasa Pemrograman tanpa pointer ?
1. Semua Bahasa pemrograman Fungsional, terutama yang murni , tidak mengenal pointer atau memerlukan pointer. Akan tetapi bahasa ini menggunakan model komputasi yang jauh berbeda, bukan abstract C machine.
2. Beberapa bahasa pemrograman dengan reference semantik dapat mengklaim mereka tidak memiliki pointer, akan tetapi setiap variabel sebenarnya adalah pointer. Secara fisik mungkin reference tidak memiliki struktur seperti pointer (biasanya merupakan data struktur yang lebih kompleks sehingga lebih friendly terhadap garbage collector) tapi reference tersebut memiliki fungsi yang mirip dengan pointer di C atau C++. Ada yang bilang bahwa reference dalam bahasa - bahasa ini menyebabkan optimasi lebih mudah karena tidak menyebabkan aliasing, tetapi optimasi tersebut juga mungkin dilakukan di C dan C++ ( dengan restrict pointer, sayangnya belum merupakan bagian dari standard C++).
Type dari variabel pointer y adalah int, yaitu mengikuti type dari variabel x. Untuk menandakan y adalah pointer, di depan variabel y pada saat deklarasi diberi tanda bintang (*) dan di depan x saya beri tanda and (&) yaitu return alamat dari x. Dengan demikian, jika kita panggil y tanpa bintang (*) maka kita akan mendapat alamat dari x, sedangkan jika kita panggil y dengan bintang (*) yaitu *y maka kita akan mendapatkan value dari x.
Langganan:
Komentar (Atom)