Metodyki i technki programowania 1 2011
Metodyki i techniki
Metodyki i techniki
programowania 1
programowania 1
" Kierunek: elektronika i telekomunikacja
" Kierunek: elektronika i telekomunikacja
" Studia: I stopnia
" Studia: I stopnia
Programowanie
Programowanie
C++
C++
B. Butryło 1
Metodyki i technki programowania 1 2011
Języki programowania 3
3
Klasyfikacja
Klasyfikacja języków
języków
maszynowe
maszynowe
asemblery
asemblery
niskiego poziomu
niskiego poziomu
makroasemblery
makroasemblery
potokowe
interpretowane
potokowe
interpretowane
proceduralne
kompilowane
proceduralne
kompilowane
wysokiego poziomu
wysokiego poziomu
Języki
blokowo-strukturalne
Języki
blokowo-strukturalne
obiektowe
obiektowe
do przetwarzania danych (Cobol, PL/1)
do przetwarzania danych (Cobol, PL/1)
do symulacji obiektów (Simula, GPSS, CSL)
do symulacji obiektów (Simula, GPSS, CSL)
specjalistyczne
specjalistyczne
konwersacyjne (Forcon, Jean)
konwersacyjne (Forcon, Jean)
inne
inne
C ... C++ ... Java 4
4
Ewolucja
Ewolucja języków: porównanie C i C++
języków: porównanie C i C++
C C++
C C++
" Programowanie proceduralne, imperatywne.
" Programowanie proceduralne, imperatywne.
" Instrukcje strukturalne: podejmowanie decyzji (if), wybór jednego z wielu przypadków (switch),
" Instrukcje strukturalne: podejmowanie decyzji (if), wybór jednego z wielu przypadków (switch),
instrukcje iteracyjne (for, while, do ... while).
instrukcje iteracyjne (for, while, do ... while).
" Zbiór typów podstawowych: całkowitoliczbowe, zmiennopozycyjne, znakowe.
" Zbiór typów podstawowych: całkowitoliczbowe, zmiennopozycyjne, znakowe.
" Mo\liwość tworzenia i wykorzystania typów pochodnych: tablice, struktury, unie.
" Mo\liwość tworzenia i wykorzystania typów pochodnych: tablice, struktury, unie.
" Identyczne: zestaw podstawowych słów kluczowych, kolejność operatorów,
" Identyczne: zestaw podstawowych słów kluczowych, kolejność operatorów,
operowanie na wskaznikach, ...
operowanie na wskaznikach, ...
Programowanie Programowanie proceduralne i
Programowanie proceduralne Programowanie proceduralne i
proceduralne
programowanie obiektowo
programowanie obiektowo
zorientowane
zorientowane
" " Grupowanie instrukcji (funkcje).
Grupowanie instrukcji (funkcje). " " Program jako zbiór obiektów.
Program jako zbiór obiektów.
" " Program jako zbiór funkcji.
Program jako zbiór funkcji. " " Obiekt składa się z:
Obiekt składa się z:
" " Funkcja: zbiór instrukcji wykonujących operacje
Funkcja: zbiór instrukcji wykonujących operacje " " atrybutów/dane/pola - zestawów danych,
atrybutów/dane/pola - zestawów danych,
na lokalnym i/lub ogólnym zestawie danych.
na lokalnym i/lub ogólnym zestawie danych.
" " usług/metod jednej lub kilku funkcji,
usług/metod jednej lub kilku funkcji,
" " Funkcje komunikują się między sobą przez
Funkcje komunikują się między sobą przez które mogą przetwarzać atrybuty.
które mogą przetwarzać atrybuty.
przekazywanie danych (argumentów).
przekazywanie danych (argumentów).
" " Struktura klas ma postać hierarchiczną.
Struktura klas ma postać hierarchiczną.
" " Obiekty komunikują się przez metody/
Obiekty komunikują się przez metody/
komunikaty.
komunikaty.
B. Butryło 2
Metodyki i technki programowania 1 2011
C ... C++ ... Java 5
5
Ewolucja
Ewolucja języków
języków
C++ Java
C++ Java
" Język ogólnego stosowania.
" Język ogólnego stosowania.
" Programowanie proceduralne lub
" Programowanie obiektowe.
programowanie obiektowo-zorientowane.
" Język kompilowany.
" Język kompilowano-interpretowany.
" Język niezale\ny od architektury
" Język niezale\ny od architektury
(wysokiego poziomu).
(wysokiego poziomu).
" Zmienna / zró\nicowana reprezentacja
" Stała reprezentacja danych.
danych.
Wbudowany Unicode.
" Język o słabo określonych typach danych,
" Ścisła kontrola typów zmiennych i ich
ale o ścisłej kontroli tych typów.
inicjowania przed u\yciem.
" Brak automatycznego zarządzania
" Bezpieczeństwo (wirtualna maszyna,
pamięcią.
automatyczna obsługa pamięci).
" Programowanie z u\yciem wątków.
" Wbudowane narzędzia pracy w sieci.
" Przenaszalność kodów zródłowych.
" Przenaszalność kodu wynikowego (!?).
" Język programowania systemowego (np.
" Język internetu.
Unix, interfejs MS Windows).
" Wydajność (ok. 50 100% C++).
Ogólna charakterystyka C++, Java 6
6
C/C++:
C/C++: kompilowany
kompilowany
Plik Plik Plik
zródłowy 1 zródłowy 2 zródłowy N
*.C *.C *.C
*.CPP *.CPP *.CPP Pliki Pliki Pliki
*.CXX *.CXX *.CXX
nagłówkowe nagłówkowe nagłówkowe
*.obj - niewykonywalny plik,
*.obj - niewykonywalny plik,
zawierający instrukcje
zawierający instrukcje
maszynowe specyficzne dla danej
maszynowe specyficzne dla danej
Kompilator (compiler)
Kompilator (compiler)
Kompilator (compiler)
platformy sprzętowej (odwołania
platformy sprzętowej (odwołania
do funkcji CPU) i OS (np.
do funkcji CPU) i OS (np.
odwołania do API). Powstaje kod
odwołania do API). Powstaje kod
Plik Plik Plik
maszynowy niezale\ny od języka
maszynowy niezale\ny od języka
obiektowy obiektowy obiektowy
programowania ale zawierający
programowania ale zawierający
1 2 N
odwołania do zastosowanego
odwołania do zastosowanego
*.OBJ *.OBJ *.OBJ
środowiska.
środowiska.
Standardowa biblioteka A
Standardowa biblioteka B
Konsolidator tworzy wykonywalny
Konsolidator tworzy wykonywalny
Konsolidator (linker)
Konsolidator (linker)
Konsolidator (linker)
Standardowa biblioteka C
plik (do uruchomienia), przez
plik (do uruchomienia), przez
połączenie plików *.obj. Pliki *.obj
połączenie plików *.obj. Pliki *.obj
...
mogą być z ró\nych środowisk.
mogą być z ró\nych środowisk.
Plik wykonywalny, np.:
Plik wykonywalny, np.:
Powstaje kod maszynowy zale\ny
Powstaje kod maszynowy zale\ny
*.EXE *.*
*.EXE *.*
od platformy.
od platformy.
B. Butryło 3
+
+
+
+
+
+
+
+
+
+
+
+
+
+
C
C
+
+
C
C
C
C
C
C
+
+
+
+
+
+
+
+
+
+
+
+
+
+
C
C
+
+
C
C
C
C
C
C
Metodyki i technki programowania 1 2011
Ogólna charakterystyka C++, Java 7
7
Java:
Java: kompilowany+interpretowany
kompilowany+interpretowany
public class test
{
Plik Plik double alfa, beta;
...
zródłowy 1 zródłowy 2
metoda_test()
{
alfa = 3.14;
*.java *.java
beta = 1;
...
bytecode, b-code: kod binarny
bytecode, b-code: kod binarny
dla wirtualnej maszyny javy
dla wirtualnej maszyny javy
javac (kompilator)
javac (kompilator)
javac (kompilator) (JVM). Mo\liwe tworzenie b-kody
(JVM). Mo\liwe tworzenie b-kody
z innych języków i uruchomienie
z innych języków i uruchomienie
przez JVM.
przez JVM.
Kod binarny interpretowany W przypadku Javy realizowane
Kod binarny interpretowany W przypadku Javy realizowane
pliki mają zwykle rozszerzenia
pliki mają zwykle rozszerzenia
*.class
*.class
*.class lub *.jar
*.class lub *.jar
Super-
PC
komp.
Mac
Java Java Java
Virtual Virtual Virtual
Machine Machine Machine
Słowa kluczowe
Słowa kluczowe
w
w
C++
C++
B. Butryło 4
Metodyki i technki programowania 1 2011
C ... C++ ... Java 9
9
słowa kluczowe
słowa kluczowe
=
=
Słowa
Słowa zarezerwowane nazwy
zarezerwowane
nazwy
zabronione
zabronione
C: proceduralnie C++: proceduralnie / OOP
C: proceduralnie C++: proceduralnie / OOP
asm float short asm float short
auto for signed auto for signed
bool friend sizeof bool friend sizeof
break goto static break goto static
case if static_cast case if static_cast
catch inline struct catch inline struct
char int switch char int switch
class long template class long template
const mutable this const mutable this
const_cast namespace throw const_cast namespace throw
continue new true continue new true
default operator try default operator try
delete private typedef delete private typedef
do protected typeid do protected typeid
double public typename double public typename
dynamic_cast register union dynamic_cast register union
reinterpret_cast
else reinterpret_cast unsigned else unsigned
return
enum return using enum using
explicit virtual explicit virtual
extern void extern void
false volatile false volatile
wchar_t wchar_t
while while
C ... C++ ... Java 10
10
Słowa
Słowa zarezerwowane
zarezerwowane
C++: proceduralnie / OOP Java: obiektowo
C++: proceduralnie / OOP Java: obiektowo
asm float short abstract float short
auto for signed boolean for static
bool friend sizeof break goto(*) super
break goto static byte if switch
case if static_cast case implements synchronized
catch inline struct catch import this
char int switch char instanceof throw
class long template class int throws
const mutable this const(*) interface transient(*)
const_cast namespace throw continue long try
continue new true default native void
default operator try do new volatile
delete private typedef double package while
do protected typeid else private
double public typename extends protected
dynamic_cast register union final public
reinterpret_cast
else unsigned finally return
return
enum using
explicit virtual
extern void
false volatile
Nie są słowami kluczowymi, ale są zastrze\one:
wchar_t
null, true, false
while
B. Butryło 5
Metodyki i technki programowania 1 2011
C ... C++ ... Java 11
11
słowa kluczowe
słowa kluczowe
=
=
Słowa
Słowa zarezerwowane nazwy
zarezerwowane
nazwy
zabronione
zabronione
C++: proceduralnie / OOP Java: obiektowo
C++: proceduralnie / OOP Java: obiektowo
asm float short abstract float short
auto for signed boolean for static
bool friend sizeof break goto(*) super
break goto static byte if switch
case if static_cast case implements synchronized
catch inline struct catch import this
char int switch char instanceof throw
class long template class int throws
const mutable this const(*) interface transient(*)
const_cast namespace throw continue long try
continue new true default native void
default operator try do new volatile
delete private typedef double package while
do protected typeid else private
double public typename extends protected
dynamic_cast register union final public
reinterpret_cast
else unsigned finally return
return
enum using
explicit virtual
extern void
false volatile
Nie są słowami kluczowymi, ale są zastrze\one:
wchar_t
null, true, false
while
Struktura programu w C++
Struktura programu w C++
(programowanie
(programowanie
blokowo - strukturalne)
blokowo - strukturalne)
B. Butryło 6
Metodyki i technki programowania 1 2011
Paradygmaty 13
13
Programowanie
Programowanie blokowo-strukturalne
blokowo-strukturalne
żGrupowanie instrukcji.
żPodejmowanie decyzji.
{{
{{
żWybór jednego z wielu mo\liwych przypadków.
}}
żPowtarzanie rozkazów ze sprawdzeniem
}}
warunku na początku lub końcu.
żWykorzystanie funkcji.
żBudowa programu z wielu plików zródłowych.
żMo\liwość tworzenia i wykorzystania typów
pochodnych.
Struktura programu w C++ (programowanie strukturalne) 14
14
Najprostszy
Najprostszy program w C++
program w C++
void main( void )
{
funkcja główna (definicja): main
}
B. Butryło 7
Metodyki i technki programowania 1 2011
Struktura programu w C++ (programowanie strukturalne) 15
15
Program
Program z przetwarzaniem (1)
z przetwarzaniem (1)
void main( void )
{
funkcja główna (definicja): main
int a;
int b = 20;
a = 30;
a=a+b;
}
Struktura programu w C++ (programowanie strukturalne) 16
16
Program
Program z przetwarzaniem (2)
z przetwarzaniem (2)
deklaracja plików nagłówkowych
#include
funkcja główna (definicja): main
void main( void )
{
Im
double radiany, stopnie;
int a = 30; // re
int b = 20; // im
b
radiany = atan2( b; a );
stopnie = radiany * 180 / 3.14;
Re
}
a
Komentarze:
Komentarze: radiany
stopnie
/* komentarz
/* komentarz
wieloliniowy
wieloliniowy*/
*/
// komentarz w 1 linii
// komentarz w 1 linii
B. Butryło 8
Metodyki i technki programowania 1 2011
Struktura programu w C++ (programowanie strukturalne) 17
17
Program
Program z przetwarzaniem (3) i komunikacją
z przetwarzaniem (3) i komunikacją
deklaracja plików nagłówkowych
#include
#include
funkcja główna (definicja): main
using namespace std;
Standardowe
Standardowe
void main( void )
funkcje przed
funkcje przed
{
u\yciem musza być
u\yciem musza być
double radiany, stopnie;
zdefiniowane
zdefiniowane
int a = 30; // re
przez u\ycie
przez u\ycie
int b = 20; // im
plików
plików
nagłówkowych.
nagłówkowych.
radiany = atan2( b; a );
stopnie = radiany * 180 / 3.14;
U\ycie zmiennych
cout << "Wynik obliczen: " << endl; U\ycie zmiennych
cout << stopnie << endl;
środowiskowych, nazw typów
środowiskowych, nazw typów
}
pochodnych i zło\onych
pochodnych i zło\onych
wymaga wskazania jaką
wymaga wskazania jaką
przestrzeń nazw u\ytkujemy.
przestrzeń nazw u\ytkujemy.
Mo\na wskazać raz:
Mo\na wskazać raz:
using namespace std;
using namespace std;
Struktura programu w C++ (programowanie strukturalne) 18
18
Program
Program z własnymi funkcjami (1)
z własnymi funkcjami (1)
#include deklaracja plików nagłówkowych
#include
funkcja pomocnicza (definicja):
using namespace std; licz_stopnie
/*******************/
double licz_stopnie( double wart_radian)
{
funkcja główna (definicja): main
stopnie = wart_radiany * 180 / 3.14;
return stopnie;
} Własne funkcje nale\y
definiować przed ich
/*******************/
u\yciem.
void main( void )
Sposób najprostszy ale
{
utrudnia analizę programu.
double radiany, stopnie;
int a = 30; // re
int b = 20; // im
radiany = atan2( b; a );
stopnie = licz_stopnie( radiany );
cout << "Wynik obliczen: " << stopnie << endl;
}
B. Butryło 9
Metodyki i technki programowania 1 2011
Struktura programu w C++ (programowanie strukturalne) 19
19
Program
Program z własnymi funkcjami (2)
z własnymi funkcjami (2)
#include deklaracja plików nagłówkowych
#include
funkcja pomocnicza (deklaracja):
using namespace std;
licz_stopnie
double licz_stopnie( double); //deklaracja
/*******************/
funkcja główna (definicja): main
void main( void )
{
double radiany, stopnie;
funkcja pomocnicza (definicja):
int a = 30; // re
licz_stopnie
int b = 20; // im
radiany = atan2( b; a );
stopnie = licz_stopnie( radiany );
cout << "Wynik obliczen: " << endl;
cout << stopnie << endl;
Własne funkcje
}
mo\na
/*******************/ zadeklarować a
double licz_stopnie( double wart_radian)
potem dopiero
{
definiować.
stopnie = wart_radiany * 180 / 3.14;
return stopnie;
}
Struktura programu w C++ (programowanie strukturalne) 20
20
Program
Program z własnymi funkcjami (3)
z własnymi funkcjami (3)
Zalecane
tworzenie
deklaracja plików
deklaracja plików
programów wielo-
nagłówkowych
nagłówkowych
modułowych,
funkcja główna
funkcja pomocnicza zło\onych z wielu
(definicja): (definicja):
plików.
licz_stopnie
main
#include
#include
Plik: moje_funkcje
#include "moje_funkcje"
#include
using namespace std;
#include
/*******************/
using namespace std;
void main( void )
{
double licz_stopnie( double);
double radiany, stopnie;
int a = 30; // re
/*******************/
int b = 20; // im
double licz_stopnie( double
wart_radian)
radiany = atan2( b; a );
{
stopnie = licz_stopnie( radiany );
stopnie = wart_radiany * 180 / 3.14;
cout << "Wynik obliczen: " << endl;
return stopnie;
cout << stopnie << endl;
}
}
B. Butryło 10
Metodyki i technki programowania 1 2011
Paradygmaty 21
21
C++:
C++: struktura pliku zródłowego
struktura pliku zródłowego
pliki nagłówkowe dołączane w trakcie kompilacji
pliki nagłówkowe dołączane w trakcie kompilacji
deklaracja i definicja funkcji A
deklaracja i definicja funkcji A
deklaracja i definicja funkcji B
deklaracja i definicja funkcji B
deklaracja i definicja funkcji main
deklaracja i definicja funkcji main
Paradygmaty 22
22
C++:
C++: struktura pliku zródłowego
struktura pliku zródłowego
pliki nagłówkowe dołączane w trakcie kompilacji pliki nagłówkowe dołączane w trakcie kompilacji
pliki nagłówkowe dołączane w trakcie kompilacji pliki nagłówkowe dołączane w trakcie kompilacji
stałe deklarowane w programie stałe deklarowane w programie
stałe deklarowane w programie stałe deklarowane w programie
zmienne globalne dostępne w programie zmienne globalne dostępne w programie
zmienne globalne dostępne w programie zmienne globalne dostępne w programie
deklaracja funkcji A
deklaracja funkcji A
deklaracja i definicja funkcji E
deklaracja i definicja funkcji E
deklaracja i definicja funkcji D
deklaracja i definicja funkcji D
deklaracja i definicja funkcji D
deklaracja i definicja funkcji D
deklaracja funkcji E
deklaracja funkcji E
deklaracja i definicja funkcji A
deklaracja i definicja funkcji A
deklaracja i definicja funkcji B
deklaracja i definicja funkcji B
deklaracja i definicja funkcji B
deklaracja i definicja funkcji B
deklaracja i definicja funkcji main
deklaracja i definicja funkcji main
deklaracja i definicja funkcji main
deklaracja i definicja funkcji main
definicja funkcji E
definicja funkcji E
definicja funkcji A
definicja funkcji A
B. Butryło 11
Metodyki i technki programowania 1 2011
Paradygmaty 23
23
C++:
C++: zbiór plików tworzących kod zródłowy
zbiór plików tworzących kod zródłowy
pliki nagłówkowe dołączane w trakcie kompilacji
pliki nagłówkowe dołączane w trakcie kompilacji
pliki nagłówkowe dołączane w trakcie kompilacji
pliki nagłówkowe dołączane w trakcie kompilacji
stałe deklarowane w programie
stałe deklarowane w programie
stałe deklarowane w programie
stałe deklarowane w programie
zmienne globalne dostępne w programie
zmienne globalne dostępne w programie
deklaracja funkcji A
deklaracja funkcji A
deklaracja i definicja funkcji main
deklaracja i definicja funkcji main
deklaracja i definicja funkcji D
deklaracja i definicja funkcji D
deklaracja funkcji E
deklaracja funkcji E
deklaracja i definicja funkcji B
deklaracja i definicja funkcji B
deklaracja i definicja funkcji A1
deklaracja i definicja funkcji A1
definicja funkcji E
definicja funkcji E
deklaracja i definicja funkcji A2
deklaracja i definicja funkcji A2
definicja funkcji A
definicja funkcji A
deklaracja i definicja funkcji A3
deklaracja i definicja funkcji A3
deklaracja i definicja funkcji A4
deklaracja i definicja funkcji A4
Paradygmaty 24
24
C++:
C++: struktura programu
struktura programu
Enter
Program
Funkcja A
Funkcja E
Funkcja E
Wyra\enia,
zmienne
instrukcje
wykonywanie wyra\enia
Funkcja main
Funkcja main
operacji na
instrukcje
zmiennych
zmienne
wyra\enia
Funkcja S1
Funkcja S1
instrukcje
zmienne
wyra\enia
Funkcja D
Funkcja D
instrukcje
zmienne
Funkcja B wyra\enia
Funkcja B
instrukcje
zmienne
wyra\enia Funkcja S2
Funkcja S2
instrukcje
zmienne
wyra\enia
instrukcje
B. Butryło 12
Metodyki i technki programowania 1 2011
Paradygmaty 25
25
C:
C: struktura pliku zródłowego *.C
struktura pliku zródłowego *.C
#include
#include
#include
#include " Średnik.
Enter " Średnik.
float funkcja( float w_x )
{ " Instrukcja
" Instrukcja grupująca.
grupująca.
float w_y;
w_y = 3 * w_x * w_x * w_x + 2 * w_x * w_x - 40 * w_x + 10;
return( w_y );
" Komentarz.
" Komentarz.
}
int main (void)
" Wartość
" Wartość logiczna (?!).
logiczna (?!).
{
int i, j;
float a, f_a, b, f_b, x, y, epsilon;
printf( "\na = ");
scanf( "%f", &a);
printf( "\nb = ");
scanf( "%f", &b);
epsilon = 1e-5;
f_a = funkcja( a );
f_b = funkcja( b );
if ( f_a * f_b < 0 )
{
i = 0;
x = a;
y = f_a;
while ( fabs( y ) > epsilon )
{
x = a - f_a * ( b - a ) / ( f_b - f_a );
y = funkcja( x );
if ( f_a * y > 0 ) f_a = y;
else f_b = y;
i = i + 1;
}
printf( "Wynik x = %f, y(x) = %f po %d krokach. \n", x, y, i );
}
else
printf( "Nie ma miejsca zerowego w podanym przedziale.\n" );
getch();
}
C++:
C++:
standardowe
standardowe
elementy
elementy
środowiska programowania
środowiska programowania
B. Butryło 13
Metodyki i technki programowania 1 2011
Struktura programu w C++ (programowanie strukturalne) 27
27
Pliki
Pliki nagłówkowe (header files)
nagłówkowe (header files)
Dołączanie plików nagłówkowych
#include
>
#include "nazwa_pliku"