Skądinąd wiadomo, że metoda toString
w Javie jest zdefiniowana w klasie Object
; co za tym idzie, jest dziedziczona przez wszystkie obiekty; co za tym idzie, funkcjonalność tej metody jest dostępna w nich pod tą samą nazwą.
Metodę o nazwie toString
zawiera także JavaScript. Nie wiem, na ile jest to nazwa wybrana niezależnie, a na ile zależnie od nazwy w Javie. Fakt jest faktem: nazwa jest taka sama. I podobnie do Javy – wszystko, co jest "obiektem" (np. {}
), ma dostęp do funkcjonalności tej metody pod tą nazwą.
Z powyższych przykładów wynika to, że każdy obiekt lub "obiekt" w tych językach może mieć dostęp do funkcjonalności metody nazwanej tak samo. Nie wiem, na ile wynika to z chęci zachowania podobieństwa między tymi językami przez ich autorów (raczej JS do Javy), a na ile – z chęci zastosowania podobnej nazwy dla podobnej funkcjonalności.
Inny przykład: mamy operatory +
, -
itd. Mniej lub bardziej może być to prawda, że wszystkie języki programowania korzystające z nich dziedziczą ich formę – czyli znaki +
, -
itd. – z matematyki. A przynajmniej tak mi się wydaje (@jarekr000000, wiesz coś o tym?). Niemniej fakt jest faktem, że "nazwy" są takie same w wielu językach.
No, być może są jakieś języki nazywające funkcjonalność dodawania add
zamiast +
, ale nie pamiętam w tej chwili. Asembler? Ale nawet jeśli wziąć pod uwagę, że w danym języku występuje procedura/funkcja/podprogram add
zamiast operatora +
(bo np. w ogóle nie ma w nim konceptu "operatorów"), to nadal domyślam się, że nazwa add
może w wielu językach znaczyć to samo – wynik dodawania liczb.
(Nie będę już podawać tutaj przykładów innych działań najpewniej dziedziczonych z matematyki, bo sądzę, że wiadomo, o co chodzi).
Być może te dwa przykłady wcale nie są takie oczywiste, lub nawet są niepoprawne – ale według mnie dobrze opisują mój problem. Otóż zastanawiam się, z czego wynika takie podobieństwo nazw. Konkretne pytania:
- Na poziomie danego języka programowania mógłbym zapytać: czy to, że wszystkie obiekty mogą korzystać z nazwy
toString
podczas wykorzystywania (opcjonalnie: definiowania) funkcjonalności zwracania swojej reprezentacji "tekstowej", wynika wyłącznie z dziedziczenia, czy zarówno z dziedziczenia, jak i z chęci zachowania podobieństwa nazw dla tych samych funkcjonalności, czy też wyłącznie z chęci zachowania podobieństwa nazw dla tych samych funkcjonalności? A może jeszcze z czegoś innego? - Na poziomie międzyjęzykowym, lub nawet "międzydziedzinowym", mógłbym zapytać: czy to, że w dwóch językach programowania / dziedzinach nauki (np. informatyka i matematyka) koncepty o podobnych nazwach są definiowane podobnie (np. operator
+
jest definiowany podobnie tu i tu (czy nie?)), wynika wyłącznie z chęci zachowania podobieństwa między podobnymi konceptami w tych językach / dziedzinach, czy też z tego oraz czegoś innego, czy też wyłącznie z czegoś innego?
Jeśli coś napisałem zbyt trudno, chętnie wyjaśnię.
PS. Może doprecyzuję punkt nr 1: mogę sobie wyobrazić, że w danym języku programowania różne klasy miałyby zadeklarowane metodę o funkcjonalności zwracania reprezentacji "tekstowej" swoich obiektów pod różnymi nazwami. I na przykład byłoby w nim tak, że obiekt klasy String
miałby metodę stringToString
, a obiekt klasy Object
miałby metodę objectToString
. Niby nazwy podobne – ale już nie takie same. Ewentualnie mogłyby być jeszcze bardziej inne – na przykład stringToString
oraz getMeAsString
. Albo w ogóle niezwiązane ze słowem (ciągiem znaków) string.*
PS2. * Więc mogę sobie coś takiego wyobrazić, ale w rzeczywistości widzę, że w Javie i JavaScripcie mamy toString
dla wszystkich obiektów. Zastanawiam się więc, z czego to dokładnie wynika.
UPDATE: Interesowałyby mnie także wszelkie zasady i reguły w programowaniu czy inżynierii oprogramowania (np. tzw. principles), które byłyby związane z tym problemem. Obecnie nie wiem o żadnej.