Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Arabirim uygulamasının bir örneği aslında yöntemlere yönelik bir dizi işaretçidir; yani arabirimde belirtilen tüm yöntemlerin uygulanmasına başvuran bir işlev tablosudur. Birden çok arabirime sahip nesneler, birden fazla işlev tablosuna işaretçiler sağlayabilir. Diziye erişebileceği bir işaretçisi olan herhangi bir kod, bu arabirimdeki yöntemleri çağırabilir.
Bu çoklu dolaylılık hakkında tam olarak konuşmak zor olduğundan, başka bir nesnenin yöntemlerini çağırması gereken arabirim işlev tablosunun işaretçisi, arabirim işaretçisi olarak adlandırılır. Bir C uygulamasında el ile veya Visual C++ (veya COM'u destekleyen diğer nesne odaklı diller) kullanarak neredeyse otomatik olarak işlev tabloları oluşturabilirsiniz.
Uygun derleyici desteğiyle (C ve C++'ın doğasındadır), istemci bir arabirim yöntemini dizideki konumuyla değil adıyla çağırabilir. Arabirim bir tür olduğundan, yöntemlerin adları verilen derleyici parametre türlerini denetleyebilir ve her arabirim yöntemi çağrısının değerlerini döndürebilir. Buna karşılık, bir istemci konum tabanlı bir çağrı düzeni kullanıyorsa, C veya C++'da bile tür denetimi kullanılamaz.
Her arabirim, işlevsel bir yöntem grubunun sabit bir sözleşmesidir. Çalışma zamanında genel olarak benzersiz arabirim tanımlayıcısı (IID) ile bir arabirime başvurursunuz. COM tarafından desteklenen genel olarak benzersiz bir tanımlayıcının (GUID) belirli bir örneği olan bu IID, istemcinin bir nesneye arabirimin semantiğini tam olarak destekleyip desteklemediğini sormasına olanak tanır; gereksiz ek yük olmadan ve bir sistemde aynı arabirimin aynı ada sahip birden çok sürümüne sahip olmaktan kaynaklanan karışıklıklar olmadan.
Özetlemek gerekirse, COM arabiriminin ne olduğunu anlamak önemlidir ve şu değildir:
- COM arabirimi, C++ sınıfıyla aynı değildir. Saf sanal tanım hiçbir uygulama taşımaz. C++ programcısıysanız, bir arabirim uygulamanızı sınıf olarak tanımlayabilirsiniz, ancak bu, COM'un belirtmediği uygulama ayrıntıları başlığına girer. Arabirimin var olması için arabirim uygulayan bir nesne örneği oluşturulmalıdır. Ayrıca, davranış arabirim tanımına uygun olduğu sürece farklı nesne sınıfları farklı bir arabirim uygulayabilir ancak ikili biçimde birbirinin yerine kullanılabilir.
- COM arabirimi bir nesne değildir. Yalnızca ilgili bir işlev grubudur ve istemcilerin ve nesnelerin iletişim kurarak iletişim kurdığı ikili standarttır. Arabirim yöntemlerine işaretçiler sağlayabildiği sürece, nesne herhangi bir iç durum gösterimiyle herhangi bir dilde uygulanabilir.
- COM arabirimleri kesin olarak yazıldı. Her arabirimin kendi arabirim tanımlayıcısı (GUID) vardır ve bu da başka bir adlandırma düzeninde yineleme olasılığını ortadan kaldırır.
- COM arabirimleri sabittir. Eski bir arabirimin yeni bir sürümünü tanımlayıp aynı tanımlayıcıyı veremezsiniz. Bir arabirimin yöntemlerini eklemek veya kaldırmak ya da semantiği değiştirmek, eski bir arabirimin yeni bir sürümünü değil yeni bir arabirim oluşturur. Bu nedenle, yeni bir arabirim eski bir arabirimle çakışamaz. Ancak, nesneler aynı anda birden çok arabirimi destekleyebilir ve bir arabirimin ardışık düzeltmeleri olan arabirimleri farklı tanımlayıcılarla kullanıma açabilir. Bu nedenle, her arabirim ayrı bir sözleşmedir ve sistem genelindeki nesnelerin çağırdıkları arabirimin sürümünün bekledikleri sürüm olup olmadığı konusunda endişelenmeleri gerekmez. Arabirim kimliği (IID), arabirim sözleşmesini açık ve benzersiz olarak tanımlar.
İlgili konular