Apakah intipati antara muka dalam pengaturcaraan?

Dalam PHP OOP, antara muka ialah kelas di mana semua kaedah adalah abstrak dan awam.

Mari kita semak tiga istilah yang digunakan dalam definisi ini. Kelas, abstrak dan terbuka. Kelas ialah templat atau corak objek dan merupakan asas pengaturcaraan berorientasikan objek. Kaedah abstrak ialah kaedah khas yang diisytiharkan tetapi tidak mempunyai badan, hanya kurungan kosong. Awam ialah pengubah suai akses awam dan dikaitkan dengan akses kepada kaedah. Ini bermakna ia boleh diakses dari mana-mana sahaja: dari kelas ini, di luarnya, dan dari mana-mana kelas terbitan.

Antara muka PHP ialah alat untuk mencipta kod teguh yang mentakrifkan kaedah yang akan dilaksanakan oleh kelas tanpa mentakrifkan pengendalian kaedah tersebut. Ini adalah konsep yang berkuasa dan mudah digunakan dalam PHP berorientasikan objek. Untuk menciptanya ia digunakan kata kunci antara muka , ia ditakrifkan dengan cara yang sama seperti kelas PHP. Kaedah yang terkandung tidak mempunyai fungsi, tetapi antara muka menentukan kaedah yang diperlukan oleh kelas lain. Mana-mana kelas yang mewarisi daripada antara muka mesti mengandungi kaedah yang sama seperti yang terkandung dalam antara muka, jika tidak ralat akan dilemparkan.

Dalam antara muka PHP OOP, kami hanya menentukan nama kaedah dan parameternya, dan ia boleh dilaksanakan kemudian. Adalah menjadi kebiasaan untuk mengisytiharkan semua kaedah antara muka sebagai awam. Untuk melaksanakan antara muka, gunakan kata kunci implements. Jika perlu, kelas boleh melaksanakan lebih daripada satu antara muka ia dipisahkan dengan koma. Seperti kelas, antara muka boleh mengandungi pemalar. Satu-satunya perbezaan ialah mereka tidak boleh ditindih dalam kelas terbitan.

Menentukan dan Menggunakan Antara Muka

Antara muka ditakrifkan menggunakan kata kunci antara muka. Semua kaedah di dalamnya mestilah awam dan abstrak:

haiwan antara muka ( )

Ini adalah antara muka kosong. Kami akan menambah kaedah gerakan abstrak padanya. Jadi kita akan buat PHP mudah 5 antara muka OOP yang boleh dilaksanakan kemudian:

haiwan antara muka ( gerakan fungsi awam()() )

Antara muka ini boleh dilaksanakan oleh mana-mana kelas haiwan, semua kelas haiwan akan mengandungi kaedah gerakan. Mari kita lihat satu contoh. Untuk melaksanakan antara muka, kami menggunakan kata kunci implements:

Antara muka PHP dan kelas abstrak

Antara muka dan kelas abstrak adalah sangat serupa dalam konsep. Mereka membantu dalam membuat templat untuk kelas yang akan digunakan dalam aplikasi. Menurut asas PHP OOP, mereka berbeza antara satu sama lain seperti berikut:

  1. Dalam antara muka, semua kaedah adalah abstrak (tanpa pelaksanaan). Dalam kelas abstrak, hanya beberapa kaedah yang abstrak. Kelas abstrak mesti mengandungi sekurang-kurangnya, satu kaedah abstrak. Jika tidak, ia akan menjadi kelas PHP standard;
  2. Dalam antara muka PHP, semua kaedah yang diisytiharkan adalah awam, manakala dalam kelas abstrak, kaedah boleh menjadi awam, peribadi atau dilindungi. Oleh itu, antara muka mempunyai sekatan ke atas penggunaan pengubah akses, tetapi kelas abstrak tidak mempunyai sekatan sedemikian;
  3. Kelas boleh melaksanakan bilangan antara muka yang tidak terhad. Pada masa yang sama, kelas PHP hanya boleh menjana satu kelas abstrak;
  4. Anda mesti mengatasi semua kaedah antara muka, tetapi dalam kelas abstrak anda mempunyai pilihan: mengatasi kaedah atau biarkan ia tidak berubah;
  5. Antara muka mempunyai peraturan yang lebih ketat daripada kelas abstrak. Antara muka PHP direka untuk menyediakan logik tertentu, ia bertindak sebagai pembungkus kosong atau templat untuk kelas lain.

Apakah antara muka PHP digunakan?

