BAB I
PENDAHULUAN
A. Latar Belakang
Pemrograman 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)
Many people
first learn to program using a language that is not object-oriented [ citation
needed ] .Banyak orang pertama kali belajar
program menggunakan bahasa yang tidak berorientasi objek. Pr
Simple, non-OOP programs may be one long list
of commands.PPPogram non-OOP mungkin salah satu daftar panjang dari
perintah.
More complex programs will
group lists of commands into functions or subroutines each of which might perform a particular
task.Lebih program yang kompleks akan kelompok daftar perintah ke dalam
fungsi atau
subrutin masing-masing yang mungkin melakukan tugas tertentu.
With designs of this sort, it is common for
the program's data to be accessible from any part of the program. Dengan desain semacam ini, biasanya untuk
data program untuk dapat diakses dari setiap bagian dari program tersebut. As programs grow in size, allowing any
function to modify any piece of data means that bugs can have wide-reaching
effects. Sebagai program tumbuh dalam ukuran, memungkinkan fungsi apapun
untuk memodifikasi setiap bagian dari data berarti bahwa bug dapat memiliki
dampak yang luas jangkauannya.
By contrast, the object-oriented approach encourages the
programmer to place data where it is not directly accessible by the rest of the
program.Sebaliknya,
pendekatan berorientasi objek mendorong para programmer untuk tempat data di
mana tidak langsung dapat diakses oleh seluruh program. Instead the data is accessed by calling specially written
functions, commonly called methods , which are either bundled in with the data or inherited
from "class objects" and act as the intermediaries for retrieving or
modifying those data.
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. The
programming construct that combines data with a set of methods for accessing
and managing those data is called an object.Pemrograman yang membangun
yang menggabungkan data dengan satu set metode untuk mengakses dan mengelola
data tersebut disebut objek.
An object-oriented program will usually contain different
types of objects, each type corresponding to a particular kind of complex data
to be managed or perhaps to a real-world object or concept such as a bank
account, a hockey player, or a bulldozer.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. A program might well contain multiple copies of each type of
object, one for each of the real-world objects the program is dealing with.Sebuah
program mungkin berisi beberapa salinan dari setiap jenis objek, satu untuk
setiap objek dunia nyata program ini berurusan dengan OOP. For instance, there could be one bank account
object for each real-world account at a particular bank.Sebagai contoh,
ada bisa menjadi salah satu rekening bank untuk setiap account objek dunia
nyata di sebuah bank tertentu. Each
copy of the bank account object would be alike in the methods it offers for
manipulating or reading its data, but the data inside each object would differ
reflecting the different history of each account. 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.
Objects can be thought of as wrapping their data within a
set of functions designed to ensure that the data are used appropriately, and
to assist in that use.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. The object's methods
will typically include checks and safeguards that are specific to the types of
data the object contains.Metode ini objek biasanya akan mencakup
pemeriksaan dan perlindungan yang khusus untuk jenis data objek berisi. An object can also offer simple-to-use,
standardized methods for performing particular operations on its data, while
concealing the specifics of how those tasks are accomplished.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.As an
example, several different types of objects might offer print methods. Sebagai
contoh, beberapa jenis benda mungkin menawarkan metode cetak. Each type of object might implement that
print method in a different way, reflecting the different kinds of data each
contains, but all the different print methods might be called in the same
standardized manner from elsewhere in the program.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. These features become
especially useful when more than one programmer is contributing code to a
project or when the goal is to reuse code between projects.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.
Object-oriented programming has roots that can be traced
to the 1960s.Pemrograman
berorientasi obyek memiliki akar yang dapat ditelusuri ke tahun 1960-an. As hardware and software became increasingly
complex, manageability often became a concern.Sebagai perangkat keras
dan software menjadi semakin
kompleks, pengelolaan sering menjadi perhatian. Researchers studied ways to maintain software quality and
developed object-oriented programming in part to address common problems by
strongly emphasizing discrete, reusable units of programming logic [ citation needed ] . 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). This is in
contrast to the existing modular
programming that had been dominant for many years that focused on
the function of a module, rather than specifically the data, but equally
provided for code
reuse , and self-sufficient reusable units of programming logic, enabling collaboration through the use
of linked modules ( subroutines ).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). This
more conventional approach, which still persists, tends to consider data and behavior
separately.Pendekatan yang lebih konvensional, yang masih tetap,
cenderung untuk mempertimbangkan data dan perilaku secara terpisah.
An object-oriented program may thus be viewed as a
collection of interacting objects , as opposed to the conventional
model, in which a program is seen as a list of tasks ( subroutines ) to perform.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. In OOP, each object is capable of receiving messages, processing
data, and sending messages to other objects. Dalam OOP, setiap objek
dapat menerima pesan, pengolahan data, dan mengirim pesan ke objek lainnya. Each object can be viewed as an independent
"machine" with a distinct role or responsibility. Setiap objek
dapat dilihat sebagai ”mesin” independen dengan peran yang berbeda atau
tanggung jawab.The actions (or " methods ") on these objects are closely associated with the
object. 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
Simula (1967) is
generally accepted as the first language to have the primary features of an
object-oriented language.Bahasa
pertama yang memiliki fitur-fitur utama dari sebuah bahasa berorientasi objek
yaitu Simula (1967). It was created for
making simulation
programs , in which what came to be called objects were the most important
information representation. Smalltalk (1972 to 1980)
is arguably the canonical example, and the one with which much of the theory of
object-oriented programming was developed.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.
Concerning the degree of
object orientation, following distinction can be made:Mengenai derajat
orientasi objek, berikut beberapa perbedaan dapat dibuat:
1.
Languages
called "pure" OO languages, because everything in them is treated
consistently as an object, from primitives such as characters and punctuation,
all the way up to whole classes, prototypes, blocks, modules, etc. They were
designed specifically to facilitate, even enforce, OO methods.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.
Examples: Scala , Smalltalk , Eiffel , Ruby , JADE , Emerald. [ 18 ] Contoh :
Scala,
Smalltalk,
Eiffel,
Ruby,
JADE, dan Emerald.
2. Languages designed mainly for OO programming,
but with some procedural elements.Bahasa pemrograman yang dirancang
terutama untuk OOP, tapi dengan beberapa elemen prosedural.
Examples: C++ , C# , VB.NET , Java , Python . Contoh
: C + + , C #, VB.NET, Java, dan Python. (Note:
C# and VB.NET are both
exclusively part of Microsoft's .NET Framework development platform and compile
to the same intermediate language (IL). Although there are some construct
differences, they are minimal and in the context of this grouping, some might
consider them part of one language with simply two syntax translation engines). (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. Languages that
are historically procedural languages , but have been extended with some OO
features.Bahasa yang secara
historis bahasa
prosedural, tetapi telah
diperpanjang dengan beberapa fitur OOP. Examples: Visual
Basic (derived from BASIC), Fortran
2003 , Perl , COBOL 2002, PHP , ABAP .Contoh : Visual Basic (berasal dari DASAR), Fortran 2003, Perl, COBOL 2002, PHP, dan ABAP .
4.
Languages with most of the features of objects (classes,
methods, inheritance, reusability), but in a distinctly original form.Bahasa dengan sebagian besar fitur objek
(kelas, metode, warisan, usabilitas), tetapi dalam bentuk jelas asli. Examples: Oberon (Oberon-1 or Oberon-2). Contoh : Oberon (Oberon-1 atau Oberon-2).
5.
Languages with abstract data type support, but not all features of
object-orientation, sometimes called object- based languages.Bahasa
dengan
tipe data abstrak dukungan, tetapi tidak semua
fitur-orientasi obyek, kadang-kadang disebut bahasa
berbasis objek.
Examples: Modula-2 (with excellent encapsulation and
information hiding), Pliant , CLU .Contoh :
Modula-2 (dengan enkapsulasi yang sangat baik dan
menyembunyikan informasi),
liat, dan
CLU .
In recent years, object-oriented programming has become
especially popular in dynamic programming languages . Python , Ruby and Groovy are dynamic languages built on OOP principles, while Perl and PHP have been
adding object oriented features since Perl 5 and PHP 4, and ColdFusion since version
6.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
Challenges of object-oriented design are addressed by
several methodologies.Tantangan
desain berorientasi objek yang ditujukan oleh beberapa metodologi. Most common is known as the design
patterns codified by Gamma et al. . Paling umum dikenal sebagai pola desain dimodifikasikan oleh
Gamma dkk. More broadly, the term " design patterns " can be used to refer to any general,
repeatable solution to a commonly occurring problem in software design.Lebih luas lagi, istilah ”pola desain” dapat digunakan untuk mengacu pada
setiap diulang, solusi umum untuk masalah umum yang terjadi dalam desain
perangkat lunak. Some of these commonly
occurring problems have implications and solutions particular to
object-oriented development.Beberapa masalah ini sering terjadi memiliki
implikasi dan solusi khusus pengembangan berorientasi objek.
Beberapa
Desain Pola OOP antara lain :
- Warisan dan Perilaku Subtyping
It is intuitive to assume that inheritance creates a semantic " is a "
relationship, and thus to infer that objects instantiated from subclasses can
always be safely used instead of those instantiated from the superclass.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.
This intuition is unfortunately false
in most OOP languages, in particular in all those that allow mutable objects. Subtype polymorphism as enforced by the type
checker in OOP languages (with mutable objects) cannot guarantee behavioral
subtyping in any context.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. Behavioral subtyping is undecidable in general, so it cannot be
implemented by a program (compiler). Perilaku subtyping ini diputuskan pada umumnya, sehingga tidak dapat
dilaksanakan oleh program (compiler).
Class or object hierarchies need to be
carefully designed considering possible incorrect uses that cannot be detected
syntactically.Kelas atau objek hierarki perlu hati-hati dirancang
mempertimbangkan kemungkinan menggunakan salah yang tidak dapat dideteksi
sintaktis. This issue is known as the Liskov substitution principle . Masalah ini dikenal sebagai
prinsip substitusi Liskov .
- Pola Desain Gang Empat
Design Patterns:
Elements of Reusable Object-Oriented Software is an influential book published in 1995 by Erich Gamma , Richard
Helm , Ralph
Johnson , and John Vlissides , sometimes casually called the "Gang
of Four".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”.
Along with exploring the
capabilities and pitfalls of object-oriented programming, it describes 23 common
programming problems and patterns for solving them. Seiring dengan
mengeksplorasi kemampuan dan perangkap pemrograman berorientasi obyek, itu
menggambarkan 23 masalah pemrograman umum dan pola untuk memecahkan masalah
tersebut.
As of April 2007, the book
was in its 36th printing. Pada April 2007, buku itu dalam pencetakan 36
nya.
The book describes the following
patterns: Buku ini menjelaskan pola-pola sebagai berikut:
b. Structural patterns (7): Adapter
Pattern , Bridge
Pattern , Composite
Pattern , Decorator
Pattern , Facade
Pattern , Flyweight
Pattern , Proxy
PatternStruktural
Pola : Pola Adapter, Bridge Pola, Pola Komposit, dekorator Pola, Pola Facade, kelas Terbang Pola, dan Pola Proxy.
c. Behavioral patterns (11): Chain of Responsibility Pattern , Command
Pattern , Interpreter
Pattern , Iterator
Pattern , Mediator
Pattern , Memento Pattern , Observer
Pattern , State
Pattern , Strategy
Pattern , Template Method Pattern , Visitor
PatternPerilaku
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
There are also
object databases that can be used to replace RDBMSs, but
these have not been as technically and commercially successful as RDBMSs.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 can be
used to associate real-world objects and processes with digital counterpartsOOP
dapat digunakan untuk objek dunia nyata asosiasi dan proses dengan mitra
digital.
However, not everyone agrees
that OOP facilitates direct real-world mapping (see Negative
Criticism section) or that
real-world mapping is even a worthy goal; Bertrand Meyer argues in Object-Oriented
Software Construction [ 20 ] that a program is not a model of the world but a model of some
part of the world; "Reality is a cousin twice removed".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”.
At the
same time, some principal limitations of OOP had been noted. [ 21 ] For example, the Circle-ellipse problem is difficult to handle using OOP's concept
of inheritance .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.
However, Niklaus Wirth (who popularized the adage now known as Wirth's law : "Software is getting slower more
rapidly than hardware becomes faster") said of OOP in his paper,
"Good Ideas through the Looking Glass", "This paradigm closely
reflects the structure of systems 'in the real world', and it is therefore well
suited to model complex systems with complex behaviours" (contrast KISS principle ).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 and others noted that natural languages lack
the OOP approach of strictly prioritizing things (objects/ nouns ) before actions (methods/ verbs ). [ 22 ] This problem may cause OOP to suffer more convoluted solutions
than procedural programming. [ 23 ]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 was
developed to increase the reusability and maintainability of source code. [ 24 ] Transparent representation of the control flow had no priority and was meant to be handled
by a compilerOOP dikembangkan untuk meningkatkan
reusabilitas dan
maintainability dari
source code. Representasi transparan
aliran kontrol tidak memiliki prioritas dan
dimaksudkan untuk ditangani oleh
compiler.
With the increasing relevance of
parallel hardware and multithreaded coding , developer transparent control flow becomes
more important, something hard to achieve with OOP. [ 25 ] [ 26 ] [ 27 ] 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
Responsibility-driven
design defines classes in
terms of a contract, that is, a class should be defined around a responsibility
and the information that it shares.Desain Berbasis Tanggung Jawab
mendefinisikan kelas dalam hal kontrak, yaitu kelas harus didefinisikan sekitar
tanggung jawab dan informasi yang sama.
This is contrasted by Wirfs-Brock and Wilkerson with data-driven design , where classes are defined around the
data-structures that must be held.Hal ini kontras dengan Wirfs-Brock dan
Wilkerson dengan
desain data-driven, di mana kelas didefinisikan
di sekitar struktur data yang harus dipegang.
The authors hold that responsibility-driven design is preferable.Para
penulis berpendapat bahwa desain tanggung jawab-driven adalah lebih baik.
E. Kritik Para Ahli Mengenai OOP
A number of
well-known researchers and programmers have analysed the utility of OOPSejumlah
peneliti terkenal dan programmer telah menganalisis utilitas dari OOP, antara lain :Here is an incomplete list:
1.
Richard Stallman wrote in 1995, "Adding OOP to Emacs is not clearly an improvement; I used OOP when working on the Lisp Machine window systems , and I disagree with the usual view that it
is a superior way to program." [ 29 ]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.
A study by
Potok et al. [ 30 ] has shown no significant difference in productivity between OOP
and procedural approaches.Sebuah studi oleh Potok
et al. telah menunjukkan tidak ada perbedaan yang signifikan dalam
produktivitas antara OOP dan pendekatan prosedural.
3.
Christopher J. Date stated that critical comparison of OOP to
other technologies, relational in particular, is difficult because of lack of
an agreed-upon and rigorous definition of OOP. [ 31 ] Date and Darwen [ 32 ] propose a theoretical foundation on OOP that uses OOP as a kind
of customizable type system to support RDBMS.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 suggested that OOP provides a
mathematically-limited viewpoint and called it "almost as much of a hoax
as Artificial Intelligence . I have yet to see an interesting piece of
code that comes from these OO people. In a sense, I am unfair to AI: I learned
a lot of stuff from the MIT AI Lab crowd, they have done some really
fundamental work....". [ 33 ]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 has suggested that the purpose of OOP is to
act as a "herding mechanism" that keeps mediocre programmers in
mediocre organizations from "doing too much damage".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 i
This is at the expense of slowing down
productive programmers who know how to use more powerful and more compact
techniques. [ 34 ]ni adalah pengorbanan dengan memperlambat
programmer produktif yang tahu bagaimana menggunakan lebih kuat dan lebih
kompak teknik.
Joe Armstrong , the principal inventor of Erlang , is quoted as saying "The problem with
object-oriented languages is they've got all this implicit environment that
they carry around with them. You wanted a banana but what you got was a gorilla
holding the banana and the entire jungle." [ 35 ]
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, author and former editor of COMPUTE! magazine, states that "like countless
other intellectual fads over the years ("relevance", communism,
"modernism", and so on—history is littered with them), OOP will be
with us until eventually reality asserts itself. But considering how OOP
currently pervades both universities and workplaces, OOP may well prove to be a
durable delusion. Entire generations of indoctrinated programmers continue to
march out of the academy, committed to OOP and nothing but OOP for the rest of
their lives." [ 36 ] He also is quoted as saying "OOP is to writing a program,
what going through airport security is to flying". [ 37 ]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 , creator of Clojure , described object systems as over
simplistic models of the real world.Rich Hickey, pencipta
Clojure, menjelaskan sistem objek sebagai atas model sederhana
dari dunia nyata.
He emphasized the
inability of OOP to model time properly, which is getting increasingly
problematic as software systems become more concurrent. [ 38 ]Dia menekankan ketidakmampuan OOP
ke waktu model benar, yang semakin semakin bermasalah sebagai sistem perangkat
lunak menjadi lebih bersamaan.
9.
Carnegie-Mellon
University Professor Robert
Harper in March 2011 wrote:
"This semester Dan Licata and I are co-teaching a new course on functional programming for first-year prospective CS majors...
Object-oriented programming is eliminated entirely from the introductory
curriculum, because it is both anti-modular and anti-parallel by its very
nature, and hence unsuitable for a modern CS curriculum. A proposed new course
on object-oriented design methodology will be offered at the sophomore level
for those students who wish to study this topic." [ 39 ]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”.
BAB III
PENUTUP
A. Kesimpulan
Dari makalah di atas penyusun dapat mengambil
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. In recent
years, object-oriented programming has become especially popular in dynamic programming languages . Python , Ruby and Groovy are dynamic languages built on OOP principles, while Perl and PHP have been
adding object oriented features since Perl 5 and PHP 4, and ColdFusion since version
6.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) It is intuitive to assume that inheritance
creates a semantic " is a "
relationship, and thus to infer that objects instantiated from subclasses can
always be safely used instead of those instantiated from the superclass.Pola Desain Gang Empat, 3) Obyek Orientasi dan Database, 4) Pemodelan Dunia Nyata dan Hubungan, 5) Desain OOP dan
Flow Control, 6)OOP was developed to
increase the reusability and maintainability of source code. [ 24 ] Transparent
representation of the control
flow had no priority and was meant to be handled by a compiler Desain Tanggung Jawab dan Driven Desain
Data. Beberapa ahli juga mengkritik OOP, antara lain : Richard
Stallman wrote in 1995, "Adding OOP to Emacs is not clearly
an improvement; I used OOP when working on the Lisp
Machine window
systems , and I disagree with the usual view that it is a superior way to
program." [ 29 ]Richard Stallman, A
study by Potok et al. [ 30 ] has shown no
significant difference in productivity between OOP and procedural approachPotok et
al., Christopher J. Date stated that critical comparison of OOP to
other technologies, relational in particular, is difficult because of lack of an
agreed-upon and rigorous definition of OOP. [ 31 ] Date and Darwen
[ 32 ] propose a
theoretical foundation on OOP that uses OOP as a kind of customizable type
system to support RDBMS.Christopher J.
Tanggal, Alexander Stepanov suggested that OOP provides a
mathematically-limited viewpoint and called it "almost as much of a hoax
as Artificial Intelligence . I have yet to see an interesting piece of
code that comes from these OO people. In a sense, I am unfair to AI: I learned
a lot of stuff from the MIT AI Lab crowd, they have done some really
fundamental work....". [ 33 ]Alexander Stepanov,
Paul Graham has suggested that the purpose of OOP is to
act as a "herding mechanism" that keeps mediocre programmers in
mediocre organizations from "doing too much damage".Paul Graham,
Joe Armstrong,
Richard Mansfield, author and former editor of COMPUTE! magazine, states that "like countless
other intellectual fads over the years ("relevance", communism,
"modernism", and so on—history is littered with them), OOP will be
with us until eventually reality asserts itself. But considering how OOP
currently pervades both universities and workplaces, OOP may well prove to be a
durable delusion. Entire generations of indoctrinated programmers continue to
march out of the academy, committed to OOP and nothing but OOP for the rest of
their lives." [ 36 ] He also is quoted as saying "OOP is to writing a program,
what going through airport security is to flying". [ 37 ]Richard Mansfield,
Rich Hickey , creator of Clojure , described object systems as over
simplistic models of the real world.Rich Hickey, dan
Carnegie-Mellon
University Professor Robert
Harper in March 2011 wrote:
"This semester Dan Licata and I are co-teaching a new course on functional programming for first-year prospective CS majors...
Object-oriented programming is eliminated entirely from the introductory
curriculum, because it is both anti-modular and anti-parallel by its very
nature, and hence unsuitable for a modern CS curriculum. A proposed new course
on object-oriented design methodology will be offered at the sophomore level for
those students who wish to study this topic." [ 39 ]Carnegie-Mellon University Profesor
Robert Harper.
Responsibility-driven design defines classes in terms of a contract,
that is, a class should be defined around a responsibility and the information
that it shares.
B. Saran
Setelah mengetahui pengertian dan seluk beluk semua
tentang OOP, kita dapat mengambil segi positif dari penggunaan OOP dalam
pemrograman, walaupun masih terdapat kelemahan-kelemahan OOP dalam pemrograman.
DAFTAR PUSTAKA
http://id.wikipedia.org/wiki/Pemrograman_berorientasi_objek.
en.wikipedia.org/wiki/Object-oriented_programming.