PL/SQL - Pengaturan Program Berorentasi Objek
Hai sana, para pemrogram yang sedang belajar! Hari ini, kita akan melakukan perjalanan yang menarik ke dalam dunia Program Berorentasi Objek (OOP) dalam PL/SQL. Jangan khawatir jika Anda baru saja memulai dalam pemrograman - saya akan menjadi panduan Anda yang ramah, menjelaskan segala sesuatu langkah demi langkah. Mari kita masuk ke dalamnya!
Apa Itu Program Berorentasi Objek?
Sebelum kita mulai, mari kita mengerti apa yang dimaksud dengan OOP. Bayangkan Anda membangun sebuah rumah dengan blok Lego. Setiap blok mewakili sebuah objek, dan Anda dapat menggabungkan blok-blok ini dalam berbagai cara untuk menciptakan struktur yang lebih kompleks. Itu sebenarnya apa yang dilakukan OOP dalam pemrograman - memungkinkan kita menciptakan dan mengoperasikan objek yang mewakili entitas dunia nyata.
Inisiasi Objek
Sekarang, mari kita belajar bagaimana menciptakan (atau "inisiasi") sebuah objek dalam PL/SQL. Pihakkan bahwa ini seperti membangkitkan sebuah karakter Lego kehidupan dalam dunia pemrograman 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 saya berusia ' || 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_hello
nya.
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 saya berusia ' || 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 oleh 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 berusia sama');
END IF;
END;
Metode ini memungkinkan kita mendefinisikan logika perbandingan khusus. Itu sangat berguna saat 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 properti dan metode nya sedangkan menambahkan sendiri. Itu seperti menciptakan karakter Lego khusus yang dapat melakukan semua yang karakter biasa dapat lakukan, plus lebih banyak lagi!
Objek Abstrak dalam PL/SQL
Objek abstrak adalah seperti rancangan untuk objek lain. Mereka menentukan struktur tetapi tidak dapat diinisiasi 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 manual Lego umum (objek abstrak) dan kemudian menciptakan model Lego spesifik berdasarkan itu!
Dan itu saja! Kita telah melihat dasar-dasar Program Berorentasi Objek dalam PL/SQL. Ingat, latihan membuat sempurna, jadi jangan takut untuk mencoba konsep-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 ditimpa dalam subjenis |
Metode TIDAK INSTANSIABLE | Harus ditimpa dalam subjenis sebelum objek dapat diinisiasi |
Credits: Image by storyset