Studio      23.11.2023

Paradygmat programowania strukturalnego. „Zapomniane” paradygmaty programowania. Języki wspierające ten paradygmat

OBLICZENIA REKURSOWE W RÓŻNYCH PARADYGMATACH PROGRAMOWANIA.

G.V. Vanykina, A.V. Jakuszin

Państwowy Uniwersytet Pedagogiczny w Tule im. L. N. Tołstoj

[e-mail chroniony]

1. Paradygmaty współczesnego programowania.

Historycznie rzecz biorąc, pierwsze techniki technologiczne w dziedzinie programowania obejmują dekompozycję ogólnej struktury rozwiązywanego problemu na takie elementy, które w tym kontekście są elementarne. Następnie opracowano poważne podstawy teoretyczne i szereg zalecanych technik technologicznych dla tego podejścia, które razem stanowią nowoczesne programowanie. W zależności od wyboru „bazy elementów” można uzyskać różne zestawy technik metodologicznych, reguł, zależności, zależności itp. do rozwiązania danego problemu, które razem tworzą paradygmat programowania.

Należy zauważyć, że słowo „paradygmat” pojawiło się w programowaniu za sprawą wpływowej książki „Struktura rewolucji naukowych” napisanej przez historyka nauki Thomasa Kuhna w 1970 roku. Kuhn użył tego terminu do opisania zbioru teorii, standardów i metod, które razem stanowią sposób organizacji wiedzy naukowej – innymi słowy, sposób widzenia świata. Główną tezą Kuhna jest to, że rewolucje w nauce mają miejsce, gdy stary paradygmat zostaje zrewidowany, odrzucony i zastąpiony nowym.

W podobnym znaczeniu, jako modelu lub przykładu i ogólnie jako podejścia organizacyjnego, słowo to zostało użyte w wykładzie „Paradygmaty programowania” Roberta Floyda, zdobywcy nagrody Turinga w 1979 roku.

Paradygmat programowania jest podstawową koncepcją bardzo wysokiego poziomu w teorii programowania i dlatego nie można go ściśle zdefiniować. Przez paradygmat w programowaniu rozumiemy wewnętrznie spójny zbiór elementów programu, które mają wspólne podstawowe cechy, zarówno logiczne, jak i algorytmiczne, oraz podstawowe pojęcia związane z tymi elementami. Podobnie można powiedzieć, że paradygmat w programowaniu jest sposobem konceptualizacji sposobu przeprowadzania obliczeń oraz tego, jak powinna być zorganizowana i zorganizowana praca wykonywana przez komputer.

Paradygmaty programowania zajmują ważne miejsce w technologii wytwarzania oprogramowania. To wokół nich zaczynają być budowane i rozwijane koncepcje metodologiczne. Rolę tę wyznacza fakt, że pojawiające się nowe pomysły na tworzenie programów są początkowo wdrażane w prostych narzędziach wspierających badania i eksperymentalną weryfikację proponowanego stylu, którymi są najczęściej języki programowania. Po uogólnieniu początkowych doświadczeń przychodzi zrozumienie zalet i wad, co pozwala nam przejść do tworzenia metodologii zapewniających zastosowanie paradygmatu w rozwoju dużych systemów oprogramowania. Jeżeli opracowany paradygmat nie może służyć jako podstawa metodologii przemysłowej, jest odrzucany lub stosowany w ograniczonej skali. Można powiedzieć, że paradygmat programowania realizowany jest poprzez metodologie programowania, które zawarte są w zestawie porozumień i porozumień dotyczących podstawowych narzędzi językowych oraz ich kombinacji, które są dopuszczalne i nieakceptowalne dla danego paradygmatu.

W zależności od metody dekompozycji można wyróżnić następujące główne paradygmaty programowania, które przedstawiono w tabeli 1.

Tabela 1. Podstawowe paradygmaty programowania

Nazwa paradygmatu

Metoda rozkładu

Przykładowe języki programowania

Pilny

(synonimy: dyrektywny, proceduralny)

Podprogramy, abstrakcyjne typy danych

Fortran, C, Pascal, podstawowy

Deklaracyjny

(komponenty: logiczne i funkcjonalne)

Cele wyrażone w rachunku predykatów. Zasady „jeśli-to”.

Lisp, Schemat, Prolog, ML, Haskell

Zorientowany obiektowo

Klasy i obiekty

Java, C++, Ruby

Programowanie z ograniczeniami

Relacje niezmiennicze, system ograniczeń

języki CLP(X), SETL, Prolog III

Scenariusz

Podstawowy scenariusz przetwarzania lub kontroli

Perla, PHP, Pythona, ASP

Należy zauważyć, że przyjęcie określonego paradygmatu znacząco wpływa na technologiczne podejście do rozwiązywania problemów i wykorzystanie różnego rodzaju charakterystycznych struktur heurystycznych w praktyce programowania. Ogólnie można powiedzieć, że wybór i stosowanie jednego paradygmatu przez długi czas pozostawia pewien ślad w myśleniu programisty (zwłaszcza początkującego) i bardzo trudno jest przełamać błędne koło utartych „klisz”, gdy konieczne jest rozwiązywanie niestandardowych problemów. Dla użytkownika dowolnego poziomu, raz dokonany wybór określonego paradygmatu zasadniczo determinuje zarówno jego stosunek do technologii komputerowych, jak i efektywność ich wykorzystania.

Obecnie nie jest możliwa profesjonalna znajomość technologii komputerowej i wysoki poziom kultury informacyjnej bez jasnego zrozumienia nie tylko zasad działania komputera, ale w jeszcze większym stopniu jego potencjalnych możliwości. Tendencja ta nie może nie wpłynąć na strukturę studiowania informatyki zarówno na uniwersytecie, jak i zwłaszcza w szkole, gdyż to właśnie edukacja szkolna stanowi podstawową podstawę, która determinuje i wspiera dalszy rozwój przyszłego specjalisty.

Problem kształtowania się kultury algorytmicznej uczniów jako podstawowego składnika kultury informacyjnej rozwiązuje się z punktu widzenia różnych paradygmatów programowania w zależności od szeregu czynników: programu nauczania zajęć z informatyki, sprzętu i oprogramowania, a także cechy osobiste i zawodowe nauczyciela. Sekcja „Programowanie” w ramach ogólnego poziomu edukacji uczniów obejmuje naukę podstaw imperatywu ( Podstawowy, Pascal, C , szkolny język algorytmiczny) lub obiektowy ( Delphi, C++, Java ) paradygmaty. Kształcenie profilowe uczniów szkół średnich w zakresie nauk przyrodniczych jest z reguły realizowane również w ramach powyższych paradygmatów. Należy jednak zaznaczyć, że nauka programowania w konkretnym języku nie jest głównym zadaniem w realizacji treningu algorytmicznego dla uczniów. Znacznie wyższym priorytetem jest szkolenie z algorytmicznego podejścia do rozwiązywania problemów, umiejętność oceny efektywności opracowanego algorytmu z punktu widzenia rozwiązywanego problemu oraz wybór technologii jego realizacji – czyli mówimy o zapoznaniu się z metodami tworzenia modeli algorytmicznych, których implementacja jest możliwa w ramach dowolnego paradygmatu.

