Sabtu, 16 Desember 2017

LAPORAN BAHASA PEMROGRAMAN MODUL 6

LAPORAN PRAKTIKUM
BAHASA PEMROGRAMAN 1

MODUL VI
“PEMROGRAMAN BERORIENTASI OBJEK”
Dosen : Dede Irawan M.Kom







Disusun Oleh :
Lisna Wulandari
20160910049
SI 2016 A


SISTEM INFORMASI
FAKULTAS ILMU KOMPUTER
UNIVERSITAS KUNINGAN
KATA PENGANTAR



Puji syukur kehadirat Allah SWT yang memberikan bimbingan dan pertolongannya sehingga dalam penulisan Laporan Praktikum Bahasa pemograman 1 ini bisa berjalan dengan lancar. Penulisan Laporan Praktikum Bahasa pemograman 1 ini dimaksudkan penulis khusunya saya sendiri untuk memenuhi tugas mata kuliah Bahasa pemograman 1. Penulisan Laporan Praktikum Bahasa pemograman 1 ini dimaksudkan sebagai penambah wawasan pembaca khususnya tentang Bahasa pemograman 1 tentang Pemrograman Berorientasi Objek.  Di sisi lain, penulis mengajak kepada para pembaca agar dapat memahami dan mendalami masalah topik di atas, sekaligus menerapkan hasil Laporan Praktikum Bahasa pemograman 1.

Demikianlah sebagai pengantar, mudah-mudahan dengan laporan ini bisa diterima dengan baik. Dan semoga Allah senantiasa melimpahkan rahmat-Nya dalam setiap aktivitas yang kita kerjakan. Amin



                                                                                                  Kuningan ,15 Desember 2017
                                                                                                  Penyusun,





                                                                                                  Lisna Wulandari




 DAFTAR ISI


KATA PENGANTAR
DAFTAR ISI
BAB I PENDAHULUAN

A.  Latar Belakang
B. Rumusan Masalah
C. Tujuan dan Manfaat
BAB II PEMBAHASAN
A. Pengertian OOP (Object Oriented Programming)
B. Konsep Dasar dari Pemrograman Berorientasi Objek (OOP)
C. Bahasa Pendukung OOP
D. Desain Pola OOP
E. Kritik Para Ahli Mengenai OOP dan Contoh Programnya
F. Post Test
BAB III PENUTUP
A. Kesimpulan
B. Daftar Pustaka


BAB I
PENDAHULUAN 

A.     Latar BelakangPemrograman Berorientasi Objek (Object Oriented Programming atau OOP) merupakan paradigma pemrograman yang berorientasikan kepada objek. Objek adalah struktur data yang terdiri dari bidang data dan metode bersama dengan interaksi mereka untuk merancang aplikasi dan program komputer. Semua data dan fungsi di dalam paradigma ini dibungkus dalam kelas-kelas atau objek-objek. Bandingkan dengan logika pemrograman terstruktur. Setiap objek dapat menerima pesan, memproses data, dan mengirim pesan ke objek lainnya. Pada jaman sekarang, banyak bahasa pemrograman yang mendukung OOP.
OOP adalah paradigma pemrograman yang cukup dominan saat ini, karena mampu memberikan solusi kaidah pemrograman modern. Meskipun demikian, bukan berarti bahwa pemrograman prosedural sudah tidak layak lagi. OOP diciptakan karena dirasakan masih adanya keterbatasan pada bahasa pemrograman tradisional. Konsep dari OOP sendiri adalah semua pemecahan masalah dibagi ke dalam objek. Dalam OOP data dan fungsi-fungsi yang akan mengoperasikannya digabungkan menjadi satu kesatuan yang dapat disebut sebagai objek. Proses perancangan atau desain dalam suatu pemrograman merupakan proses yang tidak terpisah dari proses yang mendahului, yaitu analisis dan proses yang mengikutinya. Pembahasan mengenai orientasi objek tidak akan terlepas dari konsep objek seperti inheritance atau penurunan, encapsulation atau pembungkusan, dan polymorphism atau kebanyakrupaan. Konsep-konsep ini merupakan fundamental dalam orientasi objek yang perlu sekali dipahami serta digunakan dengan baik, dan menghindari penggunaannya yang tidak tepat.
Model data berorientasi objek dikatakan dapat memberi fleksibilitas yang lebih, kemudahan mengubah program, dan digunakan luas dalam teknik piranti lunak skala besar. Lebih jauh lagi, pendukung OOP mengklaim bahwa OOP lebih mudah dipelajari bagi pemula dibanding dengan pendekatan sebelumnya, dan pendekatan OOP lebih mudah dikembangkan dan dirawat.

B.     Rumusan Masalah
1.      Pengertian OOP (Object Oriented Programming)?
2.      Apa saja konsep dasar dari pemrograman berorientasi objek (OOP)?
3.      Bahasa yang mendukung OOP meliputi apa saja?
4.      Bagaimanakah desain pola dalam OOP?
5.      Bagaimanakah kritik para ahli mengenai OOP?

 C.     Tujuan dan Manfaat
1.      Dapat mengetahui pengertian OOP (Object Oriented Programming) secara umum.
2.      Dapat mengetahui konsep dasar dari pemrograman berorientasi objek (OOP).
3.      Dapat mengetahui bahasa yang mendukung OOP.
4.      Dapat mengetahui desain pola apa saja dalam OOP.
5.      Dapat mengetahui beberapa kritik para ahli mengenai OOP.

BAB II
PEMBAHASAN



