Programowanie I Kornel Warwas ATH Katedra Matematyki i Informatyki
2 Algorytm Algorytm skończony, uporządkowany ciąg zdefiniowanych czynności, koniecznych do wykonania określonego zadania w ograniczonej liczbie kroków. Algorytm oznacza przepis. W życiu codziennym spotykamy się z wieloma przykładami algorytmów np. instrukcje obsługi urządzeń, opis czynności przy wymianie żarówki w samochodzie lub przepis kucharski. Rodzaje prezentacji algorytmów: Lista kroków (opisowo) Graficznie w postaci diagramów
3 Schemat blokowy (block diagram, flowchart) Diagram, graficzny sposób przedstawienia algorytmu. Składa się z figur geometrycznych (bloków) połączonych liniami zgodnie z kolejnością wykonywania czynności wynikających z przyjętego algorytmu.
4 Schemat blokowy elementy budowy (1) Ścieżka sterująca oznacza kierunek przejścia między kolejnymi blokami algorytmu Blok graniczny oznacza początek, koniec, przerwanie lub wstrzymanie wykonywania działania, np. blok startu programu START Blok wejścia-wyjścia przedstawia czynność wprowadzania danych do programu i przyporządkowania ich zmiennym dla późniejszego wykorzystania, jak i wyprowadzenia wyników obliczeń Podaj a i b Blok obliczeniowy oznacza wykonanie operacji, w efekcie której zmienią się wartości, postać lub miejsce zapisu danych a = a + 5
5 Schemat blokowy elementy budowy (2) Blok decyzyjny, warunkowy przedstawia wybór jednego z dwóch wariantów wykonywania programu na podstawie sprawdzenia warunku a = 4 Blok fragmentu/blok wywołania podprogramu część algorytmu, która stanowi odrębną całość i jest zdefiniowana na oddzielnym schemacie blokowym LOGOWANIE Blok komentarza pozwala wprowadzać komentarze wyjaśniające poszczególne części schematu, co ułatwia zrozumienie go czytającemu Komentarz
6 Schemat blokowy elementy budowy (3) Łącznik wewnętrzny służy do łączenia odrębnych części schematu znajdujących się na tej samej stronie, powiązane ze sobą łączniki oznaczone są tym samym napisem A Łącznik zewnętrzny służy do łączenia odrębnych części schematu znajdujących się na odrębnych stronach, powinien być opisany jak łącznik wewnętrzny, poza tym powinien zawierać numer strony, do której się odwołuje A 23
7 Quiz: Podaj symbol lub znaczenie Start, stop programu 1 Wprowadzanie danych 2 Komentarz 3... 4 Blok obliczeniowy 5
8 Proces tworzenie oprogramowania Algorytm Kod źródłowy (implementacja algorytmu) Program wynikowy Pomysł (potrzeba)
9 Realny proces tworzenia oprogramowania Klient Pomysł (potrzeba) Programista Algorytm Klient Akceptacja algorytmu Programista Kod źródłowy Poprawa kodu źródłowego Klienta Akceptacja Uwagi klienta Testy Produkt finalny Koniec? Wdrożenie u klienta Poprawa kodu źródłowego Klient Nowa funkcjonalność
10 Paradygmaty programowania Paradygmat programowania definiuje sposób patrzenia programisty na przepływ sterowania i wykonywanie programu komputerowego. Stanowi wzorzec przedkładany w danym okresie rozwoju informatyki ponad inne lub szczególnie ceniony w pewnych okolicznościach lub zastosowaniach Programowanie proceduralne Programowanie strukturalne Programowanie funkcyjne Programowanie imperatywne Programowanie obiektowe Programowanie uogólnione Programowanie zdarzeniowe Programowanie deklaratywne Więcej: http://pl.wikipedia.org/wiki/paradygmat_programowania
11 Krótka historia języka C++ i jego poprzedników Język C++ powstał w latach osiemdziesiątych XX wieku (pierwsza wersja pojawiła się w 1979 r.) przez Bjarne Stroustrupa jako obiektowe rozszerzenie języka C. C natomiast został zaprojektowany w późnych latach 60-tych/na początku lat 70-tych przez Dennisa Ritchie i jest językiem wyższego poziomu przeznaczonym do tworzenia np. systemów operacyjnych, translatorów i programowania systemów wbudowanych (ang. embedded system). Poprzednik języka C, z którego Ritchie zaczerpnął wiele elementów nazywał się B.
12 Właściwości języka C++ Międzyplatformowy (sprzętowo np. x86, x86-64, IA-64, Alpha, ARM, Motorola, MIPS, PowerPC, SPARC/SPARC64 i systemowo np., Windows, Linux, Andoid, ios) Wieloparadygmatowy (np. proceduralny, obiektowy i uogólniony) Posiada statyczną kontrolę typów (elementy dynamicznej kontroli typów) Szybkość Ze względu na bardzo rozbudowaną składnię oraz surowe wymogi w zakresie wydajności kodu stanowi duże wyzwanie dla twórców kompilatorów Żaden popularny kompilator nie jest w pełni zgodny z obowiązującym standardem języka
13 Standard języka C++ C++98 (ISO/IEC 14882:1998) C++03 (ISO/IEC 14882:2003) C++11 (ISO/IEC 14882:2011), nazwa przejściowa C++0x
14 Kod źródłowy Kod źródłowy (ang. source code) ciąg instrukcji zapisany w zrozumiałym dla człowieka języku programowania opisujący operacje, jakie powinien wykonać komputer przy pomocy skończonej liczby ściśle zdefiniowanych rozkazów. Jest wynikiem pracy programistów. Definicja intuicyjna: Kod źródłowy to zapis programu komputerowego w formie czytelnej dla człowieka umożliwiający jego modyfikację i rozwój. Źródło: http://pl.wikipedia.org/wiki/kod_%c5%bar%c3%b3d%c5%82owy
15 Translatory Interpreter Kompilator
16 Edytory kodu źródłowego Notatnik/Notepad2 Sublime Text Gedit SciTE jedit Notepad++ PSPad TextPad EditPlus Vim Programmer s Notepad i wiele innych
17 Kompilatory GCC (GNU Compiler Collection, g++ dla języka C++) ICC (Intel C/C++ Compiler) VC++ (Microsoft Visual C++) Borland C++ Compiler Clang++ i wiele innych
18 C++ IDE (Integrated Development Environment) Eclipse CDT Code::Blocks Embarcadero C++Builder Microsoft Visual Studio Microsoft Visual C++ Express Edition Dev-C++ (również w wersji portable) KDevelop CodeLite i wiele innych (http://en.wikipedia.org/wiki/comparison_of_inte grated_development_environments#c.2fc.2b.2b)
19 Proces kompilacji Konsolidacja Preprocesor Kompilacja Analiza składniowa Optymalizacja Generowanie kodu w języku wewnętrznym Kod źródłowy *) Rozłączna kompilacja
20 Elementy składowe kodu źródłowego w języku C++ Literały (stałe - wartości) Nazwy użytkownika (stałych, zmiennych, przestrzeni nazw, funkcji, itd.) Słowa kluczowe Operatory Znaki punktacji Dyrektywy preprocesora
21 Pierwszy program (1) Wynik: Hello world #include <iostream> using namespace std; int main() { cout<<"hello world"<<endl; return 0; } Elementy kodu źródłowego: Dyrektywy preprocesora Przestrzeń nazw Główna funkcja programu Słowa kluczowe Obiekt cout (console out) Operator << Manipulator endl Wartość zwracana z funkcji Zasady: Rozróżniane są wielkości liter Każda instrukcja kończy się średnikiem Program rozpoczyna działanie od funkcji głównej (main) Program kończy działanie gdy: wykonają się wszystkie instrukcje w funkcji głównej (main) napotka słowo kluczowe return w funkcji głównej (main)
22 Pierwszy program (2) Wariant 2 #include <iostream> int main() { std::cout<<"hello world"<<std::endl; return 0; } Wariant 3 #include <iostream> using std::cout; int main() { cout<<"hello world"<<std::endl; return 0; } Wariant 4 #include <iostream> using std::cout; using std::endl; Wynik: Hello world int main() { cout<<"hello world"<<endl; return 0; }
23 Błędy w programach Rodzaje błędów: błędy składniowe błędy logiczne Sposoby znajdywania i niwelowania błędów logicznych: Debugowanie (program typu debugger) Testy (jednostkowe, integracyjne, techniki TDD, BDD) Wykorzystanie gotowych i przetestowanych komponentów (bibliotek, np. STL, Boost, itp.)