Antara muka membantu pengaturcara berfikir ke arah yang betul. Dari perspektif PHP OOP, kelas ialah templat dan objek ialah satu set keupayaan. Kami lebih mementingkan fungsi, perkara yang dilakukannya, dan bukannya bagaimana ia melakukannya. Oleh itu, kami menentukan antara muka asas yang biasa dan kemudian ia dilaksanakan, yang membantu untuk berfikir ke arah yang betul.

Pelarasan kod masa hadapan

Membangunkan dalam PHP berorientasikan objek membolehkan anda melaraskan kod pada masa hadapan tanpa menjejaskan fungsi utama. Apabila menulis kod pada masa hadapan, ciri-ciri ini akan sentiasa diambil kira dan kemudian dimasukkan fungsi tambahan, tetapi ini tidak akan memberi kesan pada ciri asas objek sedia ada.

Struktur program yang lebih baik

PHP berorientasikan objek telah dilaksanakan untuk menambah baik struktur aplikasi yang dibuat. Menambah antara muka pada PHP membantu menjadikan pengekodan kemas dan bersih. Antara muka menghalang anda daripada menulis kod yang sukar diselenggara dan diubah. Dengan bantuan antara muka, kami boleh mengekalkan dan mengubah suai kod dengan mudah, yang menjadikan pengaturcara lebih cekap.

Menambah semua ciri penting

Menggunakan antara muka PHP kita boleh mencipta fungsi asas yang boleh ditakrifkan pelbagai objek dengan cara yang berbeza dan kemudian tambah ciri lain mengikut keperluan.

Satu lagi contoh OOP PHP pelaksanaan antara muka

kelas Cake melaksanakan Resipi ( metodologi fungsi awam() ( ) )

Dalam kod ini kita melihat kelas Cake, yang melaksanakan antara muka Resipi.

Terjemahan artikel "antara muka PHP" telah disediakan oleh pasukan projek yang mesra.

Perihalan antara muka OOP, jika kita mengabaikan butiran sintaks bahasa tertentu, terdiri daripada dua bahagian:

  • Nama antara muka, yang dibina mengikut peraturan yang sama seperti pengecam lain bahasa pengaturcaraan yang digunakan. Perbezaan bahasa dan persekitaran pembangunan mempunyai konvensyen pemformatan kod yang berbeza, mengikut mana nama antara muka boleh dibentuk mengikut peraturan tertentu yang memudahkan untuk membezakan nama antara muka daripada nama elemen program lain. Contohnya, dalam teknologi COM dan semua bahasa yang menyokongnya, terdapat konvensyen mengikut mana nama antara muka dibina mengikut corak "I<Имя>", iaitu, ia terdiri daripada bertulis dengan huruf besar nama yang bermakna didahului dengan huruf besar huruf latin I (IUnknown, IDispatch, IStringList dan sebagainya).
  • Kaedah antara muka. Penerangan antara muka mentakrifkan nama dan tandatangan kaedah yang disertakan di dalamnya, iaitu, prosedur atau fungsi kelas.

Antara muka boleh digunakan dalam dua cara:

  • kelas boleh melaksanakan antara muka. Pelaksanaan antara muka ialah dalam penerangan kelas antara muka ini ditunjukkan sebagai boleh dilaksanakan, dan dalam kod kelas semua kaedah yang diterangkan dalam antara muka semestinya ditakrifkan mengikut sepenuhnya dengan tandatangan daripada penerangan antara muka ini. Iaitu, jika kelas melaksanakan antara muka, semua kaedah yang diterangkan dalam antara muka wujud dan boleh dipanggil untuk sebarang contoh kelas ini. Satu kelas boleh melaksanakan beberapa antara muka pada masa yang sama.
  • Adalah mungkin untuk mengisytiharkan pembolehubah dan parameter kaedah sebagai mempunyai jenis antara muka. Contoh mana-mana kelas yang melaksanakan antara muka boleh ditulis kepada pembolehubah atau parameter sedemikian. Jika antara muka diisytiharkan sebagai jenis pemulangan fungsi, ini bermakna fungsi itu mengembalikan objek kelas yang melaksanakan antara muka.

Biasanya, dalam bahasa pengaturcaraan berorientasikan objek, antara muka, seperti kelas, boleh diwarisi antara satu sama lain. Dalam kes ini, antara muka kanak-kanak merangkumi semua kaedah antara muka nenek moyang dan mungkin menambahkannya sendiri kepada mereka.

