PEMBAHASAN
Pengertian OOP
(Object Oriented Programming)
Banyak orang pertama kali belajar
program menggunakan bahasa yang tidak berorientasi objek. Program non-OOP
mungkin salah satu daftar panjang dari perintah. Lebih program yang kompleks
akan kelompok daftar perintah ke dalamfungsi atau subrutin masing-masing yang mungkin melakukan tugas
tertentu.Dengan desain semacam ini, biasanya untuk data program untuk dapat
diakses dari setiap bagian dari program tersebut. Sebagai program tumbuh dalam
ukuran, memungkinkan fungsi apapun untuk memodifikasi setiap bagian dari data
berarti bahwa bug dapat memiliki dampak yang luas jangkauannya.
Sebaliknya, pendekatan
berorientasi objek mendorong para programmer untuk tempat data di mana tidak
langsung dapat diakses oleh seluruh program. Sebaliknya data diakses dengan
memanggil tertulis fungsi khusus, yang biasa disebut metode, baik yang dibundel dengan data atau
warisan dari ”objek kelas” dan bertindak sebagai perantara untuk mengambil atau
memodifikasi data tersebut. Pemrograman yang membangun yang menggabungkan data
dengan satu set metode untuk mengakses dan mengelola data tersebut disebut
objek.
Sebuah program berorientasi objek
biasanya akan mengandung berbagai jenis objek, masing-masing jenis yang sesuai
untuk jenis tertentu dari data yang kompleks untuk dikelola atau mungkin ke
objek dunia nyata atau konsep seperti rekening bank, pemain hoki, atau
buldoser. Sebuah program mungkin berisi beberapa salinan dari setiap jenis
objek, satu untuk setiap objek dunia nyata program ini berurusan dengan OOP.
Sebagai contoh, ada bisa menjadi salah satu rekening bank untuk setiap account
objek dunia nyata di sebuah bank tertentu. Setiap salinan dari objek rekening
bank akan sama dalam metode ini menawarkan untuk memanipulasi atau membaca
data, tetapi data dalam setiap objek akan berbeda mencerminkan sejarah yang
berbeda dari setiap account.
Objek dapat dianggap sebagai
pembungkus data mereka dalam satu set fungsi yang dirancang untuk memastikan
bahwa data yang digunakan tepat, dan untuk membantu dalam menggunakan. Metode
ini objek biasanya akan mencakup pemeriksaan dan perlindungan yang khusus untuk
jenis data objek berisi. Sebuah objek juga dapat menawarkan sederhana
digunakan, metode standar untuk melakukan operasi tertentu pada data, sementara
menyembunyikan secara spesifik tentang bagaimana tugas-tugas yang dicapai.
Dengan cara ini perubahan dapat dibuat dengan struktur internal atau metode
obyek tanpa memerlukan bahwa sisa program dimodifikasi. Pendekatan ini juga
dapat digunakan untuk menawarkan metode standar di berbagai jenis objek.
Sebagai contoh, beberapa jenis benda mungkin menawarkan metode cetak. Setiap
jenis objek yang mungkin menerapkan metode cetak dalam cara yang berbeda, yang
mencerminkan jenis data yang berbeda masing-masing berisi, tetapi semua metode
cetak yang berbeda mungkin disebut dengan cara standar yang sama dari tempat
lain di program ini. Fitur-fitur ini menjadi berguna terutama ketika lebih dari
satu programmer berkontribusi kode untuk proyek atau ketika tujuannya adalah
untuk menggunakan kembali kode di antara proyek.
Pemrograman berorientasi obyek
memiliki akar yang dapat ditelusuri ke tahun 1960-an. Sebagai perangkat keras
dan software menjadi semakin kompleks, pengelolaan sering menjadi
perhatian. Para peneliti mempelajari cara untuk menjaga kualitas software dan
pemrograman berorientasi objek yang dikembangkan sebagian untuk mengatasi
masalah-masalah umum dengan sangat menekankan diskrit, unit dapat digunakan
kembali logika. Teknologi ini berfokus pada data daripada proses, dengan
program yang terdiri dari modul mandiri (kelas), setiap contoh (objek) yang
berisi semua informasi yang dibutuhkan untuk memanipulasi data struktur sendiri
(anggota). Hal ini berbeda dengan yang adapemrograman modular yang telah dominan
selama bertahun-tahun yang difokuskan pada fungsi dari sebuah modul,
bukan data spesifik, tetapi juga disediakan untukpenggunaan kembali kode, dan cukup dapat digunakan
kembali unit-diri dari logika pemrograman, memungkinkan kolaborasi melalui penggunaan modul terkait (subrutin). Pendekatan yang lebih konvensional, yang masih
tetap, cenderung untuk mempertimbangkan data dan perilaku secara terpisah.
Program berorientasi objek dengan
demikian dapat dilihat sebagai kumpulan objek berinteraksi, yang
bertentangan dengan model konvensional, di mana program dipandang sebagai
daftar tugas (subrutin) untuk melakukan. Dalam OOP, setiap objek dapat
menerima pesan, pengolahan data, dan mengirim pesan ke objek lainnya. Setiap
objek dapat dilihat sebagai ”mesin” independen dengan peran yang berbeda atau
tanggung jawab. Tindakan (metode) pada obyek-obyek yang terkait erat
dengan objek. Sebagai contoh, OOP struktur data cenderung ”membawa operator
sendiri main dengan mereka” (atau setidaknya ”mewarisi” mereka dari
obyek yang sama atau kelas).
Konsep Dasar dari
Pemrograman Berorientasi Objek (OOP)
Pemrograman
Orientasi Objek (Object Oriented Programming)menekankan konsep sebagai berikut
:
1. Kelas
Kelas merupakan
kumpulan atas definisi data dan fungsi-fungsi dalam suatu unit untuk suatu
tujuan tertentu. Sebagai contoh “class of dog” adalah suatu unit yang terdiri
atas definisi-definisi data dan fungsi-fungsi yang menunjuk pada berbagai macam
perilaku atau turunan dari anjing. Sebuah class adalah dasar dari
modularitas dan struktur dalam pemrograman berorientasi objek. Sebuah classsecara
tipikal sebaiknya dapat dikenali oleh seorang non-programmer sekalipun terkait
dengan domain permasalahan yang ada, dan kode yang terdapat dalam
sebuah class sebaiknya (relatif) bersifat mandiri dan independen
(sebagaimana kode tersebut digunakan jika tidak menggunakan OOP). Dengan
modularitas, struktur dari sebuah program akan terkait dengan aspek-aspek dalam
masalah yang akan diselesaikan melalui program tersebut. Cara seperti ini akan
menyederhanakan pemetaan dari masalah ke sebuah program ataupun sebaliknya.
2. Objek
Objek berfungsi
membungkus data dan fungsi bersama menjadi suatu unit dalam sebuah program
komputer. Objek merupakan
dasar dari modularitas danstruktur dalam
sebuah program komputer berorientasi objek.
3. Abstraksi
Abstraksi dapat
didefinisikan sebagai kemampuan sebuah program untuk melewati aspek informasi
yang diproses olehnya, yaitu kemampuan untuk memfokus pada inti. Setiap objek
dalam sistem melayani sebagai model dari “pelaku” abstrak yang dapat melakukan
kerja, laporan dan perubahan keadaannya, dan berkomunikasi dengan objek lainnya
dalam sistem, tanpa mengungkapkan bagaimana kelebihan ini diterapkan. Proses,
fungsi atau metode dapat juga dibuat abstrak, dan beberapa teknik digunakan
untuk mengembangkan sebuah pengabstrakan.
4. Enkapsulasi
Enkapsulasi berfungsi
memastikan pengguna sebuah objek tidak dapat mengganti keadaan dalam dari
sebuah objek dengan cara yang tidak layak; hanya metode dalam objek tersebut
yang diberi ijin untuk mengakses keadaannya. Setiap objek mengakses interface yang
menyebutkan bagaimana objek lainnya dapat berinteraksi dengannya. Objek lainnya
tidak akan mengetahui dan tergantung kepada representasi dalam objek tersebut.
5. Polimorfisme
Polimorfisme dapat
berwujud melalui pengiriman pesan. Tidak bergantung kepada pemanggilan
subrutin, bahasa orientasi objek dapat mengirim pesan. Metode tertentu yang
berhubungan dengan sebuah pengiriman pesan tergantung kepada objek tertentu di
mana pesan tersebut dikirim. Contohnya, bila sebuah burung menerima pesan
“gerak cepat”, dia akan menggerakan sayapnya dan terbang. Bila seekor singa
menerima pesan yang sama, dia akan menggerakkan kakinya dan berlari. Keduanya
menjawab sebuah pesan yang sama, namun yang sesuai dengan kemampuan hewan
tersebut. Ini disebut polimorfisme karena sebuah variabel tunggal dalam program
dapat memegang berbagai jenis objek yang berbeda selagi program berjalan, dan
teks program yang sama dapat memanggil beberapa metode yang berbeda di saat
yang berbeda dalam pemanggilan yang sama. Hal ini berlawanan dengan bahasa fungsional yang
mencapai polimorfisme melalui penggunaan fungsi kelas pertama.
6. Inheritas
Konsep inheritas
mempunyai fungsi mengatur polimorfisme dan enkapsulasi dengan mengijinkan objek
didefinisikan dan diciptakan dengan jenis khusus dari objek yang sudah ada.
Objek-objek ini dapat membagi (dan memperluas) perilaku mereka tanpa haru
mengimplementasi ulang perilaku tersebut (bahasa berbasis objek tidak
selalu memiliki inheritas).
Dengan adanya konsep dasar
tersebut di atas, maka dengan menggunakan OOP kita dapat melakukan pemecahan
suatu masalah tanpa melihat bagaimana cara menyelesaikan suatu masalah tersebut
(terstruktur) tetapi objek-objek apa yang dapat melakukan pemecahan masalah
tersebut. Sebagai contoh anggap kita memiliki sebuah departemen yang memiliki
manager, sekretaris, petugas administrasi data dan lainnya. Misal manager
tersebut ingin memperoleh data dari bagian administrasi, maka manager tersebut
tidak harus mengambilnya langsung tetapi dapat menyuruh petugas bagian
administrasi untuk mengambilnya. Pada kasus tersebut seorang manager tidak
harus mengetahui bagaimana cara mengambil data tersebut tetapi manager bisa
mendapatkan data tersebut melalui objek petugas administrasi. Jadi untuk
menyelesaikan suatu masalah dengan kolaborasi antar objek-objek yang ada karena
setiap objek memiliki deskripsi tugasnya sendiri.
Bahasa
pemrograman yang mendukung Metode pendekatan Objek Oriented Programing antara
lain:
- Visual
Foxpro
- Java
- C++
- Pascal
- SIMULA
- Smaltalk
- Ruby
- Python
- PHP
- C#
- Delphi
- Eiffel
- Perl
- Adobe
Flash AS 3.0
Bahasa Pendukung
OOP
Bahasa pertama yang memiliki
fitur-fitur utama dari sebuah bahasa berorientasi objek yaitu Simula (1967).
Organisasi ini dibentuk untuk membuatprogram simulasi, di mana apa yang kemudian
disebut objek adalah informasi perwakilan paling penting. Smalltalk (1972-1980) ini bisa dibilang contoh
kanonik, dan yang satu dengan yang banyak teori pemrograman berorientasi objek
adalah dikembangkan. Mengenai derajat orientasi objek, berikut beberapa
perbedaan dapat dibuat:
1. Bahasa
disebut “murni” bahasa OOP, karena segala isinya diperlakukan secara konsisten
sebagai objek, dari primitif seperti karakter dan tanda baca, semua jalan
sampai ke seluruh kelas, prototipe, blok, modul, dan lain-lain. Mereka
dirancang khusus untuk memfasilitasi, bahkan menegakkan, metode OOP. Contoh :Scala, Smalltalk, Eiffel, Ruby, JADE, dan Emerald.
2. Bahasa
pemrograman yang dirancang terutama untuk OOP, tapi dengan beberapa elemen
prosedural. Contoh : C + + , C #, VB.NET,Java, dan Python. (Catatan : C # dan VB.NET eksklusif
bagian Microsoft's NET Framework adalah dan platform pengembangan. Kompilasi
keduanya sama (bahasa menengah IL). Meskipun ada beberapa perbedaan membangun,
mereka minimal dan dalam konteks pengelompokan ini, beberapa mungkin menganggap
mereka bagian dari satu bahasa dengan hanya dua mesin sintaks (terjemahan).
3. Bahasa
yang secara historis bahasa prosedural, tetapi telah diperpanjang
dengan beberapa fitur OOP. Contoh : Visual Basic(berasal dari DASAR), Fortran 2003, Perl, COBOL 2002, PHP, danABAP .
4. Bahasa
dengan sebagian besar fitur objek (kelas, metode, warisan, usabilitas), tetapi
dalam bentuk jelas asli. Contoh : Oberon (Oberon-1 atau Oberon-2).
5. Bahasa
dengan tipe data abstrak dukungan, tetapi tidak
semua fitur-orientasi obyek, kadang-kadang disebut
bahasa berbasis objek. Contoh : Modula-2 (dengan enkapsulasi yang sangat baik dan
menyembunyikan informasi), liat, dan CLU .
Dalam beberapa tahun terakhir,
pemrograman berorientasi objek telah menjadi sangat populer di bahasa pemrograman dinamis. Python, Ruby dan Groovy adalah bahasa dinamis
dibangun di atas prinsip-prinsip OOP, sedangkan Perl dan PHPtelah menambahkan fitur berorientasi objek sejak Perl 5 dan
PHP 4, danColdFusion sejak versi 6.
Desain Pola OOP
Tantangan desain berorientasi
objek yang ditujukan oleh beberapa metodologi. Paling umum dikenal
sebagai pola desain dimodifikasikan oleh Gamma dkk. Lebih
luas lagi, istilah ”pola desain” dapat digunakan untuk
mengacu pada setiap diulang, solusi umum untuk masalah umum yang terjadi dalam
desain perangkat lunak. Beberapa masalah ini sering terjadi memiliki implikasi
dan solusi khusus pengembangan berorientasi objek. Beberapa Desain Pola OOP
antara lain
Warisan dan
Perilaku Subtyping
Hal ini untuk
menganggap warisan yang menciptakan semantik ”adalah sebuah” hubungan, dan dengan demikian untuk
menyimpulkan bahwa benda instansi dari subclass selalu dapat
dengan aman digunakan sebagai benda pengganti instansi
dari superclass. Intuisi ini sayangnya palsu dalam bahasa OOP kebanyakan,
khususnya di semua orang yang memungkinkan bisa berubah objek. Polimorfisme Subtipe sebagai ditegakkan oleh Checker dalam bahasa OOP (dengan objek bisa
berubah) tidak dapat menjamin subtyping perilaku dalam konteks
apapun. Perilaku subtyping ini diputuskan pada umumnya, sehingga
tidak dapat dilaksanakan oleh program (compiler). Kelas atau objek hierarki
perlu hati-hati dirancang mempertimbangkan kemungkinan menggunakan salah yang
tidak dapat dideteksi sintaktis. Masalah ini dikenal sebagai prinsip substitusi Liskov .
Pola
Desain Gang Empat
Design Patterns: Elements of Reusable
Object-Oriented Software adalah buku yang berpengaruh yang diterbitkan
pada tahun 1995 oleh Erich Gamma,Richard Helm, Ralph Johnson, dan John Vlissides, kadang-kadang santai disebut “Gang
Empat”. Seiring dengan mengeksplorasi kemampuan dan perangkap pemrograman
berorientasi obyek, itu menggambarkan 23 masalah pemrograman umum dan pola
untuk memecahkan masalah tersebut. Pada April 2007, buku itu dalam pencetakan
36 nya. Buku ini menjelaskan pola-pola sebagai berikut:
· Mencipta Pola : Pola Metode Pabrik, Pabrik Abstrak Pola, Pola Singleton, Builder Pola, dan Pola Prototype.
· Struktural Pola : Pola Adapter, Bridge Pola, Pola Komposit,dekorator Pola, Pola Facade, kelas Terbang Pola, dan Pola Proxy.
· Perilaku Pola : Rantai Tanggung Jawab Pola, Pola Command,Interpreter Pola, Pola Iterator, Mediator Pola, Pola Memento,Observer Pola, Pola Negara, Strategi Pola, Template Metode Pola, dan Pola Pengunjung.
Obyek
Orientasi dan Database
Kedua pemrograman
berorientasi obyek dan sistem manajemen database
relasional (RDBMSs) sangat umum dalam perangkat lunak saat ini. Karenadatabase relasional tidak menyimpan objek
langsung (meskipun beberapa RDBMSs memiliki fitur berorientasi objek untuk
perkiraan ini), ada kebutuhan umum untuk menjembatani dua dunia. Masalah
menjembatani pemrograman berorientasi objek mengakses dan pola data dengan
database relasional dikenal sebagai Relational Mismatch Impedansi Object.
Ada beberapa pendekatan untuk mengatasi masalah ini, tetapi tidak ada solusi
umum tanpa kelemahan. Salah satu pendekatan yang paling umum adalah objek relasional pemetaan, seperti yang
ditemukan di perpustakaan seperti Java Data Objects dan Ruby on Rails‘ActiveRecord.
Ada juga objek database yang dapat digunakan untuk
menggantikan RDBMSs, tetapi ini belum teknis dan komersial sukses sebagai
RDBMSs.
Pemodelan
Dunia Nyata dan Hubungan
OOP dapat digunakan
untuk objek dunia nyata asosiasi dan proses dengan mitra digital. Namun, tidak
semua orang setuju bahwa OOP memfasilitasi dunia nyata pemetaan langsung
(lihat Kritik Negatif bagian) atau
bahwa pemetaan dunia nyata bahkan tujuan yang layak. Bertrand Meyer berpendapat di Object-Oriented Software Konstruksi bahwa
program bukanlah model dunia tetapi model dari beberapa bagian dunia, “Realitas
adalah sepupu dua kali dihapus”. Pada saat yang sama, beberapa keterbatasan
utama dari OOP sudah diketahui. Sebagai contoh,masalah Elips Circle sulit untuk
ditangani dengan menggunakan konsep OOP’s dari warisan.
Namun, Niklaus Wirth (yang mempopulerkan pepatah
sekarang dikenal sebagai hukum di Wirth : “Software semakin lambat
lebih cepat dari perangkat keras menjadi lebih cepat”) kata dari OOP dalam
makalahnya, “Ide Bagus melaluiLooking Glass”, paradigma ini erat mencerminkan
struktur sistem “di dunia nyata”, dan oleh karena itu cocok untuk model sistem
kompleks dengan perilaku kompleks (kontras KISS prinsip).
Steve Yegge, dkk. mencatat bahwa bahasa alami merupakan
kekurangan pendekatan OOP yang ketat memprioritaskan hal (benda/kata benda) sebelumtindakan (metode/verba). Hal ini dapat menyebabkan masalah OOP menderita
berbelit-belit solusi lebih dari pemrograman prosedural.
Desain
OOP dan Flow Control
OOP dikembangkan
untuk meningkatkan reusabilitas dan maintainabilitydari source code.
Representasi transparan aliran kontrol tidak memiliki prioritas dan
dimaksudkan untuk ditangani oleh compiler. Dengan meningkatnya relevansi
paralel dan perangkat keras multithreaded coding, pengembang kontrol
aliran transparan menjadi lebih penting, sesuatu yang keras untuk mencapai
dengan OOP.
Desain
Tanggung Jawab dan Driven Desain Data
Desain Berbasis Tanggung Jawab mendefinisikan
kelas dalam hal kontrak, yaitu kelas harus didefinisikan sekitar tanggung jawab
dan informasi yang sama. Hal ini kontras dengan Wirfs-Brock dan Wilkerson
dengan desain data-driven, di mana kelas didefinisikan
di sekitar struktur data yang harus dipegang. Para penulis berpendapat bahwa
desain tanggung jawab-driven adalah lebih baik.
Kritik Para Ahli
Mengenai OOP
Sejumlah
peneliti terkenal dan programmer telah menganalisis utilitas dari
OOP, antara lain :
Richard Stallman menulis pada tahun 1995, dia
menambahkan bahwa OOP untukEmacs tidak secara jelas, perbaikan OOP saya gunakan
ketika bekerja di Mesin Lisp sistem jendela, dan aku tidak setuju dengan pandangan
biasa bahwa itu adalah cara yang unggul untuk program”.
Sebuah
studi oleh Potok et al. telah menunjukkan tidak ada perbedaan yang
signifikan dalam produktivitas antara OOP dan pendekatan prosedural.
Christopher J. Tanggal menyatakan bahwa
perbandingan kritis OOP dengan teknologi lain, pada khususnya relasional adalah
sulit karena tidak adanya upon dan ketat definisi yang disepakati dari OOP.
Darwen mengusulkan landasan teoritis pada OOP yang menggunakan OOP sebagai
semacam disesuaikan sistem tipeuntuk mendukung RDBMS.
Alexander Stepanov menyarankan bahwa OOP
memberikan sudut pandang terbatas matematis dan menyebutnya “hampir sebanyak
tipuan sebagai Artificial Intelligence”. Dia belum melihat
bagian yang menarik dari kode yang berasal dari orang-orang OOP.
Paul Graham telah
menyarankan bahwa tujuan dari OOP adalah untuk bertindak sebagai ”mekanisme
menggiring” yang membuat programmer biasa-biasa saja dalam organisasi
biasa-biasa saja dari “melakukan banyak kerusakan yang terlalu”. Hal ini adalah
pengorbanan dengan memperlambat programmer produktif yang tahu bagaimana
menggunakan lebih kuat dan lebih kompak teknik.
Joe Armstrong, penemu utama Erlang, mengatakan “Masalah dengan
bahasa berorientasi objek yang mereka punya semua ini lingkungan implisit bahwa
mereka membawa sekitar dengan mereka inginkan. Anda punya pisang, tapi apa yang
Anda punya adalah gorila memegang pisang dan seluruh hutan”.
Richard
Mansfield, penulis dan mantan editor Hitung majalah, menyatakan bahwa “seperti tak
terhitung mode intelektual lainnya selama bertahun-tahun (“relevansi”,
“komunisme”, “modernisme”) sejarah penuh dengan mereka. OOP akan bersama kita
sampai akhirnya realitas menegaskan dirinya. Seluruh generasi programmer
didoktrinasi terus berbaris keluar dari akademi, berkomitmen untuk OOP dan
hanya OOP untuk sisanya hidup mereka”. Ia juga mengatakan “OOP adalah untuk
menulis sebuah program, apa yang akan melalui keamanan bandara adalah untuk terbang”.
Rich Hickey, pencipta Clojure, menjelaskan sistem objek sebagai atas model
sederhana dari dunia nyata. Dia menekankan ketidakmampuan OOP ke waktu model
benar, yang semakin semakin bermasalah sebagai sistem perangkat lunak menjadi
lebih bersamaan.
Carnegie-Mellon University Profesor Robert Harper Maret 2011
menulis: “Dan semester ini Licata dan aku mengajar kursus baru di pemrograman fungsionaluntuk tahun pertama
jurusan CS calon ... Pemrograman Berorientasi Obyek dihilangkan sepenuhnya dari
kurikulum pengantar, karena keduanya anti-modular dan anti-paralel sifatnya,
dan karenanya tidak cocok untuk suatu kurikulum CS modern. Sebuah program baru
yang diusulkan pada metodologi desain berorientasi objek akan ditawarkan di
tingkat sophomore bagi siswa yang ingin belajar topik ini”.

