..
Polymorfismi on ohjelmointi tekniikka, joka mahdollistaa käytön osien lähdekoodia, mutta pysyy ennallaan, tuottaa run-time käyttäytymistä.
Luominen polymorfinen koodi on erityinen merkitys olio-ohjelmointi: se tarkoittaa työpaikkojen taksonomia kaikkien luokkien jotka toteuttavat rajapinnan.
Joten jos esimerkiksi minun rajapinta määrittelee menetelmän "getArea", kukin luokka, joka tätä liittymää on menetelmä "getArea": tämä antaa meille mahdollisuuden kirjoittaa polymorfinen menetelmiä, menetelmiä, voivat muuttaa algoritmin suoritusaika Riippuen objektin tyypin, joka välitetään argumenttina.
Polymorfismista perinteinen OOP kielillä
Javalla - mutta sama pätee C + + ja mitään muuta kieltä, Olio (OO) valmistui, me sitten käsi tapauksessa Ruby - esimerkiksi:
käyttöliittymä IFormaGeometrica
{
void getArea ();
}
public class Kolmio toteuttaa IFormaGeometrica
{
@ Override
public int getArea ()
{
palata (* this.base this.altezza) / 2;
}
}
Tässä tapauksessa me määrittelemme käyttöliittymän IFormaGeometrica jonka mukaan jokainen esine, joka "on" FormaGeometrica getArea on menetelmä - kuten kolmio luokka, joka on FormaGeometrica, on oma täytäntöönpanon getArea, joka antaa meille mahdollisuuden kirjoittaa ohjelmaan osaa laskea ala mitään geometrisen muodon, onko tämä nyt läsnä koodin että toteutetaan tulevaisuudessa, muuttamatta alkuperäistä lähdekoodia.
Itse asiassa, jos kirjoitan luokka Laskin:
public class Laskin
{
public static void main (String [] args)
{
Valikoima muodostaa <IFormaGeometrica> =
<IFormaGeometrica> Uusi ArrayList ();
forme.add (uusi Kolmio ());
forme.add (uusi Square ());
forme.add (uusi Pentagon ());
varten (IFormaGeometrica g: lomake)
{
System.out.println (g.calcolaArea ());
}
}
}
Tämä voi kestää syötteenä tahansa kokoelma geometrisia muotoja, edellyttäen että jokaisen objektin kokoelma on toteutettava käyttöliittymä IFormaGeometrica, ja että on pohjimmiltaan menetelmä getArea.
Tämä esimerkki Java on puhtaasti akateeminen: Itse luultavasti rakentaja kunkin luokan otamme mukaan tulo toimenpiteitä puolin geometrisen muodon, näkökulma, ja niin edelleen.
Tavoite saavutetaan: kirjoitimme luokan joka voi tulostaa videon ala mitään geometrisen muodon. Toistan: tämä on koodi, joka on jo toteutettu (kuten tapauksessa kolmio), joka toteutetaan tulevaisuudessa.
Paitsi: jos täytäntöönpano laskeminen kolmion alueella sisälsi bugin, voin vaihtaa luokkaa ilman kirjoittaa luokan kolmio Laskin. Ehkä se lähetettiin palvelimelle, tarvitsee käynnistää jokainen muutos: tässä tapauksessa ei tarvitse muuttaa koodia on suuri etu. Mutta muuten, se on aina edullista rajoittaa osien koodia että "muutos", koska jokainen muutos tuo mukanaan mahdollisia vikoja. Toisaalta on hyvä ohjelmointi käytännössä aina varmuudella tietää, mitkä osat koodia, pysyvät ennallaan.
Mitä tapahtuu "kulissien takana" on, että kääntäjä varmistaa, että jokaiseen objektiin polymorfisen koodi tärkein menetelmä luokan Laskin toteuttaa liitäntä. Näin he sanovat on ilmaus menetelmää käyttäen suunnittelun sopimuksella "sopimusta kunnioitetaan."
Jos ei, jos tämä on "muotoja" on kohde luokan että emme toteuttaa IFormaGeometrica virhe käännöksen yhteydessä, tai ei onnistu ajaa ohjelmaa, koska kääntäjä huomaisivat virheen.
Polymorfismista Ruby
Mutta mitä tapahtuu Ruby? Ja "mahdollista Ruby, joka ei käännetä vaan tulkita kieltä, kirjoittamista monimuotoisia menetelmiä?
Kyllä, se on varmasti mahdollista, mutta syvällinen ero "filosofisia" kuin OO kielellä ja käännetty, joka
voisimme kuvailla sitä. OO ohjelmointi Java ja Classic, osoittaa, että esine kuuluu tietyntyyppisiä esineitä (joka toteuttaa tietyt käyttöliittymä) on nimenomaisesti vastustaa peräisin vanhemman luokan: Periaatteessa joudut käyttämään tekniikoita perintöveron (peritäänkö by luokka, abstrakti luokka tai rajapinta).
Se olisi kuin sanoisi: Voit selvittää, onko tämä ankka edessäni, otan hänen DNA ja tutkimus laboratoriossa nähdä, jos se on ankka.
Ruby käytät "ankka test" (ankka testi) keksi James Riley (katso http://en.wikipedia.org/wiki/Duck_typing ):
jos se kävelee kuin ankka ja quacks kuin ankka, niin se on ankka.
(Joka muuten on mitä tekee jokainen meistä nähdessään ankka).
Mitä tämä tarkoittaa? Se tarkoittaa, että Ruby, ja yleisemmin olio komentosarjakieliä sekä Python ja Perl, ei tarvitse määrittää käyttöliittymän, eikä nimenomaan perintö suhteita luokkien välillä.
Tulkki yksinkertaisesti "luottamus", että ohjelmoija, menetelmä vaiheet kun polymorfisen objekti, joka "olisi pitänyt" tietyllä tavalla, meillä on todellakin.
| |
Ruby ja Ruby on Rails (kurssi)
Luo ohjelmistojen ja web-sovellusten kanssa Ruby ja RoR. Alkaen 39 €. |