Jadi, di satu pihak, antara muka ialah kontrak yang dipersetujui oleh kelas untuk dilaksanakan. melaksanakan Sebaliknya, antara muka ialah jenis data, kerana penerangannya cukup jelas mentakrifkan sifat objek untuk menaip pembolehubah setanding dengan kelas. Walau bagaimanapun, perlu ditekankan bahawa antara muka bukanlah jenis data lengkap, kerana ia hanya menentukan tingkah laku luaran objek. Struktur dalaman dan pelaksanaan tingkah laku yang ditentukan oleh antara muka disediakan oleh kelas yang melaksanakan antara muka; itulah sebabnya "contoh antara muka" dalam bentuk tulen tidak wujud, dan sebarang pembolehubah jenis "antara muka" mengandungi contoh kelas konkrit.

Penggunaan antara muka adalah salah satu pilihan untuk menyediakan polimorfisme dalam bahasa objek dan persekitaran. Semua kelas yang melaksanakan antara muka yang sama, dari segi tingkah laku yang ditakrifkannya, berkelakuan sama secara luaran. Ini membolehkan anda menulis algoritma pemprosesan data umum yang menggunakan antara muka sebagai jenis parameter dan menggunakannya pada objek pelbagai jenis, mendapat hasil yang diperlukan setiap kali.

Sebagai contoh, antara muka "Boleh Diklon" boleh menerangkan abstraksi pengklonan (mencipta salinan yang tepat) objek dengan menentukan kaedah "Klon" yang harus menyalin kandungan objek ke objek lain daripada jenis yang sama. Kemudian mana-mana kelas yang objeknya mungkin perlu disalin mesti melaksanakan antara muka Boleh Diklon dan menyediakan kaedah Klon, dan di mana-mana dalam program di mana pengklonan objek diperlukan, kaedah Klon dipanggil pada objek untuk tujuan ini. Selain itu, kod yang menggunakan kaedah ini hanya perlu mempunyai penerangan tentang antara muka ia mungkin tidak tahu apa-apa tentang kelas sebenar yang objeknya disalin. Oleh itu, antara muka membolehkan anda berpecah sistem perisian ke dalam modul tanpa pergantungan kod bersama.

Antara muka dan kelas abstrak

Anda mungkin perasan bahawa antara muka adalah, sebenarnya, hanya kelas abstrak tulen, iaitu, kelas di mana tiada apa-apa yang ditakrifkan kecuali kaedah abstrak. Jika bahasa pengaturcaraan menyokong pelbagai warisan dan kaedah abstrak (seperti C++), maka tidak perlu memperkenalkan konsep "antara muka" yang berasingan. Entiti yang serupa digambarkan sebagai kelas abstrak dan diwarisi oleh kelas untuk melaksanakan kaedah abstrak.

Walau bagaimanapun, menyokong sepenuhnya warisan berbilang agak rumit dan menyebabkan banyak masalah, baik pada peringkat pelaksanaan bahasa dan pada peringkat seni bina aplikasi. Memperkenalkan konsep antara muka ialah kompromi yang membolehkan anda mendapat banyak faedah warisan berbilang tanpa melaksanakannya sepenuhnya dan dengan itu tanpa menghadapi kebanyakan kesukaran yang ditimbulkannya.

Pewarisan berbilang dan pelaksanaan antara muka

Biasanya, bahasa pengaturcaraan membenarkan antara muka diwarisi daripada pelbagai antara muka nenek moyang. Semua kaedah yang diisytiharkan dalam antara muka nenek moyang menjadi sebahagian daripada pengisytiharan antara muka keturunan. Tidak seperti warisan kelas, warisan berbilang antara muka adalah lebih mudah untuk dilaksanakan dan tidak menyebabkan kesukaran yang ketara.

