Apa Jenis Objek di PL / SQL?
Pemrograman Berorientasi Objek sangat cocok untuk membangun komponen yang dapat digunakan kembali dan aplikasi kompleks. Mereka diatur di sekitar "objek" daripada "tindakan" yaitu program dirancang untuk bekerja dan berinteraksi dengan seluruh objek daripada tindakan tunggal. Konsep ini memungkinkan pemrogram untuk mengisi dan memanipulasi detail pada tingkat entitas objek.
Gambar di bawah ini menggambarkan contoh tipe objek di mana rekening bank dianggap sebagai entitas objek. Atribut obyek meliputi benda-benda yang menyimpan beberapa nilai atribut, misalnya pada Rekening Bank; itu adalah nomor rekening, saldo bank, dll. sedangkan metode objek menggambarkan hal-hal seperti menghitung suku bunga, membuat laporan bank, dll. Yang memerlukan proses tertentu untuk diselesaikan.
Dalam PL / SQL pemrograman berorientasi objek didasarkan pada tipe objek.
Tipe objek dapat mewakili entitas dunia nyata apa pun. Kita akan membahas lebih banyak tipe objek di bab ini.
Dalam tutorial ini - Anda akan belajar,
- Komponen Jenis Objek
- Buat Objek di Oracle
- Deklarasi Inisialisasi Jenis Objek
- Konstruktor
- Warisan dalam Tipe Objek
- Kesetaraan Objek PL / SQL
Komponen Jenis Objek
Jenis objek PL / SQL terutama berisi dua komponen.
- Atribut
- Anggota / Metode
Atribut
Atribut adalah kolom atau bidang tempat data disimpan. Setiap atribut akan dipetakan ke tipe data yang mendefinisikan tipe pemrosesan dan penyimpanan untuk atribut itu. Atribut bisa dari tipe data PL / SQL yang valid, atau bisa dari tipe objek lain.
Anggota / Metode
Anggota atau Metode adalah subprogram yang ditentukan dalam tipe objek. Mereka tidak digunakan untuk menyimpan data apa pun. Mereka terutama digunakan untuk mendefinisikan proses di dalam tipe objek. Untuk contoh memvalidasi data sebelum mengisi tipe objek. Mereka dideklarasikan di bagian tipe objek dan didefinisikan di bagian badan tipe objek dari tipe objek. Bagian tubuh dalam tipe objek adalah bagian opsional. Jika tidak ada anggota yang hadir, maka tipe objek tidak akan berisi bagian tubuh.
Buat Objek di Oracle
Jenis objek tidak dapat dibuat di tingkat subprogram, mereka hanya dapat dibuat di tingkat skema. Setelah tipe objek ditentukan dalam skema, hal yang sama dapat digunakan dalam subprogram. Jenis objek dapat dibuat menggunakan 'CREATE TYPE'. Badan tipe hanya dapat dibuat setelah membuat tipe objeknya.
CREATE TYPEAS OBJECT( ,… );/CREATE TYPE BODY AS OBJECT(MEMBER[PROCEDURE|FUNCTION] IS BEGIN END;… );/
Penjelasan Sintaks:
- Sintaks di atas menunjukkan pembuatan 'OBJECT' dengan atribut dan 'OBJECT-BODY' dengan metode.
- Metode juga bisa kelebihan beban di badan objek.
Deklarasi Inisialisasi Jenis Objek
Seperti komponen lain di PL / SQL, tipe objek juga perlu dideklarasikan sebelum digunakan dalam program.
Setelah tipe objek dibuat, dapat digunakan di bagian deklaratif subprogram untuk mendeklarasikan variabel dari tipe objek tersebut.
Setiap kali variabel apa pun dideklarasikan dalam subprogram sebagai tipe objek, pada saat berjalan sebuah contoh baru dari tipe objek akan dibuat, dan contoh yang baru dibuat ini dapat dirujuk ke nama variabel. Dengan cara ini, satu tipe objek dapat menyimpan banyak nilai di bawah contoh yang berbeda.
DECLARE;BEGIN… END;/
Penjelasan Sintaks:
- Sintaks di atas menunjukkan deklarasi variabel sebagai tipe objek di bagian deklaratif.
Setelah variabel dideklarasikan sebagai tipe objek dalam subprogram, itu akan menjadi nol secara atom, yaitu seluruh objek itu sendiri nol. Ini perlu diinisialisasi dengan nilai untuk menggunakannya dalam program. Mereka dapat diinisialisasi menggunakan konstruktor.
Konstruktor adalah metode implisit dari sebuah objek yang dapat dirujuk dengan nama yang sama dengan tipe objek. Sintaks di bawah ini menunjukkan inisialisasi tipe objek.
DECLARE;BEGIN := ();END;/
Penjelasan Sintaks:
- Sintaks di atas menunjukkan inisialisasi instance tipe objek dengan nilai null.
- Sekarang objek itu sendiri tidak null seperti yang telah diinisialisasi, tetapi atribut di dalam objek akan menjadi null karena kita belum menetapkan nilai apa pun ke atribut ini.
Konstruktor
Konstruktor adalah metode implisit dari sebuah objek yang dapat dirujuk dengan nama yang sama dengan tipe objek. Setiap kali objek dirujuk untuk pertama kali, konstruktor ini akan dipanggil secara implisit.
Kita juga bisa menginisialisasi objek menggunakan konstruktor ini. Konstruktor dapat didefinisikan secara eksplisit dengan mendefinisikan anggota dalam tipe objek tubuh dengan nama yang sama dari tipe objek.
Contoh 1 : Dalam contoh berikut kita akan menggunakan anggota tipe objek untuk memasukkan record ke dalam tabel emp dengan nilai ('RRR', 1005, 20000, 1000) dan ('PPP', 1006, 20000, 1001). Setelah data dimasukkan, kita akan menampilkan yang sama dengan menggunakan tipe objek anggota. Kami juga akan menggunakan konstruktor eksplisit untuk mengisi id manajer secara default dengan nilai 1001 untuk rekaman kedua.
Kami akan menjalankannya dalam langkah-langkah di bawah ini.
- Langkah 1:
- Buat tipe Objek
- Tubuh tipe objek
- Langkah2: Membuat blok anonim untuk memanggil jenis objek yang dibuat melalui konstruktor implisit untuk emp_no 1005.
- Step3: Membuat blok anonim untuk memanggil jenis objek yang dibuat melalui konstruktor eksplisit untuk emp_no 1006.
Langkah 1) Buat tipe objek dan tipe objek tubuh
CREATE TYPE emp_object AS OBJECT(emp_no NUMBER,emp_name VARCHAR2(50),salary NUMBER,manager NUMBER,CONSTRUCTOR FUNCTION emp_object(p_emp_no NUMBER, p_emp_name VARCHAR2,p_salary NUMBER) RETURN SELF AS RESULT),MEMBER PROCEDURE insert_records,MEMBER PROCEDURE display_records);/
CREATE OR REPLACE TYPE BODY emp_object ASCONSTRUCTOR FUNCTION emp_object(p_emp_no NUMBER,p_emp_name VARCHAR2,p_salary NUMBER)RETURN SELF AS RESULTISBEGINDbms_output.put_line(’Constructor fired… ');SELF.emp_no:=p_emp_no;|SELF.emp_name:=p_emp_name;SELF.salary:=p_salary;SELF.managerial:=1001;RETURN;END:MEMBER PROCEDURE insert_recordsISBEGININSERT INTO emp VALUES(emp_noemp_name,salary,manager);ENDMEMBER PROCEDURE display_recordsISBEGINDbms_output.put_line('Employee Name:'||emp_name);Dbms_output.put_line('Employee Number:'||emp_no);Dbms_output.put_line('Salary':'||salary);Dbms_output.put_line('Manager:'||manager);END:END:/
Penjelasan Kode
- Baris kode 1-9 : Membuat tipe objek 'emp_object' dengan 4 atribut dan 3 anggota. Ini berisi definisi konstruktor dengan hanya 3 parameter. (Konstruktor implisit aktual akan berisi jumlah parameter yang sama dengan jumlah atribut yang ada dalam tipe objek)
- Baris kode 10 : Membuat tubuh tipe.
- Baris kode 11-21 : Mendefinisikan konstruktor eksplisit. Menetapkan nilai parameter ke atribut dan menetapkan nilai untuk atribut 'manager' dengan nilai default '1001'.
- Baris kode 22-26 : Mendefinisikan 'insert_records' anggota di mana nilai atribut dimasukkan ke dalam tabel 'emp'.
- Baris kode 27-34 : Mendefinisikan 'display_records' anggota yang menampilkan nilai atribut tipe objek.
Keluaran
Jenis dibuat
Jenis tubuh dibuat
Langkah 2) Membuat blok anonim untuk memanggil tipe objek yang dibuat melalui konstruktor implisit untuk emp_no 1005
DECLAREguru_emp_det emp_object;BEGINguru_emp_det:=emp_object(1005,’RRR',20000,1000);guru_emp_det.display_records;guru_emp_det.insert_records;COMMIT;END;
Penjelasan Kode
- Baris kode 37-45 : Memasukkan catatan menggunakan konstruktor implisit. Panggilan ke konstruktor berisi jumlah nilai atribut yang sebenarnya.
- Baris kode 38 : Mendeklarasikan guru_emp_det sebagai tipe objek 'emp_object'.
- Baris kode 41 : Pernyataan 'guru_emp_det.display_records' memanggil fungsi anggota 'diplay_records' dan nilai atribut ditampilkan
- Baris kode 42 : Pernyataan 'guru_emp_det.insert_records' memanggil fungsi anggota 'insert_records' dan nilai atribut dimasukkan ke dalam tabel.
Keluaran
Nama Karyawan: RRR
Nomor Karyawan: 1005
Gaji: 20000
Manajer: 1000
Langkah 3) Membuat blok anonim untuk memanggil tipe objek yang dibuat melalui konstruktor eksplisit untuk emp_no 1006
DECLAREguru_emp_det emp_object;BEGINguru_emp_det:=emp_object(1006,'PPP',20000);guru_emp_det.display_records;guru_emp_det.insert_records;COMMIT;END;/
Keluaran
Employee Name:PPPEmployee Number:1006Salary:20000Manager:1001
Penjelasan Kode:
- Baris kode 46-53 : Memasukkan catatan menggunakan konstruktor eksplisit.
- Baris kode 46 : Menyatakan guru_emp_det sebagai tipe objek 'emp_object'.
- Baris kode 50 : Pernyataan 'guru_emp_det.display_records' memanggil fungsi anggota 'display_records' dan nilai atribut ditampilkan
- Baris kode 51 : Pernyataan 'guru_emp_det.insert_records' memanggil fungsi anggota 'insert_records' dan nilai atribut dimasukkan ke dalam tabel.
Warisan dalam Tipe Objek
Properti pewarisan memungkinkan tipe sub-objek untuk mengakses semua atribut dan anggota tipe objek super atau tipe objek induk.
Tipe sub-objek disebut tipe objek yang diwarisi, dan tipe objek super disebut tipe objek induk. Sintaks di bawah ini menunjukkan cara membuat induk dan tipe objek yang diwarisi.
CREATE TYPEAS OBJECT( ,… )NOT FINAL;/
Penjelasan Sintaks:
- Sintaks di atas menunjukkan pembuatan tipe SUPER.
CREATE TYPEUNDER ( ,.);/
Penjelasan Sintaks:
- Sintaks di atas menunjukkan pembuatan tipe SUB. Ini berisi semua anggota dan atribut dari tipe objek induk.
Example1: Dalam contoh di bawah ini, kita akan menggunakan properti inheritance untuk memasukkan record dengan id manajer sebagai '1002' untuk record berikut ('RRR', 1007, 20000).
Kami akan menjalankan program di atas dalam langkah-langkah berikut
- Langkah 1: Buat tipe SUPER.
- Langkah2: Buat jenis dan isi SUB.
- Step3: Membuat blok anonim untuk memanggil tipe SUB.
Langkah 1) Buat tipe SUPER atau tipe Induk.
CREATE TYPE emp_object AS OBJECT(emp_no NUMBER,emp_name VARCHAR2(50),salary NUMBER,manager NUMBER,CONSTRUCTOR FUNCTION emp_object(p_emp_no NUMBER,p_emp_name VARCHAR2(50),p_salary NUMBER)RETURN SELF AS RESULT),MEMBER PROCEDURE insert_records,MEMBER PROCEDURE display_records)NOT FINAL;/
Penjelasan Kode:
- Baris kode 1-9 : Membuat tipe objek 'emp_object' dengan 4 atribut dan 3 anggota. Ini berisi definisi konstruktor dengan hanya 3 parameter. Ini telah dideklarasikan sebagai 'NOT FINAL' jadi ini adalah tipe induk.
Langkah 2) Buat tipe SUB di bawah tipe SUPER.
CREATE OR REPLACE TYPE sub_emp_objectUNDER emp_object(default_manager NUMBER,MEMBER PROCEDURE insert_default_mgr);/CREATE OR REPLACE TYPE BODY sub_emp_objectASMEMBER PROCEDURE insert_default_mgrISBEGININSERT INTO empVALUES(emp_no,emp_name:salary,manager):END;END;/
Penjelasan Kode:
- Baris kode 10-13 : Membuat sub_emp_object sebagai tipe yang diwariskan dengan satu atribut tambahan 'default_manager' dan deklarasi prosedur anggota.
- Baris kode 14 : Membuat tubuh untuk tipe objek yang diwarisi.
- Baris kode 1 6 -21 : Mendefinisikan prosedur anggota yang memasukkan catatan ke dalam tabel "emp" dengan nilai dari tipe objek 'SUPER', kecuali untuk nilai manajer. Untuk nilai manajer, ini menggunakan jenis 'default_manager' dari 'SUB'.
Langkah 3) Membuat blok anonim untuk memanggil tipe SUB
DECLAREguru_emp_det sub_emp_object;BEGINguru_emp_det:= sub_emp_object(1007,'RRR',20000,1000,1002);guru_emp_det.insert_default_mgr;COMMIT;END;/
Penjelasan Kode:
- Baris kode 25 : Mendeklarasikan 'guru_emp_det' sebagai jenis 'sub_emp_object'.
- Baris kode 27 : Menginisialisasi objek dengan konstruktor implisit. Konstruktor memiliki 5 parameter (4 atribut dari tipe PARENT dan 2 atribut dari tipe SUB). Parameter terakhir (1002) mendefinisikan nilai untuk atribut default_manager
- Baris kode 28 : Memanggil anggota 'insert_default_mgr' untuk memasukkan catatan dengan id manajer default yang diteruskan dalam konstruktor.
Kesetaraan Objek PL / SQL
Contoh objek milik objek yang sama dapat dibandingkan untuk persamaan. Untuk ini, kita perlu memiliki metode khusus dalam tipe objek yang disebut metode 'ORDER'.
Metode 'ORDER' ini harus menjadi fungsi yang mengembalikan tipe numerik. Dibutuhkan dua parameter sebagai input, (parameter pertama: id dari instance self-object, parameter kedua: id dari instance objek lain).
Id dari dua instance objek dibandingkan, dan hasilnya dikembalikan dalam bentuk numerik.
- Nilai positif menunjukkan bahwa contoh objek SELF lebih besar dari contoh lainnya.
- Nilai negatif menunjukkan bahwa contoh objek SELF lebih rendah dari contoh lainnya.
- Nol menyatakan bahwa instance objek SELF sama dengan instance lainnya.
- Jika salah satu instance bernilai null, maka fungsi ini akan mengembalikan null.
CREATE TYPE BODYAS OBJECT(ORDER MEMBER FUNCTION match( object_type_name_ 1)RETURN INTEGER IS BEGINIF parameter THENRETURN -1; --any negative number will doELSIF id>c.id THENRETURN 1; -any positive number will doELSERETURN 0;END IF;END;… );/
Penjelasan Sintaks:
- Sintaks di atas menunjukkan fungsi ORDER yang perlu dimasukkan dalam badan tipe untuk pemeriksaan kesetaraan.
- Parameter untuk fungsi ini harus berupa turunan dari tipe objek yang sama.
- Fungsi di atas dapat disebut sebagai "obj_instance_1.match (obj_instance_2)" dan ekspresi ini akan mengembalikan nilai numerik seperti yang ditunjukkan, di mana obj_instance_1 dan obj_instance_2 adalah turunan dari object_type_name.
Example1 : Dalam contoh berikut kita akan melihat bagaimana membandingkan dua objek. Kami akan membuat dua contoh dan kami akan membandingkan atribut 'gaji' di antara mereka. Kami akan melakukan dua langkah.
- Langkah 1: Membuat tipe dan badan Objek.
- Langkah 2: Membuat blok anonim untuk memanggil membandingkan contoh objek.
Langkah 1) Membuat tipe dan tubuh Objek.
CREATE TYPE emp_object_equality AS OBJECT(salary NUMBER,ORDER MEMBER FUNCTION equals(c emp_object_equality)RETURN INTEGER);/
CREATE TYPE BODY emp_object_equality ASORDER MEMBER FUNCTION equals(c emp_object_equality)RETURN INTEGERISBEGIN IF salaryc.salaryTHEN RETURN 1;ELSERETURN 0;END IF: END;END;/
Penjelasan Kode:
- Baris kode 1-4: Membuat tipe objek 'emp_object_equality' dengan 1 atribut dan 1 anggota.
- Baris kode 6-16 : Mendefinisikan fungsi ORDER yang membandingkan atribut 'gaji' dari contoh SELF dan tipe contoh parameter. Ini menghasilkan negatif jika gaji DIRI lebih rendah atau positif jika gaji DIRI lebih besar dan 0 jika gaji sama.
Keluaran Kode:
Jenis dibuat
Langkah 2) Membuat blok anonim untuk memanggil membandingkan contoh objek.
DECLAREl_obj_l emp_object_equality;l_obj_2 emp_object_equality;BEGINl_obj_l:=emp_object_equality(15000);l_obj_2:=emp_object_equality(17000);IF l_obj_1.equalS(l_obj_2)>0THENDbms_output.put_line(’Salary of first instance is greater’):ELSIF l_obj_l.equalS(l_obj_2)<0THENDbms_output.put_line(’Salary of second instance is greater’);ELSEDbms_output.put_line(’Salaries are equal’);END IF;END;/
Keluaran
Salary of second instance is greater
Penjelasan Kode:
- Baris kode 20 : Mendeklarasikan l_obj_1 dari tipe emp_object_equality.
- Baris kode 21 : Mendeklarasikan l_obj_2 dari tipe emp_object_equality.
- Baris kode 23 : Menginisialisasi l_obj_1 dengan nilai gaji sebagai '15000'
- Baris kode 24 : Menginisialisasi l_obj_1 dengan nilai gaji sebagai '17000'
- Baris kode 25-33 : Cetak pesan berdasarkan nomor pengembalian dari fungsi ORDER.
Ringkasan
Dalam bab ini, kita telah melihat tipe objek dan propertinya. Kami juga telah membahas tentang Konstruktor, Anggota, Atribut, Warisan dan Kesetaraan dalam objek PL / SQL.