Apakah pemrograman OO benar-benar sama pentingnya dengan mempekerjakan perusahaan? [Tutup]

55

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.

ale
sumber
3
Namun, semuanya tidak hilang. Mengakui ada masalah adalah langkah pertama untuk memperbaikinya :)
melahap elysium
37
Saya butuh beberapa tahun untuk memahami MENGAPA tepatnya OO adalah konsep yang berguna. Saya dapat memahami semua bagian teknis, tetapi tidak dapat menemukan sesuatu yang bermanfaat. Saya kira banyak dari contoh-contoh bodoh yang saya tunjukkan dengan Anjing yang memperpanjang mamalia memperluas Hewan ... Yang membuka mata saya, adalah melihat ke dalam pola desain OO, terutama Pendengar (alias Pengamat) dan pola Strategi
Mchl
1
Ya itu. Secara jujur.
quant_dev
6
Lihat jawabannya oleh Thorbjørn Ravn Andersen. Untuk menjadi programmer yang baik, Anda perlu tahu modularitas dan desain API. Tidak semua programmer dalam industri ini baik, tetapi kebanyakan menggunakan OOP. Sayangnya, campuran OOP dan kode non-modular dan API yang buruk menyebabkan perangkat lunak berkualitas buruk, dan Anda akan melihat banyak jenis kode ini bekerja. Kecuali Anda menulis banyak kode di waktu luang, Anda mungkin tidak tahu banyak tentang OOP "kehidupan nyata". Tidak apa-apa, Anda tidak sendirian dalam posisi ini.
Yoh
1
Ho ya dia bisa. Dan percayalah, jika Anda memiliki pemahaman yang sama tentang OOP yang Anda miliki ketika mendapat gelar master Anda, maka Anda mungkin tidak tahu apa-apa tentang OOP.
deadalnix

Jawaban:

84

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.

deadalnix
sumber
2
Dan ya .. seperti yang saya tulis di komentar sebelumnya, saya pikir saya perlu mengerjakan proyek yang lebih besar untuk menghargai OOP :).
ale
5
Anda tidak perlu vtables menjadi OOP. hanya menggunakan structdan fungsi-fungsi yang bekerja pada struktur itu di C adalah OOP.
edA-qa mort-ora-y
2
@ edA-qa mort-ora-y struct tidak memberi Anda fungsionalitas OOP. Polimorfisme? Warisan ? Apakah itu ada artinya bagi Anda? OK, jadi, bagaimana Anda mengimplementasikan fungsi virtual tanpa vtable?
deadalnix
2
@deadalnix: Anda menerapkannya dengan cara yang sama. NET dan Java melakukan multiple inheritance. Anda harus tahu bahwa kompiler C ++ pertama bukanlah kompiler sama sekali, mereka adalah penerjemah yang mengambil kode C ++ dan mengubahnya menjadi kode C yang diteruskan ke kompiler C. Google "CFront".
gbjbaanb
3
Java dan; NET tidak melakukan multi inhéritance. Dan ya, C ++ diterjemahkan dalam C secara otomatis, tetapi ini sama sekali tidak terkait dengan masalah menggunakan vtable atau tidak. Sebenarnya Anda harus: Anda tidak dapat mengimplementasikan fungsi virtual tanpa vtable.
deadalnix
38

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:

  • Modularisasi: Anda membuat program secara konsep lebih sederhana dengan memiliki modul kode, di mana masing-masing modul hanya tahu sedikit tentang modul lain (alih-alih, misalnya, ikon menggambar rute tikus diizinkan untuk memanipulasi buffer kartu jaringan secara langsung).
  • API: Mereka memberikan jalur penggunaan sederhana ke program kompleks di belakang API. Ketika Anda membuka file, Anda tidak peduli bahwa jaringan berbagi ditangani berbeda dari USB-disk. APInya sama.
  • Orientasi objek. Ini memungkinkan Anda untuk menggunakan kembali kode yang ada dan membuatnya bekerja secara transparan dengan kode baru yang Anda tambahkan, sambil tetap menyembunyikan semua kerumitan yang mendasarinya.

Dengan kata lain, mengetahui banyak trik diperlukan jika Anda ingin bekerja pada perangkat lunak non-sepele, baik sendiri atau (kemungkinan besar) dengan orang lain.

