Podsumowanie. Elementy inżynierii oprogramowania. Programowanie Proceduralne 1

Podobne dokumenty
Podstawy programowania. Wykład Funkcje. Krzysztof Banaś Podstawy programowania 1

1 Podstawy c++ w pigułce.

1 Podstawy c++ w pigułce.

METODY I JĘZYKI PROGRAMOWANIA PROGRAMOWANIE STRUKTURALNE. Wykład 02

Spis treści WSTĘP CZĘŚĆ I. PASCAL WPROWADZENIE DO PROGRAMOWANIA STRUKTURALNEGO. Rozdział 1. Wybór i instalacja kompilatora języka Pascal

Język ANSI C. Pierwsze starcie. Programowanie Proceduralne 1

2 Przygotował: mgr inż. Maciej Lasota

Programowanie strukturalne i obiektowe : podręcznik do nauki zawodu technik informatyk / Adam Majczak. Gliwice, cop

Funkcja (podprogram) void

Wykład VII. Programowanie. dr inż. Janusz Słupik. Gliwice, Wydział Matematyki Stosowanej Politechniki Śląskiej. c Copyright 2014 Janusz Słupik

Funkcje. czyli jak programować proceduralne. Programowanie Proceduralne 1

Funkcje. czyli jak programować proceduralne. Programowanie Proceduralne 1

Wstęp do Programowania, laboratorium 02

Podstawy programowania - 1

Praktyka Programowania

Podstawy programowania skrót z wykładów:

Podstawy programowania C. dr. Krystyna Łapin

Tablice (jedno i wielowymiarowe), łańcuchy znaków

Tablice, funkcje - wprowadzenie

Temat: Dynamiczne przydzielanie i zwalnianie pamięci. Struktura listy operacje wstawiania, wyszukiwania oraz usuwania danych.

Język ANSI C. Pierwsze starcie. Programowanie Proceduralne 1

Typy złożone. Struktury, pola bitowe i unie. Programowanie Proceduralne 1

Biblioteka standardowa - operacje wejścia/wyjścia

Podstawy programowania (1)

Wykład I. Programowanie. dr inż. Janusz Słupik. Gliwice, Wydział Matematyki Stosowanej Politechniki Śląskiej. c Copyright 2014 Janusz Słupik

Podstawy Informatyki. Inżynieria Ciepła, I rok. Wykład 10 Kurs C++

Tablice i struktury. czyli złożone typy danych. Programowanie Proceduralne 1

Programowanie proceduralne INP001210WL rok akademicki 2018/19 semestr letni. Wykład 6. Karol Tarnowski A-1 p.

Wskaźniki. Programowanie Proceduralne 1

Część 4 życie programu

Algorytmy. Programowanie Proceduralne 1

Wstęp do programowania INP001213Wcl rok akademicki 2017/18 semestr zimowy. Wykład 12. Karol Tarnowski A-1 p.

Jeśli chcesz łatwo i szybko opanować podstawy C++, sięgnij po tę książkę.

Wskaźniki w C. Anna Gogolińska

Zmienne, stałe i operatory

Wykład 15. Literatura. Kompilatory. Elementarne różnice. Preprocesor. Słowa kluczowe

wykład III uzupełnienie notatek: dr Jerzy Białkowski Programowanie C/C++ Język C - zarządzanie pamięcią, struktury,

Algorytmy. Programowanie Proceduralne 1

Podstawy Programowania

Instrukcje sterujące. Programowanie Proceduralne 1

Strumienie i pliki. Programowanie Proceduralne 1

Kod doskonały : jak tworzyć oprogramowanie pozbawione błędów / Steve McConnell. Gliwice, cop Spis treści. Wstęp 15.

Podstawy programowania w języku C++

tablica: dane_liczbowe

PROGRAMOWANIE w C prolog

Obsługa plików. Laboratorium Podstaw Informatyki. Kierunek Elektrotechnika. Laboratorium Podstaw Informatyki Strona 1. Kraków 2013

Temat 1: Podstawowe pojęcia: program, kompilacja, kod

Język programowania DELPHI / Andrzej Marciniak. Poznań, Spis treści

Język programowania PASCAL

