Cara menerangkan konsep pengaturcaraan berorientasikan objek kepada kanak-kanak berumur 6 tahun

Pernahkah anda perhatikan bagaimana soalan klise yang sama selalu diajukan semasa temu duga kerja - berulang kali?

Saya pasti anda tahu maksud saya.

Sebagai contoh:

Di mana anda melihat diri anda dalam lima tahun?

atau, lebih teruk lagi:

Apa yang anda anggap sebagai kelemahan terbesar anda?

Eh ... beri saya rehat. Saya menganggap menjawab soalan ini adalah kelemahan yang besar! Bagaimanapun, bukan maksud saya.

Sekecil apa pun soalan seperti ini, mereka penting kerana mereka memberi petunjuk mengenai anda. Keadaan fikiran anda sekarang, sikap anda, perspektif anda.

Semasa menjawab, anda harus berhati-hati, kerana anda mungkin akan mendedahkan sesuatu yang kemudian anda sesali.

Hari ini saya ingin membincangkan jenis soalan yang serupa dalam dunia pengaturcaraan:

Apakah prinsip utama Pengaturcaraan Berorientasikan Objek?

Saya telah menjawab kedua-dua soalan ini. Ini adalah salah satu topik yang sering ditanya sehingga anda tidak boleh membiarkan diri anda tidak tahu.

Pembangun peringkat rendah dan kemasukan biasanya harus menjawabnya. Kerana cara mudah bagi penemuduga untuk memberitahu tiga perkara:

  1. Adakah calon bersedia untuk temu duga ini?

    Mata bonus sekiranya anda segera mendengar jawapan - ini menunjukkan pendekatan yang serius.

  2. Adakah calon melepasi fasa tutorial?

    Memahami prinsip-prinsip Pemrograman Berorientasikan Objek (OOP) menunjukkan bahawa anda telah melampaui salinan dan menampal dari tutorial - anda sudah melihat sesuatu dari perspektif yang lebih tinggi.

  3. Adakah pemahaman calon mendalam atau cetek?

    Tahap kecekapan pada soalan ini selalunya sama dengan tahap kecekapan pada kebanyakan subjek lain . Percayalah.

Empat prinsip pengaturcaraan berorientasikan objek adalah enkapsulasi , abstraksi , pewarisan ,dan polimorfisme .

Kata-kata ini mungkin terdengar menakutkan bagi pemaju junior. Dan penjelasan yang rumit dan panjang di Wikipedia kadangkala menggandakan kekeliruan.

Itulah sebabnya saya ingin memberikan penjelasan yang ringkas, pendek, dan jelas untuk setiap konsep ini. Ia mungkin terdengar seperti sesuatu yang anda jelaskan kepada seorang kanak-kanak, tetapi saya sangat suka mendengar jawapan ini semasa saya menjalankan temu ramah.

Enkapsulasi

Katakan kita mempunyai program. Ia mempunyai beberapa objek yang berbeza secara logik yang saling berkomunikasi - mengikut peraturan yang ditentukan dalam program ini.

Pengkapsulan dicapai apabila setiap objek menyimpan negeri swasta , di dalam kelas. Objek lain tidak mempunyai akses langsung ke keadaan ini. Sebagai gantinya, mereka hanya dapat memanggil senarai fungsi umum - kaedah yang disebut.

Oleh itu, objek tersebut menguruskan keadaannya sendiri melalui kaedah - dan tidak ada kelas lain yang dapat menyentuhnya kecuali dibenarkan secara jelas. Sekiranya anda ingin berkomunikasi dengan objek, anda harus menggunakan kaedah yang disediakan. Tetapi (secara lalai), anda tidak dapat mengubah keadaan.

Katakan kita sedang membina permainan Sims kecil. Ada orang dan ada kucing. Mereka berkomunikasi antara satu sama lain. Kami ingin menerapkan enkapsulasi, jadi kami merangkum semua logik "kucing" menjadi aCatkelas. Ia mungkin kelihatan seperti ini:

Di sini "keadaan" kucing adalah pemboleh ubah peribadimood , hungrydan energy. Ia juga mempunyai kaedah peribadi meow(). Ia boleh memanggilnya bila-bila masa, kelas lain tidak boleh memberitahu kucing kapan hendak meow.

Apa yang dapat mereka lakukan ditentukan dalam kaedah umumsleep() , play()dan feed(). Masing-masing mengubah keadaan dalaman entah bagaimana dan mungkin memanggil meow(). Oleh itu, pengikatan antara kaedah swasta dan awam dibuat.

Ini adalah enkapsulasi.

Pengambilan

Abstraksi boleh dianggap sebagai lanjutan enkapsulasi semula jadi.

Dalam reka bentuk berorientasikan objek, program sering kali sangat besar. Dan objek yang terpisah saling berkomunikasi antara satu sama lain. Jadi mengekalkan pangkalan data yang besar seperti ini selama bertahun-tahun - dengan perubahan di sepanjang jalan - sukar.

Abstraksi adalah konsep yang bertujuan untuk meredakan masalah ini.

Menggunakan abstraksi bermaksud bahawa setiap objek hanya perlu memperlihatkan mekanisme tahap tinggi untuk menggunakannya.

Mekanisme ini harus menyembunyikan perincian pelaksanaan dalaman. Ia hanya perlu menunjukkan operasi yang relevan untuk objek lain.

Fikirkan - mesin kopi. Ia melakukan banyak perkara dan membuat bunyi yang aneh di bawah tudung. Tetapi yang harus anda lakukan ialah memasukkan kopi dan menekan butang.