Mantap gan...sangat bermanfaat...
BalasHapusMantab
BalasHapusAlhdllh semute...
BalasHapusJoss
BalasHapusMantab mas...
BalasHapusTerimakasih...... Om
BalasHapusTerimakasih...... Om
BalasHapusSangat inspiratif ...mantab
BalasHapusLanjutkan mas bro
BalasHapusLanjutkan mas bro
BalasHapusLanjutkan mas brai
BalasHapusLanjutkan mas brai
BalasHapusPostingan yg bagus,Agan.
BalasHapusTerimakasih
Postingan yg bagus,Agan.
BalasHapusTerimakasih
Komentar ini telah dihapus oleh pengarang.
BalasHapusSiiiippp...😊😊
BalasHapusMantaaaaap
BalasHapusMantaaappp
BalasHapusTampilan webnya klu bisa dikasih motif papua mboeh..
BalasHapusMantap gan... Amat sangat keren sekali idenya LANJUTKAANNN !!!
BalasHapusKereeeennn, sangat bermanfaan👍
BalasHapusKereeeennn, sangat bermanfaan👍
BalasHapusSuiiiiip Terbaik.....!!!
BalasHapusSuper sekalee
BalasHapusArtikelnya bermanfaat
Super sekalee
BalasHapusArtikelnya bermanfaat
Mantap jiwa....super banget infonya
BalasHapuspostingan yg sangat bermanfaat...
BalasHapusbagus sun.klo bisa d tambah gambar biar lbh menarik
BalasHapusup gan..
BalasHapusmantaappppzz
Josssssss gandoooossss
BalasHapusKeren .... informasi yang sangat membantu. Thanks
BalasHapusSiip artikel yang bermanfaat. saran tulisan dierbesar agak kesulitan membacanya.
BalasHapusJoss artikelnya, mudah-mudahan bermanfaat
BalasHapus