PL/SQL - Pemrograman Berorientasi Objek

Hai teman-teman yang sedang belajar pemrograman! Hari ini, kita akan memulai perjalanan menarik ke dalam dunia Pemrograman Berorientasi Objek (OOP) dalam PL/SQL. Jangan khawatir jika Anda baru saja memulai dalam programming – saya akan menjadi panduan yang ramah, menjelaskan segala sesuatu secara langkah demi langkah. Mari kita masuk ke dalamnya!

PL/SQL - Object Oriented

Apa Itu Pemrograman Berorientasi Objek?

Sebelum kita mulai, mari kita mengerti apa itu OOP. Bayangkan Anda sedang membangun sebuah rumah dengan blok Lego. Setiap blok mewakili sebuah objek, dan Anda dapat menggabungkan blok ini dalam berbagai cara untuk menciptakan struktur yang lebih kompleks. Itu sebenarnya apa yang dilakukan OOP dalam programming – itu memungkinkan kita untuk menciptakan dan mengoperasikan objek yang mewakili entitas dunia nyata.

Inisiasi Objek

Sekarang, mari kita belajar bagaimana menciptakan (atau "inisiasi") sebuah objek dalam PL/SQL. Bayangkan ini seperti membangkitkan karakter Lego hidup dalam dunia programming Anda!

CREATE OR REPLACE TYPE person AS OBJECT (
name VARCHAR2(50),
age NUMBER,
MEMBER FUNCTION say_hello RETURN VARCHAR2
);

CREATE OR REPLACE TYPE BODY person AS
MEMBER FUNCTION say_hello RETURN VARCHAR2 IS
BEGIN
RETURN 'Hai, namaku ' || name || ' dan usiaku ' || age || ' tahun.';
END;
END;

DECLARE
john person;
BEGIN
john := person('John Doe', 30);
DBMS_OUTPUT.PUT_LINE(john.say_hello());
END;

Dalam contoh ini, kita menciptakan jenis objek person dengan dua atribut (name dan age) dan sebuah metode (say_hello). Kemudian kita inisiasi objek john dan memanggil metode say_hellonya.

Metode Member

Metode member adalah seperti keterampilan khusus yang dimiliki oleh objek kita. Mari kita tambahkan metode lain ke objek person:

CREATE OR REPLACE TYPE person AS OBJECT (
name VARCHAR2(50),
age NUMBER,
MEMBER FUNCTION say_hello RETURN VARCHAR2,
MEMBER PROCEDURE have_birthday
);

CREATE OR REPLACE TYPE BODY person AS
MEMBER FUNCTION say_hello RETURN VARCHAR2 IS
BEGIN
RETURN 'Hai, namaku ' || name || ' dan usiaku ' || age || ' tahun.';
END;

MEMBER PROCEDURE have_birthday IS
BEGIN
age := age + 1;
DBMS_OUTPUT.PUT_LINE(name || ' sekarang berusia ' || age || ' tahun.');
END;
END;

DECLARE
john person;
BEGIN
john := person('John Doe', 30);
john.have_birthday();
DBMS_OUTPUT.PUT_LINE(john.say_hello());
END;

Di sini, kita menambahkan prosedur have_birthday yang meningkatkan umur orang sebesar 1. Itu seperti memberikan karakter Lego kemampuan untuk merayakan ulang tahun!

Menggunakan Metode MAP

Metode MAP digunakan untuk membandingkan objek. Itu seperti memberikan objek kita kartu identitas khusus yang membantu kita mengurutkan mereka. Mari kita lihat bagaimana itu bekerja:

CREATE OR REPLACE TYPE person AS OBJECT (
name VARCHAR2(50),
age NUMBER,
MAP MEMBER FUNCTION get_id RETURN NUMBER
);

CREATE OR REPLACE TYPE BODY person AS
MAP MEMBER FUNCTION get_id RETURN NUMBER IS
BEGIN
RETURN age;
END;
END;

DECLARE
john person := person('John Doe', 30);
jane person := person('Jane Smith', 25);
BEGIN
IF john > jane THEN
DBMS_OUTPUT.PUT_LINE(john.name || ' lebih tua');
ELSE
DBMS_OUTPUT.PUT_LINE(jane.name || ' lebih tua');
END IF;
END;

Dalam contoh ini, kita menggunakan age sebagai ID untuk perbandingan. Itu seperti membandingkan karakter Lego berdasarkan tingginya!

Menggunakan Metode ORDER

Metode ORDER adalah cara lain untuk membandingkan objek, tetapi memberikan fleksibilitas lebih banyak daripada metode MAP. Itu seperti memiliki hakim khusus untuk membandingkan karakter Lego kita:

CREATE OR REPLACE TYPE person AS OBJECT (
name VARCHAR2(50),
age NUMBER,
ORDER MEMBER FUNCTION compare(p person) RETURN INTEGER
);

CREATE OR REPLACE TYPE BODY person AS
ORDER MEMBER FUNCTION compare(p person) RETURN INTEGER IS
BEGIN
IF self.age < p.age THEN
RETURN -1;
ELSIF self.age > p.age THEN
RETURN 1;
ELSE
RETURN 0;
END IF;
END;
END;

DECLARE
john person := person('John Doe', 30);
jane person := person('Jane Smith', 30);
BEGIN
IF john > jane THEN
DBMS_OUTPUT.PUT_LINE(john.name || ' lebih tua');
ELSIF john < jane THEN
DBMS_OUTPUT.PUT_LINE(jane.name || ' lebih tua');
ELSE
DBMS_OUTPUT.PUT_LINE('Mereka berumur sama');
END IF;
END;

Metode ini memungkinkan kita mendefinisikan logika perbandingan khusus. Itu sangat berguna ketika kita ingin membandingkan objek berdasarkan beberapa atribut.

Pewarisan untuk Objek PL/SQL

Pewarisan adalah seperti menciptakan pohon keluarga untuk objek kita. Kita dapat menciptakan jenis objek baru yang mewarisi properti dan metode dari yang sudah ada. Mari kita lihat bagaimana:

CREATE OR REPLACE TYPE employee UNDER person (
job_title VARCHAR2(50),
salary NUMBER,
MEMBER FUNCTION get_annual_salary RETURN NUMBER
);

CREATE OR REPLACE TYPE BODY employee AS
MEMBER FUNCTION get_annual_salary RETURN NUMBER IS
BEGIN
RETURN salary * 12;
END;
END;

DECLARE
emp employee := employee('Alice Johnson', 35, 'Manager', 5000);
BEGIN
DBMS_OUTPUT.PUT_LINE(emp.say_hello());
DBMS_OUTPUT.PUT_LINE('Gaji tahunan: $' || emp.get_annual_salary());
END;

Di sini, employee adalah anak dari person, mewarisi atribut dan metode nya sedangkan menambahkan yang lain. Itu seperti menciptakan karakter Lego khusus yang dapat melakukan apa yang dapat dilakukan karakter biasa, plus lebih banyak lagi!

Objek Abstrak dalam PL/SQL

Objek abstrak adalah seperti rancangan untuk objek lain. Mereka mendefinisikan struktur tetapi tidak dapat diinisiasi secara langsung. Mari kita buat objek abstrak:

CREATE OR REPLACE TYPE shape AS OBJECT (
name VARCHAR2(50),
MEMBER FUNCTION get_area RETURN NUMBER
) NOT INSTANTIABLE NOT FINAL;

CREATE OR REPLACE TYPE circle UNDER shape (
radius NUMBER,
OVERRIDING MEMBER FUNCTION get_area RETURN NUMBER
);

CREATE OR REPLACE TYPE BODY circle AS
OVERRIDING MEMBER FUNCTION get_area RETURN NUMBER IS
BEGIN
RETURN 3.14159 * radius * radius;
END;
END;

DECLARE
c circle := circle('My Circle', 5);
BEGIN
DBMS_OUTPUT.PUT_LINE('Luas ' || c.name || ': ' || c.get_area());
END;

Dalam contoh ini, shape adalah objek abstrak yang mendefinisikan struktur umum untuk semua bentuk. circle adalah implementasi khusus dari shape. Itu seperti memiliki buku panduan Lego umum (objek abstrak) dan kemudian menciptakan model Lego khusus berdasarkan itu!

Dan itu saja! Kita telah meliputi dasar-dasar Pemrograman Berorientasi Objek dalam PL/SQL. Ingat, latihan membuat sempurna, jadi jangan khawatir untuk mencoba konsep ini. Selamat coding!

Metode Deskripsi
Konstruktor Membuat dan menginisiasi objek
Metode Member Mengembalikan nilai dan dapat digunakan dalam pernyataan SQL
Prosedur Member Melakukan aksi tetapi tidak mengembalikan nilai
Metode MAP Digunakan untuk membandingkan objek, berdasarkan nilai tunggal
Metode ORDER Digunakan untuk membandingkan objek, memungkinkan logika perbandingan khusus
Metode FINAL Tidak dapat dioverride dalam subjenis
Metode TIDAK INSTANSIABLE Harus dioverride dalam subjenis sebelum objek dapat diinisiasi

Credits: Image by storyset