Водич за Орацле ПЛ / СКЛ типове објеката са ПРИМЕРИМА

Преглед садржаја:

Anonim

Шта је тип објекта у ПЛ / СКЛ?

Објектно оријентисано програмирање је посебно погодно за изградњу компонената за поновну употребу и сложених апликација. Они су организовани око „објеката“, а не „радњи“, тј. Програми су дизајнирани да раде и комуницирају са целим објектом, а не са једном радњом. Овај концепт омогућава програмеру да попуни и манипулише детаљима на нивоу објектних ентитета.

Испод је приказан пример типа предмета у којем се банковни рачун сматра објектом. Атрибути објекта укључују ствари које садрже неке вредности атрибута, на пример на банковном рачуну; то је број рачуна, стање банке итд., док објектне методе описују ствари попут израчунавања каматне стопе, генерисања извода итд., што захтева довршење одређеног процеса.

У ПЛ / СКЛ објектно оријентисано програмирање заснива се на типовима објеката.

Тип објекта може представљати било који стварни свет. У овом поглављу ћемо разговарати о више типова објеката.

У овом упутству ћете научити,

  • Компоненте врста објеката
  • Направите објекат у Орацле-у
  • Иницијализација декларације типа објекта
  • Конструктори
  • Наслеђивање у типу објекта
  • Једнакост ПЛ / СКЛ објеката

Компоненте врста објеката

ПЛ / СКЛ тип објекта садржи углавном две компоненте.

  1. Атрибути
  2. Чланови / методе

Атрибути

Атрибути су колона или поље у којима се чувају подаци. Сваки атрибут ће се пресликати у тип података који дефинише тип обраде и складиштења за тај атрибут. Атрибут може бити било ког важећег ПЛ / СКЛ типа података или може бити другог типа објекта.

Чланови / методе

Чланови или методе су потпрограми који су дефинисани у типу објекта. Не користе се за чување података. Углавном се користе за дефинисање процеса унутар типа објекта. За примере потврде података пре попуњавања типа објекта. Они су декларисани у одељку типа објекта и дефинисани у одељку тела типа објекта типа објекта. Одељак тела у типу објекта је опциони део. Ако није присутан ниједан члан, тада тип објекта неће садржавати део тела.

Направите објекат у Орацле-у

Тип објекта не може се креирати на нивоу потпрограма, они се могу креирати само на нивоу шеме. Једном када је тип објекта дефинисан у шеми, онда се исти може користити у потпрограмима. Тип објекта се може креирати помоћу 'ЦРЕАТЕ ТИПЕ'. Тело типа може се креирати тек након креирања његовог типа објекта.

CREATE TYPE AS OBJECT(,… );/CREATE TYPE BODY AS OBJECT(MEMBER[PROCEDURE|FUNCTION]ISBEGINEND;‭… ‬);/

Објашњење синтаксе:

  • Горња синтакса приказује стварање 'ОБЈЕЦТ' са атрибутима и 'ОБЈЕЦТ-БОДИ' са методама.
  • Методе се такође могу преоптеретити у телу објекта.

Иницијализација декларације типа објекта

Као и друге компоненте у ПЛ / СКЛ-у, типове објеката такође је потребно декларисати пре него што их употријебите у програму.

Једном када се створи тип објекта, он се може користити у декларативном одељку потпрограма за декларисање променљиве тог типа објекта.

Кад год је било која променљива декларисана у потпрограму као тип објекта, током извођења креираће се нова инстанца типа објекта и ова новостворена инстанца може се упутити на име променљиве. На овај начин, један тип објекта може да ускладишти више вредности под различитим инстанцама.

DECLARE ;BEGIN… END;/

Објашњење синтаксе:

  • Горња синтакса приказује декларацију променљиве као тип објекта у декларативном одељку.

Једном када је променљива декларисана као тип објекта у потпрограму, она ће бити атомски нула, односно цео објекат сам по себи нула. Потребно га је иницијализовати вредностима да би се користиле у програму. Могу се иницијализовати помоћу конструктора.

Конструктори су имплицитна метода објекта која се може упутити под истим именом као и врста објекта. Доња синтакса приказује иницијализацију типа објекта.

DECLARE ;BEGIN:=();END;/

Објашњење синтаксе:

  • Горња синтакса приказује иницијализацију инстанце типа објекта нулл вредношћу.
  • Сада сам објекат није нулан јер је иницијализован, али атрибути унутар објекта биће нулти јер тим атрибутима нисмо доделили никакве вредности.

Конструктори

Конструктори су имплицитна метода објекта која се може упутити под истим именом као и врста објекта. Кад год се објект први пут упути, овај конструктор ће се позвати имплицитно.