Sebaiknya, mekanisme ini harus mudah digunakan dan jarang berubah dari masa ke masa. Anggap ia sebagai sekumpulan kaedah awam yang boleh dipanggil oleh kelas lain tanpa "mengetahui" bagaimana mereka berfungsi.

Contoh abstraksi kehidupan sebenar yang lain?

Fikirkan bagaimana anda menggunakan telefon anda:

Anda berinteraksi dengan telefon anda dengan hanya menggunakan beberapa butang. Apa yang berlaku di bawah tudung? Anda tidak perlu tahu - perincian pelaksanaan disembunyikan. Anda hanya perlu mengetahui sekumpulan tindakan yang pendek.

Perubahan pelaksanaan - misalnya, kemas kini perisian - jarang mempengaruhi pengabstrakan yang anda gunakan.

Warisan

OK, kami melihat bagaimana enkapsulasi dan pengabstrakan dapat membantu kami mengembangkan dan mengekalkan pangkalan data yang besar.

Tetapi adakah anda tahu apa masalah lain dalam reka bentuk OOP?

Objek sering serupa. Mereka berkongsi logik yang sama. Tetapi mereka tidak sepenuhnya yang sama. Aduh…

Oleh itu, bagaimana kita menggunakan semula logik biasa dan mengeluarkan logik unik ke kelas yang berasingan? Salah satu cara untuk mencapainya adalah warisan.

Ini bermaksud bahawa anda membuat kelas (anak) dengan berasal dari kelas (ibu bapa) yang lain. Dengan cara ini, kita membentuk hierarki.

Kelas kanak-kanak menggunakan semula semua bidang dan kaedah kelas induk (bahagian biasa) dan dapat melaksanakannya sendiri (bahagian unik).

Sebagai contoh:

Sekiranya program kami perlu menguruskan guru awam dan swasta, tetapi juga jenis orang lain seperti pelajar, kami dapat melaksanakan hierarki kelas ini.

Dengan cara ini, setiap kelas hanya menambahkan apa yang diperlukan untuknya sambil menggunakan semula logik biasa dengan kelas induk.

Polimorfisme

Kami sampai pada perkataan yang paling rumit! Polimorfisme bermaksud "banyak bentuk" dalam bahasa Yunani.

Oleh itu, kita sudah mengetahui kekuatan warisan dan dengan senang hati menggunakannya. Tetapi timbul masalah ini.

Katakan kita mempunyai kelas induk dan beberapa kelas anak yang mewarisinya. Kadang-kadang kita mahu menggunakan koleksi - contohnya senarai - yang mengandungi gabungan semua kelas ini. Atau kita ada kaedah yang dilaksanakan untuk kelas induk - tetapi kita juga mahu menggunakannya untuk anak-anak.

Ini dapat diselesaikan dengan menggunakan polimorfisme.

Ringkasnya, polimorfisme memberi cara untuk menggunakan kelas sama seperti induknya sehingga tidak ada kekeliruan dengan jenis pencampuran.Tetapi setiap kelas kanak-kanak menyimpan kaedahnya sendiri sebagaimana adanya.

Ini biasanya berlaku dengan menentukan antara muka (induk) yang akan digunakan semula. Ini menggariskan sekumpulan kaedah biasa. Kemudian, setiap kelas kanak-kanak menggunakan versi kaedahnya sendiri.

Bila-bila masa koleksi (seperti senarai) atau kaedah mengharapkan contoh ibu bapa (di mana kaedah umum digariskan), bahasa menjaga penilaian pelaksanaan kaedah yang betul - tanpa mengira anak mana yang dilalui.

Lihat lakaran pelaksanaan angka geometri. Mereka menggunakan antara muka biasa untuk mengira luas permukaan dan perimeter:

Mempunyai tiga angka mewarisi induk Figure Interfacemembolehkan anda membuat senarai bercampur triangles, circles, dan rectangles. Dan perlakukan mereka seperti jenis objek yang sama.

Kemudian, jika senarai ini cuba mengira permukaan untuk elemen, kaedah yang betul dijumpai dan dilaksanakan. Sekiranya elemen itu adalah segitiga, segitigaCalculateSurface()dipanggil. Sekiranya bulatan - maka cirlceCalculateSurface()dipanggil. Dan sebagainya.

Sekiranya anda mempunyai fungsi yang beroperasi dengan angka dengan menggunakan parameternya, anda tidak perlu menentukannya tiga kali - sekali untuk segitiga, bulatan, dan segi empat tepat.

Anda boleh menentukannya sekali dan menerima a Figuresebagai hujah. Sama ada anda melewati segitiga, bulatan atau segi empat tepat - selagi ia dilaksanakan CalculateParamter(), jenisnya tidak menjadi masalah.

Saya harap ini dapat membantu. Anda boleh menggunakan penjelasan yang sama tepat ini semasa temu duga kerja.

Sekiranya anda menemui sesuatu yang masih sukar difahami - jangan ragu untuk bertanya dalam komen di bawah.

Apa yang akan datang?

Bersedia untuk menjawab salah satu soalan wawancara klasik selalu hebat - tetapi kadang-kadang anda tidak pernah dipanggil untuk wawancara.

Seterusnya, saya akan memberi tumpuan kepada apa yang ingin dilihat oleh majikan dalam pemaju junior dan bagaimana menonjol dari orang ramai ketika mencari pekerjaan.

Nantikan.