Rabu, 22 Juni 2011

OOP Bahasa

OOP bahasa Bagian ini tidak menyebutkan referensi atau sumber apapun. Harap membantu meningkatkan bagian ini dengan menambahkan kutipan ke sumber terpercaya. Unsourced bahan dapat ditentang dan dihapus. (Agustus 2009) Lihat juga: Daftar berorientasi obyek bahasa pemrograman
Simula (1967) secara umum diterima sebagai bahasa pertama yang memiliki fitur utama dari sebuah bahasa berorientasi objek. Ini diciptakan untuk membuat program simulasi, di mana apa yang kemudian disebut objek adalah representasi informasi yang paling penting. Smalltalk (1972-1980) ini bisa dibilang contoh kanonik, dan satu dengan yang banyak dari teori pemrograman berorientasi obyek dikembangkan. Mengenai tingkat orientasi objek, perbedaan berikut dapat dibuat:

    
* Bahasa disebut "murni" OO bahasa, karena segala sesuatu di dalamnya diperlakukan secara konsisten sebagai obyek, dari primitif seperti karakter dan tanda baca, semua jalan sampai ke kelas-kelas utuh, prototipe, blok, modul, dll Mereka dirancang khusus untuk memfasilitasi , bahkan menegakkan, metode OO. Contoh:. Scala, Smalltalk, Eiffel, Ruby, JADE, Zamrud [19]
    
* Bahasa yang dirancang terutama untuk pemrograman OO, tetapi dengan beberapa elemen prosedural. Contoh: C + +, C #, VB.NET, Java, Python. (Catatan:.. C # dan VB.NET keduanya eksklusif bagian dari platform Microsoft NET Framework pengembangan dan kompilasi dengan bahasa perantara yang sama (IL) Meskipun ada beberapa perbedaan membangun, mereka minimal dan dalam konteks pengelompokan ini, beberapa mungkin menganggap mereka bagian dari satu bahasa dengan hanya dua mesin sintaks terjemahan).
    
* Bahasa yang secara historis bahasa prosedural, tetapi telah diperpanjang dengan beberapa fitur OO. Contoh: Visual Basic (berasal dari BASIC), Fortran 2003, Perl, COBOL 2002, PHP, ABAP.
    
* Bahasa dengan sebagian besar fitur objek (kelas, metode, warisan, usabilitas), tapi dalam bentuk aslinya jelas. Contoh: Oberon (Oberon-1 atau Oberon-2).
    
* Bahasa dengan tipe data abstrak dukungan, tetapi tidak semua fitur dari objek-orientasi, kadang-kadang disebut objek berbasis bahasa. Contoh: Modula-2 (dengan enkapsulasi baik dan menyembunyikan informasi), liat, CLU.
[Sunting] OOP dalam bahasa dinamis
Dalam beberapa tahun terakhir, pemrograman berorientasi objek telah menjadi sangat populer dalam bahasa pemrograman dinamis. Python, Ruby dan Groovy adalah bahasa dinamis dibangun di atas prinsip-prinsip OOP, sementara Perl dan PHP telah menambahkan fitur berorientasi objek sejak Perl 5 dan PHP 4, dan ColdFusion sejak versi 6.
Obyek Dokumen Model HTML, XHTML, dan dokumen XML pada Internet telah binding untuk bahasa JavaScript / ECMAScript populer. JavaScript mungkin merupakan yang paling dikenal prototipe berbasis bahasa pemrograman, yang mempekerjakan kloning dari prototipe bukan mewarisi dari kelas. Lain bahasa scripting yang mengambil pendekatan ini adalah Lua. Versi sebelumnya dari ActionScript (superset parsial dari ECMA-262 R3, atau dikenal sebagai ECMAScript) juga menggunakan model obyek berbasis prototipe. Versi ActionScript menggabungkan kombinasi dari klasifikasi dan prototipe model berbasis obyek sebagian besar didasarkan pada spesifikasi ECMA-262 saat ini tidak lengkap R4, yang berakar dalam Proposal 2 awal JavaScript. JScript.NET Microsoft juga mencakup mash-up model obyek berdasarkan usulan yang sama, dan juga merupakan superset dari spesifikasi ECMA-262 R3. [Sunting] Desain pola
Tantangan desain berorientasi obyek yang ditangani oleh beberapa metodologi. Paling umum dikenal sebagai pola desain dikodifikasikan oleh Gamma dkk .. Lebih luas, istilah "pola desain" bisa digunakan untuk mengacu pada setiap solusi, umum berulang untuk masalah umum yang terjadi dalam desain perangkat lunak. Beberapa masalah ini sering terjadi memiliki implikasi dan solusi khusus untuk pengembangan berorientasi objek. [Sunting] Warisan dan subtyping perilaku Lihat juga: desain berorientasi Obyek
Ini adalah intuitif untuk menganggap warisan yang menciptakan semantik "adalah" hubungan, dan dengan demikian menyimpulkan bahwa objek instantiated dari subclass dapat selalu aman digunakan sebagai pengganti mereka instantiated dari superclass. Intuisi ini sayangnya OOP palsu dalam kebanyakan bahasa, khususnya di semua yang memungkinkan bisa berubah objek. Subtipe polimorfisme yang ditegakkan oleh pemeriksa ketik bahasa OOP (dengan objek bisa berubah) tidak dapat menjamin subtyping perilaku dalam konteks apapun. Subtyping perilaku yang diputuskan secara umum, sehingga tidak dapat dilaksanakan oleh program (compiler). Kelas atau objek hirarki perlu hati-hati dirancang mempertimbangkan menggunakan salah mungkin yang tidak dapat dideteksi sintaktis. Masalah ini dikenal sebagai prinsip substitusi Liskov. [Sunting] Gang Empat pola desain Artikel utama: Pola Desain (ilmu komputer)
Design Patterns: Elements of Reusable Object-Oriented Software adalah sebuah buku berpengaruh yang diterbitkan pada tahun 1995 oleh Erich Gamma, Richard Helm, Ralph Johnson, dan John Vlissides, kadang-kadang santai disebut "Kelompok Empat". Seiring dengan mengeksplorasi kemampuan dan perangkap pemrograman berorientasi obyek, itu menggambarkan 23 masalah pemrograman umum dan pola untuk memecahkan mereka. Pada April 2007, buku itu dalam pencetakan 36 nya.
Buku ini menggambarkan pola-pola berikut:

    
* Penciptaan pola (5): Pola Pabrik Metode, Pola Pabrik Abstrak, Pola Singleton, Pola Builder, Pola Prototipe
    
