wykład 13 paradygmaty. składnia i...

38
Wstęp do Programowania Obiektowego Wykład 13 Paradygmaty. Składnia i semantyka. 1

Upload: others

Post on 12-Jun-2020

0 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Wykład 13 Paradygmaty. Składnia i semantyka.ii.uwb.edu.pl/~m.rybnik/wp-content/uploads/WdPO-W... · Składnia Składnia to zbiór reguł, mówiących jak wygląda poprawny program

Wstęp do Programowania Obiektowego Wykład 13 Paradygmaty. Składnia i semantyka.

1

Page 2: Wykład 13 Paradygmaty. Składnia i semantyka.ii.uwb.edu.pl/~m.rybnik/wp-content/uploads/WdPO-W... · Składnia Składnia to zbiór reguł, mówiących jak wygląda poprawny program

PRZEGLĄD PODSTAWOWYCH PARADYGMATÓW

2

Page 3: Wykład 13 Paradygmaty. Składnia i semantyka.ii.uwb.edu.pl/~m.rybnik/wp-content/uploads/WdPO-W... · Składnia Składnia to zbiór reguł, mówiących jak wygląda poprawny program

Cztery podstawowe paradygmaty 1. Programowanie imperatywne. 2. Programowanie funkcyjne. 3. Programowanie logiczne. 4. Programowanie obiektowe.

3

Page 4: Wykład 13 Paradygmaty. Składnia i semantyka.ii.uwb.edu.pl/~m.rybnik/wp-content/uploads/WdPO-W... · Składnia Składnia to zbiór reguł, mówiących jak wygląda poprawny program

Ad. 1. Programowanie imperatywne Obliczenia rozumiemy tu jako

sekwencję poleceń zmieniających krok po kroku stan maszyny, aż do uzyskania oczekiwanego wyniku.

Stan maszyny należy z kolei rozumieć jako zawartość całej pamięci oraz rejestrów i znaczników procesora.

Jest to ściśle związane z budową sprzętu komputerowego o architekturze von Neumanna.

4

Page 5: Wykład 13 Paradygmaty. Składnia i semantyka.ii.uwb.edu.pl/~m.rybnik/wp-content/uploads/WdPO-W... · Składnia Składnia to zbiór reguł, mówiących jak wygląda poprawny program

Architektura von Neumanna

5

Podział komputera na trzy podstawowe części: procesor (ALU oraz CU) pamięć komputera (Memory) urządzenia wejścia/wyjścia

(IN/OUT)

Page 6: Wykład 13 Paradygmaty. Składnia i semantyka.ii.uwb.edu.pl/~m.rybnik/wp-content/uploads/WdPO-W... · Składnia Składnia to zbiór reguł, mówiących jak wygląda poprawny program

Języki wysokiego poziomu — takie jak Fortran, Algol, Pascal, Ada lub C — posługują się pewnymi abstrakcjami, ale wciąż odpowiadają paradygmatowi programowania imperatywnego.

Np. instrukcja podstawienia działa na

danych pobranych z pamięci i umieszcza wynik w tejże pamięci, zaś abstrakcją komórek pamięci są zmienne.

6

Page 7: Wykład 13 Paradygmaty. Składnia i semantyka.ii.uwb.edu.pl/~m.rybnik/wp-content/uploads/WdPO-W... · Składnia Składnia to zbiór reguł, mówiących jak wygląda poprawny program

Przykładowy program imperatywny (w języku Pascal) program pierwszy;

var i, n, s: integer;

begin

read(n);

s := 1;

for i := 2 to n do

s := s * i;

write(s);

end.

7

Page 8: Wykład 13 Paradygmaty. Składnia i semantyka.ii.uwb.edu.pl/~m.rybnik/wp-content/uploads/WdPO-W... · Składnia Składnia to zbiór reguł, mówiących jak wygląda poprawny program

Ad. 2. Programowanie obiektowe Program obiektowy to zbiór

porozumiewających się ze sobą obiektów, czyli jednostek zawierających pewne dane i umiejących wykonywać na nich pewne operacje.

Ważną cechą jest powiązanie danych

(czyli stanu) z operacjami na nich (czyli poleceniami) w całość, stanowiącą odrębną jednostkę — obiekt.

8

Page 9: Wykład 13 Paradygmaty. Składnia i semantyka.ii.uwb.edu.pl/~m.rybnik/wp-content/uploads/WdPO-W... · Składnia Składnia to zbiór reguł, mówiących jak wygląda poprawny program

