Programowanie Technologie Informacyjne
Programowanie Proces projektowania, tworzenia, testowania i utrzymywania kodu źródłowego programów komputerowych lub urządzeń mikroprocesorowych Kod źródłowy jest napisany w języku programowania Programowanie wymaga dużej wiedzy i doświadczenia w wielu różnych dziedzinach 2
Języki programowania 3
Język programowania Zbiór zasad składni, instrukcji, dzięki którym powstaje kod źródłowy programu Procesor wykonuje program w kodzie maszynowym Programista używa języka zrozumiałego dla człowieka, który następnie jest kompilowany bądź interpretowany do postaci maszynowej 4
Wybór języka programowania Wybór języka programowania najbardziej dostosowanego do rozwiązywanego zadania i ewentualnej istniejącej infrastruktury paradygmat i rodzaj języka przenośność i wydajność kompilatorów dojrzałość oraz dostępność narzędzi i dokumentacji 5
History of Programming Languages 6
Języki programowania 1945 Plankalkül Pierwszy język programowania przedstawiony przez Konrada Zuse 1952 Asemblery Do 1959 roku ok. 200 języków programowania! 1957 Fortran John Backus, IBM, Fortran II, Fortran IV (1966), Fortran 77 (1977), Fortran 90 (1991) 1960 LISP J. McCarthy, MIT, InterLisp, MacLisp, PSL, Common LISP (1984), Scheme (dialekt LISPu) 1960 Algol Algol 60, Algol 68 1960 COBOL główne zmiany 1968 i 1974, ostatnia COBOL 85 1962 APL Ken Iverson (Harvard) APL/PC, APL*PLUS 1962 SIMULA Kristen Nygaard & Ole-Johan Dahl, pierwsza implementacja 1964, SIMULA 67, Simulink (Matlab) 1964 BASIC John G. Kemeny & Thomas E. Kurtz, Dartmouth College, wiele dialektów 1964 PL/I George Radin, dialekty: EPL, PL/S, XPL etc 7
Języki programowania 1971 Prolog Alain Colmerauer and Phillipe Roussel, Univ. Aix-Marseille, Prolog-2, Prolog++, Prolog-D-Linda 1972 C Dennis Ritchie, Bell Labs, C* do programów współbieżnych, dialekty: Visual C 1975 Pascal N. Wirth, ETH, dialekty: Pascal Plus, TurboPascal, Pascal/R, wiele innych 1979 Modula-2 N. Wirth, ETH, wersja I z 1977 roku, dialekty: Modula-2+, Modula-3, Modula-P, Modula/R 1980 dbase II wersje późniejsze: dbase III, III+, IV, V 1983 Smalltalk-80 1983 Ada Xerox PARC, pod kierownictwem Alana Kay'a, rozwój od 1970 roku, Smalltalk/V na PC. Jean Ichbiah, CII Honeywell, standard Ada 83, rozszerzenia Ada++, Ada 9X nowy standard 1986 C++ Bjarne Stroustrup, AT&T, liczne implementacje 1988 Mathematica Steven Wolfram, oparta na języku SMP, ver. 2 1995 Java SunSoft 8
Najpopularniejsze Języki Programowania Ratings Nov 2009 2,92% 2,40% 3,49% 4,67% 18,37% 5,35% 8,17% 17,32% 10,00% 10,18% TIOBE Programming Community Index for November 2009 Java C PHP C++ (Visual) Basic C# Python Perl JavaScript Ruby 9
Najpopularniejsze Języki Programowania Ratings Nov 2010 3,19% 2,47% 1,91% 5,47% 18,51% 5,68% 5,71% 16,72% 7,81% 9,50% TIOBE Programming Community Index for November 2010 Java C C++ PHP C# Python (Visual) Basic Objective-C Perl Ruby 10
Najpopularniejsze Języki Programowania 11
Najpopularniejsze Języki Programowania Position Programming Language Nov 2010 Nov 2005 Nov 1995 Nov 1985 Java 1 1- - C 2 2 1 1 C++ 3 3 2 8 PHP 4 4- - C# 5 7- - Python 6 8 10- (Visual) Basic 7 5 3 4 Objective-C 8 42- - Perl 9 6 5- Ruby 10 24- - Lisp 13 14 12 2 Ada 16 17 6 3 12
Języki programowania Języki niskiego i wysokiego poziomu Języki kompilowane, interpretowane, kompilowanointerpretowany Języki pierwszej, drugiej, trzeciej, czwartej generacji 13
Języki pierwszej generacji Języki maszynowe, czyli języki procesorów Instrukcje są w nich zapisywane w postaci liczb binarnych 11101010000000000000111111111111111110001001110110 0000000010100000001 14
Języki drugiej generacji Języki symboliczne, asemblery. języki niskiego poziomu, pod względem składni tożsame z językiem maszynowym zamiast liczb używa się łatwiejszych do zapamiętania mnemoników (jmp, mov) jmp ffff:0 mov ax, bx add ax, 1 15
Języki trzeciej generacji Języki wysokiego poziomu Jedna instrukcja programu jest tłumaczona na kilka instrukcji procesora (5-10) Pierwszym językiem tego typu był ALGOL języki niestrukturalne: FORTH, BASIC języki strukturalne: Pascal, C, FORTRAN języki zorientowane obiektowo: C++, Java if(!x) printf("nie wolno dzielić przez zero\n"); return 1; 16
Języki czwartej generacji 4GL Języki bardzo wysokiego poziomu Języki zapytań do baz danych SQL Generatory raportów / stron Mathematica Przetwarzanie danych, analiza i raportowanie Tworzenie GUI Języki zorientowane problemowo, ang. task oriented languages Syntaktyka wielu języków czwartej generacji przypomina składnię języka naturalnego SELECT Nazwa FROM "Faktura.db" WHERE Cena > 1000 17
Języki piątej generacji Języki sztucznej inteligencji Języki systemów ekspertowych Języki najbardziej zbliżone do języka naturalnego Przykładem języka piątej generacji jest PROLOG?- polaczenie(sf, ny, Odlot, Przylot), Odlot > 900. Odlot = 930, Przylot = 2200? ; no 18
Paradygmat programowania Programowanie proceduralne Programowanie strukturalne Programowanie funkcyjne Programowanie imperatywne Programowanie obiektowe Programowanie uogólnione Programowanie zdarzeniowe Programowanie logiczne (np. Prolog) Programowanie aspektowe (np. AspectJ) Programowanie deklaratywne 19
Paradygmat programowania Category Ratings Nov 2009 Delta Nov 2008 Object-Oriented Languages 54.4% -3.2% Procedural Languages 41.6% +2.8% Functional Languages 2.8% +0.2% Logical Languages 1.3% +0.1% Category Ratings Nov 2010 Delta Nov 2009 Object-Oriented Languages 56.7% +2.4% Procedural Languages 38.0% -3.5% Functional Languages 3.6% +0.7% Logical Languages 1.7% +0.4% 20
programowanie imperatywne najbardziej pierwotny sposób programowania, program postrzegany jest jako ciąg poleceń dla komputera Fortran, Algol, Pascal, Ada, C instrukcje podstawienia działają na danych pobranych z pamięci, wynik również umieszczają w pamięci, abstrakcją komórek pamięci są zmienne 21
programowanie obiektowe zbiór porozumiewających się ze sobą obiektów, czyli jednostek zawierających pewne dane i umiejących wykonywać na nich pewne operacje powiązanie danych (czyli stanu) z operacjami na nich (czyli poleceniami) w całość, stanowiącą odrębną jednostkę obiekt 22
programowanie funkcyjne program to po prostu złożona funkcja (w sensie matematycznym), która otrzymawszy dane wejściowe wylicza pewien wynik brak stanu maszyny, nie ma zmiennych 23
Języki programowania Wieloparadygmatowe Ada C++ Common Lisp D Fortran Icon JavaScript Nemerle Perl Python Ruby PHP Snobol Proceduralne i strukturalne AWK C COBOL Forth Modula-2 Oberon Pascal PL/SQL REXX Lib Sh Obiektowe C# Eiffel Java Object Pascal Objective-C SmalltalkVB.NET Funkcyjne Erlang F# Haskell Lisp ML Ocaml Scheme Logiczne Prolog 24
Podstawy Programowania Programowanie strukturalne 25
Zmienne Zmienne stanowią abstrakcję komórek pamięci Nazwa dozwolone znaki, liczba znaków Adres Wartość zawartość komórki pamięci związanej z daną zmienną Typ zbiór dopuszczalnych wartości, precyzja 26
Zmienne typy skalarne Deklaracja Nazwa zmiennej Wartość początkowa typ identyfikator = inicjalizator; Definicja char x = A ; // typ char 1 bajt, // kod ASCII lub liczba całkowita int y = 5; // typ int 4 bajty // liczba całkowita 27
Zmienne typy tablicowe char wydzial[8] = WEiA,PG ; //tablica znakowa 8 elementów typu char //zdefiniowano 7 znaków i kod zakończenia ciągu \0 Adres w pamięci wydzial[0] W E i A, P G \0 0 1 2 3 4 5 6 7 Kod zakończenia int dane[4] = 32, 47, 25, 58; //definicja tablicy liczbowej 4 elementów typu int 28
Instrukcja przypisania 29
Instrukcja warunkowa 30
Instrukcja warunkowa Instrukcja grupująca Czy warunek jest spełniony? Tak Nie //sekwencja na Tak //sekwencja na Nie 31
Instrukcja warunkowa #include <iostream.h> int main (void) double x = 0; cout << ocena = ; cin >> x; if (x >= 3.0) cout << zaliczenie << endl; else cout << poprawka << endl; return 0; Instrukcja cout wyprowadza na monitor komunikat ocena=. Instrukcja cin pozwala wprowadzić dane z klawiatury pod zmienną x. Jeśli x>=3 to instrukcja cout wyprowadzi na monitor (konsolę) komunikat o zaliczeniu. Jeśli x<3 to instrukcja cout wyprowadzi na monitor (konsolę) komunikat o poprawce. Do wyprowadzania informacji tekstowej na monitor stosuje się operator <<. Do wprowadzania informacji z klawiatury stosuje się operator >>. 32
param = wartosc case Tak param=c1? true Nie false Inicjalizacja parametru //gałąź pierwsza c1 break Instrukcja przerwania nakazuje zakończenie instrukcji decyzyjnej. case param=c2? Tak true //gałąź druga c2 break Nie false case param=c3? Tak true //gałąź trzecia c3 break Nie false default //instrukcja domyslna 33
param = wartosc Inicjalizacja parametru case param=c1? Nie false case param=c2? Tak true Tak true //gałąź pierwsza c1 //gałąź druga c2 break break Gałąź pierwsza realizowana, gdy warunek porównania jest na true. Przy braku instrukcji przerwania badany jest warunek w gałęzi 2. Nie false case param=c3? Tak true //gałąź trzecia c3 break Nie false default //instrukcja domyslna 34
param = wartosc Inicjalizacja parametru case param=c1? Nie false Tak true //gałąź pierwsza c1 break case param=c2? Nie false Tak true //gałąź druga c2 break Warunek true w gałęzi drugiej powoduje jej realizację. Gdy jest instrukcja przerwania, to następuje zakończenie. Jeśli nie, to badany jest warunek w gałęzi trzeciej. case param=c3? Tak true //gałąź trzecia c3 break Nie false default //instrukcja domyslna 35
param = wartosc Inicjalizacja parametru case param=c1? Nie false Tak true //gałąź pierwsza c1 break case param=c2? Tak true //gałąź druga c2 break Nie false case param=c3? Nie false Tak true //gałąź trzecia c3 break Jeśli warunek w gałęzi trzeciej jest na true, to jest ona realizowana. Podobny scenariusz dotyczy następnych gałęzi jeśli występują. default //instrukcja domyslna 36
param = wartosc Inicjalizacja parametru case param=c1? Nie false Tak true //gałąź pierwsza c1 break case param=c2? Tak true //gałąź druga c2 break Nie false case Tak //gałąź trzecia c3 param=c3? true Nie false default //instrukcja domyslna break Gdy żaden warunek nie jest spełniony, to realizowana jest sekwencja instrukcji w sekcji default. 37
Instrukcja warunkowa #include <iostream.h> int main() char symbol = 'N'; cout << "Wybierz element <R,L,C>: "; cin >> symbol; switch (symbol) case 'R':cout Wyprowadzenie << "Rezystor" komunikatu << endl; na break; monitor i case 'L':cout oczekiwanie << "Cewka" na << wprowadzenie endl; break; danej z klawiatury case 'C':cout << "Kondensator" << endl; break; default:cout << "Inny element" << endl; return 0; 38
Instrukcja warunkowa Instrukcja switch zawiera 4 gałęzie. Trzy w sekcji case i jedną w sekcji default. Gałęzie w sekcji case zawierają instrukcje przerwania break, co oznacza, że #include <iostream.h> przyporządkowanie symbolu do nazwy elementu jest int main() jednoznaczne. char symbol = 'N'; cout << "Wybierz element <R,L,C>: "; cin >> symbol; switch (symbol) case 'R':cout << "Rezystor" << endl; break; case 'L':cout << "Cewka" << endl; break; case 'C':cout << "Kondensator" << endl; break; default:cout << "Inny element" << endl; return 0; 39
Instrukcja pętli 40
Instrukcja pętli #include <iostream.h> int main() double oceny[5] = 3,4,5,2,3.5; double suma = 0; for(int i=0; i<5; i++) suma = suma + oceny[i]; double srednia = suma/5; cout << "srednia = " << srednia << endl; return 0; Definicja tablicy oceny typu double o rozmiarze 5. Definicja zmiennej suma o wartości 0. 41
Instrukcja pętli #include <iostream.h> int main() double oceny[5] = 3,4,5,2,3.5; double suma = 0; for(int i=0; i<5; i++) suma = suma + oceny[i]; double srednia = suma/5; cout << "srednia = " << srednia << endl; return 0; Instrukcja for wykonuje 5 cykli. Zmienna sterująca i rozpoczyna proces od wartości 0 i pod koniec cyklu jest zwiększana o 1 (i++). W każdej iteracji kolejny element tablicy jest dodawany do zmiennej suma. 42
Instrukcja pętli #include <iostream.h> int main() double oceny[5] = 3,4,5,2,3.5; double suma = 0; for(int i=0; i<5; i++) suma = suma + oceny[i]; double srednia = suma/5; cout << "srednia = " << srednia << endl; return 0; Definicja zmiennej srednia inicjowanej do wartości średniej z sumy ocen. Wyprowadzenie informacji o średniej na monitor 43
Podstawy Programowania Programowanie obiektowe 44
Programowanie obiektowe Języki programowania obiektowego Simula 67 Smalltalku 80 C++ Java 45
Podejście strukturalne int main() //kod funkcji glownej //wymiary 1 wieloscianu double a1 = 1; double b1 = 2; double c1 = 3; //... //wymiary 2 wieloscianu double a2 = 4; double b2 = 5; double c2 = 6; //... return 0; Program wykonuje obliczenia na wielobokach o wymiarach: szerokość a, długość b, wysokość c Niewygodny i nieczytelny kod programu, w którym zmienne są deklarowane dla n wieloboków 46
Podejście strukturalne cd. //struktura o nazwie Box struct Box double a; double b; double c; int main() //definicja zmiennej box1 Box box1 = 1,2,3; //definicja zmiennej box2 Box box2 = 4,5,6; //... return 0; Uporządkowanie kody wykorzystując strukturę o nazwie Box Możliwość prostego tworzenia n wieloboków wykorzystując tablice zmiennych strukturowych Box 47
Podejście strukturalne cd. Następnym zadaniem programistycznym jest obliczenie objętości każdego zdefiniowanego prostopadłościanu. Należy stworzyć metodę (funkcję) wykonującą ten proces 48
struct Box double a; double b; double c; //struktura o nazwie Box //definicja funkcji Volume double Volume (double u, double v, double w) return u*v*w; int main() 49 //funkcja glowna main //definicja zmiennej box1 Box box1 = 1,2,3; double V1 = Volume(box1.a, box1.b, box1.c); //definicja zmiennej box2 Box box2 = 4,5,6; double V2 = Volume(box2.a, box2.b, box2.c); //... return 0; Dodanie funkcji Volume liczącej objętość figury
Programowanie obiektowe class CBox //klasa o nazwie Cbox public: Zamiast struktury Box double m_a; double m_b; wprowadzono klasę CBox double m_c; int main() //funkcja glowna main //definicja obiektu box1 CBox box1; box1.m_a = 1; //inicjalizacja pola m_a box1.m_b = 2; //inicjalizacja pola m_b box1.m_c = 3; //inicjalizacja pola m_c //definicja obiektu box2 CBox box2; //... return 0; 50
Programowanie obiektowe class CBox //klasa o nazwie Cbox public: double m_a; double m_b; double m_c; int main() //funkcja glowna main Zmienna typu klasy //definicja obiektu box1 CBox box1; nazywa się obiektem box1.m_a = 1; //inicjalizacja pola m_a box1.m_b = 2; //inicjalizacja pola m_b box1.m_c = 3; //inicjalizacja pola m_c //definicja obiektu box2 CBox box2; //... return 0; 51
Programowanie obiektowe class CBox //klasa o nazwie Cbox public: W tym przykładzie wymagany jest double m_a; double m_b; operator bezpośredniego dostępu do double m_c; własności: int main() //funkcja glowna main nazwa_obiektu.własność_obiektu //definicja obiektu box1 CBox box1; operator bezpośredniego dostępu - box1.m_a = 1; //inicjalizacja pola m_a kropka box1.m_b = 2; //inicjalizacja pola m_b box1.m_c = 3; //inicjalizacja pola m_c //definicja obiektu box2 CBox box2; //... return 0; 52
class Cbox //klasa o nazwie Cbox public: double m_a; Definicja konstruktora klasy double m_b; double m_c; CBox(double a, double b, double c) m_a=a; m_b=b; m_c=c; int main() //funkcja glowna main //definicja obiektu box1 CBox box1 = CBox(1,2,3); Definicja obiektu klasy z //definicja obiektu box2 CBox box2 = CBox(4,5,6); inicjacją zmiennych obiektu return 0; wykorzystując konstruktor 53
class CBox //klasa o nazwie CBox public: double m_a; double m_b; double m_c; CBox(double a, double b, double c) m_a=a; Dodanie funkcji liczącej objętość m_b=b; m_c=c; do sekcji publicznej klasy CBox double Volume() return m_a*m_b*m_c; int main() //funkcja glowna main //definicja obiektu box1 CBox box1 = CBox(1,2,3); //operacja obliczenia objetosci i przypisania do V1 double V1 = box1.volume(); //... return 0; 54 Wywołanie przez obiekt box1 swojej metody Volume() i przypisanie wartości zwróconej dr inż. Michał przez Michnatę metodę zmiennej V1
class CBox //klasa o nazwie Cbox public: //sekcja publiczna CBox(double a, double b, double c) m_a=a; m_b=b; m_c=c; double Volume() return m_a*m_b*m_c; protected://sekcja chroniona private: //sekcja prywatna Zasoby sekcji prywatnej nie mogą być double m_a; double m_b; dziedziczone, sekcji chronionej tak double m_c; //... box1.m_a; //bledna operacja zasob prywatny //... 55
struct Box double a; double b; double c; double Volume (double u, double v, double w) return u*v*w; int main() Box box1 = 1,2,3; Box box2 = 4,5,6; double V1 = Volume(box1.a, box1.b, box1.c); double V2 = Volume(box2.a, box2.b, box2.c); return 0; 56 class CBox public: CBox(double a, double b, double c) m_a=a; m_b=b; m_c=c; double Volume() return m_a*m_b*m_c; protected: private: double m_a; double m_b; double m_c; int main() CBox box1 = CBox(1,2,3); CBox box2 = CBox(3,4,5); double V1 = box1.volume(); double V2 = box2.volume(); return 0;
Dziedziczenie chronione class Klasa_B : protected Klasa_A Klasa A Public Protected Private Klasa B Public Protected Private 57
Dziedziczenie prywatne class Klasa_B : private Klasa_A Klasa A Public Protected Private Klasa B Public Protected Private 58
Obiektowy PHP class nazwaklasy var $zmienna1; function construct($param) echo Konstruktor wywołany z parametrem $param <br /> ; public $zmienna2 protected function operacja1() echo Wykonano opracje1 59
Narzędzia programistyczne 60
Proces programowania Sformułowanie problemu (specyfikacja) Analiza problemu i znalezienie metody jego rozwiązania (opracowanie algorytmu) Zakodowanie algorytmu (napisanie programu) Uruchomienie i przetestowanie programu Konserwacja oprogramowania 61
CASE, UML Upper-CASE wspomaganie fazy określania wymagań i analizy (modelowania), nie wspomagając procesu implementacji nie są związane z żadnym środowiskiem programistycznym Lower-CASE stosowane do etapów projektowania i implementacji, w związku z czym na ogół są jednoznacznie związane z środowiskiem lub językiem programowania 62
CASE, UML 63
CASE, UML 64
CASE, UML 65
Narzędzia programistyczne Edytory Debugery Kompilatory Generatory dokumentacji IDE RAD (Rapid Application Development) 66
Narzędzia programistyczne 67
Narzędzia programistyczne 68
Narzędzia programistyczne 69
Narzędzia programistyczne 70
Zastosowania praktyczne Elektrotechnika 71
Procesory sygnałowe (DSP) Assembler C 72
Sterowniki programowalne (PLC) lista instrukcji (IL), język strukturalny (ST) Schemat drabinkowy (LD) Schemat blokowy (FBD) Graf sekwencji (SFC) 73
Programy CAD AutoCAD VisualLISP ObjectARX Visual Basic for Application 74
Programowanie zastosowania Układy pomiarowe i akwizycji danych LabView 75
Modelowanie matematyczne MATLAB/Simulink 76
Modelowanie matematyczne Wolfram/Mathematica 77
Modelowanie matematyczne Wolfram/Mathematica 78
Programowanie zastosowania Obwody elektryczne SPICE, MAST Urządzenia elektryczne VHDL 79
Literatura http://wazniak.mimuw.edu.pl/index.php?title=paradygmaty_programowania http://poradnik.2lo.elblag.pl/800/jezyki_programowania-ms/index.html http://alternatives.rzero.com/lang.html 81