A.     Pengertian OOP (Object Oriented Programming)
Banyak orang pertama kali belajar program menggunakan bahasa yang tidak berorientasi objek. Program non-OOP mungkin salah satu daftar panjang dari perintah. Lebih program yang kompleks akan kelompok daftar perintah ke dalam fungsi atau subrutin masing-masing yang mungkin melakukan tugas tertentu. Dengan desain semacam ini, biasanya untuk data program untuk dapat diakses dari setiap bagian dari program tersebut. Sebagai program tumbuh dalam ukuran, memungkinkan fungsi apapun untuk memodifikasi setiap bagian dari data berarti bahwa bug dapat memiliki dampak yang luas jangkauannya.
Sebaliknya, pendekatan berorientasi objek mendorong para programmer untuk tempat data di mana tidak langsung dapat diakses oleh seluruh program. Sebaliknya data diakses dengan memanggil tertulis fungsi khusus, yang biasa disebut metode, baik yang dibundel dengan data atau warisan dari ”objek kelas” dan bertindak sebagai perantara untuk mengambil atau memodifikasi data tersebut. Pemrograman yang membangun yang menggabungkan data dengan satu set metode untuk mengakses dan mengelola data tersebut disebut objek.
Sebuah program berorientasi objek biasanya akan mengandung berbagai jenis objek, masing-masing jenis yang sesuai untuk jenis tertentu dari data yang kompleks untuk dikelola atau mungkin ke objek dunia nyata atau konsep seperti rekening bank, pemain hoki, atau buldoser. Sebuah program mungkin berisi beberapa salinan dari setiap jenis objek, satu untuk setiap objek dunia nyata program ini berurusan dengan OOP. Sebagai contoh, ada bisa menjadi salah satu rekening bank untuk setiap account objek dunia nyata di sebuah bank tertentu. Setiap salinan dari objek rekening bank akan sama dalam metode ini menawarkan untuk memanipulasi atau membaca data, tetapi data dalam setiap objek akan berbeda mencerminkan sejarah yang berbeda dari setiap account.
Objek dapat dianggap sebagai pembungkus data mereka dalam satu set fungsi yang dirancang untuk memastikan bahwa data yang digunakan tepat, dan untuk membantu dalam menggunakan. Metode ini objek biasanya akan mencakup pemeriksaan dan perlindungan yang khusus untuk jenis data objek berisi. Sebuah objek juga dapat menawarkan sederhana digunakan, metode standar untuk melakukan operasi tertentu pada data, sementara menyembunyikan secara spesifik tentang bagaimana tugas-tugas yang dicapai. Dengan cara ini perubahan dapat dibuat dengan struktur internal atau metode obyek tanpa memerlukan bahwa sisa program dimodifikasi. Pendekatan ini juga dapat digunakan untuk menawarkan metode standar di berbagai jenis objek. Sebagai contoh, beberapa jenis benda mungkin menawarkan metode cetak. Setiap jenis objek yang mungkin menerapkan metode cetak dalam cara yang berbeda, yang mencerminkan jenis data yang berbeda masing-masing berisi, tetapi semua metode cetak yang berbeda mungkin disebut dengan cara standar yang sama dari tempat lain di program ini. Fitur-fitur ini menjadi berguna terutama ketika lebih dari satu programmer berkontribusi kode untuk proyek atau ketika tujuannya adalah untuk menggunakan kembali kode di antara proyek.
Pemrograman berorientasi obyek memiliki akar yang dapat ditelusuri ke tahun 1960-an. Sebagai perangkat keras dan software menjadi semakin kompleks, pengelolaan sering menjadi perhatian. Para peneliti mempelajari cara untuk menjaga kualitas software dan pemrograman berorientasi objek yang dikembangkan sebagian untuk mengatasi masalah-masalah umum dengan sangat menekankan diskrit, unit dapat digunakan kembali logika. Teknologi ini berfokus pada data daripada proses, dengan program yang terdiri dari modul mandiri (kelas), setiap contoh (objek) yang berisi semua informasi yang dibutuhkan untuk memanipulasi data struktur sendiri (anggota). Hal ini berbeda dengan yang ada pemrograman modular yang telah dominan selama bertahun-tahun yang difokuskan pada fungsi dari sebuah modul, bukan data spesifik, tetapi juga disediakan untuk penggunaan kembali kode, dan cukup dapat digunakan kembali unit-diri dari logika pemrograman, memungkinkan kolaborasi melalui penggunaan modul terkait (subrutin). Pendekatan yang lebih konvensional, yang masih tetap, cenderung untuk mempertimbangkan data dan perilaku secara terpisah.
Program berorientasi objek dengan demikian dapat dilihat sebagai kumpulan objek berinteraksi, yang bertentangan dengan model konvensional, di mana program dipandang sebagai daftar tugas (subrutin) untuk melakukan. Dalam OOP, setiap objek dapat menerima pesan, pengolahan data, dan mengirim pesan ke objek lainnya. Setiap objek dapat dilihat sebagai ”mesin” independen dengan peran yang berbeda atau tanggung jawab. Tindakan (metode) pada obyek-obyek yang terkait erat dengan objek. Sebagai contoh, OOP struktur data cenderung ”membawa operator sendiri main dengan mereka” (atau setidaknya ”mewarisi” mereka dari obyek yang sama atau kelas).

B.     Konsep Dasar dari Pemrograman Berorientasi Objek (OOP)
Pemrograman Orientasi Objek (Object Oriented Programming) menekankan konsep sebagai berikut :
1.      Kelas
Kelas merupakan kumpulan atas definisi data dan fungsi-fungsi dalam suatu unit untuk suatu tujuan tertentu. Sebagai contoh “class of dog” adalah suatu unit yang terdiri atas definisi-definisi data dan fungsi-fungsi yang menunjuk pada berbagai macam perilaku atau turunan dari anjing. Sebuah class adalah dasar dari modularitas dan struktur dalam pemrograman berorientasi objek. Sebuah class secara tipikal sebaiknya dapat dikenali oleh seorang non-programmer sekalipun terkait dengan domain permasalahan yang ada, dan kode yang terdapat dalam sebuah class sebaiknya (relatif) bersifat mandiri dan independen (sebagaimana kode tersebut digunakan jika tidak menggunakan OOP). Dengan modularitas, struktur dari sebuah program akan terkait dengan aspek-aspek dalam masalah yang akan diselesaikan melalui program tersebut. Cara seperti ini akan menyederhanakan pemetaan dari masalah ke sebuah program ataupun sebaliknya.
2.      Objek
Objek berfungsi membungkus data dan fungsi bersama menjadi suatu unit dalam sebuah program komputer. Objek merupakan dasar dari modularitas dan struktur dalam sebuah program komputer berorientasi objek.
3.      Abstraksi
Abstraksi dapat didefinisikan sebagai kemampuan sebuah program untuk melewati aspek informasi yang diproses olehnya, yaitu kemampuan untuk memfokus pada inti. Setiap objek dalam sistem melayani sebagai model dari “pelaku” abstrak yang dapat melakukan kerja, laporan dan perubahan keadaannya, dan berkomunikasi dengan objek lainnya dalam sistem, tanpa mengungkapkan bagaimana kelebihan ini diterapkan. Proses, fungsi atau metode dapat juga dibuat abstrak, dan beberapa teknik digunakan untuk mengembangkan sebuah pengabstrakan.
4.      Enkapsulasi
Enkapsulasi berfungsi memastikan pengguna sebuah objek tidak dapat mengganti keadaan dalam dari sebuah objek dengan cara yang tidak layak; hanya metode dalam objek tersebut yang diberi ijin untuk mengakses keadaannya. Setiap objek mengakses interface yang menyebutkan bagaimana objek lainnya dapat berinteraksi dengannya. Objek lainnya tidak akan mengetahui dan tergantung kepada representasi dalam objek tersebut.
5.      Polimorfisme
Polimorfisme dapat berwujud melalui pengiriman pesan. Tidak bergantung kepada pemanggilan subrutin, bahasa orientasi objek dapat mengirim pesan. Metode tertentu yang berhubungan dengan sebuah pengiriman pesan tergantung kepada objek tertentu di mana pesan tersebut dikirim. Contohnya, bila sebuah burung menerima pesan “gerak cepat”, dia akan menggerakan sayapnya dan terbang. Bila seekor singa menerima pesan yang sama, dia akan menggerakkan kakinya dan berlari. Keduanya menjawab sebuah pesan yang sama, namun yang sesuai dengan kemampuan hewan tersebut. Ini disebut polimorfisme karena sebuah variabel tunggal dalam program dapat memegang berbagai jenis objek yang berbeda selagi program berjalan, dan teks program yang sama dapat memanggil beberapa metode yang berbeda di saat yang berbeda dalam pemanggilan yang sama. Hal ini berlawanan dengan bahasa fungsional yang mencapai polimorfisme melalui penggunaan fungsi kelas pertama.
6.      Inheritas
Konsep inheritas mempunyai fungsi mengatur polimorfisme dan enkapsulasi dengan mengijinkan objek didefinisikan dan diciptakan dengan jenis khusus dari objek yang sudah ada. Objek-objek ini dapat membagi (dan memperluas) perilaku mereka tanpa haru mengimplementasi ulang perilaku tersebut (bahasa berbasis objek tidak selalu memiliki inheritas).
Dengan adanya konsep dasar tersebut di atas, maka dengan menggunakan OOP kita dapat melakukan pemecahan suatu masalah tanpa melihat bagaimana cara menyelesaikan suatu masalah tersebut (terstruktur) tetapi objek-objek apa yang dapat melakukan pemecahan masalah tersebut. Sebagai contoh anggap kita memiliki sebuah departemen yang memiliki manager, sekretaris, petugas administrasi data dan lainnya. Misal manager tersebut ingin memperoleh data dari bagian administrasi, maka manager tersebut tidak harus mengambilnya langsung tetapi dapat menyuruh petugas bagian administrasi untuk mengambilnya. Pada kasus tersebut seorang manager tidak harus mengetahui bagaimana cara mengambil data tersebut tetapi manager bisa mendapatkan data tersebut melalui objek petugas administrasi. Jadi untuk menyelesaikan suatu masalah dengan kolaborasi antar objek-objek yang ada karena setiap objek memiliki deskripsi tugasnya sendiri.

C.     Bahasa Pendukung OOP
Bahasa pertama yang memiliki fitur-fitur utama dari sebuah bahasa berorientasi objek yaitu Simula (1967). Organisasi ini dibentuk untuk membuat program simulasi, di mana apa yang kemudian disebut objek adalah informasi perwakilan paling penting. Smalltalk (1972-1980) ini bisa dibilang contoh kanonik, dan yang satu dengan yang banyak teori pemrograman berorientasi objek adalah dikembangkan. Mengenai derajat orientasi objek, berikut beberapa perbedaan dapat dibuat:
1.      Bahasa disebut “murni” bahasa OOP, karena segala isinya diperlakukan secara konsisten sebagai objek, dari primitif seperti karakter dan tanda baca, semua jalan sampai ke seluruh kelas, prototipe, blok, modul, dan lain-lain. Mereka dirancang khusus untuk memfasilitasi, bahkan menegakkan, metode OOP. Contoh : Scala, Smalltalk, Eiffel, Ruby, JADE, dan Emerald.
2.      Bahasa pemrograman yang dirancang terutama untuk OOP, tapi dengan beberapa elemen prosedural. Contoh : C + + , C #, VB.NET, Java, dan Python. (Catatan : C # dan VB.NET eksklusif bagian Microsoft's NET Framework adalah dan platform pengembangan. Kompilasi keduanya sama (bahasa menengah 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).
3.      Bahasa yang secara historis bahasa prosedural, tetapi telah diperpanjang dengan beberapa fitur OOP. Contoh : Visual Basic (berasal dari DASAR), Fortran 2003, Perl, COBOL 2002, PHP, dan ABAP .
4.      Bahasa dengan sebagian besar fitur objek (kelas, metode, warisan, usabilitas), tetapi dalam bentuk jelas asli. Contoh : Oberon (Oberon-1 atau Oberon-2).
5.      Bahasa dengan tipe data abstrak dukungan, tetapi tidak semua fitur-orientasi obyek, kadang-kadang disebut bahasa berbasis objek. Contoh : Modula-2 (dengan enkapsulasi yang sangat baik dan menyembunyikan informasi), liat, dan CLU .
Dalam beberapa tahun terakhir, pemrograman berorientasi objek telah menjadi sangat populer di bahasa pemrograman dinamis. Python, Ruby dan Groovy adalah bahasa dinamis dibangun di atas prinsip-prinsip OOP, sedangkan Perl dan PHP telah menambahkan fitur berorientasi objek sejak Perl 5 dan PHP 4, dan ColdFusion sejak versi 6.
 D.    Desain Pola OOP
