Bagikan melalui


Penunjuk antarmuka dan Antarmuka

Instans implementasi antarmuka sebenarnya adalah penunjuk ke array pointer ke metode - yaitu, tabel fungsi yang mengacu pada implementasi semua metode yang ditentukan dalam antarmuka. Objek dengan beberapa antarmuka dapat menyediakan pointer ke lebih dari satu tabel fungsi. Kode apa pun yang memiliki penunjuk di mana ia dapat mengakses array dapat memanggil metode di antarmuka tersebut.

Berbicara dengan tepat tentang beberapa tidak langsung ini tidak nyaman, jadi sebaliknya, penunjuk ke tabel fungsi antarmuka yang harus digunakan objek lain untuk memanggil metodenya disebut hanya penunjuk antarmuka. Anda dapat membuat tabel fungsi secara manual dalam aplikasi C atau hampir secara otomatis dengan menggunakan Visual C++ (atau bahasa berorientasi objek lainnya yang mendukung COM).

Dengan dukungan kompilator yang sesuai (yang melekat pada C dan C++), klien dapat memanggil metode antarmuka melalui namanya, bukan posisinya dalam array. Karena antarmuka adalah jenis, pengkompilasi, yang diberi nama metode, dapat memeriksa jenis parameter dan mengembalikan nilai dari setiap panggilan metode antarmuka. Sebaliknya, jika klien menggunakan skema panggilan berbasis posisi, pemeriksaan jenis tersebut tidak tersedia, bahkan di C atau C++.

Setiap antarmuka adalah kontrak yang tidak dapat diubah dari sekelompok metode fungsional. Anda mereferensikan antarmuka pada waktu proses dengan pengidentifikasi antarmuka unik global (IID). IID ini, yang merupakan instans tertentu dari pengidentifikasi unik global (GUID) yang didukung oleh COM, memungkinkan klien untuk menanyakan objek dengan tepat apakah mendukung semantik antarmuka, tanpa overhead yang tidak perlu dan tanpa kebingungan yang dapat muncul dalam sistem dari memiliki beberapa versi antarmuka yang sama dengan nama yang sama.

Untuk meringkas, penting untuk memahami apa itu antarmuka COM, dan bukan:

  • Antarmuka COM tidak sama dengan kelas C++. Definisi virtual murni tidak membawa implementasi. Jika Anda adalah programmer C++, Anda dapat menentukan implementasi antarmuka sebagai kelas, tetapi ini termasuk dalam judul detail implementasi, yang tidak ditentukan COM. Instans objek yang mengimplementasikan antarmuka harus dibuat agar antarmuka benar-benar ada. Selain itu, kelas objek yang berbeda dapat mengimplementasikan antarmuka secara berbeda namun digunakan secara bergantian dalam bentuk biner, selama perilaku sesuai dengan definisi antarmuka.
  • Antarmuka COM bukan objek. Ini hanyalah sekelompok fungsi terkait dan merupakan standar biner tempat klien dan objek berkomunikasi. Selama dapat memberikan penunjuk ke metode antarmuka, objek dapat diimplementasikan dalam bahasa apa pun dengan representasi status internal apa pun.
  • Antarmuka COM dititik dengan kuat. Setiap antarmuka memiliki pengidentifikasi antarmukanya sendiri (GUID), yang menghilangkan kemungkinan duplikasi yang dapat terjadi dengan skema penamaan lainnya.
  • Antarmuka COM tidak dapat diubah. Anda tidak dapat menentukan versi baru antarmuka lama dan memberinya pengidentifikasi yang sama. Menambahkan atau menghapus metode antarmuka atau mengubah semantik membuat antarmuka baru, bukan versi baru antarmuka lama. Oleh karena itu, antarmuka baru tidak dapat berkonflik dengan antarmuka lama. Namun, objek dapat mendukung beberapa antarmuka secara bersamaan dan dapat mengekspos antarmuka yang merupakan revisi antarmuka berturut-turut, dengan pengidentifikasi yang berbeda. Dengan demikian, setiap antarmuka adalah kontrak terpisah, dan objek di seluruh sistem tidak perlu khawatir tentang apakah versi antarmuka yang mereka panggil adalah yang mereka harapkan. ID antarmuka (IID) mendefinisikan kontrak antarmuka secara eksplisit dan unik.

Objek dan Antarmuka COM