Namun, satu perlanggaran dengan pusaka berbilang antara muka dan apabila melaksanakan beberapa antara muka dengan satu kelas masih boleh dilakukan. Ia berlaku apabila dua atau lebih antara muka yang diwarisi oleh antara muka baharu atau dilaksanakan oleh kelas mempunyai kaedah dengan tandatangan yang sama. Pembangun bahasa pengaturcaraan terpaksa memilih satu atau kaedah lain untuk menyelesaikan percanggahan dalam kes sedemikian. Terdapat beberapa pilihan di sini:

  • Larangan. Ia hanya dilarang untuk melaksanakan beberapa antara muka dalam satu kelas yang mempunyai kaedah dengan tandatangan yang sama. Jika kelas memerlukan gabungan antara muka yang tidak serasi, pengaturcara mesti memilih cara lain untuk menyelesaikan masalah, contohnya, pilih beberapa kelas, setiap satunya melaksanakan salah satu daripada antara muka yang diperlukan, dan gunakan kejadian mereka bersama-sama.
  • Penyelesaian kekaburan yang jelas. Jika pengkompil mengesan perlanggaran, pengaturcara dikehendaki menunjukkan secara eksplisit kaedah antara muka yang dia laksanakan dan panggil. Iaitu, kaedah dengan nama yang sama dilaksanakan secara berasingan, dan apabila dipanggil, ia ditunjukkan yang mana antara mereka dipanggil. Varian penyelesaian ini ialah penamaan semula eksplisit untuk kaedah yang diwarisi atau dilaksanakan yang mempunyai nama yang sama, yang menyebabkan tiada kaedah dengan nama yang sama dalam kelas pelaksana, tetapi apabila diakses melalui antara muka, pelaksanaan yang diperlukan sentiasa dipanggil.
  • Pelaksanaan umum kaedah dengan nama yang sama. Jika beberapa kaedah dengan tandatangan yang sama diwarisi atau dilaksanakan, maka ia digabungkan dalam antara muka pewarisan, dan dalam kelas pelaksana mereka menerima satu pelaksanaan keseluruhan. Ini bagus untuk kes di mana kaedah dengan nama yang sama antara muka yang berbeza sama dalam kefungsian yang dimaksudkan, tetapi boleh menyebabkan kesan yang tidak diingini jika tingkah laku kaedah ini sepatutnya berbeza.

Antara muka dalam bahasa dan sistem tertentu

Pelaksanaan antara muka sebahagian besarnya ditentukan keupayaan awal bahasa dan tujuan antara muka diperkenalkan ke dalamnya. Ciri-ciri menggunakan antara muka dalam bahasa C++, Java dan Object Pascal dalam sistem Delphi sangat menunjukkan, kerana ia menunjukkan tiga situasi yang berbeza secara asas:

  • Tiada antara muka dalam subsistem objek bahasa Pascal Objek telah diperkenalkan dalam Delphi 2 untuk membolehkan penulisan dan penggunaan komponen COM. Sehubungan itu, mekanisme Antara muka Delphi tertumpu terutamanya pada penggunaan teknologi COM.
  • Di Java, antara muka pada mulanya disertakan dalam bahasa, menjadi sebahagian daripadanya.
  • Dalam C++, secara tegasnya, tiada antara muka sama sekali. Mekanisme yang serupa dengan antara muka (dan sejarah sebelumnya) dilaksanakan dengan cara lain subsistem objek yang sangat berkuasa bahasa ini.

Delphi

Dalam COM, teknologi Delphi menyerupai kelas. Bagaimana semua kelas adalah keturunan kelas

Contoh pengisytiharan antara muka:

IMyInterface = prosedur antara muka DoSomething; akhir ;

Untuk mengisytiharkan pelaksanaan antara muka, dalam penerangan kelas anda mesti menunjukkan nama mereka dalam kurungan selepas kata kunci kelas, selepas nama kelas nenek moyang. Memandangkan antara muka ialah kontrak yang perlu dilaksanakan, atur cara tidak menyusun sehingga prosedur DoSomething dilaksanakan dalam kelas pelaksana;

Tumpuan antara muka Delphi yang disebutkan di atas pada teknologi COM membawa kepada beberapa kesulitan. Hakikatnya ialah antara muka IUnknown (dari mana semua antara muka lain mewarisi) sudah mengandungi tiga kaedah: QueryInterface,_AddRef, _Release , oleh itu, mana-mana kelas yang melaksanakan mana-mana antara muka diperlukan untuk melaksanakan kaedah ini, walaupun antara muka dan kelas tidak mempunyai apa-apa untuk lakukan dengan COM.

Contoh kelas yang melaksanakan antara muka

TMyClass = kelas(TMyParentClass, IMyInterface) prosedur DoSomething; fungsi QueryInterface(const IID: TGUID; out Obj): HResult; stdcall ; fungsi _AddRef: Integer ; stdcall ; fungsi _Pelepasan: Integer ; stdcall ; akhir ;

C++

Jawa

Mengisytiharkan Antara Muka

Mengisytiharkan antara muka adalah sangat serupa dengan memudahkan pengisytiharan kelas.

Ia bermula dengan tajuk. Pengubah suai dinyatakan dahulu. Antara muka boleh diisytiharkan sebagai awam dan kemudian ia boleh diakses oleh kegunaan umum, atau pengubah suai akses mungkin tidak ditentukan, dalam hal ini antara muka hanya boleh diakses oleh jenis pakejnya. Pengubah suai abstrak untuk antara muka tidak diperlukan kerana semua antara muka adalah abstrak. Anda boleh menentukannya, tetapi tidak disyorkan untuk berbuat demikian, supaya tidak mengacaukan kod.