Język ludzki kod maszynowy

Podstawy Programowania. Wykład 1

Wstęp do programowania INP003203L rok akademicki 2018/19 semestr zimowy. Laboratorium 2. Karol Tarnowski A-1 p.

Stałe, znaki, łańcuchy znaków, wejście i wyjście sformatowane

Podstawy Programowania C++

Wykład II Tablice (wstęp) Przykłady algorytmów Wstęp do języka C/C++

Prof. Danuta Makowiec Instytut Fizyki Teoretycznej i Astrofizyki pok. 353, tel danuta.makowiec at gmail.com

Podstawy programowania. Wykład 6 Złożone typy danych: struktury, unie. Krzysztof Banaś Podstawy programowania 1

Programowanie w C++ Wykład 1. Katarzyna Grzelak. 25 luty K.Grzelak (Wykład 1) Programowanie w C++ 1 / 38

int tab[5]; tab[1]; ciągły obszar pamięci, w którym umieszczone są elementy tego samego typu macierz [ ] - dwuargumentowy operator indeksowania

Języki i metodyka programowania. Wprowadzenie do języka C

Programowanie w C++ Wykład 3. Katarzyna Grzelak. 12 marca K.Grzelak (Wykład 1) Programowanie w C++ 1 / 35

#include <stdio.h> int main( ) { int x = 10; long y = 20; double s; s = x + y; printf ( %s obliczen %d + %ld = %f, Wynik, x, y, s ); }

Wykład 1. Program przedmiotu. Programowanie (język C++) Literatura. Program przedmiotu c.d.:

Ćwiczenie 4. Obsługa plików. Laboratorium Podstaw Informatyki. Kierunek Elektrotechnika. Laboratorium Podstaw Informatyki Strona 1.

Laboratorium 3: Preprocesor i funkcje ze zmienną liczbą argumentów. mgr inż. Arkadiusz Chrobot

Globalne / Lokalne. Wykład 15. Podstawy programowania (język C) Zmienne globalne / lokalne (1) Zmienne globalne / lokalne (2)

Laboratorium Informatyka (I) AiR Ćwiczenia z debugowania

Argumenty wywołania programu, operacje na plikach

Wstęp do programowania. Wykład 1

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!

Podstawy programowania. Wykład 3 Konstrukcje sterujące. Krzysztof Banaś Podstawy programowania 1

Informatyka I. Klasy i obiekty. Podstawy programowania obiektowego. dr inż. Andrzej Czerepicki. Politechnika Warszawska Wydział Transportu 2018

Język C zajęcia nr 11. Funkcje

wykład II uzupełnienie notatek: dr Jerzy Białkowski Programowanie C/C++ Język C - funkcje, tablice i wskaźniki wykład II dr Jarosław Mederski Spis

Programowanie strukturalne i obiektowe

Programowanie I C / C++ laboratorium 02 Składnia pętli, typy zmiennych, operatory

I - Microsoft Visual Studio C++

Wykład. Materiały bazują częściowo na slajdach Marata Dukhana

Instrukcja wyboru, pętle. 2 wykład. Podstawy programowania - Paskal

Wstęp do programowania obiektowego. Wykład 1 Algorytmy i paradygmaty Podstawowe pojęcia PO

Tablice, funkcje, wskaźniki - wprowadzenie

Strona główna. Strona tytułowa. Programowanie. Spis treści. Sobera Jolanta Strona 1 z 26. Powrót. Full Screen. Zamknij.

Informatyka 1. Plan dzisiejszych zajęć. zajęcia nr 1. Elektrotechnika, semestr II rok akademicki 2008/2009

Wstęp do programowania

DYNAMICZNE PRZYDZIELANIE PAMIECI

Reprezentacja symboli w komputerze. Znaki alfabetu i łańcuchy znakowe. Programowanie Proceduralne 1

Funkcje zawarte w bibliotece < io.h >

JĘZYKI PROGRAMOWANIA Z PROGRAMOWANIEM OBIEKTOWYM. Wykład 5

Szablony klas, zastosowanie szablonów w programach

Podstawy programowania. Wykład 6 Wskaźniki. Krzysztof Banaś Podstawy programowania 1