Објекте такође можемо иницијализовати помоћу овог конструктора. Конструктор се може експлицитно дефинисати дефинисањем члана у телу типа објекта са истим именом типа објекта.

Пример 1 : У следећем примеру ћемо користити члана типа објекта за уметање записа у емп табелу са вредностима ('РРР', 1005, 20000, 1000) и ('ППП', 1006, 20000, 1001). Једном када се подаци убаце, приказаћемо исте помоћу члана типа објекта. Такође ћемо користити експлицитни конструктор за попуњавање ИД менаџера по дефаулту са вредношћу 1001 за други запис.

Извршићемо је у наредним корацима.

  • Корак 1:
    • Направите тип објекта
    • Тело типа објекта
  • Корак 2: Стварање анонимног блока за позивање креираног типа објекта кроз имплицитни конструктор за емп_но 1005.
  • Корак 3: Стварање анонимног блока за позивање креираног типа објекта путем експлицитног конструктора за емп_но 1006.

Корак 1) Направите тип објекта и тело типа објекта

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:/

Објашњење кода

  • Линија кода 1-9 : Стварање типа објекта 'емп_објецт' са 4 атрибута и 3 члана. Садржи дефиницију конструктора са само 3 параметра. (Стварни имплицитни конструктор садржаће број параметара једнак броју атрибута присутних у типу објекта)
  • Редак кода 10 : Креирање тела типа.
  • Линија кода 11-21 : Дефинисање експлицитног конструктора. Додељивање вредности параметра атрибутима и додељивање вредности за атрибут „менаџер“ са подразумеваном вредношћу „1001“.
  • Линија кода 22-26 : Дефинисање члана 'инсерт_рецордс' у који се вредности атрибута убацују у 'емп' табелу.
  • Редак кода 27-34 : Дефинисање члана 'дисплаи_рецордс' у којем се приказују вредности атрибута типа објекта.

Оутпут

Тип је створен

Тело типа створено

Корак 2) Стварање анонимног блока за позивање креираног типа објекта кроз имплицитни конструктор за емп_но 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;

Објашњење кода

  • Редак кода 37-45 : Уметање записа помоћу имплицитног конструктора. Позив конструктору садржи стварни број вредности атрибута.
  • Редак кода 38 : Декларише гуру_емп_дет као тип објекта 'емп_објецт'.
  • Линијска шифра 41 : Изјава 'гуру_емп_дет.дисплаи_рецордс' која се зове 'диплаи_рецордс' функција члана и приказују се вредности атрибута
  • Линија кода 42 : Изјава 'гуру_емп_дет.инсерт_рецордс' која се зове функција члана 'инсерт_рецордс' и вредности атрибута се убацују у табелу.

Оутпут

Име запосленог: РРР

Број запосленог: 1005

Плата: 20000

Менаџер: 1000

Корак 3) Стварање анонимног блока за позивање креираног типа објекта путем експлицитног конструктора за емп_но 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;/

Оутпут

Employee Name:PPPEmployee Number:1006Salary:20000Manager:1001

Објашњење кода:

  • Линија кода 46-53 : Уметање записа помоћу експлицитног конструктора.
  • Редак кода 46 : Декларише гуру_емп_дет као тип објекта 'емп_објецт'.
  • Редак кода 50 : Изјава 'гуру_емп_дет.дисплаи_рецордс' која се назива функција члана 'дисплаи_рецордс' и приказују се вредности атрибута
  • Редак 51 : Изјава 'гуру_емп_дет.инсерт_рецордс' која се зове функција члана 'инсерт_рецордс' и вредности атрибута се убацују у табелу.

Наслеђивање у типу објекта

Својство наслеђивања омогућава подтипу да приступи свим атрибутима и члановима типа супер објекта или надређеног типа објекта.

Тип под-објекта назива се наследни тип објекта, а тип супер-објекта се назива надређени тип објекта. Синтакса у наставку приказује како се креира родитељски и наслеђени тип објекта.

CREATE TYPE  AS OBJECT(,… )NOT FINAL;/

Објашњење синтаксе:

  • Горња синтакса приказује стварање типа СУПЕР.
CREATE TYPEUNDER(,.);/

Објашњење синтаксе:

  • Горња синтакса приказује стварање типа СУБ. Садржи све чланове и атрибуте из родитељског типа објекта.

Пример 1 : У доњем примеру, користићемо наследно својство за уметање записа са ИД-ом менаџера као '1002' за следећи запис ('РРР', 1007, 20000).

Извршићемо горњи програм у следећим корацима

  • Корак 1: Креирајте СУПЕР тип.
  • Корак 2: Креирајте СУБ тип и тело.
  • Корак 3: Стварање анонимног блока за позивање типа СУБ.

