Języki i paradygmaty programowania

Podobne dokumenty
Wykład V. Rzut okiem na języki programowania. Studia Podyplomowe INFORMATYKA Podstawy Informatyki

Języki i paradygmaty programowania. I. Wprowadzenie

INFORMATYKA, TECHNOLOGIA INFORMACYJNA ORAZ INFORMATYKA W LOGISTYCE

Programowanie komputerów

Programowanie Strukturalne i Obiektowe Słownik podstawowych pojęć 1 z 5 Opracował Jan T. Biernat

Podstawy programowania wykład

Modelowanie i Programowanie Obiektowe

Dariusz Brzeziński. Politechnika Poznańska, Instytut Informatyki

Podstawy programowania. Wprowadzenie

Wstęp do Informatyki. Program, proces tworzenia programu Środowisko programistyczne Języki programowania

Wstęp do Informatyki dla bioinformatyków

Komputer nie myśli. On tylko wykonuje nasze polecenia. Nauczmy się więc wydawać mu rozkazy

Tworzenie oprogramowania

Technologie informacyjne - wykład 12 -

Czym jest Java? Rozumiana jako środowisko do uruchamiania programów Platforma software owa

Czym jest Ruby on Rails?

Dariusz Brzeziński. Politechnika Poznańska, Instytut Informatyki

Programowanie obiektowe - 1.

Translacja wprowadzenie

Podstawy programowania

Informatyczna Wieża Babel, czyli o różnych językach programowania. Informatyczna Wieża Babel, czyli o różnych językach programowania

Programowanie w języku C++ Podstawowe paradygmaty programowania

Wykład 1 Informacje Podstawowe

Programowanie I. Wprowadzenie. Proces programowania

Paradygmaty programowania

Programowanie. programowania. Klasa 3 Lekcja 9 PASCAL & C++

Programowanie obiektowo zorientowane. Mirosław Głowacki Wykład w języku C++

Rok akademicki: 2012/2013 Kod: ZIE s Punkty ECTS: 3. Poziom studiów: Studia I stopnia Forma i tryb studiów: -

Wykład 1 Informacje Podstawowe

Paradygmaty i języki programowania. Wprowadzenie. dr Robert Kowalczyk, Katedra Analizy Nieliniowej, WMiI UŁ 1

Paradygmaty programowania

Języki i metodyka programowania

Programowanie w C. dr inż. Stanisław Wszelak

Wykład 0 Informacje Podstawowe

Programowanie niskopoziomowe. dr inż. Paweł Pełczyński

Początki Javy. dr Anna Łazińska, WMiI UŁ Podstawy języka Java 1 / 8

Historia modeli programowania

ZMODYFIKOWANY Szczegółowy opis przedmiotu zamówienia

Język programowania. Andrzej Bobyk

Programowanie. Pascal - język programowania wysokiego poziomu. Klasa 2 Lekcja 9 PASCAL

Java EE produkcja oprogramowania

Podstawy programowania. Wykład 1 Wstęp. Krzysztof Banaś Podstawy programowania 1

Programowanie obiektowe W1 Wprowadzenie. Dr hab. inż. Lucyna Leniowska, prof. UR Zakład Mechatroniki, Automatyki i Optoelektroniki

Kurs programowania. Wstęp - wykład 0. Wojciech Macyna. 22 lutego 2016

dr inż. Paweł Myszkowski Wykład nr 5 ( )

Plan wykładu. Kompilatory. Literatura. Translatory. Literatura Translatory. Paweł J. Matuszyk

Programowanie w języku Python. Grażyna Koba

Język programowania PASCAL

Podstawy Programowania Obiektowego

Król Łukasz Nr albumu:

Środowiska i platformy programistyczne


Języki i paradygmaty programowania Wykład 2. Dariusz Wardowski. dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 1/18

Wprowadzenie do programowania

Programowanie obiektowe. Wprowadzenie

JAVA. Java jest wszechstronnym językiem programowania, zorientowanym. apletów oraz samodzielnych aplikacji.

Podstawy programowania.

Języki programowania deklaratywnego

Programowanie Obiektowe i C++

Kierunek: Informatyka Poziom studiów: Studia I stopnia Forma studiów: Stacjonarne. audytoryjne. Wykład Ćwiczenia

Wykład 1 Wiadomości wstępne

Kierunek: Informatyka Poziom studiów: Studia I stopnia Forma i tryb studiów: Stacjonarne. Wykład Ćwiczenia

Programowanie I. O czym będziemy mówili. Plan wykładu nieco dokładniej. Plan wykładu z lotu ptaka. Podstawy programowania w językach. Uwaga!

Praktyka Programowania

Pisząc okienkowy program w Matlabie wykorzystujemy gotowe obiekty graficzne, lub możemy tworzyć własne obiekty dziedzicząc już zdefiniowane.

Programowanie współbieżne Wykład 8 Podstawy programowania obiektowego. Iwona Kochaoska

Wykład 4. Algorytmy i programy. Algorytmy + struktury danych = programy. Niklaus Wirth. Algorytm = logika + sterowanie.

Krótka Historia. Co to jest NetBeans? Historia. NetBeans Platform NetBeans IDE NetBeans Mobility Pack Zintegrowane moduły. Paczki do NetBeans.

Wykład I. Podstawowe pojęcia. Studia Podyplomowe INFORMATYKA Architektura komputerów

Technika mikroprocesorowa. Struktura programu użytkownika w systemie mikroprocesorowym

Programowanie obiektowe

Java jako język programowania

Wykład Ćwiczenia Laboratorium Projekt Seminarium

PRZEWODNIK PO PRZEDMIOCIE

Wykład I. Wprowadzenie do baz danych

SPOSOBY POMIARU KĄTÓW W PROGRAMIE AutoCAD

Biorąc udział w projekcie, możesz wybrać jedną z 8 bezpłatnych ścieżek egzaminacyjnych:

Systemy baz danych w zarządzaniu przedsiębiorstwem. W poszukiwaniu rozwiązania problemu, najbardziej pomocna jest znajomość odpowiedzi