user1249
sumber
7
Saya suka Anda membuat perbedaan antara modularitas, API dan OO. Saya pikir ada kesalahpahaman yang tersebar luas di industri perangkat lunak bahwa OO berarti semua hal ini.
Joh
3
Bahkan mengetahui OO sendiri bukanlah persyaratan yang sulit, paradigma prosedural dan fungsional sudah cukup di bidang-bidang tertentu (C atau Haskell). Anda masih perlu mempelajari Modularisasi dan desain API.
Raynos
@ Raynos, di C Anda memiliki pointer fungsi yang memungkinkan Anda untuk melakukan secara eksplisit apa yang OO lakukan secara intrinsik. Demikian pula Haskell menggunakan pencocokan pola untuk secara eksplisit melakukan apa yang dilakukan oleh kompiler di Java.
@ThorbjornRavnAndersen adalah sedikit ceruk untuk menulis OO style C dan Haskell. Saya hanya mengatakan bahwa menggunakan kembali kode dapat dilakukan dalam paradigma prosedural dan fungsional.
Raynos
3
@ mathepic Saya tidak mengatakan orang harus menulis OO haskell (atau apakah itu ada). Saya mengatakan Anda tidak perlu tahu OO. Ada cara lain untuk menangani kompleksitas (FP)
Raynos
14

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).

Jon Hopkins
sumber
2
Harus memanggil Anda keluar dari perusahaan yang 'tidak peduli' tentang OO - perusahaan yang baik peduli dengan basis kode yang dapat digunakan kembali / dikelola, dan pola OO adalah cara yang diakui untuk melakukan ini.
HorusKol
1
@ HorusKol - Mereka melakukannya, namun meskipun begitu Perl, Cobol dan Visual Basic semuanya sukses secara komersial dan Smalltalk tidak. Anda adalah perusahaan yang tepat seperti kode yang dapat dipelihara tetapi itu bukan persyaratan mutlak, mereka akan membobotnya dengan faktor lain.
Jon Hopkins
Nah, Cobol ada sebelum OO. Saya tidak dapat mengomentari Smalltalk, tapi saya membayangkan pasti ada masalah dengan itu jika tidak diambil.
HorusKol
1
@HorusKol - Sebenarnya Cobol dan OO muncul sekitar waktu yang sama (akhir 50-an) tetapi bahkan jika kita berasumsi bahwa OO tidak benar-benar mulai memegang sampai tahun 70-an atau bahkan tahun 1980-an (Anda menunggu C ++) jika itu BAHWA masalah besar bagi perusahaan mengapa itu tidak menarik sampai akhir 90-an (dengan Jawa). Jawabannya adalah ada cara untuk memiliki basis kode yang dapat dipelihara selain dari OO - perusahaan peduli dengan kode yang dapat dipelihara tetapi ada lebih dari satu cara untuk menguliti kucing dan OO bukan satu-satunya solusi.
Jon Hopkins
Agak aneh menyebut platform itu sendiri OO. Clojure bukan OO. Scala memiliki beberapa elemen OO kurasa, tetapi paling baik digunakan secara fungsional. F # adalah jenis kesepakatan yang sama. menulis kode OO di F # hanya kotor.
sara
7

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:

  • tekanan waktu proyek
  • anggota tim yang berorientasi prosedur
  • tim lintas lokasi, banyak vendor
  • kode lama tidak memiliki orientasi apa pun
  • selama ini berhasil, beberapa orang peduli tentang bagaimana kode ditulis
  • bahkan jika kode tidak berfungsi, motivasi untuk memperbaikinya, bukan "OO" itu
  • modul, batasan platform, kerangka kerja yang tidak memungkinkan Anda melakukan OO dengan baik

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.

Amol
sumber
6

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.

David Haas
sumber
Senang saya bukan satu-satunya! Terima kasih .. Saya akan melihat buku itu :).
ale
6

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.

Ken Bloom
sumber
4

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:

-findBestMove
-makeBestMove
-waitForPlayerInput

tapi kemudian seseorang harus menulis kode di belakang -findBestMove dan Anda bisa yakin bukan hanya ini:

foreach $move (@moves){
    $bestMove = ($move > $bestMove ? $move : $bestMove)
}
return $bestMove

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.

Alex
sumber
4

Jon Hopkins menulis:

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).

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 :)

eviltobz
sumber
3

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.

