WYKAADY W01 v1.0 (2014) Podstawy programowania (dr.inż Marcin Głowacki) 1
PODSTAWY
PROGRAMOWANIA
Wykład 1
PROWADZCY: dr inż. Marcin Głowacki
E-Mail: Marcin.Glowacki@pwr.wroc.pl
Pok.907 C-5
Wrocław 2014
WYKAADY W01 v1.0 (2014) Podstawy programowania (dr.inż Marcin Głowacki) 2
LITERATURA PODSTAWOWA:
[1] Grębosz J., Symfonia C++, Standard, Editions 2000,
Kraków, 2005, 2008, 2010
[2] Stroustrup B., Język C++, WNT, Warszawa 2004
[3] Eckel B., Thinking in C++, Helion, Gliwice 2002
[4] Wróblewski P., Algorytmy, struktury danych i techniki
programowania. Helion, 2009
LITERATURA UZUPEANIAJCA:
[1] Kernighan R., Ritchie C., Język C, PWN, Warszawa
[2] Segewick C., Algorytmy w C++. W.N.-T., Warszawa,
1999
[3] Lippman S. B., Lajoie J., Podstawy języka C++, WNT,
Warszawa 2003
Neapolitan R., Naimipour K., Podstawy algorytmów z
przykładami w C++. Wyd. Helion, 2004
ZALICZENIE
- test końcowy z wykładu
Ocena końcowa = 1/3*ćwiczeń + 1/3*laboratorium + 1/3*wykład
WYKAADY W01 v1.0 (2014) Podstawy programowania (dr.inż Marcin Głowacki) 3
1. PRZEGLD PARADYGMATÓW PROGRAMOWANIA:
Paradygmat programowania jest to wzorzec programowania przedkładany w danym okresie
rozwoju informatyki ponad inne lub szczególnie ceniony w pewnych okolicznościach lub
zastosowaniach - zbiór mechanizmów jakich programista używa pisząc program.
Przykłady paradygmatów:
- programowanie imperatywne - (Assembler, Basic, Fortran, Pascal, C) to prosty sposób
programowania, w którym program postrzegany jest jako szereg instrukcji dla komputera.
Związany jest ściśle z budową sprzętu komputerowego o architekturze von Neumanna, w
którym wykonywane są poszczególne instrukcje w kodzie maszynowym zmieniające
globalny stan maszyny
o sekwencja poleceń zmieniających krok po kroku stan maszyny, czyli zawartość
pamięci oraz rejestrów i znaczników procesora
o przykładowo, instrukcje podstawienia działają na danych pobranych z pamięci i
umieszczają wynik w pamięci tzw. zmienne symbolizują komórki pamięci
- programowanie proceduralne - procedury i powroty (return), GOSUB (BASIC), CALL
FAR i CALL NEAR(ASSEMBLER), polega na dzieleniu kodu na procedury, czyli
fragmenty wykonujące ściśle określone operacje. Procedury nie powinny korzystać ze
zmiennych globalnych (w miarę możliwości), lecz pobierać i przekazywać wszystkie dane
(czy też wskazniki do nich) jako parametry wywołania.
o program był traktowany jako seria procedur, działających na danych
o procedura (funkcja) jest zestawem specyficznych, wykonywanych jedna po drugiej
instrukcji.
- programowanie strukturalne - (PASCAL) hierarchiczne dzielenie kodu na bloki, z
jednym punktem wejścia i jednym lub wieloma punktami wyjścia. Chodzi o nieużywanie
lub ograniczenie instrukcji skoku (goto). Dobrymi strukturami są, np. instrukcja
warunkowe (if, if...else), pętle (while, repeat), wyboru (case, ale nie switch z C itp.).
Strukturalność zakłócają instrukcje typu: break, continue, switch (w C itp.),
o idea główna to dziel i rządz. - każde zadanie jest rozbijane na zestaw mniejszych
zadań składowych
- programowanie obiektowe (C#) zbiór porozumiewających się ze sobą obiektów,
zawierających w sobie dane i metody przetwarzania tych danych, czyli wykonywania
pewnych operacji na tych danych, programowanie obiektowe wzbogacone o dziedziczenie i
polimorfizm kod programu sam się orientuje z jakim typem obiektu ma do czynienia i
dobiera właściwą funkcję realizującą domyślną akcję (podobnie jak
przeładowanie/przeciążenie funkcji i operatorów, które same rozpoznają z jakimi
argumentami mają do czynienia)
o pojawia się pojęcie klasy i obiektów tej klasy
o obiekty zawierają dane w postaci zmiennych i metody operujące na tych danych
o łatwa rozbudowa i korzystanie z elementów wcześniej zdefiniowanych
o związanie funkcji ze strukturą przetwarzanych danych
o abstrakcja, dziedziczenie i hermetyzacja danych
o polimorfizm = wiele form jedna nazwa może przybierać wiele form, forma
aktualna jest związana z daną klasą obiektu
o tęzyki imperatywno-obiektowe to: C++, Perl, PHP, Java, Python
WYKAADY W01 v1.0 (2014) Podstawy programowania (dr.inż Marcin Głowacki) 4
- programowanie zdarzeniowe - program jest cały czas bombardowany zdarzeniami
(ang.events), na które musi odpowiedzieć, i że przepływ sterowania w programie jest
całkowicie niemożliwy do przewidzenia z góry. Programowanie zdarzeniowe jest
dominującym typem programowania GUI.
o zdarzenia to naciśnięcia myszy, klawiszy, żądania odświeżenia przez system
okienkowy, różne zdarzenia sieciowe itd.
o mocno powiązane ze środowiskami wieloprocesowymi i z graficznymi
środowiskami systemów operacyjnych oraz z programowaniem obiektowym.
KLASYCZNE PROJEKTOWANIE PROGRAMU:
- Rozpoznanie i analiza problemu
-
- Projektowanie programu
o Identyfikacja zachowań systemu: kto/co -> akcja -> kogo/czego -> rezultat (gracz-
>rzuca ->kostką -> liczba pomiędzy 1 i 6)
Identyfikacja struktur danych
Wskazanie bloków funkcjonalnych algorytm (minimum blokowy)
o Usystematyzowanie i uszczegółowienie
Tworzenie nowych typów i struktur danych (jeśli są potrzebne)
Ustalenie hierarchii zmiennych i ich zasięgu
Określenie wzajemnych zależności która funkcje wydają rozkazy, a która
spełniają polecenia, które funkcje wymieniają się usługami GRAF
WSPÓAPRACY
Podsystemy znajdowanie grup obiektów, które realizują odrębne
funkcjonalnie zadania, np. obsługa menu
o Składanie modelu określanie stanów, sekwencji działań oraz cykli życiowych dla
danych oraz funkcji
- Implementacja
- Testowanie
- Uruchomienie i poprawki
ANALIZA PROBLEMU
" Od szczegółu do ogółu (wstępujące)
niepodzielne części łączy się w większe fragmenty
" Od ogółu do szczegółu (zstępujące)
bloki funkcjonalne uściśla się do operacji elementarnych
" W praktyce TECHNIKI MIESZANE
" Struktura danych
WYKAADY W01 v1.0 (2014) Podstawy programowania (dr.inż Marcin Głowacki) 5
ALGORYTM - SCHEMAT BLOKOWY
" START, STOP
START
" OPERACJA WYKONAWCZA
i=0
j=j+1
" OPERACJA WARUNKOWA
if i<3
NIE
TAK
podaj k
" OPERACJA WEJŚCIA/ WYJŚCIA
wyświetl
i
WYKAADY W01 v1.0 (2014) Podstawy programowania (dr.inż Marcin Głowacki) 6
IMPLEMENTACJA
Język programowania i narzędzia programistyczne
- stopień złożoności języka
- poziom abstrakcji realizowanych funkcji
- projekty z kodem z różnych języków
Podział na odrębne moduły tworzone w zespole programistów
Właściwe zarządzanie projektem
Język C <-> Assembler
#include
_TEXT segment byte public 'CODE
; void main()
int main() {
_main proc near
printf("Hello world");
; {
}
; printf("Hello world");
push offset DGROUP:s@
call near ptr _printf
pop cx
; }
ret
_main endp
Poziomy maszynowe
L4 C++
int A, B, C; //fragment danych
&
A=B+C; //fragment programu
L3 Asembler (Intel x86) L1 kod maszynowy (Intel x86)
(.data) SEGMENT danych
cc dw (?) ; (offset cc = 0103h)
bb dw (?) ; (offset bb = 0105h)
aa dw (?) ; (offset aa = 0107h)
(.code) SEGMENT programu
...
(*) mov ax, cc 1010 0001 (A1h)
0000 0011 0000 0001 (0103h)
(*+3) add ax, bb 0000 0011 0000 0110 (0306h)
0000 0101 0000 0001 (0105h)
(*+7) mov aa, ax 1010 0011 (A3h)
0000 0111 0000 0001 (0107h)
WYKAADY W01 v1.0 (2014) Podstawy programowania (dr.inż Marcin Głowacki) 7
MODEL PRZETWARZANIA
wpływ na sposób zakodowania programu
- z podziałem czasu (przełączanie zadań)
- czasu rzeczywistego
- równoległe (wiele procesorów)
- rozproszone (w sieci komputerowej, klastrze)
Zarządzający
klastrem
KOMP
KOMP
KOMP
KOMP
SWITCH
KOMP
KOMP
KOMP
KOMP
Legenda
KOMP
Komputer wchodzący w skład klastra
SWITCH Przełącznik sieciowy np., Gigabit Ethernet
Bardzo szybkie łącze np., Gigabit Ethernet
WYKAADY W01 v1.0 (2014) Podstawy programowania (dr.inż Marcin Głowacki) 8
KOMPILACJA i KONSOLIDACJA
Pseudo-kompilatory generują tzw. bajtkod kod pośredni, który na etapie wykonywania jest
przekształcany w kod maszynowy mikrokod wykonywany wewnątrz procesora. Mikrokod jest
różny dla różnych typów procesora.
Tekst programu
Moduły - objects Plik
(.cpp)
(.o lub .obj) wykonywalny
Program
Program
Program Program
Konsolidator
Kompilator
wykonalny
wynikowy
zródłowy ładujący
Inne
Procesor Procesor Procesor Procesor
moduły
Kod
Pseudo-
Kod
Interpreter
pośredni
kompilator maszynowy
Inne moduły z kodem pośrednim:
mogą pochodzić z innych kompilatorów dowolnych innych języków programowania:
- Pascal, Asembler, Fortran, Cobol, Modula 2 itd.
Program
Program
Kompilator
zródłowy
wynikowy
C
C
Program
Kompilator
Program
zródłowy
C++
wynikowy
C++
Program
Program
Program
Kompilator
zródłowy
Konsolidator
wykonalny
wynikowy
Pascal
Pascal
Program
Program
Kompilator
zródłowy
wynikowy
Asembler
Asembler
Program
Program
Kompilator
zródłowy
wynikowy
Fortran
Fortran
WYKAADY W01 v1.0 (2014) Podstawy programowania (dr.inż Marcin Głowacki) 9
PREPROCESOR KOMPILATORA
" Przed uruchomieniem kompilatora
" Dyrektywy rozpoczynające się od: # (hash, krzyżyk)
#include //dla domyślnej lokalizacji plików nagłówkowych
lub
#include nazwa //dla plików nagłówkowych z bieżącej kartoteki
" Definicja symbolu lub stałej:
#define NMAX 100
#define cośtam
" Dyrektywa warunkowa:
Przykład:
#ifndef p_sumaP //jeśli wcześniej nie było zdefiniowane p_sumaP
#define p_sumaH /*to trzeba zdefiniować p_sumaH i dołączyć
odpowiedni plik nagłówkowy */
#include p_suma.h //Umieszczenie treści pliku p_suma.h w tym miejscu
#endif
Inny przykład:
#define unix //informacja na początku, że kompilacja w systemie Unix
.....
#ifdef unix
#include unix.h //dołącz jakiś własny plik nagłówkowy unix.h
#endif
#ifndef unix //dla innego systemu niż unix
#include system.h //dołącz jakiś własny plik nagłówkowy system.h
#endif
PROGRAM WYKONALNY
" Kompilacja programu zródłowego
" Binarny moduł wynikowy typu obiekt
" Aączenie modułów - Link
" Program uruchamialny: .com, .exe
" Uruchamianie krokowe - Debug
URUCHOMIENIE i PRZETESTOWANIE
Faza wdrożenia i obserwacja zachowania programu w warunkach rzeczywistej eksploatacji
Odnajdowanie przyczyn błędnego działania programu (ang. TROUBLESHOOTING)
" Błędy kompilacji (składniowe)
" Błędy logiczne
" Błędy funkcjonalne
" Pomyłki fazy projektowania
Obsługa potencjalnych błędów użytkownika
" Zmiany i rozszerzenia
WYKAADY W01 v1.0 (2014) Podstawy programowania (dr.inż Marcin Głowacki) 10
ZALECENIA OGÓLNE:
1. Funkcje:
e"10 linijek programu,
wielokrotne powtórzenia.
wcięcia w tekście programu
spójny system nazw, np. zgodne z systemem węgierskim
2. Wyczerpujące komentarze w programach:
komentarz do końca linii: //
for (i=1;i<5;i++) { //pętelka służąca do pokazu zaleceń ogólnych dla studentów
if (iLiczba == 7)
. . .
}
blok komentarza: /* blok */
for (i=1;i<5;i++) { /*inna pętelka z wykluczoną instrukcją, która nie jest już potrzebna, ale
może się przydać pózniej w fazie uruchomienia. Po zakończeniu fazy uruchomienia takie
zbędne instrukcje i bloki komentarzy można usunąć np., żeby nie dawać sobie powodu do
wstydu i wyśmiewania przez następne pokolenia
if (iLiczba == 7) */
iLiczba--;
. . .
}
ZAOTA ZASADA
(nieznanego autora - przekazywana z pokolenia na pokolenie)
Cyt. rady starszego kolegi:
Program działa tak jak go napisałeś,
a nie tak jak Ci się wydawało, że go napisałeś.
Wyszukiwarka
Podobne podstrony:
PodstawyAutomatyki w01
MES JCh MM WW OKnO w01 podstawowe pojecia
W01 Podstawowe poj
Wyk6 ORBITA GPS Podstawowe informacje
BD 2st 1 2 w01 tresc 1 1
Podstawowe informacje o Rybnie
3 podstawy teorii stanu naprezenia, prawo hookea
zestawy cwiczen przygotowane na podstawie programu Mistrz Klawia 6
podstaw uniw
Jezyk angielski arkusz I poziom podstawowy (5)
07 GIMP od podstaw, cz 4 Przekształcenia
Podstawy dzialania routerow i routingu
więcej podobnych podstron