Apa kondisi historis yang menyebabkan pemrograman berorientasi objek menjadi paradigma pemrograman utama?

14

Apa saja faktor ekonomi (dan sejarah lainnya) yang menyebabkan bahasa pemrograman berorientasi objek menjadi berpengaruh? Saya tahu bahwa Simula memulai sesuatu, tetapi apakah adopsi bahasa OOP karena meningkatnya kebutuhan bisnis? Atau, apakah adopsi lebih karena hal-hal baru yang dapat dilakukan dengan bahasa OOP?

Sunting Saya sangat tertarik dengan apakah ada beberapa faktor yang terjadi di luar bahasa itu sendiri yang memungkinkan mereka untuk bertahan.

ihtkwot
sumber
Itu masuk akal, tapi saya rasa saya lebih tertarik dengan keadaan eksternal yang terjadi selama pengembangan. Bisa jadi faktor eksternal memiliki efek terbatas.
Saya menjamin Anda bahwa bahkan untuk pertanyaan mengenai faktor eksternal, programer .stackexchange adalah tempat yang lebih baik. Ada banyak orang yang aktif bekerja di industri ini dan banyak yang sudah bekerja sejak industri ini lepas landas. Anda akan lebih mungkin menemukan seseorang di sana yang memiliki jawaban yang sangat baik untuk pertanyaan Anda daripada di sini.
Memilih
2
Smalltalk tidak memulainya. Simula menciptakan konsep dasar orientasi objek. Apa yang dilakukan Smalltalk adalah mengambil ide-ide itu dan mengubahnya menjadi model yang sangat berbeda dan sesuai namanya. Tetapi perlu dicatat bahwa tidak ada bahasa yang mengikuti model Smalltalk dari OO yang pernah benar-benar sangat sukses untuk membangun program. (Dengan pengecualian Objective-C, yang merupakan kasus khusus: Apple mendorongnya ke bawah leher semua orang di pihak mereka, tetapi tidak ada orang di luar ekosistem Apple yang menggunakannya.) Semua bahasa OO yang sukses: C ++, Delphi, Java, C #, dll, gunakan model Simula.
Mason Wheeler
1
Batu bata mainan Lego mungkin cocok sebagai pengaruh eksternal ...
Jamie F
1
@ Alasan: tidak yakin apa yang membagi model Simula dan Smalltalk. Di mana Anda meletakkan Ruby? LUA? Python? Javascript?
kevin cline

Jawaban:

10

Jawaban singkat

Saya pikir itu adalah churn proyek perangkat lunak sebelum hari OO. OO membantu dengan menambahkan konsep kritis yang fundamental - Model dunia nyata .


Bahasa pemrograman berorientasi objek pertama adalah Simula pada tahun 1967. Namun, pada saat itu pengembangan perangkat lunak pada umumnya masih di laboratorium lebih banyak dan sebagian besar paradigma masih lebih dekat dengan kasus perangkat keras .

Lebih dari satu dekade penuh pengembangan perangkat lunak untuk aplikasi perusahaan aplikasi komersial lainnya tumbuh dan pengembangan perangkat lunak meningkat pada tahun 1970-an. Bahasa yang masih bertahan sampai hari ini pada usia tersebut (sebelum 1980) adalah C, Cobol, Fortran dan sejenisnya. Sebagian besar bahasa ini bersifat prosedural. Lisp juga ada sejak hari itu - namun, saya tidak yakin apakah itu bahasa tujuan umum yang menonjol untuk pengembangan komersial. Istilah model Waterfall yang terkenal juga diciptakan pada awal tahun 1970-an.

Di sebagian besar lingkungan komersial, elemen terpenting yang muncul dalam pengembangan perangkat lunak adalah manajemen proyek. Ada kebutuhan yang mendesak untuk anggaran yang ketat dan setidaknya dapat diprediksi dan mengelola persyaratan untuk dibekukan untuk memastikan bahwa proyek mencapai garis akhir dengan terhormat. Selama periode ini juga merupakan salah satu Mythical Manmonths pada tahun 1975.

Saya kira pada akhir tahun 70-an orang-orang terbakar - karena bahasa prosedural tidak memenuhi janji-janji itu. Dan paradigma baru berorientasi objek yang memang ada sejak saat itu menjadikannya besar. Meskipun orang mungkin tidak setuju, saya pikir C ++ yang membantu keakraban dan pengalaman yang terbukti dan dari C, dan orientasi Janji Obyek (awalnya dengan nama C dengan Kelas) kembali pada tahun 1983 adalah batu penjuru untuk keberhasilan pemrograman berorientasi Objek.

Beberapa referensi untuk lebih banyak perspektif - http://journal.thedacs.com/issue/43/88

Jadi mengapa OO?

Saya pikir hari-hari itu (jika Anda melihat sudut pandang keberhasilan proyek) - masuk akal bahwa apa yang dapat Anda pahami dengan lebih baik akan dapat dikelola dengan lebih baik. Metodologi berorientasi objek dengan janji "..semuanya dalam hidup adalah objek" tampak lebih masuk akal bahkan sebelum itu terbukti bermakna. Kesuksesan praktis dari faktor ini adalah gagasan untuk mencontoh dunia nyata dan masalah yang ada secara memadai sebelum melompati senjata - yang saya pikir sesuatu yang secara fundamental baru yang ditawarkan OO yang tidak ditawarkan oleh paradigma lain hingga tanggal tersebut. Dan tentu saja mengingat bahwa paradigma ini memaksa Anda untuk berpikir sebelum mengkode lebih dari bahasa prosedural, ini menunjukkan keberhasilan yang terlihat pada proyek perangkat lunak yang digunakan dan sejak saat itu mereka menjadi populer!

EDIT
Saya juga akan menambahkan bahwa bahasa pemrograman berevolusi secara bersamaan bersamaan dengan konsep-konsep dasar seperti itu (paradigma OO, Aspect, mesin Virtual,) Setiap konsep baru dan pemikiran baru muncul hanya ketika bahasa pemrograman baru yang segar menguasainya - hanya menjaga keakraban tetapi mengubah dasar-dasar dari inti! Pada saat yang sama - konsep baru dan bahasa baru ini hanya muncul karena masalah bisnis baru. 1980-an - OO untuk perangkat lunak skala besar, Jawa 1990 di era Internet, PHP / ASP dan banyak lainnya untuk web. Inovasi dalam bahasa pemrograman juga sebagian besar didorong oleh kebutuhan pasar yang terputus-putus.

Singkatnya, awal '80 -an adalah usia di mana perangkat lunak komersial skala besar lepas landas - sementara proyek dengan bahasa prosedural memiliki masalah mereka, OO menunjukkan cahaya yang lebih baik dan membuat proyek lebih sukses.

Dipan Mehta
sumber
Apa ciri-ciri pergeseran dan ke mana harus pergi? Akhir 70-an. Apa yang membuat pengembang mengerti saatnya pergi? Bosan dengan prosedural, ya, tetapi harus ada beberapa sepupu alternatif?
Independen
@Jonas - ok - mengubah jawaban.
Dipan Mehta
Sejauh keberhasilan historis yang kami evaluasi - kami pasti dapat mengatakan bahwa keakraban memainkan beberapa peran. C (adalah penerus B), C ++ adalah C yang lebih baik meskipun OO seharusnya merupakan perubahan paradigma. Bahkan Java adalah lompatan siap dari C ++ (yang lebih seperti C ++ tanpa masalah C ++. Memori dan portabilitas). Sebagian besar bahasa ini melintasi jurang dengan memperoleh ruang yang ada lebih efektif meskipun mereka memiliki sesuatu yang lebih mendasar di dalamnya. Lebih dari itu, karena setiap bahasa akan memperoleh beberapa programmer yang sudah tahu beberapa bahasa pemrograman lain. TAPI ini mungkin tidak selalu benar!
Dipan Mehta
1
Saya juga akan menambahkan bahwa bahasa pemrograman berevolusi secara simultan bersamaan dengan konsep-konsep dasar seperti itu (paradigma OO, Aspect, mesin Virtual,) Setiap konsep baru dan pemikiran segar muncul hanya ketika bahasa pemrograman baru yang baru menguasainya - hanya menjaga keakraban tetapi mengubah dasar-dasar dari inti ! Pada saat yang sama - konsep baru dan bahasa baru ini hanya muncul karena masalah bisnis baru. 1980-an - OO untuk perangkat lunak skala besar, Jawa 1990 di era internet, PHP / ASP dan banyak lainnya untuk web. Inovasi dalam bahasa pemrograman juga sebagian besar didorong oleh kebutuhan pasar yang terputus-putus.
Dipan Mehta
1
"Model dunia nyata" terdengar konklusif, tetapi dalam kebanyakan kasus, itu tidak terjadi. The Customerkelas tidak memiliki metode seperti eatLunch, goToWorkatau sleep, meskipun ini adalah apa yang pelanggan lakukan di dunia nyata . The Productkelas memiliki beberapa metode, meskipun sebagian besar produk memiliki tepat ada perilaku sama sekali di dunia nyata . Oleh karena itu, saya berpendapat bahwa model OO hanya sesuai (kurang lebih) dalam hal sifat, tetapi tidak sama sekali dalam hal perilaku, dengan dunia nyata. Tetapi Anda tidak perlu OO untuk memiliki model data yang sesuai dengan objek dunia nyata. Hanya tipe rekam yang diperlukan.
user281377
6

