Antarmuka
Sulit untuk memahami tujuan dari alat yang memecahkan masalah yang belum pernah Anda miliki. Saya tidak mengerti antarmuka untuk sementara waktu setelah saya mulai pemrograman. Kami akan mengerti apa yang mereka lakukan, tetapi saya tidak tahu mengapa Anda ingin menggunakannya.
Inilah masalahnya - Anda tahu apa yang ingin Anda lakukan, tetapi Anda memiliki banyak cara untuk melakukannya, atau Anda dapat mengubah cara Anda melakukannya nanti. Alangkah baiknya jika Anda bisa memainkan peran sebagai manajer yang tidak mengerti - menggonggong beberapa pesanan dan mendapatkan hasil yang Anda inginkan tanpa peduli bagaimana hal itu dilakukan.
Katakanlah Anda memiliki situs web kecil mungil, dan Anda menyimpan semua informasi pengguna Anda dalam file csv. Bukan solusi yang paling canggih, tetapi berfungsi cukup baik untuk menyimpan detail pengguna ibumu. Kemudian, situs Anda lepas landas dan Anda memiliki 10.000 pengguna. Mungkin sudah waktunya untuk menggunakan database yang tepat.
Jika Anda pintar pada awalnya, Anda akan melihat ini datang dan tidak membuat panggilan untuk menyimpan ke csv secara langsung. Alih-alih, Anda akan memikirkan apa yang perlu Anda lakukan, tidak peduli bagaimana penerapannya. Katakanlah store()
dan retrieve()
. Anda membuat Persister
antarmuka dengan metode abstrak untuk store()
dan retrieve()
dan membuat CsvPersister
subkelas yang benar-benar mengimplementasikan metode tersebut.
Kemudian, Anda dapat membuat DbPersister
yang mengimplementasikan penyimpanan aktual dan pengambilan data yang sama sekali berbeda dari bagaimana kelas csv Anda melakukannya.
Yang hebat adalah, yang harus Anda lakukan sekarang adalah perubahan
Persister* prst = new CsvPersister();
untuk
Persister* prst = new DbPersister();
dan kemudian kamu selesai. Panggilan Anda ke prst.store()
dan prst.retrieve()
semua masih akan berfungsi, mereka hanya ditangani secara berbeda "di belakang layar".
Sekarang, Anda masih harus membuat implementasi cvs dan db, jadi Anda belum mengalami kemewahan menjadi bos. Manfaat nyata terlihat ketika Anda menggunakan antarmuka yang dibuat orang lain. Jika orang lain cukup baik untuk membuat CsvPersister()
dan DbPersister()
sudah, maka Anda hanya perlu memilih satu dan memanggil metode yang diperlukan. Jika Anda memutuskan untuk menggunakan yang lain nanti, atau dalam proyek lain, Anda sudah tahu cara kerjanya.
Saya benar-benar berkarat pada C ++ saya, jadi saya hanya akan menggunakan beberapa contoh pemrograman generik. Kontainer adalah contoh yang bagus tentang bagaimana antarmuka membuat hidup Anda lebih mudah.
Anda dapat memiliki Array
, LinkedList
, BinaryTree
, dll semua subclass dari Container
yang memiliki metode seperti insert()
, find()
, delete()
.
Sekarang ketika menambahkan sesuatu ke tengah daftar tertaut, Anda bahkan tidak perlu tahu apa itu daftar tertaut. Anda cukup menelepon myLinkedList->insert(4)
dan secara ajaib beralih melalui daftar dan menempelkannya di sana. Sekalipun Anda tahu cara kerja daftar tertaut (yang memang harus Anda lakukan), Anda tidak harus melihat fungsinya yang spesifik, karena Anda mungkin sudah tahu apa yang mereka gunakan dengan menggunakan yang berbeda Container
sebelumnya.
Kelas Abstrak
Kelas abstrak sangat mirip dengan antarmuka (antarmuka baik secara teknis adalah kelas abstrak, tetapi di sini yang saya maksud adalah kelas dasar yang memiliki beberapa metode mereka disempurnakan.
Katakanlah Anda sedang membuat gim, dan Anda perlu mendeteksi kapan musuh berada dalam jarak pukul pemain. Anda bisa membuat kelas dasar Enemy
yang memiliki metode inRange()
. Meskipun ada banyak hal tentang musuh yang berbeda, metode yang digunakan untuk memeriksa jangkauan mereka konsisten. Oleh karena itu Enemy
kelas Anda akan memiliki metode menyempurnakan untuk memeriksa rentang, tetapi metode virtual murni untuk hal-hal lain yang tidak memiliki kesamaan di antara tipe musuh.
Hal yang menyenangkan tentang ini adalah jika Anda mengacaukan kode deteksi jangkauan atau ingin mengubah, Anda hanya perlu mengubahnya di satu tempat.
Tentu saja ada banyak alasan lain untuk antarmuka dan kelas dasar abstrak, tetapi itulah beberapa alasan mengapa Anda mungkin menggunakannya.
Lajang
Saya menggunakannya sesekali, dan saya tidak pernah dibakar oleh mereka. Itu bukan untuk mengatakan bahwa mereka tidak akan menghancurkan hidup saya di beberapa titik, berdasarkan pengalaman orang lain.
Berikut ini adalah diskusi yang bagus tentang keadaan global dari beberapa orang yang lebih berpengalaman dan waspada:
Mengapa Negara Global begitu Jahat?