Ini mungkin diikuti dengan kata kunci lanjutan dan senarai antara muka yang antara muka yang diisytiharkan akan diwarisi. Terdapat banyak jenis induk, perkara utama ialah tiada pengulangan dan hubungan warisan tidak membentuk pergantungan kitaran.

Warisan antara muka sememangnya sangat fleksibel. Jadi, jika terdapat dua antara muka, A dan B, dengan B mewarisi daripada A, maka antara muka baharu C boleh mewarisi daripada kedua-duanya. Walau bagaimanapun, adalah jelas bahawa penetapan warisan daripada A adalah berlebihan; semua elemen antara muka ini sudah pun diwarisi melalui antara muka B.

Antara muka awam Arah ( int KANAN=1; int KIRI=2; int ATAS=3; int BAWAH=4; )

Semua kaedah antara muka adalah abstrak awam dan pengubah suai ini juga adalah pilihan.

Antara muka awam Boleh Alih ( void moveRight(); void moveLeft(); void moveUp(); void moveDown(); )

Seperti yang kita dapat lihat, menerangkan antara muka adalah lebih mudah daripada mengisytiharkan kelas.

Pelaksanaan Antaramuka

Untuk melaksanakan antara muka, ia mesti dinyatakan semasa mengisytiharkan kelas menggunakan kata kunci implements. Contoh:

Antaramuka I ( void interfaceMethod() ; ) kelas awam ImplementingInterface melaksanakan I ( void interfaceMethod() ( System .out .println ( "Kaedah ini dilaksanakan dari antara muka I"); ) public static void main(String args) ( ImplementingInterface temp = new ImplementingInterface() ; temp.interfaceMethod () ; ) )

Setiap kelas boleh melaksanakan mana-mana antara muka yang tersedia. Dalam kes ini, kelas mesti melaksanakan semua kaedah abstrak yang muncul apabila mewarisi daripada antara muka atau kelas induk supaya kelas baharu boleh diisytiharkan bukan abstrak.

Jika dari sumber yang berbeza kaedah dengan tandatangan yang sama diwarisi, maka sudah cukup untuk menerangkan pelaksanaan sekali dan ia akan digunakan untuk semua kaedah ini. Walau bagaimanapun, jika mereka mempunyai nilai pulangan yang berbeza, maka konflik timbul. Contoh:

Antara muka A ( int getValue() ; ) antara muka B ( double getValue() ; ) antara muka C ( int getValue() ; ) kelas awam Perlaksanaan betul A, C // kelas mewarisi kaedah dengan tandatangan yang sama dengan betul( int getValue() ( return 5 ; ) ) kelas Salah melaksanakan A, B // kelas menyebabkan ralat kompilasi( int getValue() ( return 5 ; ) double getValue() ( return 5.5 ; ) )

) ialah binaan semantik dan sintaksis dalam kod program yang digunakan untuk perkhidmatan yang disediakan oleh atau.

Antara muka dalam Delphi

Antara muka dalam C++

Peranan antara muka dalam C++ dilakukan oleh kelas abstrak.

Antara muka di Jawa

Mengisytiharkan Antara Muka

Mengisytiharkan antara muka adalah sangat serupa dengan memudahkan pengisytiharan kelas.

Ia bermula dengan tajuk. Pengubah suai dinyatakan dahulu. Antara muka boleh diisytiharkan awam, dalam hal ini ia akan tersedia untuk kegunaan awam, atau pengubah suai akses mungkin tidak ditentukan, dalam hal ini antara muka hanya tersedia untuk pakejnya. pengubah suai abstrak antara muka tidak diperlukan kerana semua antara muka adalah . Anda boleh menentukannya, tetapi tidak disyorkan untuk berbuat demikian supaya tidak mengacaukan .

Ini boleh diikuti dengan kata kunci extends dan antara muka yang akan menjadi antara muka yang diisytiharkan. Terdapat banyak jenis induk, perkara utama ialah tidak ada pengulangan dan hubungan warisan tidak membentuk kebergantungan.

Warisan antara muka sememangnya sangat fleksibel. Jadi, jika terdapat dua antara muka, A dan B, dan B mewarisi daripada A, maka antara muka baharu C boleh mewarisi daripada kedua-duanya. Walau bagaimanapun, adalah jelas bahawa penetapan warisan daripada A adalah berlebihan; semua elemen antara muka ini sudah pun diwarisi melalui antara muka B.

Kemudian masuk pendakap kerinting antara muka direkodkan.

Antara muka awam Drawble memanjangkan Boleh Berwarna, Boleh diubah saiz ( )

Badan antara muka terdiri daripada pengisytiharan, iaitu, dan kaedah abstrak. Semua medan antara muka mestilah awam statik akhir, jadi menyatakan pengubah suai ini tidak perlu dan bahkan tidak diingini, supaya tidak mengacaukan . Memandangkan medan diisytiharkan, ia mesti dimulakan dengan segera.

Antara muka awam Arah ( int KANAN=1; int KIRI=2; int ATAS=3; int BAWAH=4; )

Semua kaedah antara muka adalah abstrak awam dan pengubah suai ini juga adalah pilihan.

Antara muka awam Boleh Alih ( void moveRight(); void moveLeft(); void moveUp(); void moveDown(); )

Seperti yang kita dapat lihat, menerangkan antara muka adalah lebih mudah daripada mengisytiharkan kelas.

Pelaksanaan Antaramuka

Setiap kelas boleh melaksanakan mana-mana antara muka yang tersedia. Dalam kes ini, semua kaedah abstrak yang muncul daripada antara muka atau mesti dilaksanakan supaya kaedah baharu boleh diisytiharkan bukan abstrak.

sebelah. Tidak seperti kebanyakan jenis antara muka yang lain, antara muka dalam OOP ialah elemen formal yang ketat bagi bahasa berorientasikan objek dan, sebagai binaan semantik, digunakan secara meluas oleh kod program.

Penerangan dan penggunaan antara muka

Perihalan antara muka OOP, jika kita mengabaikan butiran sintaks bahasa tertentu, terdiri daripada dua bahagian:

  • Nama antara muka, yang dibina mengikut peraturan yang sama seperti pengecam lain bahasa pengaturcaraan yang digunakan. Bahasa yang berbeza dan persekitaran pembangunan mempunyai konvensyen pemformatan kod yang berbeza, mengikut mana nama antara muka boleh dibentuk mengikut peraturan tertentu yang memudahkan untuk membezakan nama antara muka daripada nama elemen program lain. Sebagai contoh, dalam teknologi COM dan semua bahasa yang menyokongnya, terdapat konvensyen mengikut mana nama antara muka dibina menggunakan corak "I<Имя>”, iaitu, ia terdiri daripada nama bermakna yang ditulis dengan huruf besar, didahului dengan huruf Latin besar I (IUnknown, IDispatch, IStringList, dan sebagainya).
  • Kaedah antara muka. Penerangan antara muka mentakrifkan nama dan tandatangan kaedah yang disertakan di dalamnya, iaitu, prosedur atau fungsi kelas.

Antara muka boleh digunakan dalam dua cara:

  • kelas boleh melaksanakan antara muka. Pelaksanaan antara muka ialah dalam huraian kelas antara muka ini ditunjukkan sebagai boleh dilaksanakan, dan dalam kod kelas semua kaedah yang diterangkan dalam antara muka semestinya ditakrifkan mengikut penuh dengan tandatangan daripada huraian antara muka ini. Iaitu, jika kelas melaksanakan antara muka, semua kaedah yang diterangkan dalam antara muka wujud dan boleh dipanggil untuk sebarang contoh kelas ini. Satu kelas boleh melaksanakan beberapa antara muka pada masa yang sama.
  • Adalah mungkin untuk mengisytiharkan pembolehubah dan parameter kaedah sebagai mempunyai jenis antara muka. Contoh mana-mana kelas yang melaksanakan antara muka boleh ditulis kepada pembolehubah atau parameter sedemikian. Jika antara muka diisytiharkan sebagai jenis pemulangan fungsi, ini bermakna fungsi itu mengembalikan objek kelas yang melaksanakan antara muka.

Biasanya, dalam bahasa pengaturcaraan berorientasikan objek, antara muka, seperti kelas, boleh diwarisi antara satu sama lain. Dalam kes ini, antara muka kanak-kanak merangkumi semua kaedah antara muka nenek moyang dan mungkin menambahkannya sendiri kepada mereka.

