1. Records
Kita
dapat menggunakan attribute %ROWTYPE untuk mendeklarasikan record yang
merepresentasikan baris data di dalam table atau baris data yang dihasilkan
dari sebuah cursor. Tetapi, dengan record yang didefinisikan oleh user
(user-defined record), kita dapat mendeklarasikan field-field milik kita.
Records
mengandung field-field bernama yang unik, yang mana dapat memiliki tipe-tipe
data yang berbeda. Bayangkan kita memiliki berbagai macam data employee,
seperti name, salary, dan hire date. Item-item ini tidak sama tetapi secara
logikal saling terkait. Record yang mengandung field untuk setiap item
mengijinkan kita untuk memperlakukan data sebagai unit logikal.
Perhatikan
contoh berikut ini:
DECLARE
TYPE
TimeRec IS RECORD (hours SMALLINT, minutes SMALLINT);
TYPE MeetingTyp IS RECORD (
date_held
DATE,
duration
TimeRec, -- nested record
location
VARCHAR2(20),
purpose
VARCHAR2(50));
Perhatikan
bahwa kita dapat menyarangkan records. Sehingga, sebuah record dapat menjadi
komponen dari record yang lain.
2.
Object Types
Di
dalam PL/SQL, object-oriented programming adalah berbasiskan pada object types.
Object type meng-enkapsulasi struktur data yang berhubungan dengan
functions dan procedures yang diperlukan untuk memanipulasi data tersebut.
Variable-variable yang membentuk struktur data disebut attributes.
Functions dan procedures yang mengkaraktersisasi kelakuan (behavior) dari
object type dinamakan methods.
Object
type menekan kompleksitas dengan memecah sistem yang besar ke dalam
entity-entity logikal. Hal ini mengijinkan kita untuk menciptakan
komponen-komponen software yang modular, maintainable, dan reusable.
Ketika
kita mendefinisikan object type menggunakan perintah CREATE TYPE (di dalam
SQL*Plus sebagai contoh), kita menciptakan template yang abstrak untuk sebuah
objek di dunia nyata (real-word object). Seperti pada contoh tentang rekening
bank berikut ini, template menentukan hanya attributes dan behaviors yang akan
dibutuhkan oleh objek di dalam lingkungan aplikasi.
CREATE
TYPE Bank_Account AS OBJECT (
acct_number
INTEGER(5),
balance
REAL,
status
VARCHAR2(10),
MEMBER
PROCEDURE open (amount IN REAL),
MEMBER
PROCEDURE verify_acct (num IN INTEGER),
MEMBER
PROCEDURE close (num IN INTEGER, amount OUT REAL),
MEMBER
PROCEDURE deposit (num IN INTEGER, amount IN REAL),
MEMBER
PROCEDURE withdraw (num IN INTEGER, amount IN REAL),
MEMBER
FUNCTION curr_bal (num IN INTEGER) RETURN REAL
);
Pada saat
runtime, ketika struktur data diisi dengan nilai, kita harus menciptakan
instance dari rekening bank yang abstrak. Kita dapat menciptakan instances
(disebut objects) sebanyak yang kita butuhkan. Setiap object memiliki
nomor, saldo dan status dari rekening bank sesungguhnya.
No comments:
Post a Comment