105
Języki i paradygmaty programowania- uwagi wstępne JĘZYKI I PARADYGMATY PROGRAMOWANIA JĘZYKI I PARADYGMATY PROGRAMOWANIA- UWAGI WSTĘPNE

Jezyki i paradygmaty programowania 1 - SMTVSATsmtvsat.pl/pawelb/?/JPP_2013_1.pdf · Języki i paradygmaty programowania- uwagi wstępne Syntaktyka Założenie: dany jest ustalony

  • Upload
    others

  • View
    1

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Jezyki i paradygmaty programowania 1 - SMTVSATsmtvsat.pl/pawelb/?/JPP_2013_1.pdf · Języki i paradygmaty programowania- uwagi wstępne Syntaktyka Założenie: dany jest ustalony

Języki i paradygmaty programowania- uwagi wstępne

JĘZYKI I PARADYGMATY PROGRAMOWANIA

JĘZYKI I PARADYGMATY PROGRAMOWANIA- UWAGI WSTĘPNE

Page 2: Jezyki i paradygmaty programowania 1 - SMTVSATsmtvsat.pl/pawelb/?/JPP_2013_1.pdf · Języki i paradygmaty programowania- uwagi wstępne Syntaktyka Założenie: dany jest ustalony

Języki i paradygmaty programowania- uwagi wstępne

Informacje ogólne

Kontakt: email: [email protected]

Konsultacje: pok.116 WI 2

Materiały: http://detox.wi.ps.pl

Page 3: Jezyki i paradygmaty programowania 1 - SMTVSATsmtvsat.pl/pawelb/?/JPP_2013_1.pdf · Języki i paradygmaty programowania- uwagi wstępne Syntaktyka Założenie: dany jest ustalony

Języki i paradygmaty programowania- uwagi wstępne

Zakres Przegląd paradygmatów programowania Przegląd języków programowania Dane Typy Podprogramy Obiekty Programowanie imperatywne: C, C++ Programowanie obiektowe: C++, Java, C#,

Python, Ruby Programowanie funkcyjne: Lisp, Haskell,

Clojure, Python, Ruby Programowanie logiczne: Prolog Inne paradygmaty programowania

Page 4: Jezyki i paradygmaty programowania 1 - SMTVSATsmtvsat.pl/pawelb/?/JPP_2013_1.pdf · Języki i paradygmaty programowania- uwagi wstępne Syntaktyka Założenie: dany jest ustalony

Języki i paradygmaty programowania- uwagi wstępne

Literatura P.Van Roy, S.Haridi- Programowanie. Koncepcje techniki i modele,

Helion, 2005 http://codegreen.cs.wayne.edu/~tung/courses/booksingle.pdf

Język C:B.Kernighan, D.Ritchie- Język ANSI C, WNT, 2007

Język C++:B.Eckel- Thinking in C++ tom I/II, Helion, 2002, 2004

Język JAVA:B.Eckel- Thinking in Java, Wydanie IV, Helion, 2006

Język C#:K.Michelsen, Język C#. Szkoła programowania, Helion, 2007

Język PythonM.Summerfield- Python 3. Kompletne wprowadzenie do programowania. Wydanie II, Helion, 2010

Język RubyP.Cooper- Programowanie w Ruby. Od podstaw, Helion, 2010

...

Page 5: Jezyki i paradygmaty programowania 1 - SMTVSATsmtvsat.pl/pawelb/?/JPP_2013_1.pdf · Języki i paradygmaty programowania- uwagi wstępne Syntaktyka Założenie: dany jest ustalony

Języki i paradygmaty programowania- uwagi wstępne

Zagadnienia

Paradygmat oraz paradygmat programowania Język programowania i jego cechy Przegląd paradygmatów programowania Ewolucja języków programowania

Page 6: Jezyki i paradygmaty programowania 1 - SMTVSATsmtvsat.pl/pawelb/?/JPP_2013_1.pdf · Języki i paradygmaty programowania- uwagi wstępne Syntaktyka Założenie: dany jest ustalony

Języki i paradygmaty programowania- uwagi wstępne

Co to jest paradygmat? gr.παράδειγμα (parádeigma)- wzorzec, przykład 1. (filozofia) przyjęty sposób widzenia rzeczywistości

w danej dziedzinie, doktrynie, itp. (np.paradygmat ontologiczny, mentalistyczny, lingwistyczny)

2. (językoznawstwo) zespół form fleksyjnych (deklinacyjnych lub koniugacyjnych) właściwy danemu typowi wyrazów; wzorzec, model deklinacyjny lub koniugacyjny (Słownik Języka Polskiego)

Page 7: Jezyki i paradygmaty programowania 1 - SMTVSATsmtvsat.pl/pawelb/?/JPP_2013_1.pdf · Języki i paradygmaty programowania- uwagi wstępne Syntaktyka Założenie: dany jest ustalony

Języki i paradygmaty programowania- uwagi wstępne

Co to jest paradygmat programowania?

Nie jest to wzorcowy sposób pisania programów. Nie są to przykłady poprawnych programów. Zestaw typowych dla danej grupy języków

programowania mechanizmów oferowanych programiście

Zbiór sposobów interpretacji owych mechanizmów przez semantykę języka

czyli jak rzeczywistość (zewnętrzna (modelowana) oraz wewnętrzna (maszynowa)) jest postrzegana poprzez pryzmat danego języka

Page 8: Jezyki i paradygmaty programowania 1 - SMTVSATsmtvsat.pl/pawelb/?/JPP_2013_1.pdf · Języki i paradygmaty programowania- uwagi wstępne Syntaktyka Założenie: dany jest ustalony

Języki i paradygmaty programowania- uwagi wstępne

Co różni paradygmaty programowania?

sposób patrzenia na dane (struktury danych + język programowania)

sposób patrzenia na kod (algorytm + język programowania)

sposób wiązania kodu z danymi sposób patrzenia na przepływ sterowania

Page 9: Jezyki i paradygmaty programowania 1 - SMTVSATsmtvsat.pl/pawelb/?/JPP_2013_1.pdf · Języki i paradygmaty programowania- uwagi wstępne Syntaktyka Założenie: dany jest ustalony

Języki i paradygmaty programowania- uwagi wstępne

Paradygmaty programowania

paradygmat programowania ≡ model obliczeniowy oparty na tzw. języku kernelowym (zawierajacym

niewiele programistycznie istotnych elementów) (istotna cecha- typy abstrakcji, np. model obiektowy) programowanie multiparadygmatowe (używanie

rozmaitych modeli obliczeniowych w jednym programie)

Page 10: Jezyki i paradygmaty programowania 1 - SMTVSATsmtvsat.pl/pawelb/?/JPP_2013_1.pdf · Języki i paradygmaty programowania- uwagi wstępne Syntaktyka Założenie: dany jest ustalony

Języki i paradygmaty programowania- uwagi wstępne

Paradygmatów w tworzeniu systemu informatycznego Paradygmaty programowania dotyczą: implementacji testowania integracji (połączenie w całość poszczególnych

komponenetów) systemu informatycznego Paradygmat programowania definiuje paradygmat

projektowania programowania (wzorce projektowe, komponenty, architekturę oprogramowania, frameworki)

Page 11: Jezyki i paradygmaty programowania 1 - SMTVSATsmtvsat.pl/pawelb/?/JPP_2013_1.pdf · Języki i paradygmaty programowania- uwagi wstępne Syntaktyka Założenie: dany jest ustalony

Języki i paradygmaty programowania- uwagi wstępne

Co to jest język programowania?

Języki programowania- jezyk formalny (sztuczny) służący do zapisu programów komputerowych.

Dokładniej: język formalny zapewniający komunikację człowieka z komputerem i przeznaczony do opisu danych oraz algorytmów ich przetwarzania w komputerze z zastosowaniem słów kluczowych (np. main) oraz symboli (np. [ ]).

Page 12: Jezyki i paradygmaty programowania 1 - SMTVSATsmtvsat.pl/pawelb/?/JPP_2013_1.pdf · Języki i paradygmaty programowania- uwagi wstępne Syntaktyka Założenie: dany jest ustalony

Języki i paradygmaty programowania- uwagi wstępne

Języki programowania- podstawowe cechy Każdy język programowania jest określony

przez swoją syntaktykę oraz semantykę, tj. zbiór reguł określających, jakie rodzaje wyrażeń można wykorzystać w pisaniu programów i jakie jest ich znaczenie funkcjonalne

Page 13: Jezyki i paradygmaty programowania 1 - SMTVSATsmtvsat.pl/pawelb/?/JPP_2013_1.pdf · Języki i paradygmaty programowania- uwagi wstępne Syntaktyka Założenie: dany jest ustalony

Języki i paradygmaty programowania- uwagi wstępne

Języki programowania- podstawowe cechy Syntaktyka (składnia, gramatyka, forma)-

zbiór reguł, mówiących jak wygląda poprawny program w danym języku, czyli np.:

jak tworzy się polecenia i wyrażenia. jaką postać mają struktury sterowania

(instrukcje warunkowe, pętle, skoki). jak zapisuje się deklaracje.

Page 14: Jezyki i paradygmaty programowania 1 - SMTVSATsmtvsat.pl/pawelb/?/JPP_2013_1.pdf · Języki i paradygmaty programowania- uwagi wstępne Syntaktyka Założenie: dany jest ustalony

Języki i paradygmaty programowania- uwagi wstępne

Syntaktyka Założenie: dany jest ustalony alfabet A (zbiór skończony,

niepusty), np. A={0,1} lub A=ASCII Elementy zbioru A nazywamy symbolami,

znakami lub literami alfabetu Słowem nazywamy ciąg symboli alfabetu Zbiór wszystkich napisów, jakie można

utworzyć ze znaków alfabetu A, oznaczamy A*

Każdy podzbiór zbioru A* to pewien język Wniosek: język to zbiór napisów złożonych ze znaków

danego alfabetu

Page 15: Jezyki i paradygmaty programowania 1 - SMTVSATsmtvsat.pl/pawelb/?/JPP_2013_1.pdf · Języki i paradygmaty programowania- uwagi wstępne Syntaktyka Założenie: dany jest ustalony

Języki i paradygmaty programowania- uwagi wstępne

Klasy gramatyk (wg hierarchii Chomsky’ego) Klasa 3- Gramatyki regularne – do opisu leksemów (tokenów) czyli

podstawowych (atomowych) elementów języka, takich jak słowa kluczowe (np. if, while),literały (np. 4), operatory (np. +, *) identyfikatory (np. x)

– wyrażenia regularne (ang. regular expressions (regex)) wzorce opisujące zbiór poprawnych leksemów, ich podział na poszczególne podzbiory

Page 16: Jezyki i paradygmaty programowania 1 - SMTVSATsmtvsat.pl/pawelb/?/JPP_2013_1.pdf · Języki i paradygmaty programowania- uwagi wstępne Syntaktyka Założenie: dany jest ustalony

Języki i paradygmaty programowania- uwagi wstępne

Klasy gramatyk (wg hierarchii Chomsky’ego) Klasa 2- Gramatyki bezkontekstowe – do opisu składni, czyli wyglądu wyrażeń,

instrukcji czyli elementów składających się z poprawnych leksemów odpowiednio względem siebie ustawionych

– notacja BNF (Backusa-Naura) oraz EBNF (Extended BNF)

Page 17: Jezyki i paradygmaty programowania 1 - SMTVSATsmtvsat.pl/pawelb/?/JPP_2013_1.pdf · Języki i paradygmaty programowania- uwagi wstępne Syntaktyka Założenie: dany jest ustalony

Języki i paradygmaty programowania- uwagi wstępne

Notacja Backusa-Naura BNF Sposób zapisu języków programowania Definicja języka w notacji BNF = zbiór reguł Ogólna postać reguły: <symbol> ::= <definicja_symbolu> symbol- pojedynczy symbol nieterminalny

(pomocniczy (do definiowania języka)) definicja_symbolu- ciąg symboli terminalnych

(należących do alfabetu języka (docelowych)) oraz nieterminalnych

Sens reguły: symbol występujący po lewej stronie znaku ::= można zastąpić tym, co pojawia się po prawej stronie. (Innymi słowy, stwierdzamy, że to, co stoi po lewej stronie, może wyglądać jak to, co stoi po prawej.)

Page 18: Jezyki i paradygmaty programowania 1 - SMTVSATsmtvsat.pl/pawelb/?/JPP_2013_1.pdf · Języki i paradygmaty programowania- uwagi wstępne Syntaktyka Założenie: dany jest ustalony

Języki i paradygmaty programowania- uwagi wstępne

Rozszerzenia w EBNF Często stosuje się dodatkowe konwencje oraz

symbole uproszczające zapis: alternatywne warianty reguły (pionowa kreska |):

pojęcie ::= wariant1 | wariant2 | wariant3 opcjonalna część reguły (nawiasy kwadratowe [...]):

pojęcie ::= część-konieczna [ część-opcjonalna ] dowolne wielokrotne powtórzenie (nawiasy

klamrowe {...}): pojęcie ::= część-konieczna { część-powtarzalna }

Grupowanie alternatywnych fragmentów definicji (nawiasy okrągłe (...)): pojęcie ::= ( coś | coś-innego ) coś-jeszcze-innego

Page 19: Jezyki i paradygmaty programowania 1 - SMTVSATsmtvsat.pl/pawelb/?/JPP_2013_1.pdf · Języki i paradygmaty programowania- uwagi wstępne Syntaktyka Założenie: dany jest ustalony

Języki i paradygmaty programowania- uwagi wstępne

Rozszerzenia w EBNF Jednoznakowe symbole terminalne umieszcza się w

cudzysłowie, dla odróżnienia ich od symboli samej notacji BNF.

Symbole terminalne pisze się czcionką wytłuszczoną; nie jest wówczas konieczne pisanie nawiasów kątowych wokół symboli nieterminalnych.

Np. def. rekurencyjna niepustej listy identyfikatorów, rozdzielonych przecinkami:

lista_identyfikatorów ::= identyfikator |lista_identyfikatorów "," identyfikator Wersja alternatywna zawierająca nawias klamrowy: lista_identyfikatorów ::= identyfikator { ","

identyfikator } Przykład: (język C) pętla-dopóki ::= while "(" wyrażenie ")" instrukcja

Page 20: Jezyki i paradygmaty programowania 1 - SMTVSATsmtvsat.pl/pawelb/?/JPP_2013_1.pdf · Języki i paradygmaty programowania- uwagi wstępne Syntaktyka Założenie: dany jest ustalony

Języki i paradygmaty programowania- uwagi wstępne

Języki programowania- podstawowe cechy Semantyka (znaczenie, treść)- znaczenie form

zapisanych zgodnie ze składnią języka, czyli „co one robią”.

Przykład: (instrukcja warunkowa) (język C) 1. Składnia: if "(" wyrażenie ")" instrukcja 2. Semantyka: (opis potoczny- nie formalny,

ale zrozumiały) sprawdź podane wyrażenie i jeśli jest prawdziwe, to wykonaj podaną instrukcję.

Page 21: Jezyki i paradygmaty programowania 1 - SMTVSATsmtvsat.pl/pawelb/?/JPP_2013_1.pdf · Języki i paradygmaty programowania- uwagi wstępne Syntaktyka Założenie: dany jest ustalony

Języki i paradygmaty programowania- uwagi wstępne

Języki programowania- podstawowe cechy Język programowania jest językiem

sztucznym opierającym się na jezyku etnicznym lub na wyrazach sztucznych o brzmieniu łatwym do zapamiętania

Page 22: Jezyki i paradygmaty programowania 1 - SMTVSATsmtvsat.pl/pawelb/?/JPP_2013_1.pdf · Języki i paradygmaty programowania- uwagi wstępne Syntaktyka Założenie: dany jest ustalony

Języki i paradygmaty programowania- uwagi wstępne

Paradygmaty i języki programowania, a implementacja algorytmów Ten sam algorytm można zaimplementować na

różne sposoby zgodnie z różnymi paradygmatami programowania i różnymi językami programowania

Wybór paradygmatu programowania oraz języka programowania ma nieraz kluczowy wpływ na łatwość/jakość implementacji algorytmów

Page 23: Jezyki i paradygmaty programowania 1 - SMTVSATsmtvsat.pl/pawelb/?/JPP_2013_1.pdf · Języki i paradygmaty programowania- uwagi wstępne Syntaktyka Założenie: dany jest ustalony

Języki i paradygmaty programowania- uwagi wstępne

Paradygmaty i języki programowania, a implementacja algorytmów Zastosowanie odpowiedniego paradygmatu

programowania oraz języka programowania do realizacji zadania programistycznego jest bardzo ważne, ale nie może rozwiązać samego problemu.

Język programowania to środek do realizacji założeń paradygmatu

Page 24: Jezyki i paradygmaty programowania 1 - SMTVSATsmtvsat.pl/pawelb/?/JPP_2013_1.pdf · Języki i paradygmaty programowania- uwagi wstępne Syntaktyka Założenie: dany jest ustalony

Języki i paradygmaty programowania- uwagi wstępne

Paradygmaty i języki programowania, a implementacja algorytmów Język może: zawierać środki pozwalające wyrażać

pardygmat wprost (wsparcie bezpośrednie) pozwalać wyrażać paradygmat kosztem

dodatkowego kodowania (tzn. łatwiej jest programować w oparciu o dany paradygmat, ale można też kodować z zastosowaniem mechanizmów innego).

Page 25: Jezyki i paradygmaty programowania 1 - SMTVSATsmtvsat.pl/pawelb/?/JPP_2013_1.pdf · Języki i paradygmaty programowania- uwagi wstępne Syntaktyka Założenie: dany jest ustalony

Języki i paradygmaty programowania- uwagi wstępne

Generacje języków programowania Języki programowania można podzielić na

pięć wyraźnie różniących się generacji języków wyskiego poziomu (ang. high-level language)

Generacje języków opisują zaawansowanie (rozbudowanie) struktury języka, co jest równocześnie związane z łatwością posługiwania się nimi.

Page 26: Jezyki i paradygmaty programowania 1 - SMTVSATsmtvsat.pl/pawelb/?/JPP_2013_1.pdf · Języki i paradygmaty programowania- uwagi wstępne Syntaktyka Założenie: dany jest ustalony

Języki i paradygmaty programowania- uwagi wstępne

Generacje języków programowania Początki: pierwszy język programowania (opisany):

Plankalkühl, Konrad Zuse (1936-1945) języki maszynowe (lowest-level programming

language) języki asemblerowe (podobna struktura, zbiór

instrukcji, wprowadzenie nazw w miejsce liczb)

Page 27: Jezyki i paradygmaty programowania 1 - SMTVSATsmtvsat.pl/pawelb/?/JPP_2013_1.pdf · Języki i paradygmaty programowania- uwagi wstępne Syntaktyka Założenie: dany jest ustalony

Języki i paradygmaty programowania- uwagi wstępne

Generacje języków programowania

Przykładowy fragment Interpretacja w postaciprogramu w pamięci: symboli asemblera

8D 7D C0 lea edi,[ebp-40h]B9 10 00 00 00 mov ecx,10hB8 CC CC CC CC mov eax,0CCCCCCCChF3 AB rep dword ptr [edi]C6 05 D8 25 42 00 0A mov byte ptr [c (004225d8)],0AhA0 D8 25 42 00 mov al,[c (004225d8)]04 05 add al,5A2 D8 25 42 00 mov [c (004225d8)],alB8 01 00 00 00 mov eax,1

Page 28: Jezyki i paradygmaty programowania 1 - SMTVSATsmtvsat.pl/pawelb/?/JPP_2013_1.pdf · Języki i paradygmaty programowania- uwagi wstępne Syntaktyka Założenie: dany jest ustalony

Języki i paradygmaty programowania- uwagi wstępne

Generacje języków programowania 1GL (1954-1958) Fortran I (FORmula TRANslation) (1957) Algol 58 (ALGOrithmic Language) (1958) FLOW-MATIC (Business Language version

0) podstawa obliczeń- wyrażenia matematyczne

Page 29: Jezyki i paradygmaty programowania 1 - SMTVSATsmtvsat.pl/pawelb/?/JPP_2013_1.pdf · Języki i paradygmaty programowania- uwagi wstępne Syntaktyka Założenie: dany jest ustalony

Języki i paradygmaty programowania- uwagi wstępne

Generacje języków programowania 2GL (1959-1961) nowość: wykorzystanie paradygmatu

imperatywnego COBOL (Common Business Oriented

Language) (1959) wprowadzenie: podprogramów (Fortran II) struktury blokowej programów i typów danych

(Algol 60) obsługa plików (COBOL)

Page 30: Jezyki i paradygmaty programowania 1 - SMTVSATsmtvsat.pl/pawelb/?/JPP_2013_1.pdf · Języki i paradygmaty programowania- uwagi wstępne Syntaktyka Założenie: dany jest ustalony

Języki i paradygmaty programowania- uwagi wstępne

Ewolucja języków programowania 2GL (1959-1961) nowość: wykorzystanie paradygmatu

funkcyjnego język LISP (LISt Processing) (1959)

Page 31: Jezyki i paradygmaty programowania 1 - SMTVSATsmtvsat.pl/pawelb/?/JPP_2013_1.pdf · Języki i paradygmaty programowania- uwagi wstępne Syntaktyka Założenie: dany jest ustalony

Języki i paradygmaty programowania- uwagi wstępne

Ewolucja języków programowania 3GL (1962-1970) PL/1- próba stworzenia języka uniwersalnego

(everything for everybody) (Fortran + COBOL + Algol) (IBM) (1964)

BASIC (Beginners All-purpose Symbolic Instruction Code )

nowość: wykorzystanie paradygmatu obiektowego Simula 67 (rozszerzenie Algola 60) Smalltalk (pierwszy obiektowy język

programowania) (1968)

Page 32: Jezyki i paradygmaty programowania 1 - SMTVSATsmtvsat.pl/pawelb/?/JPP_2013_1.pdf · Języki i paradygmaty programowania- uwagi wstępne Syntaktyka Założenie: dany jest ustalony

Języki i paradygmaty programowania- uwagi wstępne

Ewolucja języków programowania

