Gramatyki, języki programowania Przy opracowywaniu wykładu wykorzystano m.in.: Wojciech Sobieski - strona informacyjna (http://moskit.uwm.edu.pl/~wojsob/) http://www.algorytm.org/index.php?option=com_frontpage&Itemid=1 Wstęp do informatyki (materiały Wyższej Szkoły Informatyki) J. Sikorski Sczególnie polecam: Strona Politechniki Śląskiej, wydz. AAII, podstawy informatyki: http://zti.polsl.pl/pi/ (Autor: Robert Tutajewicz)
Przypomnienie Przepis Składniki Czynności
Przypomnienie Pojęcie zmiennej Zmienna jest symbolem, oznaczającym określoną strukturę danych. W szczególności może to być np. liczba np. X := 100; X := X + 2; Średnikiem oznaczamy tzw. instrukcję, czyli koniec pojedynczej operacji. Znak := w algorytmice oznacza operacje przypisania i nie należy go mylić z matematycznym znakiem = (równość)
Sposoby reprezentacji danych Przypomnienie Sposoby reprezentacji danych Dane numeryczne: całkowite, „rzeczywiste” posiadają określony zakres i dokładność Tablice Listy Stosy Kolejki Drzewa Grafy
Sposoby reprezentacji danych Trzeba pamiętać, że o ile zasady dotyczące zmiennych i struktur danych są zawsze aktualne, to ich organizacja i sposób zapisu różni się w poszczególnych językach.
Od algorytmu do programu Być może kiedyś wszystkie problemy zostaną rozwiązane w postaci odpowiednich programów. Wtedy programowanie nie będzie już nikomu potrzebne. Na razie programiści wciąż mają sporo pracy a programowanie jest Ważnym elementem informatyki.
Intencje a Interpretacje Często pojawia się w komediach motyw, że ktoś spełnia w magiczny sposób życzenia bohatera. Dlaczego są to na najczęściej komedie? Życzenia są interpretowane niezgodnie z intencjami. I to jest bardzo śmieszne:) Komputery nie potrafią jednak interpretować naszych życzeń.
Pseudokod do zapisu algorytmów Alternatywą dla blokowego zapisu algorytmów jest tzw. pseudokod. Algorytm w pseudokodzie składa się z uporządkowanych instrukcji. FOR X = 1 to 10 FOR Y = 1 to 10 IF gameBoard[X][Y] = 0 Do nothing ELSE CALL figureFound(X, Y) increment counter END IF END FOR Uporządkowana składnia, choć w zależności od zastosowania (księgowe, matematyczne i inne) zapis może się znacznie różnić. Mimo pewnych ustalonych norm reguły zapisu pozostają dość dowolne i zbliżone są do konwencji opisowej. Zrozumienie pseudokodu jest dość łatwe, jednak przydaje się doświadczenia z języków programowania. Składnia jest podobna do tej stosowanej w języku PASCAL. Wspólnym elementem pozostają STRUKTURY STERUJĄCE Odgrywają one również ważną rolę we wszystkich językach programowania. CASE Title OF Mr : Print "Mister" Mrs : Print "Missus" Miss : Print "Miss" Ms : Print "Mizz" Dr : Print "Doctor" ENDCASEv IF HoursWorked > NormalMax THEN Display overtime message ELSE Display regular time message ENDIF
Pseudokod - struktury sterujące Związane są z warunkowym wykonywaniem określonych instrukcji w algorytmie. Wśród instrukcji sterujących można wymienić: Instrukcję warunkową „jeżeli” if Instrukcję wyboru case; Instrukcje pętli: Pętla for; Pętla while; Pętla do…while; (lub także repeat…until) W naszych zapisach będziemy stosowali konwencję zbliżoną do języka PASCAL.
Języki czyli w informatyce rozmawiamy w sposób formalny
Język (potocznie) Ukształtowane w ciągu tysięcy lat jako środek porozumiewania się między ludźmi ● Duża swoboda konstruowania zdań (brak ścisłych reguł) ● Duża ilość wyjątków ● Mało przydatne do zapisu ścisłych pojęć jak np. treść algorytmu http://zti.polsl.pl/pi/
Język (logika, informatyka) W logice matematycznej przez język rozumie się pewien zbiór symboli, przy użyciu których można tworzyć bardziej złożone wyrażenia (na przykład formuły, zdania) według ściśle określonych reguł syntaktycznych. Przyjmuje się, że w danym języku L mogą występować symbole funkcyjne, relacyjne oraz symbole stałych. Zdania napisane przy użyciu języków powinny wystarczać do opisu większości własności dowolnych struktur matematycznych oraz do wyrażenia twierdzeń mówiących o tych strukturach. Na podst. http://pl.wikipedia.org/wiki/J%C4%99zyk_(logika)
Język formalny (logika, informatyka) Skończony zbiór symboli nazywamy alfabetem. Dla przykładu może być to zwyczajny polski alfabet, złożony z liter a, ą, b, c, ć itd., choć może być nim np. zbiór cyfr od 0 do 9 itp. Z symboli takiego alfabetu możemy budować słowa – skończone ciągi symboli. Słowem nad alfabetem polskich liter jest więc "ala", "słoneczko", ale też "myzmyz" czy słowo puste „”. Język formalny to podzbiór zbioru wszystkich słów nad pewnym alfabetem. Na podst. http://pl.wikipedia.org/wiki/J%C4%99zyk_(logika)
Gramatyki formalne Dla każdego alfabetu, choćby jednoelementowego, ilość możliwych do ułożenia słów jest nieskończona. Język formalny to podzbiór zbioru tych słów. Języki formalne należy opisywać za pomocą pewnych skończonych opisów. Najważniejszym sposobem opisywania języków formalnych są gramatyki formalne. Należy zauważyć, że podzbiór może być także nieskończony, ale opis tworzenia tego podzbioru jest skończony. Na podst. http://pl.wikipedia.org/wiki/J%C4%99zyk_(logika)
Gramatyki formalne Opis metodą gramatyki formalnej składa się z: Opisania symboli alfabetu używanego przez język. Są to tzw. symbole terminalne. Wyboru dowolnego skończonego zbioru symboli pomocniczych, tzw. symboli nieterminalnych Wyboru z symboli nieterminalnych jednego symbolu startowego Wyboru pewnego skończonego zbioru reguł przepisywania (zwanych też produkcjami). Każda z reguł składa się z jednego słowa będącego lewą stroną reguły, oraz drugiego będącego prawą stroną. Na podst. http://pl.wikipedia.org/wiki/J%C4%99zyk_(logika)
Przykład 1 Gramatyka sloganów: Alfabet - {cukier, chemia, krzepi, pogrubia, wzmacnia, ubiera} Zdanie podmiot orzeczenie Podmiot cukier, chemia Orzeczenie krzepi, pogrubia, wzmacnia, ubiera Zdanie podmiot orzeczenie cukier krzepi (1) Zdanie podmiot orzeczenie chemia ubiera (2) Zdanie podmiot orzeczenie cukier ubiera (3) Zdanie podmiot orzeczenie cukier wzmacnia (4) Gramatyka definiuje słowa, które są poprawne. Czy jednak wszystkie poprawne gramatycznie słowa mają sens? http://zti.polsl.pl/AMomot/pi/zad.gramatyka+ONP.doc.
Przykład 2 Alfabet - { a, b, c } Słowo_1 b Słowo_2 aSłowo_1c Które poprawne: Słowa poprawne: b – na podstawie reguły 1 abc – na podstawie reguły 1 i reguły 2 aabcc – na podstawie reguły 1 i reguły 2 (dwukrotnie) http://zti.polsl.pl/AMomot/pi/zad.gramatyka+ONP.doc.
Gramatyka Chomskiego Elementy definiujące gramatykę Chomskiego to: ● zbiór symboli terminalnych V ● zbiór symboli pomocniczych (nieterminalnych, metasymboli) Σ ● zbiór reguł, jak wyprowadzamy słowa P ● symbol startowy (aksjomat, głowa) σ http://zti.polsl.pl/pi/
Przykład – wyrażenia algebraiczne G = < V, Σ, P, σ > gramatyka V = { a, b, .. , z, (, ), +, * } alfabet Σ = { W, S, C } symbole pomocnicze (metasymbole) P = { W → S, lista produkcji W → W + S, S → C, S → S * C, C → ( W ), C → a, ... C → z } σ = W od czego zaczynamy (W – wyrażenie) http://zti.polsl.pl/pi/
Przykład wyprowadzenie poprawności dla wyrażenia G = < V, Σ, P, σ > V = { a, b, .. , z, (, ), +, * } Σ = { W, S, C } P = { W → S, W → W + S, S → C, S → S * C, C → ( W ), C → a, ... C → z } σ = W a * b + c + d * ( z * y + x * q ) W → W + S → W + S + S → S + S + S → S * C + C + S * C → C * C + C + C * C → C * C + C + C * ( W ) → C * C + C + C * ( W + S ) → C * C + C + C * ( S + S ) → C * C + C + C * ( S * C + S * C ) → C * C + C + C * ( C * C + C * C ) → http://zti.polsl.pl/pi/
Notacja Backusa-Naura BNF Używana powszechnie do zapisu gramatyk języków programowania jak i fragmentów gramatyk języków naturalnych Symbol → zastąpiony przez ::= Symbole pomocnicze zapisywane w nawiasach kątowych <symbol> Pionowa kreska | reprezentuje alternatywne wersje produkcji dla tego samego symbolu http://zti.polsl.pl/pi/
Przykład – gramatyka palindromów w BNF G = < V, Σ, P, σ > V = { a, b } Σ = { <S> } P = { <S> ::= a<S>a | b<S>b | a | b | ε } σ = <S> http://zti.polsl.pl/pi/
Przykład – wyrażenia algebraiczne w notacji BNF G = < V, Σ, P, σ > V = { a, b, .. , z, (, ), +, * } Σ = { <W>, <S>, <C> } P = { <W> ::= <S> |<W> + <S> <S> ::= <C> | <S> * <C> <C> ::= ( <W> ) | a | b | .. | z } σ = <W> http://zti.polsl.pl/pi/
Przykład – odwrotna notacja polska (ONP) Inny sposób zapisu wyrażeń: symbole argumentów poprzedzają symbol operacji nie wymaga nawiasów prostota obliczania wartości wyrażenia zapisanego w ONP brak pojęcia priorytetów operatorów Np.: a+b ab+ a*x+y*(a+b) ax*yab+*+ ((a+b*c)*(x+y)+a)*b abc*+xy+*a+b* Jaka może być zaleta takiego zapisu w systemach informatycznych? http://zti.polsl.pl/pi/
Przykład – odwrotna notacja polska (ONP) G = < V, Σ, P, σ > V = { a, b, .. , z, +, * } Σ = { <W>, <Z>, <O> } P = { <W> ::= <Z> |<W><W><O> <O> ::= + | * <Z> ::= a | b | .. | z } σ = <W> http://zti.polsl.pl/pi/
Rozszerzona notacja Backusa-Naura BNF objęta standardem ISO-14977 (1996) Dodatkowe symbole: opcjonalność [ x ] powtarzanie { x } znak końca reguły ; Modyfikacje w stosunku do BNF ● symbole terminalne ”x” ● symbole pomocnicze bez nawiasów <> ● symbol ::= zastąpiony przez = http://zti.polsl.pl/pi/
Programowanie komputerów czyli ciągle o zapisywaniu algorytmów
Składnia a semantyka Składnia (syntaktyka) – zbiór reguł gramatycznych mówiących o tym, jak wygląda poprawny program w danym języku (jak tworzy się polecenia i wyrażenia, jaką postać mają instrukcje, jak zapisuje się deklaracje) Semantyka – określa znaczenie wspomnianych wyżej form językowych (np. jak działa instrukcja warunkowa if lub pętla for w języku C)
Składnia języka programowania przykład <identyfikator> ::= <litera> | <identyfikator><litera> | <identyfikator><cyfra> <cyfra> ::= 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 <instrukcja warunkowa> ::= if <wyrażenie logiczne> then <instrukcja> [ else <instrukcja> ] <lista parametrów> ::= <parametr> { , <parametr> }
Języki programowania wymyślono po to, by można było dzięki nim tworzyć różnorodne programy komputerowe. Oczekuje się również, że tworzone aplikacje będą wykonywać swoje zadania w sposób jednoznaczny i zgodny z określoną na etapie projektowania specyfikacją wymagań – języki programowania muszą się więc opierać na ogólnie obowiązujących zasadach logiki i arytmetyki.
Problem Komputer Algorytm Język programowania Program Rozwiązanie
Komputer zbudowany jest w oparciu o obwody cyfrowe (binarne) i reaguje bezpośrednio na sygnały pochodzące z tych obwodów. Ręczne manipulowanie obwodami jest trudne, choć w początkowym okresie rozwoju komputerów tak właśnie wyglądało programowanie
Sekwencje sygnałów opracowane zostały w postaci rozkazów zrozumiałych dla procesora, tworząc tzw. KOD MASZYNOWY Jest on obecnie wykorzystywany przez programistów raczej wyłącznie do zadań, w których szczególnie ważna jest szybkość działania programu. Nazywany jest językiem niskiego poziomu.
Kodowanie binarne (maszynowe) Pisanie programów w kodzie maszynowym było i jest baaardzo trudne. Program składa się z ciągu rozkazów oraz danych Realizacja programu rozpoczyna się od rozkazu zapisanego w komórce pamięci o adresie 0 Stosuje się stały format rozkazów KOD Argument http://zti.polsl.pl/pi/
Kodowanie binarne (maszynowe) przykładowa (kompletna) lista rozkazów http://zti.polsl.pl/pi/
Kodowanie binarne (maszynowe) Przykład Dodaj do siebie zawartość dwóch komórek pamięci (4 i 5) i sumę zapisz do komórki 6 Rozwiązanie (4) → AK 100 00100 (AK) + (5) → AK 001 00101 (AK) → 6 011 00110 koniec 111 00000 http://zti.polsl.pl/pi/
Kodowanie binarne (maszynowe) Zalety Program nie wymaga tłumaczenia Może być zrealizowany bezpośrednio po wprowadzeniu do pamięci Małe wymagania na pamięć Wady Konieczność operowania na kodach binarnych rozkazów Konieczność wyliczania adresów komórek Bardzo trudna modyfikacja programu Rozwiązanie dedykowane konkretnemu procesorowi http://zti.polsl.pl/pi/
Wyższe poziomy - translacja Kod źródłowy – jest to program komputerowy w postaci tekstu zawierającego instrukcje języka programowania. Kod źródłowy jest jedynym formatem programu czytelnym dla człowieka. Kod maszynowy (jest to więc przetłumaczona na język niskiego poziomu wersja kodu źródłowego); translacja
Jeden krok wyżej – język symboliczny Podobnie jak kod maszynowy, tylko z zastąpieniem kodów wewnętrznych komputera oraz adresów komórek pamięci w postaci binarnej specjalnymi symbolami. Brak jest więc potrzeby wyliczania adresów określających położenie komórek roboczych. Program staje się bardziej zrozumiały Łatwiejsza modyfikacja Wciąż rozwiązanie ściśle związane z konkretnym procesorem
Jeden krok wyżej – język symboliczny Składnia instrukcji w języku symbolicznym (asemblerze) Etykieta to nazwa zakończona dwukropkiem (może zostać pominięta) Kod jest wymagany, może to być wartość lub dyrektywa Argument jest opcjonalny (zależy od kodu rozkazu) Argumentem może być etykieta lub liczba dziesiętna [<etykieta>] <kod> [<Argument>]
Jeden krok wyżej – język symboliczny http://zti.polsl.pl/pi/
Jeden krok wyżej – język symboliczny Przykład 1: Dodaj do siebie zawartość dwóch komórek pamięci (4 i 5) i sumę zapisz do komórki 6 Rozwiązanie w języku symbolicznym POB Arg1 DOD Arg2 ŁAD S STP Arg1: RST 7 Arg2: RST 17 S: 0 KON http://zti.polsl.pl/pi/
Jeden krok wyżej – język symboliczny Przykład 2: W komórce pamięci oznaczonej etykietą Liczba znajduje się liczba całkowita ze znakiem, do komórki oznaczonej etykietą Abs należy wpisać jej wartość bezwzględną http://zti.polsl.pl/pi/
Jeden krok wyżej – język symboliczny Przykład 2: POB Liczba SOM Ujemna ŁAD Wynik STP Ujemna: ODE Liczba ODE Liczba Liczba: -21 Wynik: 0 KON http://zti.polsl.pl/pi/
Translacja z języka symbolicznego na kody binarne - asemblacja Realizowana dwuetapowo przez asemblery. Pierwszy etap – utworzenie tablicy etykiet T2 Drugi etap – właściwy przekład instrukcji na podstawie tablicy kodów T1 (stałej dla każdego asemblera) i stworzonej wcześniej tablicy etykiet T2 Działanie to nazywa się asemblacją (translacja języka symbolicznego do postaci kodu maszynowego) Asemblery występują także w postaci tzw. makroasemblerów (poszerzonych o definicje własnych rozkazów i funkcji) http://zti.polsl.pl/pi/
wyższe poziomy Języki programowania ogólnych zastosowań (algorytmiczne) instrukcje symboliczne na które składa się często wiele rozkazów komputera Języki zorientowane dziedzinowo programista określa co chce zrobić a nie jak http://zti.polsl.pl/pi/
Język programowania Język programowania - zbiór zasad składni, instrukcji, dzięki którym powstaje kod źródłowy programu – zapis algorytmu. Programista używa języka zrozumiałego dla człowieka, który następnie jest kompilowany bądź interpretowany do postaci maszynowej (translacja). Istnieje wiele rodzajów języków programowania. Można je podzielić według wielu kryteriów.
Podział ze względu na rodzaj translacji: kompilowane, interpretowane.
Podstawowe pojęcia Kompilator – jest to program jednorazowo tłumaczący cały kod źródłowy na język maszynowy i zapisujący go do pliku wynikowego. Kolejne uruchomienia programu (pliku wynikowego) nie wymagają powtórzenia etapu kompilacji – oznacza to, że kompilator nie jest potrzebny do uruchamiania programu. Typowymi przykładami języków kompilowanych są: C, C++, Pascal; Interpreter – jest to program tłumaczący i wykonujący kod źródłowy linia po linii. W tym przypadku nie ma pliku wynikowego, a każde uruchomienie wymaga ponownego przeprowadzenia etapu interpretacji – interpreter jest więc niezbędny do uruchomienia i wykonania programu. Typowymi przykładami języków interpretowanych są: Python, MatLab, GNU Plot, HTML, BPL;
Podstawowe pojęcia
Kod pośredni – kod, który do uruchomienia wymaga interpretera lub maszyny wirtualnej – takie pliki mogą być zwykle uruchamiane na różnych systemach (Java, języki .NET).
Środowisko programistyczne Translator – służy do wykonania kompilacji lub interpretacji kodu źródłowego. Standardowym katalogiem, w których umieszcza się pliki translatora jest katalog BIN w głównym katalogu aplikacji. Biblioteki i dodatkowe pliki wsadowe – służą do rozszerzania możliwości języka, szczególnie w zakresie pewnych zastosowań (np. obliczeń matematycznych, numerycznych, obróbki grafiki). Edytor kodu – służący do pisania tekstu kodu źródłowego. Debugger - analizator kodu, służy do analizy poprawności tworzonego kodu źródłowego i stanowi zazwyczaj integralną część translatora. Podczas analizy kodu źródłowego generowane są informacje o błędach.
Środowisko programistyczne Edytor „formularzy” - służy do budowy okien widzianych przez użytkownika po uruchomieniu programu (formularzy). Element ten występuje jedynie w językach „wizualnych”. System pomocy – służy do uzyskiwania informacji o środowisku programistycznym, zasadach jego użytkowania, elementach języka (wraz z przykładami), rodzaju licencji, autorach i kontaktach. Zależnie od implementacji języka oraz jego rodzaju pomoc może być mniej lub bardziej rozwinięta. Narzędzia dodatkowe – służą do tworzenia systemu pomocy, ikon i kursorów, programów instalacyjnych. Ilość narzędzi i poziom ich zaawansowania zależy od implementacji języka.
Zintegrowane środowisko programistyczne .NET (c#)
Zintegrowane środowisko programistyczne Delphi
Podział języków programowania Jest wiele języków programowania Podział języków programowania Jest wiele języków programowania. Zastosowanie konkretnego wynika z osobistych preferencji, ale przede wszystkim ze specyfiki problemu , jaki chcemy rozwiązać.
Paradygmaty programowania Paradygmat - sposób, wzór, wzorzec, charakter czegoś, sposób podejścia do czegoś. W programowaniu: Zbiór koncepcji reprezentujących podejście do implementacji algorytmów Metodyka programowania, ustandaryzowane podejście do rozwiązywania problemów algorytmicznych Sposób programowania oparty na mechanizmach, jakie udostępnia język programowania i jego konkretna implementacja, czyli kompilator i niekiedy nawet całe środowisko programistyczne Języki i paradygmaty programowania, Kazimierz Jakubczyk
Podstawowe paradygmaty Programowanie imperatywne – program jest postrzegany jako ciąg poleceń (sekwencja instrukcji) dla komputera zmieniających krok po kroku stan maszyny (wartości zmiennych) aż do uzyskania oczekiwanego wyniku Programowanie obiektowe – program jest rozumiany jako zbiór porozumiewających się między sobą obiektów, czyli jednostek zawierających pewne dane i umiejących wykonywać na nich pewne operacje (pola i metody) Programowanie funkcyjne – program jest traktowany jako złożona funkcja (w sensie matematycznym), która otrzymawszy pewne dane wejściowe wylicza odpowiedni wynik (w programie nie ma zmiennych) Programowanie logiczne – na program składa się pewien zbiór zależności i stwierdzenie (przesłanki i cel), wykonanie programu polega na udowodnieniu celu (obliczenia są wykonywane „przy okazji” tego dowodzenia) Języki i paradygmaty programowania, Kazimierz Jakubczyk
Programowanie imperatywne Program jest sekwencją poleceń zmieniających krok po kroku stan maszyny, aż do uzyskania żądanego wyniku Stan maszyny jest zawartością pamięci oraz rejestrów i znaczników procesora Program jest ściśle związany z architekturą sprzętu komputerowego (architektura von Neumanna), w którym poszczególne instrukcje (w kodzie maszynowym) są poleceniami zmieniającymi stan maszyny Chociaż języki wysokiego poziomu (Fortran, Algol, Cobol, PL/I, Pascal, C, Ada) posługują się pewnymi abstrakcjami, to jednak spełniają powyższe cechy programowania imperatywnego. Na przykład instrukcje przypisania działają na danych pobranych z pamięci i umieszczają wynik w pamięci (zmienne są abstrakcją komórek pamięci) Języki i paradygmaty programowania, Kazimierz Jakubczyk
Programowanie obiektowe Program jest zbiorem porozumiewających się ze sobą obiektów, jednostek zawierających dane (pola) i umiejących wykonywać na nich pewne operacje (metody) Pola i metody są powiązane w całość stanowiącą obiekt (hermetyzacja, kapsułkowanie, ang. encapsulation) Istnieje możliwość definiowania nowych obiektów, zwanych potomnymi lub pochodnymi, na bazie obiektów już istniejących (dziedziczenie, ang. inheritance) Obiekty potomne automatycznie dziedziczą pola i metody po obiektach bazowych, a ponadto mogą zawierać nowe pola i metody rozszerzające możliwości odziedziczone Obiekty mogą mieć tzw. metody wirtualne – metoda taka może w odniesieniu do obiektu potomnego wywołać inne działanie niż w przypadku obiektu bazowego (polimorfizm, wielopostaciowość, ang. polymorphism) Języki i paradygmaty programowania, Kazimierz Jakubczyk
Programowanie funkcyjne Program jest złożeniem (w sensie matematycznym) szeregu funkcji w którym wynik jednej funkcji jest bez pośrednictwa zmiennej przekazywany jako argument do funkcji zewnętrznej Brak jest stanu maszyny (nie ma zmiennych) Nie ma imperatywnych z natury, tradycyjnie rozumianych pętli (wymagających zmiennych do sterowania ich przebiegiem) Zamiast pętli używa się rekurencji Argumentami i wynikami funkcji mogą być nie tylko dane „proste” (liczby i napisy), lecz także funkcje Języki i paradygmaty programowania, Kazimierz Jakubczyk
Programowanie logiczne Na program składa się zbiór zależności (przesłanek) i pewne stwierdzenie (cel), zbiór logicznych reguł definiujących wyrażenia logiczne Podobnie jak w programowaniu funkcyjnym, program nie ma postaci bezpośredniej sekwencji poleceń (rozkazów, instrukcji), a jedynie jest opisem w pewnym języku tego, co wiadomo (przesłanki) i co należy uzyskać (cel) Wykonanie programu jest próbą udowodnienia celu w oparciu o podane przesłanki, próbą wyszukania pewnych kombinacji reguł, dla których definiowane wyrażenia logiczne są prawdziwe Obliczenia są wykonywane niejako „przy okazji” dowodzenia celu Języki i paradygmaty programowania, Kazimierz Jakubczyk
Inne paradygmaty Programowanie proceduralne – kod programu jest dzielony na procedury (podprogramy), tj. fragmenty stanowiące logiczną całość, wykonujące ściśle określone operacje, komunikujące się z otoczeniem nie za pomocą zmiennych globalnych (w miarę możności), lecz parametrów Programowanie strukturalne – kod programu jest dzielony na moduły (ang. units), które komunikują się jedynie poprzez dobrze określone interfejsy. Programowanie sterowane zdarzeniami (zdarzeniowe ) –program ma reagować na zdarzenia (ang. events), które pojawiają się w trakcie jego wykonania w niemożliwej do przewidzenia z góry kolejności Inne: wizualne, aspektowe, równoległe, rozproszone… Języki i paradygmaty programowania, Kazimierz Jakubczyk
Algorytm a paradygmat Ten sam algorytm można zaimplementować na różne sposoby, zgodnie z różnymi paradygmatami Wybór paradygmatu może mieć kluczowy wpływ na łatwość implementacji algorytmu Języki i paradygmaty programowania, Kazimierz Jakubczyk
Język a paradygmat Fortran, Algol, Pascal, C – języki imperatywne (pozwalają stosować paradygmat programowania imperatywnego) C++, Turbo Pascal, Delphi (Object Pascal) – zarówno języki imperatywne, jak i obiektowe (hybrydy) Java, C# – języki obiektowe (programowanie imperatywne jest w nich mocno ograniczone) „Dobry programista poradzi sobie z ubogim językiem czy pokracznym systemem operacyjnym, ale nawet najlepsze środowisko nie uratuje słabego programisty” Języki i paradygmaty programowania, Kazimierz Jakubczyk
Podsumowanie
i szczęśliwego Nowego Roku Wesołych Świąt i szczęśliwego Nowego Roku