Sanal ve Soyut
Sanal ve Soyut, Java ve C # gibi çoğu Nesne Tabanlı (OO) programlama dilinde kullanılan iki anahtar kelimedir. Farklı dillerde ne anlama geldiği konusunda küçük farklılıklar olsa da, hem Sanal hem de Soyut anahtar kelimeler, bağlı olduğu varlıklara kısmi uygulama hissi sağlar.
Öz
Genellikle, Soyut Temel Sınıflar (ABC) olarak da bilinen Abstract sınıfları somutlaştırılamaz (bu sınıfın bir örneği oluşturulamaz). Bu nedenle, Abstract sınıfları yalnızca programlama dilinin mirası destekliyorsa (bir sınıfı genişleterek alt sınıflar oluşturma yeteneği) sahip olmak anlamlıdır. Soyut sınıflar genellikle kısmi veya hiç uygulaması olmayan soyut bir kavramı veya varlığı temsil eder. Bu nedenle, Abstract sınıfları, alt sınıfların türetildiği üst sınıflar olarak işlev görür, böylece alt sınıf, üst sınıfın eksik özelliklerini paylaşır ve bunları tamamlamak için işlevsellik eklenebilir. Soyut sınıflar Soyut yöntemler içerebilir. Bir soyut sınıfı genişleten alt sınıflar bu (kalıtsal) Soyut yöntemleri uygulayabilir. Çocuk sınıfı tüm bu Soyut yöntemleri uygularsa, somut bir sınıftır. Ama eğer olmazsa, çocuk sınıfı da bir Soyut sınıf haline gelir. Tüm bunların anlamı, programcı bir sınıfı bir Özet olarak aday gösterdiğinde, sınıfın eksik olacağını ve miras kalan alt sınıflar tarafından tamamlanması gereken unsurlara sahip olacağını söylüyor. Bu, iki programcı arasında yazılım geliştirmedeki görevleri basitleştiren bir sözleşme oluşturmanın güzel bir yoludur. Devralmak için kod yazan programcı, yöntem tanımlarını tam olarak izlemelidir (ancak elbette kendi uygulamasına sahip olabilir). Java ve C # 'da, Abstract sınıfları ve yöntemleri Abstract anahtar sözcüğü kullanılarak bildirilir.
Gerçek
Sanal yöntemler / işlevler, isteğe bağlı olarak davranışını devralma sınıfıyla (aynı imzalı bir işlevi kullanarak) geçersiz kılma yeteneği sağlar. Sanal işlev kavramı aşağıdaki senaryoda önemlidir. Bir sınıfın bir alt sınıftan türetildiğini varsayalım, sonra türetilmiş sınıfın bir nesnesi her kullanıldığında, temel sınıfın veya türetilmiş sınıfın bir nesnesine atıfta bulunabilir. Ancak, temel sınıf yöntemleri geçersiz kılınırsa yöntem çağrısı davranışı belirsiz olabilir. Bu belirsizliği gidermek için Sanal anahtar kelime kullanılır. Yöntem Sanal olarak işaretlenmişse, türetilmiş sınıfın işlevi (varsa) olarak adlandırılır veya temel sınıfın işlevi olarak adlandırılır. Örneğin, C ++ 'da, Virtual anahtar kelime tam olarak bu amaçla kullanılır. C # 'da, Sanal anahtar kelime benzer bir şekilde kullanılır, ancak ek olarak, geçersiz kılınan tüm yöntemleri değiştirmek için anahtar kelime geçersiz kılma kullanılmalıdır. Ancak Java'da açık bir Sanal anahtar kelime yoktur. Tüm statik olmayan yöntemler Sanal olarak kabul edilir. Bedeni olmayan sanal işlevlere Saf Sanal işlevler denir. Java ve C # 'da, Soyut yöntemler aslında Saf Sanal'dır..
Sanal ve Soyut Arasındaki Fark
Abstract ve Virtual, ilişkili kuruluşlara eksik uygulamanın anlamını sağlayan iki anahtar kelime / kavram olmasına rağmen, farklılıkları vardır. Sanal yöntemlerin bir uygulaması olabilirken, soyut yöntemlerin (Soyut sınıflar içinde tanımlanması gerekir) hiçbir uygulaması yoktur. Abstract yöntemleri somut bir sınıf tarafından genişletilirse, devralınan tüm Sanal yöntemler uygulanmalı, devralınan Sanal yöntemler geçersiz kılınabilir veya kılınmayabilir.