Tantangan desain berorientasi objek yang ditujukan oleh beberapa metodologi. Paling umum dikenal sebagai pola desain dimodifikasikan oleh Gamma dkk. Lebih luas lagi, istilah ”pola desain” dapat digunakan untuk mengacu pada setiap diulang, solusi umum untuk masalah umum yang terjadi dalam desain perangkat lunak. Beberapa masalah ini sering terjadi memiliki implikasi dan solusi khusus pengembangan berorientasi objek.
Beberapa Desain Pola OOP antara lain :
- Warisan dan Perilaku Subtyping
Hal ini untuk menganggap warisan yang menciptakan semantik ”adalah sebuah” hubungan, dan dengan demikian untuk menyimpulkan bahwa benda instansi dari subclass selalu dapat dengan aman digunakan sebagai benda pengganti instansi dari superclass. Intuisi ini sayangnya palsu dalam bahasa OOP kebanyakan, khususnya di semua orang yang memungkinkan bisa berubah objek. Polimorfisme Subtipe sebagai ditegakkan oleh Checker dalam bahasa OOP (dengan objek bisa berubah) tidak dapat menjamin subtyping perilaku dalam konteks apapun. Perilaku subtyping ini diputuskan pada umumnya, sehingga tidak dapat dilaksanakan oleh program (compiler). Kelas atau objek hierarki perlu hati-hati dirancang mempertimbangkan kemungkinan menggunakan salah yang tidak dapat dideteksi sintaktis. Masalah ini dikenal sebagai prinsip substitusi Liskov .
- Pola Desain Gang Empat
Design Patterns: Elements of Reusable Object-Oriented Software adalah buku yang berpengaruh yang diterbitkan pada tahun 1995 oleh Erich Gamma, Richard Helm, Ralph Johnson, dan John Vlissides, kadang-kadang santai disebut “Gang Empat”. Seiring dengan mengeksplorasi kemampuan dan perangkap pemrograman berorientasi obyek, itu menggambarkan 23 masalah pemrograman umum dan pola untuk memecahkan masalah tersebut. Pada April 2007, buku itu dalam pencetakan 36 nya. Buku ini menjelaskan pola-pola sebagai berikut:
a.       Mencipta Pola : Pola Metode Pabrik, Pabrik Abstrak Pola, Pola Singleton, Builder Pola, dan Pola Prototype.
b.      Struktural Pola : Pola Adapter, Bridge Pola, Pola Komposit, dekorator Pola, Pola Facade, kelas Terbang Pola, dan Pola Proxy.
c.       Perilaku Pola : Rantai Tanggung Jawab Pola, Pola Command, Interpreter Pola, Pola Iterator, Mediator Pola, Pola Memento, Observer Pola, Pola Negara, Strategi Pola, Template Metode Pola, dan Pola Pengunjung.
- Obyek Orientasi dan Database
Kedua pemrograman berorientasi obyek dan sistem manajemen database relasional (RDBMSs) sangat umum dalam perangkat lunak saat ini. Karena database relasional tidak menyimpan objek langsung (meskipun beberapa RDBMSs memiliki fitur berorientasi objek untuk perkiraan ini), ada kebutuhan umum untuk menjembatani dua dunia. Masalah menjembatani pemrograman berorientasi objek mengakses dan pola data dengan database relasional dikenal sebagai Relational Mismatch Impedansi Object. Ada beberapa pendekatan untuk mengatasi masalah ini, tetapi tidak ada solusi umum tanpa kelemahan. Salah satu pendekatan yang paling umum adalah objek relasional pemetaan, seperti yang ditemukan di perpustakaan seperti Java Data Objects dan Ruby on Rails ‘ActiveRecord.
Ada juga objek database yang dapat digunakan untuk menggantikan RDBMSs, tetapi ini belum teknis dan komersial sukses sebagai RDBMSs.
- Pemodelan Dunia Nyata dan Hubungan
OOP dapat digunakan untuk objek dunia nyata asosiasi dan proses dengan mitra digital. Namun, tidak semua orang setuju bahwa OOP memfasilitasi dunia nyata pemetaan langsung (lihat Kritik Negatif bagian) atau bahwa pemetaan dunia nyata bahkan tujuan yang layak. Bertrand Meyer berpendapat di Object-Oriented Software Konstruksi bahwa program bukanlah model dunia tetapi model dari beberapa bagian dunia, “Realitas adalah sepupu dua kali dihapus”. Pada saat yang sama, beberapa keterbatasan utama dari OOP sudah diketahui. Sebagai contoh, masalah Elips Circle sulit untuk ditangani dengan menggunakan konsep OOP’s dari warisan.
Namun, Niklaus Wirth (yang mempopulerkan pepatah sekarang dikenal sebagai hukum di Wirth : “Software semakin lambat lebih cepat dari perangkat keras menjadi lebih cepat”) kata dari OOP dalam makalahnya, “Ide Bagus 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 KISS prinsip).
Steve Yegge, dkk. mencatat bahwa bahasa alami merupakan kekurangan pendekatan OOP yang ketat memprioritaskan hal (benda/kata benda) sebelum tindakan (metode/verba). Hal ini dapat menyebabkan masalah OOP menderita berbelit-belit solusi lebih dari pemrograman prosedural.
- Desain OOP dan Flow Control
OOP dikembangkan untuk meningkatkan reusabilitas dan maintainability dari source code. Representasi transparan aliran kontrol tidak memiliki prioritas dan dimaksudkan untuk ditangani oleh compiler. Dengan meningkatnya relevansi paralel dan perangkat keras multithreaded coding, pengembang kontrol aliran transparan menjadi lebih penting, sesuatu yang keras untuk mencapai dengan OOP.
- Desain Tanggung Jawab dan Driven Desain Data
Desain Berbasis Tanggung Jawab mendefinisikan kelas dalam hal kontrak, yaitu kelas harus didefinisikan sekitar tanggung jawab dan informasi yang sama. Hal ini kontras dengan Wirfs-Brock dan Wilkerson dengan desain data-driven, di mana kelas didefinisikan di sekitar struktur data yang harus dipegang. Para penulis berpendapat bahwa desain tanggung jawab-driven adalah lebih baik.
 E.     Kritik Para Ahli Mengenai OOP
