Języki i paradygmaty programowania Instytut Teleinformatyki ITI PK Kraków marzec 2012
Sprawy Organizacyjne Dane kontaktowe: e-mail: tchmaj@pk.edu.pl 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 następnym semestrze obecność na wykładach - zalecana
Zakres wykładu - I semestr Plan wykładu - I semestr przeglad języków i paradygmatów programowania język C - przykład języka imperatywnego dokładne omówienie elementy C++ - rozszerzenia C, podstawy podejścia obiektowego Literatura zalecana - I semestr B. Kernighan, D. Ritchie, Język ANSI C J.Grębosz, Symfonia C++ S. Prata, Szkoła programowania, język C++
Spis rzeczy 1 Start 2 Definicja, historia Komputery programowalne Języki niskiego i wysokiego poziomu 3 Jak określamy język? Składnia Popularność języków programowania 4 Co to jest paradygmat programowania Główne paradygmaty programowania
Co to jest język programowania? Definicja, historia Komputery programowalne Języki niskiego i wysokiego poziomu język programowania sztuczny język, zaprojektowany tak, by sterować maszyna, w szczególności komputerem pierwsze takie języki - wcześniejsze niż komputery sterowanie krosien Jacquarda lub pianoli; rok 1833 - Charles Babbage - projekt maszyny analitycznej, wykorzystanie rozwiazania Jackarda Ada Lovelace - pierwsze programy na maszynę Babbige a pierwsze elektroniczne maszyny obliczeniowe (MARK I, ENIAC) - nie były w pełni programowalne; algorytm realizowany przez odpowiednia konfigurację sprzętowa (system połaczeń) rok 1945 - John von Neumann, First Draft, raport IAS, propozycja nowej architektury komputera
Architektura von Neumanna Definicja, historia Komputery programowalne Języki niskiego i wysokiego poziomu cel: programowalna maszyna uniwersalna części składowe maszyny: jednostka centralna, procesor (CPU), pamięć, urzadzenia wejścia i wyjścia (input/output) systemu połaczeń wyżej wymienionych podukładów (magistrala)
Zasada działania Start Definicja, historia Komputery programowalne Języki niskiego i wysokiego poziomu 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 pamięci 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 pamięci wykonywany sekwencyjnie rozkaz po rozkazie może modyfikować pamięć
Wykonanie progamu Definicja, historia Komputery programowalne Języki niskiego i wysokiego poziomu Model pamięci pamięć 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
Języki niskiego poziomu Definicja, historia Komputery programowalne Języki niskiego i wysokiego 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 pamięci, sposóbu jej adresowania taki rodzaj programowania programowanie w języku niskiego poziomu (w asemblerze) asembler - silnie powiazany ze sprzętem
Języki wysokiego poziomu Definicja, historia Komputery programowalne Języki niskiego i wysokiego poziomu zwykle używamy języka wysokiego poziomu (Fortran, Basic, Pascal, C); główne powody: prosty i łatwo interpretowany przez człowieka kod, np.: suma := a+b nie odnosi się bezpośrednio do sprzętu (a raczej do pewnych abstrakcji z niego wywiedzionych) pozwala skupić się na rozwiazaniu problemu a nie na dopasowywaniu do wymagań sprzętu problem taki kod nie jest rozumiany przez procesor dla językó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ętu - jego wykonanie to część implementacji języka
Jak określamy język? Składnia Popularność języków programowania Język programowania - definicja formalna w teorii języków formalnych: A- alfabet (niepusty zbiór dopuszczalnych symboli) A zbiór wszystkich możliwych napisów jaki można utworzyć z symboli wziętych z A język L - dowolny podzbiór zbioru wszystkich napisów A, L A ; większość tak określonych języków na ogół jest zupełnie nieinteresujaca potrzeba bardziej konstruktywnego podejścia odbywa się to poprzez określenie składni i semantyki języka
Opis języka Start Jak określamy język? Składnia Popularność języków programowania składnia (syntax) zbiór reguł określajacych kombinacje symboli uważanych za poprawne w danym języku ( jaka jest dozwolona form ),czyli określajacych: jak zapisujemy deklaracje jak tworzymy polecenia jak wygladaj a struktury sterujace (np. instrukcje warunkowe, pętle) itp. semantyka określa znaczenie tych dopuszczalnych przez składnię 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 prawdę, wykonaj instrukcję
Opis składni Start Jak określamy język? Składnia Popularność języków programowania możliwy ścisły, formalny opis składni etap pierwszy - ustalenie zbioru dostępnych symboli etap drugi - okreslenie zbioru poprawnych leksemów (leksem - najmniejsza część 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 języka (deklaracji, wyrażeń, instrukcji, programów) do opisu składni języków programowania często używa się 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
Notacja BNF Start Jak określamy język? Składnia Popularność języków programowania Dodatkowe symbole i konwencje, upraszczajace zapis:
Notacja BNF - przykład Jak określamy język? Składnia Popularność języków programowania
Jak mierzyć popularność języka? Istnieja setki języków programowania Których warto się uczyć? Jedna z przesłanek - popularność języka Stosowane kryteria pomiaru popularności: Jak określamy język? Składnia Popularność języków programowania Analiza ofert pracy dla programistów Ilość ksiażek wydawanych dotyczacych danego języka Oszacowanie ilości linii kodu napisanego w danym języku Zliczanie odwołań do nazwy języka 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
Wyniki pomiarów - TIOBE index Jak określamy język? Składnia Popularność języków programowania
Jak określamy język? Składnia Popularność języków programowania Wyniki pomiarów - SourceForge index Wnioski - każdy wyciaga sam...
Paradygmat - co to takiego? Co to jest paradygmat programowania Główne paradygmaty programowania 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 języków mechanizmów udostępnionych programiście oraz zbiór sposobów interpretacji tych mechanizmów przez semantykę języka paradygmat programowania - ogół oczekiwańprogramisty wobec języka programowania i komputera, na którym będzie działał program sposób postrzegania rzeczywistości (tak maszyny i jej działania, jak też świata zewnętrznego) określony przez dany język programowania
Z punktu widzenia maszyny Co to jest paradygmat programowania Główne paradygmaty programowania mamy stan maszyny określony przez zawartość pamięci i stan procesora (rejestry, liczniki rozkazów) program - zapisany w pamięci 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 języków niskiego poziomu
Co to jest paradygmat programowania Główne paradygmaty programowania Z punktu widzenia człowieka - programisty dla człowieka wygodniejsze inne podejście: nie wdajemy się 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 języki programowania pozwalaja na realizację różnych rozwiazań pośrednich
Paradygmat imperatywny Co to jest paradygmat programowania Główne paradygmaty programowania pierwotne podejście do programowania realizowany w sposób czysty przez języki niskiego poziomu języki 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.
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), pętle (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
Paradygmat objektowy Co to jest paradygmat programowania Główne paradygmaty programowania program - zbiór porozumiewajacych się obiektów obiekty - kontenery zawierajace dane oraz funkcje (metody) do ich przekształcania kluczowe cechy tego podejścia: enkapsulacja - selektywne udostępnienie elementów składowych obiektów światu zewnętrznemu 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."); } }
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 pętli program powstaje jako złożenie funkcji, ważna rola rekursji tworzenie funkcji wyższego rzędu (których argumentami i wynikiem moga być inne funkcje (DEFINE (suma m n) (IF (> m n) 0 (+ m (suma (+ m 1) n)) ) )
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).
Języki paradygmaty Co to jest paradygmat programowania Główne paradygmaty programowania Popularne języki i realizowane przez nie paradygmaty: