Makale Özeti

Nesne grafikleri; birbirleri ile ilişkili bir dizi nesne arasındaki illişkileri dokümante eden bir yapıdır. Şimdiye kadar yazmış olduğum makalelerdeki serialization/deserialization işlemlerine tabi tutulan nesneler, birbirleri ile ilişkisi bulunmayan bir başka deyişle otonomik nesnelerdi. Bu türdeki nesneler üzerinde gerçekleştirilen serialization/deserialization işlemlerini anlamak oldukça basittir. Ancak gerçek hayattan alınarak, modellenen nesneler büyük olasılıkla bu kadar basit olmayacak ve aralarında çeşitli ilişkiler bulunacaktır.

Makale


Nesne grafikleri; birbirleri ile ilişkili bir dizi nesne arasındaki illişkileri dokümante eden bir yapıdır. Şimdiye kadar yazmış olduğum makalelerdeki serialization/deserialization işlemlerine tabi tutulan nesneler, birbirleri ile ilişkisi bulunmayan bir başka deyişle otonomik nesnelerdi. Bu türdeki nesneler üzerinde gerçekleştirilen serialization/deserialization işlemlerini anlamak oldukça basittir. Ancak gerçek hayattan alınarak, modellenen nesneler büyük olasılıkla bu kadar basit olmayacak ve aralarında çeşitli ilişkiler bulunacaktır.

Örneğin “Insan” sınıfına ait “Es” isimli özellik; söz konusu kişinin evli olduğu kişinin kim olduğu bilgisini içermektedir. Bu özelliğin türü; Insan sınıfıdır ve içerdiği değer; o kişinin evli olduğu insanı temsil eden nesneyi referanse etmektedir. Aşağıdaki şekilde, insan1 ve insan3 isimli nesneler arasında böyle bir ilişkinin varlığından söz edilebilir.

Bu türdeki nesne grafikleri üzerinde yapılan serialization/deserialization işlemlerinde, nesneleri tekil olarak tanımlayacak programatik araçların varlığına ihtiyaç duyulur. .NET Framework Class Library ‘de (System.Runtime.Serialization namespace’i içerisinde) bulunan ObjectIDGenerator isimli sınıf, bu tür durumlarda nesneler için tekil ve 64 bit’lik ID değerleri yaratmak için tasarlanmıştır. Bu sınıf, serialization işlemlerinde CLR tarafından kullanılır.

Örnek : Aşağıdaki uygulamada Insan sınıfı türündeki 3 nesne, bir ArrayList ‘e eklenmiş ve bu liste daha sonra SOAP serialization işlemine tabi tutulmuştur.

Class Insan
    Public isim As String
    Public soyisim As String
    Public Es As Insan = Nothing
    Public Sub New(ByVal name As String, ByVal sname As String)
        isim = name
        soyisim = sname 
    End Sub
End Class

Module Module1
    Public Sub SerializeToSOAP(obj As ArrayList)
        
Dim oFile As FileStream
         oFile = New FileStream("C:\Insanlar.xml", FileMode.Create)
         Dim oSoap As New SoapFormatter
         oSoap.Serialize(oFile, obj)
         oFile.Close() 
    End Sub 

    Sub Main()
        
Dim p1 As New Insan("Aykut", "Tasdelen")
         Dim p2 As New Insan("Hakan", "Tasbasli")
         Dim p3 As New Insan("Ulker", "Turkalp") 
 
        
p2.Es = p3
         p3.Es = p2
       
         Dim arr As New ArrayList
         arr.Add(p1) 
         arr.Add(p2) 
         arr.Add(p3)
         SerializeToSOAP(arr) 
     
End Sub
End Module

Bu örneğin çalıştırılması sonucunda elde edilen xml dosyasının içeriği şekilde görüldüğü gibidir;

< /FONT > < P >
Aykut
<item href="#ref-3"/>  
Hakan
<item href="#ref-4"/>
Ulker
<item href="#ref-5"/>

kısmında ArrayList’in herbir elemanı için, “#ref-X” gibi bir ID değeri olduğu görülmektedir. Bu ID değerleri, daha sonra ilişkilendirme için kullanılmaktadır. Örneğin “ref-4” olan kişinin (Hakan Tasbasli) eşi; “ref-5” olan (Ulker Tasbasli) isimli kişidir.

<a3:Insan id="ref-4" …… >
<isim id="ref-9">Hakan</isim>
<soyisim id="ref-10">Tasbasli</soyisim>
<Es href="#ref-5"/>
</a3:Insan>

Aynı şekilde “ref-5” olan kişinin (Ulker Tasbasli) eşi ise; “ref-4” olan (Hakan Tasbasli) isimli kişidir.

<a3:Insan id="ref-5" …… >
<isim id="ref-11">Ulker</isim>
<soyisim id="ref-12">Turkalp</soyisim>
<Es href="#ref-4"/>
</a3:Insan>

Aykut TAŞDELEN

aykuttasdelen@yazgelistir.com