Saya baru saja menyelesaikan gelar master (dalam komputasi) dan melamar pekerjaan. Saya perhatikan banyak perusahaan secara khusus meminta pemahaman tentang orientasi objek. Pertanyaan wawancara populer adalah tentang warisan, polimorfisme, pengakses, dll
Apakah OO benar-benar penting? Saya bahkan punya wawancara untuk pekerjaan pemrograman di C dan setengah dari wawancara adalah OO.
Di dunia nyata, mengembangkan aplikasi nyata, apakah orientasi objek hampir selalu digunakan? Apakah fitur utama seperti polimorfisme digunakan BANYAK?
Saya pikir pertanyaan saya berasal dari salah satu kelemahan saya. Meskipun saya tahu tentang OO, saya sepertinya tidak bisa memasukkannya ke dalam program saya.
Jawaban:
OOP adalah paradigma yang memungkinkan program Anda tumbuh tanpa menjadi tidak mungkin untuk dipertahankan / dipahami. Ini adalah poin yang siswa hampir tidak pernah dapatkan karena mereka hanya mengerjakan proyek kecil paling lama dari dua minggu hingga dua bulan.
Periode singkat ini tidak cukup untuk membuat tujuan OOP jelas, terutama jika orang-orang di proyek ini adalah pemula. Tetapi berpegang teguh pada beberapa pemodelan sangat penting untuk proyek-proyek besar, saya akan mengatakan> 50.000 baris kode. OOP bukan satu-satunya solusi untuk itu, tetapi ini adalah yang paling banyak digunakan di industri.
Inilah sebabnya mengapa orang ingin Anda mengenal OOP.
Saya akan menambahkan, dengan pengalaman, bahwa hampir semua programmer junior memiliki kelemahan serius dalam modellisation dan OOP. Sebagian besar dari mereka tahu cara menulis kelas, mewarisi dari mereka dan hal-hal dasar seperti itu, tetapi mereka tidak berpikir dalam "OOP" dan akhirnya menyalahgunakannya. Inilah sebabnya mengapa setiap perekrut serius akan selalu melihat kompetensi Anda dalam domain OOP.
Karena hal-hal ini tidak dipelajari di sekolah, ada variasi pengetahuan yang sangat besar antara calon yang berbeda. Dan mari kita menjadi yang paling terhormat: Saya tidak berpikir seseorang yang pengetahuannya kurang dalam OOP dapat bekerja pada proyek besar apa pun, hanya karena akan membutuhkan lebih banyak waktu bagi para pemimpin untuk mengelola orang-orang ini daripada hanya menulis kode sendiri.
Jika Anda belum berpikir "OOP", saya sarankan Anda membaca beberapa buku tentangnya dan mendaftar di perusahaan yang tidak memiliki proyek besar; untuk membiasakan diri dengan OOP tetap melakukan pekerjaan yang bermanfaat bagi majikan Anda (dan selama ia memberi Anda gaji Anda, ini juga akan berguna bagi Anda).
EDIT: ha, dan saya akan menambahkan bahwa saya sudah menulis kode OOP dalam C, bahkan jika itu bukan penggunaan C yang paling umum, ini mungkin dengan pengetahuan yang kuat. Anda hanya perlu membuat vtables secara manual.
Dan di balik teknik OOP, ada sesuatu yang tersembunyi: desain perangkat lunak. Desain perangkat lunak, sangat membantu, dalam bahasa C seperti dalam bahasa lainnya. Banyak perekrut akan menguji kompetensi desain perangkat lunak Anda, dan pertanyaan OOP bagus untuk itu, tetapi OOP bukan hal utama yang sedang diuji di sini. Inilah sebabnya mengapa Anda memiliki pertanyaan-pertanyaan itu bahkan untuk pekerjaan C.
sumber
struct
dan fungsi-fungsi yang bekerja pada struktur itu di C adalah OOP.Masalah yang luar biasa dengan pemrograman komputer adalah penanganan kompleksitas, dan program modern memang bisa sangat kompleks, dan ini tampaknya hanya meningkat.
Banyak pekerjaan yang dilakukan dalam rekayasa perangkat lunak dari program komputer non-sepele berkonsentrasi pada penjinakan kompleksitas dan membuatnya dapat diakses sebanyak mungkin tanpa mencurahkan seumur hidup belajar pertama.
Contoh:
Dengan kata lain, mengetahui banyak trik diperlukan jika Anda ingin bekerja pada perangkat lunak non-sepele, baik sendiri atau (kemungkinan besar) dengan orang lain.
sumber
Ya, terutama karena mungkin dua platform pengembangan paling populer yang digunakan dalam pengembangan komersial (Java dan .NET) berorientasi objek dan itu berarti ya, OO banyak digunakan (termasuk polimorfisme, warisan dan yang lainnya).
Perusahaan tidak secara khusus peduli tentang orientasi objek sebagai teknologi - ini bukan hal ideologi, mereka peduli pada orang yang dapat mengembangkan solusi untuk masalah mereka dengan cara yang sejalan dengan strategi TI mereka.
Tapi saya tidak akan terlalu khawatir merasa itu kelemahan. Tanpa memandang rendah pendidikan Anda, kebanyakan orang di dunia komersial tidak melihat programmer meninggalkan universitas (pada tingkat apa pun) sebagai artikel akhir. Anda masih punya banyak hal untuk dipelajari dan itu dipahami (mungkin lebih baik oleh perusahaan daripada siswa).
sumber
Seperti dalam kehidupan nyata, pemrograman kehidupan nyata berbeda dari yang ada dalam teori.
Ya, jika Anda menjaga paradigma OO dipoles dan selalu di belakang pikiran Anda, Anda bisa melakukan yang lebih baik dalam menulis kode yang dapat dikelola, dimengerti dan mudah diperluas.
Sayangnya, dunia nyata memiliki ini:
Dalam pekerjaan nyata, Anda harus bekerja dengan masalah di atas. Ini terdengar demoralisasi. Tapi, perlakukan ini sebagai kepala. Perusahaan perekrutan menempatkan terlalu banyak kepentingan pada OO saat merekrut. Sangat mudah untuk melihat alasannya. Satu-satunya cara mereka dapat menguji kandidat adalah menanyakan tentang pemahaman OO. Dan sayangnya, banyak kandidat hanya memoles pertanyaan-pertanyaan itu sebelum muncul untuk wawancara.
OO kehidupan nyata datang lambat. Ini membantu jika Anda terus membaca dan terus meningkatkannya dari waktu ke waktu.
sumber
Saya memiliki perasaan yang sama pada saat menyelesaikan gelar sarjana saya, dan sebuah buku hebat yang menunjukkan mengapa dan bagaimana OOP relevan untuk aplikasi dunia nyata adalah Head First: Design Patterns . Saya sungguh-sungguh menyarankan Anda mengintip, itu ditulis dengan cara yang sangat menyenangkan dan membuat banyak poin yang valid mengapa pendekatan-OOP diinginkan ketika bekerja dengan skala yang lebih besar, sistem yang terus berubah.
sumber
Bahkan untuk beberapa pekerjaan di C, Anda mungkin perlu mengetahui desain berorientasi objek (dan mungkin lebih baik dalam hal itu daripada jika kompiler Anda melakukannya untuk Anda), sebagaimana dibuktikan oleh serangkaian artikel terbaru tentang desain berorientasi objek di kernel Linux. ( Bagian 1 , Bagian 2 )
GTK + juga menggunakan banyak pola desain berorientasi objek.
sumber
Saya harus menyatakan beberapa ketidaksetujuan dengan gagasan bahwa OO adalah segalanya - orang bisa mengatakan OO memungkinkan Anda membangun kota, tetapi program prosedural adalah batu bata.
Untuk memberikan jawaban saya dalam bentuk analogi, seorang objek kebutuhan umum, prajurit perlu prosedural. Setelah Anda cukup menelusuri OO Anda menemukan prosedur, dan jika itu keahlian Anda dan Anda cukup baik, jangan khawatir tentang OO, karena itu cukup mudah bagi seseorang untuk menulis kode permainan catur OO ini:
tapi kemudian seseorang harus menulis kode di belakang -findBestMove dan Anda bisa yakin bukan hanya ini:
Di sisi lain, jika Anda tidak tahu cara membaca kode OO, khawatir. Karena Anda dapat yakin (hampir) bahwa kode Anda akan mengacaukan objek. Kecuali Anda bekerja pada raksasa warisan 12.000 vars global dan 1.200 "modul" garis saat ini saya pertahankan.
sumber
Jon Hopkins menulis:
Yang cukup banyak apa yang akan saya katakan, tapi itu bukan hanya Java dan. Net, C ++ ada di mana-mana, Objective-C ada di seluruh OSX, semua anak keren mengerjakan Ruby atau Python, dan semua hal ini dan banyak lagi lebih banyak fokus pada orientasi objek. Banyak bahasa yang lebih baru adalah multi-paradigma, jadi sesuatu seperti F # terutama merupakan bahasa fungsional, tetapi juga mendukung orientasi objek. Itu ada di mana-mana, dan memiliki setidaknya beberapa pengertian sangat berguna. Namun, jangan terlalu khawatir tentang hal itu, karena baru saja menyelesaikan kursus universitas berarti Anda siap untuk mulai belajar tentang mengembangkan kode di dunia nyata :)
sumber
Saya telah melakukan pemrograman untuk waktu yang lama, dan saya menemukan konsep-konsep OO berguna bahkan ketika pemrograman dalam C - meskipun jika diuji saya mungkin akan gagal menggambarkan konsep-konsep itu dalam setiap detail kecil. Pada satu titik, saya bahkan menciptakan bahasa OO, meskipun belum sempurna, untuk memahami konsep-konsep dan untuk menemukan kesenangan dalam OO dari sudut pandang baru.
BTW, C ++ telah membuat OO berantakan besar dan jelek, sedangkan Objective C melakukannya dengan benar.
Tentang wawancara, mereka telah menjadi pertunjukan horor - dari kedua sisi meja. Sebagian besar yang diwawancarai sangat ketakutan oleh mereka. Kebanyakan manajer perekrutan heran dengan berapa banyak orang gagal bahkan tes pemrograman yang sangat dasar.
Yang mengatakan, ada beberapa tas douche besar yang bekerja di industri perangkat lunak saat ini yang tahu TIDAK ADA dan belum mengharapkan dunia dari calon karyawan.
sumber
Belajar OOP tidak berguna seperti pengembangan perangkat lunak pembelajaran. Baca Kode Lengkap 2 .
Tentu itu alat yang berguna tetapi OOP itu sendiri sangat kecil. Secara umum ketika perusahaan dan perekrut mengatakan "OOP" yang mereka maksudkan adalah "Pengembangan perangkat lunak". Ini digunakan sebagai istilah umum.
Perekrut sejati akan memberi tahu perbedaan antara Anda mengetahui cara mengembangkan perangkat lunak dan mencocokkan kotak centang "Sudah 3 tahun dalam 'OOP'".
sumber
Jawabannya adalah ya, seperti yang dicatat beberapa orang lainnya.
TETAPI, jika Anda ingin mengerjakan tumpukan kode spaghetti prosedural non-OO, Anda juga bisa menemukannya di sana. Saya pikir Anda akan lebih suka pekerjaan OO.
EDIT: Maafkan kasus sinisisme dan rasa humor koboi. Seperti kata Raynos, hanya karena ada sesuatu yang OO tidak berarti itu baik. Penerapan OO yang tepat membutuhkan kerja dan pemikiran nyata; hanya memiliki contoh itu tidak secara otomatis berarti aplikasi dibuat dengan baik. Dan sebaliknya, saya yakin ada kode prosedural yang ditulis dengan baik di luar sana. Pengalaman saya di toko-toko IT korporat sampai tahun 90-an dan 2000-an adalah banyak kode buruk ditulis dan mungkin masih ada. Tetapi lebih dekat ke pertanyaan OP, saya perhatikan bahwa pengembang yang lebih pintar, ketika diberi kesempatan, pindah ke lebih banyak sistem OO.
sumber
OO adalah dasar fundamental di mana teknik lain dibangun. Poin kuncinya adalah pertama sepenuhnya memahami perbedaan antara tipe (kelas) dan instance dari tipe itu. Jangan mencoba membaca tanpa memahami sepenuhnya (berpikir itu akan menjadi jelas nanti), karena Anda harus membaca sisanya lagi setelah Anda menangkap visi.
Setelah Anda terbiasa, Anda tidak akan pernah mau tanpanya. Saya bukan purist dalam hal enkapsulasi, pola, kerangka kerja atau apa pun. Di tempat kerja, Anda harus beradaptasi dengan berbagai pandangan dan konsep. Saya akan membuat daftar beberapa pengalaman kerja saya sebelumnya:
Di satu perusahaan, rekan-rekan saya ingin sebanyak mungkin pemuatan malas (konstruktor kosong, properti besar yang harus memeriksa nilai nol di mana-mana). Mereka sedang membangun objek sisi server berbasis web yang berumur pendek.
Pekerjaan berikutnya benar-benar berlawanan. Objek tinggal di dalam aplikasi desktop (berbasis Excel). Inisialisasi sebanyak mungkin harus ada di konstruktor (atau salah satu dari banyak kelebihan konstruktor). Konstruktor kosong tidak diizinkan karena benda kosong tidak memiliki hak keberadaan (yang membuat kegigihan menjadi tantangan). Selain itu saya harus beradaptasi dengan "standar gaya pengkodean" mereka (tempat untuk membuka tanda kurung, menambahkan spasi setelah komentar dll ...), karena kode saya tidak dapat diperiksa jika tidak melewati style-cop.
Saat ini saya sedang bekerja di sebuah perusahaan di mana tidak ada pengembang yang mencoba memahami OO. Sulit mengungkapkan betapa frustrasinya itu. Saya harus meningkatkan keterampilan Grep saya, pada kenyataannya saya memiliki makro HotScripts ditugaskan untuk kunci F12 saya untuk melakukan grep pada teks yang dipilih. Saya akan mengampuni frustrasi lainnya ...
Setelah Anda memperoleh keterampilan OO, Anda akan hampir alergi terhadap spageti! Namun dalam semua kasus, OO-atau tidak, bersabarlah dan beradaptasi. Enggan untuk "membuangnya dan memulai lagi". Atasan Anda lebih suka memilih Anda ketika harus membuang. Sayangnya "membuat mony" lebih penting daripada kode elegan.
Maaf untuk jawaban panjang tapi saya mencoba untuk menutupi sebagian besar ruang lingkup pertanyaan Anda :-)
sumber
OOP tidak penting karena itu sendiri, tetapi karena apa yang diperlukan. Sesuatu yang berhubungan dengan kemampuan untuk mengabstraksi dan mengisolasi, mengelompokkan hal-hal bersama akhirnya hanya memperlihatkan bagian-bagian yang diperlukan untuk berinteraksi bersama.
Ini adalah teknik rekayasa umum yang disebut "modularisasi", yang memungkinkan untuk membuat sistem kompleks sebagai agregasi yang lebih sederhana, tanpa harus mengurus setiap detail tunggal di tingkat tinggi, dan yang membutuhkan komponen yang dapat diganti, bahkan tanpa harus menjadi sama.
"Konsep-konsep rekayasa" tersebut telah dicoba untuk dimasukkan ke dalam pengembangan perangkat lunak dari saat produk perangkat lunak itu sendiri telah menjadi lebih besar daripada "kemampuan pengembang tunggal", sehingga membutuhkan cara untuk membuat pengembang bekerja pada bagian-bagian independen, dan membiarkan bagian-bagian itu untuk berinteraksi bersama.
Yang mengatakan, prinsip-prinsip tersebut tidak selalu ditemukan hanya dalam OOP (itu teori perhitungan valid, ada metode tak terbatas yang mungkin untuk sampai pada hasil tersebut).
OOP hanyalah upaya yang berhasil untuk menyatukan hal-hal tersebut, memberikan istilah-istilah umum (seperti modul, enkapsulasi, substitusi) definisi yang lebih tepat dan menguraikan konseptualisasi pada definisi (pola) yang dapat masuk ke dalam bahasa pemrograman.
Pikirkan dulu untuk OOP bukan sebagai " fitur bahasa " tetapi sebagai " leksikon umum " yang membuat insinyur perangkat lunak mendekati desain perangkat lunak.
Fakta bahwa bahasa yang diberikan memiliki atau tidak primitif yang secara langsung menegakkan leksikon yang memastikan - misalnya - bahwa "kapsul" tidak dibuka secara tidak sengaja oleh siapa yang tidak seharusnya melakukan itu adalah aspek sekunder dari desain OOP. Itu sebabnya bahkan proyek C besar sering "dikelola sebagai" OOP, bahkan jika bahasa itu sendiri tidak menawarkan dukungan langsung untuk itu.
Keuntungan dari semua yang tidak dikenali sampai ukuran proyek tetap menjadi kemampuan pengembang tunggal dalam memahami dan melacak semua yang dia lakukan (pada kenyataannya, dalam situasi itu bahkan dapat dilihat sebagai "overhead") atau menjadi kelompok kecil yang mengembangkan sesuatu dalam periode singkat. Dan itulah alasan utama junior yang mempelajari OOP dalam istilah "fitur bahasa" sering salah mengartikannya menghasilkan kode yang dirancang buruk.
Bagaimana OOP cocok dengan bahasa tergantung pada bagaimana perancang bahasa menafsirkan prinsip OOP dalam konstruk mereka sendiri.
Jadi "enkapsulasi" dalam C ++ menjadi "anggota pribadi" (dan "kapsul" menjadi kelas), "substitusi" menjadi fungsi virtual menimpa atau template parametrization / spesialisasi dll, sedangkan di D kapsul adalah "modul" (dan substitusi berjalan) melalui kelas dll), sehingga membuat paradigma atau pola tertentu langsung tersedia dalam bahasa yang diberikan dan tidak dalam bahasa lain dan seterusnya.
Apa yang dicari oleh perekrut dalam mengajukan pertanyaan OOP hanyalah memeriksa kemampuan Anda untuk abstrak dan membuat desain perangkat lunak untuk proyek dan pengembangan besar di masa depan. OOP, bagi mereka hanyalah "kamus" yang seharusnya mereka dan Anda ketahui sehingga Anda dapat berbicara tentang hal-hal lain yang lebih umum atau mengkonkretkan ke dalam implementasi spesifik.
sumber
Bahasa berorientasi objek membantu Anda menyimpan desain berorientasi objek dalam kode Anda, yang bagus. Tetapi juga benar bahwa desain seperti itu dapat diperoleh dengan bahasa paradigma lain: alasan popularitas (terutama di antara perusahaan) bahasa OO mungkin dalam keberhasilan komersial java dan c #.
Seandainya Tuan Gates memulai perusahaannya dengan cara yang benar, kami mungkin akan mempelajari SKEME sebelum melamar pekerjaan.
sumber
Jawaban singkatnya adalah Ya
Versi yang lebih lama mengapa Anda merasa atau dalam dilema mengapa hal itu penting hanya karena Anda belum pernah mengerjakan proyek atau implementasi yang memiliki tujuan tertentu. Ini benar-benar valid di ruang kelas untuk memiliki contoh tentang Automobile kemudian diperluas ke Car, Trucks ... tetapi ketika Anda terjun ke pengembangan perangkat lunak, sebuah solusi yang ditargetkan untuk memudahkan beberapa tugas. Sekarang jika bukan karena
OO
kita akan memintasemua orang menulis kode serupa di seluruh basis kode ataumenciptakan kembali roda setiap hari. Bayangkan betapa berantakannya jika seseorang masuk ke basis kode semacam itu untuk memperbaiki sesuatu. Contoh-contoh kelas adalah untuk definisi atau representasi yang kabur tentang bagaimana / mengapa hal itu dilakukan. Tes sebenarnya adalah ketika Anda mulai membangun aplikasi Anda, tidak diragukan lagi apa pun itu bisa sangat digunakan tetapi jauh menimbang kewarasan karena penggunaannya yang jelas dan ringkas. Jadi, lebih baik mulai bekerja pada area yang lemah ini setidaknya Anda membuat kode mimpi buruk.sumber
Tergantung. Salah satu alasan Anda perlu tahu OO karena itu adalah bahasa pergaulan dari dunia pemrograman. Sebagai jawaban lain menunjukkan, hampir setiap bahasa utama adalah OO dalam beberapa cara, yang berarti bahwa pada dasarnya setiap perusahaan yang mungkin mempekerjakan Anda menggunakan bahasa OO. Pernah mencoba mempekerjakan programmer OCaml? Tidak mungkin; kolam bakat terlalu kecil. Jika Anda memulai perusahaan Anda menggunakan OCaml dan perusahaan Anda menjadi sukses, Anda tidak akan dapat menyewa programmer dengan cukup cepat dan Anda akan keluar dari bisnis. Oleh karena itu hampir setiap perusahaan dengan lebih dari 3 programmer menggunakan bahasa OO, dan untuk berkomunikasi dengan rekan kerja Anda dan menggunakan perpustakaan platform Anda, Anda harus memiliki pemahaman tentang OO.
Bergantung pada bahasa tertentu yang digunakan perusahaan, pewarisan dan polimorfisme sangat penting atau hanya cukup relevan. Anda tidak dapat melakukan apa pun di Java tanpa menghilangkan 10 pola desain GoF dan kerangka kerja ketergantungan injeksi. Java adalah salah satu bahasa yang paling banyak digunakan, oleh karena itu prinsip-prinsip OO sangat penting bagi banyak perusahaan yang menggunakan Java.
Jika perusahaan menggunakan OO hybrid modern / bahasa fungsional yang memiliki lambda dan fungsi pointer, seperti Scala atau C #, maka pewarisan tiba-tiba menjadi kurang penting karena Anda memiliki fungsi urutan yang lebih tinggi untuk menangani banyak hal yang sangat sederhana yang jika tidak memerlukan banyak upacara. Namun Anda masih harus dapat bekerja dengan hal-hal OO karena sebagian besar perpustakaan yang Anda gunakan akan ditulis dengan cara OO.
Jika warisan dan polimorfisme tidak penting bagi perusahaan, Anda masih cenderung mendapatkan pertanyaan OO karena:
sumber
Dalam sebuah kata "Ya".
Anda mungkin berpikir Anda tahu teorinya, tetapi Anda perlu menulis beberapa kode dan mempraktikkannya. Ada - secara harfiah - ribuan contoh dan latihan yang tersedia secara online.
sumber