background image

Języki i paradygmaty 

programowania

II.

 Wprowadzenie (c.d.)

background image

2009-02-26

Jarosław Bylina :: Języki i paradygmaty programowania :: Wprowadzenie (c.d.)

II

-2

background image

2009-02-26

Jarosław Bylina :: Języki i paradygmaty programowania :: Wprowadzenie (c.d.)

II

-3

III.

 Programowanie funkcyjne

Program to po prostu złożona
funkcja (w sensie matematycznym)

,

która otrzymawszy dane wejściowe wylicza 
pewien wynik

background image

2009-02-26

Jarosław Bylina :: Języki i paradygmaty programowania :: Wprowadzenie (c.d.)

II

-4

III.

 Programowanie funkcyjne

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

Nie ma zmiennych

A co za tym idzie, nie ma
żadnych efektów ubocznych
(rozumianych w sensie tradycyjnym, jako 
zmiana wartości zmiennych)

background image

2009-02-26

Jarosław Bylina :: Języki i paradygmaty programowania :: Wprowadzenie (c.d.)

II

-5

III.

 Programowanie funkcyjne

Nie ma tradycyjnie rozumianych pętli 
(imperatywnych z natury)

Tradycyjne pętle wymagają bowiem zwykle 
(poza przypadkami zdegenerowanymi, jak 
pętle nieskończone) zmiennych (lub innego 
dostępu do stanu maszyny) do sterowania ich 
przebiegiem

background image

2009-02-26

Jarosław Bylina :: Języki i paradygmaty programowania :: Wprowadzenie (c.d.)

II

-6

III.

 Programowanie funkcyjne

Konstruowanie programów to składanie funkcji

Zazwyczaj z istotnym wykorzystaniem 
rekurencji (rekursji)
(tam, gdzie w programowaniu imperatywnym 
wykorzystujemy pętle)

Charakterystyczne jest również definiowanie 
funkcji wyższego rzędu

, czyli takich, dla 

których argumentami i których wynikami mogą 
być funkcje (a nie tylko „proste” dane jak 
liczby lub napisy)

background image

2009-02-26

Jarosław Bylina :: Języki i paradygmaty programowania :: Wprowadzenie (c.d.)

II

-7

III.

 Programowanie funkcyjne

background image

2009-02-26

Jarosław Bylina :: Języki i paradygmaty programowania :: Wprowadzenie (c.d.)

II

-8

background image

2009-02-26

Jarosław Bylina :: Języki i paradygmaty programowania :: Wprowadzenie (c.d.)

II

-9

IV.

 Programowanie logiczne

Na program składa się
zbiór zależności (przesłanek)
oraz
pewne stwierdzenie/pytanie (cel)

background image

2009-02-26

Jarosław Bylina :: Języki i paradygmaty programowania :: Wprowadzenie (c.d.)

II

-10

IV.

 Programowanie logiczne

Wykonanie programu to
próba udowodnienia celu
w oparciu o podane przesłanki

Obliczenia wykonywane są niejako „przy 
okazji” dowodzenia celu

Podobnie jak w programowaniu funkcyjnym, 
nie wydajemy rozkazów

,

a jedynie opisujemy,
co wiemy i co chcemy uzyskać

background image

2009-02-26

Jarosław Bylina :: Języki i paradygmaty programowania :: Wprowadzenie (c.d.)

II

-11

IV.

 Programowanie logiczne

background image

2009-02-26

Jarosław Bylina :: Języki i paradygmaty programowania :: Wprowadzenie (c.d.)

II

-12

IV.

 Programowanie logiczne

background image

2009-02-26

Jarosław Bylina :: Języki i paradygmaty programowania :: Wprowadzenie (c.d.)

II

-13

IV.

 Programowanie logiczne

background image

2009-02-26

Jarosław Bylina :: Języki i paradygmaty programowania :: Wprowadzenie (c.d.)

II

-14

background image

2009-02-26

Jarosław Bylina :: Języki i paradygmaty programowania :: Wprowadzenie (c.d.)

II

-15

Inne paradygmaty

Programowanie na poziomie wartości

Programowanie na poziomie funkcji

Programowanie skalarne

Programowanie wektorowe/macierzowe

Programowanie zdarzeniowe

Programowanie z własnym wątkiem sterowania

Programowanie aspektowe

Programowanie uogólnione

Programowanie równoległe/współbieżne/rozproszone

background image

2009-02-26