TABLICE W JĘZYKU C/C++ typ_elementu nazwa_tablicy [wymiar_1][wymiar_2]... [wymiar_n] ;

Podstawy programowania komputerów

Rok akademicki: 2013/2014 Kod: JFT s Punkty ECTS: 5. Poziom studiów: Studia I stopnia Forma i tryb studiów: Stacjonarne

Podstawy programowania 1

Język C : programowanie dla początkujących : przewodnik dla adeptów programowania / Greg Perry, Dean Miller. Gliwice, cop

Podstawy programowania w języku C++

1. Nagłówek funkcji: int funkcja(void); wskazuje na to, że ta funkcja. 2. Schemat blokowy przedstawia algorytm obliczania

1. Wartość, jaką odczytuje się z obszaru przydzielonego obiektowi to: a) I - wartość b) definicja obiektu c) typ oboektu d) p - wartość

Wstęp do programowania INP001213Wcl rok akademicki 2017/18 semestr zimowy. Wykład 2. Karol Tarnowski A-1 p.

Transkrypt:

Podsumowanie. Elementy inżynierii oprogramowania. Programowanie Proceduralne 1

To było Zadanie algorytmiczne, specyfikacja Podstawy analizy algorytmów: poprawność, złożoność Podstawy języka C: typy (int, float, char), instrukcje sterujące (while, do while, if, else), operatory arytmetyczne, logiczne, przypisania (+ = - * / % && < >!= ) funkcje, zakres zmiennych (lokalne, globalne) tablice jednowymiarowe, łańcuchy, struktury wskaźniki, strumienie Paradygmaty: programowanie proceduralne i strukturalne Programowanie Proceduralne 2

Czego nie było? Dynamiczny przydział pamięci Pliki nagłówkowe i źródłowe, biblioteki statyczne, dynamiczne Typy danych, m.in.: unie, pola bitowe, typedef Tablice wielowymiarowe (tablice tablic) Inne złożone struktury danych: listy, kolejki, stosy, drzewa,... Wskaźniki do funkcji, funkcja argumentem funkcji Obsługa błędów systemowych Operacje na wskaźnikach Instrukcje preprocesora i makra Masa przydatnych funkcji z biblioteki standardowej itd... Programowanie Proceduralne 3

Inżynieria oprogramowania Inżynieria oprogramowania zajmuje się wszelkimi aspektami produkcji oprogramowania we wszystkich fazach cyklu życia oprogramowania Kaskadowy Iteracyjny Źródło: http: // pl. wikipedia. org/ wiki/ Model_ kaskadowy, Ilona Bluemke, Inżynieria oprogramowania Programowanie Proceduralne 4

Analiza wymagań: opis funkcjonalności i sposób ich realizacji Modelowanie systemu: organizacja systemu w kategoriach informatycznych. Modele danych, model architektury systemu, model przepływ danych, modele zjawisk. Etap projektowy: wybór narzędzi, środków technicznych, rozwiązań algorytmicznych. Programowanie: implementacja, konserwacja kodu, testowanie Błędy możliwe na każdym etapie, kumulacja błędów Programowanie Proceduralne 5

Projektowanie rozwiązań Hierarchiczne podejście do rozwiązania problemu metodyka zstępująca (top-down), dedukcyjna. Dekompozycja problemu, od ogółu do szczegółu, podział większego programu na podprogramy metodyka wstępująca (bottom-up), syntetyczna. Modularne podejście do tworzenia programu. Składanie rozwiązania z istniejących małych narzędzi Programowanie Proceduralne 6

Zanim zaczniesz kodować Właściwa definicja problemu - zasadnicza część programowania Dobór właściwych struktur danych może znacznie uprościć problem Dobry programista jest trochę leniwy - najpierw pomyśl potem programuj Programowanie Proceduralne 7

Redagowanie kodu w C Język C bardzo elastyczny, nieostrożne używanie oznacza kłopoty Czytelność przede wszystkim Spójność stylistyczna - w całym kodzie jednakowo Zrozumiałe i jednolite nazwy zmiennych i funkcji. Nazwa nie powinna wprowadzać w błąd. wypiszwiersz(), WypiszWiersz(), wypisz_wiersz() Małe i duże litery są rozróżnialne Nazwy zmiennych zazwyczaj z małej litery np. indeksy i, j, k Stałe symboliczne i makra dużymi literami #define MAX 500 Programowanie Proceduralne 8