Sejumlah peneliti terkenal dan programmer telah menganalisis utilitas dari OOP, antara lain :
1.      Richard Stallman menulis pada tahun 1995, dia menambahkan bahwa OOP untuk Emacs tidak secara jelas, perbaikan OOP saya gunakan ketika bekerja di Mesin Lisp sistem jendela, dan aku tidak setuju dengan pandangan biasa bahwa itu adalah cara yang unggul untuk program”.
2.      Sebuah studi oleh Potok et al. telah menunjukkan tidak ada perbedaan yang signifikan dalam produktivitas antara OOP dan pendekatan prosedural.
3.      Christopher J. Tanggal menyatakan bahwa perbandingan kritis OOP dengan teknologi lain, pada khususnya relasional adalah sulit karena tidak adanya upon dan ketat definisi yang disepakati dari OOP. Darwen mengusulkan landasan teoritis pada OOP yang menggunakan OOP sebagai semacam disesuaikan sistem tipe untuk mendukung RDBMS.
4.      Alexander Stepanov menyarankan bahwa OOP memberikan sudut pandang terbatas matematis dan menyebutnya “hampir sebanyak tipuan sebagai Artificial Intelligence”. Dia belum melihat bagian yang menarik dari kode yang berasal dari orang-orang OOP.
5.      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 banyak kerusakan yang terlalu”. Hal ini adalah pengorbanan dengan memperlambat programmer produktif yang tahu bagaimana menggunakan lebih kuat dan lebih kompak teknik.
6.      Joe Armstrong, penemu utama Erlang, mengatakan “Masalah dengan bahasa berorientasi objek yang mereka punya semua ini lingkungan implisit bahwa mereka membawa sekitar dengan mereka inginkan. Anda punya pisang, tapi apa yang Anda punya adalah gorila memegang pisang dan seluruh hutan”.
7.      Richard Mansfield, penulis dan mantan editor Hitung majalah, menyatakan bahwa “seperti tak terhitung mode intelektual lainnya selama bertahun-tahun (“relevansi”, “komunisme”, “modernisme”) sejarah penuh dengan mereka. OOP akan bersama kita sampai akhirnya realitas menegaskan dirinya. Seluruh generasi programmer didoktrinasi terus berbaris keluar dari akademi, berkomitmen untuk OOP dan hanya OOP untuk sisanya hidup mereka”. Ia juga mengatakan “OOP adalah untuk menulis sebuah program, apa yang akan melalui keamanan bandara adalah untuk terbang”.
8.      Rich Hickey, pencipta Clojure, menjelaskan sistem objek sebagai atas model sederhana dari dunia nyata. Dia menekankan ketidakmampuan OOP ke waktu model benar, yang semakin semakin bermasalah sebagai sistem perangkat lunak menjadi lebih bersamaan.
9.      Carnegie-Mellon University Profesor Robert Harper Maret 2011 menulis: “Dan semester ini Licata dan aku mengajar kursus baru di pemrograman fungsional untuk tahun pertama jurusan CS calon ... Pemrograman Berorientasi Obyek dihilangkan sepenuhnya dari kurikulum pengantar, karena keduanya anti-modular dan anti-paralel sifatnya, dan karenanya tidak cocok untuk suatu kurikulum CS modern. Sebuah program baru yang diusulkan pada metodologi desain berorientasi objek akan ditawarkan di tingkat sophomore bagi siswa yang ingin belajar topik ini”.
 Contoh Syntax Program :

class Hewan {
    //inisialisasi variabel untuk class Hewan
    int jumlahKaki = 0;
    String namaHewan = "";
  
    //constructor
    public Hewan(String nama, int kaki){
        this.jumlahKaki = kaki;
        this.namaHewan = nama;
    }
  
    //method untuk mengambil info nama dan jumlahkaki
    public void info(){
        System.out.println("Nama Hewan : "+this.namaHewan + ", Kaki : "+this.jumlahKaki);
    }
}
public class Main {
    public Main(){
        //membuat object "kucing" dari class Hewan
        //membuat object menggunakan keyword new
        Hewan kucing = new Hewan("Kucing", 4);
      
        //menjalankan method info
        kucing.info();
    }
    public static void main(String[] args) {
            Main main = new Main();
    }
}

HASIL RUNNING

