Masukkan Password
36 Tinjauan Umum OOP
Materi ini adalah pengantar menuju OOP (Object-Oriented Programming), khususnya konsep object, class, instance, property, dan method. Saya jelaskan dari paling dasar supaya hubungan antar-konsepnya jelas.
1. Apa itu Object-Oriented Programming (OOP)?
Object-Oriented Programming (OOP) adalah cara membuat program dengan memodelkan sesuatu sebagai object (objek).
Ide dasarnya sebenarnya sederhana:
Kita mencoba merepresentasikan benda atau entitas di dunia nyata ke dalam program sebagai object.
Misalnya kita membuat aplikasi e-commerce.
Di dalam aplikasi tersebut tentu ada banyak hal:
- Customer
- Product
- Order
- Shopping Cart
- Payment
- dan sebagainya
Hal-hal tersebut bisa kita representasikan sebagai object.
Misalnya:
Customer
Product
Order
masing-masing bisa menjadi object di dalam program.
2. Contoh Object dalam Dunia Nyata
Bayangkan ada seorang customer:
Nama : John
Email : john@gmail.com
Alamat : Jakarta
Dalam OOP, informasi tersebut bisa direpresentasikan sebagai sebuah object:
const customer = {
name: "John",
email: "john@gmail.com",
address: "Jakarta"
};
Nah, object tersebut mempunyai data.
Data:
name
email
address
disebut property.
3. Object Tidak Hanya Memiliki Data
Object juga bisa memiliki behavior (perilaku).
Misalnya customer bisa:
- mengubah alamat
- menampilkan nama lengkap
- melakukan order
Behavior tersebut kita representasikan menggunakan method.
Contoh:
const customer = {
name: "John",
email: "john@gmail.com",
address: "Jakarta",
changeAddress(newAddress: string) {
this.address = newAddress;
}
};
Sekarang object customer memiliki:
Property
name
email
address
Method
changeAddress()
Jadi konsep pentingnya:
Property = data/state yang dimiliki object.
Method = behavior/perilaku atau aksi yang bisa dilakukan object.
4. State dan Behavior
Di materi tadi disebutkan:
Property represents the state of an object.
dan:
Method represents the behavior of an object.
Mari kita pahami.
Misalnya ada object:
const order = {
id: 1001,
total: 500000,
status: "pending"
};
State dari order tersebut adalah:
id = 1001
total = 500000
status = pending
Itulah kondisi/data yang sedang dimiliki object.
Sedangkan behavior-nya bisa berupa:
calculateTotal()
applyDiscount()
cancelOrder()
Jadi:
OBJECT
β
βββ STATE
β βββ id
β βββ total
β βββ status
β
βββ BEHAVIOR
βββ calculateTotal()
βββ applyDiscount()
βββ cancelOrder()
Ini salah satu cara paling mudah untuk memahami OOP.
5. Contoh Object Product
Misalnya kita memiliki produk:
Name : iPhone 11
Price : 19900
Color : Black
RAM : 4 GB
Storage : 64 GB
Kita bisa membuat object:
const product = {
name: "iPhone 11",
price: 19900,
color: "Black",
ram: 4,
storage: 64
};
Kemudian kita bisa memberikan behavior:
const product = {
name: "iPhone 11",
price: 19900,
color: "Black",
ram: 4,
storage: 64,
calculateDiscount() {
// logic discount
},
checkAvailability() {
// logic availability
}
};
Sekarang object tersebut memiliki:
Properties
name
price
color
ram
storage
Methods
calculateDiscount()
checkAvailability()
6. Masalah Kalau Kita Punya 100 Product
Nah, di sinilah masalah yang ingin diselesaikan oleh class mulai terlihat.
Misalnya aplikasi kita menjual 100 produk.
Kita bisa saja membuat:
const product1 = {
name: "iPhone 11",
price: 19900,
color: "Black"
};
Kemudian:
const product2 = {
name: "Samsung Galaxy",
price: 15000,
color: "Blue"
};
Kemudian:
const product3 = {
name: "Google Pixel",
price: 18000,
color: "White"
};
Dan seterusnya sampai 100 object.
Masalahnya:
Masalah 1 β Bisa lupa property
Misalnya product1 punya:
name
price
color
ram
storage
Tetapi ketika membuat product2, kita lupa menambahkan storage.
Akibatnya struktur object menjadi tidak konsisten.
Masalah 2 β Method harus ditulis berulang-ulang
Misalnya setiap product memiliki:
calculateDiscount()
checkAvailability()
Kalau kita membuat 100 object secara manual, kita harus terus-menerus mendefinisikan method yang sama.
Padahal logic-nya sama.
Misalnya:
product1 β calculateDiscount()
product2 β calculateDiscount()
product3 β calculateDiscount()
...
product100 β calculateDiscount()
Logic-nya sebenarnya tidak berubah.
7. Solusi: Blueprint
Sekarang bayangkan kita mempunyai cetakan.
Misalnya kita ingin membuat 100 meja.
Daripada membuat setiap meja dari nol, kita membuat satu blueprint/cetakan:
BLUEPRINT MEJA
β
βββ panjang
βββ lebar
βββ tinggi
βββ material
β
βββ methods/behavior tertentu
Kemudian blueprint tersebut digunakan untuk membuat:
Meja 1
Meja 2
Meja 3
...
Meja 100
Semua meja mengikuti struktur yang sama, tetapi nilainya bisa berbeda.
Inilah analogi class.
8. Apa Itu Class?
Class adalah blueprint/cetakan yang digunakan untuk membuat object.
Misalnya:
Product Class
menentukan bahwa setiap product harus mempunyai:
name
price
color
dan mempunyai behavior:
calculateDiscount()
checkAvailability()
Kemudian dari class tersebut kita bisa membuat banyak object.
Product Class
/ | \
/ | \
Product 1 Product 2 Product 3
Jadi:
Class = blueprint
Object = hasil yang dibuat berdasarkan blueprint
9. Class Bukan Data yang Kita Gunakan
Ini perbedaan yang sangat penting.
Misalnya:
Product Class
adalah blueprint.
Sedangkan:
iPhone 11
Samsung Galaxy
Google Pixel
adalah object yang dibuat berdasarkan blueprint tersebut.
Jadi kita bisa membayangkan:
CLASS
β
Blueprint
OBJECT
β
Produk nyata yang dibuat dari blueprint
10. Instance Itu Apa?
Ketika sebuah object dibuat berdasarkan class, object tersebut disebut instance dari class.
Misalnya kita punya:
class Product {
}
Kemudian kita membuat:
const product1 = new Product();
Maka:
Product
adalah class.
Sedangkan:
product1
adalah instance dari Product.
Kalau kita membuat:
const product2 = new Product();
const product3 = new Product();
maka semuanya adalah instance dari class yang sama.
Product Class
β
βββ product1
βββ product2
βββ product3
11. Kenapa Bisa Banyak Instance?
Karena satu blueprint bisa digunakan berkali-kali.
Bayangkan blueprint rumah.
Kita punya satu blueprint:
Blueprint Rumah
Dari blueprint tersebut kita bisa membuat:
Rumah A
Rumah B
Rumah C
Struktur dasarnya sama, tetapi:
Rumah A β warna putih
Rumah B β warna biru
Rumah C β warna merah
Begitu juga class.
Satu class:
Product
bisa menghasilkan:
product1
product2
product3
...
product100
12. Apakah Semua Object Memiliki Nilai yang Sama?
Tidak.
Yang sama adalah struktur dan behavior-nya, sedangkan nilai property bisa berbeda.
Misalnya class:
Product
β
βββ name
βββ price
βββ color
β
βββ calculateDiscount()
βββ checkAvailability()
Kemudian:
product1
name = iPhone
price = 19900
color = Black
Sedangkan:
product2
name = Samsung
price = 15000
color = Blue
Strukturnya sama:
name
price
color
calculateDiscount()
checkAvailability()
Tetapi datanya berbeda.
13. Analogi Paling Mudah
Kalau masih bingung, gunakan analogi ini:
π Class = pabrik/cetakan
Class menentukan:
“Barang yang saya buat harus mempunyai bentuk seperti ini.”
π¦ Object = barang yang dihasilkan
Object adalah barang sebenarnya yang bisa kita gunakan.
π·οΈ Property = karakteristik barang
Misalnya:
nama
harga
warna
βοΈ Method = kemampuan/aksi barang
Misalnya:
hitungDiskon()
cekKetersediaan()
π’ Instance = setiap barang hasil produksi
Product class
β
βββββββββββββ
β Product 1 β
βββββββββββββ€
β Product 2 β
βββββββββββββ€
β Product 3 β
βββββββββββββ
14. Class vs Object
Ini wajib benar-benar dipahami.
| Class | Object |
|---|---|
| Blueprint | Hasil dari blueprint |
| Cetakan | Barang yang dicetak |
| Mendefinisikan struktur | Memiliki data nyata |
| Menentukan property/method | Memiliki nilai property dan menjalankan method |
| Bisa digunakan untuk membuat banyak object | Salah satu hasil yang dibuat |
Contoh:
class Product {
name: string;
price: number;
}
Ini adalah class.
Kemudian:
const product1 = new Product();
const product2 = new Product();
Ini adalah object/instance.
15. Hubungan Object dengan Class
Gambarkan seperti ini:
CLASS
βββββββββββββ
β Product β
β β
β name β
β price β
β color β
β β
β discount()β
βββββββ¬ββββββ
β
βββββββββββΌββββββββββ
β β β
ββββββββββ ββββββββββ ββββββββββ
βProduct1β βProduct2β βProduct3β
ββββββββββ€ ββββββββββ€ ββββββββββ€
βiPhone β βSamsung β βPixel β
β19900 β β15000 β β18000 β
βBlack β βBlue β βWhite β
ββββββββββ ββββββββββ ββββββββββ
Class menentukan bentuknya.
Object menyimpan data sebenarnya.
16. Lalu Interface Itu Apa?
Di awal materi juga disebutkan interface.
Interface berbeda dengan class.
Secara sederhana, untuk tahap awal pahami seperti ini:
Interface adalah aturan/kontrak mengenai bentuk sebuah object.
Misalnya:
interface Product {
name: string;
price: number;
color: string;
}
Artinya:
Object yang mengikuti interface
Productharus mempunyai property tersebut dengan tipe yang sesuai.
Misalnya:
const product: Product = {
name: "iPhone",
price: 19900,
color: "Black"
};
Interface di sini seperti kontrak:
Product harus memiliki:
β name β string
β price β number
β color β string
Kalau kita lupa:
const product: Product = {
name: "iPhone",
price: 19900
};
TypeScript akan mengeluh karena color diwajibkan oleh interface.
17. Class dan Interface Jangan Disamakan
Walaupun keduanya dapat berhubungan dengan struktur object, tujuan utamanya berbeda.
Class
Lebih seperti:
“Bagaimana saya membuat object ini?”
Class bisa berisi:
- property
- method
- constructor
- logic
- dan lain-lain
Interface
Lebih seperti:
“Object ini harus memiliki bentuk seperti apa?”
Interface lebih berfungsi sebagai kontrak/aturan struktur.
Untuk sekarang cukup ingat:
CLASS
β
Blueprint untuk membuat object
INTERFACE
β
Contract/aturan bentuk object
Nanti ketika masuk lebih dalam ke TypeScript, perbedaan dan penggunaan interface akan jauh lebih jelas.
18. Kenapa OOP Berguna?
Tanpa OOP, aplikasi besar bisa menjadi sulit dikelola karena semua data dan logic bercampur.
Dengan OOP, kita bisa mengelompokkan data dan behavior berdasarkan entity.
Misalnya e-commerce:
Customer
βββ name
βββ email
βββ address
βββ changeAddress()
Product
βββ name
βββ price
βββ stock
βββ calculateDiscount()
Order
βββ orderId
βββ items
βββ date
βββ calculateTotal()
βββ applyDiscount()
Ini membuat struktur aplikasi lebih mudah dipahami.
Ketika kita ingin mengubah behavior Order, kita tahu logic tersebut berada di bagian yang berkaitan dengan Order.
19. Inti Besar Materi Ini
Sebenarnya seluruh lecture panjang tadi bisa dirangkum menjadi alur berikut:
DUNIA NYATA
β
Entity
β
Object
β
Object mempunyai
β
βββββββββββββββββ
β Property β β State/Data
β Method β β Behavior
βββββββββββββββββ
β
Kalau object banyak?
β
Kita butuh blueprint
β
CLASS
β
Membuat banyak object
β
INSTANCE
Contoh e-commerce:
Entity
β
Product
β
Product Object
β
Properties:
name
price
color
Methods:
calculateDiscount()
checkAvailability()
Kalau ada 100 product:
Product Class
β
ββββββΌβββββ¬βββββ
β β β β
P1 P2 P3 ... P100
Jadi kita tidak perlu mendefinisikan struktur dan behavior dari nol setiap kali membuat product baru.
20. Yang Wajib Kamu Ingat dari Lecture Ini
Kalau nanti kamu lupa sebagian besar penjelasan ini, cukup ingat 7 istilah berikut:
1. Object
Representasi suatu entity di dalam program.
2. Property
Data/state yang dimiliki object.
name
price
color
3. Method
Behavior/aksi yang bisa dilakukan object.
calculateDiscount()
4. OOP
Paradigma pemrograman yang memodelkan entity sebagai object yang mempunyai state dan behavior.
5. Class
Blueprint/cetakan untuk membuat object.
6. Instance
Object yang dibuat berdasarkan suatu class.
const product = new Product();
product adalah instance dari Product.
7. Interface
Kontrak yang menentukan bentuk/struktur yang harus dimiliki suatu object.
π§ Cara mengingatnya
Gunakan kalimat ini:
Class adalah cetakan, object adalah hasil cetakannya, property adalah data yang dimiliki, dan method adalah aksi yang bisa dilakukan. Interface adalah kontrak mengenai bentuknya.
Contoh paling sederhana:
CLASS
"Product"
β
βββββββββββββββββ
β name β
β price β
β color β
β β
β discount() β
βββββββββββββββββ
β
dibuat menjadi
β
βββββββββββ΄ββββββββββ
β β
Product 1 Product 2
iPhone Samsung
19900 15000
Black Blue
Jadi jangan menganggap class sebagai data product itu sendiri. Class adalah blueprint, sedangkan Product 1 dan Product 2 adalah data/object nyata yang dibuat berdasarkan blueprint tersebut.
Pada lecture berikutnya, biasanya kita mulai masuk ke bagian yang lebih praktis: cara mendefinisikan class, membuat property, membuat method, menggunakan constructor, dan membuat object dengan new di TypeScript.
Saya juga bisa membuat gambar/diagram visual yang menjelaskan hubungan Class β Object β Instance β Property β Method β Interface.