Spróbujmy wyobrazić sobie chemię bez Układu Okresowego Mendelejewa (1869). Ile elementów trzeba byłoby zapamiętać, i to w dowolnej kolejności... (Wtedy — 60.)
Wystarczy pomyśleć o jednym lub kilku językach programowania jednocześnie. Te same uczucia, ten sam kreatywny bałagan.
A teraz możemy przeżyć emocje chemików XIX wieku, kiedy zaproponowano im całą ich wiedzę, a nawet więcej, w jednej tabeli okresowej.

Książka „Matrioszka C. Warstwowy system języka programu” przedstawia wszystkie jednostki języka C jak na dłoni. Umożliwia to uporządkowanie ich, poprawę przestarzałych informacji, a nawet doprecyzowanie samego pojęcia programu.
Dziś informacje na temat programowania potrzebują systematyzacji nawet bardziej niż chemiczne elementy 150 lat temu.
Pierwsza potrzeba — nauczanie. Mendelejew zaczął tworzyć swój system, gdy stanął przed pytaniem — od którego elementu zacząć wykłady: O, H, N, He, Au... Przy tym było mu łatwiej — uczył chemii najlepszych — studentów Uniwersytetu w Petersburgu. A programowanie już uczy się w szkole i wkrótce zacznie w przedszkolu.
Drugą potrzebą — podejście naukowe. Dzięki Układowi Okresowemu odkryto nowe elementy i poprawiono informacje o starych. Pomógł on w stworzeniu modelu atomu (1911). I tak dalej.
Trzecia potrzeba — doprecyzowanie pojęcia programu.
Nowoczesne programowanie jedną nogą utknęło w latach 50. XX wieku. Wtedy programy były proste, a maszyny i języki maszynowe — skomplikowane, więc wszystko kręciło się wokół maszyn i języków.
Teraz jest odwrotnie: programy są skomplikowane i pierwotne, a języki proste i wtórne. To nazywa się podejściem aplikacyjnym, które wszystkim wydaje się znajome. Ale studentów i programistów wciąż przekonuje się, że wszystko jest nadal takie samo.
Co przywraca nas do pierwszego wykładu prywatnego docenta Mendelejewa. Co mówić pierwszakom? Gdzie jest prawda? To jest pytanie.
Swoją odpowiedź na to oferuje książka „Matrioszka C. Warstwowy system języka programu”. Przy czym jest ona skierowana nie tylko do studentów, ale także do przygotowanych programistów, ponieważ to oni powinni szukać prawdy i przewracać światopogląd, czyli my.
Poniżej znajduje się krótka treść książki.
1. Wprowadzenie
W 1969 roku stworzono język C, który stał się fundamentem programowania i już od 50 lat pozostaje nim. Dlaczego tak się stało? Przede wszystkim, ponieważ C to praktyczny język, który nadaje programowi ludzki wygląd zamiast maszynowego. Osiągnięcie to umocniły języki z rodziny C: C++, JavaScript, PHP, Java, C# i inne. Po drugie, jest to zwięzły i estetyczny język.
Jednak sam język C zazwyczaj mylony jest z asemblerem, co komplikuje i zniekształca jego postrzeganie. Drugim skrajnością jest narzucenie do języka jakiejś „filozofii”: proceduralnej, obiektowej, funkcyjnej, kompilowanej, interpretowanej, typowanej i tak dalej. To dodaje emocji, ale nie pomaga w lepszym opisie języka.
Prawda leży w środku, a w przypadku języka C — dokładnie pośrodku między filozoficznym a maszynowym postrzeganiem.
Język C nie jest samodzielny, podporządkowuje się normalnemu językowi pisanemu, a jednocześnie — sam zarządza językiem asemblera. To stanowisko opisuje Model mowy programu, według którego program dzieli się na trzy podporządkowane rodzaje: mowa, kod, polecenie. Język C odpowiada za drugi, kodowy rodzaj.
Określając miejsce języka w programie, można uporządkować informacje o nim, co sprawia, że System warstwowy języka programu, reprezentujący język C w duchu systemu Mendelejewa — na jednej stronie.
System jest zbudowany z uwzględnieniem wspólności języków aplikacyjnych, wynikającej z ich podporządkowania w mowie. Jeden zestaw jednostek Matrioszki C umożliwia opis i porównanie różnych języków, tworząc szereg Matrioszek: C++, PHP, JavaScript, C#, MySQL, Python i inne. Słusznie i poprawnie, że różne języki są opisywane jednostkami języka podstawowego.
2. ROZDZIAŁ 1. Model mowy programu. Zrozumiały C
W pierwszym rozdziale przedstawiono model mowy programu, odzwierciedlający praktyczne podejście. Zgodnie z nim, program ma trzy oczywiste, następujące rodzaje:
- mowa — bezpośrednia mowa programisty, rozwiązującego zadanie,
- kodowy — kodowanie rozwiązania w matematycznej postaci w języku C (lub innym)
- i polecenie — bezpośrednie polecenia maszynowe.
Model mowy wyjaśnia, dlaczego C jest prostym i zrozumiałym językiem. C jest skonstruowane na wzór i podobieństwo naszej codziennej ludzkiej mowy.
Pierwszy rodzaj programu to bezpośrednia mowa programisty. Mowa odpowiada ludzkiemu myśleniu. Programy piszą początkujący programiści, zaczynając po polsku, a następnie stopniowo tłumacząc działania na język kodu. I właśnie według tego wzoru stworzono język C.
Rozumowania programisty, wyrażone w mowie, przekształcają się w numeryczną postać kodu. To przekształcenie powinno być nazwane odzwierciedleniem, ponieważ mowa i kod mają jedną naturę (odzwierciedlenie — narodziny — rodzaj). Jest to całkowicie oczywiste, gdy porównamy postać wypowiedzi (po lewej) i postać kodu (po prawej).