F. Post Test
Buat kelas yang mengimplementasikan fungsi-fungsi statistic sederhana yaitu rata-rata dan standar deviasi. Kelas ini mempunyai dua data yaitu jumlah ( Jumlah data ) dan data (Larik yang mempunyai data). Method yang dimiliki ada lima yaitu Konstruktor, BacaData, TulisData, Rata-Rata dan Standar Deviasi.

Syntax Programnya :
package Modul5 ;
import java.util.Scanner;
public class PTSM6 {
    double ratarata;
    double deviasi;
  
    public PTSM6(double ratarata, double deviasi){
    this.ratarata = ratarata;
    this.deviasi = deviasi;
    }
    void BacaData(){
        System.out.println("Rata rata = "+ratarata);
        System.out.println("Standar Deviasi = "+deviasi);
    }
  
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int jml;
        double rata, dv;
        System.out.print(" Jumlah Data : ");
        jml = in.nextInt();
        double[] data = new double [jml];      
        data = TulisData(jml);
        PTSM6 A1 = new PTSM6 (ratarata(data), StandarDeviasi(data));
        A1.BacaData();
      
    }
    public static double[] TulisData(int jml){
    Scanner in = new Scanner(System.in);
    double[] data = new double[jml];
    for(int i=0; i<jml; i++){
        System.out.print("Enter Data-"+(i+1)+" : ");
        data[i] = in.nextDouble();
    }
    return(data);
}
public static double ratarata (double [] data){
    double total = 0;

  for(int i=0; i<data.length; i++){
      total += data[i];
}
    return total / data.length;
}
public static double StandarDeviasi (double[] data){
    double ratarata = ratarata (data);
    double deviasi = 0;
    for(int i=0; i<data.length; i++){
        deviasi += Math.pow (data[i] - ratarata,2);
    }
    return Math.sqrt((deviasi)/(data.length));
}
}

HASIL RUNNING

 BAB III
PENUTUP

KESIMPULAN

Pemrograman Berorientasi Objek (Object Oriented Programming atau OOP) merupakan paradigma pemrograman yang berorientasikan kepada objek. OOP adalah paradigma pemrograman yang cukup dominan saat ini, karena mampu memberikan solusi kaidah pemrograman modern. Pemrograman Orientasi Objek (Object Oriented Programming) menekankan beberapa konsep, yaitu kelas, objek, abstraksi, enkapsulasi, polimorfisme, dan inheritas. Python, Ruby dan Groovy adalah bahasa dinamis dibangun di atas prinsip-prinsip OOP, sedangkan Perl dan PHP telah menambahkan fitur berorientasi objek sejak Perl 5 dan PHP 4, dan ColdFusion sejak versi 6. Desain pola OOP antara lain : 1) Warisan dan Perilaku Subtyping, 2) Pola Desain Gang Empat, 3)  Obyek Orientasi dan Database, 4) Pemodelan Dunia Nyata dan Hubungan, 5) Desain OOP dan Flow Control, 6) Desain Tanggung Jawab dan Driven Desain Data. Beberapa ahli juga mengkritik OOP, antara lain : Richard Stallman, Potok et al., Christopher J. Tanggal, Alexander Stepanov, Paul Graham, Joe Armstrong, Richard Mansfield, Rich Hickey, dan Carnegie-Mellon University Profesor Robert Harper.


DAFTAR PUSTAKA

Minggu, 03 Desember 2017

LAPORAN BAHASA PEMROGRAMAN MODUL 5

LAPORAN PRAKTIKUM
BAHASA PEMROGRAMAN 1

MODUL V
“ARRAY”
Dosen : Dede Irawan M.Kom






Disusun Oleh :
Lisna Wulandari
20160910049
SI 2016 A


SISTEM INFORMASI
FAKULTAS ILMU KOMPUTER
UNIVERSITAS KUNINGAN

KATA PENGANTAR
Puji syukur kehadirat Allah SWT yang memberikan bimbingan dan pertolongannya sehingga dalam penulisan Laporan Praktikum Bahasa pemograman 1 ini bisa berjalan dengan lancar. Penulisan Laporan Praktikum Bahasa pemograman 1 ini dimaksudkan penulis khusunya saya sendiri untuk memenuhi tugas mata kuliah Bahasa pemograman 1. Penulisan Laporan Praktikum Bahasa pemograman 1 ini dimaksudkan sebagai penambah wawasan pembaca khususnya tentang Bahasa pemograman 1 tentang Array.  Di sisi lain, penulis mengajak kepada para pembaca agar dapat memahami dan mendalami masalah topik di atas, sekaligus menerapkan hasil Laporan Praktikum Bahasa pemograman 1.

Demikianlah sebagai pengantar, mudah-mudahan dengan laporan ini bisa diterima dengan baik. Dan semoga Allah senantiasa melimpahkan rahmat-Nya dalam setiap aktivitas yang kita kerjakan. Amin



                                                                                                  Kuningan ,03 Desember 2017
                                                                                                  Penyusun,

                                                                                                  Lisna Wulandari



DAFTAR ISI

KATA PENGANTAR
DAFTAR ISI
BAB I PENDAHULUAN
A.  Latar Belakang
B. Rumusan Masalah
BAB II PEMBAHASAN
A. Pengertian Array
B. Deklarasi Array
C. Mengakses Elemen Array
D. Mengapa Harus Mengunakan Array
E. Post Test
BAB III PENUTUP

A. Kesimpulan
B. Daftar Pustaka



BAB I
PENDAHULUAN
 A. Latar Belakang

