Saya selalu diprogram dalam bahasa prosedural dan saat ini saya sedang bergerak ke arah orientasi objek. Masalah utama yang saya hadapi adalah bahwa saya tidak dapat melihat cara untuk mempraktikkan orientasi objek secara efektif. Saya akan menjelaskan poin saya. Ketika saya sudah belajar PHP dan C itu cukup mudah untuk dipraktekkan: itu hanya masalah memilih sesuatu dan memikirkan algoritma untuk hal itu.
Dalam PHP misalnya, itu masalah os duduk dan berpikir: "baik, hanya untuk berlatih, izinkan saya membangun satu aplikasi dengan wilayah administrasi di mana orang dapat menambahkan produk". Ini cukup mudah, itu masalah memikirkan algoritma untuk mendaftarkan beberapa pengguna, untuk login pengguna, dan untuk menambahkan produk. Menggabungkan ini dengan fitur PHP, itu adalah cara yang baik untuk berlatih.
Sekarang, dalam orientasi objek kami memiliki banyak hal tambahan. Ini bukan hanya masalah memikirkan algoritma, tetapi menganalisis persyaratan lebih dalam, menulis kasus penggunaan, mencari tahu diagram kelas, properti dan metode, mengatur injeksi dependensi dan banyak hal.
Poin utama adalah bahwa dalam cara saya telah belajar orientasi objek, tampaknya desain yang baik sangat penting, sedangkan dalam bahasa prosedural satu ide yang samar-samar sudah cukup. Saya tidak mengatakan bahwa dalam bahasa prosedural kita dapat menulis perangkat lunak yang baik tanpa desain, hanya saja demi berlatih itu layak, sedangkan dalam orientasi objek tampaknya tidak layak untuk pergi tanpa desain yang baik, bahkan untuk berlatih.
Ini tampaknya menjadi masalah, karena jika setiap kali saya akan berlatih saya perlu mencari tahu banyak persyaratan, menggunakan kasus dan sebagainya, tampaknya menjadi bukan cara yang baik untuk menjadi lebih baik dalam orientasi objek, karena ini membutuhkan saya memiliki satu ide keseluruhan untuk aplikasi setiap kali saya akan berlatih.
Karena itu, apa cara yang baik untuk melatih orientasi objek?
sumber
Jawaban:
Tidak kamu tidak ...
Tidak satu pun dari hal-hal itu diperlukan untuk mempraktikkan pemrograman berorientasi objek.
Semua pemrograman berorientasi objek bukannya memikirkan algoritma untuk melakukan langkah-langkah ini, Anda berpikir tentang objek apa yang diperlukan untuk melakukan langkah-langkah ini - fungsionalitas apa yang Anda inginkan, keadaan apa yang diperlukan untuk melakukan itu, dan antarmuka seperti apa yang ingin Anda paparkan kepada pengguna. Sama seperti yang harus Anda lakukan dalam pemrograman prosedural.
Satu-satunya perbedaan adalah bahwa alih-alih berfokus pada fungsi yang Anda butuhkan dan cara kerjanya, Anda berfokus pada bagaimana fungsi dan status dikelompokkan ke dalam tanggung jawab, dan bagaimana tanggung jawab itu berinteraksi.
Bagaimana cara berlatih? Cara yang sama Anda berlatih pemrograman prosedural: pilih masalah dan pecahkan masalah menggunakan bundel kelas. Cari tahu bagaimana itu menyebalkan, ulangi dengan pelajaran.
sumber
Pertanyaan bagus. Tentu saja, apa yang Anda katakan adalah bahwa mempraktikkan OOP sebenarnya berarti mempraktikkan semua hal ini (analisis persyaratan, kasus penggunaan, pola desain, dll.), Yang benar dan mungkin tampak menakutkan pada awalnya.
Saran saya akan memulai sesi latihan Anda dengan mengingat dua hal: pengembangan yang digerakkan oleh tes dan prinsip tanggung jawab tunggal .
Kemudian mulailah seperti yang Anda lakukan dengan PHP / C: buat ide, pikirkan apa yang Anda butuhkan untuk itu dan terapkan hal-hal ini satu demi satu. Namun, perlu diingat, bahwa Anda perlu memulai dari tes (yang memaksa Anda untuk mendefinisikan antarmuka yang tepat, karena jika tidak, testabilitas langsung menderita) dan bahwa TDD menyiratkan siklus refactor merah-hijau. Dengan kata lain, Anda memiliki sedikit fungsionalitas, dan setelah itu berfungsi Anda refactor untuk mendapatkan OO-desain yang tepat jika Anda tidak membuatnya dari awal (yang Anda tidak akan melakukannya).
Ketika melakukan langkah refactoring ini selalu mengingatkan diri Anda tentang SRP. Jika Anda menambahkan tanggung jawab kedua pada objek Anda, inilah saatnya untuk menciptakan sesuatu yang baru.
Ketika Anda berkembang seperti ini, Anda perlu menyadari bahwa solusi akhir Anda akan jauh berbeda dari apa yang Anda mulai. Kurva belajar Anda juga akan agak curam. Misalnya, Anda tidak akan belajar apa pola Pabrik, tetapi Anda akan mengenali kebutuhan akan sesuatu yang menciptakan instance kelas Anda dengan cara yang berbeda. Jadi jika Anda belum pernah mendengar pola desain berorientasi objek sama sekali, ada baiknya Anda membaca sedikit tentang pola-pola yang paralel.
sumber
Jika Anda baru memulai di OOP, Anda dapat menghibur diri sendiri dan "berlatih" offline dengan melihat hampir semua sistem dunia nyata dan mempertimbangkan apa objeknya dan apa hubungan antara mereka dan apa metode / antarmuka yang mungkin mereka dukung dan bagaimana Anda akan mewakili mereka dalam hierarki kelas dan sebagai kumpulan objek yang dipakai dan apa yang akan menjadi hubungan kepemilikan objek dan sebagainya (catatan: Saya tidak menyebutkan kata "algoritma" di atas sama sekali). Gambarlah banyak diagram (pelajari sedikit UML atau yang serupa) sebelum Anda berpikir tentang pengkodean apa pun.
Ini akan membantu Anda mengembangkan rasa hubungan IS-A dan HAS-A yang jauh lebih baik , yang mungkin merupakan satu-satunya klasifikasi paling penting dalam setiap desain OOP (dan meskipun demikian, sepertinya masih ada sesuatu yang banyak diperjuangkan oleh para programmer bahasa OOP berpengalaman dengan ). Jika Anda menguasai IS-A / HAS-A ada juga IS-IMPLEMENTED-IN-SYARAT-OF (yang saya juga lihat digambarkan sebagai IS-JENIS-DARI-A: ^)
Serius, perjalanan berikutnya ke supermarket, bayangkan saja seseorang telah memberi Anda pekerjaan menulis simulasi OOP tempat ...
sumber
Apa yang saya ingat dari masa C saya (jauh di masa lalu), kami digunakan untuk memisahkan fungsi dan prosedur untuk file yang berbeda berdasarkan tanggung jawab mereka. Saya tidak mengklaim itu sempurna atau apa pun, tapi itu adalah titik awal yang baik ketika saya benar-benar mulai memprogram dalam bahasa berorientasi objek. Jadi mungkin, Anda bisa mulai dengan mengonversi file ke objek.
Sejauh OOP berjalan, ini semua tentang latihan dan upaya untuk perbaikan. Jarang ada orang yang mendapatkannya langsung dari bawah ke atas. Dengan demikian, iterasi terjadi sepanjang siklus hidup proyek.
sumber
Mari kita tambahkan beberapa terminologi, analisis berorientasi objek dan desain berorientasi objek , seperti yang dilakukan Peter Coad pada 1990-an.
Bersama-sama ini membentuk OOAD disiplin rekayasa perangkat lunak yang dapat (dilakukan dengan benar) mendukung programmer pada titik penulisan dan pengujian kode. Pemrograman berorientasi objek kemudian dapat memiliki tingkat granularity yang tepat, penggunaan fitur bahasa pemrograman yang terampil untuk memenuhi tujuan fungsional dan persyaratan desain yang ditentukan pada tingkat proyek.
Terkadang ini adalah proyek satu orang, dan kemudian Anda harus memakai semua topi (tetapi tidak harus semuanya sekaligus). Saya penggemar berat pengembangan yang digerakkan oleh tes untuk proyek pribadi saya (lihat rekomendasi Frank), tetapi itu tidak hanya berkaitan dengan pengembangan perangkat lunak berorientasi objek.
Dalam sebuah proyek tim, memiliki pembagian tanggung jawab yang baik adalah kunci keberhasilan implementasi. Penggunaan pola desain berorientasi objek yang terampil membantu pemahaman tim dengan membatasi antarmuka yang terlihat yang diperlukan untuk analisis, umpan data, dan logika bisnis untuk berbagi kerangka kerja yang dapat digunakan.
sumber
Mengapa tidak melakukan hal yang sama hanya kali ini dengan objek pengguna dan objek produk? Juga jika Anda menggunakan bahasa yang mendukung baik prosedural dan OO maka Anda bisa mencoba mengimplementasikan objek berdasarkan pustaka standar prosedural, seperti objek file.
sumber