Rozwój różnych paradygmatów programowania następował równolegle. Przez długi czas dominowało podejście imperatywne, w latach 70. i 80. nacisk przesunął się w stronę badania paradygmatów nieklasycznych, lata 90. charakteryzowały się szybkim rozwojem paradygmatu obiektowego i wprowadzeniem jego elementów do inni. Rozwój języków programowania z punktu widzenia różnych paradygmatów przedstawiono na ryc. 1

Fortran

Algol, C

Pascal

Moduł

Oberona

Dyrektywa

Podstawowy

SEPLENIENIE

ML, schemat

Haskell

Deklaracyjny

Prolog

CProlog

VB, C++, Object Pascal

Java, C#

Zorientowany obiektowo

Pogawędka

Rubin

USTAL

Programowanie w ograniczeniach

Prolog III

CPL (X)

Perł

Pyton

Scenariusz

PHP, ASP

Ryc. 1. Rozwój języków i paradygmatów programowania

Aby zbadać alternatywną metodę programowania, możemy zaproponować technologię wykorzystania symboli rekurencyjnychproblemów podczas studiowania informatyki, gdyż rekurencja, będąca podstawowym pojęciem matematycznym, jest realizowana bardzo podobnie w kontekście różnych paradygmatów programowania. Konstrukcje rekurencyjne w ogóle nie są naturalne dla większości języków programowania i ich implementacja wymaga pewnego poziomu abstrakcji od wybranej metodologii tworzenia programów. Jednocześnie należy zwrócić uwagę na możliwą nieefektywność i znaczną złożoność algorytmów rekurencyjnych w niektórych przypadkach, dlatego wskazane jest opracowanie algorytmów rekurencyjnych z późniejszą oceną ich złożoności.

Prześledźmy możliwości koncepcyjne różnych paradygmatów stosowanych do implementacji rekurencji.

2. Paradygmat imperatywny.

Programowanie imperatywne – jedno z najbardziej naturalnych podejść do pisania programów dla szeroko rozpowszechnionej architektury von Neumanna. Program w tym przypadku składa się z operatorów przypisania i klauzul kontrolujących kolejność ich wykonywania. Programowanie dyrektywne opiera się na automatycznym modelu komputera, który oddziela abstrakcje stanu i zachowania. W tym przypadku program jest traktowany jako proces zmiany stanu poprzez wykonanie poszczególnych poleceń. Imperatywność rozumiana jest tutaj jako wskazanie kalkulatorowi, że Jak rozwiązać problem. Rekursja w językach dyrektywnych jest realizowana poprzez utworzenie specjalnego rodzaju podprogramów, które umożliwiają wykonywanie wywołań rekurencyjnych i wykorzystanie specjalnej technologii do tłumaczenia programów rekurencyjnych na kody maszynowe. W językach dyrektywnych istnieje możliwość alternatywy pomiędzy iteracją a rekurencją, jednak to właśnie zastosowanie tej drugiej pozwala na budowanie nie tylko wydajnych, ale i łatwych do odczytania algorytmów.

3.1. Programowanie logiczne pojawił się w wyniku badań grupy francuskich naukowców pod przewodnictwem Colmeriera w dziedzinie analizy języka naturalnego. Następnie odkryto, że programowanie logiczne jest równie skuteczne w realizacji innych zadań sztucznej inteligencji, do czego obecnie jest głównie wykorzystywane. Programowanie logiczne okazuje się wygodne także przy realizacji innych skomplikowanych zadań.

Programowanie logiczne opiera się na logice predykatów. Logika predykatów to gałąź logiki formalnej, która rozwinęła się w XX wieku. W programowaniu logicznym nacisk kładzie się na opisanie struktury problemu aplikacji, a nie na instruowanie komputera, co powinien zrobić. W programowaniu logicznym program reprezentuje pewną teorię (opisaną w dość ograniczonym języku) i stwierdzenie, które należy udowodnić. Dowodem tego stwierdzenia będzie wykonanie programu.

Praca programu w języku logicznym odbywa się poprzez poszukiwanie dowodu proponowanego stwierdzenia w istniejącej bazie wiedzy, która jest zbiorem pewnych faktów i reguł. Rekurencja w językach tego paradygmatu jest realizowana zarówno w procesie poszukiwania dowodów, jak i w celu określenia mechanizmu takiego wyszukiwania. Ustalanie wartości logicznej zdania ma charakter rekurencyjny, w związku z czym rekurencja jest tu realizowana w dość naturalny sposób.

3.2. Programowanie funkcjonalne opiera się na teorii funkcji rekurencyjnych i rachunku lambda Churcha. Nacisk położony jest na zależność pomiędzy funkcjami na danych. Program funkcyjny składa się ze zbioru definicji funkcji, które z kolei reprezentują wywołania innych funkcji i instrukcji kontrolujących sekwencję wywołań. W językach funkcjonalnych rekurencja jest realizowana w sposób naturalny, ponieważ stanowi podstawową podstawę konstruowania semantyki języka. Ogólnie rzecz biorąc, program funkcjonalny nie zawiera operatora przypisania, obliczenie dowolnej funkcji nie powoduje żadnych skutków ubocznych poza faktycznym obliczeniem jej wartości. Rozgałęzianie obliczeń opiera się na mechanizmie przetwarzania argumentów zdania warunkowego, a obliczenia cykliczne realizowane są za pomocą rekurencji.

4. Paradygmat obiektowy.

Programowanie obiektowe (OOP) jest naturalną ewolucją wcześniejszych metodologii programowania. Wynikiem dekompozycji obiektów jest zbiór obiektów, które następnie są implementowane jako zmienne niektórych specjalnie opracowanych typów (klas), które stanowią zbiór pól danych i metod współpracujących z tymi polami. Można tak powiedzieć Ups – to modelowanie obiektów poprzez hierarchicznie powiązane klasy. Jednocześnie nieistotne szczegóły obiektu są przed nami ukryte, a jeśli wydamy polecenie jakiemuś obiektowi, to on „wie”, jak to wykonać. Podstawową koncepcją w OOP jest koncepcja odpowiedzialności lub odpowiedzialność za wykonanie akcji.

Wszystkie obiekty są przedstawicielami, lub kopie, zajęcia. Metoda wywoływana przez obiekt w odpowiedzi na wiadomość jest określana przez klasę, do której należy odbiorca wiadomości. Wszystkie obiekty tej samej klasy używają tych samych metod w odpowiedzi na te same komunikaty. Klasy są reprezentowane jako hierarchiczna struktura drzewa, w której klasy o bardziej ogólnych cechach znajdują się w korzeniu drzewa, a klasy wyspecjalizowane, a ostatecznie jednostki, znajdują się w gałęziach. Już sama dekompozycja obiektów zawiera elementy konstrukcji rekurencyjnych, gdyż otrzymana w ten sposób hierarchia obiektów zawiera elementy samopodobieństwa. Jak wiadomo, programowanie obiektowe opiera się na trzech głównych koncepcjach: enkapsulacja (ukrywanie danych w klasie lub metodzie); dziedzictwo; wielopostaciowość. Kapsułkowanie można traktować jako powłokę ochronną wokół kodu danych, z którymi ten kod współpracuje. Powłoka definiuje zachowanie i chroni kod przed arbitralnym dostępem z zewnątrz. Dziedziczenie - to proces, w wyniku którego jeden typ dziedziczy właściwości innego typu. Wielopostaciowość to koncepcja, która pozwala na różne implementacje tej samej metody, która zostanie wybrana w zależności od typu obiektu przekazanego do metody po wywołaniu.