Saya pikir alasan terbesar adalah keberhasilan antarmuka pengguna grafis seperti X dan Windows. GUI terdiri dari beberapa objek yang memiliki perilaku sendiri, sesuatu yang dapat direpresentasikan oleh OO.

Di sisi lain, antarmuka pengguna berbasis teks (yang tidak mencoba menyerupai GUI) seringkali hanya mengikuti pola respons-perintah, yang dapat dengan mudah diimplementasikan dalam bahasa prosedural. Aturan bisnis dan hal-hal serupa telah diterapkan dengan bahasa prosedural selama beberapa dekade, tanpa terlalu banyak masalah, dan sampai sekarang masih banyak program OO untuk aplikasi bisnis yang lebih bersifat prosedural; dengan objek bodoh yang menyimpan data dan objek stateless yang berisi aturan bisnis; yang pertama bisa berupa catatan dalam bahasa prosedural, yang kemudian bisa menjadi, yah, prosedur.

pengguna281377
sumber
4

Saya melihat OOP sebagai langkah evolusi alami dari kode prosedural:

  1. Kode prosedural: Katakan pada mesin untuk melakukan A, lalu katakan untuk melakukannya B.
  2. OOP: Paket instruksi prosedural ke dalam potongan yang sangat dapat digunakan kembali, dengan mendefinisikan antarmuka / input / output. (Peringatan: penyederhanaan.)

Saya yakin seseorang dengan pandangan yang lebih luas akan berbaur, tetapi sepertinya ini adalah perkembangan alami dengan hanya memungkinkan pemrogram untuk menghasilkan kode lebih cepat: yaitu memungkinkan penggunaan kembali kode yang lebih besar.

Dalam pandangan ini, faktor eksternal terbesar adalah berkurangnya biaya tenaga kuda prosesor (dibandingkan biaya tenaga kerja pengembang untuk membuat program khas): menghitung overhead dalam menggunakan kelas-kelas OOP menjadi lebih sedikit perhatian daripada penghematan waktu pengembang. (Pengorbanan yang sama antara biaya CPU ini dengan biaya programmer telah memengaruhi banyak aspek pemrograman lainnya.)

Jamie F
sumber
2

Pada awalnya ada pemrograman imperatif (jika Anda bisa menyebutnya begitu). Instruksi sederhana yang memberi tahu mainframe apa dan bagaimana seharusnya menghitung. Bahasa pemrograman tersebut menggunakan lompatan tanpa syarat dan instruksi "tidak terstruktur" lainnya, kebanyakan dari mereka eksotis dengan standar saat ini.

Kemudian seseorang datang dengan struktur untuk pemrograman. Untuk, sementara, lakukan sementara dan pendahuluan yang kita kenal sekarang. Itu adalah inovasi besar karena sekarang aplikasi dengan aliran yang relatif kompleks dapat ditulis dan dipahami dengan mudah. Jadi pemrograman terstruktur lahir.

Kemudian datang beberapa orang lain yang mengatakan bahwa Anda perlu mengulang banyak kode di sana-sini dan itu adalah mimpi buruk untuk dipertahankan sehingga cara menggunakan kembali kode harus ditemukan. Orang-orang datang dengan prosedur dan fungsi untuk membatasi bit kode yang dapat digunakan kembali. Ini juga melahirkan prinsip enkapsulasi dan tanggung jawab tunggal.

Kemudian beberapa akademisi mengatakan bahwa fungsionalitas harus digabungkan dengan data yang sedang dikerjakannya. Kemudian mereka menambahkan konsep pewarisan untuk penggunaan kembali kode dan polimorfisme agar sesuai dengan cara klasifikasi logis bekerja di kehidupan nyata. Maka lahirlah bahasa pemrograman generasi ketiga dan OOP.

linkerro
sumber