Dokumentowanie kodu Opis funkcji / Zwraca p o z y c j e wzorca w w l a n c u c h u t / int strindex ( char t, char w ) {... } Nagłówek pliku: autor, data, licencja, wersja Nie komentuj oczywistych rzeczy, raczej opis sensu operacji i = i + 1 ; / Z w i e k s z e n i e l i c z n i k a o 1 / i = i + k ; / U s t a w i e n i e i n d e k s u na o s t a t n i element / W C lepiej nie używać komentarzy // Jeśli dokumentacja nie powstaje równolegle z programem nie powstanie nigdy! Dokumentacja techniczna, generatory np. Doxygen Programowanie Proceduralne 9

Graficzna postać kodu 1 # include <s t d i o. h> 2 int nwd ( int a, int b ) {int c ; 3 while ( b!=0) {c=a%b ; a=b ; b=c ; } 4 return a ; } int main ( ) { 5 int a, b ; printf ( "Podaj dwie li" 6 "czby calkowite : " ) ; scanf ( "%d %d", 7 &a,&b ) ; printf ( "NWD (%d,%d) = %d\n", 8 a, b, nwd ( a, b ) ) ; return 0 ; } nwd balagan.c Czytelność przede wszystkim The International Obfuscated C Code Contest Programowanie Proceduralne 10

1 #include<s t d i o. h> 2 int nwd ( int a, int b ) 3 { 4 int c ; 5 while ( b!=0) 6 { 7 c=a%b ; 8 a=b ; 9 b=c ; 10 } 11 return a ; 12 } 13 int main ( ) 14 { 15 int a, b ; 16 printf ( " Podaj dwie liczby calkowite : " ) ; 17 scanf ( "%d %d",&a,&b ) ; 18 printf ( "NWD (%d,%d) = %d\n", a, b, nwd ( a, b ) ) ; 19 return 0 ; 20 } nwd balagan2.c Programowanie Proceduralne 11

Wcięcia Styl K&R vs. Allman Styl Allmana (BSD) int nwd ( int a, int b ) { int c ; while ( b!= 0) { c = a % b ; a = b ; b = c ; } return a ; } Styl K&R (GNU) int nwd ( int a, int b ) { int c ; while ( b!= 0){ c = a % b ; a = b ; b = c ; } return a ; } Programowanie Proceduralne 12

Wcięcia Graficzna postać kodu Wewnętrzne bloki instrukcji wcięte względem zewnętrznych Instrukcje w jednym bloku zaczynają się w tej samej kolumnie Nie przesadzaj z długością linii (max. 78 znaków) Oddzielaj deklaracje zmiennych od instrukcji lub grupy spójnych instrukcji pustymi liniami Długie ciągi instrukcji warto rozbić na kilka linii i otoczyć nawiasami while ( a < b && wplata ( x )!= 1 ) { if ( w!= NULL ) { a = a 1 + sin ( PI 2 ) ; } } Python - wcięcia elementem składni języka Programowanie Proceduralne 13

Kwestia stylu Nie więcej niż jedna instrukcja w linii Nie deklaruj więcej niż jedną zmienną w linii Otwierając nawias od razu go zamknij {([])} Nawiasy () przyklej do nazwy funkcji ale oddziel od instrukcji if i while void czy_parzysta ( int i ) { if ( i%2 == 0 ) printf ( " Parzysta!\n" ) ; } Programowanie Proceduralne 14

Kwestia stylu Zawsze inicjuj zmienne Nie używaj magicznych liczb int main ( ) { /... / if ( x == 42 ) wystrzel_rakiete ( ) ; } Lepiej zdefiniuj stałą # define KONIEC ODLICZANIA 42 int main ( ) { /... / if ( x == KONIEC_ODLICZANIA ) wystrzel_rakiete ( ) ; } Programowanie Proceduralne 15

