18. listopadu 2013, Brno Připravil: David Procházka. Programovací jazyk C++
|
|
- Jarmila Benešová
- před 8 lety
- Počet zobrazení:
Transkript
1 18. listopadu 2013, Brno Připravil: David Procházka Defenzivní programování Programovací jazyk C++
2 Proč testovat Strana 2 / 36 Obsah přednášky 1 Proč testovat 2 Aserce 3 Testování 4 CUnit a ty další 5 Shrnutí
3 Proč testovat Strana 3 / 36 Motivace Přiznejme si: aplikace jsou složité a plné chyb. Chceme však vytvářet co nejméně chybový kód, proto musíme používat nástroje, které je eliminují. Na aplikaci se budeme dívat ze dvou pohledů: pohledu programátora: jak to má fungovat hlídáme pomocí aserce, pohledu testera: co to doopravdy dělá hlídáme pomocí testů. Jedna persona by neměla ovládat druhou ( Tester by neměl vědět, co metoda udělá.).
4 Aserce Strana 4 / 36 Obsah přednášky 1 Proč testovat 2 Aserce 3 Testování 4 CUnit a ty další 5 Shrnutí
5 Aserce Strana 5 / 36 Invariant Při běhu aplikace byste měli být schopni prohlásit, že určité podmínky platí (např. že hodnota tohoto indexu je menší, než x). Tyto výroky, které pro korektní běh aplikace musí být splněny nazýváme invarianty. Invarinaty by měly být definovány pouze u podmínek jejichž platnost jsme schopni zajistit. Nepoužívat např. na testování vstupu od uživatele. Platnost těchto invariantů můžeme ověřit pomocí makra assert().
6 Aserce Strana 6 / 36 Příklad aserce 1 MyVector :: push_ back ( int value ){ 2 if ( pozice == kapacita ){ 3 zvetsit (); 4 } 5 // nikdy nepredpokladejte, ze neco plati 6 // dokazte to... 7 assert ( pozice < kapacita ); 8 data [ pozice +1] = value ; 9 } V případě neplatnosti bude vráceno následující: Assertion failed: (pozice<kapacita), function push back, file /Users/apple/Desktop/aserce/main.cpp, line 8. Abort trap
7 Aserce Strana 7 / 36 Další příklad aserce 1 # include < iostream > 2 # include < cassert > 3 4 class Trida { 5 private : 6 float normalizevector ( float x, float y, float z){ 7 float size = sqrt ( sqr (x)+ sqr (y)+ sqr (z) ); 8 x /= size ; y /= size ; z /= size ; 9 } 10 public : 11 void calculateequation ( float x, float y, float z){ normalizevector (x, y, z); 14 assert ((x <=1) and (y <=1) and (z <=1)); 15 } 16 };
8 Aserce Strana 8 / 36 Vypnutí aserce Aserci můžeme vypnout definování makra NDEBUG. Obvykle definujeme pro celou aplikaci najednou: c++ -DNDEBUG main.cc... Programátoři často aserci vypínají při finálním sestavení aplikace. Nicméně vypínání je diskutabilní. Je přirovnáváno k tomu, když začínající námořník nosí plovací vestu na tréningu, ale nevezme si ji na moře.
9 Aserce Strana 9 / 36 Základní myšlenka aserce Na ošetření vstupů od uživatele a selhání zdrojů používáme podmínky a výjimky. Aserce je používána na ošetření vnitřní logiky programu. Veškeré problémy signalizované asercí je nutné vyřešit v době vývoje aplikace.
10 Testování Strana 10 / 36 Obsah přednášky 1 Proč testovat 2 Aserce 3 Testování 4 CUnit a ty další 5 Shrnutí
11 Testování Strana 11 / 36 Testování Metodika testování je v zásadě manažerský/filozofický postoj. Existuje řada postupů, jak testování integrovat do vývojového cyklu aplikace. Všechny metodiky se shodují na tom, že testování je potřeba.
12 Testování Strana 12 / 36 Přístup první: Testy pište dřívě, než kód 1 Rozmyslete si, jak má aplikace fungovat a stanovte vstupy, výstupy (získáte hlavičkový soubor). 2 Určete mezní podmínky a reakce na ně. 3 Napište testy. 4 Implementujte metody tak, aby splňovaly testy Proč takto? 1 Programátoři rádi používají ukázněné vstupy. 2 Je nutné prošmátrat tmavé kouty aplikace. 3 Dobrý test je ten, který odhalí chybu. Ne ten, který skončí bezchybně. Stane se, že test i způsobí vyvolání výjimky nebo pád aplikace. To je v pořádku. Postupně testy odkomentovávejte a zjistěte který to byl (a proč).
13 Testování Strana 13 / 36 Mejme třídu datum 1 class Date { 2 public : 3 Date (); 4 Date ( int year, int month, int day ); 5 Date ( const std :: string &); 6 int getyear () const ; 7 int getmonth () const ; 8 int getday () const ; 9 std :: string tostring () const ; 10 friend bool operator <( const Date &, const Date &); 11 friend bool operator >( const Date &, const Date &); 12 friend bool operator <=( const Date &, const Date &); 13 friend bool operator >=( const Date &, const Date &); 14 friend bool operator ==( const Date &, const Date &); 15 friend bool operator!=( const Date &, const Date &); 16 };
14 Testování Strana 14 / 36 Před implementací navrhneme test 1 # include " Date.h" 2 # include < iostream > 3 using namespace std ; 4 5 int npass = 0, nfail = 0; // testovaci pocitadlo 6 void test ( bool t) { 7 if( t) npass ++; else nfail ++; 8 } 9 10 int main () { 11 Date mybday (1951, 10, 1); 12 test ( mybday. getyear () == 1951); 13 test ( mybday. getmonth () == 10); 14 test ( mybday. getday () == 1); 15 cout << " Passed : " << npass << ", Failed : " 16 << nfail << endl ; 17 }
15 Testování Strana 15 / 36 Potřebné testy: operátory 1 // test operatoru 2 test ( mybday < today ); 3 test ( mybday <= today ); 4 test ( mybday!= today ); 5 test ( mybday == mybday ); 6 test ( mybday >= mybday ); 7 test ( mybday <= mybday ); 8 test ( myevebday < mybday ); 9 test ( mybday > myevebday ); 10 test ( mybday >= myevebday ); 11 test ( mybday!= myevebday );
16 Testování Strana 16 / 36 Potřebné testy: metody 1 // testy metod 2 test ( mybday. getyear () == 1951); 3 test ( mybday. getmonth () == 10); 4 test ( mybday. getday () == 1); 5 test ( myevebday. getyear () == 1951); 6 test ( myevebday. getmonth () == 9); 7 test ( myevebday. getday () == 30); 8 test ( mybday. tostring () == " ");
17 Testování Strana 17 / 36 Ted doopravdy: napíšeme testovací třídu 1 class DateTest : public TestSuite :: Test { 2 Date mybday ; 3 Date today ; 4 Date myevebday ; 5 public : 6 DateTest (){ 7 mybday = Date (1951, 10, 1); 8 myevebday = Date (" "); 9 }; 10 void run (); // prekryta z TestSuite 11 private : 12 void testops (); 13 void testfunctions (); 14 };
18 Testování Strana 18 / 36 Implementace testu opratorů 1 void DateTest :: testops () { 2 test_ ( mybday < today ); 3 test_ ( mybday <= today ); 4 test_ ( mybday!= today ); 5 test_ ( mybday == mybday ); 6 test_ ( mybday >= mybday ); 7 test_ ( mybday <= mybday ); 8 test_ ( myevebday < mybday ); 9 test_ ( mybday > myevebday ); 10 test_ ( mybday >= myevebday ); 11 test_ ( mybday!= myevebday ); 12 }
19 Testování Strana 19 / 36 Implementace testu zakladních metod 1 void DateTest :: testfunctions () { 2 test_ ( mybday. getyear () == 1951); 3 test_ ( mybday. getmonth () == 10); 4 test_ ( mybday. getday () == 1); 5 test_ ( myevebday. getyear () == 1951); 6 test_ ( myevebday. getmonth () == 9); 7 test_ ( myevebday. getday () == 30); 8 test_ ( mybday. tostring () == " "); 9 test_ ( myevebday. tostring () == " "); 10 }
20 Testování Strana 20 / 36 Zavolání testu 1 # include < iostream > 2 # include " DateTest.h" 3 using namespace std ; 4 5 int main () { 6 DateTest test ; 7 test. run (); 8 // return test. report (); 9 }
21 Testování Strana 21 / 36 Co dělá test? 1 // pseudokod 2 void test_ ( bool condition ){ 3 if ( condition ){ 4 npass ++ 5 // rozumne by bylo zapisovat si to 6 // do atributu a ten vypsat v metode report 7 cout << " Test " << typeid (* this ). name () 8 << " Passed " << endl ; 9 } else { 10 nfail ++; 11 cout << " Test " << typeid (* this ). name () 12 << " Failed " << endl ; 13 } 14 }
22 Testování Strana 22 / 36 Testování více tříd Uděláme si zásobník testů, které se budou provádět. 1 TestSuite suite (" Date and Time Tests "); 2 suite. addtest ( new MonthInfoTest ); 3 suite. addtest ( new JulianDateTest ); 4 suite. addtest ( new JulianTimeTest ); 5 suite. addtest ( new DateTest ); 6 suite. addtest ( new TimeTest ); 7 suite. run (); 8 suite. report (); 9... Aby bylo možné testy provolávat, byla pro odvození testu použita dědičnost.
23 Testování Strana 23 / 36 Testování výjimek 1 void testexceptions () { 2 try { 3 Date d (0,0,0); // Invalid 4 fail_ (" Invalid date undetec. in Date int ctor "); 5 } catch ( Date :: DateError &) { 6 succeed_ (); 7 } 8 9 try { 10 Date d(""); // Invalid 11 fail_ (" Inv. date undetec. in Date string ctor "); 12 } catch ( Date :: DateError &) { 13 succeed_ (); 14 } 15 }
24 CUnit a ty další Strana 24 / 36 Obsah přednášky 1 Proč testovat 2 Aserce 3 Testování 4 CUnit a ty další 5 Shrnutí
25 CUnit a ty další Strana 25 / 36 Knihovny pro automatizované testování Zřejmě nejznámější je knihovna CUnit: Statická knihovna primárně pro C, která se přilinkuje. Několik rozhraní: Automated (výstup do XML), Basic (standardní výstup), Console (interaktivní režim), Curses (interaktivní grafický režim). Dobrá je knihovna Boost: Experimentální funkce pro C++, doc/html/index.html, Paralelou JUnit je CppUnit (2): Rozsáhlá knihovna, podpora pro TDD. Jednoduchou alternativou je CuTest: Jeden.c a.h soubor, přiloží se k projektu.
26 CUnit a ty další Strana 26 / 36 Základní test v CppUnit: MoneyApp.cpp 1 # include " stdafx.h" 2 # include < cppunit / CompilerOutputter. h > 3 # include < cppunit / extensions / TestFactoryRegistry. h > 4 # include < cppunit /ui/ text / TestRunner.h> 5 6 int main ( int argc, char * argv []){ 7 // vytvorime testovaci suite 8 CppUnit :: Test * suite = CppUnit :: TestFactoryRegistry 9 :: getregistry (). maketest (); 10 // pridame spoustec testu 11 CppUnit :: TextUi :: TestRunner runner ; 12 runner. addtest ( suite ); 13 // nastaveni vystupu 14 runner. setoutputter ( 15 new CppUnit :: CompilerOutputter (& runner. result (), 16 std :: cerr ) ); 17...
27 CUnit a ty další Strana 27 / 36 Základní test v CppUnit: MoneyApp.cpp 2 1 // spusteni testu 2 bool wassucessful = runner. run (); 3 // Return error code 1 if the one of test failed. 4 return wassucessful? 0 : 1; 5 } 6 To nejhorsi mame za sebou...
28 CUnit a ty další Strana 28 / 36 Základní test: hlavičkový soubor MoneyTest 1 # ifndef MONEYTEST_ H 2 # define MONEYTEST_ H 3 4 # include < cppunit / extensions / HelperMacros.h> 5 6 class MoneyTest : public CppUnit :: TestFixture { 7 CPPUNIT_ TEST_ SUITE ( MoneyTest ); // skupina 8 CPPUNIT_ TEST ( testconstructor ); // test konst. 9 CPPUNIT_TEST_SUITE_END (); 10 public : 11 void testconstructor (); 12 }; 13 # endif // MONEYTEST_ H
29 CUnit a ty další Strana 29 / 36 Základní test: implem. soubor MoneyTest 1 # include " MoneyTest.h" 2 3 CPPUNIT_TEST_SUITE_REGISTRATION ( MoneyTest ); 4 5 void MoneyTest :: testconstructor (){ 6 // zatim prazdna implementace, jen hlaseni chyby 7 CPPUNIT_ FAIL ( " not implemented " ); 8 }
30 CUnit a ty další Strana 30 / 36 Už víme jak bude vypadat třída a její konstr. Uděláme nejdříve jeho testovací metodu. 1 void MoneyTest :: testconstructor (){ 2 // vytvoreni pomocnych promennych 3 const std :: string currencyff = " FF"; 4 const double longnumber = ; 5 6 // pokus o vytvoreni 7 Money money ( longnumber, currencyff ); 8 9 // aserce 10 CPPUNIT_ ASSERT_ EQUAL ( longnumber, 11 money. getamount ()); 12 CPPUNIT_ ASSERT_ EQUAL ( currencyff, 13 money. getcurrency ()); 14 }
31 CUnit a ty další Strana 31 / 36 Vytvoříme třídu s konstruktorem class Money { 3 double m_ amount ; 4 std :: string m_ currency ; 5 public : 6 Money ( double amount, std :: string currency ){ 7 m_ amount = amount ; 8 m_ currency = m_ currency ; 9 } 10 double getamount () const { 11 return m_ amount ; 12 } 13 std :: string getcurrency () const { 14 return m_ currency ; 15 } 16...
32 CUnit a ty další Strana 32 / 36 A test skončí chybou... Takže opravíme konstruktor... 1 Money ( double amount, std :: string currency ){ 2 m_ amount = amount ; 3 m_ currency = currency ; // tady byl preklep 4 }
33 CUnit a ty další Strana 33 / 36 A postupně dodáváme další testy... V MoneyTest.h: CPPUNIT_ TEST_ SUITE ( MoneyTest ); 3 CPPUNIT_ TEST ( testconstructor ); 4 CPPUNIT_ TEST ( testequal ); 5 CPPUNIT_TEST_SUITE_END (); 6 7 public : void testequal (); 10...
34 CUnit a ty další Strana 34 / 36 Implementujeme nový test... V MoneyTest.cpp: 1 void MoneyTest :: testequal (){ 2 // pomocne promenne 3 const Money money123ff ( 123, " FF" ); 4 const Money money123usd ( 123, " USD " ); 5 const Money money12ff ( 12, " FF" ); 6 const Money money12usd ( 12, " USD " ); 7 8 // stejna mena 9 CPPUNIT_ ASSERT ( money123ff == money123ff ); 10 CPPUNIT_ ASSERT ( money12ff!= money123ff ); 11 // ruzna mena 12 CPPUNIT_ ASSERT ( money123usd!= money123ff ); 13 CPPUNIT_ ASSERT ( money12usd!= money123ff ); 14 }
35 Shrnutí Strana 35 / 36 Obsah přednášky 1 Proč testovat 2 Aserce 3 Testování 4 CUnit a ty další 5 Shrnutí
36 Shrnutí Strana 36 / 36 Základní myšlenky testování Testujeme systematicky (po sebemenší úpravě v systému), testujeme automatizovaně (nemáme sílu testovat systematicky ručně), testuje důsledně (nic nepředpokládáváme, žádnou (sebejasnější) podmínku nevynecháme).
<surface name="pozadi" file="obrazky/pozadi/pozadi.png"/> ****************************************************************************
zdroje/zdroje.xml
Preprocesor. Karel Richta a kol. katedra počítačů FEL ČVUT v Praze. Karel Richta, Martin Hořeňovský, Aleš Hrabalík, 2016
Preprocesor Karel Richta a kol. katedra počítačů FEL ČVUT v Praze Karel Richta, Martin Hořeňovský, Aleš Hrabalík, 2016 Programování v C++, A7B36PJC 4/2016, Lekce 9b https://cw.fel.cvut.cz/wiki/courses/a7b36pjc/start
Funkční objekty v C++.
Funkční objekty v C++. Funkční objekt je instance třídy, která má jako svou veřejnou metodu operátor (), tedy operátor pro volání funkce. V dnešním článku si ukážeme jak zobecnit funkci, jak používat funkční
PB161 Programování v jazyce C++ Přednáška 8
.. PB161 Programování v jazyce C++ Přednáška 8 Výjimky Správa prostředků (RAII) Nikola Beneš 9. listopadu 2015 PB161 přednáška 8: výjimky, RAII 9. listopadu 2015 1 / 24 . PB161 přednáška 8: výjimky, RAII
10. března 2015, Brno Připravil: David Procházka. Programovací jazyk C++
10. března 2015, Brno Připravil: David Procházka Práce s výjimkami Programovací jazyk C++ K čemu slouží výjimky Strana 2 / 25 Obsah přednášky 1 K čemu slouží výjimky 2 Vytváření výjimek 3 Speciální případy
Připravil: David Procházka. Programovací jazyk C++
17. října 2011, Brno Připravil: David Procházka Práce s výjimkami Programovací jazyk C++ Obecně Strana 2 / 21 Jak se může program zachovat při chybě Dříve byl obvyklý způsob zavolat metodu abort. Metoda
Abstraktní třídy, polymorfní struktury
Karel Müller, Josef Vogel (ČVUT FIT) Abstraktní třídy, polymorfní struktury BI-PA2, 2011, Přednáška 9 1/32 Abstraktní třídy, polymorfní struktury Ing. Josef Vogel, CSc Katedra softwarového inženýrství
Šablony, kontejnery a iterátory
7. října 2010, Brno Připravil: David Procházka Šablony, kontejnery a iterátory Programovací jazyk C++ Šablony Strana 2 / 21 Šablona funkce/metody Šablona je obecný popis (třídy, funkce) bez toho, že by
Pokročilé programování v jazyce C pro chemiky (C3220) Statické proměnné a metody, šablony v C++
Pokročilé programování v jazyce C pro chemiky (C3220) Statické proměnné a metody, šablony v C++ Globální konstantní proměnné Konstantní proměnné specifikujeme s klíčovým slovem const, tyto konstantní proměné
Martin Flusser. Faculty of Nuclear Sciences and Physical Engineering Czech Technical University in Prague. October 17, 2016
ZPRO cvičení 2 Martin Flusser Faculty of Nuclear Sciences and Physical Engineering Czech Technical University in Prague October 17, 2016 Outline I 1 Outline 2 Proměnné 3 Proměnné - cvičení 4 Funkce 5 Funkce
Zpracoval: houzvjir@fel.cvut.cz
Zpracoval: houzvjir@fel.cvut.cz 10. Objektově orientované programování v C++. Přetěţování operátorů, generické funkce a třídy, výjimky, knihovny. (A7B36PJC) Obsah OOP v C++... 2 Pro připomenutí - Základní
Programování v C++ 1, 17. cvičení
Programování v C++ 1, 17. cvičení výjimky 1 1 Fakulta jaderná a fyzikálně inženýrská České vysoké učení technické v Praze Zimní semestr 2018/2019 Přehled 1 2 Shrnutí minule procvičené látky Binární vyhledávací
Šablony, kontejnery a iterátory
11. března 2015, Brno Připravil: David Procházka Šablony, kontejnery a iterátory Programovací jazyk C++ Šablony Strana 2 / 31 Obsah přednášky 1 Šablony 2 Abstraktní datové struktury 3 Iterátory 4 Array
Programování v C++ 1, 5. cvičení
Programování v C++ 1, 5. cvičení konstruktory, nevirtuální dědění 1 1 Fakulta jaderná a fyzikálně inženýrská České vysoké učení technické v Praze Zimní semestr 2018/2019 Přehled 1 2 3 Shrnutí minule procvičené
Pokročilé programování v jazyce C pro chemiky (C3220) Operátory new a delete, virtuální metody
Pokročilé programování v jazyce C pro chemiky (C3220) Operátory new a delete, virtuální metody Dynamická alokace paměti Jazyky C a C++ poskytují programu možnost vyžádat si část volné operační paměti pro
PB161 Programování v jazyce C++ Přednáška 9
PB161 Programování v jazyce C++ Přednáška 9 Jmenné prostory Výjimky podrobně Nikola Beneš 20. listopadu 2018 PB161 přednáška 9: jmenné prostory, výjimky 20. listopadu 2018 1 / 32 Jmenné prostory PB161
Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007
Úvod do programovacích jazyků (Java) Michal Krátký 1 Katedra informatiky VŠB Technická univerzita Ostrava Úvod do programovacích jazyků (Java), 2006/2007 c 2006 Michal Krátký Úvod do programovacích jazyků
C++ přetěžování funkcí a operátorů. Jan Hnilica Počítačové modelování 19
C++ přetěžování funkcí a operátorů 1 Přetěžování funkcí jazyk C++ umožňuje napsat více funkcí se stejným názvem, těmto funkcím říkáme přetížené přetížené funkce se musí odlišovat typem nebo počtem parametrů,
Jazyk C# (seminář 6)
Jazyk C# (seminář 6) Pavel Procházka KMI 29. října 2014 Delegát motivace Delegáty a události Jak docílit v C# funkcionální práce s metodami v C je to pomocí pointerů na funkce. Proč to v C# nejde pomocí
Více o konstruktorech a destruktorech
Více o konstruktorech a destruktorech Více o konstruktorech a o přiřazení... inicializovat objekt lze i pomocí jiného objektu lze provést přiřazení mezi objekty v původním C nebylo možné provést přiřazení
přetížení operátorů (o)
přetížení operátorů (o) - pro vlastní typy je možné přetížit i operátory (tj. definovat vlastní) - pro definici slouží klíčové slovo operator následované typem/znakem operátoru - operátor je speciální
Statické proměnné a metody. Tomáš Pitner, upravil Marek Šabo
Statické proměnné a metody Tomáš Pitner, upravil Marek Šabo Úvod Se statickou metodou jsme se setkali už u úplně prvního programu - Hello, world! public class Demo { public static void main(string[] args)
PB161 Programování v jazyce C++ Přednáška 9
PB161 Programování v jazyce C++ Přednáška 9 Jmenné prostory Výjimky podrobně Nikola Beneš 20. listopadu 2018 PB161 přednáška 9: jmenné prostory, výjimky 20. listopadu 2018 1 / 32 Jmenné prostory PB161
PROGRAMOVÁNÍ V C++ CVIČENÍ
PROGRAMOVÁNÍ V C++ CVIČENÍ INFORMACE Michal Brabec http://www.ksi.mff.cuni.cz/ http://www.ksi.mff.cuni.cz/~brabec/ brabec@ksi.mff.cuni.cz gmichal.brabec@gmail.com PODMÍNKY ZÁPOČTU Základní podmínky společné
Jazyk C++, některá rozšíření oproti C
Karel Müller, Josef Vogel (ČVUT FIT) Jazyk C++, některá rozšíření oproti C BI-PA2, 2011, Přednáška 1 1/22 Jazyk C++, některá rozšíření oproti C Ing. Josef Vogel, CSc Katedra softwarového inženýrství Katedra
Dědičnost. Časová náročnost lekce: 3 hodiny Datum ukončení a splnění lekce: 23.března
Dědičnost Cíle lekce Cílem lekce je naučit se pracovat a využívat dědičnosti při návrhu a tvorbě programů. Lekce je zaměřena hlavně na jednoduchou dědičnost. Bude rovněž vysvětlen rozdíl mezi dědičností
Pokročilé programování v jazyce C pro chemiky (C3220) Pokročilá témata jazyka C++
Pokročilé programování v jazyce C pro chemiky (C3220) Pokročilá témata jazyka C++ Prostory jmen U programů mohou někdy nastat kolize mezi jmény (tříd, funkcí, globálních proměnných atd.) pokud v různých
Konstruktory a destruktory
Konstruktory a destruktory Nedostatek atributy po vytvoření objektu nejsou automaticky inicializovány hodnota atributů je náhodná vytvoření metody pro inicializaci, kterou musí programátor explicitně zavolat,
Dynamická identifikace typů v C++.
Dynamická identifikace typů v C++. Pod pojmem "Dynamická identifikace typů" rozumíme zjišťování typů proměnných, nebo objektů v době běhu programu. Identifikaci typů zajišťuje operátor typeid. Než se ale
14.4.2010. Obsah přednášky 7. Základy programování (IZAPR) Přednáška 7. Parametry metod. Parametry, argumenty. Parametry metod.
Základy programování (IZAPR) Přednáška 7 Ing. Michael Bažant, Ph.D. Katedra softwarových technologií Kancelář č. 229, Náměstí Čs. legií Michael.Bazant@upce.cz Obsah přednášky 7 Parametry metod, předávání
Vector datový kontejner v C++.
Vector datový kontejner v C++. Jedná se o datový kontejner z knihovny STL jazyka C++. Vektor je šablona jednorozměrného pole. Na rozdíl od "klasického" pole má vector, mnoho užitečných vlastností a služeb.
VÝUKOVÝ MATERIÁL. Bratislavská 2166, Varnsdorf, IČO: tel Číslo projektu
VÝUKOVÝ MATERIÁL Identifikační údaje školy Vyšší odborná škola a Střední škola, Varnsdorf, příspěvková organizace Bratislavská 2166, 407 47 Varnsdorf, IČO: 18383874 www.vosassvdf.cz, tel. +420412372632
Programování v C++ 3, 3. cvičení
Programování v C++ 3, 3. cvičení úvod do objektově orientovaného programování 1 1 Fakulta jaderná a fyzikálně inženýrská České vysoké učení technické v Praze Zimní semestr 2018/2019 Přehled Dokončení spojového
VÝUKOVÝ MATERIÁL. Bratislavská 2166, Varnsdorf, IČO: tel Číslo projektu
VÝUKOVÝ MATERIÁL Identifikační údaje školy Vyšší odborná škola a Střední škola, Varnsdorf, příspěvková organizace Bratislavská 2166, 407 47 Varnsdorf, IČO: 18383874 www.vosassvdf.cz, tel. +420412372632
Programování v C++ 2, 4. cvičení
Programování v C++ 2, 4. cvičení statické atributy a metody, konstruktory 1 1 Fakulta jaderná a fyzikálně inženýrská České vysoké učení technické v Praze Zimní semestr 2018/2019 Přehled Přístupová práva
PB161 Programování v jazyce C++ Přednáška 10
.. PB161 Programování v jazyce C++ Přednáška 10 Šablony Nikola Beneš 23. listopadu 2015 PB161 přednáška 10: šablony 23. listopadu 2015 1 / 29 K zamyšlení Jaký je rozdíl mezi new int[10] a new int[10]()?
přetížení operátorů (o)
přetížení operátorů (o) - pro vlastní typy je možné přetížit i operátory (tj. definovat vlastní) - pro definici slouží klíčové slovo operator následované typem/znakem operátoru - deklarace pomocí funkčního
Jazyk C++ II. Šablony a implementace
Jazyk C++ II Šablony a implementace AR 2013/2014 Jazyk C++ II Úvod Dědičnost a kompozice nejsou vždy tou správnou odpovědí na požadavky znovupoužitelnosti kódu. Proto máme možnost definování určité třídy
Přetěžování operátorů
Přetěžování operátorů Cíle lekce Cílem lekce je seznámit se s mechanizmem přetížení operátorů a s použitím tohoto mechanizmu při návrhu a implementaci programů. Po absolvování lekce budete: umět využívat
Pokročilé programování v jazyce C pro chemiky (C3220) Vstup a výstup v C++
Pokročilé programování v jazyce C pro chemiky (C3220) Vstup a výstup v C++ Proudy pro standardní vstup a výstup V jazyce C++ provádíme textový vstup a výstup prostřednictvím tzv. datových proudů Datové
Množina čísel int stl-set-int.cpp
Řetězce, pole a STL V C++ je výhodné pro práci s řetězci použít třídu string, funkce C jsou stále k dispozici cstring, ukazatele a pole lze stále používat stejně, jako v C, použití iterátorů a dalších
Zapouzdření. Tomáš Pitner, upravil Marek Šabo
Zapouzdření Tomáš Pitner, upravil Marek Šabo Co je zapouzdření Naprosto zásadní vlastnost objektového přístupu, možná nejzásadnější Jde o spojení dat a práce s nimi do jednoho celku - objektu Data jsou
Mělká a hluboká kopie
Karel Müller, Josef Vogel (ČVUT FIT) Mělká a hluboká kopie BI-PA2, 2011, Přednáška 5 1/28 Mělká a hluboká kopie Ing. Josef Vogel, CSc Katedra softwarového inženýrství Katedra teoretické informatiky, Fakulta
Syntaxe vyjímek. #include <iostream> #include <string> using namespace std; // Trida vyjimek class Vyjimka { private:
Vyjímky. Pod pojmem výjimka se rozumí nějaká výjimečná situace, která nastane v dané funkci. V jazyce C i C++ se často používá návratových hodnot funkcí, které vracejí úspěšnost provádění nějaké operace
24. listopadu 2013, Brno Připravil: David Procházka
24. listopadu 2013, Brno Připravil: David Procházka Dědičnost Základy objektového návrhu Časná a pozdní vazba Strana 2 / 22 Obsah přednášky 1 Časná a pozdní vazba 2 Rozhraní pro dědičnost 3 Konstruktory
8 Třídy, objekty, metody, předávání argumentů metod
8 Třídy, objekty, metody, předávání argumentů metod Studijní cíl Tento studijní blok má za cíl pokračovat v základních prvcích jazyka Java. Konkrétně bude věnována pozornost třídám a objektům, instančním
16. února 2015, Brno Připravil: David Procházka. Konstruktory a destruktory
16. února 2015, Brno Připravil: David Procházka Konstruktory a destruktory Základy objektového návrhu Jak navrhovat použitelné třídy Strana 2 / 26 Obsah přednášky 1 Jak navrhovat použitelné třídy 2 Jak
Programování v C++ 1, 14. cvičení
Programování v C++ 1, 14. cvičení výpustka, přetěžování funkcí, šablony funkcí 1 1 Fakulta jaderná a fyzikálně inženýrská České vysoké učení technické v Praze Zimní semestr 2018/2019 Přehled 1 2 funkcí
2) Napište algoritmus pro vložení položky na konec dvousměrného seznamu. 3) Napište algoritmus pro vyhledání položky v binárním stromu.
Informatika 10. 9. 2013 Jméno a příjmení Rodné číslo 1) Napište algoritmus pro rychlé třídění (quicksort). 2) Napište algoritmus pro vložení položky na konec dvousměrného seznamu. 3) Napište algoritmus
Martin Flusser. Faculty of Nuclear Sciences and Physical Engineering Czech Technical University in Prague. December 7, 2016
ZPRO cvičení 8 Martin Flusser Faculty of Nuclear Sciences and Physical Engineering Czech Technical University in Prague December 7, 2016 Outline I 1 Outline 2 Dynamické alokování paměti 3 Dynamická alokace
KTE / ZPE Informační technologie
4 KTE / ZPE Informační technologie Ing. Petr Kropík, Ph.D. email: pkropik@kte.zcu.cz tel.: +420 377 63 4639, +420 377 63 4606 (odd. informatiky) Katedra teoretické elektrotechniky FEL ZČU Plzeň Největší
C++ objektově orientovaná nadstavba programovacího jazyka C
C++ objektově orientovaná nadstavba programovacího jazyka C (1. část) Josef Dobeš Katedra radioelektroniky (13137), blok B2, místnost 722 dobes@fel.cvut.cz 5. května 2014 České vysoké učení technické v
8. Načítání a zápis PDB souboru
Pokročilé programování v jazyce C pro chemiky (C3220) 8. Načítání a zápis PDB souboru Třída string Typ string není základním vestavěným typem ale je implementován jako třída ve standardní knihovně C++.
Programování v jazyce C pro chemiky (C2160) 12. Specifické problémy při vývoji vědeckého softwaru
Programování v jazyce C pro chemiky (C2160) 12. Specifické problémy při vývoji vědeckého softwaru Reprezentace reálnách čísel v počítači Reálná čísla jsou v počítači reprezentována jako čísla tvaru ±x
Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007
Úvod do programovacích jazyků (Java) Michal Krátký Katedra informatiky VŠB Technická univerzita Ostrava Úvod do programovacích jazyků (Java), 2006/2007 c 2006 Michal Krátký Úvod do programovacích jazyků
Polymorfismus. Časová náročnost lekce: 3 hodiny Datum ukončení a splnění lekce: 30.března
Polymorfismus Cíle lekce Cílem lekce je vysvětlit význam pojmu polymorfismus jako základní vlastnosti objektově orientovaného programování. Lekce objasňuje vztah časné a pozdní vazby a jejich využití.
map, multimap - Asociativní pole v C++.
map, multimap - Asociativní pole v C++. Jedná se o asociativní pole. V asociativním poli jsou uloženy hodnoty ve tvaru (klíč,hodnota), kde klíč je vlastně "index" prvku. Klíčem může být libovolný objekt,
24-2-2 PROMĚNNÉ, KONSTANTY A DATOVÉ TYPY TEORIE DATUM VYTVOŘENÍ: 23.7.2013 KLÍČOVÁ AKTIVITA: 02 PROGRAMOVÁNÍ 2. ROČNÍK (PRG2) HODINOVÁ DOTACE: 1
24-2-2 PROMĚNNÉ, KONSTANTY A DATOVÉ TYPY TEORIE AUTOR DOKUMENTU: MGR. MARTINA SUKOVÁ DATUM VYTVOŘENÍ: 23.7.2013 KLÍČOVÁ AKTIVITA: 02 UČIVO: STUDIJNÍ OBOR: PROGRAMOVÁNÍ 2. ROČNÍK (PRG2) INFORMAČNÍ TECHNOLOGIE
Úvod do programovacích jazyků (Java)
Úvod do programovacích jazyků (Java) Michal Krátký Katedra informatiky VŠB Technická univerzita Ostrava Úvod do programovacích jazyků (Java), 2007/2008 c 2006 2008 Michal Krátký Úvod do programovacích
Programování v C++ 1, 6. cvičení
Programování v C++ 1, 6. cvičení dědičnost, polymorfismus 1 1 Fakulta jaderná a fyzikálně inženýrská České vysoké učení technické v Praze Zimní semestr 2018/2019 Přehled 1 2 3 Shrnutí minule procvičené
Programování v C++ První kroky
Programování v C++ První kroky Karel Mozdřeň 29. října 2009 1 Obsah 1 Úvod 5 1.1 Pro koho je kniha určena...................... 5 1.2 Proč první kroky?.......................... 5 2 Začínáme 6 2.1 Hello,
Základy jazyka C# Obsah přednášky. Architektura.NET Historie Vlastnosti jazyka C# Datové typy Příkazy Prostory jmen Třídy, rozhraní
Základy jazyka C# doc. Ing. Miroslav Beneš, Ph.D. katedra informatiky FEI VŠB-TUO A-1007 / 597 324 213 http://www.cs.vsb.cz/benes Miroslav.Benes@vsb.cz Obsah přednášky Architektura.NET Historie Vlastnosti
1 PRVOCISLA: KRATKY UKAZKOVY PRIKLAD NA DEMONSTRACI BALIKU WEB 1
1 PRVOCISLA: KRATKY UKAZKOVY PRIKLAD NA DEMONSTRACI BALIKU WEB 1 1. Prvocisla: Kratky ukazkovy priklad na demonstraci baliku WEB. Nasledujici program slouzi pouze jako ukazka nekterych moznosti a sluzeb,
Pokročilé programování v jazyce C pro chemiky (C3220) Třídy v C++
Pokročilé programování v jazyce C pro chemiky (C3220) Třídy v C++ Třídy v C++ Třídy jsou uživatelsky definované typy podobné strukturám v C, kromě datových položek (proměnných) však mohou obsahovat i funkce
PB161 Programování v jazyce C++ Přednáška 10
PB161 Programování v jazyce C++ Přednáška 10 Šablony Nikola Beneš 27. listopadu 2017 PB161 přednáška 10: šablony 27. listopadu 2017 1 / 33 Šablony PB161 přednáška 10: šablony 27. listopadu 2017 2 / 33
Automatické testování softwaru. Testujte svůj kód! Předpoklady: Příklad: sum_digits() Možnost 1: Zkusíme funkci použít v konzoli Pythonu.
Automatické testování softwaru Petr Pošík Katedra kybernetiky, FEL ČVUT v Praze OI, B4B33RPH: Řešení problémů a hry, 2016 Předpoklady: funkce moduly Testujte svůj kód! Nebudete vědět, zda váš kód funguje,
Dynamicky vázané metody. Pozdní vazba, virtuální metody
Dynamicky vázané metody Pozdní vazba, virtuální metody Motivace... class TBod protected: float x,y; public: int vrat_pocet_bodu() return 1; ; od třídy TBod odvodíme: class TUsecka: public TBod protected:
Programování v C++ 1, 1. cvičení
Programování v C++ 1, 1. cvičení opakování látky ze základů programování 1 1 Fakulta jaderná a fyzikálně inženýrská České vysoké učení technické v Praze Zimní semestr 2018/2019 Přehled 1 2 Shrnutí procvičených
PB161 Programování v C++ Proudy pro standardní zařízení Souborové proudy Paměťové proudy Manipulátory
PB161 Programování v C++ Proudy pro standardní zařízení Souborové proudy Paměťové proudy Manipulátory Výhody objektového řešení Nástroje pro IO operace jsou v C++ součástí knihoven Hierarchie objektových
Jazyk C++ II. Výjimky
Jazyk C++ II Výjimky AR 2013/2014 Jazyk C++ II Funkce abort Dříve byl obvyklý způsob zavolat metodu abort(). Metoda provádí okamžitě: Vyprázdnění vyrovnávací paměti, Ukončení celého programu, Vrátí číslo
Algoritmizace a programování
Algoritmizace a programování Struktura programu Vytvoření nové aplikace Struktura programu Základní syntaktické elementy První aplikace Verze pro akademický rok 2012/2013 1 Nová aplikace NetBeans Ve vývojovém
PROGRAMOVÁNÍ V C++ URČENO PRO VZDĚLÁVÁNÍ V AKREDITOVANÝCH STUDIJNÍCH PROGRAMECH ROSTISLAV FOJTÍK
PROGRAMOVÁNÍ V C++ URČENO PRO VZDĚLÁVÁNÍ V AKREDITOVANÝCH STUDIJNÍCH PROGRAMECH ROSTISLAV FOJTÍK ČÍSLO OPERAČNÍHO PROGRAMU: CZ.1.07 NÁZEV OPERAČNÍHO PROGRAMU: VZDĚLÁVÁNÍ PRO KONKURENCESCHOPNOST OPATŘENÍ:
1 Nejkratší cesta grafem
Bakalářské zkoušky (příklady otázek) podzim 2014 1 Nejkratší cesta grafem 1. Uvažujte graf s kladným ohodnocením hran (délka). Definujte formálně problém hledání nejkratší cesty mezi dvěma uzly tohoto
Úvod do programování - Java. Cvičení č.4
Úvod do programování - Java Cvičení č.4 1 Sekvence (posloupnost) Sekvence je tvořena posloupností jednoho nebo více příkazů, které se provádějí v pevně daném pořadí. Příkaz se začne provádět až po ukončení
IUJCE Přednáška č. 11. další prvky globální proměnné, řízení viditelnosti proměnných, funkcí
Velké projekty v C velký = 100ky a více řádek udržovatelnost, bezpečnost, přehlednost kódu rozdělení programu do více souborů další prvky globální proměnné, řízení viditelnosti proměnných, funkcí Globální
PB161 Programování v jazyce C++ Přednáška 9
PB161 Programování v jazyce C++ Přednáška 9 Právo friend Přetěžování operátorů Nikola Beneš 16. listopadu 2015 PB161 přednáška 9: friend, přetěžování operátorů 16. listopadu 2015 1 / 30 Reklama PB173 Tematicky
PB161 Programování v jazyce C++ Přednáška 5
PB161 Programování v jazyce C++ Přednáška 5 Jmenné prostory Vstupní/výstupní proudy Nikola Beneš 19. října 2015 PB161 přednáška 5: jmenné prostory, vstupní/výstupní proudy 19. října 2015 1 / 29 Jmenné
Dědění, polymorfismus
Programování v jazyce C/C++ Ladislav Vagner úprava Pavel Strnad Dědění. Polymorfismus. Dnešní přednáška Statická a dynamická vazba. Vnitřní reprezentace. VMT tabulka virtuálních metod. Časté chyby. Minulá
Hotelová škola, Obchodní akademie a Střední průmyslová škola Teplice,Benešovo náměstí 1, příspěvková organizace
Hotelová škola, Obchodní akademie a Střední průmyslová škola Teplice,Benešovo náměstí 1, příspěvková organizace VZDĚLÁVACÍ MATERIÁL ZPRACOVÁN V RÁMCI PROJEKTU EU PENÍZE STŘEDNÍM ŠKOLÁM - OPVK 1.5 Registrační
konstruktory a destruktory (o)
konstruktory a destruktory (o) - slouží k ovlivnění vzniku (inicializace) a zániku (úklid) objektu - základní myšlenkou je, že proměnná by měla být inicializována (nastavena do počátečního stavu) a zároveň
Základy programovaní 3 - Java. Unit testy. Petr Krajča. Katedra informatiky Univerzita Palackého v Olomouci. 26.,27.
Základy programovaní 3 - Java Unit testy Petr Krajča Katedra informatiky Univerzita Palackého v Olomouci 26.,27. listopad, 2014 Petr Krajča (UP) Unit testy 26.,27. listopad, 2014 1 / 14 Testování zásadní
Aplikace Embedded systémů v Mechatronice. Michal Bastl A2/713a
Aplikace Embedded systémů v Mechatronice Aplikace Embedded systémů v Mechatronice Obsah přednášky: Opakovaní Funkce v C Tvorba knihoven Konfigurační bity #pragma Makra v C #define Debugging v MPLAB Hardware
PREPROCESOR POKRAČOVÁNÍ
PREPROCESOR POKRAČOVÁNÍ Chybová hlášení V C# podobně jako v C++ existuje direktiva #error, která způsobí vypsání chybového hlášení překladačem a zastavení překladu. jazyk C# navíc nabízí direktivu #warning,
Testování. Zadání příkladu. Vytvoření kostry třídy. Obsah:
Obsah: Testování... 1 Zadání příkladu... 1 Vytvoření kostry třídy... 1 Napsání testů... 2 Testy správnosti... 3 Testy výjimek... 3 Testy vztahů/závislostí... 4 Zdrojový text testu... 4 Spuštění testů...
11.5.2012. Obsah přednášky 9. Skrývání informací. Skrývání informací. Zapouzdření. Skrývání informací. Základy programování (IZAPR, IZKPR) Přednáška 9
Obsah přednášky 9 Základy programování (IZAPR, IZKPR) Přednáška 9 Základy dědičnosti, přístupová práva Ing. Michael Bažant, Ph.D. Katedra softwarových technologií Kancelář č. 03 022, Náměstí Čs. legií
Úvod Třídy Rozhraní Pole Konec. Programování v C# Hodnotové datové typy, řídící struktury. Petr Vaněček 1 / 39
Programování v C# Hodnotové datové typy, řídící struktury Petr Vaněček 1 / 39 Obsah přednášky Referenční datové typy datové položky metody přístupové metody accessory, indexery Rozhraní Pole 2 / 39 Třídy
PB161 Programování v jazyce C++ Přednáška 4
PB161 Programování v jazyce C++ Přednáška 4 Přetěžování funkcí Konstruktory a destruktory Nikola Beneš 9. října 2017 PB161 přednáška 4: přetěžování funkcí, konstruktory, destruktory 9. října 2017 1 / 20
Množina v C++ (set, multiset).
Množina v C++ (set, multiset). Množina je datová struktura, ve které jsou uloženy nějaké prvky. V množině nesmí být dva stejné prvky. Naopak multimnožina může obsahovat i stejné prvky. Nad množinou lze
Architektura COM. Historie Component Object Model (COM) Komunikace s komponentami Rozhraní komponent COM komponenty v.net.
Architektura COM doc. Ing. Miroslav Beneš, Ph.D. katedra informatiky FEI VŠB-TUO A-1007 / 597 324 213 http://www.cs.vsb.cz/benes Miroslav.Benes@vsb.cz Obsah přednášky Historie Component Object Model (COM)
III/2 Inovace a zkvalitnění výuky prostřednictvím ICT
Číslo a název šablony Číslo didaktického materiálu Druh didaktického materiálu Autor Jazyk Téma sady didaktických materiálů Téma didaktického materiálu Vyučovací předmět Cílová skupina (ročník) Úroveň
Objekty a třídy. Procedurální a objektově orientované programování. V této kapitole se naučíte: Procedurální a objektově orientované programování
Objekty a třídy Objektově orientované programování (OOP) je určitý koncepční přístup návrhu programů a jazyk C++ rozšiřuje jazyk C o vlastnosti, které jeho použití usnadňují. Mezi nejdůležitější vlastnosti
Digitální učební materiál
Digitální učební materiál Číslo projektu: CZ.1.07/1.5.00/34.0548 Název školy: Gymnázium, Trutnov, Jiráskovo náměstí 325 Název materiálu: VY_32_INOVACE_142_IVT Autor: Ing. Pavel Bezděk Tematický okruh:
Generické programování
Generické programování Od C# verze 2.0 = vytváření kódu s obecným datovým typem Příklad generická metoda, zamění dva parametry: static void Swap(ref T p1, ref T p2) T temp; temp = p1; p1 = p2; p2 =
Jazyk C# (seminář 5)
Jazyk C# (seminář 5) Pavel Procházka KMI 23. října 2014 Přetěžování metod motivace Představme si, že máme metodu, která uvnitř dělá prakticky to samé, ale liší se pouze parametry V C# můžeme více metod
Chování konstruktorů a destruktorů při dědění
Dědičnost V objektově orientovaném programování je dědičnost způsob, jak vytvořit novou třídu použitím již existujících definic jiných tříd. Takto vytvořené třídy přebírají vlastnosti a metody svého předka
Výčtový typ strana 67
Výčtový typ strana 67 8. Výčtový typ V této kapitole si ukážeme, jak implementovat v Javě statické seznamy konstant (hodnot). Příkladem mohou být dny v týdnu, měsíce v roce, planety obíhající kolem slunce
Jazyk C++ I. Šablony
Jazyk C++ I Šablony AR 2013/2014 Jazyk C++ I Úvod Zatím známe programovací styly: Strukturované programování, Objektově orientované programovaní. AR 2013/2014 Jazyk C++ I 2 Příklady void Print(const int&
Jazyk C++ I. Šablony 2
Jazyk C++ I Šablony 2 AR 2013/2014 Jazyk C++ I Třídy template class TVektor { T *a; int n; static int PocInstanci; public: TVektor(int _n = 0) : n(_n) { a = new T[n]; PocInstanci++; } ~TVektor()
III/2 Inovace a zkvalitnění výuky prostřednictvím ICT
Číslo a název šablony Číslo didaktického materiálu Druh didaktického materiálu Autor Jazyk Téma sady didaktických materiálů Téma didaktického materiálu Vyučovací předmět Cílová skupina (ročník) Úroveň