Paradygmat obiektowy zajmuje szczególną pozycję wśród wszystkich istniejących, ponieważ większość współczesnych języków różnych stylów jest zorientowana obiektowo, ale ogólnie zorientowana obiektowo implementacja języka znacznie różni się od standardowej.

Rekurencja w tym paradygmacie realizowana jest zarówno w procesie dekompozycji obiektu, jak i w sposób bezpośredni. Ogólnie rzecz biorąc, rozwój programów obiektowych jest o kilka rzędów wielkości trudniejszy niż tradycyjne, ale budowanie rekurencyjnej hierarchii obiektów jest nie tylko całkiem wykonalne, ale także istotnym zadaniem dla uczniów.

5. Programowanie w ograniczeniach.

Programowanie z ograniczeniami to całkiem nowy kierunek w programowaniu deklaratywnym. Pojawiło się w latach 80-tych XX wieku w wyniku rozwoju symbolicznych systemów obliczeniowych, sztucznej inteligencji i badań operacyjnych. Podstawową ideą programowania z ograniczeniami jest zdefiniowanie zbioru zmiennych i ustawienie ograniczeń, które muszą spełniać, a system znajdzie odpowiednie wartości.

Programowanie z ograniczeniami jest ściśle powiązane z tradycyjnym programowaniem logicznym. Większość systemów programowania z ograniczeniami to interpretery języka Prolog z wbudowanym mechanizmem rozwiązywania określonej klasy problemów ze spełnieniem ograniczeń. Programowanie w takich systemach nazywa się Constraint Logic Programming (CLP), a większość języków lub bibliotek nazywa się CLP(X), gdzie X oznacza klasę rozwiązywanych problemów.

Na przykład CLP(B) oznacza zdolność rozwiązywania równań ze zmiennymi boolowskimi. CLP(Q) to równania w liczbach wymiernych, a CLP(R) w liczbach rzeczywistych. Najpopularniejszymi rozwiązaniami problemów na skończonych zbiorach liczb całkowitych są CLP(FD).

Stwierdzenie problemu jest skończonym zbiorem zmiennych X = ( x 1 , ..., x n ), odpowiadające skończone (przeliczalne) zbiory wartości D X = ( dx 1 , ..., dx n ) i zestaw ograniczeń do = ( do 1 ,..., do m ). Układ więzów może obejmować równania, nierówności, funkcje logiczne, a także dowolne dopuszczalne konstrukcje formalne łączące zmienne ze zbioru X . Rozwiązaniem problemu jest skonstruowanie zbioru zmiennych spełniającego wszystkie ograniczenia do ja, gdzie i = 1,.., m.

Semantycznie programowanie z ograniczeniami różni się od tradycyjnego programowania logicznego przede wszystkim tym, że wykonanie programu nie jest traktowane jako udowodnienie stwierdzenia, ale jako znalezienie wartości zmiennych. W tym przypadku wewnętrzna kolejność rozwiązania wykonania poszczególnych ograniczeń nie ma znaczenia, a system programowania ograniczeń z reguły dąży do optymalizacji kolejności dowodu twierdzeń, aby zminimalizować wycofywanie się w przypadku awarii. W ten sposób ma miejsce zastosowanie schematu rekurencji wstecznej. Konstrukcje rekurencyjne są generalnie realizowane w taki sam sposób, jak w programowaniu logicznym.

6. Paradygmat scenariusza.

Języki skryptowe. Języki skryptowe poczyniły w ostatnich latach ogromne postępy. Dziesięć lat temu przypisywano im rolę środków pomocniczych, ale obecnie sceptycyzm wobec nich został zastąpiony zainteresowaniem i uznaniem.

Języki skryptowe mają dość długą historię rozwoju. Koncepcja programowania skryptowego pojawiła się jako naturalny rozwój języka SEPLENIENIE . Pierwsze języki skryptowe zawierają wbudowane elementy sterujące powłoki poleceń dla systemu operacyjnego. Plik wsadowy w języku systemu operacyjnego to skrypt sterujący, który wykonuje zadaną sekwencję działań. Można powiedzieć, że skrypt „skleja” różne części systemu operacyjnego i wchodzi z nimi w interakcję.

Obecnie popularność języków skryptowych wiąże się z rozwojem Internet -technologia. Języki skryptowe służą do tworzenia dynamicznych, interaktywnych sieć -strony, których zawartość jest modyfikowana w zależności od działań użytkownika oraz stanu innych stron i danych.

Charakterystyczną cechą języków skryptowych jest tworzenie programu w jakimś języku zewnętrznym w wyniku wykonania skryptu. Język skryptowy w niewielkim stopniu polega na stworzeniu od podstaw produktu końcowego, w większym zaś na wykorzystaniu możliwości systemu operacyjnego, środowiska graficznego, silnika obsługi aplikacji i innych podobnych komponentów, których interakcja odbywa się za pomocą skrypty.

Paradygmat scenariusza polega na podzieleniu zadania na odrębne części, z których każdą rozwiązuje specjalistyczne oprogramowanie, a scenariusz pełni rolę „dyspozytora” odpowiedzialnego za organizację ich interakcji.

Języki skryptowe dla sieć -opracowania powstawały głównie w latach 90-tych XX wieku i obejmują elementy różnych paradygmatów programowania, od imperatywnego po obiektowe. Do najpotężniejszych i najpopularniejszych systemów skryptowych zaliczają się: Perla, Pythona, PHP, ASP . Składnia i semantyka różnych języków skryptowych są dość podobne. Wynika to ze znaczącego wpływu języków C i C++ na społeczność programistów. Obsługa rekurencji w językach skryptowych jest realizowana podobnie jak w przypadku paradygmatów imperatywnych i obiektowych.

Współczesna literatura metodologiczna i techniczna dość często dostarcza przykładów realizacji programów rekurencyjnych w różnych paradygmatach programowania. Duża uwaga poświęcona rekurencji jest potwierdzeniem faktu, że metodologia rekurencyjna pozwala skupić się na samej logice rozwiązania problemu, a nie na szczegółach jego realizacji. Można zatem stwierdzić, że rekurencja to nie tylko jedna z alternatywnych metod programowania, ale także pewien styl abstrakcyjnego myślenia algorytmicznego.

Dziś zrozumiemy, czym są paradygmaty programowania i czym charakteryzuje się każdy z nich.

Definicja paradygmatu zwykle brzmi następująco:

Paradygmaty to zbiór zasad idei i koncepcji, które określają styl pisania programu komputerowego.

Należy również zauważyć, że paradygmaty istnieją nie tylko w programowaniu, ale także w filozofii itp.

Na podstawie definicji można powiedzieć, że paradygmat programowania to specyficzny zbiór zasad pisania oprogramowania komputerowego.

Rodzaje paradygmatów programowania

Tak się złożyło, że wielu programistów zaproponowało swoje zasady, sposoby pisania programu, w wyniku czego powstała duża liczba paradygmatów.

Wymieniamy najpopularniejsze z nich:

  • Programowanie imperatywne
  • Programowanie strukturalne
  • Programowanie deklaratywne
  • Programowanie obiektowe

W rzeczywistości istnieje o wiele więcej paradygmatów, których nie wymieniliśmy na liście; omawiamy tylko najsłynniejsze z nich.

Przyjrzyjmy się pokrótce każdemu z nich

Programowanie imperatywne

Pierwszy paradygmat, który powstał zaraz po pojawieniu się komputerów.