Programowanie proceduralne i strukturalne Programowanie proceduralne. Unikaj zmiennych globalnych. Przekazuj dane do funkcji przez argumenty. Unikaj długich funkcji. Dobrze gdy w całości mieści się na ekranie. Funkcje powinny realizować jedną operację, jednak w sposób pełny i skończony Unikaj powtórzeń kodu - pisz funkcje. Don t repeat yourself (DRY), once and only once (OAOO) Strukturalność w programowaniu. Nie używaj instrukcji skoku Programowanie Proceduralne 16

Less is more Less is more Konstruktor wie, iż osiągnął doskonałość, nie wtedy, gdy już nic nie można dodać, lecz wtedy, gdy już nic nie da się ująć. Antoine de Saint-Exupéry Jednak nie upraszczaj na siłę void strcpy ( char s [ ], char t [ ] ) { int i=0; while ( t [ i ]!= \0 ) { s [ i ] = t [ i ] ; i = i + 1 ; } s [ i ] = \0 ; } void strcpy ( char s, char t ) { while ( s++= t++); } Programowanie Proceduralne 17

Obsługa błędów Jeżeli coś może się nie udać, to się nie uda. Prawo Murphy ego Sytuacje wyjątkowe w funkcjach Zanim użyjesz nieznanej funkcji przeczytaj dokumentację! Wartość zwracana: NULL, EOF, inna specjalna wartość if ( fopen ( "plik.txt", "r" )!= NULL ) { / OK / } Plik nagłówkowy errno.h i zmienna errno kodująca błąd Kody błędów różne na różnych platformach Funkcja perror() wypisuje komunikat błędu x = sqrt ( 1) ; if ( errno == EDOM ) perror ( "Blad " ) ; errno.c Programowanie Proceduralne 18

Obsługa błędów Zabezpieczanie sensowności danych wejściowych niepoprawne dane, zasada GIGO Garbage In, Garbage Out idiotoodporność, przewiduj nawet najgłupsze dane wejściowe przepełnienie bufora scanf ( "%s", tablica ) ; gets ( tablica ) ; Błędy w aplikacjach konsolowych Standardowy strumień błędów stderr fprintf ( stderr, "Don\ t panic!!!\n" ) ; Status zakończenia programu. 0 to sukces. void exit(int status); /* stdlib.h */ Programowanie Proceduralne 19

W cuglach testów Poprawność algorytmów: niezmienniki, zbieżność, skończoność Testy poprawności implementacji: asercje assert( wyrazenie ) /* assert.h */ Przerywa program gdy predykat jest fałszywy. 1 # include <a s s e r t. h> 2 int main ( ) 3 { 4 int i=0, t [ 1 0 ] ; 5 6 while ( i <= 10 ) 7 { 8 assert ( i < 10 ) ; 9 t [ i ] = i ; 10 i = i + 1 ; 11 } 12 return 0 ; 13 } assert.c Programowanie Proceduralne 20

W cuglach testów Debugowanie - kontrolowane wykonywanie kodu Profilowanie - pomiary czasu i zajętej pamięci Testy funkcjonalności: testy jednostkowe, testowanie pojedynczych funkcji Testy aplikacji - programy testujące programy Automatyzacja testów To, że nie znaleziono błędu, nie znaczy, że go tam nie ma Programowanie Proceduralne 21

Najtańszymi, najszybszymi i najsolidniejszymi elementami systemu komputerowego są te, których w nim nie ma Gordon Bell, DEC Programowanie Proceduralne 22

Literatura dodatkowa Ilona Bluemke, Inżynieria oprogramowania Dawid Czerner, Wykład: Inżynieria oprogramowania Wikipedia: Indent style, Asercja Code Smell, http://c2.com/xp/codesmell.html C Coding Standards, http://users.ece.cmu.edu/~eno/coding/ccodingstandard.html Recommended C Style and Coding Standards, Bell Labs http://www.doc.ic.ac.uk/lab/cplus/cstyle.html Programowanie Proceduralne 23

Literatura dodatkowa J. Bentley, Perełki oprogramowania, WNT, Warszawa, 2001. errno.h - system error numbers Linux Programmer s Manual: man errno assert Errno Codes by Platform, http://www.ioplex.com/~miallen/errcmp.html Programowanie Proceduralne 24