Ciekawe, że odzwierciedlenie zachodzi bardzo prosto — zaledwie dwoma rodzajami wyrażeń.
Jednak współczesny opis języka C (z 1978 roku) nie zawiera wystarczającej listy nazw ani do ogólnego opisu języka, ani do zadania odzwierciedlenia w szczególności. Dlatego musimy zająć się twórczością i wprowadzić te nazwy.
Wybór słów musi być precyzyjny i jasny. Wymagało to szczególnego podejścia, które można krótko wyrazić w ten sposób — ścisłego używania rodzimego języka. Dla Anglików byłby to angielski, ale my nie jesteśmy Anglikami. Dlatego używamy tego, co mamy, i staramy się mówić po polsku.
Odzwierciedlenie realizują dwa rodzaje wyrażeń:
- obliczenie (Obl) — odzwierciedla zmianę właściwości przedmiotu. Właściwość przedmiotu wyrażana jest liczbą, wtedy działanie nad właściwością — to działanie nad liczbą — operacja.
- podporządkowanie (Pp) — odzwierciedla zmianę porządku działań. Prototypem Pp jest złożone zdanie podrzędne, dlatego większość rodzajów Pp zaczyna się od spójników podrzędnych „jeśli”, „w przeciwnym razie”, „podczas gdy”, „dla”. Inne rodzaje Pp je uzupełniają.
Przy okazji, czy możesz uwierzyć, że w opisie C nie ma nazwy dla wyrażeń obliczeniowych — są nazywane po prostu „wyrażeniami”? Po tym już nikogo nie zdziwi brak nazwy i połączenia dla rodzaju podporządkowania, a i w ogóle ubóstwo w zakresie nazw, definicji i uogólnień. Wszystko dlatego, że słynny K/R („Język C”, Kernighan/Ritchie, 1978) jest nie opisem, a przewodnikiem po zastosowaniu języka.
Jednak chciałoby się mieć opis języka. Dlatego proponuje go System warstwowy języka programu.
3. ROZDZIAŁ 2. System warstwowy. Krótkie C
Każdy opis powinien być precyzyjny i maksymalnie zwięzły. W przypadku języka programowania ogólne opisanie jest trudne.
Oto mamy program. Składa się z modułów. Moduły składają się z podprogramów i zestawień (structure). Podprogramy składają się z pojedynczych wyrażeń: deklaracji, obliczeń, podległości. Podległości — jest ich dziesięć rodzajów. Podległości łączą podpoziomy i podprogramy. Deklaracji też jest kilka. Zresztą, deklaracje włączane są nie tylko w podprogramy i podpoziomy, ale także w moduły i zestawienia. Większość wyrażeń składa się z słów, których opisanie jest na tyle trudne, że zazwyczaj podaje się je po prostu w dwóch listach — słowa źródłowe i pochodne, z którymi będziemy się zapoznawać przez cały proces uczenia się i stosowania języka. Dodajmy do tego znaki interpunkcyjne oraz szereg innych wyrażeń.
W takim ujęciu trudno zrozumieć, kto na kim stoi.
Bezpośrednie hierarchiczne podejście do opisu języka będzie zbyt skomplikowane. Poszukiwanie okrężnych dróg prowadzi do opisu języka opartego na jego naturze mowy i stronie komend. W ten sposób powstał System Warstwowy, częściowo pokrywający się z Okresowym Układem Pierwiastków Mendelejewa, który również jest warstwowy. Jak się okazało 42 lata po jego wydaniu (1869), okresowość systemu związana jest z elektronicznymi warstwami (1911, model atomu Bohra-Rutherforda). Także w Systemie Warstwowym i Okresowym łączy tabliczne rozmieszczenie wszystkich jednostek na jednej stronie.
Opis jednostek języka jest krótki — zaledwie 10 rodzajów wyrażeń i 8 rodzajów innych jednostek, a także treściwy i przejrzysty. Choć dla pierwszego spotkania dość nietypowy.
Jednostki języka są podzielone na 6 poziomów:
- rzędy — wiersze tabeli
- działy — specjalne grupy rodzajów (części pierwszego wiersza)
- rodzaje — komórki (główny poziom podziału)
- nadrodzaje — podziały rodzajów (rzadki poziom)
- rodzaje — formuły jednostek na dole komórki lub osobno
- wzorce — same jednostki (wyłącznie dla słów)
Wzorce słów opisuje słownik — osobny podsystem, składający się z tych samych sześciu poziomów.
Aspekt mowy języka C jest jak najbardziej oczywisty, chociaż nadal zasługuje na opis. Z kolei część komend języka jest związana z zarządzaniem kompilacją, w trakcie której powstaje trzeci rodzaj programu — komendowy. Tutaj przechodzimy do najbardziej fascynującej strony języka C — jego piękna.
4. KOLEJNE ROZDZIAŁY. Piękny C
Język C stanowi fundament nowoczesnego programowania. Dlaczego? Po pierwsze, ze względu na największe podobieństwo do mowy. Po drugie, ponieważ doskonale omija ograniczenia obliczeń maszynowych.
Co dokładnie zaproponował C? Typ i obiekt.
Słowo „typ” jest tłumaczeniem angielskiego słowa „type”, które pochodzi od greckiego „prototypos” – „pierwowzór”. W języku polskim słowo „typ” nie oddaje istoty wyrażanego pojęcia, dodatkowo myli się ze służbowym znaczeniem „rodzaj”.
Początkowo typ rozwiązywał czysto maszynowe zadanie obliczeniowe, a później stał się pasem startowym dla narodzin języków obiektowych.
Obiekt od razu rozwiązywał kilka zadań – zarówno maszynowych, jak i aplikacyjnych. Dlatego rozważania rozpoczną się od jednego zadania obiektu, a przejdą do wielozadaniowego obiektu.
Jedną z nieprzyjemnych cech historycznego programowania jest to, że większość pojęć, w tym podstawowe, podawane są bez definicji. „Język programowania (nazwa rzek) ma typ liczb całkowitych i zmiennoprzecinkowych…” – i leci dalej. Co oznacza „typ” (obiekt) – nie trzeba definiować, ponieważ autorzy sami tego do końca nie rozumieją i zamkną sprawę „dla jasności”. Jeśli ich przyciśniesz do ściany, to dadzą niejasną i bezużyteczną definicję. Bardzo pomaga ukrycie się za obcymi słowami: dla rosyjskich autorów – za angielskimi (typ), dla Anglików – za francuskimi (subroutine), greckimi (polimorfizm), łacińskimi (enkapsulacja) lub ich kombinacjami (polimorfizm ad-hoc).
Ale to nie jest nasze przeznaczenie. Naszym wyborem są definicje w czystym języku polskim.
Obraz
Obraz – to pierwowzorowe imię wielkości, definiujące 1) własne właściwości wielkości oraz 2) dobór operacji do wielkości.
Słowu „typ” (rodzaj) odpowiada pierwsza część definicji: „własne właściwości wielkości”. Jednak głównym znaczeniem obiektu jest druga część: „dobór operacji do wielkości”.
Punkt wyjścia dla wprowadzenia obiektu w języku C – to zwykłe obliczenie, na przykład operacja dodawania.
Papierowa matematyka, zapisywana ręcznie lub drukowana, nie robi specjalnego rozróżnienia pomiędzy rodzajami liczb, zwykle uznając je za rzeczywiste. Dlatego operacje na nich są jednoznaczne.
Maszynowa Matematyka dzieli liczby na całkowite i ułamkowe. Różne rodzaje liczb są w różny sposób przechowywane w pamięci i przetwarzane przez różne polecenia procesora. Na przykład polecenia dodawania liczb całkowitych i ułamkowych to dwa różne polecenia odpowiadające dwóm różnym rdzeniom procesora. Z drugiej strony, polecenie dodawania argumentów całkowitych i ułamkowych nie istnieje.
Praktyczna matematyka, czyli język C, dzieli rodzaje liczb, ale łączy operacje: dodawanie dla liczb całkowitych i/lub ułamkowych zapisuje się jednym znakiem działania.
Wyraźne zdefiniowanie pojęcia obrazu pozwala jednoznacznie mówić o dwóch innych pojęciach: wielkość i operacja.
Wielkość i operacja
Wielkość — przetwarzana liczba.
Operacja — przetwarzanie wartości danych źródłowych (argumentów) w celu uzyskania wyniku (wyniku).
Wielkość i operacja są ze sobą powiązane. Każda operacja jest wielkością, ponieważ ma wynik liczbowy. A każda wielkość jest wynikiem przesyłania wartości do rejestru procesora/z procesora, to znaczy — wynikiem operacji. Mimo tej wzajemnej zależności, najważniejsze jest jednak możliwość ich oddzielnego opisu, nawet jeśli powtarzają się te same słowa w różnych działach słownika, co ma miejsce w ma3.
Podejście maszynowe dzieliło wszystkie liczby używane przez programistę na poleceń i z sondy kosmicznej WMAP na temat niejednorodności temperatury promieniowania reliktowego, które jest jednym z głównych obiektów badań w naszym wszechświecie. Analizując te dane, odkryto dużą anomalię kątowego rozkładu fluktuacji promieniowania reliktowego w niskich harmonicznych. Jednym z wyjaśnień tego zjawiska jest teoria, że topologia naszego wszechświata różni się od trójwymiarowej płaszczyzny lub kuli. Przy rozważaniu topologii naszego wszechświata w postaci dwunastościanu, teoretyczne obliczenia zbliżają się do danych eksperymentalnych.. Kiedyś zarówno jedne, jak i drugie były liczbami, na przykład polecenia były zapisane kodami liczbowymi. Jednak w językach aplikacyjnych polecenia przestały być liczbami i stały się słowami i symbolami działań. Liczbami pozostały tylko „dane”, ale kontynuowanie nazywania ich tak jest absurdalne, ponieważ z punktu widzenia maszynowego do matematycznego liczby są wielkościami, które dzielą się na źródłowe (z sondy kosmicznej WMAP na temat niejednorodności temperatury promieniowania reliktowego, które jest jednym z głównych obiektów badań w naszym wszechświecie. Analizując te dane, odkryto dużą anomalię kątowego rozkładu fluktuacji promieniowania reliktowego w niskich harmonicznych. Jednym z wyjaśnień tego zjawiska jest teoria, że topologia naszego wszechświata różni się od trójwymiarowej płaszczyzny lub kuli. Przy rozważaniu topologii naszego wszechświata w postaci dwunastościanu, teoretyczne obliczenia zbliżają się do danych eksperymentalnych.) i wynikowe (poszukiwane). „Nieznana dana” – to brzmiałoby głupio.
Polecenia także podzieliły się na dwa rodzaje działań: matematyczne i pomocnicze. Działania matematyczne to operacje. Do działań pomocniczych wrócimy później.
W językach C, tradycyjne jednoznaczne operacje matematyczne prawie całkowicie stają się mnogie.
Operacje mnogie – to kilka jednoimiennych operacji z różnymi obrazami argumentów i różnymi, bliskimi znaczeniom, działaniami.
Całkowitym argumentom odpowiada całkowita operacja, a ułamkowym – ułamkowa. Różnica ta jest szczególnie widoczna podczas dzielenia, kiedy wyrażenie 1/2 daje wynik 0, a nie 0,5. Taki zapis nie odpowiada zasadom matematyki papierowej, ale język C nie stara się ich przestrzegać (w przeciwieństwie do Fortrana) – gra według swoich aplikacyjnych reguł.
W przypadku mieszania liczb całkowitych z ułamkowymi, włącza się jedynie poprawne przyprowadzenie wartości argumentów – selektywna konwersja wartości z jednego obrazu w inny. Rzeczywiście, podczas dodawania liczby całkowitej i ułamkowej wynik jest ułamkowy, dlatego obraz operacji dobiera operację konwersji argumentu całkowitego na wartość ułamkową.
Wiele operacji pozostaje nie wielokrotnymi, a jednostkowymi. Takie operacje zdefiniowane są tylko dla jednego rodzaju argumentów: reszta z dzielenia – argumenty całkowite, bitowe operacje – naturalne liczby całkowite. Ma3 wskazuje wielokrotność operacji symbolami (#^) z wskazaniem obrazów, dla których operacja jest zdefiniowana. To ważna, ale wcześniej pomijana cecha każdej operacji.
Wszystkie funkcje są dowolnymi jednostkowymi operacjami. Wyjątek stanowią operatory – funkcje beznawiasowe, wbudowane w język (operacje źródłowe).
Wsparcie
Wsparcie – towarzyszące działaniu operacyjnemu działanie.
Jeśli rozważamy operację jako główne działanie, można wyróżnić dwa towarzyszące, które zapewniają operację i różnią się od niej. To 1) zarządzanie zmienną i 2) podporządkowanie. Takie działanie nazwano wspieraniem.
Tutaj należy się zatrzymać i osobno wspomnieć o rosyjskich tłumaczeniach podręczników do programowania. W tekście K/R wprowadzono nowe słowo statement (wyrażenie), które próbowało oddzielić pojęcia komendy maszynowej na różne działania: 1) operację, 2) deklarację i 3) podporządkowanie (nazwanego „konstrukcjami kontrolnymi”). Tę próbę pogrzebali rosyjscy tłumacze, zastępując „wyrażenie” słowem „operator”, które:
- stało się synonimem maszyny słowa „komenda”,
- okazało się synonimem wyrażenia „symbol działania”,
- a także uzyskiwało nieograniczoną liczbę dodatkowych znaczeń. Stało się podobne do angielskiego rodzajnika „uhm...”.
Rozważmy towarzyszące działania, lub wsparcia.
Zarządzanie zmienną
Zarządzanie zmienną (UP) — tworzenie/usuwanie komórek zmiennych.
UP odbywa się w sposób niejawny podczas deklaracji zmiennej, która i tak jest już pisana w innym celu — aby określić wartość. Jawnie zarządzany jest tylko jeden rodzaj dodatkowych zmiennych przy pomocy funkcji malloc() i free().
Należy zauważyć, że działania niejawne są wygodniejsze do pisania, ponieważ w ogóle nie wymagają niczego do pisania, ale trudniejsze do zrozumienia — trudniej je uwzględnić i zinterpretować.
Podporządkowanie
Podporządkowanie — podłączenie/odłączenie warstwowych sekcji.
Język C zaproponował odmienny od asemblera, praktyczny sposób kontrolowania kolejności działań — podporządkowanie. Odzwierciedla ono i rozwija złożone zdanie podrzędne z wyraźnym podziałem na część główną (zdanie podporządkowane) i część podrzędną (sekcje podpoziomowe/podprogramy).
Zarówno deklaracja, jak i podporządkowanie są w pełni oparte na pojęciu warstwa.
Warstwa
Warstwa — to ograniczony, jednopoziomowy wybór wyrażeń.
Warstwa w sposób jawny i niejawny przejęła wykonywanie kolejnych zadań:
- porządkowanie programu,
- ograniczenie widoczności nazw (niejawnie),
- zarządzanie zmiennymi (komórkami pamięci) (niejawnie),
- określenie dodatkowych sekcji do podporządkowania,
- określenie funkcji i zestawów oraz inne.
W językach maszynowych nie istniało pojęcie warstwy, dlatego nie pojawiło się ono także w K/R, a jeśli coś tam nie istniało — wprowadzenie tego w kolejnych książkach byłoby absurdem i nielicujące z rozumem. Dlatego pojęcie warstwy w ogóle nie pojawiło się, chociaż jest niezwykle użyteczne i całkowicie oczywiste.
Bez warstwy nie można krótko i jasno wyjaśnić wielu działań i zasad programu. Na przykład, dlaczego proste jak trzy grosze goto — jest złe, a skomplikowane while — dobre. Można tylko bezsilnie narzekać, jak to robił Dijkstra („kwalifikacja programistów — funkcja odwrotnie zależna od częstotliwości występowania operatorów goto w ich programach”. Krótko mówiąc, tylko osły używają goto. Poziom uzasadnienia — Bóg.) To jednak nie jest takie straszne, jeśli twoje książki w ogóle nic nie muszą tłumaczyć, ale, jak już powiedzieliśmy, to nie jest nasze przeznaczenie.
Można przypuszczać, że Den Ritchie zostawił goto właśnie jako klucz do poszukiwania pewnej nieokreślonej koncepcji, ponieważ nie było potrzeby ani piękna w wyrażeniu goto. Była z kolei potrzeba prostego i zrozumiałego wyjaśnienia nowych zasad języka, których sam Ritchie nie chciał podać, a które bazują na koncepcji. warstwa.
Odstępstwo
Odstępstwo — zmiana zwyczajnych właściwości nowej nazwy.
Najważniejsze odstępstwo dotyczy właściwości warstwowych programu i jest opisane jednym słowem „static”, mającym różne znaczenie w każdym z rodzajów warstwy.
5. OSTATNI ROZDZIAŁ. Ogólność języków aplikacyjnych
Języki aplikacyjne — to obrazy języki (mające obraz, „typizowane”). Opierają się na wyraźnym lub niejawny użyciu obrazu. I tutaj znowu występuje sprzeczność: wyraźny obraz — bardziej zrozumiały, ale mniej wygodny, i odwrotnie.