z angielskiego pilny- zamówienie

Charakterystyczne cechy programowania imperatywnego:

W kodzie źródłowym zapisywane są „rozkazy” poleceń, a nie klasy, jak ma to miejsce na przykład w programowaniu obiektowym.

Wszystkie instrukcje muszą być wykonywane sekwencyjnie, jedna po drugiej (nie możemy np. przeskakiwać z jednej sekcji kodu do drugiej)

Po wykonaniu instrukcji dane można zapisać w pamięci i odczytać z pamięci.

Języki reprezentujące paradygmat: kody maszynowe (binarne), Assembly, Fortran, Algol, Cobol

Programowanie strukturalne

Metodę tę zaproponował holenderski naukowiec

Edsgera Dijkstry 1930-2002

Ale główną koncepcją w programowaniu strukturalnym jest koncepcja Bloki i hierarchiczną strukturę i który wykorzystuje trzy główne struktury kontrolne:

  • podsekwencja
  • rozgałęzienie

Programowanie strukturalne ma również 7 zasad opisanych przez Dijkstrę:

  1. całkowita odmowa użycia operatora goto; *
  2. każdy program zbudowany jest na trzech strukturach kontrolnych: sekwencji, cyklu i rozgałęzieniu;
  3. podstawowe struktury kontrolne można dowolnie zagnieżdżać w sobie;
  4. Powtarzające się komponenty powinny być zaprojektowane jako podprogramy;
  5. Każda struktura logiczna powinna być sformatowana jako blok;
  6. wszystkie struktury muszą mieć jedno wejście i jedno wyjście i nie więcej;
  7. tworzenie programu powinno przebiegać krok po kroku metodą „drabinkową” (metoda od góry do dołu)

* —
goto to operator bezwarunkowego skoku, który był szeroko stosowany w latach 70. XX wieku

Programowanie deklaratywne

reprezentuje specyfikację rozwiązania problemu i opisuje, na czym polega problem i oczekiwany wynik pracy.

Kontrastuje się z programowaniem imperatywnym, ponieważ programowanie deklaratywne opisuje Co zrobić, i w innym Jak Do.

Programowanie obiektowe (OOP)

to najpopularniejszy i najczęściej stosowany paradygmat akceptowany na całym świecie przez niemal wszystkich programistów. Na tym opiera się całe oprogramowanie przemysłowe. Główną ideą jest reprezentowanie programu jako obiektów, które z kolei reprezentują instancję klasy, a klasy z kolei tworzą hierarchię dziedziczenia.

Podstawowe pojęcia OOP

Abstrakcja danych— podkreślanie informacji istotnych i oddzielanie ich od informacji nieistotnych.

Kapsułkowanie- jest to właściwość pozwalająca na łączenie danych i metod w klasie

Dziedzictwo— właściwość pozwalająca na utworzenie nowej klasy na podstawie starej (dziedziczenie wszystkich jej właściwości)

Wielopostaciowość- i ta właściwość pozwala na używanie obiektów z tym samym interfejsem