* Struktural pola (7): Adapter Pola, Pola Jembatan, Komposit Pola, Pola dekorator, Facade Pola, Pola kelas terbang, Pola Proxy
    
* Perilaku pola (11): Rantai Tanggung Jawab Pola, Pola Command, Interpreter Pola, Pola Iterator, Mediator Pola, Pola Memento, Observer Pola, Pola Negara, Pola Strategi, Metode Template Pola, Pola Pengunjung
[Sunting] Obyek-orientasi dan database Artikel utama: Object-Relational Impedance mismatch, objek-relasional pemetaan, dan Obyek database
Kedua pemrograman berorientasi obyek dan sistem manajemen database relasional (RDBMSs) sangat umum dalam perangkat lunak saat ini [update]. Karena database relasional tidak menyimpan benda-benda secara langsung (meskipun beberapa RDBMSs memiliki fitur berorientasi objek untuk perkiraan ini), ada kebutuhan umum untuk menjembatani dua dunia. Masalah menjembatani akses pemrograman berorientasi obyek dan pola data dengan database relasional dikenal sebagai Object-Relational ketidakcocokan impedansi. Ada beberapa pendekatan untuk mengatasi masalah ini, tetapi tidak ada solusi umum tanpa downsides [20]. Salah satu pendekatan yang paling umum adalah objek-relasional pemetaan, seperti yang ditemukan di perpustakaan seperti Java Objects Data dan Ruby on Rails ActiveRecord '.
Ada juga objek database yang dapat digunakan untuk menggantikan RDBMSs, namun belum secara teknis dan sukses secara komersial sebagai RDBMSs. [Sunting] dunia nyata Modeling dan Hubungan
OOP dapat digunakan untuk menghubungkan objek dunia nyata dan proses dengan mitra digital. Namun, tidak semua orang setuju OOP yang memfasilitasi langsung pemetaan dunia nyata (lihat bagian Kritik negatif) atau bahwa pemetaan dunia nyata bahkan tujuan yang layak; Bertrand Meyer berpendapat di Object-Oriented Software Konstruksi [21] bahwa program ini bukan model dunia tetapi sebuah model dari beberapa bagian dari dunia; "Realitas adalah sepupu dua kali dihapus". Pada saat yang sama, beberapa keterbatasan utama dari OOP telah dicatat. [22] Sebagai contoh, masalah Circle-elips sulit untuk menangani menggunakan konsep OOP tentang warisan.
Namun, Niklaus Wirth (yang memopulerkan pepatah sekarang dikenal sebagai hukum Wirth itu: "Perangkat Lunak semakin lambat lebih cepat dari perangkat keras menjadi lebih cepat") kata dari OOP di kertas, "Ide Baik melalui Looking Glass", "paradigma ini erat mencerminkan struktur sistem 'di dunia nyata', dan oleh karena itu cocok untuk model sistem kompleks dengan perilaku kompleks "(kontras prinsip KISS).
Steve Yegge dan lain-lain mencatat bahwa bahasa alami kurangnya pendekatan OOP hal ketat memprioritaskan (benda / kata benda) sebelum tindakan (metode / verba). [23] Masalah ini dapat menyebabkan OOP menderita solusi yang lebih rumit dari pemrograman prosedural. [24] [Sunting] OOP dan kontrol aliran
OOP dikembangkan untuk meningkatkan usabilitas dan pemeliharaan dari kode sumber. [25] representasi Transparan aliran kontrol telah prioritas dan tidak dimaksudkan untuk ditangani oleh sebuah compiler. Dengan meningkatnya relevansi paralel dan perangkat keras multithreaded coding, pengembang aliran kontrol transparan menjadi lebih penting, sesuatu yang sulit untuk mencapai dengan OOP [26]. [27] [28] [Sunting] Tanggung Jawab vs data-driven desain
Tanggung jawab-driven desain mendefinisikan kelas dalam hal kontrak, yaitu, kelas harus didefinisikan di sekitar tanggung jawab dan informasi yang saham. Hal ini kontras dengan Wirfs-Brock dan Wilkerson dengan data-driven desain, di mana kelas didefinisikan sekitar data-struktur yang harus dipegang. Para penulis berpendapat bahwa tanggung jawab-driven desain adalah lebih baik. [Sunting] Kritik
Sejumlah peneliti terkenal dan programmer telah menganalisis utilitas dari OOP. Berikut adalah daftar tidak lengkap:

    
* Luca Cardelli menulis sebuah makalah berjudul "Properties Teknik Buruk Obyek Berorientasi Bahasa". [29]
    
