Jezyki i paradygmaty programowania

Transkrypt

Jezyki i paradygmaty programowania
Start
Jezyki
˛
programowania
Określenie jezyka
˛
programowania
Paradygmaty programowania
Jezyki
˛
i paradygmaty programowania
Tadeusz Chmaj
Instytut Teleinformatyki
ITI PK Kraków
marzec 2012
Tadeusz Chmaj
Wykład I
Start
Jezyki
˛
programowania
Określenie jezyka
˛
programowania
Paradygmaty programowania
Sprawy Organizacyjne
Dane kontaktowe: Tadeusz Chmaj
e-mail: [email protected]
konsultacje: wtorki – 14:45 – 15:45
budynek „Houston”, p.102, Instytut Teleinformatyki
Organizacja kursu:
dwusemestralny kurs, wykład+lab.
semestr I - zaliczenie na podst. oceny z laboratorium
semestr II - zaliczenie + egzamin pisemny
możliwość zwolnienia z egzaminu dla osób, które uzyskaja˛
zaliczenie na:
conajmniej 4.5 w tym semestrze
5.0 w nastepnym
˛
semestrze
obecność na wykładach - zalecana
Tadeusz Chmaj
Wykład I
Start
Jezyki
˛
programowania
Określenie jezyka
˛
programowania
Paradygmaty programowania
Zakres wykładu - I semestr
Plan wykładu - I semestr
przeglad
˛ jezyków
˛
i paradygmatów programowania
jezyk
˛
C - przykład jezyka
˛
imperatywnego – dokładne
omówienie
elementy C++ - rozszerzenia C, podstawy podejścia
obiektowego
Literatura zalecana - I semestr
B. Kernighan, D. Ritchie, Jezyk
˛
ANSI C
J.Grebosz,
˛
Symfonia C++
S. Prata, Szkoła programowania, jezyk
˛
C++
Tadeusz Chmaj
Wykład I
Start
Jezyki
˛
programowania
Określenie jezyka
˛
programowania
Paradygmaty programowania
Spis rzeczy
1
Start
2
Jezyki
˛
programowania
Definicja, historia
Komputery programowalne
Jezyki
˛
niskiego i wysokiego poziomu
3
Określenie jezyka
˛
programowania
Jak określamy jezyk?
˛
Składnia
Popularność jezyków
˛
programowania
4
Paradygmaty programowania
Co to jest paradygmat programowania
Główne paradygmaty programowania
Tadeusz Chmaj
Wykład I
Start
Jezyki
˛
programowania
Określenie jezyka
˛
programowania
Paradygmaty programowania
Definicja, historia
Komputery programowalne
Jezyki
˛
niskiego i wysokiego poziomu
Co to jest jezyk
˛
programowania?
jezyk
˛
programowania – sztuczny jezyk,
˛
zaprojektowany
tak, by sterować maszyna,
˛ w szczególności komputerem
pierwsze takie jezyki
˛
- wcześniejsze niż komputery –
sterowanie krosien Jacquarda lub pianoli;
rok 1833 - Charles Babbage - projekt maszyny
analitycznej, wykorzystanie rozwiazania
˛
Jackarda
Ada Lovelace - pierwsze programy na maszyne˛ Babbige’a
pierwsze elektroniczne maszyny obliczeniowe (MARK I,
ENIAC) - nie były w pełni programowalne; algorytm
realizowany przez odpowiednia˛ konfiguracje˛ sprz˛etowa˛
(system połacze
˛ ń)
rok 1945 - John von Neumann, First Draft, raport IAS,
propozycja nowej architektury komputera
Tadeusz Chmaj
Wykład I
Start
Jezyki
˛
programowania
Określenie jezyka
˛
programowania
Paradygmaty programowania
Definicja, historia
Komputery programowalne
Jezyki
˛
niskiego i wysokiego poziomu
Architektura von Neumanna
cel: programowalna maszyna uniwersalna
cz˛eści składowe maszyny:
jednostka centralna, procesor (CPU),
pamieć,
˛
urzadzenia
˛
wejścia i wyjścia (input/output)
systemu połacze
˛ ń wyżej wymienionych podukładów
(magistrala)
Tadeusz Chmaj
Wykład I
Start
Jezyki
˛
programowania
Określenie jezyka
˛
programowania
Paradygmaty programowania
Definicja, historia
Komputery programowalne
Jezyki
˛
niskiego i wysokiego poziomu
Zasada działania
procesor wyposażony w zdolność wykonywania pewnej
ilości elementarnych rozkazów
organizacja procesora:
sterowanie wykonanie rozkazów – jednostka sterujaca
˛
(control unit)
operacje arytmetyczno-logiczne: jednostka
artytmmetyczno-logiczna (ALU)
podukład pamieci
˛ przechowujacej
˛ dane dla ALU oraz
wyniki obliczeń: rejestry
główna cecha modelu von Neumanna – pomysł programu:
program - ciag
˛ rozkazów opisujacych
˛
kroki jakie trzeba
wykonać
kluczowy punkt
program wraz z danymi przechowywany w pamieci
˛
wykonywany sekwencyjnie rozkaz po rozkazie
może modyfikować pamieć
˛
Tadeusz Chmaj
Wykład I
Start
Jezyki
˛
programowania
Określenie jezyka
˛
programowania
Paradygmaty programowania
Definicja, historia
Komputery programowalne
Jezyki
˛
niskiego i wysokiego poziomu
Wykonanie progamu
Model pamieci
˛
pamieć
˛ – ciag
˛ ponumerowanych komórek, z których każda
może przechować dane lub rozkazy
numer komórki(adres) - jednoznacznie ja˛ określa
prosty program - komórki 0, 1, 2, 3 - rozkazy; 4, 5. 6 - dane
Tadeusz Chmaj
Wykład I
Start
Jezyki
˛
programowania
Określenie jezyka
˛
programowania
Paradygmaty programowania
Definicja, historia
Komputery programowalne
Jezyki
˛
niskiego i wysokiego poziomu
Jezyki
˛
niskiego poziomu
move czy add – mnemoniki rozkazów maszynowych
(rozumianych i wykonywanych bezpośrednio przez
procesor)
programowanie w takim stylu - wymaga znajomości
architektury maszyny (listy rozkazów, rodzaju i
przeznaczenia rejestrów, rozkładu pamieci,
˛ sposóbu jej
adresowania
taki rodzaj programowania – programowanie w jezyku
˛
niskiego poziomu (w asemblerze)
asembler - silnie powiazany
˛
ze sprz˛etem
Tadeusz Chmaj
Wykład I
Start
Jezyki
˛
programowania
Określenie jezyka
˛
programowania
Paradygmaty programowania
Definicja, historia
Komputery programowalne
Jezyki
˛
niskiego i wysokiego poziomu
Jezyki
˛
wysokiego poziomu
zwykle – używamy jezyka
˛
wysokiego poziomu (Fortran,
Basic, Pascal, C); główne powody:
prosty i łatwo interpretowany przez człowieka kod, np.:
suma := a+b
nie odnosi sie˛ bezpośrednio do sprz˛etu (a raczej do
pewnych abstrakcji z niego wywiedzionych)
pozwala skupić sie˛ na rozwiazaniu
˛
problemu a nie na
dopasowywaniu do wymagań sprz˛etu
problem – taki kod nie jest rozumiany przez procesor
dla jezyków
˛
wysokiego poziomu – przed wykonaniem
konieczność przekształcenia (translacji) kodu na ciag
˛
rozkazów maszynowych
możliwe sposoby transkacji: kompilacja lub interpretacja
translator - zależny od sprz˛etu - jego wykonanie to cz˛eść
implementacji jezyka
˛
Tadeusz Chmaj
Wykład I
Start
Jezyki
˛
programowania
Określenie jezyka
˛
programowania
Paradygmaty programowania
Jak określamy jezyk?
˛
Składnia
Popularność jezyków
˛
programowania
Jezyk
˛
programowania - definicja formalna
w teorii jezyków
˛
formalnych: A- alfabet (niepusty zbiór
dopuszczalnych symboli)
A∗ zbiór wszystkich możliwych napisów jaki można
utworzyć z symboli wzietych
˛
zA
jezyk
˛
L - dowolny podzbiór zbioru wszystkich napisów A∗ ,
L ⊂ A∗ ;
wiekszość
˛
tak określonych jezyków
˛
na ogół jest zupełnie
nieinteresujaca
˛
potrzeba bardziej konstruktywnego podejścia
odbywa sie˛ to poprzez określenie składni i semantyki
jezyka
˛
Tadeusz Chmaj
Wykład I
Start
Jezyki
˛
programowania
Określenie jezyka
˛
programowania
Paradygmaty programowania
Jak określamy jezyk?
˛
Składnia
Popularność jezyków
˛
programowania
Opis jezyka
˛
składnia (syntax) – zbiór reguł określajacych
˛
kombinacje
symboli uważanych za poprawne w danym jezyku
˛
(“jaka
jest dozwolona form”),czyli określajacych:
˛
jak zapisujemy deklaracje
jak tworzymy polecenia
jak wygladaj
˛ a˛ struktury sterujace
˛ (np. instrukcje
warunkowe, petle)
˛
itp.
semantyka – określa znaczenie tych dopuszczalnych
przez składnie˛ form (“co one robia”)
˛
Przykład: określenie prostej instrukcji warunkowej w C
składnia: if “(” wyrażenie “)” instrukcja
semantyka: oblicz wyrażenie i jeżeli reprezentuje prawde,
˛
wykonaj instrukcje˛
Tadeusz Chmaj
Wykład I
Start
Jezyki
˛
programowania
Określenie jezyka
˛
programowania
Paradygmaty programowania
Jak określamy jezyk?
˛
Składnia
Popularność jezyków
˛
programowania
Opis składni
możliwy ścisły, formalny opis składni
etap pierwszy - ustalenie zbioru dostepnych
˛
symboli
etap drugi - okreslenie zbioru poprawnych leksemów
(leksem - najmniejsza cz˛eść jezyka programowania, która
logicznie nie moze byc podzielona na mniejsze kawałki np. identyfikatory, słowa kluczowe, operatory)
etap trzeci - określenie reguł tworzenia poprawnych
składniowo składowych jezyka
˛
(deklaracji, wyrażeń,
instrukcji, programów)
do opisu składni jezyków
˛
programowania cz˛esto używa sie˛
notacji BNF (Backus-Naur Form)
składnia - zbiór reguł postaci:
<symbol> ::= <definicja symbolu>
symbole, które moga˛ być po lewej - symbole nieterminalne
symbole tylko po prawej - symbole terminalne
Tadeusz Chmaj
Wykład I
Start
Jezyki
˛
programowania
Określenie jezyka
˛
programowania
Paradygmaty programowania
Jak określamy jezyk?
˛
Składnia
Popularność jezyków
˛
programowania
Notacja BNF
Dodatkowe symbole i konwencje, upraszczajace
˛ zapis:
Tadeusz Chmaj
Wykład I
Start
Jezyki
˛
programowania
Określenie jezyka
˛
programowania
Paradygmaty programowania
Jak określamy jezyk?
˛
Składnia
Popularność jezyków
˛
programowania
Notacja BNF - przykład
Tadeusz Chmaj
Wykład I
Start
Jezyki
˛
programowania
Określenie jezyka
˛
programowania
Paradygmaty programowania
Jak określamy jezyk?
˛
Składnia
Popularność jezyków
˛
programowania
Jak mierzyć popularność jezyka?
˛
Istnieja˛ setki jezyków
˛
programowania
Których warto sie˛ uczyć?
Jedna z przesłanek - popularność jezyka
˛
Stosowane kryteria pomiaru popularności:
Analiza ofert pracy dla programistów
Ilość ksiażek
˛
wydawanych dotyczacych
˛
danego jezyka
˛
Oszacowanie ilości linii kodu napisanego w danym jezyku
˛
Zliczanie odwołań do nazwy jezyka
˛
znalezionych przez
przegladarki
˛
Trudności w realizacji takich pomiarów:
niejednoznaczność kryteriów
efekty historyczne - legacy software - Gartner Group data
w 1997 80 % światowego bussinesu używało
oprogramowania w COBOLU;
szacowany rozmiar tego oprogramowania 200 mld linii
Tadeusz Chmaj
Wykład I
Start
Jezyki
˛
programowania
Określenie jezyka
˛
programowania
Paradygmaty programowania
Jak określamy jezyk?
˛
Składnia
Popularność jezyków
˛
programowania
Wyniki pomiarów - TIOBE index
Tadeusz Chmaj
Wykład I
Start
Jezyki
˛
programowania
Określenie jezyka
˛
programowania
Paradygmaty programowania
Jak określamy jezyk?
˛
Składnia
Popularność jezyków
˛
programowania
Wyniki pomiarów - SourceForge index
Wnioski - każdy wyciaga
˛ sam ...
Tadeusz Chmaj
Wykład I
Start
Jezyki
˛
programowania
Określenie jezyka
˛
programowania
Paradygmaty programowania
Co to jest paradygmat programowania
Główne paradygmaty programowania
Paradygmat - co to takiego?
paradygmat - modne słowo pochodzenia greckiego
(πα%εδειγµα);
podstawowe znaczenie: wzorzec, przykład na coś;
znaczenie szersze: ogólny sposób działania, rozumowania,
pojmowania rzeczy w danej dziedzinie
paradygmat programowania: zestaw typowych dla danej
grupy jezyków
˛
mechanizmów udostepnionych
˛
programiście oraz zbiór sposobów interpretacji tych
mechanizmów przez semantyk˛e jezyka
˛
paradygmat programowania - ogół oczekiwańprogramisty
wobec jezyka
˛
programowania i komputera, na którym
bedzie
˛
działał program
sposób postrzegania rzeczywistości (tak maszyny i jej
działania, jak też świata zewnetrznego)
˛
określony przez
dany jezyk
˛
programowania
Tadeusz Chmaj
Wykład I
Start
Jezyki
˛
programowania
Określenie jezyka
˛
programowania
Paradygmaty programowania
Co to jest paradygmat programowania
Główne paradygmaty programowania
Z punktu widzenia maszyny
mamy stan maszyny określony przez zawartość pamieci
˛ i
stan procesora (rejestry, liczniki rozkazów)
program - zapisany w pamieci
˛ wraz z danymi ciag
˛
rozkazów
maszyna wykonuje kolejne rozkazy, stan maszyny ulega
zmianom
koniec, gdy stan maszyny osiaga
˛ zakładana˛ postać
takie podejście do programowania - paradygmat
imperatywny - naturalny sposób podejścia dla jezyków
˛
niskiego poziomu
Tadeusz Chmaj
Wykład I
Start
Jezyki
˛
programowania
Określenie jezyka
˛
programowania
Paradygmaty programowania
Co to jest paradygmat programowania
Główne paradygmaty programowania
Z punktu widzenia człowieka - programisty
dla człowieka wygodniejsze inne podejście:
nie wdajemy sie˛ w szczegóły wykonania
podajemy, co chcemy osiagn
˛ ać
˛
nie określamy dokładnie jak
takie podejście - paradygmat deklaratywny
paradygmaty imperatywny vs. deklaratywny – główna oś
podział w podejściu do programowania
rózne jezyki
˛
programowania pozwalaja˛ na realizacje˛
różnych rozwiaza
˛ ń pośrednich
Tadeusz Chmaj
Wykład I
Start
Jezyki
˛
programowania
Określenie jezyka
˛
programowania
Paradygmaty programowania
Co to jest paradygmat programowania
Główne paradygmaty programowania
Paradygmat imperatywny
pierwotne podejście do programowania realizowany w
sposób czysty przez jezyki
˛
niskiego poziomu
jezyki
˛
wysokiego poziomu (Fortran, Pascal, C) - używaja˛
pewnych abstrakcji ale ciagle
˛
odpowiadaja˛ paradygmatowi
imperatywnemu
przykład programu:
program pierwszy;
var i, n, s: integer;
begin
read(n);
s := 1;
for i := 2 to n do
s := s * i;
write(s)
end.
Tadeusz Chmaj
Wykład I
Start
Jezyki
˛
programowania
Określenie jezyka
˛
programowania
Paradygmaty programowania
Co to jest paradygmat programowania
Główne paradygmaty programowania
Paradygmat imperatywny - warianty
paradygmat programowania strukturalnego
- zaleca hierarchiczne dzielenie kodu na bloki strukturalne,
z jednym punktem wejścia i jednym lub wieloma punktami
wyjścia
nieużywanie (lub ograniczenie) instrukcji skoku (goto)
właściwe
˛
struktury: instrukcja warunkowe (if, if...else), petle
˛
(while, repeat), instrukcje wyboru (if...else if ...else)
paradygmat programowania proceduralnegp
dzielimy program na oddzielne elementy kodu - procedury
(podprogramy, funkcje)
moga˛ one być wielokrotnie wywoływane z różnymi
parammetrami
możliwe wywołania rekursywne
Tadeusz Chmaj
Wykład I
Start
Jezyki
˛
programowania
Określenie jezyka
˛
programowania
Paradygmaty programowania
Co to jest paradygmat programowania
Główne paradygmaty programowania
Paradygmat objektowy
program - zbiór porozumiewajacych
˛
sie˛ obiektów
obiekty - kontenery zawierajace
˛ dane oraz funkcje
(metody) do ich przekształcania
kluczowe cechy tego podejścia:
enkapsulacja - selektywne udostepnienie
˛
elementów
składowych obiektów światu zewnetrznemu
˛
dziedziczenie - możliwosć tworzenia obiektów bardziej
skomplikowane na bazie prostszych oraz tworzenia
hierarchii powiazanych
˛
klas
polimorfizm - umożliwia wybór sposobu działania od
aktualnego typu obiektu
public class Hello {
public static void main(String[] args) {
System.out.println("Hello, I am James B.");
}
}
Tadeusz Chmaj
Wykład I
Start
Jezyki
˛
programowania
Określenie jezyka
˛
programowania
Paradygmaty programowania
Co to jest paradygmat programowania
Główne paradygmaty programowania
Paradygmat programowania funkcyjnego
rodzaj programowania deklaratywnego
opis rzeczywistości, program - funkcje (“wszystko jest
funkcja”)
˛
brak zmiennych (nie ma efektów ubocznych), tradycyjnie
rozumianych petli
˛
program powstaje jako złożenie funkcji, ważna rola rekursji
tworzenie funkcji wyższego rz˛edu (których argumentami i
wynikiem moga˛ być inne funkcje
(DEFINE (suma m n)
(IF (> m n)
0
(+ m (suma (+ m 1) n))
)
)
Tadeusz Chmaj
Wykład I
Start
Jezyki
˛
programowania
Określenie jezyka
˛
programowania
Paradygmaty programowania
Co to jest paradygmat programowania
Główne paradygmaty programowania
Paradygmat programowania w logice
rodzaj programowania deklaratywnego – nie “wydajemy
rozkazów”, tylko opisujemy, co wiemy i co chcemy uzyskać
program = zbiór zależności (przesłanki) i pewne
stwierdzenie (cel)
wykonanie programu – próba udowodnienia celu w oparciu
o podane przesłanki
obliczenia – efekt uboczny dowodu
ojciec(jan, jerzy).
ojciec(jerzy, janusz).
ojciec(jerzy, józef).
dziadek(X, Z) :- ojciec(X, Y), ojciec(Y, Z).
?- dziadek(X, janusz).
Tadeusz Chmaj
Wykład I
Start
Jezyki
˛
programowania
Określenie jezyka
˛
programowania
Paradygmaty programowania
Co to jest paradygmat programowania
Główne paradygmaty programowania
Jezyki
˛
– paradygmaty
Popularne jezyki
˛
i realizowane przez nie paradygmaty:
Tadeusz Chmaj
Wykład I