Pengantar
OOP
Aplikasi berbasis windows dan web
adalah program yang sangat kompleks yang menyajikan tampilan menarik kepada
user dan menawarkan user interface yang kompleks dengan tombol, dropdown, popup
menu, toolbox, dan masih banyak komponen yang lain. Dibelakang user interface
tersebut masih ada hubungan bussiness prosess yang kompleks seperti misal
hubungan antara Product, Customer, dan Order yang melibatkan banyak logika dan pengolahan
data.
Untuk menangani berbagai
kompleksitas yang terjadi maka programmer mengembangkan teknik yang diberi nama
“Objcet Oriented Programming”, dengan tujuan yang sederhana yaitu mengatur
kompleksitas dengan memodelkan aspek esensial yang ada. Jika model yang
dikembangkan semakin mendekati problem yang akan dipecahkan maka semakin mudah
*** persoalan tersebut dapat dimengerti sehingga program lebih mudah ditulis
dan di-maintain.
Problem yang akan dipecahkan dan
semua informasi yang berhubungan dengan problem tersebut sering disebut sebagai
problem domain. Misal jika anda ingin membuat program untuk keperluan Inventory
dan Sales di suatu perusahaan maka problem domainnya adalah semua informasi
tentang perusahaan tersebut yang berhubungan dengan pengaturan stok inventory,
cara penjualan, pemasukan penjualan dan data lainnya. Manaager penjualan dan
Manager bagian gudang akan menjadi problem domain expert yang dapat membantu
anda dalam menyelesaikan masalah.
Design dari Object Oriented harus
berisi objek-objek yang ada pada problem domain tersebut. Sebagai contoh jika
problem domainnya adalah mesin ATM maka objek didalamnya seharusnya adalah
customer, rekening, dll.
Class vs
Object
Apa sich bedanya?. Jika anda ingin
membangun rumah Class adalah blueprint / gambar (berisi spesifikasi lengkap
dari rumah yang akan dibuat, ukuran, jumlah, dll). Sedangkan object adalah
bentuk fisik / rumah yang dibangun berdasarkan blueprint / class yang sudah
ada, biasa disebut instan class / object.
Elemen
Pada Class
Class pada C# terdiri dari :
· Instance Variable / Field
· Method
Method digunakan untuk merubah state
pada field.
Mendefinisikan
Class
Class di C# dapat terdiri dari
kumpulan variable (field), property dan method. Cara untuk menggunakan class
adalah dengan membuat instan class-nya. Untuk menjalankan class maka harus ada
satu method main pada class tersebut. contoh pendeklarasian class di C# sebagai
berikut: Read More >>
C#
Modifier
C# memiliki beberapa modifier class
yaitu:
Access
Modifiers
Access Modifiers digunakan untuk
menentukan hak akses dari class dan method, adapun access modifier yang ada
pada C# sebagai berikut: Read More >>
Method
Arguments
Method pada C# dapat memiliki banyak
argumen dengan tipe data yang berbeda. Method juga dapat memiliki nama yang
sama asal parameter / tipe datanya berbeda (Method Overloading). Read More >>
Konstruktor
Konstruktor adalah method yang
namanya sama dengan nama class-nya. Konstruktor digunakan untuk inisialisasi
variabel ketika membuat instan class / objek baru. Sebenarnya setiap kali anda
membuat instant class / objek baru maka konstruktor dijalankan. Jika anda tidak
mendefinisikan konstruktor secara eksplisit maka tetap dianggap membuat
konstruktor kosong. Read More >>
Initializer
Pada C# anda bisa menginisialisasi
variabel dalam class secara langsung tanpa harus mengisialisasi-nya lewat konstruktor. Read More >>
“This”
Keyword
This keyword digunakan untuk
mengakses instan class / objek itu sendiri, penggunaan keyword this diperlukan
untuk membedakan pengaksesan class variabel dan method variabel yang mempunyai
nama yang sama. Read More >>
Static
dan Instance Member
Field, property, dan method dalam
suatu class bisa merupakan instance member atau static member.
Instance member dibentuk ketika class tersebut dibuat instan-nya, secara
default field, property, dan method yang tidak diberi keyword static merupakan
instance member. Read More >>
Destroy
Object
Karena C# menyediakan garbage
collector, anda tidak perlu secara eksplisit men-destroy objek. Jika
anda bekerja dengan unmanage resource (kode yang tidak di handle oleh CLR) maka
anda tetap harus mendestroy objek secara manual. Adapun cara pendeklarasian
destruktor pada C# sebagai berikut: Read More >>
Menggunakan
Using Statement
Untuk memudahkan developer C#
menyediakan statement using untuk memastikan bahwa method dispose dijalankan.
(kadang kita lupa untuk memanggil method dispose ini). Penggunaan using hanya
bisa digunakan untuk class yang mengimplementasikan IDisposable. Read More >>
Passing
Parameter
Parameter pada C# secara default
yang dikirimkan kedalam method adalah nilainya, atau “pass by value”. Jadi jika
ada perubahan nilai parameter pada method tersebut tidak berpengaruh ke method. Read More >>
Overloading
Konstruktor & Method
Pada C# anda dapat mendeklarasikan
method atau konstruktor dengan nama yang sama pada sebuah class, tetapi
parameter method tersebut harus berbeda bisa jumlah atau tipe datanya. Pada
contoh dibawah ini akan ditunjukan bagaimana cara menggunakan overloading
konstruktor Read More >>
Enkapsulasi
data dengan Property
Enkapsulasi / penyembunyian
informasi adalah konsep yang selama ini sering anda dengar. Pada OOP informasi
dibungkus dalam sebuah Class sehingga orang yang menggunakan class tersebut
tidak perlu tahu detail-nya, hanya cukup mengetahui method dan property apa
saja yang ada dalam class tersebut beserta kegunaannya. Read More >>
Get
Accessor
Penggunakan get{} pada property
mirip dengan jika anda menggunaan method getValue() / getter method pada java,
get pasti mengembalikan nilai jadi dalam kalang get harus ada return valuenya.
Set
Accessor
Penggunaan set{} pada property mirip
dengan jika anda menggunakan setValue() / setter method pada java, set
digunakan untuk memberi nilai kedalam class variable. Pada C# jika anda memberi
nilai pada property maka set{} otomatis dijalankan.
Specialization
dan Generalization
Class dan instannya (objek) tidak
berdiri sendiri, seperti objek manusia yang merupakan mahluk sosial tidak hanya
berdiri sendiri, objek akan saling berelasi dan berinteraksi, demikian *** pada
OOP.
Salah satu hubungan antar objek yang
paling penting yang terjadi di dunia nyata adalah spesialisasi yang bisa
didefinisikan sebagai is-a relationship, misal anjing adalah mamalia,
jika anjing termasuk anggota mamalia maka dia memiliki ciri-ciri special khas
yaitu menyusui, punya bulu. Selain sifat-sifat pada mamalia anjing juga
memiliki ciri yang spesifik khas anjing yang tidak dipunyai anggota mamalia
lainnya seperti kucing.
Relasi spesialisasi dan generalisasi
terjadi pada contoh diatas, anjing dan kucing secara general merupakan anggota
mamalia tetapi juga terspesialisasi secara spesifik sebagai anjing dan kucing
yang mempunyai ciri khas yang berbeda. Relasi tersebut dapat digambarkan secara
hirarki.
Inheritance
Pada C# hubungan spesialisasi diimplementasikan
menggunakan prinsip inheritance. Penulisan inheritance di C# sebagai berikut Read More >>
Memanggil
Base Class Constructor
Pada contoh diatas class ListBox
adalah turunan dari class Window, class ListBox mempunyai konstruktornya
sendiri yang memiliki tiga parameter, konstruktor pada class ListBox dapat
menggunakan tanda : (titik dua) untuk memanggil kosntruktor base class-nya
(konstruktor pada class Window)
public ListBox(int top, int left,
string theContents):base(top, left)
Karena konstruktor tidak dapat
diturunkan maka class turunan harus memiliki konstruktor sendiri.
Polymorphism
Ada dua aspek yang paling penting
pada inheritance yang pertama adalah code reuse, sebagai contoh ketika anda
membuat class ListBox maka anda dapat menggunakan logic yang sudah dibuat pada
class Window
Aspek kedua yang tidak kalah penting
dari inheritance adalah polymorhism, poly berarti banyak dan morph berarti
bentuk, jadi polymorphism dapat berarti dapat menggunakan banyak bentuk tanpa
harus mengacu details yang sama.
Dari istilahnya Polymorphism
kesannya sulit dan kompleks, tetapi sebenarnya simple, ilustrasinya begini
ketika sebuah perusahaan telpon / provide telpon mengirimkan signal ke anda
(dering telpon), mereka tidak tahu telpon apa yang anda gunakan, bisa model
lama dengan dering kuno, bisa HP dengan dering music mp3, TV Phone, PDA Phone
dll. yang provider tahu bahwa masing-masing telepon mempunyai ‘base type’
telepon dan mempunyai method untuk berdering. Ketika provider mengirimkan
signal mereka hanya berharap bahwa telepon akan berdering tidak peduli jenis
telponnya, nah provider telepon memperlakukan telepon anda secara polymorphism.
Membuat Type
Polymorphism
Dari gambar diatas dapat anda lihat,
ListBox is-a Control (karena ListBox turunan dari Control), Button is-a
Control, kita berharap bahwa dapat memperlakukan keduanya sebagai Control.
Misal anda mempunyai banyak control di collection untuk digambar ke windows,
dan mengharapkan ketika memanggil method draw() pada control maka control2
tersebut akan tergambar sesuai dengan tipe objectnya (mis: ListBox,
RadioButton, Command, dll).
Anda dapat mengimplementasikan
polymorphism dengan dua cara yaitu: Read More >>
Versioning
dengan new dan override keyword
Pada contoh diatas digunakan keyword
virtual pada base class agar dapat dioverride oleh class turunannya. Akan
timbul masalah jika misal: Perusahan A membuat class Control kemudian
perusahaan B membelinya untuk membuat ListBox dan RadioButton (tapi B tidak
bisa memodifikasi class Control karena hanya beli tanpa code), pada saat
membuat ListBox perusahaan B menambahkan fungsi sort() kedalam class tersebut Read More >>
Abstract
Class
Setiap tipe Window pasti mempunyai
bentuk tampilan yang berbeda misal combobox, listbox, button, dll. Berarti
setiap class turunan dari Window harus mempunyai method DrawWindow() nya
sendiri yang berbeda satu sama lain. Untuk memastikan bahwa setiap class
turunan Control harus mempunyai method DrawWindow() maka anda harus
mendefinisikan class tersebut sebagai abstract class dan memiliki method
abstract yang belum diimplementasikan. Read More >>
Sealed
Class
Jika anda ingin membuat class yang
tidak dapat diturunkan lagi maka anda dapat menambahkan keyword ‘sealed’.
Object
Root dari semua class
Semua class dari semua type
diturunkan dari satu class untama yaitu class object. Meskipun tidak dituliskan
secara eksplisit namun pada dasarnya semua class diturunkan dari class object.
Beberapa method yang ada pada class
object adalah: Equals(), GetHashCode(), GetType(), ToString(), Finalize(),
MemberwiseClone(), ReferenceEquals(). Read More >>
Boxing dan
Unboxing Types
Boxing dan Unboxing adalah suatu
proses ketika suatu tipe data value (seperti int) di konversikan menjadi tipe
reference / object. Istilah boxing berarti diubah menjadi object dan unboxing
berarti dikembalikan lagi ke tipe data value. Read More >>
Menghindari
Boxing dan unboxing dengan Generic
Proses boxing dan unboxing
mempengaruhi performa program, karena semua harus di boxing kedalam tipe object
(misal: dalam penggunaan ArrayList). Pada C# 2.0 keatas sudah mendukung generic
sehingga proses boxing dan unboxing dapat dihindari.
Interfaces
Jika anda ingin mendefinisikan tipe
baru tetapi tidak ingin mengimplementasikan isinya secara langsung maka anda
dapat menggunakan interfaces.
Pada dasarnya interface adalah
sebuah kontrak, ketika anda mendesign interface seolah-olah anda mengatakan
“jika anda ingin menggunakan class ini maka anda harus mengimplementasikan
method, property yang sudah disediakan”. Class yang menggunakan interface
tersebut setuju dengan kontrak dan mengimplementasikan requirement yang
ditentukan.
Dibandingkan dengan abstract class,
abstract class hanya bisa digunakan di class paling atas ‘top-hierarchy’
sedangkan interface dapat digunakan di setiap class yang diinginkan (setiap
class dapat mengimplementasikan lebih dari satu interface).
Perbedaan
Interface dan Abstract Class
Programmer sering merasa bingung
dalam mebedakan Interface dan Abstract Class. Beberapa perbedaannya adalah: Read More >>
Mengimplementasikan
lebih dari satu Interface
Pada C# sebuah class hanya dapat
diturunkan dari sebuah class saja, tidak seperti bahasa C++ yang mendukung
multipe inheritance. Tetapi untuk interface anda dapat menggunakan lebih dari
satu interface dalam sebuah class. Read More >>
Delegates
dan Event
Mungkin anda pernah menjumpai
situasi dimana anda ingin mengeksekusi suatu action tetapi anda belum tahu
pasti isi dari detail methodnya atau bahkan tidak tahu objectnya. Misal method
untuk menghandle button press (ketika object button tersebut ditekan). Anda
harus membayangkan bahwa pembuat komponen button, textbox, listbox bukanlah
programmer yang menggunakan object tersebut. Pembuat button hanya tahu bahwa
button tersebut mempunyai event click (ketika diklik) tapi pembuat buton tidak
tahu apa yang terjadi ketika button tersebut diklik (hanya diketahui oleh
programmer yang menggunakan button tersebut). Read More >>
kita juga punya nih jurnal mengenai object oriented programming, silahkan dikunjungi dan dibaca , berikut linknya
ReplyDeletehttp://repository.gunadarma.ac.id/bitstream/123456789/3407/1/Rancang%20Bangun%20Program%20Aplikasi%20Kamus%20Elektronik%20Untuk%20Perangkat%20Sistem%20Komputasi%20Bergerak%20berbasiskan%20Java%20MIDP.pdf
kita juga punya nih jurnal mengenai object-oriented , silahkan dikunjungi dan dibaca , berikut linknya
ReplyDeletehttp://repository.gunadarma.ac.id/bitstream/123456789/1081/1/11107722.pdf
semoga bermanfaat yaa :)
repository gunadarma gak bisa diambil :)
ReplyDelete