Variabel bisa kita gunakan yang saat ini hanya bisa menampung satu data hanya pada satu variabel saja. Dalam banyak kasus kita akan repot menggunakan banyak variabel, sebagai contoh perhitungan nilai, jika terdapat banyak siswa, maka variabel nilai yang dibutuhkan disesuaikan dengan banyaknya siswa. Maka dilihat dari kasus diatas, maka dengan array, kita bisa mendeklarasikan nilai.
Array adalah tipe data terstruktur yang terdiri dari sejumlah komponen-komponen yang mempunyai tipe sama.  Komponen-komponen tersebut disebut sebagai komponen type, array mempunyai jumlah komponen yang jumlahnya tetap. Banyaknya komponen dalam array ditunjukkan oleh suatu index, dimana tiap komponen di array dapat diakses dengan menunjukkan nilai indexnya atau subscript. Array dapat bertipe data sederhana seperti byte, word, integer, real, bolean, char, string dan tipe data scalar atau subrange.  Tipe array mengartikan isi dari aray atau komponen- komponenya mempunyai nilai dengan tipe data tersebut.

B. Rumusah Masalah

Apa pengertian Array ?

Bagaimana deklarasi array ?

Bagaimana mengakses elemen array ?

Mengapa harus menggunakan array ?

BAB II
PEMBAHASAN
A.  Pengertian Array
Menurut definisinya, array (larik) adalah sebuah variable yang dapat menyimpan lebih dari satu nilai sejenis (memiliki tipe data yang sama). Hal ini tentu berbeda dengan variable biasa yang hanya mampu menampung satu buah nilai. Setiap nilai yang disimpan di dalam array di sebut dengan elemen array, sedangkan nilai urut yang digunakan untuk mengakses elemennya disebut dengan indeks array.

B. Deklarasi Array
Sama seperti variable lain, array juga dideklarasikan di dalam bagian deklarasi variable. Bila akan didefinisikan sebagai tipe bentukan, maka array juga akan dideklarasikan di bagian definisi tipe (dibawah kata kunci tipe). Dalam bahasa pascal, pendeklaraasian array dilakukan dengan menggunakan kata kunci array dan tipe data yang akan disimpan di dalamnya, selain itu juga harus disertai dengan batas-batas indeksnya yang diapit oleh tanda bracket([]). Berikut ini bentuk umum pendeklarasiannya.
NamaArray : array [IndeksArray..IndeksAkhir] of tipe_data;

Sebagai contoh, apabila kita ingin mendeklarasikan array dengan nama A yang berisi 10 buah elemen bertipe integer, maka kita harus mendeklarasikannya dengan cara berikut.

Var
A : array [1..10] of integer;

Pada kode tersebut, indeks awal dimulai dari satu. Perlu diperhatikan bahwa bahasa pascal berbeda dengan bahasa C yang indeks array-nya selalu dimulai dari nol. Pada bahasa pascal, indeks array dapat dimulai dari bilangan berapapun. Selain itu, indeks array juga dapat bertipe karakter maupun tipe enumerasi. Berikut ini contoh-contoh kode yang dapat digunakan untuk mendeklarasikan 10 buah elemen array bertipe integer sebagai pengganti kode diatas.

Var
A1: array[0..9] of integer;

A2: array[5..15] of integer;

A3: array[‘a’..’j’] of integer;

A4: array[‘A’..’J’] of integer;

Dalam bahasa pascal, tersedia dua buah fungsi yang dapat digunakan untuk mengambil indek terendah dan tertinggi dari sebuah array, yaitu fungsi Low dan High. Adapun parameter dari kedua fungsi tersebut adalah nama array yang akan dicari indeknya. Perhatikan contoh kode berikut.

Var
A: array[1..100] of integer;

Terendah, tertinggi: integer;

Begin
Terendah:= low(A); {akan menghasilkan nilai 1}
Tertinggi:= high(A); {akan menghasilkan nilai 100}


End
C.  Mengakses Elemen Array
Cara untuk memanipulasi array, langkah pertama yang harus dilakukan adalah mengisikan nilai ke dalam elemen-elemen array bersangkutan. Adapun bentuk umum untuk pengisian eleman array adalah sebagai berikut.

NamaArray[indeks]:= nilai;

Untuk lebih memahaminya, coba anda perhatikan terlebih dahulu contoh kode di bawah ini.

Var
A: array[1..100] of integer;

Begin
A[1]:= 1; {mengisi elemen pertama dengan nilai 1}
A[2]:= 2; {mengisi elemen kedua dengan nilai 2}
A[3]:= 3; {mengisi elemen ketiga dengan nilai 3}
            ……..
A[100]:= 100; {mengisi elemen keseratus dengan nilai 100}
End.

Kode tersebut akan melakukan pengisian 100 elemen array dengan nilai 1 sampai 100 sehingga kode tersebut akan lebih sederhana apabila dituliskan dengan menggunakan struktur pengulangan seperti yang terlihat pada kode berikut.
Var
A: array[1..100] of integer;
I: integer;

Begin
For i:=1 to 100 do begin
A[i]:= I ;
End;
End.
D. Mengapa Harus Menggunakkan Array
Mungkin anda yang merupakan pemula akan bertanya mengapa kita perlu untuk mendeklarasikan array? untuk menjawab pertanyaan tersebut, coba Anda perhatikan dulu contoh kasus berikut. Apabila kita akan membuat program untuk menyimpan sekumpulan data, misalnya data-data hasil penelitian yang berupa bilangan, dimana jumlah dari data tersebut puluhan, ratusan, atau bahkan ribuan, apakah anda akan menggunakan variable sebanyak data yang ada? Jawabanya tentu tidak, karena hal tersebut merupakan hal yang sangat tidak efisien. Sebagai contoh, asumsikan bahwa banyak data tersebut adalah sepuluh, maka apabila kita menggunakan variabel biasa tentu kita akan menuliskannya melalui contoh kode berikut.

Var
N1, n2, n3, n4, n5, n6, n7, n8, n9, n10: real;