Jarosław Bylina :: Języki i paradygmaty programowania :: Wprowadzenie (c.d.)

II

-16

Języki a paradygmaty

asemblery, „stary” BASIC

p. imperatywne (proceduralne?)

„stary” Pascal, C, Fortran

p. imperatywne, proceduralne, strukturalne

C++, Object Pascal, Ada 

p. imperatywne, proceduralne, strukturalne, obiektowe

Smalltalk, C#, Java

p. obiektowe

Lisp, Scheme, Logo, ML, Haskell

p. funkcyjne

Planner, Prolog

p. logiczne

Python

p. proceduralne, strukturalne, obiektowe, funkcyjne

SQL

p. deklaratywne (ani ściśle funkcyjne, ani ściśle logiczne)

background image

2008-03-01

Jarosław Bylina :: Języki i paradygmaty programowania :: Zmienne i typy

II

-17

Opisy języków programowania

składnia (syntaksa, gramatyka, forma)

semantyka (znaczenie, treść)

background image

2008-03-01

Jarosław Bylina :: Języki i paradygmaty programowania :: Zmienne i typy

II

-18

Składnia

Przyjmujemy, że mamy ustalony alfabet Σ
– 

skończony i niepusty zbiór

Jego elementy nazywamy symbolami, znakami 
lub literami

Zbiór wszystkich napisów, jakie można 
utworzyć ze znaków alfabetu Σ, oznaczamy Σ*

Każdy podzbiór zbioru Σ* to pewien język

Innymi słowy: język to zbiór napisów 

złożonych ze znaków danego alfabetu

background image

2008-03-01

Jarosław Bylina :: Języki i paradygmaty programowania :: Zmienne i typy

II

-19

Gramatyki

gramatyki regularne

do opisu leksemów czyli podstawowych 
(atomowych) elementów języka, takich jak słowa, 
liczby, identyfikatory...

wyrażenia regularne

gramatyki bezkontekstowe

do opisu składni, czyli wyglądu całych programów, 
wyrażeń, instrukcji...

notacja BNF, EBNF

background image

2008-03-01

Jarosław Bylina :: Języki i paradygmaty programowania :: Zmienne i typy

II

-20

Semantyka

opis formalny

gramatyki atrybutowane

semantyka operacyjna

semantyka aksjomatyczna

semantyka denotacyjna

opis potoczny (naiwny, po ludzku)

background image

2008-03-01

Jarosław Bylina :: Języki i paradygmaty programowania :: Zmienne i typy

II

-21

Notacja Backusa­Naura – (E)BNF

sposób zapisu gramatyk bezkontekstowych

definicja języka to zbiór reguł

ogólna postać reguły:

pojęcie ::= definicja-pojęcia

pojęcie to pojedynczy symbol nieterminalny 
(pomocniczy)

definicja-pojęcia to ciąg symboli 
terminalnych ujętych w cudzysłowy (to jest 
należących do alfabetu języka) oraz 
nieterminalnych

background image

2008-03-01

Jarosław Bylina :: Języki i paradygmaty programowania :: Zmienne i typy

II

-22

Rozszerzenia w EBNF

alternatywne warianty:

pojęcie ::= wariant1 | wariant2 | wariant3

opcjonalne części:

pojęcie ::= część-konieczna [ część-opcjonalna ]

wielokrotne powtórzenie:

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

grupowanie:

pojęcie ::= ( coś | coś-innego ) coś-jeszcze-innego

background image

2008-03-01

Jarosław Bylina :: Języki i paradygmaty programowania :: Zmienne i typy

II

-23

Przykłady w EBNF

lista-identyfikatorów ::=

identyfikator  {  ","  identyfikator  }

pętla-dopóki ::=

"while" wyrażenie "do" instrukcja

podstawienie ::=

l-wartość ":=" wyrażenie

pętla-dopóki ::=

"while" "(" wyrażenie ")" instrukcja

Pascal

język C

background image

2008-03-01

Jarosław Bylina :: Języki i paradygmaty programowania :: Zmienne i typy

II

-24

Architektura von Neumanna

Na razie wszystkie komputery działają
w oparciu o imperatywną
architekturę von Neumanna

Tak więc każdy program, który chcemy 
uruchomić, musi być najpierw przetłumaczony 
do ciągu rozkazów w języku wewnętrznym 
konkretnej maszyny

Różne paradygmaty mogą wymagać 
skomplikowanych metod tłumaczenia

;

różna jest też ich efektywność