Co oznacza ' pod maską ' oznacza programowanie?

Najlepsza odpowiedź

Pomyśl o samochodzie. Możemy (i często to robimy) prowadzić samochód bez zrozumienia, jak to działa. Większość ludzi nigdy nie patrzy na silnik samochodu, który znajduje się pod maską (w Ameryce nazywamy go maską , ale na przykład Brytyjczycy nazywają to maska ​​).

Oprócz silnika dostępna jest skrzynia biegów , który pobiera moc generowaną przez silnik i przekazuje do układu napędowego , który ostatecznie zabiera tę moc i kręci kołami. Większość ludzi nie rozumie żadnego z tych szczegółów ani nie musi tego robić, aby obsługiwać samochód.

Jako programista często warto wiedzieć, co się dzieje pod maską, ponieważ daje to wgląd w rzeczy, których nie widać.

Dwa przykłady Pythona, które mogą okazać się pomocne:

Zmienne w Pythonie są często wyjaśniane zaczynając programistów jako nazwane pola , w których można umieszczać dane. Więc kiedy piszesz

x = 1

w efekcie tworzysz pudełko, nadając mu nazwę x i wstawiając 1 do pudełka. Kiedy później przyjrzysz się pudełku, zobaczysz, że jest w nim 1.

Jednak tak naprawdę nie o to chodzi pod maską . Zmienna x jest odniesieniem lub etykietą, która mówi, gdzie w rzeczywistości znajduje się 1. Pomyśl o karteczce z „x”, która jest przyklejona do pudełka zawierającego 1. Jeśli zdecydujesz się umieścić coś innego w pudełku, być może 2, Python utworzy zupełnie nowe pudełko i przesunie notatka z pierwszego pudełka do drugiego. Można to łatwo zademonstrować za pomocą funkcji id() Pythona, która skutecznie informuje mnie, gdzie obiekt znajduje się w pamięci Pythona (to nie jest do końca prawdą, ale wymaga dygresji, która nie jest już pomocna za odpowiedź na pytanie).

>>> x = 1

>>> id(x)

4501308752

>>> x = 2

>>> id(x)

4501308784

Możesz zobaczyć, że x był w określonym miejscu i kiedy Zmieniłem jego zawartość, x faktycznie została przeniesiona. Dlaczego tak się dzieje, to kolejna dygresja, która również nie jest tutaj ważna. Faktem jest, że x przesunięte w tym sensie, że dane, do których odwołuje się x, znajdują się teraz w innym miejscu.

Początkujący programiści Pythona tego nie wiedzą, a co ważniejsze, nie muszą tego wiedzieć . Bardzo dobrze jest użyć analogii nazwanego pudełka.

Drugi przykład jest bardziej złożony i może być trudny do zrozumienia dla nowicjuszy.

Model danych Pythona odwzorowuje szereg tak zwanych funkcji wbudowanych na metody klas pod maską . Lubię to wyjaśniać, używając programu telewizyjnego Stranger Things jako punktu odniesienia. W tym programie jest do góry w dół , co przypomina alternatywny wszechświat, w którym rzeczy są rozpoznawalne, ale pomieszane. Rozważmy funkcję len() w języku Python. Jest to wymienione w podręczniku jako Funkcja wbudowana , która zwraca liczbę elementów w czymś. Możesz obliczyć długość string (czyli kontenera ), list (także kontener) itd.

Początkujący programiści Pythona są zwykle uczeni, że len() jest po prostu funkcją wbudowaną i działa na dowolny pojemnik. W rzeczywistości dzieje się pod maską , że Python tłumaczy wywołanie do len() na metodę w do góry nogami o nazwie \_\_len\_\_(). Jeśli obiekt, który przekazujesz do len(), ma metodę \_\_len\_\_(), zadziała. Jeśli nie, nie będzie. Dlatego na przykład nie można wywołać len() na liczbie całkowitej:

>>> len(5)

Traceback (most recent call last):

File "", line 1, in

TypeError: object of type "int" has no len()

Początkujący programista Pythona rozumie, że oznacza to, że liczba całkowita nie jest kontenerem, a zatem nie ma co liczyć.Ale łatwo jest utworzyć typ liczby całkowitej, dla którego możemy wywołać funkcję len():

>>> class MyInt(int):

... # create an "upside down" method for len()

... def \_\_len\_\_(self):

... return 1

...

>>> x = MyInt(13)

>>> x

13

>>> len(x)

1

Utworzyłem nowy typ o nazwie MyInt, zdefiniowałem zmienną x typu MyInt i był w stanie zadzwonić pod numer len(). Mój len() jest całkiem bezużyteczny (), ale udowadnia, że ​​len() można wywołać dla dowolnego obiektu, nie tylko „kontenera”. ” W praktyce, jako programista, mógłbym stworzyć własny obiekt Organization, który reprezentuje firmę lub inną organizację. i mogę chcieć zadzwonić do len() na obiekt Organization i poprosić o zwrócenie liczby lat istnienia organizacji .

Więc rozumiejąc, co się dzieje pod maską, możemy pójść dalej jako programiści.

Odpowiedź

Myślę, że inni dobrze wyjaśnili, co „ pod maską ”oznacza ogólnie.

Kilka uwag do wyjaśnienia: komputer w swojej najprostszej postaci to procesor i pamięć główna. Procesory czytają bardzo szczegółowe instrukcje i przenoszą wartości w pamięci. Pamięć jest podzielona na niezliczone komórki, każda komórka ma adres.

„Pod maską” pamięć komputera wygląda następująco:

(Źródło: https://chortle.ccsu.edu/AssemblyTutorial/Chapter-10/memory01.gif)

Podczas pracy w języku wysokiego poziomu (zakładam, że pracujesz z Javą lub Pythonem lub coś podobnego), trudno zrozumieć, dlaczego tak się dzieje. Na przykład rozważmy listę połączoną. Być może zobaczyłeś obrazek bąbelków z liczbami ze strzałką wskazującą na inny bąbelek obok.

Coś takiego:

To wszystko dobrze i dobrze pomaga zrozumieć, jak działają listy połączone w porównaniu, powiedzmy, z tablicą; jednak „pod maską” jest zupełnie inaczej.

Jak powiedzieliśmy, wszystko w komputerze to komórki pamięci z wartościami. Węzeł z połączoną listą, podczas wizualizacji w pobliżu swojego sąsiada, może znajdować się setki lub tysiące bajtów od swojego sąsiada. Pod maską strzałki, które widzisz na obrazku, są w rzeczywistości wskaźnikami, a wskaźnik może odnosić się do dowolnej komórki w pamięci. W szczególności wskaźnik odwołuje się do adresu następnego węzła na liście.

Mam nadzieję, że ten przykład pomoże wyjaśnić, o czym on mówi.

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *