Sanal ve Soyut
Sanal ve Soyut, Java ve C gibi çoğu Nesne Yönelimli (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, eklendiği varlıklara kısmi uygulama duygusu sağlar.
Özet
Tipik olarak, Soyut Temel Sınıflar (ABC) olarak da bilinen Soyut sınıflar somutlaştırılamaz (bu sınıfın bir örneği oluşturulamaz). Bu nedenle, Soyut sınıflar yalnızca programlama dili kalıtımı destekliyorsa anlamlıdır (bir sınıfı genişleterek alt sınıflar oluşturma yeteneği). Soyut sınıflar genellikle kısmi veya hiç uygulaması olmayan soyut bir kavramı veya varlığı temsil eder. Bu nedenle, Soyut sınıflar, alt sınıfların türetildiği üst sınıflar olarak hareket eder, 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. Soyut bir sınıfı genişleten alt sınıflar, bu (kalıtsal) Soyut yöntemleri uygulayabilir. Alt sınıf, bu tür tüm Soyut yöntemleri uygularsa, somut bir sınıftır. Ancak olmazsa, alt sınıf da bir Soyut sınıf olur. Tüm bunların anlamı, programcı bir sınıfı Soyut olarak aday gösterdiğinde, sınıfın eksik olacağını ve devralan alt sınıflar tarafından tamamlanması gereken öğelere sahip olacağını söylüyor olmasıdır. 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. Miras almak için kod yazan programcı, yöntem tanımlarını tam olarak takip etmelidir (ancak elbette kendi uygulaması olabilir). Java ve C'da, Soyut sınıflar ve yöntemler, Soyut anahtar kelime kullanılarak bildirilir.
Sanal
Sanal yöntemler/işlevler, devralan bir sınıf tarafından isteğe bağlı olarak davranışını geçersiz kılma yeteneği sağlar (aynı imzaya sahip bir işlev kullanarak). Sanal işlev kavramı aşağıdaki senaryoda önemlidir. Bir sınıfın bir alt sınıf tarafından türetildiğini varsayalım, o zaman türetilmiş sınıfın bir nesnesi her kullanıldığında, temel sınıfın bir nesnesine veya türetilmiş sınıfa 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 Virtual anahtar kelimesi kullanılmıştır. Yöntem Sanal olarak işaretlenmişse, türetilmiş sınıfın işlevi (varsa) çağrılır veya aksi takdirde temel sınıfın işlevi çağrılır. Örneğin, C++'da Virtual anahtar sözcüğü tam olarak bu amaç için kullanılır. C'da Virtual anahtar sözcüğü benzer şekilde kullanılır, ancak buna ek olarak, geçersiz kılınan tüm yöntemleri değiştirmek için geçersiz kılma anahtar sözcüğü kullanılmalıdır. Ancak Java'da açık bir Sanal anahtar kelime yoktur. Tüm statik olmayan yöntemler Sanal olarak kabul edilir. Gövdesi olmayan sanal işlevlere Saf Sanal işlevler denir. Java ve C'da Soyut yöntemler aslında Saf Sanaldır.
Sanal ve Soyut arasındaki fark
Soyut ve Sanal, ilişkili varlıklarına eksik uygulama anlamı sağlayan iki anahtar kelime/kavram olmasına rağmen, aralarında farklılıklar vardır. Soyut yöntemlerin (Bu, Soyut sınıflar içinde tanımlanması gerekir) bir uygulaması yoktur, Sanal yöntemlerin bir uygulaması olabilir. Soyut yöntemler somut bir sınıf tarafından genişletilirse, devralınan tüm Soyut yöntemler uygulanmalıdır, ancak devralınan Sanal yöntemler geçersiz kılınabilir veya geçersiz kılınabilir.