* Richard Stallman menulis pada tahun 1995, "Menambahkan OOP untuk Emacs tidak jelas perbaikan;. Saya menggunakan OOP ketika bekerja pada sistem jendela Mesin Lisp, dan saya tidak setuju dengan pandangan yang biasa itu adalah cara yang unggul untuk program" [30]
    
* Sebuah studi oleh Potok dkk [31]. Telah menunjukkan tidak ada perbedaan yang signifikan dalam produktivitas antara pendekatan OOP dan prosedural.
    
* Christopher J. Tanggal menyatakan bahwa perbandingan penting dari OOP dengan teknologi lainnya, relasional khususnya, adalah sulit karena kurangnya definisi yang disepakati dan ketat dari OOP [32] Tanggal dan Darwen [33]. Mengusulkan landasan teoritis pada OOP yang menggunakan OOP sebagai semacam sistem tipe disesuaikan untuk mendukung RDBMS.
    
* Alexander Stepanov menyarankan bahwa OOP menyediakan sudut pandang matematis-terbatas dan menyebutnya "hampir sebanyak tipuan sebagai Artificial Intelligence. Saya belum melihat sepotong yang menarik dari kode yang datang dari orang-orang OO. Dalam arti, saya tidak adil AI: Saya belajar banyak hal dari kerumunan MIT AI Lab, mereka telah melakukan beberapa pekerjaan benar-benar mendasar ....".[ 34]
    
* Paul Graham telah menyarankan bahwa tujuan dari OOP adalah untuk bertindak sebagai "mekanisme menggiring" yang membuat programmer biasa-biasa saja dalam organisasi biasa-biasa saja dari "melakukan kerusakan terlalu banyak". Ini adalah dengan mengorbankan memperlambat programmer produktif yang tahu bagaimana menggunakan teknik yang lebih kuat dan lebih kompak. [35]
    
* Joe Armstrong, penemu utama Erlang, dikutip mengatakan "Masalah dengan bahasa berorientasi objek adalah mereka punya semua lingkungan implisit bahwa mereka membawa sekitar dengan mereka. Anda menginginkan pisang tetapi apa yang Anda dapatkan adalah memegang gorila pisang dan seluruh hutan ". [36]
    
* Richard Mansfield, penulis dan mantan editor Hitung! majalah, menyatakan bahwa "seperti mode intelektual lainnya yang tak terhitung jumlahnya selama bertahun-tahun (" relevansi ", komunisme," modernisme ", dan seterusnya-sejarah penuh dengan mereka), OOP akan bersama kami sampai akhirnya realitas menegaskan dirinya. Tapi mengingat betapa OOP saat ini meliputi kedua universitas dan tempat kerja, OOP mungkin membuktikan menjadi khayalan tahan lama generasi Seluruh programmer diindoktrinasi terus berbaris keluar dari akademi,. berkomitmen untuk OOP dan apa-apa selain OOP selama sisa hidup mereka. "[37] Ia juga dikutip mengatakan "OOP untuk menulis program, apa yang akan melalui keamanan bandara adalah untuk terbang". [38]
    
* Kaya Hickey, pencipta Clojure, menggambarkan sistem objek sebagai atas model sederhana tentang dunia nyata. Dia menekankan ketidakmampuan OOP ke waktu model benar, yang semakin semakin bermasalah sebagai sistem perangkat lunak menjadi lebih bersamaan. [39]
    
* Carnegie-Mellon University Profesor Robert Harper pada bulan Maret 2011 menulis: "Semester ini Dan Licata dan aku adalah co-mengajar kursus baru pada pemrograman fungsional untuk tahun pertama jurusan CS calon ... pemrograman berorientasi objek dihilangkan sepenuhnya dari pengantar kurikulum, karena baik anti-modular dan anti-paralel sifatnya, dan karenanya tidak cocok untuk sebuah kurikulum CS modern. Sebuah program baru yang diusulkan pada metodologi berorientasi obyek desain akan ditawarkan pada tingkat tahun kedua bagi siswa yang ingin belajar topik ini "[40].

Tidak ada komentar:

Posting Komentar

My Music

Powered by eSnips.com