Techniki Programowania Łukasz Madej Katedra Informatyki Stosowanej i Modelowania Wykłady opracowane we współpracy z Danutą Szeligą, Łukaszem Sztangretem
Dr hab. inż. Łukasz Madej, prof. AGH Budynek B5, pokój 716 lmadej@agh.edu.pl home.agh.edu.pl/lmadej Konsultacje: Poniedziałek: 7:30 9:00.
Wykład: Czwarek 16:00 17:30 Sala 601 Obecność nieobowiązkowa Ćwiczenia (mgr inż. Mateusz Sitko): Środa 8:00 09:30 Sala 601 Obecność obowiązkowa!!!
Egzamin pisemny Zaliczenie min 3.0 Termin 0 ocena z zaliczenia min 4.5 Termin 1 pisemny Termin 2 ustny/pisemny Termin 3 ustny
Wykład 1
Język zrozumiały przez komputer: 0000010101010101010101010 Język zrozumiały przez programistę: Język programowania
Techniki programowania 1. Programowanie strukturalne 2. Programowanie proceduralne 3. Programowanie z ukrywaniem danych 4. Programowanie obiektowe 5. Programowanie obiektowo orientowane
Języki programowania 1. Niskopoziomowe - assembly languages 2. Klasyczne - C/C++, Pascal, Basic, Fortran, Lisp Język programowania 3. Używające maszyny wirtualnej - Java, rodzina.net (C#, Visual Basic, Delphi) Język programowania kompilator maszyna wirtualna 4. Skryptowe (interpetowane) - PHP, Perl, Python, JavaScript, Ruby, języki powłok (bash, awk) Język komputera Język komputera
Assembly languages - Rodzina języków programowania niskiego poziomu, w których jedno polecenie odpowiada jednemu rozkazowi procesora. - Używane do pisania fragmentów oprogramowania wymagających bardzo wysokiej wydajności lub mających inne specjalne wymagania - Stosowane głównie do programowania mikrokontrolerów
Klasyczne - Zapewniają wyższy poziom niż asembler i istnieją w informatyce od dawna. - Język C służy do programowania systemów operacyjnych i aplikacji. - Na bazie C powstał język C++, który wprowadza możliwość programowania obiektowego. C++ jest językiem ogólnego przeznaczenia. - Języki C/C++ bazują w dużej mierze na samodzielnej obsłudze pamięci przez programistę.
Używające maszyny wirtualnej - Wirtualna maszyna to oprogramowanie pośredniczące pomiędzy programem, a systemem operacyjnym i sprzętem. - Program nie jest tłumaczony do kodu maszyny/sprzętu na którym go kompilujemy lecz do pseudokodu maszyny wirtualnej. - Java język programowania doskonale przenośny pomiędzy różnym sprzętem i systemami operacyjnymi właśnie ze względu na maszynę wirtualną. - Microsoft stworzył własną maszynę wirtualną.net, lecz nie jest ona tak przenośna jak maszyna wirtualna Javy.
Używające maszyny wirtualnej cd. - Wadą rozwiązań opartych o maszynę wirtualną jest ich wolne działanie (spowodowane dodatkową warstwą pośredniczącą, która musi być w dodatku uniwersalna, skoro ma być przenośna). - Główną domeną JAVY są tzw. aplety (programy wbudowane w strony WWW), a także aplikacje na telefony komórkowe. - Java istnieje także jako rozwiązanie serwerowe JSP jawowy odpowiednik PHP - Istotną cechą Javy jest brak wskaźników oraz automatyczne odśmiecanie pamięci.
Używające maszyny wirtualnej cd. -.NET Framework, platforma programistyczna opracowana przez Microsoft, obejmująca środowisko uruchomieniowe (Common Language Runtime CLR) i biblioteki klas dostarczające standardowej funkcjonalności dla aplikacji. - Główną zaletą jest to, że platforma nie ogranicza się do jednego języka. - Obecnie ponad 40 języków programowania jest zgodnych z.net. - Główną wadą języka jest bardzo słaba przenośność.
Skryptowe - Programy napisane w językach skryptowych nie są kompilowane aż do momentu ich wykonania. Są interpretowane w czasie uruchomienia. - Języki tego typu są bardzo wysoko poziomowe, dokonują sporej części pracy za programistę. Najczęściej zmienne są uniwersalne, dowolnych typów, pamięć przydzielana i zwalniana jest automatycznie. - Programy napisane w językach skryptowych są wolniejsze, a uniwersalność zmiennych i mała odporność na brzydki kod programu prowadzą do większych szans na błąd logiczny, a programy bywają niezrozumiałe nawet dla samego autora.
Skryptowe cd. - PHP język służący przede wszystkim do tworzenia dynamicznych stron WWW. - Perl język służący głównie do pracy z danymi tekstowymi, ale doskonale radzący sobie z wszystkimi potrzebami programisty, czy administratora systemu. - Python język został zaprojektowany tak, by zapewnić możliwie dużą czytelność kodu źródłowego. - JavaScript ("JS") to stworzony przez firmę Netscape zorientowany obiektowo skryptowy język programowania, najczęściej stosowany na stronach WWW.
Klasyczne - C/C++ Środowisko programistyczne - aplikacja służąca do: tworzenia, modyfikowania, testowania, konserwacji oprogramowania.
Środowisko programistyczne Microsoft Visual Studio - Microsoft Visual C++ Visual Studio Express - Visual C++ Express Borland C++ Builder Dev-C++ CodeLite KDevelop LabWindows/CVI MonoDevelop NetBeans C/C++ pack
Literatura Jerzy Grębosz Symfonia C++ Rozdziały: 1. Startujemy 2. Instrukcje sterujące 3. Typy 4. Operatory 5. Funkcje 6. Preprocesor 7. Tablice 8. Wskaźniki 9. Przeładowanie nazwy funkcji 11. Biblioteczna klasa std::string do operacji z tekstami 13. Struktury, unie, pola bitowe 22. Operacje wejścia/wyjścia (fragmenty)
Pierwszy program w języku programowania C++ Ciało funkcji w nawiasach Obiekt klasy ostream #include<iostream> using namespace std; int main() { cout << "Hello\n"; system("pause"); return 0; } Wstawienie pliku nagłówkowego biblioteki Określenie przestrzeni nazw Funkcja main \n znak nowej linii Zwrócenie wartości Zatrzymanie programu
Komentarze /* komentarz, który ma wiele linijek*/ // tylko jedna linia komentarza Komentarze typu /* */ nie mogą się zagnieżdżać, czyli: /* jakiś tam komentarz /* i jeszcze jeden*/ */ - BŁĄD
Zmienne Deklaracja informuje kompilator że dana nazwa reprezentuje obiekt jakiegoś typu, np.: extern int a; Definicja dodatkowo rezerwuje miejsce w pamięci, np.: int a; Inicjalizacja definicja + przypisanie wartości, np.: int a = 5; a a 5 pamięć
Nazwy zmiennych Nazwa zmiennej może być dowolnie długim ciągiem liter, cyfr oraz znaków podkreślenia, przy czym: nie może zaczynać się od cyfry, rozróżniane są duże i małe litery, nie może być słowem kluczowym.
Słowa kluczowe asm auto bool break case catch char class const const_cast continue default delete do double dynamic_cast else enum explicit export extern false float for friend goto if inline int long mutable namespace new operator private protected public register reinterpreter _cast return short signed sizeof static static_cast struct switch template this throw true try typedef typeid typename union unsigned using virtual void volatile wchar_t while and and_eq bitand bitor compl not not_eq or or_eq xor xor_eq
Stałe Stałe będące liczbami całkowitymi (zapis dziesiętny): 1 10 5 Stałe będące liczbami całkowitymi (zapis ósemkowy): 01 010 05 09 BŁĄD Stałe będące liczbami całkowitymi (zapis szesnastkowy): 0x1 0x10 0x5 0xf
Stałe Stałe będące liczbami zmiennoprzecinkowymi: 1.2 10.5 5.1 2e4 3.2e-2-5.2e2
Stałe Stałe znakowe: a x Znaki specjalne \b cofacz \f nowa strona \n nowa linia \r powrót karetki \t tabulator poziomy \v tabulator pionowy \a sygnał dźwiękowy
Stałe Stałe tekstowe: Hello Hi