Programowanie obiektowe

Transkrypt

Programowanie obiektowe
Programowanie obiektowe
Wykład 6
Piotr Błaszyński
Wydział Informatyki Zachodniopomorskiego Uniwersytetu Technologicznego
7 grudnia 2013
Operatory ++ i –
Programowanie
obiektowe
Operatory raz
jeszcze
Kontenery
Iteratory
STL
Wzorce - klasy
szablonowe
Standard Template
Library
Rodzaje wzorców
RTTI
Real Time Type
Information
Boost
Boost
Najprzydatniejsze
elementy
Pamięć
Własne mechanizmy
alokacji pamięci
operatory przedrostkowe (prefix),
ValueHolder& operator++();
operatory przyrostkowe (postfix),
ValueHolder operator++(int);
konsekwencje dla for( ;;i++)
dlaczego warto for( ;;++i)
Operatory - kod
Programowanie
obiektowe
Operatory raz
jeszcze
Kontenery
Iteratory
STL
Wzorce - klasy
szablonowe
Standard Template
Library
Rodzaje wzorców
class V a l u e H o l d e r
{
public :
V a l u e H o l d e r ( int v a l u e ) : v a l u e ( v a l u e ) {}
const int g e t V a l u e ( ) { return v a l u e ; }
V a l u e H o l d e r& operator++() ; // prefix
V a l u e H o l d e r& operator −−() ; // prefix
RTTI
Real Time Type
Information
Boost
Boost
Najprzydatniejsze
elementy
Pamięć
Własne mechanizmy
alokacji pamięci
V a l u e H o l d e r operator++(int ) ; // postfix
V a l u e H o l d e r operator −−(int ) ; // postfix
private :
int v a l u e ;
};
Operatory - kod
Programowanie
obiektowe
Operatory raz
jeszcze
Kontenery
Iteratory
STL
Wzorce - klasy
szablonowe
Standard Template
Library
V a l u e H o l d e r& V a l u e H o l d e r : : operator++()
{
++v a l u e ;
return ∗ this ;
}
Rodzaje wzorców
RTTI
Real Time Type
Information
Boost
Boost
Najprzydatniejsze
elementy
Pamięć
Własne mechanizmy
alokacji pamięci
V a l u e H o l d e r& V a l u e H o l d e r : : operator −−()
{
−−v a l u e ;
return ∗ this ;
}
Operatory - kod
Programowanie
obiektowe
Operatory raz
jeszcze
Kontenery
Iteratory
STL
Wzorce - klasy
szablonowe
Standard Template
Library
V a l u e H o l d e r V a l u e H o l d e r : : operator++(int )
{
V a l u e H o l d e r r e s u l t ( ∗ this ) ;
++(∗this ) ;
return r e s u l t ;
}
Rodzaje wzorców
RTTI
Real Time Type
Information
Boost
Boost
Najprzydatniejsze
elementy
Pamięć
Własne mechanizmy
alokacji pamięci
V a l u e H o l d e r V a l u e H o l d e r : : operator −−(int )
{
V a l u e H o l d e r r e s u l t ( ∗ this ) ;
−−(∗this ) ;
return r e s u l t ;
}
Operatory - kod
Programowanie
obiektowe
Operatory raz
jeszcze
Kontenery
Iteratory
STL
Wzorce - klasy
szablonowe
Standard Template
Library
Rodzaje wzorców
RTTI
Real Time Type
Information
Boost
Boost
Najprzydatniejsze
elementy
Pamięć
Własne mechanizmy
alokacji pamięci
ValueHolder value (1) ;
v a l u e ++;
++v a l u e ;
for ( V a l u e H o l d e r i = V a l u e H o l d e r ( 1 ) ; i . g e t V a l u e ( )
<20 ; ++i )
{
cout << i . g e t V a l u e ( ) <<e n d l ;
}
Klasa vector - kod
Programowanie
obiektowe
Operatory raz
jeszcze
Kontenery
Iteratory
v e c t o r <double> s t u d e n t m a r k s ;
STL
Wzorce - klasy
szablonowe
Standard Template
Library
for ( int i = 0 ; i <10; i ++)
student marks . push back ( i ) ;
Rodzaje wzorców
RTTI
Real Time Type
Information
Boost
Boost
Najprzydatniejsze
elementy
Pamięć
Własne mechanizmy
alokacji pamięci
for ( v e c t o r <double > : : s i z e t y p e i = 0 ; i <
s t u d e n t m a r k s . s i z e ( ) ; i ++)
cout << s t u d e n t m a r k s [ i ]<< e n d l ;
Klasa vector - kod z iteratorem
Programowanie
obiektowe
Operatory raz
jeszcze
Kontenery
Iteratory
Iterator - generalizacja pojęcia wskaźnika.
v e c t o r <double> s t u d e n t m a r k s ;
STL
Wzorce - klasy
szablonowe
Standard Template
Library
for ( int i = 0 ; i <10; i ++)
student marks . push back ( i ) ;
Rodzaje wzorców
RTTI
Real Time Type
Information
Boost
Boost
Najprzydatniejsze
elementy
Pamięć
Własne mechanizmy
alokacji pamięci
for ( v e c t o r <double > : : c o n s t i t e r a t o r
student marks . cbegin () ;
i t != s t u d e n t m a r k s . cend ( ) ; ++i t )
cout << ( ∗ i t ) <<e n d l ;
it =
Klasa vector - kod z iteratorem auto
Programowanie
obiektowe
Operatory raz
jeszcze
Kontenery
Iteratory
v e c t o r <double> s t u d e n t m a r k s ;
STL
Wzorce - klasy
szablonowe
Standard Template
Library
for ( int i = 0 ; i <10; i ++)
student marks . push back ( i ) ;
Rodzaje wzorców
RTTI
Real Time Type
Information
Boost
Boost
Najprzydatniejsze
elementy
Pamięć
Własne mechanizmy
alokacji pamięci
for ( auto i t =s t u d e n t m a r k s . c b e g i n ( ) ;
i t != s t u d e n t m a r k s . cend ( ) ; ++i t )
cout << ( ∗ i t ) <<e n d l ;
Klasa vector - klasa z iteratorem
Programowanie
obiektowe
Operatory raz
jeszcze
Kontenery
Iteratory
STL
Wzorce - klasy
szablonowe
Standard Template
Library
class V a l u e H o l d e r
{
public :
V a l u e H o l d e r ( int v a l u e ) : v a l u e ( v a l u e ) {}
const int g e t V a l u e ( ) { return v a l u e ; }
private :
int v a l u e ;
};
Rodzaje wzorców
RTTI
Real Time Type
Information
Boost
Boost
Najprzydatniejsze
elementy
Pamięć
Własne mechanizmy
alokacji pamięci
v e c t o r <V a l u e H o l d e r > v a l u e s ;
for ( int i = 0 ; i <10; i ++)
v a l u es . push back ( ValueHolder ( i ) ) ;
for ( v e c t o r <V a l u e H o l d e r > : : c o n s t i t e r a t o r
cbegin () ;
i t != v a l u e s . cend ( ) ; ++i t )
{
ValueHolder holder = ∗ i t ;
cout << h o l d e r . g e t V a l u e ( ) <<e n d l ;
}
i t =v a l u e s .
Klasa vector - klasa z iteratorem
Programowanie
obiektowe
Operatory raz
jeszcze
Kontenery
Iteratory
STL
Wzorce - klasy
szablonowe
Standard Template
Library
class V a l u e H o l d e r
{
public :
V a l u e H o l d e r ( int v a l u e ) : v a l u e ( v a l u e ) {}
const int g e t V a l u e ( ) { return v a l u e ; }
private :
int v a l u e ;
};
Rodzaje wzorców
RTTI
Real Time Type
Information
Boost
Boost
Najprzydatniejsze
elementy
Pamięć
Własne mechanizmy
alokacji pamięci
v e c t o r <V a l u e H o l d e r > v a l u e s ;
for ( int i = 0 ; i <10; i ++)
v a l u es . push back ( ValueHolder ( i ) ) ;
for ( auto i t =v a l u e s . c b e g i n ( ) ;
i t != v a l u e s . cend ( ) ; ++i t )
{
ValueHolder holder = ∗ i t ;
cout << h o l d e r . g e t V a l u e ( ) <<e n d l ;
}
Klasy szablonowe
Programowanie
obiektowe
Operatory raz
jeszcze
Kontenery
Iteratory
STL
Wzorce - klasy
szablonowe
Standard Template
Library
Rodzaje wzorców
RTTI
Real Time Type
Information
Boost
Boost
Najprzydatniejsze
elementy
Pamięć
Własne mechanizmy
alokacji pamięci
template <class T>
class V a l u e H o l d e r
{
public :
V a l u e H o l d e r (T v a l u e ) : v a l u e ( v a l u e ) {}
const T g e t V a l u e ( ) { return v a l u e ; }
private :
T value ;
};
v e c t o r <V a l u e H o l d e r <int> > v a l u e s ;
for ( int i = 0 ; i <10; i ++)
v a l u e s . p u s h b a c k ( V a l u e H o l d e r <int >( i ) ) ;
for ( auto i t =v a l u e s . c b e g i n ( ) ;
i t != v a l u e s . cend ( ) ; ++i t )
{
V a l u e H o l d e r <int> h o l d e r = ∗ i t ;
cout << h o l d e r . g e t V a l u e ( ) <<e n d l ;
}
Standard Template Library - standardowa
biblioteka wzorców
Programowanie
obiektowe
Operatory raz
jeszcze
Kontenery
Iteratory
STL
Wzorce - klasy
szablonowe
Standard Template
Library
Rodzaje wzorców
RTTI
Real Time Type
Information
Boost
Boost
Najprzydatniejsze
elementy
Pamięć
Własne mechanizmy
alokacji pamięci
wzorce, szablony gotowych rozwiązań popularnych
problemów programistycznych
zawiera: algorytmy, pojemniki na dane (kontenery),
iteratory, kilka użytecznych dodatków,
wchodzi w skład standardu języka, dostepna w zasadzie na
wszystkie platformy.
Rodzaje wzorców - kontenery
Programowanie
obiektowe
Operatory raz
jeszcze
Kontenery
Iteratory
STL
Wzorce - klasy
szablonowe
Standard Template
Library
Rodzaje wzorców
RTTI
Real Time Type
Information
Boost
Boost
Najprzydatniejsze
elementy
Pamięć
Własne mechanizmy
alokacji pamięci
vector, list, deque, set, multiset, map, multimap, hash set,
hash multiset, hash map, hash multimap,
w nowym standardzie C++11:
array, forward list, unordered set, unordered multiset,
unordered map, unordered multimap,
szablony, które można traktowac jako kontenery:
bitset, valarray,
Rodzaje wzorców - algorytmy
Programowanie
obiektowe
Operatory raz
jeszcze
Kontenery
Iteratory
STL
Wzorce - klasy
szablonowe
Standard Template
Library
Rodzaje wzorców
RTTI
Real Time Type
Information
Boost
Boost
Najprzydatniejsze
elementy
Pamięć
Własne mechanizmy
alokacji pamięci
do wyszukiwania i przeglądania (Non-mutating): for each,
find, find if, adjacent find, find first of, count, count if,
mismatch, equal, search, search n, find end,
do wykonywania zmian (Mutating): copy, copy n,
copy backward, transform, fill, fill n, generate, generate n,
unique, unique copy, reverse, reverse copy, rotate,
rotate copy, random shuffle, random sample,
random sample n, partition, stable partition
Swap: swap, iter swap, swap ranges,
Replace: replace, replace if, replace copy, replace copy if,
Remove: remove, remove if, remove copy, remove copy if ,
Rodzaje wzorców - algorytmy cd.
Programowanie
obiektowe
Operatory raz
jeszcze
Kontenery
Iteratory
STL
Wzorce - klasy
szablonowe
Standard Template
Library
Rodzaje wzorców
RTTI
Real Time Type
Information
Boost
Boost
Najprzydatniejsze
elementy
Pamięć
Własne mechanizmy
alokacji pamięci
sortowanie
podstawowe: sort, stable sort, partial sort,
partial sort copy, is sorted, nth element
wyszukiwanie binarne: lower bound, upper bound,
equal range, binary search,
łączenie i operacje na zbiorach: merge, inplace merge,
includes, set union, set intersection, set difference,
set symmetric difference,
operacje na stercie: push heap, pop heap, make heap,
sort heap, is heap,
wartości min, max: min, max, min element, max element,
inne: lexicographical compare,
lexicographical compare 3way, next permutation,
prev permutation,
Uogólnione liczbowe: iota, accumulate, inner product,
partial sum, adjacent difference, power.
Rodzaje wzorców - inne
Programowanie
obiektowe
Operatory raz
jeszcze
Kontenery
Iteratory
STL
Wzorce - klasy
szablonowe
Standard Template
Library
Rodzaje wzorców
RTTI
Real Time Type
Information
Boost
Boost
Najprzydatniejsze
elementy
Pamięć
Własne mechanizmy
alokacji pamięci
iteratory
koncepcja powiązana, ale nie zawsze (istream iterator,
ostream iterator) z kontenerami,
iterator
const iterator
dodatki
koncept Assignable (obiekty z możliwością przypisywania),
nisko poziomowe zarzadzanie pamięcią: Allocators,
funktory - uogólnienie funkcji - wszystko co można
wywołać jak funkcje, przydatne np. jako parametry
algorytmów.
”I can do better in one evening”.
I know. I understand. I have been there.
Programowanie
obiektowe
Operatory raz
jeszcze
Kontenery
Iteratory
v e c t o r <int> V( 1 0 ) ;
i o t a (V . b e g i n ( ) , V . end ( ) , 7 ) ;
copy (V . b e g i n ( ) , V . end ( ) , o s t r e a m i t e r a t o r <int >( cout ,
" element \n" ) ) ;
STL
Wzorce - klasy
szablonowe
Standard Template
Library
Rodzaje wzorców
RTTI
Real Time Type
Information
Boost
Boost
Najprzydatniejsze
elementy
Pamięć
Własne mechanizmy
alokacji pamięci
7 element
8 element
9 element
10 e l e m e n t
11 e l e m e n t
12 e l e m e n t
13 e l e m e n t
14 e l e m e n t
15 e l e m e n t
16 e l e m e n t
Kontenery - używanie pasujących do problemu
Programowanie
obiektowe
Operatory raz
jeszcze
Kontenery
Iteratory
STL
tabelka efektywności struktur kontenerowych
http://www.tantalon.com/pete/cppopt/appendix.htm
Wzorce - klasy
szablonowe
Standard Template
Library
Rodzaje wzorców
RTTI
Real Time Type
Information
Boost
Boost
Najprzydatniejsze
elementy
Pamięć
Własne mechanizmy
alokacji pamięci
http://www.cs.northwestern.edu/ riesbeck/programming/c++
summary.html
http://stackoverflow.com/questions/181693/what-arethe-complexity-guarantees-of-the-standard-containers
Kontenery - używanie pasujących do problemu
Programowanie
obiektowe
Operatory raz
jeszcze
Kontenery
Iteratory
STL
Wzorce - klasy
szablonowe
Standard Template
Library
Rodzaje wzorców
RTTI
Real Time Type
Information
Boost
Boost
Najprzydatniejsze
elementy
Pamięć
Własne mechanizmy
alokacji pamięci
funkcja
pamięć
wstępna alokacja
narzut na informacje o
sąsiadach
może w każdej chwili
zaalokowac całość
wstawianie elementów
na końcu
wstawianie elementów
gdziekolwiek
dostęp do elementów
vector
ciągła
tak
list
nie
nie
nie
tak
tak
nie, bo dodajemy
zawsze jeden
element
stały czas
stały czas
N/2
stały czas
swobodny
”trudny”
Rzutowanie
Programowanie
obiektowe
Operatory raz
jeszcze
Kontenery
Iteratory
STL
Wzorce - klasy
szablonowe
Standard Template
Library
Rodzaje wzorców
RTTI
Real Time Type
Information
Boost
Boost
Najprzydatniejsze
elementy
Pamięć
Własne mechanizmy
alokacji pamięci
(typ)
static cast<typ>
dynamic cast<typ>
const cast<typ>
reinterpet cast<typ>
Real Time Type Information
Programowanie
obiektowe
Operatory raz
jeszcze
Kontenery
Iteratory
STL
Wzorce - klasy
szablonowe
Standard Template
Library
Rodzaje wzorców
RTTI
Real Time Type
Information
Boost
Boost
Najprzydatniejsze
elementy
Pamięć
Własne mechanizmy
alokacji pamięci
Informacje o typach w trakcie wykonywania programu,
typeid(obiekt)
Boost
Programowanie
obiektowe
Operatory raz
jeszcze
Kontenery
Iteratory
STL
Wzorce - klasy
szablonowe
Standard Template
Library
Rodzaje wzorców
RTTI
Real Time Type
Information
Boost
Boost
Najprzydatniejsze
elementy
Pamięć
Własne mechanizmy
alokacji pamięci
przydatne konstrukcje językowe w bibliotece dostepnej za
darmo,
algorytmy, struktury danych, kontenery,
wymagana instalacja i w miarę nowy kompilator.
Najprzydatniejsze elementy
Programowanie
obiektowe
Operatory raz
jeszcze
Kontenery
BOOST FOREACH
Iteratory
STL
Wzorce - klasy
szablonowe
Standard Template
Library
Rodzaje wzorców
RTTI
Real Time Type
Information
Boost
Boost
Najprzydatniejsze
elementy
Pamięć
Własne mechanizmy
alokacji pamięci
wielowątkowość (boost::thread),
funkcje matematyczne,
parsowanie tekstu (boost::spirit),
asynchroniczne IO (boost::asio),
system plików (boost::filesystem::path i całe
boost::filesystem)
Programowanie
obiektowe
Operatory raz
jeszcze
#i n c l u d e <b o o s t / f o r e a c h . hpp>
Kontenery
v e c t o r <V a l u e H o l d e r <int> > v a l u e s ;
for ( int i = 0 ; i <10; i ++)
v a l u e s . p u s h b a c k ( V a l u e H o l d e r <int >( i ) ) ;
for ( auto i t =v a l u e s . c b e g i n ( ) ;
i t != v a l u e s . cend ( ) ; ++i t )
{
V a l u e H o l d e r <int> h o l d e r = ∗ i t ;
}
BOOST FOREACH( V a l u e H o l d e r <int> v h o l d e r , v a l u e s )
{
cout << v h o l d e r . g e t V a l u e ( ) <<e n d l ;
}
Iteratory
STL
Wzorce - klasy
szablonowe
Standard Template
Library
Rodzaje wzorców
RTTI
Real Time Type
Information
Boost
Boost
Najprzydatniejsze
elementy
Pamięć
Własne mechanizmy
alokacji pamięci
Własne mechanizmy alokacji pamięci
Programowanie
obiektowe
Operatory raz
jeszcze
Kontenery
Iteratory
Własny alokator
domyslny alokator:
STL
Wzorce - klasy
szablonowe
v e c t o r <double> V( 1 0 0 , 5 . 0 ) ;
Standard Template
Library
Rodzaje wzorców
RTTI
Real Time Type
Information
Boost
Boost
Najprzydatniejsze
elementy
Pamięć
Własne mechanizmy
alokacji pamięci
dla powyzszego wektora używamy alokator szybszy (być
może), ale tylko do aplikacji jednowątkowej:
v e c t o r <double , s i n g l e c l i e n t a l l o c > l o c a l (V .
b e g i n ( ) , V . end ( ) ) ;

Podobne dokumenty