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