W programowaniu obiektowym wprowadzono szereg mechanizmów ułatwiających programowanie, m.in. dziedziczenie (możliwość definiowania nowych, bardziej złożonych obiektów, na bazie obiektów już istniejących).

9

Page 10: Wykład 13 Paradygmaty. Składnia i semantyka.ii.uwb.edu.pl/~m.rybnik/wp-content/uploads/WdPO-W... · Składnia Składnia to zbiór reguł, mówiących jak wygląda poprawny program

paradygmat obiektowy dobrzeodzwierciedla ludzkie (przedmiotowe)postrzeganie rzeczywistości.

programowanie obiektowe zdobyłoogromną popularność i wypada je uznaćza paradygmat obecnie dominujący.

10

Page 11: Wykład 13 Paradygmaty. Składnia i semantyka.ii.uwb.edu.pl/~m.rybnik/wp-content/uploads/WdPO-W... · Składnia Składnia to zbiór reguł, mówiących jak wygląda poprawny program

Przykładowy program obiektowy (w języku Java) public class Hello {

public static void main(String[] args) {

System.out.println("Hello world!");

}

}

11

Page 12: Wykład 13 Paradygmaty. Składnia i semantyka.ii.uwb.edu.pl/~m.rybnik/wp-content/uploads/WdPO-W... · Składnia Składnia to zbiór reguł, mówiących jak wygląda poprawny program

Ad. 3. Programowanie funkcyjne

Program funkcyjny to po prostu złożona funkcja (w sensie matematycznym), która otrzymawszy dane wejściowe wylicza pewien wynik.

12

Page 13: Wykład 13 Paradygmaty. Składnia i semantyka.ii.uwb.edu.pl/~m.rybnik/wp-content/uploads/WdPO-W... · Składnia Składnia to zbiór reguł, mówiących jak wygląda poprawny program

Cechy programowania funkcyjnego Brak stanu maszyny; Nie ma (tradycyjnie rozumianych) pętli; Konstruowanie programów to składanie funkcji,

zazwyczaj z wykorzystaniem rekurencji. Charakterystyczne jest definiowanie funkcji

wyższego rzędu, czyli takich, dla którychargumentami i których wynikami mogą być funkcje(a nie tylko „proste” dane jak liczby lub napisy).

13

Page 14: Wykład 13 Paradygmaty. Składnia i semantyka.ii.uwb.edu.pl/~m.rybnik/wp-content/uploads/WdPO-W... · Składnia Składnia to zbiór reguł, mówiących jak wygląda poprawny program

Przykładowy program funkcyjny (w języku LISP)

(DEFINE (suma m n)

(IF (> m n)

0

(+ m (suma (+ m 1) n))

)

)

14

Page 15: Wykład 13 Paradygmaty. Składnia i semantyka.ii.uwb.edu.pl/~m.rybnik/wp-content/uploads/WdPO-W... · Składnia Składnia to zbiór reguł, mówiących jak wygląda poprawny program

Ad. 4. Programowanie w logice (programowanie logiczne)

Na program składa się zbiór zależności (przesłanki) i pewne stwierdzenie (cel)

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

Obliczenia wykonywane są niejako „przy okazji” dowodzenia celu.

Opisujemy jedynie, co wiemy i co chcemy uzyskać.

15

Page 16: Wykład 13 Paradygmaty. Składnia i semantyka.ii.uwb.edu.pl/~m.rybnik/wp-content/uploads/WdPO-W... · Składnia Składnia to zbiór reguł, mówiących jak wygląda poprawny program

Przykładowy program logiczny (w języku Prolog)

ojciec(jan, jerzy).

ojciec(jerzy, janusz).

ojciec(jerzy, józef).

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

?- dziadek(X, janusz).

16

Page 17: Wykład 13 Paradygmaty. Składnia i semantyka.ii.uwb.edu.pl/~m.rybnik/wp-content/uploads/WdPO-W... · Składnia Składnia to zbiór reguł, mówiących jak wygląda poprawny program

OGÓLNE WŁASNOŚCI PARADYGMATÓW

17

Page 18: Wykład 13 Paradygmaty. Składnia i semantyka.ii.uwb.edu.pl/~m.rybnik/wp-content/uploads/WdPO-W... · Składnia Składnia to zbiór reguł, mówiących jak wygląda poprawny program

