Dziedziczenie w JavaScript – część 1

Z biologicznego punktu widzenia dziedziczenie to przekazywanie cech potomstwu. Możemy po rodzicach odziedziczyć takie cechy jak np. kolor oczu, wzrost, kształt ciała, a nawet niektóre umiejętności (podobno).
Ale jak przekazujemy te cechy ? Czy biologiczne dziedziczenie ma jakieś powiązanie z programowaniem?

Planeta Ziemia – czym jest dziedziczenie? – trochę wstępu z biologii 

Na planecie Ziemia wszystkie stworzenia przekazują cechy potomstwu poprzez tzw. DNA (taki związek chemiczny występujący u wszystkich żywych organizmów). Można powiedzieć, że DNA określa jak wyglądamy i poniekąd jacy jesteśmy, czyli jest takim jakby wzorem, który nas opisuje.

W rozmnażaniu bezpłciowym  nowo powstała komórka jest taka sama jak jej rodzic, ma taki sam DNA – czyli jest jej klonem.

W rozmnażaniu płciowym następuje wymieszanie cech dwójki osobników. Nowy organizm posiada DNA, które jest mieszanką cech rodziców.

Potrzebowałam wprowadzenia w kwestię czym jest DNA, bo to właśnie ten związek jest idealną metaforą dla klasy i świetnie wprowadza w dziedziczenie klasyczne.

Dziedziczenie klasyczne

W programowaniu nie mamy organizmów, z których moglibyśmy skopiować materiał genetyczny,  ale mamy klasy. Same w sobie nie mogą nic zrobić, ale przechowują informacje o tym jaki będzie obiekt, który powstanie na ich bazie. Są taką foremką, wzorem, takim DNA do tworzenia obiektów.

Klasa może dziedziczyć z innej klasy co oznacza, że oprócz swoich atrybutów uzyskuje także dostęp do klasy z której dziedziczy. Czyli tak jakbyśmy wymieszali dwa materiały genetyczne.
W niektórych językach programowania możemy dziedziczyć z wielu klas, mówimy wtedy o wielodziedziczeniu. Czyli wielodziedziczenie to takie rozmnażanie płciowe  – 😉

Planeta Prototypia – czym jest dziedziczenie? – trochę wstępu z innej biologii 

Bardzo ciężko było mi znaleźć metaforę dla dziedziczenia prototypowego. Szukałam po Wikipedii, ale nic. Teraz mi trochę wstyd, że moja wiedza z biologii jest taka słaba, ale jak pomyślę o tych wszystkich dziwnych stworzeniach żyjących na Ziemi to w sumie nie byłam pewna czy któreś przypadkiem nie nadawałoby się na metaforę. Niestety, nie znalazłam.
Ale skoro nie ma na Ziemi to nic nie stoi na przeszkodzie, żeby poszukać gdzieś indziej.

Planeta ma nazwę Prototypia, mieszkają na niej prototypianie.  Istoty  o czarnych dużych oczach,  cienkiej, długiej szyji i nieproporcjonalnie długich rękach, a także krótkich nóżkach.

Prototypianie są trochę podobni do ludzi, potrafią się porozumiewać, myślą, pracują, śmieją się i smucą. Oprócz innego wyglądu różni ich od ludzi jeszcze jedna istotna sprawa. Otóż prototypianie w inny sposób dziedziczą cechy po rodzicach. Nie mają DNA, a ich komórki są trochę inaczej zbudowane. Prototypianie są  połączeni ze swoimi przodkami za pomocą czegoś na miarę naszego WIFI – takie niewidoczne połączenie z innym organizmem.

Kiedy na tej planecie pojawia się nowy członek rodziny, może on korzystać z cech swoich przodków.
Wyobraźcie sobie taką sytuację: mama po 3 latach od porodu nauczyła się języka polskiego Ziemian i wszystkie jej dzieciaki też nagle umieją mówić po polsku!
Kiedy prototypianin chce skorzystać z jakiejś umiejętności i jego mózg stwierdza, że jej nie posiada, następuje połączenie z rodzicem w poszukiwaniu tej cechy. Jeśli cecha ta zostanie znaleziona wraca do dziecka, jeśli nie, następuje połączenie z kolejnym przodkiem np. z dziadkiem itd, aż do Ojca Wszystkich Ojców.
Ale kim jest Ojciec Wszystkich Ojców ? To osobnik, od którego dziedziczą wszyscy prototypianie – taki praprzodek.

Podsumowując: każdy prototypianin na tej planecie „dziedziczy” cechy po Ojcu Wszystkich Ojców.
Wyobraź sobie że te dwa stworki wyżej to dwa obiekty. Ten młody i szczupły to obiekt, który właśnie został przez Ciebie stworzony, a ten stary bez zębów to Ojciec Wszystkich Ojców.  Nie musisz nic robić. Tworzysz obiekt, a połączenie robi się samo.  Dzięki temu ten młodzieniec może korzystać z doświadczenia swojego przodka.
Cudowne prawda? To jak to się ma do JavaScript i prototypów?
Zajrzyj do kolejnego wpisu, w którym dowiesz się jak to porównanie wygląda w rzeczywistości. – Dziedziczenie w JavaScript – część 2

Komentarze
 

Agata Malec-Sromek