Downcasting ve Run-Time-Type-Identification (RTTI)

CorsaiR

Emektar
27 Ara 2005
1,228
18
Çekirdekten
Downcasting, upcasting tam zıt hareketi fakat upcasting gibi risksiz değil.Downcasting, upcasting tam zıt hareketi fakat upcasting gibi risksiz değil .
Daha özellikli bir tipden daha genel bir tipe dönüşüm her zaman güvenlidir.
Sonuçta genel tipdeki tüm arayüzler (metodlar), daha özellikli olan tipde mevcut olacaktır.

Downcasting'de ise daha genel bir tipden daha özellikle bir tipe geçiş söz konusudur. Bu geçiş olaylarını daha güvenli kılmak için instanceof anahtar kelimesi kullanılır.

Örnek :


// upcasting ve downcasting

class Xmodel
{
public **** sesAc() {
System.out.println("X model televizyon sesAc()");
}

public **** sesKapa() {
System.out.println("X model televizyon sesKapa()");
}

public **** kanalDegistir() {
System.out.println("X model televizyon kanalDegistir()");
}
}

class Ymodel extends Xmodel
{
public **** sesAc() {
System.out.println("Y model televizyon sesAc()");
}

public **** sesKapa() {
System.out.println("Y model televizyon sesKapa()");
}

public **** kanalDegistir() {
System.out.println("Y model televizyon kanalDegistir() , ZapLama Yapabiliyoruz Ley Ley");
}

public **** teleText() {
System.out.println("Y model televizyon teleText()");
}

}

public class Televizyon2
{
public static **** main(String args[]) {

Xmodel x_model_Kumanda = new Ymodel(); // Dogru , upcasting yapiyoruz

Ymodel y_model_Kumanda = null ;
if ( x_model_Kumanda instanceof Ymodel )
{
y_model_Kumanda = (Ymodel) x_model_Kumanda;
y_model_Kumanda.teleText();
}

// x_model_Kumanda.teleText() ; !! hata !! , bu kumandanin boyle bir dugmesi yok
}
}


Aşagıdaki satırlara dikkat edelim :

if ( x_model_Kumanda instanceof Ymodel ) {
y_model_Kumanda = (Ymodel) x_model_Kumanda;
y_model_Kumanda.teleText();
}


RTTI (run-time da tip kontrolü ) yaptık ve eğer x_model_Kumanda referansına Ymodel bir obje bağlıysa, if koşulu sağlanıyor ve gerekli işlemler yapılıyor. RTTI daha birçok faydası vardır, mesela run-time da hangi tip le uğraştığınızı kontol edebilirsiniz ve bu kontrol sonucunda gerekenleri yapabilirsiniz.

Bu örnekte belki instanceof'un önemini fazla vurgulayamadık ama downcasting yaparken programınızın run-time da patlama riskini sıfıra indirmek istiyorsanız bu kontrolü kullanmanız gerekir.
 
Üst

Turkhackteam.org internet sitesi 5651 sayılı kanun’un 2. maddesinin 1. fıkrasının m) bendi ile aynı kanunun 5. maddesi kapsamında "Yer Sağlayıcı" konumundadır. İçerikler ön onay olmaksızın tamamen kullanıcılar tarafından oluşturulmaktadır. Turkhackteam.org; Yer sağlayıcı olarak, kullanıcılar tarafından oluşturulan içeriği ya da hukuka aykırı paylaşımı kontrol etmekle ya da araştırmakla yükümlü değildir. Türkhackteam saldırı timleri Türk sitelerine hiçbir zararlı faaliyette bulunmaz. Türkhackteam üyelerinin yaptığı bireysel hack faaliyetlerinden Türkhackteam sorumlu değildir. Sitelerinize Türkhackteam ismi kullanılarak hack faaliyetinde bulunulursa, site-sunucu erişim loglarından bu faaliyeti gerçekleştiren ip adresini tespit edip diğer kanıtlarla birlikte savcılığa suç duyurusunda bulununuz.