Ponk
sumber
C ++ adalah bahasa multi-paradigma tetapi menangani OO dengan cukup baik .. bukan?
Nikko
1
Saya akan mengatakan C ++ memberi Anda kemampuan untuk membuat kekacauan besar yang jelek. Jika dilakukan dengan benar, keindahannya adalah kesederhanaannya.
Martin York
Melewatkan dasar-dasar selalu memberikan kekacauan besar. C ++ hanya memiliki sejumlah besar dasar-dasar yang perlu Anda pahami. Inilah sebabnya mengapa mungkin menggunakan C ++ untuk program besar. Itu perlu.
tp1
@Ponk: BTW, C ++ telah membuat kekacauan besar dan buruk dari OO, sedangkan Objective C melakukannya dengan benar. - Saya belum mencoba Objective C, jadi saya tidak punya alasan untuk meragukan Anda, tetapi di mana saya dapat menemukan argumen yang lebih menyeluruh dan meyakinkan untuk ini?
Jim G.
3

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'".

Raynos
sumber
Ya, dalam konteks ini OOP sama seperti GUI, seperti dalam "Anda membutuhkan pengalaman GUI 5 tahun untuk peran ini".
gbjbaanb
1

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.

Bernard Dy
sumber
3
-1 untuk menyiratkan kode non-OO adalah spaghetti. dan bahwa OO menghasilkan "tidak spageti" yang bagus dengan ilmu hitam.
Raynos
@ Raynos Itu adalah poin yang adil. Dan hanya karena sesuatu tidak menggunakan OO tidak berarti itu buruk. Saya akan mengedit.
Bernard Dy
Ini juga bukan hanya prosedural vs prosedural / OOP, ada juga paradigma fungsional.
alternatif
Saya telah bekerja pada aplikasi OO yang tidak dapat dikelola di mana objek tersebar seperti confetti. OOP bukan peluru ajaib, ini hanya cara yang lebih jelas dalam mengatur kode Anda.
gbjbaanb
2
Ya, ya, seribu kali ya! Silakan lihat hasil edit. Komentar saya benar-benar lebih bodoh pada banyak contoh kode warisan yang buruk yang saya senang kerjakan daripada itu adalah potongan prosedur atau OO tertentu. Tetapi jika saya punya pilihan, saya lebih suka bekerja pada sistem OO yang dirancang dengan baik daripada sistem prosedural yang dirancang dengan baik; dan sistem yang dirancang lebih baik dari yang dirancang buruk setiap hari.
Bernard Dy
1

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 :-)

Louis Somers
sumber
Terima kasih banyak untuk ceritamu .. Aku senang membacanya! Saat ini saya sedang mengerjakan proyek C ++ dan saya menggunakan kesempatan ini untuk memikirkan kemungkinan cara saya bisa menggunakan teknik OO. Ini berjalan dengan baik saat ini :). +1 untuk jawaban Anda. Terima kasih.
bir
1

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.

Emilio Garavaglia
sumber
0

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.

Lorenzo Stella
sumber
Skema muncul pada tahun yang sama dengan yang Microsoft lakukan (walaupun tentu saja ada LISP lain sebelum itu). Juga, Java dan C # berutang banyak keberhasilan kepada Alan Kay, khususnya Smalltalk, dan Simula sebelumnya, serta keberhasilan C ++.
JasonTrue
0

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 OOkita akan meminta semua 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.

V4Vendetta
sumber
0

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:

  • Anda diwawancarai oleh orang SDM yang tidak tahu apa-apa tentang pemrograman dan mengajukan pertanyaan dari daftar periksa. Apakah Anda memiliki 3 tahun X, apakah Anda multitask, dll.
  • Anda diwawancarai oleh seorang insinyur yang ingin memastikan Anda belum hidup di bawah batu. OO adalah lingua franca, jadi Anda akan ditanyai beberapa pertanyaan sepintas lalu tentang hal itu.
  • Anda diwawancarai oleh seorang insinyur yang tidak mahir dalam wawancara. Secara umum, insinyur menyukai hal-hal sepele dan kompleksitas, sehingga Anda akan mendapatkan banyak pertanyaan tentang polimorfisme, pewarisan, dan pola desain GoF hanya karena hal-hal ini menarik bagi orang yang mewawancarai Anda.
dan
sumber
mengapa downvote?
dan
-1

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.

Biner Terburuk
sumber