Programowanie I. Kornel Warwas. ATH Katedra Matematyki i Informatyki

Opracował: Jan Front

SOA Web Services in Java

Kierunek Informatyka stosowana Studia stacjonarne Studia pierwszego stopnia

Dotacje na innowacje. Inwestujemy w waszą przyszłość.

Języki programowania imperatywnego

Zestawy zagadnień na egzamin dyplomowy (inżynierski) dla kierunku INFORMATYKA (studia I stopnia)

SYSTEMY OPERACYJNE: STRUKTURY I FUNKCJE (opracowano na podstawie skryptu PP: Królikowski Z., Sajkowski M. 1992: Użytkowanie systemu operacyjnego UNIX)

Grzegorz Ruciński. Warszawska Wyższa Szkoła Informatyki Promotor dr inż. Paweł Figat

Laboratorium 1 Temat: Przygotowanie środowiska programistycznego. Poznanie edytora. Kompilacja i uruchomienie prostych programów przykładowych.

PLAN WYNIKOWY PROGRAMOWANIE APLIKACJI INTERNETOWYCH. KL IV TI 6 godziny tygodniowo (6x15 tygodni =90 godzin ),

Programowanie dla początkujących w 24 godziny / Greg Perry, Dean Miller. Gliwice, cop Spis treści

Ryszard Myhan. Wykład 1: Języki programowania

Programowanie MorphX Ax

PROGRAM NAUCZANIA DLA ZAWODU TECHNIK INFORMATYK, O STRUKTURZE PRZEDMIOTOWEJ

Zagadnienia egzaminacyjne AUTOMATYKA I ROBOTYKA. Stacjonarne I-go stopnia TYP STUDIÓW STOPIEŃ STUDIÓW SPECJALNOŚĆ

INFORMATYKA Pytania ogólne na egzamin dyplomowy

To sposób w jaki użytkownik wchodzi w interakcje z systemem. Środowisko graficzne używa kombinacji graficznych elementów(przyciski, okna, menu) i

STUDIA STACJONARNE I STOPNIA Przedmioty kierunkowe

Struktura systemu operacyjnego. Opracował: mgr Marek Kwiatkowski

TEST KOŃCOWY DLA KLASY III GIMNAZJUM- POGRAMOWANIE. Szkoła Podstawowa Nr 5. im. Księcia Mazowieckiego Siemowita IV w Gostyninie.

6. Algorytmy ochrony przed zagłodzeniem dla systemów Linux i Windows NT.

Transkrypt:

Języki i paradygmaty programowania Paweł Dudzik, Adrian Guzik AGH Kraków Kraków, 5 lipca 2011 Paweł Dudzik, Adrian Guzik (AGH Kraków) Języki i paradygmaty programowania Kraków, 5 lipca 2011 1 / 53

Plan wykładu 1 Języki programowania 2 Ewolucja języków programowania 3 Kompilacja i interpretacja języka 4 Zintegrowane środowiska programistyczne - IDE. Systemy GNU/Maven 5 Paradygmaty programowania 6 Omówienie popularnych języków programowania 7 Pakiety matematyczne - MATLAB i R-project Paweł Dudzik, Adrian Guzik (AGH Kraków) Języki i paradygmaty programowania Kraków, 5 lipca 2011 2 / 53

Plan wykładu 1 Języki programowania 2 Ewolucja języków programowania 3 Kompilacja i interpretacja języka 4 Zintegrowane środowiska programistyczne - IDE. Systemy GNU/Maven 5 Paradygmaty programowania 6 Omówienie popularnych języków programowania 7 Pakiety matematyczne - MATLAB i R-project Paweł Dudzik, Adrian Guzik (AGH Kraków) Języki i paradygmaty programowania Kraków, 5 lipca 2011 2 / 53

1.1. Co to jest język programowania? Język programowania Zbiór zasad określających, kiedy ciąg symboli tworzy program komputerowy oraz jakie obliczenia opisuje. Składa się ze zbiorów reguł syntaktycznych oraz semantyki, które opisują, jak należy budować poprawne wyrażenia oraz jak komputer ma je rozumieć. Język programowania pozwala na precyzyjny zapis algorytmów oraz innych zadań, jakie komputer ma wykonać. Paweł Dudzik, Adrian Guzik (AGH Kraków) Języki i paradygmaty programowania Kraków, 5 lipca 2011 3 / 53

1.2. Cechy języka programowania Język programowania może być zdefiniowany ze względu na kilka cech: Funkcja: Język programowania służy do tworzenia programów komputerowych, których zadaniem jest przetwarzanie danych, wykonywanie obliczeń i algorytmów oraz kontrolowanie/obsługa zewnętrznych urządzeń, np. drukarek, robotów itd. Przeznaczenie: Języki programowania umożliwiają wydawanie poleceń maszynom. Niektóre z języków są wykorzystywane również do kontrolowania jednego urządzenia przez inne. Przykładowo, program wykonywany na komputerze może wygenerować kod PostScript do sterowania pracą drukarki bądź wyświetlacza. Konstrukcje składniowe: Język programowania może zawierać konstrukcje składniowe do manipulowania strukturami danych oraz zarządzania przepływem sterowania. Moc: Teoria obliczeń klasyfikuje języki według rodzajów obliczeń, które można za ich pomocą zrealizować (hierarchia Chomsky ego). Paweł Dudzik, Adrian Guzik (AGH Kraków) Języki i paradygmaty programowania Kraków, 5 lipca 2011 4 / 53

