Сиз атрибутга фақат унинг номи орқали (объект туридаги жойлашган жойи орқали эмас) мурожаат қилишингиз мумкин. Қуйидаги мисолда den атрибути қийматини denominator ўзгарувчига берилади. Сўнг numerator ўзгарувчидаги қиймат num Атрибутига берилади:
DECLARE
r Rational := Rational(NULL, NULL);
numerator INTEGER;
denominator INTEGER;
BEGIN
...
denominator := r.den;
r.num := numerator;
Ичма-ич жойлашган объект туридаги атрибутларга кириш имконияти мавжуд:
CREATE TYPE Address AS OBJECT (
street VARCHAR2(30),
city VARCHAR2(20),
state CHAR(2),
zip_code VARCHAR2(5)
);
CREATE TYPE Student AS OBJECT (
name VARCHAR2(20),
home_address Address,
phone_number VARCHAR2(10),
status VARCAHR2(10),
advisor_name VARCHAR2(20),
...
);'
Агар s Student кўринишдаги объект бўлса, унинг zip_code атрибутига қуйидагича мурожаат қилишингиз мумкин:
s.home_address.zip_code
Конструкторни чақириш
Функциялар каби конструктор ифоданинг ихтиёрий жойида чақирилиши мумкин:
DECLARE
r1 Rational := Rational(2, 3);
FUNCTION average (x Rational, y Rational) RETURN Rational IS
BEGIN
...
END;
BEGIN
r1 := average(Rational(3, 4), Rational(7, 11));
IF (Rational(5, 8) > r1) THEN
...
END IF;
END;
Агар конструкторга параметр узатсангиз, мос атрибутларга (n-чи параметр n-чи атрибутга қиймат узатади) бошланғич қиймат берилади:
DECLARE
r Rational;
BEGIN
r := Rational(5, 6); -- num 5, den 6 бўлади
-- now r is 5/6
Атрибутга номи бўйича ҳам қиймат бериш мумкин:
BEGIN
r := Rational(den => 6, num => 5); --
Методларни чақириш
Пакетлаштирилган қисмдастурлари каби методлар нуқта белигисидан фойдаланиб чақирилади. Қуйидаги мисолда, normalize методи чақирилади:
DECLARE
r Rational;
BEGIN
r := Rational(6, 8);
r.normalize;
DBMS_OUTPUT.PUT_LINE(r.num); -- prints 3
Қуйидаги мисол кўрсатадики методларни занжирсимон тарзда кетма-кет чақириш мумкин. Улар чапдан ўнгга қараб бажарилади. Аввал reciprocal member функцияси чақирилади, сўнг эса normalize member процедураси чақирилади.
DECLARE
r Rational := Rational(6, 8);
BEGIN
r.reciprocal().normalize;
DBMS_OUTPUT.PUT_LINE(r.num); -- prints 4
SQL жумлаларида параметрсиз методларни чақирсангиз, бўш параметрлар рўйхати талаб қилинади.
Методларни занжирсимон шаклдаги чақиришда процедурадан кейин методни чақириш тақиқ қилинади, чунки процедура ифоданинг қисми сифатида эмас, балки жумла тарзида чақирилади. Масалан қуйидаги мурожаат нотўғри бўлади:
r.normalize().reciprocal; -- нотўғри
Яна шуни та`кидлаш жоизки, агар сиз иккита функцияни кетма-кет занжирсимон тарзда чақирсангиз, биринчи функция иккинчи функция қабул қилиши мумкин бўлган қийматни қайтариши лозим.
Do'stlaringiz bilan baham: |