Jadi, di satu pihak, antara muka ialah kontrak yang dipersetujui oleh kelas untuk dilaksanakan. melaksanakan Sebaliknya, antara muka ialah jenis data, kerana penerangannya cukup jelas mentakrifkan sifat objek untuk menaip pembolehubah setanding dengan kelas. Walau bagaimanapun, perlu ditekankan bahawa antara muka bukanlah jenis data lengkap, kerana ia hanya menentukan tingkah laku luaran objek. Struktur dalaman dan pelaksanaan tingkah laku yang ditentukan oleh antara muka disediakan oleh kelas yang melaksanakan antara muka; itulah sebabnya tiada "contoh antara muka" dalam bentuk tulennya, dan sebarang pembolehubah jenis "antara muka" mengandungi tika kelas tertentu.

Penggunaan antara muka adalah salah satu pilihan untuk menyediakan polimorfisme dalam bahasa objek dan persekitaran. Semua kelas yang melaksanakan antara muka yang sama, dari segi tingkah laku yang ditakrifkannya, berkelakuan sama secara luaran. Ini membolehkan anda menulis algoritma pemprosesan data umum yang menggunakan antara muka sebagai jenis parameter dan menerapkannya pada objek pelbagai jenis, setiap kali memperoleh hasil yang diperlukan.

Sebagai contoh, antara muka Boleh Diklon boleh menerangkan abstraksi pengklonan (membuat salinan tepat) objek dengan menentukan kaedah Klon yang akan menyalin kandungan objek ke objek lain daripada jenis yang sama. Kemudian mana-mana kelas yang objeknya mungkin perlu disalin mesti melaksanakan antara muka Boleh Diklon dan menyediakan kaedah Klon, dan di mana-mana dalam program di mana pengklonan objek diperlukan, kaedah Klon dipanggil pada objek untuk tujuan ini. Selain itu, kod yang menggunakan kaedah ini hanya perlu mempunyai penerangan tentang antara muka ia mungkin tidak tahu apa-apa tentang kelas sebenar yang objeknya disalin. Oleh itu, antara muka membenarkan sistem perisian dibahagikan kepada modul tanpa kebergantungan kod bersama.

Antara muka dan kelas abstrak

Ia boleh diperhatikan bahawa antara muka, dari sudut pelaksanaan, hanyalah kelas abstrak tulen, iaitu, kelas di mana tiada apa-apa yang ditakrifkan kecuali kaedah abstrak. Jika bahasa pengaturcaraan menyokong pelbagai kaedah warisan dan abstrak (seperti C++), maka tidak perlu memperkenalkan konsep "antara muka" yang berasingan ke dalam sintaks bahasa tersebut. Entiti ini diterangkan menggunakan kelas abstrak dan diwarisi oleh kelas untuk melaksanakan kaedah abstrak.

Walau bagaimanapun, menyokong sepenuhnya warisan berbilang agak kompleks dan menyebabkan banyak masalah, baik pada peringkat pelaksanaan bahasa dan pada peringkat seni bina aplikasi. Memperkenalkan konsep antara muka ialah kompromi yang membolehkan banyak faedah warisan berbilang (khususnya, keupayaan untuk mentakrifkan secara logik dengan mudah set berkaitan kaedah dalam bentuk entiti seperti kelas yang membenarkan pewarisan dan pelaksanaan) tanpa melaksanakannya sepenuhnya dan dengan itu tanpa menghadapi kebanyakan kesukaran yang ditimbulkannya.

Pewarisan berbilang dan pelaksanaan antara muka

Biasanya, bahasa pengaturcaraan membenarkan antara muka diwarisi daripada pelbagai antara muka nenek moyang. Semua kaedah yang diisytiharkan dalam antara muka nenek moyang menjadi sebahagian daripada pengisytiharan antara muka keturunan. Tidak seperti warisan kelas, warisan berbilang antara muka adalah lebih mudah untuk dilaksanakan dan tidak menyebabkan kesukaran yang ketara.

