Dasar Object-Oriented
Selama ini kita sudah menggunakan beberapa tipe berbeda, beberapa diantaranya adalah: int, string, array, dan lainnya. Selanjutnya kita akan belajar untuk membuat tipe kita sendiri. Sebuah tipe kustom di definisikan dengan menghimpun beberapa data yang mendefinisikan informasi yang dimiliki oleh tipe tersebut, dan juga method yang beroperasi menggunakan data tersebut. Tipe-tipe kustom ini adalah bagian dari dasar "Object-Oriented Programming."
Object, Class dan Instance
Setelah bertahun-tahun orang memprogram, kita sudah belajar bahwa salah satu cara terbaik untuk menyusun kode adalah meniru bagaimana dunia nyata bekerja. Hal ini membantu memecahkan tugas menjadi bagian-bagian yang mudah untuk dikelola, dan memberi cara yang intuitif untuk programmer bekerja dengan kode mereka. Konsep untuk membuat kode kita menyerupai objek-objek dunia nyata ini disebut sebagai object-oriented programming.
Coba baca lagi paragraf itu, pahami, ini penting.
Pada object-oriented programming, ada dua cara pemikiran dari objek-objek yang ada. Yang pertama adalah pemikiran dimana objek adalah suatu tipe atau kategori. Contohnya, di dunia nyata, kita ada rumah, mobil, dan pesawat. Ini semua adalah kategori umum dari objek. Atau kita juga bisa menyebut, ini semua adalah "class" dari suatu objek.
Selain itu, ada suatu hal spesifik atau "instansce" dari class-class objek ini. Rumah ini, rumah itu, rumah tetangga kalian, yang mungkin di cat pink. Ini semua adalah "instance".
Setiap kategori atau class memiliki beberapa properti yang sama, atau mempunyai fungsionalitas yang sama. Contohnya, ketika kita berbicara soal rumah, kita tahu bahwa setiap rumah pasti punya ukuran, atau warna. Setiap rumah spesifik akan memiliki ukuran dan warna unik mereka masing-masing, tetapi kita tahu bahwa semua rumah (semua hal yang memiliki kategori rumah) pasti punya suatu ukuran ataupun warna.
Misalkan contoh dalam suatu game luar angkasa. Kita tahu bahwa semua asteroid dalam game akan memiliki posisi pada dunia game, dan juga ukuran. Setiap individu asteroid akan punya posisi unik dan ukuran unik mereka masing-masing. Disini kita dapat berbicara tentang asteroid pada pengertian umum (seluruh hal ber tipe asteroid) dan kita juga bisa berbicara tentang suatu asteroid spesifik. Misal salah satu asteroid ada yang berada pada posisi (60, 121) dan berukuran 15, satunya lagi pada (542, 97) dan berukuran 5.
Dengan object-oriented programming, kita dapat mendefinisikan suatu blueprint untuk suatu tipe atau kategori dari suatu objek dengan mendefnisikan sebuah class. Class ini adalah sebuah tipe baru yang akan kita buat.
Pendefinisian class memungkinkan kita untuk menspesifikasikan data apa yang dimiliki oleh sebuah class. Jika misal kita mendefinisikan class Asteroid maka kita mungkin ingin asteroid memiliki data posisi dan juga ukuran.
Selain data, sebuah definisi class juga memungkinkan kita untuk menuliskan perilaku yang dapat dilakukan oleh semua yang menjadi milik dari class tersebut.
Contohnya pada permainan asteroid tadi, jika kita punya class Kapal yang merepresentasikan apa yang pemain kontrol, maka class ini mungkin akan memiliki kemampuan untuk Menembak peluru, atau Teleportasi ke lokasi berbeda. Perilaku ini di definisikan dalam method. Dan method ini juga dapat memodifikasi data milik class
Berdasarkan dari definisi class, kita lalu dapat membuat instance spesifik di dalam program kita. Contohnya, class Asteroid kita dapat kita buat 12 instnace berbeda yang memiliki lokasi dan ukuran yang berbeda-beda pula. Lalu kita dapat juga membuat satu atau dua instance Kapal untuk satu atau dua pemain. Setiap instance memiliki posisinya sendiri. Setiap kapal dapat teleportasi atau menembak sendiri-sendiri, tetapi karena semua kapal adalah "dimiliki" oleh class atau kategori yang sama, kita tahu bahwa mereka semua memiliki kemampuan untuk menembak atau teleportasi. Setiap instance berbeda dari suatu class itu independent. Mereka memiliki data sendiri-sendiri dan meminta untuk melakukan suatu aksi itu untuk instance spesifik, bukan seluruh objek dari class. Tetapi jika dua instance di miliki oleh class yang sama, kita tahu kita dapat berinteraksi dengan mereka dengan sama karena mereka mempunyai blueprint yang sama.
Menggunakan class yang sudah ada
Sebelum memulai untuk menulis class kita sendiri, mari kita coba menggunakan class yang sudah ada di C#, contohnya adalah class Random. Class Random memungkinkan mu untuk membuat suatu angka random. contohnya kalian dapat menggunakan class ini untuk mensimulasikan suatu dadu, atau mengacak satu set kartu.
Kita dapat menggunakan class Random dengan cara yang mirip seperti tipe lainnya:
Random random = new Random();Disini kita menggunakan Random sebagai tipe kita, lalu memberi nama variabel kita dengan nama random, dan seperti variabel lainnya, kita mengisinya menggunakan operator assignment (=).
Tetapi setelah itu kita menggunakan keyword new, disini maksudnya adalah kita membuat instance baru dari tipe Random, menjadi sebuah objek dengan tipe Random.
Bagian Random() mungkin terlihat seperti pemanggilan sebuah method, dan memang sebenarnya agak benar. Disini yang dipanggil adalah sebuah method spesial yang bernama constructor. Constructor diletakkan dalam sebuah class dan mendeskripsikan bagaimana kita membuat atau membangun sebuah instance baru dari sebuah tipe. Kebetulan di constructor Random tidak memiliki parameter (dapat dilihat dari tanda kurung yang kosong) tetapi sebenarnya bisa jika kita ingin membuat tipe yang memiliki constructor dengan parameter, seperti pada method.
Jika baris tersebut sudah selesai di eksekusi, variabel kita yang bernama random akan memiliki instance baru dengan tipe Random
Menggunakan Sebuah Instance
Setelah kita membuat objek, kita dapat melakukan sesuatu dengannya. Jika kalian ingat, sebuah objek memiliki data, dan juga perilaku. Pada object Random yang kita buat, sebenarnya didalamnya ada data nya, tetapi tidak di perlihatkan ke kita.
Tetapi walaupun kita tidak dapat memodifikasi data yang ada di dalam objek Random, kita masih dapat menggunakan perilakunya, yaitu methodnya.
Kita dapat mengakses perilaku sebuah objek menggunakan method yang ada di dalamnya. Nah salah satu method yang ada dalam Random adalah method Next, kita dapat memanggil method ini menggunakan operator dot ("."):
Random random = new Random();
int angkaRandom = random.Next();Operator dot digunakan untuk mengakses sebuah member dari class. Dengan kata lain, operator ini digunakan untuk mengakses suatu hal yang dimiliki oleh hal lain. Pada contoh diatas random.Next(); dapat kita baca seperti "pada objek random panggil sebuah method dengan nama Next". Hal-hal yang dimiliki oleh objek, seperti variabel dan method, disebut sebagai member dari suatu tipe dan dapat diakses menggunakan operator dot (".")
Method Next memiliki overload (materi method lanjutan), jadi ada beberapa versi dari method ini, termasuk yang memungkinkan kita untuk memasukkan jangkauan:
Random random = new Random();
int nilaiDadu = random.Next(6) + 1; // Di tambah satu, karena Next(6)
// menghasilkan angka antara 0 sampai 5class Random juga memiliki method NextDouble, yang mengembalikan nilai floating point antara 0 hingga 1. Ini mungkin dapat digunakan untuk sebuah probabilitas random dan sejenisnya.
Latihan
Melempar dadu. Buatlah sebuah program yang meminta user menginputkan sebuah bilangan, nah dari bilangan ini kalian lakukan pelemparan dadu (seperti di contoh), jadi buat objek Random lalu gunakan method Next pada objek tersebut untuk mensimulasikan pelemparan dadu. Hitung semua total hasil pelemparan dan tampilkan hasilnya ke user.
Jadi kalau misal user memasukkan angka 5, maka program akan melempar dadu 5 kali, dan setiap pelemparan nilai dadunya ditotalkan. Totalnya ditampilkan.
Sebagai nilai tambah, kalian dapat menggunakan looping, untuk terus meminta user untuk menginput sampai user menginputkan "quit" atau "exit" (mirip seperti tugas tebak kata).
Last updated