Opičí náplast
Monkey patch ( monkey patch ) - v programování možnost měnit metody a hodnoty atributů třídy programu během jeho provádění ( runtime ). Technologie může být použita v mnoha dynamických programovacích jazycích ( JavaScript , Perl , PHP , Python , Ruby , Lua ).
Původ názvu metody
Pojem "opičí patch" pochází z původního termínu "guerilla patch " ( guerilla patch ), který znamenal nenápadnou záměnu kódu během provádění programu. Slovo guerilla (partyzán) se shoduje se slovem gorila (gorila), a tak se výraz z „guerilla patch“ změnil na „gorilla patch“ a následně na „monkey patch“.
Přesná definice a míra negativity termínu závisí na programovacím jazyku, ve vztahu ke kterému je používán. V Ruby, Pythonu a mnoha dalších dynamických programovacích jazycích se tedy termín „opičí záplata“ používá pouze v souvislosti s dynamickou změnou tříd nebo modulů, například za účelem opravy chyby nebo přidání nové funkce v externím kódu. Stejný přístup v jiných programovacích jazycích může být nazýván odlišně, například „horké opravy“ ( hot fix ).
Aplikace
- Dynamická substituce metod, funkcí a atributů kódem, například za účelem vytvoření stub funkce pro testy ;
- Změna nebo rozšíření funkčnosti externích knihoven nebo produktů při absenci zdrojového kódu nebo pokud jej nechcete v budoucnu podporovat;
- Náhrada objektů v paměti během provádění programu, nikoli změna zdrojového kódu programu;
- Distribuce oprav pro produkt, který poběží nezávisle na hlavním kódu produktu.
Potenciální problémy
- Při aktualizaci produktu, na který je aplikován „opičí patch“, může dojít k nepředvídaným změnám v chování programu, kdy samotný patch začne vycházet z nesprávných předpokladů o kódu nahrazovaných funkcí. Z tohoto důvodu takové záplaty nejčastěji kontrolují některé specifické podmínky, například verzi produktu;
- Pokud se současně několik patchů pokusí nahradit stejnou metodu, pak zpravidla první „vyhraje“ a druhý bude fungovat na základě špatné myšlenky, že on sám změnil kód;
- Nejzřetelnějším problémem je, že zdrojový kód a pozorované chování spustitelného programu se mohou velmi lišit a pro člověka, který nezná „opičí patch“, bude těžké najít v kódu problém.
Použití takového přístupu navíc porušuje princip zapouzdření objektově orientovaného programování .
Odkazy