Корак 1) Направите СУПЕР тип или родитељски тип.

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;/

Објашњење кода:

  • Линија кода 1-9 : Стварање типа објекта 'емп_објецт' са 4 атрибута и 3 члана. Садржи дефиницију конструктора са само 3 параметра. Проглашено је као 'НИЈЕ КОНАЧНО', па је родитељски тип.

Корак 2) Направите СУБ тип под СУПЕР типом.

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;/

Објашњење кода:

  • Редак кода 10-13 : Стварање објекта суб_емп_објецт као наслеђеног типа са додатним једним атрибутом 'дефаулт_манагер' и декларацијом процедуре члана.
  • Редак 14 : Креирање тела за наслеђени тип објекта.
  • Линијска шифра 1 6 -21 : Дефинисање чланске процедуре која убацује записе у "емп" табелу са вредностима из типа објекта 'СУПЕР', осим вредности менаџера. За менаџерску вредност користи „дефаулт_манагер“ из типа „СУБ“.

Корак 3) Стварање анонимног блока за позивање типа СУБ

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;/

Објашњење кода:

  • Линија кода 25 : Декларисање „гуру_емп_дет“ као типа „суб_емп_објецт“.
  • Редак кода 27 : Иницијализација објекта имплицитним конструктором. Конструктор има 5 параметара (4 атрибута из ПАРЕНТ типа и 2 атрибута из СУБ типа). Последњи параметар (1002) дефинише вредност за атрибут дефаулт_манагер
  • Линија кода 28 : Позивање члана 'инсерт_дефаулт_мгр' да убаци записе са заданим ИД-ом менаџера прослеђеним у конструктору.

Једнакост ПЛ / СКЛ објеката

Инстанца објекта која припада истим објектима може се упоредити ради једнакости. За ово, морамо имати посебну методу у типу објекта која се зове 'ОРДЕР' метода.

Ова метода 'ОРДЕР' треба да буде функција која враћа нумерички тип. За улаз су потребна два параметра (први параметар: ид инстанце самообјекта, други параметар: ид друге инстанце објекта).

ИД две инстанце објекта се упоређује и резултат се враћа нумерички.

  • Позитивна вредност представља да је инстанца СЕЛФ објекта већа од друге инстанце.
  • Негативна вредност представља да је инстанца СЕЛФ објекта мања од друге инстанце.
  • Нула представља да је инстанца СЕЛФ објекта једнака другој инстанци.
  • Ако је било која инстанца нулл, тада ће ова функција вратити нулл.
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;… );/

Објашњење синтаксе:

  • Горња синтакса приказује функцију ОРДЕР која треба да буде укључена у тело типа ради провере једнакости.
  • Параметар за ову функцију треба да буде инстанца истог типа објекта.
  • Горња функција се може назвати „обј_инстанце_1.матцх (обј_инстанце_2)“ и овај израз ће вратити нумеричку вредност као што је приказано, где су обј_инстанце_1 и обј_инстанце_2 инстанца објецт_типе_наме.

Пример1 : У следећем примеру видећемо како да упоредимо два објекта. Направићемо две инстанце и упоредићемо атрибут „плата“ између њих. Урадићемо два корака.

  • Корак 1: Креирање типа и тела објекта.
  • Корак 2: Стварање анонимног блока за позивање упоредите инстанцу објекта.

Корак 1) Креирање типа и тела објекта.

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;/

Објашњење кода:

  • Редак 1-4: Стварање типа објекта 'емп_објецт_екуалити' са 1 атрибутом и 1 чланом.
  • Редак 6-16 : Дефинисање функције ОРДЕР која упоређује атрибут „плата“ САМО инстанце и типа инстанце параметра. Враћа се негативно ако је САМО плата мања или позитивна ако је САМО плаћа већа и 0 ако су плате једнаке.

Излаз кода:

Тип је створен

Корак 2) Стварање анонимног блока за позивање упоредите инстанцу објекта.

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;/

Оутпут

Salary of second instance is greater

Објашњење кода:

  • Редак кода 20 : Декларисање л_обј_1 типа емп_објецт_екуалити.
  • Линија кода 21 : Декларисање л_обј_2 типа емп_објецт_екуалити.
  • Линија кода 23 : Иницијализација л_обј_1 са вредношћу плате као '15000'
  • Линија кода 24 : Иницијализација л_обј_1 са вредношћу плате као '17000'
  • Линија кода 25-33 : Испишите поруку на основу броја за враћање из функције ОРДЕР.

Резиме

У овом поглављу видели смо тип објекта и њихова својства. Такође смо разговарали о конструкторима, члановима, атрибутима, наслеђивању и једнакости у ПЛ / СКЛ објектима.