Aplapp
Monkey patch ( monkey patch ) - i programmering , möjligheten att ändra metoder och värden för programklassattribut under dess körning ( runtime ). Tekniken kan användas i många dynamiska programmeringsspråk ( JavaScript , Perl , PHP , Python , Ruby , Lua ).
Metodnamnets ursprung
Termen "monkey patch" kommer från den ursprungliga termen "gerilla patch " ( gerilla patch ), vilket innebar oansenlig kodbyte under programexekveringen. Ordet gerilla (gerilla) är konsonant med ordet gorilla (gorilla), och därmed förvandlades termen från "gerillaplåster" till "gorillaplåster", och sedan till "applåster".
Den exakta definitionen och graden av negativitet av termen beror på vilket programmeringsspråk det används i förhållande till. Så i Ruby, Python och många andra dynamiska programmeringsspråk används termen "monkey patch" endast i relation till att ändra klasser eller moduler dynamiskt, till exempel för att fixa en bugg eller lägga till ny funktionalitet i extern kod. Samma tillvägagångssätt i andra programmeringsspråk kan kallas annorlunda, till exempel "hot fixes" ( hot fix ).
Applikation
- Dynamisk kodsubstitution av metoder, funktioner och attribut, till exempel för att skapa en stubbfunktion för tester ;
- Ändra eller utöka funktionaliteten för externa bibliotek eller produkter i avsaknad av källkod eller om du inte vill stödja det i framtiden;
- Ersättning av objekt i minnet under körningen av programmet, och inte en ändring i programmets källkod;
- Distribuera korrigeringar för en produkt som kommer att köras oberoende av huvudproduktkoden.
Potentiella problem
- Vid uppdatering av en produkt som en "monkey patch" appliceras på kan oförutsedda förändringar i programmets beteende inträffa, när själva patchen börjar baseras på felaktiga antaganden om koden för de ersatta funktionerna. Av denna anledning kontrollerar sådana patchar oftast för vissa specifika förhållanden, till exempel versionen av produkten;
- Om flera patchar samtidigt försöker ersätta samma metod, kommer som regel den första att "vinna", och den andra kommer att fungera på grundval av fel idé att han själv har ändrat koden;
- Det mest uppenbara problemet är att källkoden och det observerade beteendet för det körbara programmet kan vara väldigt olika, och det kommer att vara svårt för en person som inte är medveten om "monkey patch" att hitta ett problem i koden.
Dessutom bryter användningen av ett sådant tillvägagångssätt mot principen om inkapsling av objektorienterad programmering .
Länkar