Myślałem, że tłumaczenie tych słów w kontekście programowania jest jednoznaczne, ale po dyskusji z @somekind wychodzi na to, że nie. Wynurzyłem się ze sprawdzaniem słowników, ale to było przedwczesne, bo słowniki polsko-angielskie często podają wiele tłumaczeń (kilka, czy nawet kilkanaście) dla jednego hasła i w ten sposób można nagiąć tłumaczenie w każdą stronę. Tymczasem w IT potrzebna jest precyzja, więc jeśli ktoś używa słowa "przesłanianie" to powinno to być jednoznaczne.
Tłumaczenie "method overriding" na "nadpisywanie metod" jest np w https://pl.wikipedia.org/wiki/Nadpisywanie_metod i https://pl.wikibooks.org/wiki/C%2B%2B/Funkcje_wirtualne .
Strony https://pl.wikipedia.org/wiki/Przes%C5%82anianie i https://en.wikipedia.org/wiki/Variable_shadowing są w Wikipedii połączone jako wersje językowe, więc to wskazuja na to, że "przesłanianie" to "variable shadowing".
Artykuł https://dzone.com/articles/variable-shadowing-and-hiding-in-java jest o tyle fajny, że pokazuje naraz wszystkie 3 rzeczy (method overriding, variable shadowing i variable hiding) i pokazuje między nimi różnice. Jedną z różnic jest to, że nadpisywanie wymaga zgodności sygnatur (metody muszą być override compatible), natomiast przesłanianie czy ukrywanie może wiązać się z zupełną zmianą typu.
Jeśli chodzi o Javę to:
- przesłonięte (variable shadowing) czy ukryte (variable hiding) pola można odsłonić / odkryć bez uciekania się do refleksji (refleksją można zrobić bardzo dużo rzeczy, więc takie zabawy się nie liczą)
- odsłanianie jest proste, np w Javowym idiomie z konstruktora
this.cośtam = cośtam
użyłemthis.
by odsłonić polecośtam
z obiektu, bo jest zasłonięte parametremcośtam
z konstruktora - odkrywanie też jest proste. Jeśli mam
class Parent { String x; }
orazclass Child extends Parent { int x; }
oraz referencjęChild ref = ...
to mogę zrobić np((Parent) ref).x = "" + ref.x
- odsłanianie jest proste, np w Javowym idiomie z konstruktora
- nadpisywanie metody z klasy Parent w klasie Child oznacza, że do nie mogę na obiekcie klasy Child odpalić implementacji tej metody z klasy Parent. Nie da się w miejscu wywołania metody na obiekcie odwrócić nadpisania.
Jak tłumaczycie te pojęcia sami i z jakimi tłumaczeniami się spotykacie?