PL / SQL'de Nesne Türü nedir?
Nesne Tabanlı Programlama, özellikle yeniden kullanılabilir bileşenler ve karmaşık uygulamalar oluşturmak için uygundur. "Eylemler" yerine "nesneler" etrafında düzenlenirler, yani programlar tek bir eylemden ziyade tüm nesneyle çalışmak ve etkileşimde bulunmak üzere tasarlanmıştır. Bu konsept, programcının ayrıntıları nesne varlıkları düzeyinde doldurmasına ve değiştirmesine olanak tanır.
Aşağıdaki resim, bir banka hesabının bir nesne varlığı olarak kabul edildiği nesne türünün bir örneğini göstermektedir. Nesne öznitelikleri, örneğin Banka Hesabı'nda bazı öznitelik değerlerini tutan şeyleri içerir; Hesap numarası, banka bakiyesi vb. iken nesne yöntemleri, belirli bir işlemin tamamlanmasını gerektiren faiz oranı hesaplama, banka ekstresi oluşturma vb. şeyleri açıklar.
PL / SQL'de nesne yönelimli programlama, nesne türlerine dayanır.
Bir nesne türü, herhangi bir gerçek dünyadaki varlığı temsil edebilir. Bu bölümde daha fazla nesne türünü tartışacağız.
Bu öğreticide - öğreneceksiniz,
- Nesne Türlerinin Bileşenleri
- Oracle'da Nesne Oluşturun
- Nesne Türünün Beyan Başlangıcı
- İnşaatçılar
- Nesne Türünde Kalıtım
- PL / SQL Nesnelerinin Eşitliği
Nesne Türlerinin Bileşenleri
PL / SQL nesne türü esas olarak iki bileşen içerir.
- Öznitellikler
- Üyeler / Yöntemler
Öznitellikler
Nitelikler, verilerin depolandığı sütun veya alandır. Her öznitelik, o özniteliğin işleme ve depolama türünü tanımlayan veri türüne eşlenecektir. Öznitelik, herhangi bir geçerli PL / SQL veri türünde olabilir veya başka bir nesne türünde olabilir.
Üyeler / Yöntemler
Üyeler veya Yöntemler, nesne türünde tanımlanan alt programlardır. Herhangi bir veriyi saklamak için kullanılmazlar. Esas olarak nesne türü içindeki süreci tanımlamak için kullanılırlar. Nesne türünü doldurmadan önce verileri doğrulayan örnekler için. Nesne türü bölümünde bildirilirler ve nesne türünün nesne türü gövde bölümünde tanımlanırlar. Nesne türündeki gövde bölümü isteğe bağlı bir parçadır. Hiçbir üye yoksa, bir nesne türü vücut parçası içermez.
Oracle'da Nesne Oluşturun
Alt program düzeyinde bir Nesne türü oluşturulamaz, Yalnızca şema düzeyinde oluşturulabilir. Nesne türü şemada tanımlandıktan sonra, aynı şey alt programlarda da kullanılabilir. Nesne türü, 'CREATE TYPE' kullanılarak oluşturulabilir. Yazı gövdesi yalnızca nesne türü oluşturulduktan sonra oluşturulabilir.
CREATE TYPEAS OBJECT( ,… );/CREATE TYPE BODY AS OBJECT(MEMBER[PROCEDURE|FUNCTION] IS BEGIN END;… );/
Sözdizimi Açıklaması:
- Yukarıdaki sözdizimi, özniteliklerle 'NESNE' ve yöntemlerle 'OBJECT-BODY' oluşturulmasını gösterir.
- Yöntemler ayrıca nesne gövdesinde aşırı yüklenebilir.
Nesne Türünün Beyan Başlangıcı
PL / SQL'deki diğer bileşenler gibi, nesne türlerinin de programda kullanılmadan önce bildirilmesi gerekir.
Nesne türü oluşturulduktan sonra, alt programın bildirim bölümünde bu nesne türünün bir değişkenini bildirmek için kullanılabilir.
Alt programda herhangi bir değişken nesne türü olarak bildirildiğinde, çalışma zamanında nesne türünün yeni bir örneği yaratılacaktır ve bu yeni oluşturulan örnek değişken adına atıfta bulunulabilir. Bu şekilde, tek bir nesne türü, farklı örnekler altında birden çok değeri depolayabilir.
DECLARE;BEGIN… END;/
Sözdizimi Açıklaması:
- Yukarıdaki sözdizimi, bildirimsel bölümde bir nesnenin türü olarak bir değişkenin bildirimini gösterir.
Değişken, bir alt programda bir nesne türü olarak bildirildiğinde, atomik olarak boş olacaktır, yani nesnenin tamamı boş olacaktır. Bunları programda kullanmak için değerlerle başlatılması gerekir. Yapıcılar kullanılarak başlatılabilirler.
Yapıcılar, nesne türünün adıyla aynı adla başvurulabilen bir nesnenin örtük yöntemidir. Aşağıdaki sözdizimi, nesne türünün başlatılmasını gösterir.
DECLARE;BEGIN := ();END;/
Sözdizimi Açıklaması:
- Yukarıdaki sözdizimi, nesne türü örneğinin boş bir değerle başlatılmasını gösterir.
- Şimdi, nesnenin kendisi başlatıldığı için boş değildir, ancak nesnenin içindeki nitelikler, bu niteliklere herhangi bir değer atamadığımız için boş olacaktır.
İnşaatçılar
Yapıcılar, nesne türünün adıyla aynı adla başvurulabilen bir nesnenin örtük yöntemidir. Nesne ilk kez başvurulduğunda, bu kurucu örtük olarak çağrılacaktır.
Bu yapıcıları kullanarak nesneleri de başlatabiliriz. Yapıcı, üye nesne türü gövdesinde nesne türü ile aynı adla tanımlanarak açıkça tanımlanabilir.
Örnek 1 : Aşağıdaki örnekte, kaydı emp tablosuna ('RRR', 1005, 20000, 1000) ve ('PPP', 1006, 20000, 1001) değerleriyle eklemek için nesne türü üyesini kullanacağız. Veriler eklendikten sonra, nesne türü üyesini kullanarak aynısını görüntüleyeceğiz. Ayrıca, yönetici kimliğini varsayılan olarak ikinci kayıt için 1001 değeriyle doldurmak için açık oluşturucuyu kullanacağız.
Bunu aşağıdaki adımlarda uygulayacağız.
- Aşama 1:
- Nesne türü oluştur
- Nesne türü gövdesi
- Adım 2: emp_no 1005 için örtük kurucu aracılığıyla oluşturulan nesne türünü çağırmak için anonim bir blok oluşturma.
- Adım 3: emp_no 1006 için açık kurucu aracılığıyla oluşturulan nesne türünü çağırmak için anonim bir blok oluşturma.
Adım 1) Nesne türü ve Nesne türü gövdesi oluşturun
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:/
Kod Açıklama
- Kod satırı 1-9 : 4 öznitelik ve 3 üye ile 'emp_object' nesne türünü oluşturma. Yalnızca 3 parametre ile kurucuların tanımını içerir. (Gerçek örtük kurucu, nesne türünde bulunan özniteliklerin sayısına eşit sayıda parametre içerecektir)
- Kod satırı 10 : Yazı gövdesini oluşturma.
- Kod satırı 11-21 : Açık kurucuyu tanımlama. Parametre değerini özniteliklere atamak ve 'yönetici' özniteliği için değeri '1001' varsayılan değeriyle atamak.
- Kod satırı 22-26 : Öznitelik değerlerinin "emp" tablosuna eklendiği üye "insert_records" un tanımlanması.
- Kod satırı 27-34 : Nesne türü özniteliklerinin değerlerinin görüntülendiği 'display_records' üyesini tanımlama.
Çıktı
Tür oluşturuldu
Tip gövdesi oluşturuldu
Adım 2) emp_no 1005 için örtük kurucu aracılığıyla oluşturulan nesne türünü çağırmak için anonim blok oluşturma
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;
Kod Açıklama
- Kod satırı 37-45 : Örtük oluşturucuyu kullanarak kayıtları ekleme. Yapıcıya çağrı, gerçek öznitelik değerlerini içerir.
- Kod satırı 38 : guru_emp_det'i 'emp_object' nesne türü olarak ilan eder.
- Kod satırı 41 : "guru_emp_det.display_records" ifadesi "diplay_records" üye işlevi olarak adlandırılır ve öznitelik değerleri görüntülenir
- Kod satırı 42 : "guru_emp_det.insert_records" ifadesi "insert_records" üye işlevi olarak adlandırılır ve öznitelik değerleri tabloya eklenir.
Çıktı
Çalışan Adı: RRR
Çalışan Numarası: 1005
Maaş: 20000
Yönetici: 1000
Adım 3) emp_no 1006 için açık kurucu aracılığıyla oluşturulan nesne türünü çağırmak için anonim blok oluşturma
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;/
Çıktı
Employee Name:PPPEmployee Number:1006Salary:20000Manager:1001
Kod Açıklaması:
- Kod satırı 46-53 : Açık oluşturucuyu kullanarak kayıtları ekleme.
- Kod satırı 46 : guru_emp_det'i 'emp_object' nesne türü olarak bildirir.
- Kod satırı 50 : "guru_emp_det.display_records" ifadesi "display_records" üye işlevi olarak adlandırılır ve öznitelik değerleri görüntülenir
- Kod satırı 51 : "guru_emp_det.insert_records" ifadesi "insert_records" üye işlevi olarak adlandırılır ve öznitelik değerleri tabloya eklenir.
Nesne Türünde Kalıtım
Devralma özelliği, alt nesne türünün, üst nesne türünün veya ana nesne türünün tüm özniteliğine ve üyelerine erişmesine izin verir.
Alt nesne türü, miras alınan nesne türü olarak adlandırılır ve süper nesne türü, üst nesne türü olarak adlandırılır. Aşağıdaki sözdizimi, üst ve devralınan nesne türünün nasıl oluşturulacağını gösterir.
CREATE TYPEAS OBJECT( ,… )NOT FINAL;/
Sözdizimi Açıklaması:
- Yukarıdaki sözdizimi, SUPER türünün oluşturulmasını gösterir.
CREATE TYPEUNDER ( ,.);/
Sözdizimi Açıklaması:
- Yukarıdaki sözdizimi, SUB türünün oluşturulmasını gösterir. Üst nesne türünden tüm üyeleri ve öznitelikleri içerir.
Örnek1: Aşağıdaki örnekte, yönetici kimliğine sahip kaydı aşağıdaki kayıt için '1002' olarak eklemek için miras özelliğini kullanacağız ('RRR', 1007, 20000).
Yukarıdaki programı aşağıdaki adımlarda çalıştıracağız.
- Adım 1: SÜPER tip oluşturun.
- Adım 2: SUB tipi ve gövde oluşturun.
- Adım3: SUB türünü çağırmak için anonim bir blok oluşturma.
Adım 1) SÜPER tip veya Üst tip oluşturun.
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;/
Kod Açıklaması:
- Kod satırı 1-9 : 4 öznitelik ve 3 üye ile 'emp_object' nesne türünü oluşturma. Yalnızca 3 parametre ile kurucuların tanımını içerir. "SON DEĞİL" olarak beyan edildiğinden ebeveyn türüdür.
Adım 2) SUPER türü altında SUB türü oluşturun.
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;/
Kod Açıklaması:
- Kod satırı 10-13 : sub_emp_object'i ek bir özellik 'default_manager' ve üye prosedür bildirimi ile devralınan tür olarak oluşturma.
- Kod satırı 14 : Devralınan nesne türü için gövde oluşturma.
- Kod satırı 1 6 -21 : Yönetici değeri haricinde 'SUPER' nesne türünden değerlerle kayıtları "emp" tablosuna ekleyen üye prosedürünün tanımlanması. Yönetici değeri için, 'SUB' türünden 'default_manager' kullanıyor.
Adım 3) SUB türünü çağırmak için anonim blok oluşturma
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;/
Kod Açıklaması:
- Kod satırı 25 : "guru_emp_det" i "sub_emp_object" türü olarak bildirme.
- Kod satırı 27 : Nesneyi örtük kurucu ile başlatma. Yapıcı, 5 parametreye sahiptir (PARENT türünden 4 öznitelik ve SUB türünden 2 öznitelik). Son parametre (1002), default_manager özniteliğinin değerini tanımlar
- Kod satırı 28 : Yapıcıda geçirilen varsayılan yönetici kimliğine sahip kayıtları eklemek için üyeye 'insert_default_mgr' çağrısı.
PL / SQL Nesnelerinin Eşitliği
Aynı nesnelere ait olan nesne örneği eşitlik açısından karşılaştırılabilir. Bunun için 'SİPARİŞ' yöntemi adı verilen nesne türünde özel yönteme sahip olmamız gerekir.
Bu 'SİPARİŞ' yöntemi, sayısal tür döndüren işlev olmalıdır. Giriş olarak iki parametre alır (birinci parametre: kendiliğinden nesne örneğinin kimliği, ikinci parametre: başka bir nesne örneğinin kimliği).
İki nesne örneğinin kimliği karşılaştırılır ve sonuç sayısal olarak döndürülür.
- Pozitif değer, SELF nesne örneğinin başka bir örnekten daha büyük olduğunu gösterir.
- Negatif değer, SELF nesnesi örneğinin başka bir örnekten daha düşük olduğunu gösterir.
- Sıfır, SELF nesnesi örneğinin başka bir örneğe eşit olduğunu gösterir.
- Örneklerden herhangi biri boşsa, bu işlev boş döndürür.
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;… );/
Sözdizimi Açıklaması:
- Yukarıdaki sözdizimi, eşitlik denetimi için tip gövdesine dahil edilmesi gereken SİPARİŞ işlevini gösterir.
- Bu işlevin parametresi, aynı nesne türünün bir örneği olmalıdır.
- Yukarıdaki işlev "obj_instance_1.match (obj_instance_2)" olarak adlandırılabilir ve bu ifade, gösterildiği gibi sayısal değeri döndürür; burada obj_instance_1 ve obj_instance_2, object_type_name örneğidir.
Örnek1 : Aşağıdaki örnekte iki nesneyi nasıl karşılaştıracağımızı göreceğiz. İki örnek oluşturacağız ve bunlar arasında 'maaş' niteliğini karşılaştıracağız. İki adımda yapacağız.
- Adım 1: Nesne türünü ve gövdesini oluşturma.
- Adım 2: Nesne örneğini karşılaştırmak için anonim bloğun oluşturulması.
Adım 1) Nesne türünü ve gövdesini oluşturma.
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;/
Kod Açıklaması:
- Kod satırı 1-4: 1 öznitelik ve 1 üye ile 'emp_object_equality' nesne türünü oluşturma.
- Kod satırı 6-16 : SELF örneğinin 'maaş' özniteliğini ve parametre örneği türünü karşılaştıran SİPARİŞ işlevini tanımlama. SELF maaşı daha düşükse negatif, SELF maaşı daha fazlaysa pozitif, maaşlar eşitse 0 döndürür.
Kod Çıkışı:
Tür oluşturuldu
Adım 2) Nesne örneğini karşılaştırmak için anonim bloğun oluşturulması.
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;/
Çıktı
Salary of second instance is greater
Kod Açıklaması:
- Kod satırı 20 : emp_object_equality türünün l_obj_1 değerini bildirme.
- Kod satırı 21 : emp_object_equality türünün l_obj_2'sinin bildirilmesi.
- Kod satırı 23 : l_obj_1 maaş değeri '15000' olarak başlatılıyor
- Kod satırı 24 : l_obj_1'i maaş değeri "17000" olarak başlatılıyor
- Kod satırı 25-33 : Mesajı SİPARİŞ işlevinden gelen dönüş numarasına göre yazdırın.
Özet
Bu bölümde nesne türünü ve özelliklerini gördük. Ayrıca PL / SQL nesnelerinde Oluşturucular, Üyeler, Nitelikler, Kalıtım ve Eşitlik konularını da tartıştık.