(Układ tabeli jeszcze nie dotarł, dlatego tabela podana jest jako obrazek.)
Po C rozwój języków aplikacyjnych poszedł w kierunku zwiększenia ich obrazowości. Najważniejszym dla zrozumienia wyspecjalizowania jest bezpośredni potomek C — język C++. Rozwija on ideę dowolnego dobierania operacji do wartości i wciela ją na podstawie c-owego wyrażenia dobór, które zyskuje nową nazwę — obiekt. Jednak C++ nie jest tak krótki i wyrazisty jak C, z powodu przeciążenia nowych rodzajów doboru i związanych z nimi zasad. A propos, porozmawiajmy o „przeciążeniu”.
Przeciążenie i polimorfizm
Słowo „przeciążenie” (overload) — przestarzały termin podejścia maszynowego, oznaczający tworzenie wielu operacji.
Programistów maszynowych (systemowych) wieloznaczność operacji mogła irytować: „Co oznacza ten znak (+): dodawanie liczb całkowitych, dodawanie liczb ułamkowych czy może przesunięcie?! W naszych czasach tak się nie pisało!” Stąd negatywna konotacja wybranego słowa („przeciążenie”, „znudziło się”). Dla programisty aplikacyjnego wielość operacji — to kamień węgielny, główne osiągnięcie i dziedzictwo języka C, tak naturalne, że często nieuświadamiane.
W języku C++ wieloznaczność rozprzestrzeniła się nie tylko na podstawowe operacje, ale także na funkcje — zarówno jako osobne, jak i zgrupowane w klasy — metody. Wraz z wieloma metodami pojawiła się możliwość ich nadpisywania w rozszerzonych klasach, która została pochłonięta przez mgliste pojęcie «polimorfizm». Połączenie polimorfizmu i przeciążania stworzyło wybuchową mieszankę, która podzieliła się na dwa rodzaje polimorfizmu: «prawdziwy» i «ad-hoc». Można to zrozumieć tylko wbrew przypisanym nazwom. Obcymi nazwami wylano drogę do ad.
Ogłoszenie rodzaju „przeciążenie” lepiej wyrazić słowem dopowiedzenie — dodające ogłoszenie tej samej funkcji z argumentami innego rodzaju.
Ogłoszenie rodzaju „polimorfizm” lepiej nazwać słowem przeciwdziałanie — pokrywające ogłoszenie w nowej rozszerzającej warstwie tej samej funkcji z argumentami tego samego rodzaju.
Wtedy będzie łatwiej zrozumieć, co nazywane są metody o tej samej nazwie różnych rodzajów (argumentów) — dopowiadane, a jednego rodzaju — przeciwdziałane.
Rosyjskie słowa rozwiązują.
Pasaż startowy
Rozważenie pojęć wysoko-abstrakcyjnych języków potwierdza znaczenie jasnego definiowania podstawowych pojęć. Z prawidłowo opisanym C, nauka wysoko-abstrakcyjnych języków będzie łatwa i przyjemna.
Szczególnie ważne jest to dla niejawnych wysoko-abstrakcyjnych języków (PHP, JavaScript). Dla nich znaczenie obiektów (kompozytów) staje się jeszcze wyższe niż w C++, ale samo pojęcie obiektu staje się niejawne i trudne do uchwycenia. Z punktu widzenia wygody stały się prostsze, a z punktu widzenia zrozumienia — trudniejsze.
Dlatego naukę języków programowania należy zacząć od języka C, a potem przechodzić dalej w kolejności pojawiania się języków z rodziny C.
To samo dotyczy opisu języków. Różne języki mają pokrywający się, lub mniejszy zbiór rodzajów jednostek niż język C. Liczba typów i wzorców może różnić się w obie strony: C++ ma więcej typów niż C, a JavaScript — mniej.
Szczególnej wzmianki zasługuje język MySQL. Zdawałoby się — nic wspólnego, ale doskonale opisuje się go Matrioszką, a zapoznanie się z nim staje się szybsze i prostsze. Co ważne, biorąc pod uwagę jego znaczenie dla webu — głównej drogi nowoczesnego programowania. A gdzie MySQL, tam i inne SQL. No i wszelkie fortrany-paskale-pythony również opisuje się Matrioszką, jak tylko ręce do tego dotrą.
Czekają nas wielkie dzieła — praktyczny opis języka C oraz jednolite opisy języków, które za nim następują. „Nasze cele są jasne, zadania określone. Do pracy, towarzysze! (Gromkie, długie oklaski, przechodzące w owacje. Wszyscy wstają.)”
Wasze opinie będą wysłuchane z dużą uwagą, a wasza pomoc w stworzeniu strony internetowej z matrioszkami zostanie przyjęta z ogromną wdzięcznością. Pełniejsze informacje o książce znajdują się na stronie, sprytnie ukrytej w matrioszce C.
Źródło: habr.com