(PODSTAWY ALGORYTMIZACJI I PROGRAMOWANIA)
  • Paradygmaty i technologie programowania
    Cele rozdziału 1. Przestudiowanie pojęć „paradygmat programowania”, „technologia programowania”. 2. Zdobądź ogólną wiedzę na temat nowoczesnych technologii tworzenia oprogramowania. 3. Przestudiuj etapy tworzenia programu strukturalnego. 4. Zapoznaj się z modelami cyklu życia oprogramowania...
  • Paradygmaty programowania SE
    SWEBOK obejmuje szereg paradygmatów programowania Patrz: Lavrishcheva E. M. Paradygmaty programowania typu asemblerowego w inżynierii oprogramowania // UKRProg-2014. Nr 2-3. s. 121-133. . Bootcampy programistyczne obejmują: programowanie proceduralne(kurs CS1011 „Podstawy programowania”),...
    (INŻYNIERIA OPROGRAMOWANIA I TECHNOLOGIE PROGRAMOWANIA ZŁOŻONYCH SYSTEMÓW)
  • PARADYGMY PROGRAMOWANIA
    PROGRAMOWANIE MODUŁOWE. PODSTAWOWE KONCEPCJE Jednym z kluczowych problemów współczesnego programowania jest ponowne wykorzystanie modułów i komponentów (KPI). Mogą to być programy, podprogramy, algorytmy, specyfikacje itp., odpowiednie do wykorzystania przy opracowywaniu nowego, bardziej złożonego oprogramowania.
    (INŻYNIERIA OPROGRAMOWANIA. PARADYGMY, TECHNOLOGIE I NARZĘDZIA PRZYKŁADOWE)
  • Paradygmat proceduralny
    Paradygmat proceduralny był chronologicznie pierwszy i dominował przez długi czas. Obecnie stopniowo ustępuje paradygmatowi obiektowemu, choć nadal zajmuje około połowy rynku tworzenia oprogramowania. Jest stosowany na wszystkich poziomach tworzenia oprogramowania...
    (ALGORYTMIZACJA I PROGRAMOWANIE)
  • Pamięć deklaratywna i proceduralna
    Innym niezależnym sposobem funkcjonalnej organizacji pamięci, niezależnym od innych, jest jej podział na deklaracyjny I proceduralny. Te dwie metody organizacji pamięci mają całkowicie zrozumiałe podstawy funkcjonalne. Forma pamięci deklaratywnej ma na celu wspieranie umysłu...
    (Psychologia i pedagogika)
  • Paradygmat programowania to zbiór pomysłów i koncepcji, które określają styl pisania programów.

    Paradygmat imperatywny opisuje proces obliczeniowy w postaci instrukcji zmieniających stan programu. Program imperatywny jest bardzo podobny do rozkazów imperatywnych w językach naturalnych, to znaczy jest sekwencją poleceń, które komputer musi wykonać. Na podstawie modelu automatu skończonego Turinga-Posta.

    Pierwszymi językami imperatywnymi były kody maszynowe – natywny język programowania komputera. W tych językach instrukcje były niezwykle proste, co zmniejszało obciążenie komputerów, ale utrudniało pisanie dużych programów. W 1954 roku pojawił się pierwszy „ludzki” język programowania – FORTRAN, następnie ALGOL, COBOL, BASIC, Pascal, C.

    Jedną z charakterystycznych cech programowania imperatywnego jest obecność zmiennych z operacją „przypisania destrukcyjnego”. Oznacza to, że istniała zmienna A, miała ona wartość X. Algorytm instruuje, aby w kolejnym kroku przypisać wartość Y zmiennej A. Wartość, którą posiadało A, zostanie „zapomniana na zawsze”.

    Programowanie imperatywne najlepiej sprawdza się przy realizacji małych podzadań, gdzie bardzo ważna jest szybkość wykonania na nowoczesnych komputerach. Ponadto praca z urządzeniami zewnętrznymi opisywana jest zazwyczaj w kategoriach sekwencyjnego wykonywania czynności („odkręć kran, nabierz wody”), co czyni tego typu zadania idealnymi kandydatami do imperatywnej realizacji.

    Wybór ram imperatywnego paradygmatu nauczania podstaw programowania wydaje się nie budzić wątpliwości. Istnieje kilka powodów:

    · paradygmat imperatywny jest najbliższy ludzkiej naturze i intuicyjnej koncepcji algorytmu we wczesnych fazach rozwoju myślenia (pozytywne doświadczenia edukacji rozwojowej z elementami algorytmizacji już w szkole podstawowej);

    · programowanie w ramach paradygmatu imperatywnego jest efektywne dla szerokiej klasy zadań, z których wiele mieści się w strefie najbliższego rozwoju uczniów starszych klas szkoły podstawowej;

    · paradygmat imperatywny jest najbliższy naturze komputera, podstawowym zasadom jego działania, gdyż pomimo całej złożoności współczesnego komputera, na poziomie sprzętowym nadal można go uważać za swego rodzaju automat (procesor + pamięć + ...) ze skończonym zbiorem stanów (zawartości) pamięci);

    · udział oprogramowania tworzonego wyłącznie w ramach paradygmatu programowania deklaratywnego jest niewielki; Z reguły przy rozwiązywaniu problemów stosuje się kombinację paradygmatów, z których jeden jest konieczny;

    · duży wybór systemów programistycznych w formie oprogramowania samodzielnego oraz w formie podsystemów zintegrowanych z innymi systemami, pozwalających na rozwój produktów software'owych w paradygmacie imperatywnym;


    · szeroka gama publikacji edukacyjnych, referencyjnych i innych na temat odpowiednich systemów programowania w formie papierowej i elektronicznej na różnych mediach i w sieci globalnej.

    Wada: w czystej postaci umożliwia rozwiązywanie tylko bardzo prostych problemów.

    Programowanie sterowane zdarzeniami to programowanie, w którym określone są reakcje programu na różne zdarzenia (działania użytkownika). PMS można uznać za „potomka” paradygmatu imperatywnego. SUP ma 2 podklasy:

    1. Programowanie równoległe przedstawia program jako zbiór komunikujących się procesów, które mogą być wykonywane równolegle. Takie programy mogą być wykonywane albo na jednym procesorze (naprzemienne wykonywanie kroków każdego procesu), albo na kilku.

    W systemie procesów równoległych każdy indywidualny proces przetwarza zdarzenia. Zdarzenia mogą być ogólne dla całego systemu lub indywidualne dla jednego lub kilku procesów. W ten sposób dość wygodnie jest opisać na przykład elementy graficznego interfejsu użytkownika, czy modelowanie dowolnych rzeczywistych procesów (na przykład sterowania ruchem) - gdyż koncepcja zdarzenia jest naturalna dla tego typu zadań.

    2. Programowanie obiektowe to technologia programowania, w której program postrzegany jest jako zbiór obiektów i ich interakcji. Każdy obiekt programu jest instancją jakiejś klasy; - klasy mogą dziedziczyć atrybuty i metody swoich klas nadrzędnych, jednocześnie dodając własne. Hierarchia klas pozwala na modelowanie istoty rozwiązywanego problemu na kilku poziomach szczegółowości, a następnie zastosowanie klasy odpowiadającej poziomowi szczegółowości wymaganemu do rozwiązania konkretnego podzadania.

    Należy podkreślić następujące podstawowe właściwości obiektów:

    1.) Ponieważ jeden obiekt może wpływać na drugi wyłącznie poprzez wysyłanie do niego komunikatów, nie może on w żaden sposób bezpośrednio pracować z własnymi danymi „rozmówcy”, a zatem nie może naruszać ich wewnętrznej spójności. Ta właściwość (ukrywanie danych) jest powszechnie nazywana enkapsulacją.

    2.) Ponieważ obiekty wchodzą w interakcję wyłącznie poprzez wymianę komunikatów, obiekty rozmówcy mogą nie wiedzieć nic o implementacji procedur obsługi komunikatów w swoim odpowiedniku. Interakcja zachodzi wyłącznie w formie komunikatów/zdarzeń, które dość łatwo można powiązać z domeną. Ta właściwość (opis interakcji wyłącznie w kategoriach dziedzinowych) nazywa się abstrakcją.

    3.) Obiekty oddziałują wyłącznie poprzez wysyłanie sobie wiadomości. Zatem jeśli w jakimkolwiek scenariuszu interakcji z obiektami dowolny obiekt zostanie zastąpiony innym, zdolnym do przetwarzania tych samych komunikatów, scenariusz ten również będzie możliwy do wdrożenia. Ta właściwość (możliwość zastąpienia obiektu innym obiektem o podobnej strukturze klas) nazywa się polimorfizmem.

    Wiele współczesnych języków obsługuje OOP, chociaż w różnym stopniu: Języki czysto obiektowe, takie jak Smalltalk i Ruby, są zaprojektowane tak, aby wspierać, a nawet egzekwować obiektowy styl programowania i nie obsługują innych stylów programowania; - języki w przeważającej mierze obiektowe, takie jak Java, C++ i Python, są przeznaczone przede wszystkim do obsługi OOP, ale pozwalają na wykorzystanie elementów programowania proceduralnego; - Historycznie rzecz biorąc, języki proceduralne, na przykład Perl i Fortran 2002, zostały udoskonalone i dodano obsługę niektórych elementów OOP.

    Paradygmat programowania deklaratywnego definiuje proces obliczeniowy, opisując logikę samego obliczenia, a nie logikę sterującą programem.

    Programowanie deklaratywne jest przeciwieństwem programowania imperatywnego; pierwsza opisuje, co należy zrobić, a druga dokładnie opisuje, jak to zrobić.

    Najważniejsze typy programowania deklaratywnego to programowanie funkcjonalne i logiczne (lub relacyjne).

    1. Programowanie funkcjonalne jest jedną z alternatyw dla podejścia imperatywnego. Opiera się na rachunku lambda Churcha. W programowaniu imperatywnym algorytmy są opisami operacji wykonywanych sekwencyjnie. Istnieje koncepcja „bieżącego etapu wykonania” (to znaczy czasu) i „bieżącego stanu”, który zmienia się w tym czasie.

    W programowaniu funkcjonalnym nie ma pojęcia czasu. Programy są wyrażeniami; wykonanie programu polega na ocenie tych wyrażeń.

    Ponieważ kolejność oceniania podwyrażeń nie ma znaczenia, programowanie funkcjonalne można w naturalny sposób zaimplementować na platformach obsługujących równoległość.

    Programowanie funkcyjne, podobnie jak inne „nieimperatywne” modele programowania, służy zwykle do rozwiązywania problemów trudnych do sformułowania w kategoriach operacji sekwencyjnych. Do tej kategorii zaliczają się prawie wszystkie zadania związane ze sztuczną inteligencją. Wśród nich na uwagę zasługują zadania rozpoznawania obrazów, komunikacji z użytkownikiem w języku naturalnym, implementacji systemów ekspertowych, automatycznego dowodzenia twierdzeń oraz obliczeń symbolicznych. Zadania te są dalekie od tradycyjnego programowania aplikacji, dlatego nie poświęca się im zbyt wiele uwagi w programach nauczania informatyki.

    Programowanie logiczne

    W programowaniu funkcjonalnym programy są wyrażeniami, a ich wykonanie polega na obliczeniu ich wartości. W programowaniu logicznym program to teoria (opisana w dość ograniczonym języku) i stwierdzenie, które należy udowodnić. Dowodem tego stwierdzenia będzie wykonanie programu.

    Programowanie logiczne i język Prolog wyłoniły się z badań w dziedzinie analizy języka naturalnego. Następnie odkryto, że programowanie logiczne jest równie skuteczne w realizacji innych zadań sztucznej inteligencji.

    Programowanie logiczne pozwala na naturalną implementację równoległą.

    Wykład nr Paradygmaty programowania. Programowanie imperatywne.

      Pojęcie paradygmatu programowania.

      Klasyfikacja paradygmatów programowania.

      Programowanie imperatywne.

    1. Pojęcie paradygmatu programowania.

    Paradygmat programowania to zbiór podejść, metod, strategii, pomysłów i koncepcji, które określają styl pisania programów.

    Paradygmat programowania we współczesnej branży programistycznej bardzo często wyznacza zestaw narzędzi programisty (język programowania i system operacyjny).

    Paradygmat programowania reprezentuje (i definiuje), jak programista postrzega wykonanie programu. Na przykład w programowaniu obiektowym programista postrzega program jako zbiór oddziałujących na siebie obiektów, podczas gdy w programowaniu funkcjonalnym program jest reprezentowany jako łańcuch ocen funkcji.

    Przywiązanie danej osoby do określonego paradygmatu jest czasami tak silne, że debaty na temat zalet i wad różnych paradygmatów są klasyfikowane w kręgach komputerowych jako tzw. wojny „religijne”.

    Historia terminu

    Termin „paradygmat” najwyraźniej zawdzięcza swoje współczesne znaczenie w dziedzinie nauki i techniki Thomasowi Kuhnowi i jego książce „Struktura rewolucji naukowych” (patrz paradygmat). Kuhn nazwał paradygmatami ustalone systemy poglądów naukowych, w ramach których prowadzone są badania. Według Kuhna w procesie rozwoju dyscypliny naukowej jeden paradygmat może zostać zastąpiony innym (jak np. geocentryczną mechanikę nieba Ptolemeusza zastąpiono heliocentrycznym systemem Kopernika), podczas gdy stary paradygmat nadal istnieje przez jakiś czas, a nawet rozwijać się ze względu na to, że wielu jej zwolenników okazuje się z tego czy innego powodu nie potrafiących przystosować się do pracy w innym paradygmacie.

    Terminu „paradygmat programowania” po raz pierwszy użył Robert Floyd w swoim wykładzie, który zdobył nagrodę Turinga.

    Floyd zauważa, że ​​w programowaniu można zaobserwować zjawisko podobne do paradygmatów Kuhna, jednak w przeciwieństwie do nich paradygmaty programowania nie wykluczają się wzajemnie:

    Jeśli postęp sztuki programowania jako całości wymaga ciągłego wymyślania i udoskonalania paradygmatów, to doskonalenie sztuki pojedynczego programisty wymaga poszerzania przez niego repertuaru paradygmatów.

    Zatem, zdaniem Roberta Floyda, w odróżnieniu od paradygmatów w świecie naukowym opisanych przez Kuhna, paradygmaty programowania można łączyć, wzbogacając narzędzia programisty.

    2. Klasyfikacja paradygmatów programowania.

    Wiodący paradygmat programowania stosowanego, oparty na sterowaniu imperatywnym i proceduralno-operatorowym stylu konstruowania programów, zyskał popularność ponad pięćdziesiąt lat temu w obszarze wysoce profesjonalnej działalności specjalistów w zakresie organizacji procesów obliczeniowych i informacyjnych. Ostatnia dekada gwałtownie rozszerzyła geografię informatyki, rozszerzając ją na sferę masowej komunikacji i wypoczynku. Zmienia to kryteria oceny systemów informatycznych oraz preferencje w wyborze narzędzi i metod przetwarzania informacji.

    Najbardziej stabilne są ogólne paradygmaty programowania, które wyłoniły się na samym początku ery programowania komputerowego – m.in. paradygmaty programowania stosowanego, teoretycznego i funkcjonalnego.

    Programowanie stosowane charakteryzuje się orientacją problemową, odzwierciedlającą komputeryzację informacji i procesy obliczeniowe przetwarzania numerycznego, badaną na długo przed pojawieniem się komputerów. To tutaj szybko pojawił się wyraźny praktyczny wynik. Oczywiście w takich obszarach programowanie niewiele różni się od kodowania, w tym przypadku z reguły wystarczający jest operatorowy styl reprezentowania działań. W praktyce programowania stosowanego zwyczajem jest ufanie sprawdzonym szablonom i bibliotekom procedur oraz unikanie ryzykownych eksperymentów. Ceniona jest dokładność i stabilność obliczeń naukowych. Język Fortran jest weteranem programowania aplikacji. Dopiero w ostatniej dekadzie stał się nieco gorszy pod tym względem od Pascala-C, a na superkomputerach od równoległych języków programowania, takich jak Sisal. [, , , ]

    Programowanie teoretyczne przyjmuje orientację publikacyjną mającą na celu porównywalność wyników eksperymentów naukowych z zakresu programowania i informatyki. Programowanie stara się wyrazić swoje modele formalne, pokazać ich znaczenie i fundamentalną naturę. Modele te odziedziczyły główne cechy pokrewnych pojęć matematycznych i ugruntowały swoją pozycję jako podejście algorytmiczne w informatyce. Chęć udowodnienia konstrukcji i ocena ich efektywności, wiarygodności, poprawności, poprawności i innych sformalizowanych relacji na diagramach i tekstach programów posłużyła jako podstawa do programowania strukturalnego [, ] i innych metod osiągania niezawodności procesu tworzenia programu, na przykład , kompetentne programowanie. Standardowe podzbiory Algola i Pascala, które służyły jako materiał roboczy do teorii programowania, zostały zastąpione wygodniejszymi językami aplikacyjnymi do eksperymentów, takimi jak ML, Miranda, Scheme i inne dialekty Lisp. Teraz łączą je podzbiory C i Java.

    Programowanie funkcjonalne powstało jako hołd dla orientacji matematycznej w badaniach i rozwoju sztucznej inteligencji oraz rozwoju nowych horyzontów w informatyce. Abstrakcyjne podejście do prezentacji informacji, lakoniczny, uniwersalny styl konstruowania funkcji, przejrzystość środowiska wykonawczego dla różnych kategorii funkcji, dowolność konstrukcji rekurencyjnych, zaufanie do intuicji matematyka i badacza, unikanie ciężaru przedwczesnego rozwiązywanie pozbawionych zasad problemów alokacji pamięci, odrzucenie nieuzasadnionych ograniczeń zakresu definicji – wszystko to łączy John McCarthy z ideą języka Lisp. Przemyślaność i trafność metodologiczna pierwszych wdrożeń Lispa pozwoliła szybko zgromadzić doświadczenie w rozwiązywaniu nowych problemów i przygotować je do programowania stosowanego i teoretycznego. Obecnie istnieją setki funkcjonalnych języków programowania skupionych na różnych klasach zadań i rodzajach środków technicznych. [,,,,,,]

    Podstawowe narzędzia i metody programowania ewoluowały wraz ze wzrostem złożoności rozwiązywanych problemów. Nastąpiło rozwarstwienie paradygmatów programowania w zależności od głębokości i ogólności opracowania szczegółów technicznych organizacji procesów przetwarzania informacji komputerowych. Pojawiły się różne style programowania, z których najbardziej dojrzałe to programowanie niskopoziomowe (zorientowane na maszynę), programowanie systemowe, deklaratywno-logiczne, optymalizacyjno-transformacyjne i wysokowydajne/równoległe.

    Programowanie niskiego poziomu charakteryzuje się sprzętowym podejściem do organizacji działania komputera, mającym na celu dostęp do dowolnych możliwości sprzętowych. Nacisk położony jest na konfigurację sprzętu, stan pamięci, polecenia, transfery sterowania, sekwencję zdarzeń, wyjątki i niespodzianki, czas reakcji urządzenia i powodzenie reakcji. Język asemblera został przez pewien czas przyćmiony jako medium wizualne wybierane przez Pascala i C, nawet w mikroprogramowaniu, ale ulepszenia interfejsu użytkownika mogą odzyskać swoją pozycję. [,,,]

    Programowanie systemowe rozwija się od dłuższego czasu pod presją usług serwisowych i prac na zlecenie. Podejście produkcyjne nieodłącznie związane z taką pracą opiera się na preferowaniu powtarzalnych procesów i stabilnych programów przeznaczonych do wielokrotnego użytku. W przypadku takich programów uzasadniony jest schemat przetwarzania kompilacji, analiza statyczna właściwości, automatyczna optymalizacja i kontrola. W obszarze tym dominuje imperatywno-proceduralny styl programowania, będący bezpośrednim uogólnieniem operatorskiego stylu programowania aplikacji. Pozwala na pewną standaryzację i programowanie modułowe, ale uzyskuje dość złożone struktury, specyfikacje, metody testowania, narzędzia integracji programów itp. Rygorystyczne wymagania dotyczące wydajności i niezawodności są spełniane poprzez rozwój profesjonalnych narzędzi wykorzystujących złożoną heurystykę asocjacyjną semantyczną wraz z metodami projektowania i generowania programów sterowanych syntaktycznie. Niezaprzeczalny potencjał takich narzędzi w praktyce jest ograniczony złożonością rozwoju – pojawia się wymóg kwalifikacji.

    Programowanie wysokowydajne ma na celu osiągnięcie maksymalnej możliwej wydajności przy rozwiązywaniu szczególnie ważnych problemów. Naturalną rezerwą wydajności komputera są procesy równoległe. Ich organizacja wymaga szczegółowego rozważenia relacji czasowych i nieimperatywnego stylu kierowania działaniami. Superkomputery obsługujące obliczenia o wysokiej wydajności wymagały specjalnych technik programowania systemów. Podejście grafowo-sieciowe do reprezentowania systemów i procesów dla architektur równoległych zostało wyrażone w wyspecjalizowanych językach programowania równoległego i superkompilatorach przystosowanych do mapowania abstrakcyjnej hierarchii procesów na poziomie zadań na specyficzną strukturę przestrzenną procesorów rzeczywistego sprzętu [,,] .

    Programowanie deklaratywne (logiczne) powstało jako uproszczenie programowania funkcjonalnego dla matematyków i lingwistów rozwiązujących problemy przetwarzania symbolicznego. Szczególnie atrakcyjna jest możliwość wykorzystania niedeterminizmu jako podstawy pojęciowej, co uwalnia nas od przedwczesnego porządkowania przy programowaniu przetwarzania formuł. Styl produkcyjny generowania procesów ze zwrotami jest na tyle naturalny, że pozwala na językowe podejście do wyjaśniania sformalizowanej wiedzy przez ekspertów i zmniejsza barierę wyjściową we wdrażaniu systemów informatycznych.

    Programowanie transformacyjne metodologicznie łączyło techniki optymalizacji programu, makrogeneracji i obliczeń cząstkowych. Główną koncepcją w tym obszarze jest równoważność informacji. Przejawia się w definiowaniu przekształceń programów i procesów, w poszukiwaniu kryteriów stosowalności przekształceń, w wyborze strategii ich wykorzystania. Mieszane obliczenia, odroczone działania, leniwe programowanie, opóźnione procesy itp. służą jako metody zwiększania efektywności przetwarzania informacji pod pewnymi dodatkowo określonymi warunkami. [,]

    Dalszy rozwój paradygmatów programowania odzwierciedla zmianę w kręgu osób zainteresowanych wykorzystaniem systemów informatycznych. Tworzenie się szerokich podejść do programowania jest naturalną odpowiedzią na radykalną poprawę charakterystyki wydajnościowej sprzętu i sieci komputerowych. Następuje przejście narzędzi obliczeniowych z klasy narzędzi technicznych do klasy sprzętu gospodarstwa domowego. Pojawił się grunt dla aktualizacji podejścia do programowania, a także możliwości rehabilitacji starych pomysłów, które były słabo rozwinięte ze względu na niską technologię i wydajność komputerów. Interesujące jest rozwijanie badawczych, ewolucyjnych, poznawczych i adaptacyjnych podejść do programowania, które stwarzają perspektywę racjonalnego rozwoju rzeczywistych zasobów informacyjnych i potencjału komputerowego. [,]

    Podejście badawcze w stylu edukacyjno-gierowym programowania profesjonalnego, edukacyjnego i amatorskiego może dać impuls do pomysłowości w ulepszaniu technologii programowania, która nie była w stanie poradzić sobie ze zjawiskami kryzysowymi na bazie poprzedniego elementu. [,]

    Ewolucyjne podejście z mobilnym stylem udoskonalania programów jest dość wyraźnie widoczne w koncepcji programowania obiektowego, które stopniowo rozwija się w programowanie podmiotowe, a nawet zorientowane na ego. Ponowne wykorzystanie definicji i dziedziczenie właściwości obiektów może wydłużyć cykl życia debugowanych środowisk informacyjnych, zwiększyć niezawodność ich działania i łatwość obsługi. Podejście kognitywne z interoperacyjnym stylem tworzenia interfejsów wizualno-interfejsowych systemów otwartych oraz wykorzystanie nowych narzędzi audio-wideo i niestandardowych urządzeń otwierają sposoby na poprawę percepcji złożonych informacji i uproszczenie ich odpowiedniego przetwarzania. [,]

    Podejście adaptacyjne z ergonomicznym stylem zindywidualizowanego projektowania spersonalizowanych systemów informatycznych zapewnia informatykom możliwość kompetentnego programowania, organizowania i wspierania procesów technologicznych w czasie rzeczywistym, wrażliwych na czynnik ludzki i transfer systemowy [,].

    Dominacja jednej linii architektonicznej, standardowego interfejsu, standardowej technologii programowania itp., która obecnie się stabilizuje. jest obarczona utratą elastyczności podczas aktualizacji technologii informatycznych. Szczególnie bezbronni są pod tym względem ludzie, którzy są przyzwyczajeni do zdecydowanego asymilowania wszystkiego raz na zawsze. Ucząc się języków programowania, takich problemów unika się ucząc różnych języków programowania jednocześnie lub wstępnie przedstawiając podstawy, które wyznaczają strukturę gramatyczną do uogólniania pojęć, których zmienność jest trudna do uchwycenia na uproszczonych przykładach edukacyjnych. To jest właśnie podstawa, jaką zapewnia nauka programowania funkcjonalnego, ponieważ ma na celu przedstawienie i analizę paradygmatów, które rozwinęły się w praktyce programowania w różnych obszarach działalności o różnym poziomie kwalifikacji specjalistycznych, co może być przydatne jako konceptualne podstawę do badania nowych zjawisk w informatyce.

    Paradygmat programowania jest narzędziem kształtowania zachowań zawodowych. Informatyka przeszła od profesjonalnego programowania przez wysoko wykwalifikowaną elitę specjalistów technicznych i naukowców do swobodnej rozrywki aktywnej części cywilizowanego społeczeństwa. Opanowanie systemów informatycznych poprzez zrozumienie w celu kompetentnego działania i odpowiedzialnego korzystania z technologii zostało zastąpione intuicyjnymi umiejętnościami chaotycznego oddziaływania na środowisko informacyjne ze skromną nadzieją na szczęście, bez roszczeń do wiedzy. Utrzymanie centrów wspólnego użytku, profesjonalne wsparcie w zakresie integralności informacji i przygotowania danych niemal całkowicie ustąpiły miejsca samoobsłudze komputerów osobistych, niezależnemu funkcjonowaniu sieci i heterogenicznych serwerów z interakcją różnych środków komunikacji.

    Zestawienie powstających programów, przetwarzanych danych i zarządzania zadaniami ustępuje idei interfejsów zaprojektowanych do udziału w przepływach informacji, takich jak nawigacja. Dawne kryteria jakości: szybkość, oszczędność pamięci i niezawodność przetwarzania informacji są w coraz większym stopniu przyćmione atrakcyjnością gier i szerokim dostępem do światowych zasobów informacyjnych. Zamknięte systemy oprogramowania o znanych gwarancjach jakości i niezawodności wypierane są przez otwarte systemy informacyjne o nieprzewidywalnym rozwoju składu, sposobów przechowywania i przetwarzania informacji.

    Wiele ważnych pojęć dla praktyki programowania, takich jak zdarzenia, wyjątki i błędy, potencjał, hierarchia i ortogonalność konstrukcji, ekstrapolacja i punkty wzrostu programu, pomiar jakości itp. nie osiągnęła wystarczającego poziomu abstrakcji i formalizacji. Pozwala to przewidzieć rozwój paradygmatów programowania i wybrać materiały edukacyjne na przyszłość programowania komponentowego (COM/DCOM, Corba, UML itp.). Gdyby tradycyjne środki i metody doboru komponentów wielokrotnego użytku poddać kryterium modułowości, rozumianej jako optymalny dobór minimalnego sprzężenia przy maksymalnej funkcjonalności, to nowoczesna baza elementowa pozwala na pracę zespołów wielostykowych realizujących proste operacje. [,,,,,]

    Te symptomy aktualizacji paradygmatu programowania wyznaczają kierunek zmian zachodzących w systemie pojęć podstawowych, w pojęciu informacji i informatyki. Zapowiadany w koncepcji Java w porównaniu z C trend stosowania interpreterów (dokładniej niekompletnej kompilacji) zamiast kompilatorów oraz pokusę programowania obiektowego na tle ogólnie przyjętego imperatywno-proceduralnego stylu programowania można postrzegane jako ukryty ruch w kierunku stylu funkcjonalnego. Siła modelowania wzorów funkcjonalnych jest wystarczająca do pełnego odwzorowania różnych paradygmatów, co pozwala na ich podstawie ekstrapolować nabycie praktycznych umiejętności organizacji procesów informacyjnych na przyszłość.

    W połowie ubiegłego (XX) wieku termin „programowanie” nie oznaczał połączenia z komputerem. Można było zobaczyć tytuł książki „Programowanie komputerów”. Obecnie termin ten domyślnie oznacza organizację procesów na komputerach i sieciach komputerowych.

    Programowanie jako nauka znacznie różni się od matematyki i fizyki pod względem oceny wyników. Poziom wyników uzyskiwanych przez fizyków i matematyków oceniają zazwyczaj specjaliści o podobnych lub wyższych kwalifikacjach. W ocenie wyników programowania ważną rolę odgrywa ocena użytkownika, który nie pretenduje do posiadania wiedzy programistycznej. Dlatego też, w odróżnieniu od nauk konwencjonalnych, programiści częściowo pełnią funkcję przekładania swoich zawodowych terminów na koncepcje użytkownika.

    Programowanie ma swoją specyficzną metodę ustalania wiarygodności wyników - jest to eksperyment komputerowy. Jeśli w matematyce niezawodność sprowadza się do konstrukcji demonstracyjnych, zrozumiałych tylko dla specjalistów, a w fizyce - do powtarzalnego eksperymentu laboratoryjnego wymagającego specjalnego sprzętu, to eksperyment komputerowy może być dostępny dla ogółu społeczeństwa.

    Kolejna cecha programowania wynika z jego zależności od szybko rozwijającej się technologii elektronicznej. Z tego powodu wiedza programistyczna to połączenie klasyki i mody. Specyficzna wiedza o modnych nowościach staje się nieaktualna, więc aby szybko zaktualizować wiedzę i umiejętności, potrzebny jest klasyczny fundament, którego bezpośrednie przeznaczenie nie jest do końca oczywiste dla użytkowników i początkujących. [,,]

    Programowanie wykorzystuje aparat matematyczny jako podstawę pojęciową (teoria mnogości, teoria liczb, algebra, logika, teoria algorytmów i funkcji rekurencyjnych, teoria grafów itp.)

    Kryteria jakości programu są bardzo zróżnicowane. Ich znaczenie zależy zasadniczo od klasy zadań i warunków stosowania programów:

    skuteczność

    niezawodność

    zrównoważony rozwój

    automatyzacja

    efektywne wykorzystanie zasobów (czasu, pamięci, urządzeń, informacji, ludzi)

    łatwość rozwoju i użytkowania

    widoczność tekstu programu

    obserwowalność procesu programu

    diagnostyka tego, co się dzieje

    Uporządkowanie kryteriów często ulega zmianom wraz z rozwojem obszaru stosowania programu, wzrostem kwalifikacji użytkowników, modernizacją sprzętu, technologią informatyczną i inżynierią oprogramowania. Wynikający z tego ciągły rozwój przestrzeni, w której rozwiązywany jest problem, wprowadza dodatkowe wymagania dotyczące stylu programowania systemów informatycznych:

    elastyczność

    modyfikowalność

    możliwość poprawy

    Programowanie jako nauka, sztuka i technologia bada i twórczo rozwija proces tworzenia i używania programów, określa środki i metody konstruowania programów, z których różnorodnością zapoznamy się w dalszych wykładach poświęconych analizie szeregu podstawowych zagadnień paradygmaty programowania.

    Istnieją oczywiste trudności w klasyfikacji języków programowania i ustaleniu, czy należą one do określonego paradygmatu programowania. W tym kursie paradygmat programowania charakteryzuje się interakcją podstawowych systemów semantycznych, takich jak przetwarzanie danych, przechowywanie danych i kontrola przetwarzania danych. Przy takim podejściu można wyróżnić trzy kategorie paradygmatów:

    programowanie niskiego poziomu;

    programowanie w językach wysokiego poziomu;

    przygotowanie programów w oparciu o języki ultrawysokiego poziomu.

    Programowanie niskiego poziomu zajmuje się strukturami danych podyktowanymi architekturą i sprzętem. Podczas przechowywania danych i programów wykorzystywana jest pamięć globalna oraz model kontroli automatycznego przetwarzania danych. [,,,,,,,,]

    Programowanie w językach wysokiego poziomu przystosowane jest do określania struktur danych odzwierciedlających charakter rozwiązywanych problemów. Wykorzystywana jest hierarchia obszarów widoczności struktur danych oraz procedur ich przetwarzania, podporządkowana strukturalno-logicznemu modelowi sterowania, który pozwala na zbieżność procesu debugowania programu. [,,,,,,]