Çoklu gönderim

Çoklu gönderim bazılarının bir özelliktir nesne yönelimli dillere veya fonksiyonunda bir ettiği fonksiyon veya yöntem onun birden fazlasına için özelleşmiş edilebilir biçimsel parametreler . Daha sonra multimethod denir .

Bu nedenle , bir çoklu yöntemin uzmanlaşması, uzmanlaşmanın yalnızca ilk örtük parametreye bağlı olduğu klasik nesne yönelimli programlama dillerinden farklı olarak, nesne parametrelerinin birkaçının dinamik türüne bağlı olabilir this.

Kullanılacak fonksiyonun seçiminin , derleme zamanında gerçekleştirilen çoklu bir gönderime karşılık gelen, parametrelerinin statik tipine bağlı olduğu birçok programlama dilinde mevcut olan fonksiyon aşırı yükünden farklıdır .

İlk nesne yönelimli bir ortam bu özelliği var ve en iyi bilinen etmek olduğunu Common Lisp Object Sistemi , fakat gibi diğer diller Dylan , Slate, Cecil, GNU Guile , seed7, Julia ve Java soyundan Güzel teklifi benzer özellikler. C ++ 'da çoklu yöntemleri işlevler ve şablonlar olarak çeşitli şekillerde uygulamak mümkündür .

Örnekler

Yalnızca tek bir argüman üzerinde gönderime sahip olabilen Java gibi dillerde , ziyaretçi tasarım modelini kullanırız . C ++ 'da, ziyaretçi tasarım modelinin ve şablon mekanizmasının ortak kullanımı , birkaç argüman üzerinde bir gönderi elde etmeyi mümkün kılar.

Öte yandan Python , multimethods.py modülünün içe aktarılmasını gerektirir.

Ortak Lisp

Ya çoklu yöntem collision-avec :

(defmethod collision-avec ((x asteroide) (y asteroide)) ;; cas où un astéroïde frappe un astéroïde ) (defmethod collision-avec ((x asteroide) (y vaisseau)) ;; cas où un astéroïde frappe un vaisseau spatial ) (defmethod collision-avec ((x vaisseau) (y asteroide)) ;; cas où un vaisseau spatial frappe un astéroïde ) (defmethod collision-avec ((x vaisseau) (y vaisseau)) ;; cas où un vaisseau spatial frappe un vaisseau spatial )

Notlar ve referanslar

  1. (en) c ++ 'da çoklu gönderim kitaplığı.
  2. (tr) multimethods.py .

Ayrıca görün