Istnieje wiele innych paradygmatów, niektóre się przenikają Często paradygmaty obejmują tylko

niektóre aspekty programowania, Programowanie skalarne i macierzowe -

rozróżnienie między nimi odnosi się dotego, czy działamy na pojedynczychwartościach, czy na całych tablicach(macierzach).

Programowanie proceduralne iprogramowanie strukturalne możnatraktować jako odmianę programowaniaimperatywnego.

18

Page 19: Wykład 13 Paradygmaty. Składnia i semantyka.ii.uwb.edu.pl/~m.rybnik/wp-content/uploads/WdPO-W... · Składnia Składnia to zbiór reguł, mówiących jak wygląda poprawny program

Istnieją paradygmaty przeciwstawne

19

programowanie sterowane zdarzeniami to przeciwieństwo klasycznego programowania z własnym wątkiem sterowania

…co nie oznacza, że nie można łączyć tych dwóch paradygmatów w jednym programie; tak jest np. w typowych aplikacjach bazodanowych.

Page 20: Wykład 13 Paradygmaty. Składnia i semantyka.ii.uwb.edu.pl/~m.rybnik/wp-content/uploads/WdPO-W... · Składnia Składnia to zbiór reguł, mówiących jak wygląda poprawny program

Konkretne język programowania mogą ucieleśniać jeden lub więcej paradygmatów. Fortran, Pascal i C to języki imperatywne. Java i C# to języki typowo obiektowe, w których

programowanie imperatywne zostało mocnoograniczone.

Natomiast C++ jest językiem zarównoobiektowym, jak i imperatywnym.

Można też uznać, że programowanieimperatywne to szczególny przypadekprogramowania obiektowego, gdzie wszystkorozgrywa się wewnątrz jednego „superobiektu”.

20

Page 21: Wykład 13 Paradygmaty. Składnia i semantyka.ii.uwb.edu.pl/~m.rybnik/wp-content/uploads/WdPO-W... · Składnia Składnia to zbiór reguł, mówiących jak wygląda poprawny program

Architektura współczesnych komputerów Przytłaczająca większość komputerów działa

w oparciu o imperatywną architekturę von Neumanna.

Każdy program, który chcemy uruchomić, musi być zatem najpierw przetłumaczony do postaci imperatywnej, czyli do ciągu rozkazów w języku wewnętrznym konkretnej maszyny.

Mechanizmy z różnych paradygmatów wymagają niekiedy skomplikowanych metod, by odwzorować je w formie rozkazów zwykłego komputera; bardzo różna jest też ich efektywność.

21

Page 22: Wykład 13 Paradygmaty. Składnia i semantyka.ii.uwb.edu.pl/~m.rybnik/wp-content/uploads/WdPO-W... · Składnia Składnia to zbiór reguł, mówiących jak wygląda poprawny program

SKŁADNIA I

SEMANTYKA

22

Page 23: Wykład 13 Paradygmaty. Składnia i semantyka.ii.uwb.edu.pl/~m.rybnik/wp-content/uploads/WdPO-W... · Składnia Składnia to zbiór reguł, mówiących jak wygląda poprawny program

Składnia Składnia to 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 (if, while, for itp.). Jak zapisuje się deklaracje

zmiennych.23

Page 24: Wykład 13 Paradygmaty. Składnia i semantyka.ii.uwb.edu.pl/~m.rybnik/wp-content/uploads/WdPO-W... · Składnia Składnia to zbiór reguł, mówiących jak wygląda poprawny program

Semantyka Semantyka to znaczenie

wspomnianych wyżej form, czyli w jakisposób działają konkretne zapisy.

24

Page 25: Wykład 13 Paradygmaty. Składnia i semantyka.ii.uwb.edu.pl/~m.rybnik/wp-content/uploads/WdPO-W... · Składnia Składnia to zbiór reguł, mówiących jak wygląda poprawny program

Przykład składni i semantyki Typowa instrukcja warunkowa if w

języku C\C++. Składnia: if "(" <wyrażenie> ")" <instrukcja> Semantyka jest następująca: „sprawdź

wartość logiczną podanego wyrażenia i jeśli jest prawdziwe, to wykonaj podaną instrukcję, jeżeli nie to przejdź do kolejnej instrukcji.”

25

Page 26: Wykład 13 Paradygmaty. Składnia i semantyka.ii.uwb.edu.pl/~m.rybnik/wp-content/uploads/WdPO-W... · Składnia Składnia to zbiór reguł, mówiących jak wygląda poprawny program

Intuicyjność semantyki Najlepiej byłoby, gdyby semantykę

dało się łatwo odgadnąć, patrząc naskładnię języka.

Dla prostych konstrukcji tak zazwyczajbywa; bardziej skomplikowane tworysą niestety mniej oczywiste.

Stąd potrzebne są ścisłe metodyopisu i składni, i semantyki.

26

Page 27: Wykład 13 Paradygmaty. Składnia i semantyka.ii.uwb.edu.pl/~m.rybnik/wp-content/uploads/WdPO-W... · Składnia Składnia to zbiór reguł, mówiących jak wygląda poprawny program

Jak opisać składnię i semantykę? Składnię języków będziemy opisywali

za pomocą notacji BNF, odpowiadającej gramatykom bezkontekstowym.

Semantykę rozmaitych konstrukcji będziemy na ogół opisywali w języku naturalnym.

27

Page 28: Wykład 13 Paradygmaty. Składnia i semantyka.ii.uwb.edu.pl/~m.rybnik/wp-content/uploads/WdPO-W... · Składnia Składnia to zbiór reguł, mówiących jak wygląda poprawny program

Notacja BNF (Backus Naur Form) Definicja języka w notacji BNF to zbiór reguł. Poszczególne reguły mają postać:

<symbol> ::= <definicja symbolu> Sens takiej reguły jest następujący: symbol

występujący po lewej stronie znaku ::= można zastąpić tym, co pojawia się po prawej stronie.

Symbole pojawiające się po lewej stronie reguł zwane są symbolami nieterminalnymi.

Symbole pojawiające się wyłącznie po prawej stronie to symbole terminalne.

Generalnie symbole terminalne to symbole z alfabetu definiowanego języka, a zatem „docelowe”; symbole nieterminalne spełniają natomiast rolę pomocniczą przy jego definiowaniu.

28

Page 29: Wykład 13 Paradygmaty. Składnia i semantyka.ii.uwb.edu.pl/~m.rybnik/wp-content/uploads/WdPO-W... · Składnia Składnia to zbiór reguł, mówiących jak wygląda poprawny program

Dodatkowe symbole i konwencje (1/2) Pionowa kreska | oznacza alternatywne warianty

reguły, np. <typ> ::= char | int | float | double

Nawiasy kwadratowe [...] oznaczają opcjonalnączęść reguły, np.

instr_warunk ::= if wyr_logiczne then instr [ else instr ]

Nawiasy klamrowe {...} oznaczają fragment, którymoże być powtórzony dowolnie wiele razy (równieżzero razy, czyli całkowicie pominięty), np. <lista_arg> ::= <arg> { "," <arg> }

29

Page 30: Wykład 13 Paradygmaty. Składnia i semantyka.ii.uwb.edu.pl/~m.rybnik/wp-content/uploads/WdPO-W... · Składnia Składnia to zbiór reguł, mówiących jak wygląda poprawny program

Dodatkowe symbole i konwencje (2/2)

Zwykłych nawiasów okrągłych (...) używa się do grupowania alternatywnych fragmentów definicji, np.

<liczba_ze_znakiem> ::= ("+" | "–") <liczba_bez_znaku> Jednoznakowe symbole terminalne umieszcza się w

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

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

30

Page 31: Wykład 13 Paradygmaty. Składnia i semantyka.ii.uwb.edu.pl/~m.rybnik/wp-content/uploads/WdPO-W... · Składnia Składnia to zbiór reguł, mówiących jak wygląda poprawny program

Powtarzające się elementy Chcąc opisać powtarzające się elementy, możemy

stworzyć definicję rekurencyjną lub wykorzystać nawiasy klamrowe.

Przykład: definicja niepustej listy identyfikatorów,

rozdzielonych przecinkami. Definicja rekurencyjna: <lista_identyfikatorów> ::= <identyfikator> | <lista_identyfikatorów> "," <identyfikator>

Definicja z nawiasami klamrowymi: <lista_identyfikatorów> ::= <identyfikator> { "," <identyfikator> }

31

Page 32: Wykład 13 Paradygmaty. Składnia i semantyka.ii.uwb.edu.pl/~m.rybnik/wp-content/uploads/WdPO-W... · Składnia Składnia to zbiór reguł, mówiących jak wygląda poprawny program