Begin
Writeln(‘masukkan data ke-1 : ‘); readln(n1);
Writeln(‘masukkan data ke-2 : ‘); readln(n2);
Writeln(‘masukkan data ke-3 : ‘); readln(n3);
Writeln(‘masukkan data ke-4 : ‘); readln(n4);
Writeln(‘masukkan data ke-5 : ‘); readln(n5);
Writeln(‘masukkan data ke-6 : ‘); readln(n6);
Writeln(‘masukkan data ke-7 : ‘); readln(n7);
Writeln(‘masukkan data ke-8 : ‘); readln(n8);
Writeln(‘masukkan data ke-9 : ‘); readln(n9);
Writeln(‘masukkan data ke-10 : ‘); readln(n10);
End.

Hal ini tentu akan merepotkan diri kita. Apabila dilihat, program di atas memang masih pendek karena datanya hanya sepuluh, bagaimana bila ratusan atau bahkan ribuan?
Untuk mengatasi masalah ini, seharusnya kita menggunakan array untuk menyimpan data-data tersebut sehingga program akan jauh lebih sederhana dan mudah dalam pengerjaannya. Berikut iini perbaikan program diataas apabila kita menampung data-datanya kedalam sebuah array..
Const max= 10;
N: array[1..max] of real;
I: integer;

Begin
For i:=1 to max do
Writeln(‘masukkan data ke-‘, I,’ : ‘); readln(n[i]);
End.

Apabila ternyata data berjumlah 100 atau 1000, maka anda hanya perlu mengganti nilai dari konstanta max di atas dengan nilai yang sesuai. Alasan seperti inilah yang menyebabkan kita perlu menggunakan array.

Contoh Programnya :
package modul5;
import java.util.Scanner;

public class Modul5 {
    public static void main(String[] args) {

        // membuat array buah-buahan
        String[] buah = new String[5];

        // membuat scanner
        Scanner scan = new Scanner(System.in);

        // mengisi data ke array
        for( int i = 0; i < buah.length; i++ ){
            System.out.print("Buah ke-" + i + ": ");
            buah[i] = scan.nextLine();
        }

        System.out.println("---------------------------");

        // menampilkan semua isi array
        for( String b : buah ){
            System.out.println(b);
        }
    }
}

Hasil Running
 E. Post TestBuatlah class java dengan nama Latihan_04 untuk menghitung gaji karyawan dengan jumlah karyawan ditentukan oleh inputan dari keyboard. Adapun data karyawan terdiri dari NIK, Nama, Lama Kerja, Gaji  Pokok, Tunjangan, Potongan dan Gaji Bersih. Besar Gaji Pokok disisi dengan 100000*Lama Kerja,Tunjangan Gajipokok*2.5% dan Gaji Bersih diisi dengan Gaji Pokok + Tunjangan.

Syntax Programnya :
package modul5;
import java.util.Scanner;
public class latihan_04 {
    public static void main(String[] args) {
       Scanner scan = new Scanner(System.in);
       Scanner in = new Scanner(System.in);
     
       String[] nama;
       int lama[], n,i;
       long [] nik, gapok, tnj, gaber;
     
       nama = new String[100];
       nik = new long[100];
       lama = new int[100];
       gapok = new long[100];
       tnj = new long[100];
       gaber = new long[100];
     
       System.out.println("Program Menghitung Gaji Karyawan");
       System.out.print("Masukan Jumlah Data Karyawan : ");
       n = in.nextInt();
       for(i=0; i<n; i++){
           System.out.print("MASUKAN BERAPA NIK ANDA  : ");
           nik[i] = in.nextLong();
           System.out.print("MASUKAN SIAPA NAMA ANDA : ");
           nama[i] = scan.nextLine();
           System.out.print("BERAPAKAH LAMA KERJA ANDA : ");
           lama[i] = in.nextInt();
           System.out.print("\n");
           gapok[i] = 1000000 * lama[i];
           tnj[i] = (long) (gapok[i] * 0.025);
           gaber[i] = gapok[i] + tnj[i];
       }
    
System.out.println("No.\tNIK\t\tNama Karyawan\tLama Kerja\tGaji Pokok\tTunjangan\tGaji Bersih");
       for(i=0; i<n; i++){
       System.out.print(i+1+"\t");
       System.out.print(nik[i]+"\t");
       System.out.print(nama[i]+"\t");
       System.out.print(lama[i]+"\t\t");
       System.out.print(gapok[i]+"\t\t");
       System.out.print(tnj[i]+"\t\t");
       System.out.println(gaber[i]);
       }
    }
}

Hasil Running




 BAB III
PENUTUP

KESIMPULAN
Array (larik) adalah sebuah variable yang dapat menyimpan lebih dari satu nilai sejenis (memiliki tipe data yang sama).  Bila akan didefinisikan sebagai tipe bentukan, maka array juga akan dideklarasikan di bagian definisi tipe (dibawah kata kunci tipe). Dalam bahasa pascal, pendeklaraasian array dilakukan dengan menggunakan kata kunci array dan tipe data yang akan disimpan di dalamnya, selain itu juga harus disertai dengan batas-batas indeksnya yang diapit oleh tanda bracket([]).
Array digunakan untuk mempermudah dalam penulisan syntax program pascal, array dapat menyimpan data sehingga bisa menyederhanakan dan mengefektifkan syntax pascal. Array dibedakan menjadi dua yaitu, Array Satu Dimensi dan Array Dua Dimensi. Setiap jenis array mempunyai kegunaannya masing-masing.



DAFTAR PUSTAKA


LAPORAN PRAKTIKUM BAHASA PEMROGRAMAN MODUL 10

LAPORAN PRAKTIKUM  BAHASA PEMROGRAMAN 1 MODUL X “ANIMASI" Dosen : Dede Irawan M.Kom Disusun Oleh :  Lisna Wulandar...