1.3. Język programowania - poziomy Języki dzielimy dodatkowo na poziomy: kod maszynowy - sekwencje sygnałów opracowane w postaci rozkazów zrozumiałych dla procesora, obecnie wykorzystywany przez programistów raczej wyłącznie do zadań, w których szczególnie ważna jest szybkość działania programu, język niskiego poziomu - w małym stopniu abstrahuje od konstrukcji jednostki centralnej komputera. Innymi słowy, język ten wykazuje duże podobieństwo do kodu maszynowego, zaś kompilacja jest w miarę nieskomplikowana. język wysokiego poziomu - składnia i słowa kluczowe mają maksymalnie ułatwić rozumienie kodu programu dla człowieka, tym samym zwiększając poziom abstrakcji i dystansując się od sprzętowych niuansów. Kod napisany w języku wysokiego poziomu nie jest bezpośrednio zrozumiały dla komputera większość kodu stanowią tak naprawdę normalne słowa, np. w języku angielskim. Aby umożliwić wykonanie programu napisanego w tym języku należy dokonać procesu kompilacji. Paweł Dudzik, Adrian Guzik (AGH Kraków) Języki i paradygmaty programowania Kraków, 5 lipca 2011 5 / 53

Plan wykładu 1 Języki programowania 2 Ewolucja języków programowania 3 Kompilacja i interpretacja języka 4 Zintegrowane środowiska programistyczne - IDE. Systemy GNU/Maven 5 Paradygmaty programowania 6 Omówienie popularnych języków programowania 7 Pakiety matematyczne - MATLAB i R-project Paweł Dudzik, Adrian Guzik (AGH Kraków) Języki i paradygmaty programowania Kraków, 5 lipca 2011 6 / 53

2. Ewolucja języków programowania (1/4) Początki : języki maszynowe i asemblery. 1954 - powstaje Fortran, pierwszy język wysokiego poziomu do wprowadzania wyrażeń matematycznych. 1958 - powstanie LISP - programowanie funkcyjne, Algol58, Fortran II - wprowadzono podprogramy. 1960 - Algol60, wprowadzono strukturę blokową programów i typy danych,język Cobol - obsługę plików. Wykorzystano w nich paradygmat imperatywny, 1964: z połączenia języków Fortran, Cobol i Algol powstał PL/I (IBM), Basic - łatwy w użyciu, wszechstronny, proste komunikaty o błędach, 1967 - Simula rozszerzenie Algol60, programowanie zorientowane obiektowo, uniwersalny język symulacji. Paweł Dudzik, Adrian Guzik (AGH Kraków) Języki i paradygmaty programowania Kraków, 5 lipca 2011 7 / 53

2. Ewolucja języków programowania (2/4) 1968 - nowa wersja Algol68, 1969-1973: stworzony przez Niklaus Wirth język Pascal, stworzony do nauki programowania strukturalnego, Smalltalk - pełni obiektowy, reflektywny język programowania z dynamicznym typowaniem, Prolog zapoczątkował programowanie oparte na logicznych regułach. lata 69-73 początki języka C stworzonego przez Dennisa Ritchie ego, w całośći napisano w nim jądro dla systemu operacyjnego Unix, 1983 - popularność języka C pozwoliła na dalszy jego rozwój i powstanie języka C++, dodano programowanie obiektowe, Paweł Dudzik, Adrian Guzik (AGH Kraków) Języki i paradygmaty programowania Kraków, 5 lipca 2011 8 / 53

2. Ewolucja języków programowania (3/4) 1985-1995: Ada (1985)- programowanie równoległe i rozproszone Object-Pascal (1986) - rozwinięcie o programowanie obiektowe, Erlang(1986) - zaprojektowanym z myślą o zastosowaniach współbieżnych, Perl (1987) - język skryptowy powstawanie języków programowania funkcyjnego - Miranda(1985), Haskell(1990), Visual Basic (1991) - szybkie tworzenie aplikacji w sposób graficzny, Python (1991) - dynamiczny system typów, automatyczne zarządzanie pamięcią, Mercury (1995) - język programowania deklaratywnego, logicznego, Delphi (1995) - rozwinięcie Object Pascala o tworzenie aplikacji w sposób graficzny, Java (1995) - stworzony przez firmę Sun Microsystems, m.in. język aplikacji internetowych, urządzeń mobilnych (Java ME), PHP (1995) - skryptowy język programowania do stron internetowych, Ruby (1995) - w pełni obiektowy i dynamicznie typowany, Paweł Dudzik, Adrian Guzik (AGH Kraków) Języki i paradygmaty programowania Kraków, 5 lipca 2011 9 / 53

2. Ewolucja języków programowania (4/4) 1995 do dziś: C# (2001) - tworzenie specjalnego kodu pośredniego wykonywanego w środowisku uruchomieniowym (np. NET Framework), W kolejnych latach dochodzi do dalszego rozwoju popularnych języków programowania - PHP, Java, Python, C++. Kolejne wersje rozwojowe dodają nowe i ulepszają stare funkcje, aby poprawić szybkość działania, łatwość obsługi, wszechstronność lub ścisłą specjalizację w danej dziedzinie. Mapa ewolucji języków programowania dostępna na stronie: http://oreilly.com/news/graphics/prog_lang_poster.pdf Paweł Dudzik, Adrian Guzik (AGH Kraków) Języki i paradygmaty programowania Kraków, 5 lipca 2011 10 / 53

Plan wykładu 1 Języki programowania 2 Ewolucja języków programowania 3 Kompilacja i interpretacja języka 4 Zintegrowane środowiska programistyczne - IDE. Systemy GNU/Maven 5 Paradygmaty programowania 6 Omówienie popularnych języków programowania 7 Pakiety matematyczne - MATLAB i R-project Paweł Dudzik, Adrian Guzik (AGH Kraków) Języki i paradygmaty programowania Kraków, 5 lipca 2011 11 / 53

3.1. Translatory Translator Program, który umożliwia przetłumaczenie na kod maszynowy i wykonanie programów napisanych w języku różnym od języka komputera. Kompilatory - to programy, które tłumaczą program źródłowy (napisany w języku wysokiego poziomu) na równoważny program wynikowy. Assemblery - to programy, które tłumaczą program źródłowy (napisany w języku niskiego poziomu - język asemblera) na równoważny program wynikowy. Interpretery - które można nazwać dynamicznymi translatorami tłumaczą na bieżąco i wykonują program źródłowy fragment po fragmencie. Paweł Dudzik, Adrian Guzik (AGH Kraków) Języki i paradygmaty programowania Kraków, 5 lipca 2011 12 / 53

3.2. Kompilator - cechy podstawowe Program źródłowy jest napisany w języku źródłowym, a program wynikowy należy do języka wynikowego. Wykonanie programu kompilatora następuje w czasie tłumaczenia. Program po przetłumaczeniu nie da się zmienić, jest statyczny. Kompilator jako dane wejściowe otrzymuje cały program źródłowy i przekształca go na postać wynikową. Skopilowane moduły są zazwyczaj łączone przez linker w jeden program wykonywalny. Procesowi kompilacji są poddawane języki wysokiego poziomu - np. C/C++, Python, Ada Paweł Dudzik, Adrian Guzik (AGH Kraków) Języki i paradygmaty programowania Kraków, 5 lipca 2011 13 / 53

3.3. Asembler - cechy podstawowe Język asemblera - podstawowe operacje procesora. Jedno polecenie odpowiada zasadniczo jednemu rozkazowi procesora. Języki asemblera powstały na bazie języków maszynowych danego procesora poprzez zastąpienie kodów operacji ich mnemonikami. W wyniku poszukiwania efektywniejszych metod programowania i pojawianiem się kolejnych języków interpretowanych i kompilowanych języki asemblerów straciły na znaczeniu. Używane jeszcze przy programowaniu mikrokontrolerów, systemów wbudowanych, sterowników sprzętu, a także gdzie wymagana jest wysoka wydajność lub mały rozmariów kod wynikowy. Przykład: NASM, TASM, SAS. Paweł Dudzik, Adrian Guzik (AGH Kraków) Języki i paradygmaty programowania Kraków, 5 lipca 2011 14 / 53

3.4. Interpreter - cechy podstawowe Działanie interpretera polega na: wyodrębnieniu niewielkich jednostek programu źródłowego, tłumaczeniu ich na pewną postać wynikową oraz natychmiastowym ich wykonywaniu. Cechy: Proces interpretacji jest cykliczny. W czasie interpretacji przechowywany jest program źródłowy. Przykładowe języki i środowiska: Perl, Python (częściowo), Ruby, MATLAB Paweł Dudzik, Adrian Guzik (AGH Kraków) Języki i paradygmaty programowania Kraków, 5 lipca 2011 15 / 53

3.5. Zalety kompilatora i interpretera Kompilator Program wynikowy wykonuje się szybciej. Do wykonania programu wynikowego nie jest potrzebny kompilator. Lepsza optymalizacja kodu (optymalizacja dedykowa- na pod daną architekturę). Interpreter Łatwość zmian programu. Mniejsza zajętość pamięci zewnętrznej (tylko tekst źródłowy). Możliwość pracy konwersacyjnej (zatrzymanie wyk., zmiana wartości zmiennych, kontynuacja wyk.). Przenośność, wykorzystanie w zastosowaniach sieciowych. Paweł Dudzik, Adrian Guzik (AGH Kraków) Języki i paradygmaty programowania Kraków, 5 lipca 2011 16 / 53

Plan wykładu 1 Języki programowania 2 Ewolucja języków programowania 3 Kompilacja i interpretacja języka 4 Zintegrowane środowiska programistyczne - IDE. Systemy GNU/Maven 5 Paradygmaty programowania 6 Omówienie popularnych języków programowania Paweł Dudzik, Adrian Guzik (AGH Kraków) Języki i paradygmaty programowania Kraków, 5 lipca 2011 17 / 53

4.1. IDE - definicja IDE (Integrated Development Environment) jest to aplikacja lub zespół aplikacji (środowisko) służących do tworzenia, modyfikowania, testowania i konserwacji oprogramowania. Aplikacje będące zintegrowanymi środowiskami programistycznymi charakteryzują się tym, że udostępniają złożoną, wieloraką funkcjonalność obejmującą edycję kodu źródłowego, kompilowanie kodu źródłowego, tworzenie zasobów programu (tzn. formatek/ekranów/ okien dialogowych, menu, raportów, elementów graficznych takich jak ikony, obrazy itp.), tworzenie baz danych, komponentów i innych. Paweł Dudzik, Adrian Guzik (AGH Kraków) Języki i paradygmaty programowania Kraków, 5 lipca 2011 18 / 53

4.2. Koncepcje środowisk programistycznych Istnieją różne koncepcje tego, jak powinno wyglądać środowisko programistyczne: środowisko jako osobny pakiet oprogramowania - np. Microsoft Visual Studio, NetBeans, CodeWarrior, środowisko zintegrowane z systemem - np. Unix, maszyny lispowe, rozwiązania pośrednie - Emacs - tekstowy edytor, zintegrowany z Uniksem, maszyna lispowa i system graficzny udostępniający funkcjonalność podobną do tradycyjnych, graficznych IDE. Paweł Dudzik, Adrian Guzik (AGH Kraków) Języki i paradygmaty programowania Kraków, 5 lipca 2011 19 / 53

4.3. System GNU GNU - akronim GNU s Not Unix to uniskopodobny system operacyjny złożony wyłącznie zwolnego oprogramowania, zapoczątkowany został przez Richarda Stallmana. Jest przykładem open source owego środowiska programistycznego. Podstawowe składniki systemu to: zestaw kompilatorów GNU Compiler Collection (GCC), narzędzia programistyczne GNU Binary Utilities (binutils), powłoka bash, biblioteka standardowych funkcji języka C GNU C Library (glibc), narzędzia GNU Coreutils (coreutils). Paweł Dudzik, Adrian Guzik (AGH Kraków) Języki i paradygmaty programowania Kraków, 5 lipca 2011 20 / 53

4.4. System Maven Maven jest narzędziem automatyzacji budowy oprogramowania. Stosuje pewne wzory podczas tworzenia struktury oprogramowania w celu zwiększenia przejrzystości, wydajności i ukazywaniu najlepszych rozwiązań danego problemu. Poszczególne funkcjonalności Mavena realizowane są poprzez wtyczki, które są automatycznie pobierane przy ich pierwszym wykorzystaniu. Przykład: Apache Maven dla języka Java. Pomaga w zarządzaniu projektem w sferach: Zarządzania strukturą programu Budowy programu Dokumentacji Raportowania Publikacji Dystrybucji Paweł Dudzik, Adrian Guzik (AGH Kraków) Języki i paradygmaty programowania Kraków, 5 lipca 2011 21 / 53

Plan wykładu 1 Języki programowania 2 Ewolucja języków programowania 3 Kompilacja i interpretacja języka 4 Zintegrowane środowiska programistyczne - IDE. Systemy GNU/Maven 5 Paradygmaty programowania 6 Omówienie popularnych języków programowania 7 Pakiety matematyczne - MATLAB i R-project Paweł Dudzik, Adrian Guzik (AGH Kraków) Języki i paradygmaty programowania Kraków, 5 lipca 2011 22 / 53

5.1. Co to jest paradygmat? Paradygmat przyjęty sposób widzenia rzeczywistości w danej dziedzinie, doktrynie itp, zespół form fleksyjnych (deklinacyjnych lub koniugacyjnych), właściwy danemu typowi wyrazów; wzorzec, model deklinacyjny lub koniugacyjny (Słownik Języka Polskiego), z greckiego - wzorzec, przykład. Paweł Dudzik, Adrian Guzik (AGH Kraków) Języki i paradygmaty programowania Kraków, 5 lipca 2011 23 / 53

5.2 Co to jest paradygmat programowania? Paradygmat jest to zbiór koncepcji reprezentujących podejście do implementacji algorytmów, zbiór mechanizmów, jakich programista używa, pisząc program, i o to, jak ów program jest następnie wykonywany przez komputer. Do opisu realizacji algorytmu w komputerze, w formie czytelnej dla człowieka, służą języki programowania. Ten sam algorytm można zaimplementować na różne sposoby, zgodnie z różnymi paradygmatami. Wybór paradygmatu ma często kluczowy wpływ na łatwość implementacji algorytmów. Zastosowanie odpowiedniego paradygmatu do realizacji zadania programistycznego jest bardzo ważne, ale nie rozwiąże samego problemu. Paweł Dudzik, Adrian Guzik (AGH Kraków) Języki i paradygmaty programowania Kraków, 5 lipca 2011 24 / 53

5.3. Rodzaje paradygmatów programowania Głównymi paradygmatami programowania są: imperatywny, obiektowy, funkcyjny, deklaratywne. Można też wyróźnić inne: proceduralny, strukturalny, uogólniony zdarzeniowy, aspektowy, agentowy, modularny, Paweł Dudzik, Adrian Guzik (AGH Kraków) Języki i paradygmaty programowania Kraków, 5 lipca 2011 25 / 53

5.4. Paradygmat imperatywny Paradygmat imperatywny polega na sekwencyjnym wykonywaniu instrukcji modyfikujących wartości zmiennych. Jest on bezpośrednim odzwierciedleniem sposobu działania maszyny von Neumanna, jednak nie koresponduje ze sposobem rozwiązywania problemów przez człowieka. Programy tego typu są czasochłonne w opracowaniu, trudne w utrzymaniu i dają niewielkie możliwości ponownego użycia kodu. Języki wysokiego poziomu, takie jak Fortran, Algol, Pascal, Ada lub C posługują się pewnymi abstrakcjami, ale wciąż odpowiadają paradygmatowi programowania imperatywnego. Przykład: Python, PHP, Java Paweł Dudzik, Adrian Guzik (AGH Kraków) Języki i paradygmaty programowania Kraków, 5 lipca 2011 26 / 53

5.5. Paradygmat obiektowy Paradygmat obiektowy polega na operowaniu obiektami; obiekt to kombinacja danych określających jego stan oraz operacje, jakie można na nim wykonać. Model opisujący rzeczywistość jako zbiór obiektów posiadających stan i zachowanie odpowiada sposobowi opisywania rzeczywistości przez człowieka. Paradygmat obiektowy ma zastosowanie nie tylko na etapie implementacji kodu, lecz także na etapie analizy problemu i projektowania programu. Obiektowe podejście do programowania sprzyja tworzeniu kodu wielokrotnie używalnego. Wprowadza nowe możliwości - enkapsulacja, hermetyzacja, polimorfizm, dziedziczenie. Przykład: Java, C++, C# Paweł Dudzik, Adrian Guzik (AGH Kraków) Języki i paradygmaty programowania Kraków, 5 lipca 2011 27 / 53

5.6. Paradygmat funkcyjny Paradygmat funkcyjny polega na operowaniu nie na zmiennych, lecz na wartościach. Zamiast wykonywania sekwencji instrukcji modyfikujących zmienne, obliczane są wyrażenia zwracające wartości. Wykonanie programu jest obliczeniem wartości funkcji, która jako listę argumentów otrzymuje kolejne funkcje, których wartości są obliczane itd. Przy takim podejściu stany i wartości pośrednie programu są nieistotne nie są zapamiętywane, a jedynie używane jako argumenty kolejnych wyrażeń. Przykład: Haskell, LISP, Objective Calm, Standard ML Paweł Dudzik, Adrian Guzik (AGH Kraków) Języki i paradygmaty programowania Kraków, 5 lipca 2011 28 / 53

5.7. Paradygmat deklaratywny Paradygmat deklaratywny programowanie oparte na logicznych regułach. Programy stworzone zgodnie z takim paradygmatem są zbiorem reguł definiujących wyrażenia logiczne. Wykonanie programu to zadanie wyszukania pewnych kombinacji reguł, dla których opisujące je wyrażenia logiczne są prawdziwe. Przykład: SQL, Prolog Paweł Dudzik, Adrian Guzik (AGH Kraków) Języki i paradygmaty programowania Kraków, 5 lipca 2011 29 / 53

5.8 Inne paradygmaty (1/2) Paradygmat proceduralny zalecający dzielenie kodu na procedury, czyli fragmenty wykonujące ściśle określone operacje. Paradygmat strukturalny zalecający hierarchiczne dzielenie kodu na bloki, z jednym punktem wejścia i jednym lub wieloma punktami wyjścia. Paradygmat uogólniony pozwala na pisanie kodu programu bez wcześniejszej znajomości typów danych, na których kod ten będzie pracował. Paradygmat zdarzeniowy paradygmat według którego program jest cały czas bombardowany zdarzeniami, na które musi odpowiedzieć, i że przepływ sterowania w programie jest całkowicie niemożliwy do przewidzenia z góry. Paweł Dudzik, Adrian Guzik (AGH Kraków) Języki i paradygmaty programowania Kraków, 5 lipca 2011 30 / 53

5.8 Inne paradygmaty (2/2) Paradygmat aspektowy wspomagający separację zagadnień i rozdzielenie programu na części w jak największym stopniu niezwiązane funkcjonalnie. Paradygmat agentowy wyższy od abstrakcji paradygmatu obiektowego. Polega on na tworzeniu agentów (ang. Software Agent). Programowanie agentowe różni się od obiektowego tym, że każdy agent musi być przygotowany na otrzymanie błędnych danych od innego agenta, lub nieotrzymanie ich w ogóle. W programowaniu obiektowym zakłada się, że każdy obiekt zwróci poprawne dane. Paradygmat modularny zalecający stosowanie nadrzędności modułów w stosunku do procedur bloków tworzących program Paweł Dudzik, Adrian Guzik (AGH Kraków) Języki i paradygmaty programowania Kraków, 5 lipca 2011 31 / 53

Plan wykładu 1 Języki programowania 2 Ewolucja języków programowania 3 Kompilacja i interpretacja języka 4 Zintegrowane środowiska programistyczne - IDE. Systemy GNU/Maven 5 Paradygmaty programowania 6 Omówienie popularnych języków programowania 7 Pakiety matematyczne - MATLAB i R-project Paweł Dudzik, Adrian Guzik (AGH Kraków) Języki i paradygmaty programowania Kraków, 5 lipca 2011 32 / 53

6.1. Fortran Fortran - FORmula TRANslator język programowania, stworzony w latach 50 XX wieku. Jego głównym zastosowaniem są obliczenia naukowo-inżynierskie (w szczególności obliczenia numeryczne). Cechy języka: braku rozróżniania małych i wielkich liter w słowach kluczowych języka oraz używanych zmiennych, wielka liczba bibliotek, które pozwalają rozwiązać praktycznie każde zadanie numeryczne, szybkość obliczeń i wysoka wydajność kodu generowanego przez kompilatory Fortranu, znakomita skalowalność i przenośność oprogramowania (pomiędzy różnymi platformami sprzętowymi i systemami operacyjnymi), dostępność bibliotek dla programowania wieloprocesorowego i równoległego. Paweł Dudzik, Adrian Guzik (AGH Kraków) Języki i paradygmaty programowania Kraków, 5 lipca 2011 33 / 53

6.2. Język C Język C imperatywny, strukturalny język programowania, stworzony przez Dennisa Ritchiego do programowania systemów operacyjnych i innych zadań niskiego poziomu. Cechy języka: wykonywanie niskopoziomowych operacji, możliwość użycia gotowych funkcji, możliwość bieżącego komentowania kodu, używanie słów kluczowych w programie, możliwość operacji na pamięci, kontrola typów, prosta składania, dająca dużą swobodę pisania przenośność pomiędzy innym sprzętem. Paweł Dudzik, Adrian Guzik (AGH Kraków) Języki i paradygmaty programowania Kraków, 5 lipca 2011 34 / 53

6.3. Język C++ Język C++ wywodzi się z języka C i jest z nim kompatybilny. Cechy języka: wysoka wydajność kodu wynikowego, bezpośredni dostęp do zasobów sprzętowych, łatwością tworzenia i korzystania z bibliotek (napisanych w C++, C lub innych językach), obiektowość - hermetyzacja, polimorfizm, dziedziczenie, wysoką przenośność kodów źródłowych, można w nim stosować jednocześnie różne style programowania, w tym programowanie proceduralne, obiektowe, generyczne, jak również programować na poziomie asemblera. statyczna kontrola typów; posiada też elementy dynamicznej kontroli typów, Paweł Dudzik, Adrian Guzik (AGH Kraków) Języki i paradygmaty programowania Kraków, 5 lipca 2011 35 / 53

6.4. Objective-C Objective-C jest rozwinięciem języka C o możliwości obiektowe, wzorowane na SmallTalk u Cechy języka: daje językowi pełną programowalność obiektową, rozwinięty przez firmę Apple, początkowo na komputery NeXT, obecnie na Mac OS X i ios. Paweł Dudzik, Adrian Guzik (AGH Kraków) Języki i paradygmaty programowania Kraków, 5 lipca 2011 36 / 53

6.5. Java Java język stworzony przez Sun MicroSystems. Jest językiem tworzenia programów źródłowych kompilowanych do kodu bajtowego, czyli postaci wykonywanej przez maszynę wirtualną. Cechy języka: silna typizacja, silnie ukierunkowany na obiektowość, wszelkie dane i akcje na nim podejmowane są pogrupowane w klasy obiektów, niezależność od architektury - przez kompilacje do kodu pośredniego, do zastosowań sieciowych i oprogramowania rozproszonego, duże bezpieczeństwo i niezawodność działania. Paweł Dudzik, Adrian Guzik (AGH Kraków) Języki i paradygmaty programowania Kraków, 5 lipca 2011 37 / 53

6.6. Perl Perl interpretowany język programowania autorstwa Larry ego Walla początkowo przeznaczony głównie do pracy z danymi tekstowymi, obecnie używany do wielu innych zastosowań. Cechy języka: początkowo praktyczne narzędzie do analizy plików tekstowych i tworzenia raportów, uczynienie łatwych zadań łatwymi do wykonania, zaś trudnych wykonalnymi, wszechstronność - programowanie w różnych modelach: proceduralnym, funkcyjnym czy obiektowym, umożliwia powiązanie systemów i struktur danych. Paweł Dudzik, Adrian Guzik (AGH Kraków) Języki i paradygmaty programowania Kraków, 5 lipca 2011 38 / 53

6.7. Python Python interpretowany, interaktywny język programowania stworzony przez Guido van Rossuma w 1991. Cechy języka: dynamiczny system typów, automatyczne zarządzanie pamięcią - garbage collection, oszczędna i czytelna składnia w stosunku do innych języków, możliwe jest programowanie obiektowe, programowanie strukturalne i programowanie funkcyjne Paweł Dudzik, Adrian Guzik (AGH Kraków) Języki i paradygmaty programowania Kraków, 5 lipca 2011 39 / 53

6.8. Prolog Prolog (od francuskiego Programmation en Logique jest to jeden z najpopularniejszych języków programowania logicznego. Powstał jako język programowania służący do automatycznej analizy języków naturalnych. Cechy języka: język ogólnego zastosowania, sprawdzającym się w programach związanych ze sztuczną inteligencją, składa się z faktów oraz reguł wnioskowania, podaje się bazę faktów i reguł, potem można wykonywać zapytania na tej bazie. podstawową jednostką jest predykat - składający się z nagłówka i argumentów: ojciec(tomasz, agata), jest językiem deklaratywnym. Paweł Dudzik, Adrian Guzik (AGH Kraków) Języki i paradygmaty programowania Kraków, 5 lipca 2011 40 / 53

6.9. Haskell Haskell funkcyjny język programowania nazwany na cześć Haskella Currego. Cechy języka: leniwe wartościowanie - strategia wyznaczania wartości argumentów funkcji tylko wtedy, kiedy są potrzebne (na żądanie), monady - abstrakcyjny typ danych, statyczny polimorfizm, definiowalne operatory i możliwość tworzenia nowych, wbudowana obsługa literate programming - czytelność kodu. Paweł Dudzik, Adrian Guzik (AGH Kraków) Języki i paradygmaty programowania Kraków, 5 lipca 2011 41 / 53

6.10. Lisp (LISt Processing) Lisp odzina języków programowania z długą historią i charakterystyczną składnią. Zaprojektowany przez Johna McCarthiego na MIT w 1958 roku. Szybko został najchętniej wybieranym językiem do badania i rozwoju sztucznej inteligencji. Ponieważ należy do najstarszych języków programowania wysokiego poziomu, wywodzi się z niego wiele technik programistycznych, takich jak struktury drzewiaste, odśmiecanie pamięci, dynamiczne typowanie czy nowe koncepcje w programowaniu obiektowym. Cechy języka: podstawową strukturą danych jest lista, kod źródłowy programów w Lispie składa się z list, możliwość manipulacji kodem źródłowym jak zwykłą strukturą danych, wygodna matematyczna notacja dla programów komputerowych, oparta na rachunku lambda stworzonym przez Alonzo Churcha Paweł Dudzik, Adrian Guzik (AGH Kraków) Języki i paradygmaty programowania Kraków, 5 lipca 2011 42 / 53

6.11. Erlang Erlang jest językiem programowania ogólnego przeznaczenia zaprojektowanym z myślą o zastosowaniach współbieżnych, a także środowiskiem uruchomieniowym dla aplikacji w nim napisanych. Cechy języka: wartościowanie zachłanne - strategia wyznaczania wartości argumentów funkcji przed jej wywołaniem, dynamiczne typizowanie, spółbieżna bazuje na teoretycznym modelu znanym jako Actor model stworzony pod kątem tworzenia rozproszonych systemów wymagających długotrwałej pracy i odporności na awarie, mechanizm hot-swappingu pozwalający na aktualizację kodu aplikacji bez jej zatrzymywania. Paweł Dudzik, Adrian Guzik (AGH Kraków) Języki i paradygmaty programowania Kraków, 5 lipca 2011 43 / 53

6.12. Ruby Ruby to interpretowany, w pełni obiektowy i dynamicznie typowany język programowania stworzony w 1995 roku przez Yukihiro Matsumoto. Cechy języka: automatyczne odśmiecanie pamięci, obsługa wyjątków, wyrażenia regularne wbudowane w składnię, liczby całkowite o dowolnych rozmiarach, Duck typing - rozpoznawanie typów na podstawie ich zachowania, a nie deklaracji, moduły - rodzaj wielodziedziczenia pozwalający włączyć gotową implementację zbioru metod do danej klasy, możliwość zmiany praktycznie wszystkiego - dodanie dodatkowych metod do klasy Array, czy zmiana sposobu drukowania liczb całkowitych są niezmiernie proste. Paweł Dudzik, Adrian Guzik (AGH Kraków) Języki i paradygmaty programowania Kraków, 5 lipca 2011 44 / 53

6.13. PHP PHP obiektowy, skryptowy język programowania zaprojektowany do generowania stron internetowych w czasie rzeczywistym. Cechy języka: najczęściej stosowany do tworzenia skryptów po stronie serwera WWW, również używany do przetwarzania danych z poziomu wiersza poleceń, a nawet do pisania programów pracujących w trybie graficznym, umożliwia współpracę z wieloma rodzajami źródeł danych, takich jak systemy zarządzania bazami danych, pliki tekstowe, dokumenty XML oraz serwisy WWW Paweł Dudzik, Adrian Guzik (AGH Kraków) Języki i paradygmaty programowania Kraków, 5 lipca 2011 45 / 53

Plan wykładu 1 Języki programowania 2 Ewolucja języków programowania 3 Kompilacja i interpretacja języka 4 Zintegrowane środowiska programistyczne - IDE. Systemy GNU/Maven 5 Paradygmaty programowania 6 Omówienie popularnych języków programowania 7 Pakiety matematyczne - MATLAB i R-project Paweł Dudzik, Adrian Guzik (AGH Kraków) Języki i paradygmaty programowania Kraków, 5 lipca 2011 46 / 53

7.1. MATLAB MATLAB - MATrix LABoratory program komputerowy będący interaktywnym środowiskiem do wykonywania obliczeń naukowych i inżynierskich, oraz do tworzenia symulacji komputerowych. Cechy: interaktywny język wysokiego poziomu, przejrzysty kod, system do obliczeń numerycznych, optymalizacja czasochłonnych operacji tablicowych, język skryptowy interpretowany (możliwość kompilacji poprzez jęz. C), bogate biblioteki otwarty kod, umożliwia rysowanie dwu i trójwymiarowych wykresów funkcji oraz wizualizację wyników obliczeń w postaci rysunków statycznych i animacji, możliwe jest pobieranie danych pomiarowych z urządzeń zewnętrznych, Paweł Dudzik, Adrian Guzik (AGH Kraków) Języki i paradygmaty programowania Kraków, 5 lipca 2011 47 / 53

7.2. MATLAB - pakiet Simulink Simulink jest częścią pakietu numerycznego MATLAB firmy The MathWorks i służy do przeprowadzania symulacji komputerowych. Simulink pozwala budować modele symulacyjne przy pomocy interfejsu graficznego i tzw. bloków. Przy pomocy Simulinka można przeprowadzać zarówno symulacje z czasem dyskretnym jak i ciągłym. Simulink znajduje głównie zastosowanie (poprzez to, że umożliwia symulacje w czasie ciągłym) w cyfrowym przetwarzaniu sygnałów, analizie obwodów elektrycznych i teorii sterowania. Paweł Dudzik, Adrian Guzik (AGH Kraków) Języki i paradygmaty programowania Kraków, 5 lipca 2011 48 / 53

7.3. R-project R-project jest pakietem matematycznym przeznaczonym do zaawansowanych obliczeń statystycznych. Objęty jest licencją GPL, a zatem jest programem całkowicie bezpłatnym i wolnym. Środowisko i składnia R jest bardzo zbliżona do języka S, stosowanego np. w pakiecie S-plus. Można powiedzieć, że R jest jedną z implementacji tego języka. Pomiędzy nimi istnieją wprawdzie pewne (niekiedy istotne) różnice, jednak większość procedur i kodu napisanego dla S będzie działać także w R. Cechy: tworzenie wykresów o bardzo dobrej jakości, praca odbywa się w trybie komend, funkcjonalność uzupełniają dodatkowe biblioteki do konkretnych zastosowań, dostarczane wraz z obszerną dokumentacją. Paweł Dudzik, Adrian Guzik (AGH Kraków) Języki i paradygmaty programowania Kraków, 5 lipca 2011 49 / 53

Bibliografia (1/4) Piotr Furmański, Ścibór Sobieski, Wstęp do informatyki, Łódź, Dostępna w Internecie: http://www.scribd.com/doc/7310800/ 87/Ewolucja-j%C4%99zykow-programowania Strona PolishWords.com.pl, Ewolucja języków programowania Dostępny w Internecie: http://polishwords.com.pl/blog/2008/ ewolucja-jezykow-programowania/ Strona Studia Informatyczne Beta, Dostępny w Internecie: http://osilek.mimuw.edu.pl/index.php?title=paradygmaty_ programowania/wyk%c5%82ad_1: _Co_to_jest_paradygmat_programowania%3F http://wazniak.mimuw.edu.pl/index.php?title= Paradygmaty_programowania Paweł Dudzik, Adrian Guzik (AGH Kraków) Języki i paradygmaty programowania Kraków, 5 lipca 2011 50 / 53

Bibliografia (2/4) Łukasz Komsta, Wprowadzenie do środowiska R, Dostępna w Internecie: http://cran.r-project.org/doc/contrib/ Komsta-Wprowadzenie.pdf Strona Apach Maven Project, Maven Getting Started Guide, Dostępna w Internecie: http: //maven.apache.org/guides/getting-started/index.html Małgorzata Kotulska, Informatyk Wykład 1, Wrocław, Dostępny w Internecie: www.if.pwr.wroc.pl/~kotulska/informatyka/info1.ppt Strona szkolnictwo.pl, Programowanie - język programowania, Dostępne w Internecie: http://www.szkolnictwo.pl/test,4, 5605,1,Programowanie-j%C4%99zyk_programowania Paweł Dudzik, Adrian Guzik (AGH Kraków) Języki i paradygmaty programowania Kraków, 5 lipca 2011 51 / 53

Bibliografia (3/4) Encyklopedia Wikipedia, Dostępna w Internecie: http://pl.wikipedia.org/wiki/j%c4%99zyk_programowania http://pl.wikipedia.org/wiki/translator http://pl.wikipedia.org/wiki/kompilator http://pl.wikipedia.org/wiki/paradygmat_programowania http://pl.wikipedia.org/wiki/interpreter_(program_ komputerowy) http://en.wikipedia.org/wiki/objective-c http: //pl.wikipedia.org/wiki/c_(j%c4%99zyk_programowania) http://pl.wikipedia.org/wiki/c%2b%2b http://pl.wikipedia.org/wiki/fortran http://pl.wikipedia.org/wiki/java http://pl.wikipedia.org/wiki/perl Paweł Dudzik, Adrian Guzik (AGH Kraków) Języki i paradygmaty programowania Kraków, 5 lipca 2011 52 / 53

Bibliografia(4/4) Encyklopedia Wikipedia, Dostępna w Internecie: http://pl.wikipedia.org/wiki/python http://pl.wikipedia. org/wiki/prolog_(j%c4%99zyk_programowania) http://pl.wikipedia.org/wiki/lisp http: //en.wikipedia.org/wiki/haskell_(programming_language) http://pl.wikipedia.org/wiki/erlang_(j%c4%99zyk_ programowania) http: //pl.wikipedia.org/wiki/ruby_(j%c4%99zyk_programowania) http://pl.wikipedia.org/wiki/php Paweł Dudzik, Adrian Guzik (AGH Kraków) Języki i paradygmaty programowania Kraków, 5 lipca 2011 53 / 53