Statik yöntemlerle, geçersiz kılma mekanizmasının uygun kontrolünü sağlamak için hiçbir nesne yoktur.
Normal sınıf / örnek sanal yöntem mekanizması, geçersiz kılmaların hassas şekilde ayarlanmasına aşağıdaki gibi izin verir: her gerçek nesne tam olarak bir sınıfın örneğidir. Bu sınıf geçersiz kılmaların davranışını belirler; sanal yöntemlerde her zaman ilk çatlağı alır. Daha sonra uygulanması için ana yöntemi doğru zamanda çağırmayı seçebilir. Daha sonra her bir üst yöntem, üst yöntemini çağırmak için sıra alır. Bu, nesne yöneliminin bilindiği kodun yeniden kullanılma kavramlarından birini gerçekleştiren hoş bir üst düzey çağırmalarla sonuçlanır. (Burada temel / süper sınıfların kodu nispeten karmaşık bir şekilde yeniden kullanılıyor; OOP'ta başka bir dikey kod yeniden kullanımı kavramı, aynı sınıfın birden çok nesnesine sahip olmaktır.)
Temel sınıflar çeşitli alt sınıflar tarafından yeniden kullanılabilir ve her biri rahatça bir arada bulunabilir. Kendi davranışlarını dikte eden nesneleri, barışçıl ve eşzamanlı olarak diğerleriyle birlikte varolan nesneleri somutlaştırmak için kullanılan her sınıf. İstemci, hangi davranışları istediğini ve bir nesneyi örneklemek ve istendiği gibi başkalarına iletmek için hangi sınıfı kullanacağını seçerek kontrol eder.
(Bu mükemmel bir mekanizma değildir, elbette desteklenmeyen yetenekleri her zaman tanımlayabilir, bu yüzden fabrika yöntemi ve bağımlılık enjeksiyonu gibi desenler üstte katmanlıdır.)
Yani, başka bir şey değiştirmeden statik için bir geçersiz kılma yeteneği yapacak olsaydık, geçersiz kılmaları sipariş etmekte zorluk çekerdik. Geçersiz kılmanın uygulanabilirliği için sınırlı bir bağlam tanımlamak zor olacaktır, bu nedenle geçersiz kılmayı nesnelerde olduğu gibi yerel olarak değil küresel olarak elde edersiniz. Davranışı değiştirecek örnek nesne yok. Birisi, başka bir sınıf tarafından geçersiz kılınmış olan statik yöntemi çağırdıysa, geçersiz kılma kontrol altına almalı mı değil mi? Bu tür birden çok geçersiz kılma varsa, önce kontrolü kim alır? ikinci? Örneğin nesne geçersiz kılmalarıyla, bu soruların hepsinin anlamlı ve iyi gerekçeli cevapları vardır, ancak statik ile yoktur.
Statik için geçersiz kılmalar büyük ölçüde kaotik olurdu ve bunun gibi şeyler daha önce yapılmıştı.
Örneğin, Mac OS System 7 ve önceki sürümlerde, işletim sisteminden önce uygulama tarafından yapılan sistem çağrılarının kontrolünü alarak sistemi genişletmek için bir tuzak yama mekanizması kullanılmıştır. Sistem çağrısı yama tablosunu, tek bir genel tablo olması dışında, örneğin nesneler için bir vtable gibi bir işlev işaretçileri dizisi olarak düşünebilirsiniz .
Bu, tuzak yamalarının düzensiz doğası nedeniyle programcılar için anlatılmamış kedere neden oldu. Kim tuzağa düşürmek isterse, temelde kazandı, istemeseler bile. Tuzağın her bir kullanıcısı, son derece kırılgan olan bir tür üst çağrı yeteneği için önceki tuzak değerini yakalayacaktır. Bir tuzak yamasını kaldırmak, bir sistem çağrısı hakkında artık bilgi sahibi olmanız gerekmediğinde, yamanızın gerçekten kaldırılması için gerekli bilgilere sahip olmadığınız için kötü bir form olarak kabul edildiğini söyleyin (eğer yaptıysanız, takip eden diğer yamaları da kaldıracaksınız) sen).
Bu, statiklerin geçersiz kılınması için bir mekanizma oluşturmanın imkansız olduğu anlamına gelmez, ancak bunun yerine muhtemelen tercih etmeyi tercih ettiğim, statik alanları ve statik yöntemleri örnek alanlarına ve metasınıfların örnek yöntemlerine dönüştürmektir, böylece normal nesne oryantasyon teknikleri uygulanacaktır. Bunu da yapan sistemlerin olduğuna dikkat edin: CSE 341: Smalltalk sınıfları ve metasınıfları ; Ayrıca bkz: Java statikinin Smalltalk eşdeğeri nedir?
Makul bir şekilde çalışmasını sağlamak için ciddi bir dil özelliği tasarımı yapmanız gerektiğini söylemeye çalışıyorum. Bir örnek olarak, saf bir yaklaşım yapılmış, topallamış, ancak çok sorunlu ve tartışmasız (yani tartışacağım) eksik ve kullanımı zor bir soyutlama sağlayarak mimari olarak kusurluydu.
Statik geçersiz kılma özelliğini iyi çalışacak şekilde tasarladığınızda, OOP'un sınıf tabanlı yöntemlere doğal bir uzantısı olan bir çeşit metasınıf icat etmiş olabilirsiniz. Yani, bunu yapmamak için hiçbir neden yok - ve bazı diller aslında yapıyor. Belki bir takım dillerin yapmamayı seçmesi biraz daha zorlayıcıdır.
self
Sınıfın bir örneğine değil, sınıfa işaret eden bir işaretçi geçirilirler .