Merhabalar sizlere bir şey danışmak istiyorum uzun süredir nesne yönelimli programlama üzerinde çalışıyorum çok biçimlilik konusunda override ve virtual kavramlarını çalışırken bir sitede şu soruyla karşılaştım virtual yazmadan metotlar override edilebiliyor virtual kullanmamızın yararları nedir gibi? Aşağıdaki örneğide hazırladım gerçektende virtual kullanmadan oluyor peki niye kullanıyoruz.. Çok biçimliliği kavramak için neler tavsiye edersiniz?

Kodları C# ta yazdım..

class Program
{
    public static void Main(string[] args)
    {
        Telefon tel = new Telefon();
        Console.WriteLine(tel.cal());          //ekrana zır zır yazdırdık..

        CepTelefon cepTel = new CepTelefon();
        Console.WriteLine(cepTel.cal());       //ekrana ding dong yazdırdık..

        Console.ReadLine();
    }
}

public class CepTelefon : Telefon
{
    public string cal()
    {
        return "ding dong";
    }
}

public class Telefon
{
    public string cal()
    {
        return "zır zır";
    }
}

soruldu: 24 Şub '12, 07:21

mhmt's gravatar image

mhmt
60448
cevap kabul oranı: 0%

değiştirildi: 11 Haz '12, 05:21

CemIkta's gravatar image

CemIkta ♦
19.9k29125190


Bir yazılım projesinde çalıştığınızı farzedersek bir takım ile birlikte yazılımı geliştiriyor olacaksınız ve sizin yazdığınız kodu diğer arkadaşınızın da rahatlıkla anlaması gerekiyor. İşte virtual ve override ifadelerini bunun için kullanıyorsunuz, bu sınıf virtual' dır ve altsınıflar da ezilme (override) ihtimali vardır denmektedir. Yani buradaki amaç anlaşılırlığı arttırmak. Java dilinde bu işlem aynı yukardaki örnekteki gibi gerçekleşiyor. Yine bilgilendirme amaçlı iptal eden metodun üstüne @Override ifadesi yazılır ki gören kişi bu override edilmiş bir metod diye anlasın. Fakat bu bilgilendiriciler opsiyoneldir, kullanmasanızda olur. Birde virtual metodların özelliği late binding (geç bağlamaya) olanak sağlaması imiş.Çalışma anına kadar nesne referansına hangi nesne türünün bağlanacağı bilinmiyorsa buna geç bağlama denir.

public void cal (Ev ev){}

diye bir metod olduğunu varsayalım bu "ev" referansına Ev sınıfından bir nesne bağlanacağı gibi,poliformizme göre KiralikEv nesnesi de bağlanabilir. Buraya bağlanacak nesneye çalışma anında karar verilecekse bu metodun late binding destekli olması gerekir. Diğer bir amaç ta bu olmalı.

permanent link

cevaplandı: 03 Mar '12, 03:46

UsTa's gravatar image

UsTa
2.0k925
cevap kabul oranı: 20%

1

yanıt için çok teşekkürler nesne yönelimli programlamayı biraz derinlemesine çalışmaya çalışıyorum :) bu soru gibi bazı sorular var ve forumlarda işte şunu yapmak oop mantığına ters veya uygun değil gibi yorumlarla karşılaşıyorum yanıtladığınız soruda uzun süredir aklıma takılıyordu cevabınız için teşekkürler..

(03 Mar '12, 10:55) mhmt mhmt's gravatar image
3

Şu minvalde bir söz hatırlıyorum, sözün sahibini maalesef şu an hatırlayamadım: "sıradan programcılar sadece bilgisayarların anladığı kodlar yazar, iyi programcılar İnsanların anladığı kodlar yazar"

(04 Mar '12, 03:50) hakdogan hakdogan's gravatar image
1

@hakdogan: Martin Fowler tarafindan söylenmistir (Refactoring kitabinda yer aliyor). Bu konudaki kendi düsüncelerim: http://www.kurumsaljava.com/2012/02/28/programcilar-yazar-olsalardi-keske/

(04 Mar '12, 04:38) özcanacar ♦♦ %C3%B6zcanacar's gravatar image

@özcanacar Bilgilendirme için teşekkürler hocam. Düşüncelerinize de katılıyorum, kötü bir yazar olduğumu kabul ederek :)

(04 Mar '12, 06:28) hakdogan hakdogan's gravatar image

@hakdogan: kötü yazar yoktur hocam, yeterli derecede bilgisi olmayan yazar vardir, bu da bu konuda ihtisas yapilarak cok kolay asilabilecek bir durumdur :)

(04 Mar '12, 08:07) özcanacar ♦♦ %C3%B6zcanacar's gravatar image
Cevabınız
toggle preview

Bu soruyu takip et

E-Posta üzerinden:

Üyelik girişi yaptıktan sonra abonelik işlemlerini yapabilirsiniz

RSS üzerinden:

Cevaplar

Cevaplar ve Yorumlar

Yazı Formatlama

  • *italic* ya da _italic_
  • **bold** ya da __bold__
  • link:[text](http://url.com/ "başlık")
  • resim?![alt text](/path/img.jpg "başlık")
  • liste: 1. Foo 2. Bar
  • temel HTML etiketleri de kullanılabilir

Bu sorunun etiketleri:

×238
×4
×1

Soruldu: 24 Şub '12, 07:21

Görüntüleme: 1,448 kez

Son güncelleme: 11 Haz '12, 05:21

powered by BitNami OSQA