Saya ingin belajar OOP. Saya tahu Python dan saya tahu sedikit sekali tentang OOP.
Tetapi ketika saya mencari "belajar OOP" di forum saya melihat seorang pria mengatakan bahwa "Python sangat baru itu sebabnya Anda tidak dapat belajar OOP di Python. Anda harus belajar Java kemudian memahami OOP di Jawa"
Apakah itu benar Apakah ada perbedaan dalam memahami OOP pada berbagai bahasa pemrograman? suka mempelajarinya di Java, C #, C ++, Perl atau Python?
java
object-oriented
python
pengguna2783998
sumber
sumber
Jawaban:
Objek sebagai konstruksi teoretis sangat sederhana: Ini adalah struktur yang menyimpan data, fungsi, atau keduanya. Idenya adalah bahwa struktur ini memiliki rasa "diri" yang tersirat dalam sebagian besar bahasa di luar Python. Ini disebut "deskriptor" dan memberikan objek titik referensi diri yang mengikat data (variabel atau bidang) dan fungsi (biasanya disebut metode) ke objek tertentu yang dimaksud. Gagasannya adalah bahwa Anda secara khusus menggunakan variabel atau metode yang dimiliki oleh instance tertentu (blok memori yang dialokasikan biasanya di bawahnya) daripada ke beberapa konstruksi yang lebih besar dan lebih umum.
Sistem objek cenderung bervariasi sehubungan dengan dua kategori besar: Warisan dan Akses.
Beberapa, seperti Java atau C ++, meminta Anda mendeklarasikan kelas yang bertindak sebagai "cetak biru" untuk objek yang kemudian dialokasikan. Kelas-kelas ini dan objek-objek mereka tidak dapat secara struktural diubah setelah dipakai. Mereka dapat memiliki konten mereka ditimpa dalam arti bahwa variabel dapat berubah tetapi strukturnya statis. Anda tidak dapat, misalnya, menambahkan metode baru ke HashMap di Java. Anda dapat memperluas antarmuka (pada dasarnya sebagian kelas yang diimplementasikan berfungsi sebagai kontrak) atau membuat subkelas untuk mendapatkan metode atau variabel tambahan yang Anda butuhkan bersama dengan semua variabel asli dan metode dari kelas tertentu yang bersangkutan.
Bahasa berbasis kelas lain, yang paling sering dikutip adalah Ruby, memungkinkan Anda untuk dengan mudah membuka kelas yang ada dan hanya menambahkan metode sesuai keinginan Anda. Ini adalah pertengkaran dan dianggap oleh banyak orang sebagai sangat, sangat berbahaya.
Javascript bahkan lebih longgar, Objek tidak lebih dari sekumpulan slot untuk variabel atau fungsi. Mereka dapat diubah atau ditimpa setiap kali programmer merasa perlu untuk melakukannya. Mereka bahkan dapat dikloning secara sewenang-wenang sebagai "Prototipe" untuk objek lain, dengan demikian meneruskan semua kemampuan mereka.
Kontrol akses adalah perbedaan besar antara berbagai bahasa.
Beberapa bahasa seperti Java memiliki pengubah akses yang sangat ketat seperti "privat" dan "dilindungi", yang mendefinisikan dengan tepat kelas dan subclass apa yang dapat menggunakan variabel atau metode tertentu.
Lainnya, seperti Python kurang formal, menggunakan konvensi garis bawah sebelum metode atau nama variabel untuk menunjukkan bahwa itu pribadi.
Pada akhirnya, Python adalah bahasa yang benar-benar sah untuk diprogram dengan cara yang berorientasi objek, itu hanya tidak menegakkannya seketat beberapa yang lain.
sumber
private
untuk Java dan garis bawah (__
) untuk Python cukup penting. Saya pikir tingkat abstraksi Python mungkin membuatnya sedikit lebih menantang bagi pemula, tapi jelas bukan tidak mungkin. Java menjelaskannya untuk programmer yang mungkin membuat beberapa konsep lebih mudah.Mempelajari prinsip - prinsip OOP sama sekali tidak spesifik dalam bahasa, jadi jika dengan "mempelajari OOP", yang Anda maksud adalah "mempelajari apa arti terminologinya, apa itu OOP dan mengapa saya ingin menggunakannya" maka bahasa itu tidak masalah.
Jika Anda bermaksud "belajar bagaimana mengembangkan menggunakan OOP" maka ya, bahasa yang berbeda menanganinya secara berbeda, tetapi mereka semua memiliki seperangkat prinsip yang sama. Jika Anda seperti saya, Anda akan mempelajarinya paling baik hanya dengan melakukannya. Pilih bahasa berorientasi objek dengan tutorial atau buku yang bagus yang membahas aspek berorientasi objek dan miliki. Jika Anda memiliki prinsip-prinsip desain berorientasi objek, Anda akan dapat menggunakannya dalam bahasa OO lainnya.
Ini hanya membuat kepala saya sakit. Begitu banyak kesalahan dijejalkan ke dalam satu kalimat.
Python berasal dari tahun 1989.
http://python-history.blogspot.com/2009/01/brief-timeline-of-python.html
Jawa hingga 1995.
http://www.oracle.com/technetwork/java/javase/overview/javahistory-index-198355.html
Anda dapat menarik kesimpulan sendiri tentang validitas sedikit nasihat itu ...
sumber
Saya pikir orang yang Anda kutip hanya menampilkan chauvinisme bahasa.
Pada kenyataannya, ada perbedaan antara konsep OOP dan implementasi OOP. Secara puitis, ini paling baik dipahami setelah Anda memiliki pemahaman yang lebih baik tentang beberapa konsep OOP.
Banyak programmer yang merasa nyaman dengan hanya beberapa bahasa yang serupa, sehingga mereka tidak perlu mengembangkan kemampuan mereka atau menderita karena tidak mampu untuk sementara waktu.
Jadi pertanyaannya adalah, apakah Python akan mengajarkan Anda konsep OOP?
Saya akan mengatakan Anda bisa, asalkan Anda memiliki dukungan belajar yang memadai yang mendorong Anda mencoba hal-hal yang biasanya tidak Anda jelajahi dalam pembelajaran mandiri. Buku atau mentor semacam itu adalah yang terbaik. Mark Lutz menulis buku yang sangat mendalam, sangat rinci, dan sangat bagus tentang Python, dan saya akan merekomendasikan buku-bukunya karena mereka akan mendorong Anda untuk melakukan dan belajar lebih banyak.
Yang harus Anda ingat adalah bahwa cara Python bukan satu-satunya Jalan, juga bukan Satu-satunya Jalan yang Benar. Semakin banyak paradigma pemrograman yang Anda kuasai, semakin baik Anda menjadi programmer. Cara Python melakukan OOP tidak persis bagaimana C ++ atau Java melakukannya, tetapi konsepnya ditransfer dengan baik.
sumber
Ya, implementasi OOP sangat berbeda. Teori dan prinsipnya sama, tetapi begitu banyak orang menganggap hanya "OOP nyata" yang dilakukan oleh Java dan C ++, sehingga Anda mendapatkan banyak referensi yang seharusnya "bahasa agnostik" tetapi pada kenyataannya mengasumsikan berbasis bahasa, bahasa yang diketik secara statis. .
Itu tidak berarti bahwa referensi itu buruk, atau bahkan terbatas; misalnya buku mani "geng empat" (GoF) "Pola Desain: Elemen Perangkat Lunak Berorientasi Objek yang Dapat Digunakan Kembali" adalah contoh utama dari sebuah karya hebat yang mengatakan "OOP" ketika itu benar-benar berarti "OOP berbasis kelas statis".
Jadi, menurut saya: Ya, Anda dapat belajar banyak OOP di Python, Javascript, C, dan banyak bahasa lainnya; tetapi beberapa orang (mungkin majikan masa depan) ketika meminta "pengalaman OOP" berarti Java / C ++ / C #. Jadi, akan lebih bijaksana untuk memeriksa pandangan lain itu juga.
(dan itu bukan hanya dua 'jenis' dari OOP ....)
sumber
Pemrograman Berorientasi Objek adalah ide tentang bagaimana menyusun bahasa pemrograman untuk menumbuhkan kopling rendah, menyembunyikan informasi (alias enkapsulasi), menggabungkan data dan metode yang beroperasi pada data tersebut bersama-sama, dan penggunaan kembali kode. Banyak bahasa yang menerapkan ide-ide ini sehingga ada variasi antar bahasa tentang bagaimana mereka mendekati Orientasi Objek. Sebagai contoh, Java hanya memungkinkan kelas untuk memperluas 1 kelas. Namun, Python dan C ++ memungkinkan Anda untuk memperpanjang sejumlah kelas. Java memiliki alasan khusus untuk keterbatasannya. Keterbatasan yang dimaksudkan untuk memperbaiki hal-hal dari C ++, tetapi juga karena Smalltalk hanya mendukung kelas basis tunggal.
Bahasa OO dapat dikelompokkan menjadi dua keluarga. Keluarga Smalltalk (atau OOP berbasis kelas) bahasa termasuk C ++, Java, Smalltalk, Ruby, C #, Python untuk beberapa nama (ada banyak dalam keluarga ini). Ini adalah campuran dari jenis bahasa statis dan dinamis dan sementara mereka sedikit berbeda pada beberapa konsep mereka sangat mirip dalam bagaimana mereka berpikir tentang OOP. Yang saya maksud dengan itu adalah bagaimana mereka mendekati kopling, enkapsulasi, data dan metode yang mengikat, dan penggunaan kembali kode, dan alat yang mereka sediakan bagi Anda untuk melakukan itu. Dalam keluarga ini banyak konsep yang sama.
Keluarga lainnya adalah OOP berbasis protoype. Bahasa-bahasa ini terlihat sangat berbeda dalam implementasi OOP mereka. Mungkin contoh paling terkenal dari ini adalah Javascript, tetapi Javascript menyalin ide-ide ini dari Skema dan Objek LISP. Ini adalah bahasa yang kurang dikenal dan biasanya diketik secara dinamis. Saya tidak bisa memikirkan bahasa berbasis prototipe yang diketik secara statis, tetapi itu tidak berarti tidak ada satu pun. Anda dapat membacanya di sini: http://en.wikipedia.org/wiki/Prototype-based_programming . Intinya adalah mereka mendekati OOP dengan cara yang sangat berbeda dari bahasa berbasis kelas. Itu berarti konsep tidak portabel antara dua keluarga ini. Hanya karena Anda tahu OO dalam satu keluarga tidak berarti Anda akan dengan mudah mengalihkan ide-ide itu ke keluarga lain.
Ingatlah bahwa sebagian besar bahasa pemrograman memadukan konsep dari banyak ide. Python dan Ruby menggabungkan ide-ide pemrograman OOP dan fungsional ke dalam bahasa mereka. Dan Anda dapat mencampur prototipe OO berbasis dengan ekstensi tertentu ke bahasa berbasis kelas sehingga lebih kompleks.
sumber
OOP adalah prinsip pemrograman - ini pada dasarnya sebuah ide. Implementasi OOP bervariasi di seluruh bahasa pemrograman - tetapi pilar (Abstraksi, Warisan, Enkapsulasi, dan Polimorfisme) OOP biasanya hadir dalam beberapa cara atau bentuk.
Saya akan mengatakan tanpa preferensi untuk kedua bahasa, bahwa Java mendorong semantik sedikit lebih keras pada programmer daripada mengatakan Python.
Sebagai contoh,
Kode Java:
class Cat extends Animal {}
Apakah sedikit lebih jelas mengenai apa yang Anda lakukan dalam sudut pandang OOP daripada:
Kode python:
class Cat(Animal):
Tentu mereka berdua mendefinisikan hierarki kelas tempat Kucing mewarisi dari Hewan. Tetapi saya merasa bahwa untuk seorang programmer yang baru memulai di OOP, aplikasi dan implikasi dari ide-ide OOP mungkin tetap sedikit lebih baik di Jawa karena ini mengeja untuk programmer.
sumber
Anda secara eksplisit bertanya apa bahasa yang paling mudah untuk mempelajari konsep OOP. Saya pikir jawabannya jelas: python .
Untuk menunjukkan mengapa hal ini terjadi, mari kita lihat program pemula pada Java vs Python. Ayo buat game tebak-tebakan tinggi-rendah sederhana
Jawa
Di Jawa, Anda akan menulis kelas Game.
Saya seorang programmer yang berpengalaman, dan bahkan saya mengalami kesulitan. Selanjutnya, lihat apa yang perlu Anda jelaskan kepada calon siswa untuk program sederhana ini:
this.
notasi untuk merujuk ke variabel ketika mereka disembunyikan oleh orang lainSystem.out
adalah outputStream. Dan ya, itu adalah sebuah ladang, tapi itu sebuahstatic
ladang.String[]
adalah sebuah array. Ini adalah jenis objek khusus, tetapi sekali lagi, tidak juga.int
adalah tipe primitif. Itu spesial.Python
Python jauh lebih murni. Tidak ada tipe primitif. Konstruktor tidak ada, hanya ada metode khusus yang disebut inisialisasi.
Anda tidak perlu berinteraksi dengan konsol, karena Anda punya
REPL
. Anda cukup memainkan game menggunakang.guess(35)
dan mengembalikan string.Ini membuat bahasa lebih mudah untuk dipelajari dan memahami konsep OOP dasar.
sumber
Gagasan inti dalam OOP adalah merangkum (yang berarti bundling atau menyembunyikan) variabel dan metode bersama-sama di dalam kelas (yang python benar-benar mendukung). Ini tentang merancang kode Anda di sekitar kata benda. Kemudian semacam itu berlangsung dari sana.
Meskipun ada perbedaan implementasi (misalnya, python tidak mendukung visibilitas seperti Java) dan perbedaan sintaks (dalam Javascript, Anda harus mewarisi metode sendiri), desain dasar tetap sama.
Saya pikir itu lebih mudah untuk belajar OOP dalam bahasa seperti Jawa, karena bahasa mengharuskannya dan komunitas kurang merugikan daripada, katakanlah, komunitas python.
Tapi ada banyak tulisan tentang desain & praktik OOP di luar sana, dan membaca itu bukan usaha yang sia-sia. Bahkan ketika saya menulis python (yang banyak), saya menulis banyak objek, dan saya menggunakan banyak objek dari perpustakaan pihak ketiga.
sumber
Ketika Anda belajar OOP dalam bahasa Anda mulai berpikir dalam bahasa ini. Bahasa memengaruhi apa yang menurut Anda dapat dilakukan dan bagaimana serta juga menambahkan rasa pada OOP.
Beberapa orang tidak dapat melakukan OOP tanpa kelas. Beberapa harus membunuh benda mereka dengan proses itu.
Ada inti dari OOP dan ide-ide orisinil tentangnya. Anda juga dapat melihat Smalltalk, Self, Simula, LISP, Newspeak. Dan juga melihat jenis bahasa non-OOP seperti bahasa aliran data bash, APL, J. Logikal yang Prolog. Haskell (kelas tipe). Mereka semua akan mengajarkan Anda pemikiran yang berbeda dan Anda dapat mempelajarinya
Dan pada akhirnya Anda dapat melihat apa manfaat OOP. Setidaknya Anda akan punya ide lain tentang itu. Saya sarankan mencari ceramah oleh Alan Kay .
Jika Anda tidak melihat bahasa pos ini tidak berguna.
Seperti yang Anda lihat di sini: Kami tidak dapat menyepakati apa itu OOP.
sumber