Walau bagaimanapun, satu perlanggaran dengan pelbagai warisan antara muka dan dengan pelaksanaan beberapa antara muka oleh satu kelas masih mungkin. Ia berlaku apabila dua atau lebih antara muka yang diwarisi oleh antara muka baharu atau dilaksanakan oleh kelas mempunyai kaedah dengan tandatangan yang sama. Pembangun bahasa pengaturcaraan terpaksa memilih satu atau kaedah lain untuk menyelesaikan percanggahan dalam kes sedemikian. Terdapat beberapa pilihan di sini:

  • Larangan. Ia hanya dilarang untuk melaksanakan beberapa antara muka dalam satu kelas yang mempunyai kaedah dengan tandatangan yang sama. Jika kelas memerlukan gabungan antara muka yang tidak serasi, pengaturcara mesti memilih cara lain untuk menyelesaikan masalah, contohnya, pilih beberapa kelas, setiap satunya melaksanakan salah satu antara muka yang diperlukan, dan menggunakan contoh mereka bersama-sama.
  • Penyelesaian kekaburan yang jelas. Jika pengkompil mengesan perlanggaran, pengaturcara dikehendaki menunjukkan secara eksplisit kaedah antara muka yang dia laksanakan dan panggil. Iaitu, kaedah dengan nama yang sama dilaksanakan secara berasingan, dan apabila dipanggil, ia ditunjukkan yang mana antara mereka dipanggil. Apabila memanggil kaedah dengan nama yang sama melalui pembolehubah jenis kekaburan antara muka tidak timbul jika antara muka yang digunakan sebagai jenis pembolehubah hanya mempunyai satu kaedah dengan nama diberi. Varian penyelesaian ini ialah penamaan semula eksplisit untuk kaedah yang diwarisi atau dilaksanakan yang mempunyai nama yang sama, yang menyebabkan tiada kaedah dengan nama yang sama dalam kelas pelaksana, tetapi apabila diakses melalui antara muka, pelaksanaan yang diperlukan sentiasa dipanggil.
  • Pelaksanaan umum kaedah dengan nama yang sama. Jika beberapa kaedah dengan tandatangan yang sama diwarisi atau dilaksanakan, maka ia digabungkan dalam antara muka pewarisan, dan dalam kelas pelaksana mereka menerima satu pelaksanaan biasa. Ini berfungsi dengan baik untuk kes di mana kaedah dengan nama yang sama pada antara muka yang berbeza adalah sama dalam kefungsian yang dimaksudkan, tetapi boleh menyebabkan kesan yang tidak diingini jika tingkah laku kaedah ini bertujuan untuk berbeza.

Antara muka dalam bahasa dan sistem tertentu

Pelaksanaan antara muka sebahagian besarnya ditentukan oleh keupayaan asal bahasa dan tujuan antara muka diperkenalkan ke dalamnya. Ciri-ciri menggunakan antara muka dalam bahasa C++, D, Java dan Object Pascal dalam sistem Delphi sangat menunjukkan, kerana ia menunjukkan tiga situasi yang berbeza secara asas:

  • Tiada antara muka dalam subsistem objek bahasa Pascal Objek telah diperkenalkan dalam Delphi 2 untuk membolehkan penulisan dan penggunaan komponen COM. Sehubungan itu, mekanisme antara muka Delphi tertumpu terutamanya pada penggunaan teknologi COM.
  • Di Java, antara muka pada mulanya disertakan dalam bahasa, menjadi sebahagian daripadanya.
  • Dalam C++, secara tegasnya, tiada antara muka sama sekali. Mekanisme yang serupa dengan antara muka (dan sejarah sebelumnya) dilaksanakan dengan cara lain subsistem objek yang sangat berkuasa bahasa ini.

Delphi

Mengisytiharkan Antara Muka

Mengisytiharkan antara muka adalah sangat serupa dengan memudahkan pengisytiharan kelas.

Ia bermula dengan tajuk. Pengubah suai dinyatakan dahulu. Antara muka boleh diisytiharkan awam, dalam hal ini ia akan tersedia untuk kegunaan umum, atau pengubah suai akses mungkin tidak ditentukan, dalam hal ini antara muka hanya boleh diakses oleh jenis pakejnya. Pengubah suai abstrak untuk antara muka tidak diperlukan kerana semua antara muka adalah abstrak. Anda boleh menentukannya, tetapi tidak disyorkan untuk berbuat demikian, supaya tidak mengacaukan kod.

Ini mungkin diikuti dengan kata kunci lanjutan dan senarai antara muka yang antara muka yang diisytiharkan akan diwarisi. Terdapat banyak jenis induk, perkara utama ialah tiada pengulangan dan hubungan warisan tidak membentuk pergantungan kitaran.

Warisan antara muka sememangnya sangat fleksibel. Jadi, jika terdapat dua antara muka, A dan B, dan B mewarisi daripada A, maka antara muka baharu C boleh mewarisi daripada kedua-duanya. Walau bagaimanapun, adalah jelas bahawa penetapan warisan daripada A adalah berlebihan; semua elemen antara muka ini sudah pun diwarisi melalui antara muka B.

antara muka awam Arah (

Int KANAN=1; int KIRI=2; int UP=3; int BAWAH=4;

Semua kaedah antara muka adalah abstrak awam dan pengubah suai ini juga adalah pilihan.