4GL (1970-1980) programowanie to nauka C (a portable systems language) (Kernighan,

Ritchie) (1972) (książka 'The C Programming Language' (1978)

Pascal (simplicity by design) (Wirth) (1971)

Page 33: Jezyki i paradygmaty programowania 1 - SMTVSATsmtvsat.pl/pawelb/?/JPP_2013_1.pdf · Języki i paradygmaty programowania- uwagi wstępne Syntaktyka Założenie: dany jest ustalony

Języki i paradygmaty programowania- uwagi wstępne

Ewolucja języków programowania

4GL (1970-1980) nowość: wykorzystanie paradygmatu

logicznego PROLOG (PROgramming Based on LOGic)

(1971) Scheme (dialekt Lispa) (1975)

Page 34: Jezyki i paradygmaty programowania 1 - SMTVSATsmtvsat.pl/pawelb/?/JPP_2013_1.pdf · Języki i paradygmaty programowania- uwagi wstępne Syntaktyka Założenie: dany jest ustalony

Języki i paradygmaty programowania- uwagi wstępne

Ewolucja języków programowania

5GL (1980-) języki obiektowe: C C++ (C with classes) (Bjarne Stroustrup)

(1983) PascalObject Pascal Modula-2Modula-3 języki programowania logiki: PrologMercury

Page 35: Jezyki i paradygmaty programowania 1 - SMTVSATsmtvsat.pl/pawelb/?/JPP_2013_1.pdf · Języki i paradygmaty programowania- uwagi wstępne Syntaktyka Założenie: dany jest ustalony

Języki i paradygmaty programowania- uwagi wstępne

Ewolucja języków programowania 5GL (1980-) języki programowania funkcyjnego: Erlang (1986) Haskell (1990) programowanie współbieżne – Linda (1986)

Page 36: Jezyki i paradygmaty programowania 1 - SMTVSATsmtvsat.pl/pawelb/?/JPP_2013_1.pdf · Języki i paradygmaty programowania- uwagi wstępne Syntaktyka Założenie: dany jest ustalony

Języki i paradygmaty programowania- uwagi wstępne

Ewolucja języków programowania 5GL (1980-) języki skryptowe: Perl (Larry Wall) (1987) Python (G. van Rossum) (1991) Ruby (Yukihiro Matsumoto) (1993) PHP (Rasmus Lerdorf) (1994) JavaScript (poprzednia nazwa LiveScript)

(Netscape) (1995)

Page 37: Jezyki i paradygmaty programowania 1 - SMTVSATsmtvsat.pl/pawelb/?/JPP_2013_1.pdf · Języki i paradygmaty programowania- uwagi wstępne Syntaktyka Założenie: dany jest ustalony

Języki i paradygmaty programowania- uwagi wstępne

Ewolucja języków programowania 5GL (1980-) języki tworzenia aplikacji internetowych: Java (an Imperative-Based Object-Orientd

Language) (Sun Microsystems) (1995) C# (a C-Based Language for the New

Millennium) (Microsoft) (2000)\ Go ('code less, compile quicker, execute faster

→ have more fun') (Google) (2009)

Page 38: Jezyki i paradygmaty programowania 1 - SMTVSATsmtvsat.pl/pawelb/?/JPP_2013_1.pdf · Języki i paradygmaty programowania- uwagi wstępne Syntaktyka Założenie: dany jest ustalony

Języki i paradygmaty programowania- uwagi wstępne

Ewolucja języków programowania 5GL (1980-) języki oparte na JVM (Java Virtual Machine): Jyhon (1997) JRuby (2001) Scala (2003) Groovy (2003) Clojure (2007)

Page 39: Jezyki i paradygmaty programowania 1 - SMTVSATsmtvsat.pl/pawelb/?/JPP_2013_1.pdf · Języki i paradygmaty programowania- uwagi wstępne Syntaktyka Założenie: dany jest ustalony

Języki i paradygmaty programowania- uwagi wstępne

Ewolucja języków programowania 5GL (1980-) języki oparte na CLI (Common Language

Infrastructure): VB.NET (2001) J# (2002) F# (2005) IronPython (2006) IronRuby (2010)

Page 40: Jezyki i paradygmaty programowania 1 - SMTVSATsmtvsat.pl/pawelb/?/JPP_2013_1.pdf · Języki i paradygmaty programowania- uwagi wstępne Syntaktyka Założenie: dany jest ustalony

Języki i paradygmaty programowania- uwagi wstępne

Ewolucja języków programowania 5GL (1980-) wykorzystanie paradygmatu programowania

generycznego (uniezależnienie od siebie algorytmów oraz struktur danych)

język Ada (ANSI Ada 1983) biblioteka STL (C++)

Page 41: Jezyki i paradygmaty programowania 1 - SMTVSATsmtvsat.pl/pawelb/?/JPP_2013_1.pdf · Języki i paradygmaty programowania- uwagi wstępne Syntaktyka Założenie: dany jest ustalony

Języki i paradygmaty programowania- uwagi wstępne

Ewolucja języków programowania 5GL (1980-) hybrydowe języki programowania/znaczników XSLT (eXtensible Stylesheet Language

Transformations) (W3C) (końcówka lat 1990-ych) JSP (Java Server Pages)

Page 42: Jezyki i paradygmaty programowania 1 - SMTVSATsmtvsat.pl/pawelb/?/JPP_2013_1.pdf · Języki i paradygmaty programowania- uwagi wstępne Syntaktyka Założenie: dany jest ustalony

Języki i paradygmaty programowania- uwagi wstępne

Page 43: Jezyki i paradygmaty programowania 1 - SMTVSATsmtvsat.pl/pawelb/?/JPP_2013_1.pdf · Języki i paradygmaty programowania- uwagi wstępne Syntaktyka Założenie: dany jest ustalony

Języki i paradygmaty programowania- uwagi wstępne

Ewolucja języków programowania

Tendencja rozwojowa: od języków programowania bliskich maszynie do języków programowania bliskich

rozwiązywanym problemom zmniejsza się liczba instrukcji zwiększa się czytelność kodu

Page 44: Jezyki i paradygmaty programowania 1 - SMTVSATsmtvsat.pl/pawelb/?/JPP_2013_1.pdf · Języki i paradygmaty programowania- uwagi wstępne Syntaktyka Założenie: dany jest ustalony

Języki i paradygmaty programowania- uwagi wstępne

Paradygmaty programowania Imperatywne

– imperatywne ­ obiektowe– proceduralne– strukturalne

Deklaratywne– funkcyjne– logiczne

Specyficzne dla dziedziny (ang. specific domain)

– współbieżne, równoległe, rozproszone– sterowane przepływem danych– komponentowe– aspektowe– zdarzeniowe– agentowe– generyczne

...

Page 45: Jezyki i paradygmaty programowania 1 - SMTVSATsmtvsat.pl/pawelb/?/JPP_2013_1.pdf · Języki i paradygmaty programowania- uwagi wstępne Syntaktyka Założenie: dany jest ustalony

Języki i paradygmaty programowania- uwagi wstępne

Programowanie imperatywne Najbardziej naturalny paradygmat dla maszyny Program- lista instrukcji (rozkazów) Instrukcje- mniej lub bardziej elementarne Instrukcje wykonywane są sekwencyjnie. Skoki:

– bezwarunkowe (instrukcja goto)– warunkowe

Page 46: Jezyki i paradygmaty programowania 1 - SMTVSATsmtvsat.pl/pawelb/?/JPP_2013_1.pdf · Języki i paradygmaty programowania- uwagi wstępne Syntaktyka Założenie: dany jest ustalony

Języki i paradygmaty programowania- uwagi wstępne

Programowanie imperatywne Powstałe w oparciu o abstrakcyjną architekturę

von Neumanna

Page 47: Jezyki i paradygmaty programowania 1 - SMTVSATsmtvsat.pl/pawelb/?/JPP_2013_1.pdf · Języki i paradygmaty programowania- uwagi wstępne Syntaktyka Założenie: dany jest ustalony

Języki i paradygmaty programowania- uwagi wstępne

Architektura von Neumanna maszyna składa się z pamięci oraz jednostki centralnej,

która wykonuje rozkazy (procesora); rozkazy oraz dane zapisane są w tej samej pamięci w

ten sam sposob; rozkazy są kolejno z pamięci wczytywane do jednostki

centralnej i wykonywane; każdy rozkaz powoduje zmianę stanu maszyny

rozumianego jako zawartość całej pamięci włącznie z rejestrami i znacznikami procesora;

rozkazy mogą zmieniać wewnętrzne ustawienie jednostki centralnej, w tym miejsce, z którego będzie czytany następny rozkaz.

Page 48: Jezyki i paradygmaty programowania 1 - SMTVSATsmtvsat.pl/pawelb/?/JPP_2013_1.pdf · Języki i paradygmaty programowania- uwagi wstępne Syntaktyka Założenie: dany jest ustalony

Języki i paradygmaty programowania- uwagi wstępne

Programowanie imperatywne Języki wysokiego poziomu posługują się

pewnymi abstrakcjami, ale wciąż odpowiadają paradygmatowi programowania imperatywnego

Przykład wykorzystania abstrakcji: zmienne- abstrakcja komórek pamięci

Page 49: Jezyki i paradygmaty programowania 1 - SMTVSATsmtvsat.pl/pawelb/?/JPP_2013_1.pdf · Języki i paradygmaty programowania- uwagi wstępne Syntaktyka Założenie: dany jest ustalony

Języki i paradygmaty programowania- uwagi wstępne

Programowanie imperatywne Przykłady języków:

– C– C++– Fortran– Ada– Pascal– Object Pascal– Basic

Page 50: Jezyki i paradygmaty programowania 1 - SMTVSATsmtvsat.pl/pawelb/?/JPP_2013_1.pdf · Języki i paradygmaty programowania- uwagi wstępne Syntaktyka Założenie: dany jest ustalony

Języki i paradygmaty programowania- uwagi wstępne

Programowanie imperatywne Przykład programu imperatywnego (język C, C++):

int a, b, pole;

int main()

{

a=2;

b=3;

pole=a*b;

return 0;

}

Page 51: Jezyki i paradygmaty programowania 1 - SMTVSATsmtvsat.pl/pawelb/?/JPP_2013_1.pdf · Języki i paradygmaty programowania- uwagi wstępne Syntaktyka Założenie: dany jest ustalony

Języki i paradygmaty programowania- uwagi wstępne

Programowanie proceduralne

Rozszerzenie programowania imperatywnego Wykorzystanie stosu oraz rozkazów jego obsługi

(TOP, PUSH, POP)

Page 52: Jezyki i paradygmaty programowania 1 - SMTVSATsmtvsat.pl/pawelb/?/JPP_2013_1.pdf · Języki i paradygmaty programowania- uwagi wstępne Syntaktyka Założenie: dany jest ustalony

Języki i paradygmaty programowania- uwagi wstępne

Programowanie proceduralne

Podział zadania programistycznego na podzadania i ich niezależna (od siebie nawzajem) implementacja w postaci podprogramów (procedur, funkcji, metod, operacji)

Procedury mogą być wielokrotnie (również rekurencyjnie) wywoływane z różnymi parametrami,

Niezalecane jest korzystanie z efektów ubocznych (rozumianych, jako zmiana wartości zmiennych globalnych) lecz przekazywanie danych i wyników w parametrach procedur

Page 53: Jezyki i paradygmaty programowania 1 - SMTVSATsmtvsat.pl/pawelb/?/JPP_2013_1.pdf · Języki i paradygmaty programowania- uwagi wstępne Syntaktyka Założenie: dany jest ustalony

Języki i paradygmaty programowania- uwagi wstępne

Programowanie proceduralne

Przykład programu proceduralnego (język C):#include <stdio.h>

void delta(int a, int b, int c) {

int delta = b*b-4*a*c;

printf("Delta wynosi: %d\n");

}

int main()

{

delta(5,3,4);

delta(1,2,3);

return 0;

}

Page 54: Jezyki i paradygmaty programowania 1 - SMTVSATsmtvsat.pl/pawelb/?/JPP_2013_1.pdf · Języki i paradygmaty programowania- uwagi wstępne Syntaktyka Założenie: dany jest ustalony

Języki i paradygmaty programowania- uwagi wstępne

Programowanie proceduralne Umożliwienie powstania techniki

programowania bottom-up Projektowanie oprogramowania od małych

części (podalgorytmów) zapisywanych w postaci podprogramów. Na ich bazie są budowane większe podprogramy, z nich jeszcze większe, itd.

Ułatwienie pracy nad programem, w szczególności w fazach projektowania oraz usuwania błędów

Umożliwienie rozwoju:– programowania zespołowego– bibliotek programowania

Page 55: Jezyki i paradygmaty programowania 1 - SMTVSATsmtvsat.pl/pawelb/?/JPP_2013_1.pdf · Języki i paradygmaty programowania- uwagi wstępne Syntaktyka Założenie: dany jest ustalony

Języki i paradygmaty programowania- uwagi wstępne

Programowanie proceduralne Przykłady języków:

– C– C++– Fortran– Ada– Pascal– Object Pascal– Basic– Python– Ruby

Page 56: Jezyki i paradygmaty programowania 1 - SMTVSATsmtvsat.pl/pawelb/?/JPP_2013_1.pdf · Języki i paradygmaty programowania- uwagi wstępne Syntaktyka Założenie: dany jest ustalony

Języki i paradygmaty programowania- uwagi wstępne

Programowanie strukturalne Udoskonalenie paradygmatu proceduralnego Używanie prostych, dobrze zdefiniowanych struktur

(konstrukcji programistycznych) Dla małych jednostek programu (zestawu

elementarnych instrukcji) wyróżniamy 3 typy struktur sterujących (wg Dijkstry):

sekwencja (konkatenacja)-wykonywanie instrukcji w określonej kolejności- operator ; (wiele języków)

selekcja (wybór)-wykonywanie jednej z wielu instrukcji zależnie od stanu programu- if,if...else, switch (wiele języków)

iteracja- powtarzanie instrukcji tak długo, jak długo spełniony (lub niespełniony) jest dany warunek- pętle for, while, do...while (wiele języków)

Page 57: Jezyki i paradygmaty programowania 1 - SMTVSATsmtvsat.pl/pawelb/?/JPP_2013_1.pdf · Języki i paradygmaty programowania- uwagi wstępne Syntaktyka Założenie: dany jest ustalony

Języki i paradygmaty programowania- uwagi wstępne

Programowanie strukturalne Używanie prostych, dobrze zdefiniowanych struktur

(konstrukcji programistycznych) Dla dużych jednostek programu rozbicie ich na

mniejsze jednostki (zgodnie z zasadą rozumienia fragmentu bez konieczności rozumienia całości):

podprogram- pozwala wydzielony podalgorytm zapisać, nazwać i wywoływać wielokrotnie, z zastrzeżeniem, że ma dokładnie jeden punkt wejścia oraz dokładnie jeden punkt wyjścia

rekurencja- definiowanie podprogramu za pomocą tego samego podprogramu

unikanie skoków bezwarunkowych (wg Dijkstry) (goto - Pascal)

Page 58: Jezyki i paradygmaty programowania 1 - SMTVSATsmtvsat.pl/pawelb/?/JPP_2013_1.pdf · Języki i paradygmaty programowania- uwagi wstępne Syntaktyka Założenie: dany jest ustalony

Języki i paradygmaty programowania- uwagi wstępne

Programowanie strukturalne Wersja liberalna programowania strukturalnego Motto: wygoda jest ważniejsza niż wygląd Wprowadzenie tzw. skoków strukturalnych instrukcja return- pozwala tworzyć funkcje z

wieloma punktami wyjścia instrukcja break- pozwala opuścić pętlę w dowolnym

miejscu instrukcja continue- pozwala przeskoczyć część

bieżącej iteracji pętli w dowolnym miejscu obsługa wyjątków daje możliwość zajęcia się

sytuacjami wyjątkowymi bez mnożenia zbędnych bytów (zmiennych, warunków itp.)

instrukcja goto (wyjątkowo dopuszczalna)

Page 59: Jezyki i paradygmaty programowania 1 - SMTVSATsmtvsat.pl/pawelb/?/JPP_2013_1.pdf · Języki i paradygmaty programowania- uwagi wstępne Syntaktyka Założenie: dany jest ustalony

Języki i paradygmaty programowania- uwagi wstępne

Programowanie strukturalne Przykład 1 programu strukturalnego (język C)

#include< stdio.h >

int main(){

int a[50],n,count_neg=0,count_pos=0,I;

printf(“Wprowadz rozmiar tablicy”);

scanf(“%d”,&n);

printf(“Wprowadz elementy tablicy”);

for (I=0;I < n;I++)

scanf(“%d”,&a[I]);

for(I=0;I < n;I++){

if(a[I] < 0)

count_neg++;

else

count_pos++;

}

printf(“Mamy %d liczb ujemnych w tablicy”,count_neg);

printf(“Mamy %d liczb dodatnich w tablicy”,count_pos);

return 0;

}

Page 60: Jezyki i paradygmaty programowania 1 - SMTVSATsmtvsat.pl/pawelb/?/JPP_2013_1.pdf · Języki i paradygmaty programowania- uwagi wstępne Syntaktyka Założenie: dany jest ustalony

Języki i paradygmaty programowania- uwagi wstępne

Programowanie strukturalne Przykład 2 programu strukturalnego (język C++)

#include <iostream.h>

#include <conio.h>

int factorial(int);

int main() {

int number;

cout << "Wprowadz liczbe nieujemna: ";

cin >> number;

if (number < 0)

cout << "To nie jest liczba nieujemna.\n";

else

cout << number << " silnia wynosi: " << factorial(number) << endl;

getch();

return 0;

}

int factorial(int number) {

int temp;

if(number <= 1) return 1;

temp = number * factorial(number - 1);

return temp;

}

Page 61: Jezyki i paradygmaty programowania 1 - SMTVSATsmtvsat.pl/pawelb/?/JPP_2013_1.pdf · Języki i paradygmaty programowania- uwagi wstępne Syntaktyka Założenie: dany jest ustalony

Języki i paradygmaty programowania- uwagi wstępne

Programowanie strukturalne Umożliwienie powstania techniki

programowania top-down Podzielenie zadania programistycznego na

mniejsze podzadania, zgodnie z przewidywaną strukturą na najwyższym poziomie, wypełnienie tej struktury rozkazami elementarnymi (tam gdzie jest to możliwe), a następnie (tam gdzie nie można było wstawić rozkazów elementarnych) zastosowanie rekurencyjnego dzielenia w głąb, do coraz drobniejszych zadań.

Technika top-down jest odwrotna do techniki buttom-up.

Page 62: Jezyki i paradygmaty programowania 1 - SMTVSATsmtvsat.pl/pawelb/?/JPP_2013_1.pdf · Języki i paradygmaty programowania- uwagi wstępne Syntaktyka Założenie: dany jest ustalony

Języki i paradygmaty programowania- uwagi wstępne

Programowanie strukturalne Przykłady języków:

– C– C++– Fortran– Ada– Pascal– Object Pascal– Basic– Python– Ruby

Page 63: Jezyki i paradygmaty programowania 1 - SMTVSATsmtvsat.pl/pawelb/?/JPP_2013_1.pdf · Języki i paradygmaty programowania- uwagi wstępne Syntaktyka Założenie: dany jest ustalony

Języki i paradygmaty programowania- uwagi wstępne

Programowanie obiektowe ang. Object Oriented Programming (OOP) Programowanie obiektowe jest do pewnego

stopnia rozszerzeniem paradygmatu programowania proceduralnego i strukturalnego

Rozszerzenie formalne:– klasa class– obiekt (instancja klasy)

Page 64: Jezyki i paradygmaty programowania 1 - SMTVSATsmtvsat.pl/pawelb/?/JPP_2013_1.pdf · Języki i paradygmaty programowania- uwagi wstępne Syntaktyka Założenie: dany jest ustalony

Języki i paradygmaty programowania- uwagi wstępne

Programowanie obiektowe (OOP) Program to zbiór porozumiewających się ze

sobą aktywnych obiektów, czyli jednostek zawierających pewne dane i umiejących wykonywać na nich pewne operacje

Ważną nową cechą jest powiązanie danych (czyli stanu) z operacjami na nich ( metodami- forma podprogramu) w całość, stanowiącą odrębną jednostkę— obiekt

Page 65: Jezyki i paradygmaty programowania 1 - SMTVSATsmtvsat.pl/pawelb/?/JPP_2013_1.pdf · Języki i paradygmaty programowania- uwagi wstępne Syntaktyka Założenie: dany jest ustalony

Języki i paradygmaty programowania- uwagi wstępne

Programowanie obiektowe Konsekwecje rozszerzenia formalnego: dziedziczenie pozwala tworzyć obiekty bardziej skomplikowane na bazie prostszych dziedziczenie klas przekłada się na zawieranie się jednej w drugiej, a to

oznacza, że obiekty mogą należeć jednocześnie do wielu klas, co ma istotne znaczenie dla polimorfizmu

polimorfizm dynamiczny (polimorfizm obiektowy) dzięki dziedziczeniu pozwala obiektom automatycznie dobierać

odpowiednie metody do swojego aktualnego typu

enkapsulacja (hermetyzacja) polega na tym, że tylko pewne dane i metody obiektu (stanowiące jego

interfejs) sa widoczne „na zewnatrz”, dla innych obiektów; jego implementacja jest ukryta przed — umyślnym bądź przypadkowym

uszkodzeniem czy też złym wykorzystaniem

Page 66: Jezyki i paradygmaty programowania 1 - SMTVSATsmtvsat.pl/pawelb/?/JPP_2013_1.pdf · Języki i paradygmaty programowania- uwagi wstępne Syntaktyka Założenie: dany jest ustalony

Języki i paradygmaty programowania- uwagi wstępne

Programowanie obiektowe Konsekwecje rozszerzenia formalnego: abstrakcja danych wynika bezpośrednio z hermetyzacji i dziedziczenia — można w prosty

sposób definiować ogólne obiekty (czy też klasy), które są jedynie wzorcami pewnych bardziej skomplikowanych, doprecyzowanych obiektów

Page 67: Jezyki i paradygmaty programowania 1 - SMTVSATsmtvsat.pl/pawelb/?/JPP_2013_1.pdf · Języki i paradygmaty programowania- uwagi wstępne Syntaktyka Założenie: dany jest ustalony

Języki i paradygmaty programowania- uwagi wstępne

Programowanie obiektowe Paradygmat obiektowy najlepiej odzwierciedla

sposób, w jaki ludzie myślą o świecie Podobieństwo modelu obiektowego do świata

rzeczywistego Paradygmat obecnie dominujący (TIOBE

Programming Community Index) http://www.tiobe.com/index.php/content/paperclip/tpci/index.html

Luty 2013:1. Java3. Objective-C4. C++5. C#7. Python10. Ruby

Page 68: Jezyki i paradygmaty programowania 1 - SMTVSATsmtvsat.pl/pawelb/?/JPP_2013_1.pdf · Języki i paradygmaty programowania- uwagi wstępne Syntaktyka Założenie: dany jest ustalony

Języki i paradygmaty programowania- uwagi wstępne

Programowanie obiektowe

Przykład programu obiektowego (język Java):

public class HelloWorld { public static void main(String[] args) { System.out.println("Hello, World!"); }}

Page 69: Jezyki i paradygmaty programowania 1 - SMTVSATsmtvsat.pl/pawelb/?/JPP_2013_1.pdf · Języki i paradygmaty programowania- uwagi wstępne Syntaktyka Założenie: dany jest ustalony

Języki i paradygmaty programowania- uwagi wstępne

Programowanie obiektowe Przykłady języków:

– Java– C#– C++– Ada– Objective-C– Smalltalk– Python– Ruby

Page 70: Jezyki i paradygmaty programowania 1 - SMTVSATsmtvsat.pl/pawelb/?/JPP_2013_1.pdf · Języki i paradygmaty programowania- uwagi wstępne Syntaktyka Założenie: dany jest ustalony

Języki i paradygmaty programowania- uwagi wstępne

Programowanie deklaratywne Programista pisząc program podaje (deklaruje)

programowi pewne zależności oraz cele, które program ma osiągnąć (co ma być osiągnięte?)

Wygodny sposób komunikowania poleceń Nie podaje wprost sposobu osiągnięcia

wyników (jak w przypadku programowania imperatywnego- jak osiągnąć wynik?)

Page 71: Jezyki i paradygmaty programowania 1 - SMTVSATsmtvsat.pl/pawelb/?/JPP_2013_1.pdf · Języki i paradygmaty programowania- uwagi wstępne Syntaktyka Założenie: dany jest ustalony

Języki i paradygmaty programowania- uwagi wstępne

Programowanie funkcyjne Podstawa matematyczna- rachunek lambda (Alons

Church, 1941) w oparciu o wyrażenie lambda ( λ-wyrażenie) z możliwością zdefiniowania funkcji bez nadawania jej nazwy (funkcje anonimowe)

Postać ogólna: λ parametry.wartość funkcji

Przykład 1. λ x.x2 to funkcja obliczająca kwadrat danego parametru (λ x.x2 (3)=32=9)

Przykład 2.λ x y.x+y to funkcja obliczająca sumę parametrów (λ x y.x+y (3 4)=3+4=7)

Page 72: Jezyki i paradygmaty programowania 1 - SMTVSATsmtvsat.pl/pawelb/?/JPP_2013_1.pdf · Języki i paradygmaty programowania- uwagi wstępne Syntaktyka Założenie: dany jest ustalony

Języki i paradygmaty programowania- uwagi wstępne

Programowanie funkcyjne Funkcje anonimowe mogą być argumentem innej

funkcji Wartością zwracaną może być funkcja Przykład 3.

Pochodna(F) = F'Pochodna(λ x.x2) = (λ x.2*x)

Page 73: Jezyki i paradygmaty programowania 1 - SMTVSATsmtvsat.pl/pawelb/?/JPP_2013_1.pdf · Języki i paradygmaty programowania- uwagi wstępne Syntaktyka Założenie: dany jest ustalony

Języki i paradygmaty programowania- uwagi wstępne

Programowanie funkcyjne-c.d. Program to złożona funkcja (w sensie

matematycznym), która otrzymawszy dane wejściowe wylicza na ich podstawie pewien wynik

Zasadniczą różnicą w stosunku do poprzednich paradygmatów jest brak dostępu do stanu maszyny

Nie ma zmiennych modelujących komórki pamięci

Nie ma efektów ubocznych (bo nie ma stanu funkcji)

Page 74: Jezyki i paradygmaty programowania 1 - SMTVSATsmtvsat.pl/pawelb/?/JPP_2013_1.pdf · Języki i paradygmaty programowania- uwagi wstępne Syntaktyka Założenie: dany jest ustalony

Języki i paradygmaty programowania- uwagi wstępne

Programowanie funkcyjne-c.d. Nie ma tradycyjnie rozumianych pętli (bo wymagają

zmiennych (lub innego dostępu do stanu maszyny) do sterowania ich przebiegiem)

Funkcje dla tych samych parametrów zwracają zawsze to samo (przezroczystość odniesień)

Przykład (Język C (programowanie imperatywne)):time(NULL) ≢time(NULL)#include <stdio.h>

#include <time.h>

int main() {

time_t seconds;

seconds = time(NULL);

printf("%ld sekund od 1 stycznia 1970 GMT", seconds);

return 0;

}

Page 75: Jezyki i paradygmaty programowania 1 - SMTVSATsmtvsat.pl/pawelb/?/JPP_2013_1.pdf · Języki i paradygmaty programowania- uwagi wstępne Syntaktyka Założenie: dany jest ustalony

Języki i paradygmaty programowania- uwagi wstępne

Programowanie funkcyjne-c.d. Konstruowanie programów to składanie funkcji

zazwyczaj z istotnym wykorzystaniem rekurencji (zamiast pętli) oraz wyrażeń warunkowych

Charakterystyczne jest definiowanie funkcji wyższego rzędu (dla których argumentami oraz których wynikami mogą być funkcje (a nie tylko „proste” dane jak liczby lub napisy- patrz język C)

Page 76: Jezyki i paradygmaty programowania 1 - SMTVSATsmtvsat.pl/pawelb/?/JPP_2013_1.pdf · Języki i paradygmaty programowania- uwagi wstępne Syntaktyka Założenie: dany jest ustalony

Języki i paradygmaty programowania- uwagi wstępne

Programowanie funkcyjne-c.d. Przykład programu funkcyjnego Język LISP

USER(1)> (* 2 (cos 0) (+ 4 6)) ; *,+,cos to funkcje numeryczne

==> 20

Język Clojure

USER> (* 2 (Math/cos 0) (+ 4 6)) ; *,+,Math/cos to funkcje numeryczne

==> 20

Page 77: Jezyki i paradygmaty programowania 1 - SMTVSATsmtvsat.pl/pawelb/?/JPP_2013_1.pdf · Języki i paradygmaty programowania- uwagi wstępne Syntaktyka Założenie: dany jest ustalony

Języki i paradygmaty programowania- uwagi wstępne

Programowanie funkcyjne-c.d. Przykład języków:

– Lisp– Haskell– Erlang– Clojure– Scala– F#– Python– Ruby

Page 78: Jezyki i paradygmaty programowania 1 - SMTVSATsmtvsat.pl/pawelb/?/JPP_2013_1.pdf · Języki i paradygmaty programowania- uwagi wstępne Syntaktyka Założenie: dany jest ustalony

Języki i paradygmaty programowania- uwagi wstępne

Programowanie logiczne Podstawowa koncepcja- predykat np. ojciec (jacek, agata) Na program składa się: zbiór zależności (przesłanek) pewne stwierdzenie/pytanie (cel) Wykonanie programu to próba udowodnienia

stwierdzenia w oparciu o podane przesłanki Obliczenia wykonywane są przy okazji

dowodzenia stwierdzenia Podobnie jak w programowaniu funkcyjnym,

brak jest rozkazów Opisujemy to co wiemy oraz co chcemy

uzyskać

Page 79: Jezyki i paradygmaty programowania 1 - SMTVSATsmtvsat.pl/pawelb/?/JPP_2013_1.pdf · Języki i paradygmaty programowania- uwagi wstępne Syntaktyka Założenie: dany jest ustalony

Języki i paradygmaty programowania- uwagi wstępne

Programowanie logiczne Przykład jezyka logicznego (język Prolog)

Znane fakty:Adam jest ojcem GrzegorzaGrzegorz jest ojcem Jana i Joannybycie dziadkiem oznacza bycie ojcem ojca

ojciec(adam, grzegorz).

ojciec(grzegorz, ja).

ojciec(grzegorz, joanna).

dziadek(X, Z) :- ojciec(X, Y), ojciec(Y, Z).

?- dziadek(X, jan).

Page 80: Jezyki i paradygmaty programowania 1 - SMTVSATsmtvsat.pl/pawelb/?/JPP_2013_1.pdf · Języki i paradygmaty programowania- uwagi wstępne Syntaktyka Założenie: dany jest ustalony

Języki i paradygmaty programowania- uwagi wstępne

Paradygmat programowania równoległego

Rozdział procesu wykonywania programu na wiele procesorów (CPU, GPU) (multiprocesor- maszyna wieloprocesorowa ze wspólną pamięcią) lub wiele rdzeni procesora w tym samym czasie

Wykorzystanie języków zorientowanych obiektowo (C++ (biblioteka OpenMP), Java (interfejs JOMP) lub imperatywnych (C, Fortran (biblioteka OpenMP), CUDA C)

Page 81: Jezyki i paradygmaty programowania 1 - SMTVSATsmtvsat.pl/pawelb/?/JPP_2013_1.pdf · Języki i paradygmaty programowania- uwagi wstępne Syntaktyka Założenie: dany jest ustalony

Języki i paradygmaty programowania- uwagi wstępne

Paradygmat programowania równoległego

Model OpenMP Rozszerzenie modelu strukturalnego / obiektowego: mechanizm synchronizacji procesów oraz wątków (np.

wykorzystanie modelu fork and join)

mechanizm współdzielenia pamięci i innych zasobów komputera (wykorzystanie klauzul: shared, private)

Page 82: Jezyki i paradygmaty programowania 1 - SMTVSATsmtvsat.pl/pawelb/?/JPP_2013_1.pdf · Języki i paradygmaty programowania- uwagi wstępne Syntaktyka Założenie: dany jest ustalony

Języki i paradygmaty programowania- uwagi wstępne

Paradygmat programowania równoległego - przykład

#include <omp.h>

int main(int argc, char **argv) {

const int N = 100000;

int i, a[N];

//równoległa inicjalizacja wartości dużej tablicy //każdy wątek wykonuje część pracy

#pragma omp parallel for

for (i = 0; i < N; i++)

a[i] = 2 * i;

return 0;

}

Page 83: Jezyki i paradygmaty programowania 1 - SMTVSATsmtvsat.pl/pawelb/?/JPP_2013_1.pdf · Języki i paradygmaty programowania- uwagi wstępne Syntaktyka Założenie: dany jest ustalony

Języki i paradygmaty programowania- uwagi wstępne

Modele programowania równoległego

Cilk Plus (zintegrowany z kompilatorami C/C++) Wyrażenie równoległości w oparciu o model fork

and join:cilk_spawn / cilk_sync (asynchroniczne wywołanie funkcji / synchronizacja wywołań)cilk_for (umożliwienie równoległego wykonywania iteracji pętli for)

Page 84: Jezyki i paradygmaty programowania 1 - SMTVSATsmtvsat.pl/pawelb/?/JPP_2013_1.pdf · Języki i paradygmaty programowania- uwagi wstępne Syntaktyka Założenie: dany jest ustalony

Języki i paradygmaty programowania- uwagi wstępne

Modele programowania równoległego

Przykład 1 … cilk_spawn hello(); cilk_spawn world(); cilk_sync; …

Przykład 2 … cilk_for(int i =0; i<1000; i++) sum+=i; …

Page 85: Jezyki i paradygmaty programowania 1 - SMTVSATsmtvsat.pl/pawelb/?/JPP_2013_1.pdf · Języki i paradygmaty programowania- uwagi wstępne Syntaktyka Założenie: dany jest ustalony

Języki i paradygmaty programowania- uwagi wstępne

Inne modele programowania równoległego

Threading Building Blocks (biblioteka dla kompilatorów zgodnych z ISO C++)

Array Building Blocks CUDA (GPUs) OpenCL (GPUs, CPUs, APUs)

Page 86: Jezyki i paradygmaty programowania 1 - SMTVSATsmtvsat.pl/pawelb/?/JPP_2013_1.pdf · Języki i paradygmaty programowania- uwagi wstępne Syntaktyka Założenie: dany jest ustalony

Języki i paradygmaty programowania- uwagi wstępne

Paradygmat programowania rozproszonego

Rozdział procesu wykonywania programu na wiele maszyn (procesorów połącznych siecią) w tym samym czasie

Wykorzystanie języków zorientowanych obiektowo (C++) lub imperatywnych (C, Fortran)

Standard programowania rozproszonego: MPI (Message Passing Interface)

Page 87: Jezyki i paradygmaty programowania 1 - SMTVSATsmtvsat.pl/pawelb/?/JPP_2013_1.pdf · Języki i paradygmaty programowania- uwagi wstępne Syntaktyka Założenie: dany jest ustalony

Języki i paradygmaty programowania- uwagi wstępne

Paradygmat programowania rozproszonego - przykład

#include <mpi.h>int main(int argc, char *argv[]){int npes;int myrank;// Inicjalizacja podsystemu MPIMPI_Init(&argc, &argv);// Pobierz rozmiar globalnego komunikatoraMPI_Comm_size(MPI_COMM_WORLD, &npes);// Pobierz numer procesu w globalnym komunikatorzeMPI_Comm_rank(MPI_COMM_WORLD, &myrank);printf("Jestem %d procesem z %d\n",myrank, npes);MPI_Finalize();return 0;}

Page 88: Jezyki i paradygmaty programowania 1 - SMTVSATsmtvsat.pl/pawelb/?/JPP_2013_1.pdf · Języki i paradygmaty programowania- uwagi wstępne Syntaktyka Założenie: dany jest ustalony

Języki i paradygmaty programowania- uwagi wstępne

Programowanie współbieżne Nadparadygmat wykonywanie wielu zadań obliczeniowych w tym

samym czasie (równoczesne wykonywanie zadań przez wiele procesorów wraz z podziałem czasu jednego procesora między wiele zadań)

Page 89: Jezyki i paradygmaty programowania 1 - SMTVSATsmtvsat.pl/pawelb/?/JPP_2013_1.pdf · Języki i paradygmaty programowania- uwagi wstępne Syntaktyka Założenie: dany jest ustalony

Języki i paradygmaty programowania- uwagi wstępne

Paradygmat programowania generycznego

Programowanie rodzajowe (uogólnione) Umożliwia tworzenie jednostek (klas, obiektów, funkcji,

typów) parametrycznych (polimorficznych, uogólnionych), ktore stają sie pełnoprawnymi jednostkami w chwili ich dookreślenia (może to zostać odłożone do momentu skorzystania z ich definicji w gotowym programie).

Tworzenie algorytmów i struktur danych operujących na danych (prawie) dowolnego typu

Uogólnienie paradygmatu programowania obiektowego Przykłady języków: C++ (STL), Ada, Java, C#, Haskell

Page 90: Jezyki i paradygmaty programowania 1 - SMTVSATsmtvsat.pl/pawelb/?/JPP_2013_1.pdf · Języki i paradygmaty programowania- uwagi wstępne Syntaktyka Założenie: dany jest ustalony

Języki i paradygmaty programowania- uwagi wstępne

Paradygmat programowania generycznego - przykład#include <iostream> Output:#include <string> Max(i, j): 10using namespace std; Max(f1, f2): 1.5template <typename T> Max(s1, s2): Rubyinline T const& Max (T const& a, T const& b) { return a < b ? b:a; } int main (){ int i = 10; int j = 1; cout << "Max(i, j): " << Max(i, j) << endl; double f1 = 0.8; double f2 = 1.5; cout << "Max(f1, f2): " << Max(f1, f2) << endl; string s1 = "Python"; string s2 = "Ruby"; cout << "Max(s1, s2): " << Max(s1, s2) << endl; return 0;}

Page 91: Jezyki i paradygmaty programowania 1 - SMTVSATsmtvsat.pl/pawelb/?/JPP_2013_1.pdf · Języki i paradygmaty programowania- uwagi wstępne Syntaktyka Założenie: dany jest ustalony

Języki i paradygmaty programowania- uwagi wstępne

Paradygmat programowania modularnego Pośredni między programowaniem

obiektowym, a proceduralnym. W tym paradygmacie główną jednostką planowania programu i jego tworzenia jest moduł (pakiet) zawarty zwykle w osobnym pliku i w wielu aspektach traktowany jako obiekt

Przykłady jezyków: Ada, Python

Page 92: Jezyki i paradygmaty programowania 1 - SMTVSATsmtvsat.pl/pawelb/?/JPP_2013_1.pdf · Języki i paradygmaty programowania- uwagi wstępne Syntaktyka Założenie: dany jest ustalony

Języki i paradygmaty programowania- uwagi wstępne

Paradygmat programowania aspektowego Tworzenie programów w oparciu o tzw. aspekty

(reprezentacje zagadnień) ze wspomaganiem separacji zagadnień i rozdzielenia programu na części w jak największym stopniu niezwiązane funkcjonalnie

Rozszerzenie paradygmatu obiektowego Przykłady jezyków: AspectJ

Page 93: Jezyki i paradygmaty programowania 1 - SMTVSATsmtvsat.pl/pawelb/?/JPP_2013_1.pdf · Języki i paradygmaty programowania- uwagi wstępne Syntaktyka Założenie: dany jest ustalony

Języki i paradygmaty programowania- uwagi wstępne

Paradygmat programowania komponentowego Paradygmat związany z modularyzacją

programów, a jednocześnie z programowaniem obiektowym

Komponenty to samodzielne obiekty wyposażone w ściśle wyspecyfikowany interfejs, wykonujace określone usługi

Przykłady: EJB, COM+, Corba,

Page 94: Jezyki i paradygmaty programowania 1 - SMTVSATsmtvsat.pl/pawelb/?/JPP_2013_1.pdf · Języki i paradygmaty programowania- uwagi wstępne Syntaktyka Założenie: dany jest ustalony

Języki i paradygmaty programowania- uwagi wstępne

Paradygmat programowania sterowanego przepływem danych

Program postrzegany jest jako graf operacji, między którymi przepływają dane. Moment wykonania danej operacji nie jest więc zależny od liniowej sekwencji instrukcji, lecz od dostępności danych — w tym podejściu dane są najważniejsze (analogia- linia produkcyjna fabryki)

Ten model bardzo dobrze nadaje się do równoległego wykonywania programu na wielu procesorach. Rozkład zadań na procesory uzyskujemy automatycznie, bez konieczności rozdzielania zadań (czyli tworzenia dodatkowego kodu)

Page 95: Jezyki i paradygmaty programowania 1 - SMTVSATsmtvsat.pl/pawelb/?/JPP_2013_1.pdf · Języki i paradygmaty programowania- uwagi wstępne Syntaktyka Założenie: dany jest ustalony

Języki i paradygmaty programowania- uwagi wstępne

Paradygmat programowania zdarzeniowego Programowanie sterowane zdarzeniami-

zamiast zasadniczego nurtu sterowania mamy wiele drobnych programów obsługi zdarzeń, uruchamianych w chwili wystąpienia odpowiedniego zdarzenia (vs. programowanie z własnym wątkiem sterowania)

Paradygmat programowania powiązany z programowaniem komponentowym i obiektowym

Przykład: VB.NET

Page 96: Jezyki i paradygmaty programowania 1 - SMTVSATsmtvsat.pl/pawelb/?/JPP_2013_1.pdf · Języki i paradygmaty programowania- uwagi wstępne Syntaktyka Założenie: dany jest ustalony

Języki i paradygmaty programowania- uwagi wstępne

Paradygmat programowania agentowego

Rozszerzenie paradygmatu obiektowego Podstawowa jednostka- agent czyli wyspecjalizowany

i odporny na błędy i niepowodzenia, a jednoczesnie samodzielny obiekt, ktory w środowisku heterogenicznym (np. w sieci komputerowej) może pracować sam, a w potrzebie komunikować się z innymi agentami

Istota- zapewnnie maksymalnej odporności na błędy i utratę wyników kosztem dublowania swych czynności lub samoreplikacji

Przykład: framework JADE (Java Agent DEvelopment Framework)

Page 97: Jezyki i paradygmaty programowania 1 - SMTVSATsmtvsat.pl/pawelb/?/JPP_2013_1.pdf · Języki i paradygmaty programowania- uwagi wstępne Syntaktyka Założenie: dany jest ustalony

Języki i paradygmaty programowania- uwagi wstępne

Paradygmat programowania prototypowego

Wariacja paradygmatu obiektowego, w którym nie występują klasy, a funkcję klas pełnią prototypy

Podstawowa jednostka- prototyp czyli specjalnie oznaczony egzemplarz obiektu po którym inne obiekty dziedziczą pola, metody oraz można rozszerzać go o nowe metody.

Dziedziczenie- w oparciu o tzw. łańcuch prototypów (istotna jest tutaj długość łańcucha) (wydajność)

Przykłady: JavaScript, ActionScript, IO

Page 98: Jezyki i paradygmaty programowania 1 - SMTVSATsmtvsat.pl/pawelb/?/JPP_2013_1.pdf · Języki i paradygmaty programowania- uwagi wstępne Syntaktyka Założenie: dany jest ustalony

Języki i paradygmaty programowania- uwagi wstępne

Paradygmat programowania refleksyjnego

Podstawowe pojęcie – mechanizm refleksji Program komputerowy może być modyfikowany w

trakcie działania w sposób zależny od własnego kodu oraz od zachowania w trakcie jego wykonania

Istota- zarządzanie kodem jak danymi (kod = dane) Przykłady: Ruby, Python, Objective C, Java

Page 99: Jezyki i paradygmaty programowania 1 - SMTVSATsmtvsat.pl/pawelb/?/JPP_2013_1.pdf · Języki i paradygmaty programowania- uwagi wstępne Syntaktyka Założenie: dany jest ustalony

Języki i paradygmaty programowania- uwagi wstępne

Inne paradygmaty programowania Obejmują niektóre aspekty programowania Programowanie na poziomie wartości (obecne

w formie podzbioru w programowaniu imperatywnym, obiektowym, funkcyjnym)

Programowanie skalarne Programowanie wektorowe Programowanie macierzowe

Page 100: Jezyki i paradygmaty programowania 1 - SMTVSATsmtvsat.pl/pawelb/?/JPP_2013_1.pdf · Języki i paradygmaty programowania- uwagi wstępne Syntaktyka Założenie: dany jest ustalony

Języki i paradygmaty programowania- uwagi wstępne

Języki, a paradygmaty programowania Dany język programowania ucieleśnia co

najmniej jeden paradygmat programowania C: imperatywny, proceduralny, strukturalny C++: imperatywny, proceduralny, strukturalny,

obiektowy Java, C#: obiektowy Python, Ruby: obiektowy, proceduralny,

strukturalny, funkcyjny Scala: funkcyjny, obiektowy

Page 101: Jezyki i paradygmaty programowania 1 - SMTVSATsmtvsat.pl/pawelb/?/JPP_2013_1.pdf · Języki i paradygmaty programowania- uwagi wstępne Syntaktyka Założenie: dany jest ustalony

Języki i paradygmaty programowania- uwagi wstępne

Główne paradygmaty programowania- podsumowanie Programowanie imperatywne Główna koncepcja- instrukcja Program- sekwencja instrukcji Wykonanie programu- wykonanie instrukcji Wynik- końcowy stan pamięci komputera

Page 102: Jezyki i paradygmaty programowania 1 - SMTVSATsmtvsat.pl/pawelb/?/JPP_2013_1.pdf · Języki i paradygmaty programowania- uwagi wstępne Syntaktyka Założenie: dany jest ustalony

Języki i paradygmaty programowania- uwagi wstępne

Główne paradygmaty programowania- podsumowanie Programowanie obiektowe Główna koncepcja- obiekt Program- zbiór obiektów klas Wykonanie programu- wymiana wiadomości

pomiędzy obiektami Wynik- końcowy stan stanów obiektów

Page 103: Jezyki i paradygmaty programowania 1 - SMTVSATsmtvsat.pl/pawelb/?/JPP_2013_1.pdf · Języki i paradygmaty programowania- uwagi wstępne Syntaktyka Założenie: dany jest ustalony

Języki i paradygmaty programowania- uwagi wstępne

Główne paradygmaty programowania- podsumowanie

Programowanie funkcyjne Główna koncepcja- funkcja Program- zbiór funkcji Wykonanie programu- wyliczanie funkcji Wynik- wartość funkcji głównej

Page 104: Jezyki i paradygmaty programowania 1 - SMTVSATsmtvsat.pl/pawelb/?/JPP_2013_1.pdf · Języki i paradygmaty programowania- uwagi wstępne Syntaktyka Założenie: dany jest ustalony

Języki i paradygmaty programowania- uwagi wstępne

Główne paradygmaty programowania- podsumowanie Programowanie logiczne Główna koncepcja- predykat Program- formuły logiczne: aksjomaty i

twierdzenie Wykonanie programu- kontrola poprawności

twierdzenia Wynik- powodzenie bądź niepowodzenie kontroli

poprawności twierdzenia

Page 105: Jezyki i paradygmaty programowania 1 - SMTVSATsmtvsat.pl/pawelb/?/JPP_2013_1.pdf · Języki i paradygmaty programowania- uwagi wstępne Syntaktyka Założenie: dany jest ustalony

Języki i paradygmaty programowania- uwagi wstępne

Dziękuję za uwagę