..


Sponsor Bağlantılar

Polimorfizm ve Ruby Duck yazma

Alessio Saltarini tarafından yazılmış Makale
2 Sayfa 1

Çalışma zamanı davranışları oluşturmak için değişmeden kalırken polimorfizmi, kaynak kodu parçalarının kullanımı sağlayan bir programlama tekniğidir.

Polimorfik kodu oluşturma nesne tabanlı programlama belirli bir anlamı vardır: bir arabirimini uygulayan tüm sınıfların bir taksonomi yaratmak demektir.

Yani, örneğin, benim arabirimi bir yöntem "getArea", bu arayüz bir yöntem "getArea" olacak uygulayacak her sınıfını tanımlar: Bu bize, kendi algoritması yürütme değiştirebilirsiniz yöntemler polimorfik yöntemleri yazmanıza olanak sağlar argüman olarak geçirilen nesne tipine bağlı olarak.

Geleneksel OOP dillerde Polimorfizmi

Java - ama aynı için de geçerlidir C + + ve başka bir dil, tamamlanmış nesne yönelimli (OO), biz o zaman Ruby durumunda eli olacak - örneğin:






 arayüz IFormaGeometrica







 {



   



 void getArea ();







 }









 public class Üçgen IFormaGeometrica uygular







 {



 



 @ Override



 



 public int getArea ()



 



 {



  



 return (* this.base this.altezza) / 2;



 



 }







 }



Bu durumda biz "olan" her nesnenin bir FormaGeometrica getArea bir yöntem olacağı devletler arayüzü IFormaGeometrica tanımlamak - böyle Üçgen sınıf olarak, bir FormaGeometrica, bize bir program yazmasına olanak tanır getArea kendi uygulaması vardır şimdi kodu mevcut ve bu özgün kaynak kodu değiştirmeden, gelecekte uygulanacak olup, herhangi bir geometrik şeklin alanını hesaplamak mümkün.

Aslında, bir sınıf Hesaplama yazarsanız:






 kamu son sınıf Hesaplama







 {





 



 public static void main (String [] args)



 



 {



  



 Toplama formları <IFormaGeometrica> =



          



 <IFormaGeometrica> Yeni ArrayList ();





  



 forme.add (yeni Triangle ());



  



 forme.add (yeni Meydanı ());



  



 forme.add (yeni Pentagon ());





  



 (: Form IFormaGeometrica g)



  



 {



   



 System.out.println (g.calcolaArea ());



  



 }



 



 }







 }



Bu koleksiyon her nesne arayüzü IFormaGeometrica uygulamalıdır şartıyla, girdi olarak geometrik şekillerden herhangi bir tahsilat alabilir ve bu aslında bir yöntem getArea vardır. Java Bu örnek tamamen akademik gibidir: aslında, muhtemelen her sınıfın yapıcı, biz böyle devam geometrik şekli, eğik ve iki tarafın giriş önlemler ve olacaktır.

Amacı elde edilir: Biz video için herhangi bir geometrik şeklin alanını yazdırabilirsiniz bir sınıf yazdı. Tekrarlıyorum: Bu gelecekte yürütülüyor zaten (üçgen olduğu gibi) uygulamaya konmuştur kodu vardır.

Sadece: Üçgen alan hesaplama uygulanması bir hata içeriyorsa, ben sınıf üçgen Hesap yeniden yazmak zorunda kalmadan sınıf değiştirebilirsiniz. Belki de her değişikliği yeniden başlatmak için gereken bir sunucuda konuşlandırıldı: Bu durumda kodunu değiştirmek zorunda büyük bir avantaj değil. Her değişim bir potansiyel hata getirir çünkü Ama bu başka, her zaman kod parçalarını bu "değişim" sınırlamak için avantajlıdır. Tersine, her zaman değişmeden kalır kod parçaları kesin olarak bilmek iyi bir programlama uygulamadır.

Ne "perde arkasında" olur derleyici sınıf Hesaplama ana yöntemi polimorfik kod her nesne arabirimini uygulayan emin olmasını sağlamasıdır. Bu şekilde, bu sözleşme ile tasarım metodolojisi kullanarak bir ifade olduğunu söylemek, "sözleşme saygı duyulur."

Eğer değilse, "form" olup olmadığını biz IFormaGeometrica derleme zamanında bir hata uygulamak olmaz bir sınıfın bir nesnesi varsa veya derleyici hata fark çünkü, programı çalıştırmak için yönetmez.

Ruby polimorfizmi

Ama Ruby ne olur? Ve derlenmiş ancak dil yorumlanır, polimorfik yöntemleri yazma değil Ruby, in 'mümkün?

Evet, kesinlikle mümkündür, ancak, OO dilden daha "felsefi" ve derlenmiş derin bir fark var ki

bunu tarif olabilir. Java ve klasik OO programlama, bir nesne nesneleri belirli bir türü (belli bir arayüzü uygulayan) açıkça bir üst sınıf türetmek itiraz gerekir ait olduğu kurmak için: temelde (kalıtım yoluyla miras teknikleri kullanmak gerekir Bir sınıfın, soyut bir sınıf veya bir arabirim ile).

Bu demek gibi olacaktır: Bu önümde bir ördek olup olmadığını belirlemek için, ben ördek olup olmadığını görmek için laboratuvarda yaptığı DNA ve çalışma alır.

Ruby James Riley (bkz. tarafından icat "ördek testi" (ördek testi) kullanıyorsanız http://en.wikipedia.org/wiki/Duck_typing ):

bir ördek ve bir ördek gibi quacks gibi yürür, sonra bir ördek olduğunu.

(Bu arada o bir ördek gördüğünde her birimiz kılan hangi).

Bu ne demek? Bu demektir ki Ruby, ve daha genel nesne tabanlı komut dosyası dilde yanı sıra, Python ve Perl, arayüzü belirtmek gerek, ne de sınıflar arasındaki açık ilişkiyi.

Tercüman belirli bir şekilde "olmalıdır" polimorfik bir nesne, aslında olduğunda programcı, yöntem adımları basitçe "güven".

Aynı Kategoride ...
E-Öğrenme
Ruby on Rails ve Ruby (Ders) Ruby on Rails ve Ruby (Ders)
Ruby ve RoR ile yazılım ve Web uygulamaları oluşturun. En düşük € 39.
Sponsor Bağlantılar