Klasyczny przykład użycia notacji BNF to sam opis składni notacji BNF:

<składnia> ::= { <reguła> } <reguła> ::= <identyfikator> "::=" <wyrażenie> <wyrażenie> ::= <składnik> { "|" <składnik> } <składnik> ::= <czynnik> { <czynnik> } <czynnik> ::= <identyfikator>

| <symbol_zacytowany> | "(" <wyrażenie> ")" | "[" <wyrażenie> "]" | "{" <wyrażenie> "}"

<identyfikator> ::= <litera> { <litera> | <cyfra> } <symbol_zacytowany> ::= """ { <dowolny_znak> } """

32

Page 33: Wykład 13 Paradygmaty. Składnia i semantyka.ii.uwb.edu.pl/~m.rybnik/wp-content/uploads/WdPO-W... · Składnia Składnia to zbiór reguł, mówiących jak wygląda poprawny program

Niedodefiniowanie – symbole domyślne

Niektóre symbole, formalnie terminalne, są właściwie niedodefiniowanymi symbolami nieterminalnymi. Gwoli ścisłości powinniśmy zatem dopisać:

<litera> ::= "A" | "B" | "C" | ... <cyfra> ::= "0" | "1" | ... | "9" <dowolny_znak> ::= ...

33

Page 34: Wykład 13 Paradygmaty. Składnia i semantyka.ii.uwb.edu.pl/~m.rybnik/wp-content/uploads/WdPO-W... · Składnia Składnia to zbiór reguł, mówiących jak wygląda poprawny program

PRZETWARZANIE PROGRAMU NA KOD MASZYNY

34

Page 35: Wykład 13 Paradygmaty. Składnia i semantyka.ii.uwb.edu.pl/~m.rybnik/wp-content/uploads/WdPO-W... · Składnia Składnia to zbiór reguł, mówiących jak wygląda poprawny program

Program w dowolnym języku/paradygmacie musi zostać przetłumaczony na język wewnętrzny maszyny, na której program zamierzamy uruchomić.

Są trzy zasadnicze sposoby takiego tłumaczenia:

1. Kompilacja2. Interpretacja3. Kompilacja do kodu pośredniego

35

Page 36: Wykład 13 Paradygmaty. Składnia i semantyka.ii.uwb.edu.pl/~m.rybnik/wp-content/uploads/WdPO-W... · Składnia Składnia to zbiór reguł, mówiących jak wygląda poprawny program

Kompilacja a interpretacja Kompilacja to przetłumaczenie

całego programu „za jednymzamachem”. Otrzymujemy kodwynikowy, który (po konsolidacjizwanej też linkowaniem) wykonuje siębezpośrednio na maszynie docelowej.

Interpretacja to tłumaczenie iwykonywanie programu instrukcjapo instrukcji, za pomocą programuzwanego interpreterem.

36

Page 37: Wykład 13 Paradygmaty. Składnia i semantyka.ii.uwb.edu.pl/~m.rybnik/wp-content/uploads/WdPO-W... · Składnia Składnia to zbiór reguł, mówiących jak wygląda poprawny program

Rozwiązanie pośrednie Kompilacja do kodu pośredniego –

wstępnie skompilowany kod pośrednijest następnie interpretowany lubkompilowany ponownie „w ostatniejchwili”.

Przykład: język Java. Daje to dobry kompromis między efektywnością a przenośnością kodu na różne komputery.

37

Page 38: Wykład 13 Paradygmaty. Składnia i semantyka.ii.uwb.edu.pl/~m.rybnik/wp-content/uploads/WdPO-W... · Składnia Składnia to zbiór reguł, mówiących jak wygląda poprawny program

Wpływ nieznajomość semantyki na efektywność programu

Rozważmy pozornie identyczne pętle for w Pascalu i w C:for i := 1 to length(s) do ... for (i = 1; i <= strlen(s); ++i) ...

Na pierwszy rzut oka pętle te powinny zachowywać się taksamo.

Jest jednak istotna różnica: w Pascalu długość napisu szostanie policzona tylko raz, a w języku C będzie onaliczona przy każdym obiegu pętli.

To może prowadzić do fatalnego pogorszenia efektywnościprogramu.

Wniosek: trzeba dobrze znać semantykę językaprogramowania, by tworzyć efektywne programy.

38