Plug-iny definující nové příkazy
|
|
- Otto Esterka
- před 6 lety
- Počet zobrazení:
Transkript
1 Plug-iny definující nové příkazy Třída MPxCommand Základní třída pro odvozování nových příkazů, které se volají z příkazové řádky MELu. Příkaz může, ale nemusí implementovat undo. Tyto prikazy neumi zpracovavat udalosti generovane mysi. Následující příklad vytváří nový příkaz "doselection", který ve scéně vybere všechny objekty jejichž jméno obsahuje zadaný řetězec. #include <stdio.h> #include <maya/mstring.h> #include <maya/marglist.h> #include <maya/mfnplugin.h> #include <maya/mpxcommand.h> #include <maya/mselectionlist.h> #include <maya/mglobal.h> #include <maya/msyntax.h> #include <maya/margdatabase.h> #include <maya/mdagpath.h> #include <maya/mfndagnode.h> // Novy prikaz doselectioncmd je potomkem tridy MPxCommand. class doselectioncmd : public MPxCommand { // Konstruktor tridy. doselectioncmd() { // Destruktor tridy. virtual ~doselectioncmd() { // Metoda provadejici pozadovanou akci - prikaz. // Obvykle zpracuje parametry prikazove radky + selection list a nastavi vnitrni promen // Pro vlastni provedeni akce prikazu zavola metodu redoit(). MStatus doit( const MArgList& ); // Jadro tridy - zde se provadi vlastni akce prikazu. Chovani prikazu je ovlivneno // stavem vnitrnich promennych nastavenych v doit(). MStatus redoit(); // Metoda provadi undo - tedy opak operaci provedenych v redoit(). MStatus undoit(); // Metoda vracejici true / false podle toho zda prikaz implementuje undo nebo ne. // Ne vsechny prikazy museji implementovat undo. bool isundoable() const; // Staticka metoda pro vytvareni instanci teto tridy (tuto metodu vola Maya). // Staticka metoda popisujici parametry prikazove radky pomoci objektu MSyntax. // Ukazatel na metodu je predavan prikazu registercommand(). // MSyntax objekt vytvoreny touto metodou je vracen pri volani metody syntax(). static MSyntax newsyntax(); // Uzivatelska metoda, ktera zpracovava parametry prikazove radky. MStatus parseargs(const MArgList &args); MString _name; // vzor hledany ve jmenech objektu ve scene MSelectionList _selectionlist; // zalozni kopie seznamu vybranych objektu v okamziku // Metoda volana pri prvnim provedeni prikazu. MStatus doselectioncmd::doit( const MArgList& args) { // Volani metody zpracovavajici parametry prikazove radky. MStatus status = parseargs(args); status.perror("error: parseargs()"); // Nastaveni vnitrnich promennych tridy. // // Zazalohovani seznamu vybranych objektu. status = MGlobal::getActiveSelectionList(_selectionList); status.perror("error: getactiveselectionlist()"); // Provedeni pozadovane akce prikazu. status = redoit(); // Jadro tridy - zde se provadi vlastni akce prikazu. Metoda je volana z doit() // a pri pozadavku znovu vykonani prikazu. MStatus doselectioncmd::redoit() { MDagPath node; // cesta k objektu v DAG MObject component; // uzel / objekt DAG MFnDagNode nodefn; // Oznaceni vsech objektu odpovidajicich zadanemu vyrazu. // MStatus status = MGlobal::selectByName(_name, MGlobal::kReplaceList); MSelectionList newselectionlist; MStatus status = MGlobal::getSelectionListByName(_name, newselectionlist); printf("\nseznam vybranych objektu (%i objektu):\n", newselectionlist.length()); // postupne prochazeni seznamu - vypsani vsech oznacenych objektu for ( unsigned int index = 0; index < newselectionlist.length(); index++ ) { // ziskani uzlu reprezentovaneho indexem index a cesty k tomuto uzlu v DAG newselectionlist.getdagpath( index, node, component ); // nastaveni objektu nad kterym bude function set pracovat nodefn.setobject( node ); // vypsani jmena uzlu printf("* %s\n", nodefn.name().aschar() ); // Prikaz muze take vracet navratove hodnoty do MELu - pro tento ucel lze // vyuzit pretizene metody "setresult" a "appendtoresult". // Nasledujici sekvence prikazu vraci jako vysledek cislo pocet // prvku v selection listu newselectionlist. int result = newselectionlist.length(); clearresult(); // inicializace mista kam se bude ukladat vysledek setresult( result ); // ulozeni vysledku // Nasledujici priklad ukazuje jak lze vratit pole doublu reprezentujici bod. // Metoda appendtoresult pridava zadanou hodnotu na konec pole, ktere reprezentuje vysl // MPoint result (1.0, 2.0, 3.0); // clearresult(); // inicializace mista kam se bude ukladat vysledek // appendtoresult( result.x ); // pridani x-ove souradnice k vysledku // appendtoresult( result.y ); // pridani y-ove souradnice k vysledku // appendtoresult( result.z ); // pridani z-ove souradnice k vysledku // Muzeme ale take vratit primo pole. // MDoubleArray result; // pole reprezentujici vysledek // MPoint point (1.0, 2.0, 3.0); // vysledny bod // result.append( point.x ); // pridani x-ove souradnice do pole result // result.append( point.y ); // pridani y-ove souradnice do pole result 1 of :05 2 of :05
2 // result.append( point.z ); // pridani z-ove souradnice do pole result // clearresult(); // inicializace mista kam se bude ukladat vysledek // setresult( result ); // ulozeni vysledku // Nastaveni noveho seznamu vybranych objektu. status = MGlobal::setActiveSelectionList(newSelectionList, MGlobal::kReplaceList); // Metoda implementujici undo - navrat ke stavu pred volanim prikazu. MStatus doselectioncmd::undoit() { // Obnoveni puvodniho seznamu vybranych objektu. return MGlobal::setActiveSelectionList(_selectionList, MGlobal::kReplaceList); // Implementuje prikaz undo? bool doselectioncmd::isundoable() const { return true; // Metoda volana Mayou pro vytvoreni instance teto tridy. void* doselectioncmd::creator() { return new doselectioncmd(); // Definice kratkych a dlouhych jmen parametru prikazove radky. #define knameflag "-n" #define knameflaglong "-name" // Registrace noveho prikazu - parametrem je jmeno prikazu, ukazatel na // metodu vytvarejici instance teto tridy a ukazatel na metodu vytvarejici // objekt MSyntax popisujici syntaxi parametru prikazove radky. status = plugin.registercommand( "doselection", doselectioncmd::creator, doselectioncmd status.perror("error: registercommand()"); // Metoda volana Mayou pri odstranovani plug-inu. MStatus uninitializeplugin( MObject obj ) { status = plugin.deregistercommand( "doselection" ); status.perror("error: deregistercommand()"); Nasledujici obrazky ukazuji priklad pouziti nove definovaneho prikazu - doselection -name "nurbs*";. // Staticka metoda popisujici parametry prikazove radky pomoci objektu MSyntax. MSyntax doselectioncmd::newsyntax() { MSyntax syntax; // trida obsahujici definici parametru prikazove radky // Pridani definice jednoho parametru jehoz hodnotou bude string. syntax.addflag(knameflag, knameflaglong, MSyntax::kString); // Ukazka pridani definice prepinace (parametru ktery nema hodnotu). // #define kbreadthflag "-b" // #define kbreadthflaglong "-breadth" // syntax.addflag(kbreadthflag, kbreadthflaglong); return syntax; // Uzivatelska metoda, ktera zpracovava parametry prikazove radky. MStatus doselectioncmd::parseargs(const MArgList &args) { // MArgDatabase je parser pro zpracovani parametru prikazove radky. // Parametry jsou MSyntax objekt a MArgList. // Misto MArgDatabase muzete take pouzit tridu MArgParser. MArgDatabase argdata(syntax(), args); // Test zda byl pouzit flag "-name". if (argdata.isflagset(knameflag)) { // Pro ziskani hodnoty parametru lze vyuzit metody getflagargument(). // Ziskani hodnoty parametru knameflag. argdata.getflagargument(knameflag, 0, _name); else _name = "*Cube*"; // Metoda zajistujici inicializaci plug-inu - v tomto pripade registraci // noveho prikazu doselection. MFnPlugin plugin( obj, "Jara", "1.0", "Any" ); Třída MPxContext Třídy odvozené z MPxContext definují jakým způsobem se budou zpracovávat akce provedené myší. Tyto třídy mohou spouštět jiné příkazy, modifikovat seznam vybraných objektů a kreslit. V Maye jsou třídy odvozené z MPxContext nazývány "tool". Pro vytváření instancí této třídy je nutné vytvořit třídu odvozenou z MPxContextCommand. Typicky tool založený na MPxContext obsahuje metody uvedene v nasledujicim prikladu, ktery umoznuje pomoci mysi vybrat obdelnikovou oblast. S obdelnikovou oblasti 3 of :05 4 of :05
3 je provedena akce implementovana tridou mytool (potomek tridy MPxContextCommand a jeji definice bude uvedena pozdeji). const char helpstring[] = "Použijte prostřední tlačítko pro označení oblasti "; class mycontext : public MPxContext { mycontext(); // Metoda volaná při aktivaci toolu. virtual void toolonsetup( MEvent & event ); // Metoda volaná při stisknutí tlačítka myši. virtual MStatus dopress( MEvent & event ); // Metoda volaná při pohyby myši se stiskutým tlačítkem. virtual MStatus dodrag( MEvent & event ); // Metoda volaná při uvolnění tlačítka myši. virtual MStatus dorelease( MEvent & event ); short start_x, start_y; // počáteční pozice myši short last_x, last_y; // koncová pozice myši M3dView view; // třída reprezentující aktuální kreslící okno mycontext::mycontext() { // Jméno toolu, které je při jeho aktivaci vypsáno v UI. settitlestring ( "Template of Tool" ); // Metoda volaná při vyvolání toolu - obvykle vypisuje help a provádí potřebnou inicializ void mycontext::toolonsetup ( MEvent & ) { // Vypsání nápovědy na příkazovou řádku. sethelpstring( helpstring ); // Tato metoda je volána při stisku tlačítka myši (pokud je tool aktivní). // Třída MEvent obsahuje informace o provedené akci. MStatus mycontext::dopress( MEvent & event ) { // Zapamatujeme si pozici myši v okamžiku stisku tlačítka (souřadnice okna). event.getposition( start_x, start_y ); // Přepnutí na aktivní okno. view = M3dView::active3dView(); // Začátek kreslení - povolení kreslení pomocí OpenGL. view.begingl(); // Nastavení OpenGL kontextu pro pkreslení do Overlay Plane. view.beginoverlaydrawing(); // Tato metoda je volána pokud pohybujete myší se stisknutým tlačítkem. MStatus mycontext::dodrag( MEvent & event ) { // Uložení aktuální pozice myši. event.getposition( last_x, last_y ); // Vymazání Overlay Plane. view.clearoverlayplane(); // Vykreslení obdélníku, který ohraničuje oblast vybranou myší. glmatrixmode( GL_PROJECTION ); glloadidentity(); gluortho2d( 0.0, (GLdouble) view.portwidth(), 0.0, (GLdouble) view.portheight() ); glmatrixmode( GL_MODELVIEW ); glloadidentity(); gltranslatef(0.375, 0.375, 0.0); glbegin( GL_LINE_LOOP ); glvertex2i( start_x, start_y ); glvertex2i( last_x, start_y ); glvertex2i( last_x, last_y ); glvertex2i( start_x, last_y ); glend(); #ifndef _WIN32 glxswapbuffers(view.display(), view.window() ); #else SwapBuffers(view.deviceContext() ); #endif // Metoda, která je volána při uvolnění tlačítka myši. MStatus mycontext::dorelease( MEvent & event ) { // Ukončení kreslení - vymazání Overlay Plane a deaktivace OpenGL. view.clearoverlayplane(); view.endoverlaydrawing(); view.endgl(); // Uložení pozice myši v okamžiku uvolnění tlačítka. event.getposition( last_x, last_y ); provedení nějaké akce - např. výběr objektů nacházejících se v oblasti definované pomocí (start_x, start_y, last_x, last_y) // Ukazka zavolani prikazu definovaneho tridou mytool (viz dale) mytool *cmd = (mytool*)newtoolcommand(); cmd->setselectionarea( start_x, start_y, last_x, last_y ); cmd->redoit(); cmd->finalize(); Třída MPxContextCommand Speciální třída MPxContextCommand slouží pro odvození příkazů jejichž hlavním ukolem je vytvoření instance toolu (tedy potomka třídy MPxContext). Tyto příkazy nikdy neimplementují operaci undo. Kostra této třídy vypadá takto: class mycontextcmd : public MPxContextCommand { 5 of :05 6 of :05
4 mycontextcmd(); // Metoda vytvářející instance třídy odvozené z MPxContext. virtual MPxContext* makeobj(); // Metoda vytvářející instance této třídy. mycontextcmd::mycontextcmd() { // Tuto metodu používá Maya pro vytváření instancí toolu (třídy odvozené z MPxContext). MPxContext* mycontextcmd::makeobj() { return new mycontext(); // Metoda volaná Mayou pro vytváření instancí třídy mycontextcmd. void* mycontextcmd::creator() { return new mycontextcmd; // Inicializace plug-inu. MFnPlugin plugin( obj, "Alias", "1.0", "Any"); // registrace příkazu pro vytváření kontextu. status = plugin.registercontextcommand( "mytoolcontext", mycontextcmd::creator ); // Metoda volaná při odstraňování plug-inu z Mayi. MStatus uninitializeplugin( MObject obj ) { // odregistrování příkazu. status = plugin.deregistercontextcommand( "mytoolcontext" ); Přidání toolu do Mayi Následující MEL script vytvoří tool a tlačítko pro tento tool. mytoolcontext mytoolcontext1; // Vytvoření instance mycontext. setparent Custom; // Budeme přidávat do Shelf1. toolbutton -cl toolcluster // Do jaké kolekce se má tool přidat. -t mytoolcontext1 // Jméno toolu připojovaného k tlačítku. -i1 "mytool.xpm" mujtool1; // Ikona reprezentující tento tool a jméno t Tento kód může být také uložen do souboru a spušťen přímo při inicializaci plug-inu v metodě initializeplugin() zavoláním metody MGlobal::sourceFile(). Třída MPxToolCommand Třída MPxToolCommand představuje základ příkazů, které lze volat z toolů (potomci třídy MPxContext). Takto vytvořené příkazy lze samozřejmě spouštět přímo z příkazové řádky. Příkazy mohou být ale volány z toolů a proto musejí obsahovat navíc metody pomocí nichž tool nastaví parametry příkazu, které jsou za normalních okolností předávány z příkazové řádky. Třída je odvozena z třídy MPxCommand, ale obsahuje navíc další metody. Každý tool může spouštět pouze jeden příkaz a ten musí být zaregistrován při inicualizaci plug-inu. Následující příklad ukazuje typickou kostru příkazu odvozeného z třídy MPxToolCommand. class mytool : public MPxToolCommand { mytool(); virtual ~mytool(); // Následující metody mají stejný význam jako metody ve třídě MPxCommand. MStatus doit( const MArgList& args ); MStatus redoit(); MStatus undoit(); bool isundoable() const; static MSyntax newsyntax(); // Metoda vypisující informace o tomto příkazu do log souboru. MStatus finalize(); // Pomocné metody sloužící pro nastavení parametrů plug-inu pokud není volán z příkazov void setselectionarea( double startx, double starty, double endx, double endy ); void setradius( double newradius ); // Proměnné pro uložení nastavení jednotlivých parametrů. double startx, starty; double endx, endy; double radius; void* mytool::creator() { return new mytool; mytool::~mytool() { mytool::mytool() { // Nastavení jména tohoto příkazu - požito v metodě finalize(). setcommandstring( "helixtoolcmd" ); MSyntax mytool::newsyntax() { MSyntax syntax; syntax.addflag(kpitchflag, kpitchflaglong, MSyntax::kDouble); return syntax; MStatus mytool::doit( const MArgList &args ) { status = parseargs(args); if (MS::kSuccess!= status) return redoit(); 7 of :05 8 of :05
5 MStatus mytool::parseargs(const MArgList &args) { MArgDatabase argdata(syntax(), args); if (argdata.isflagset(kradiusflag)) { double tmp; status = argdata.getflagargument(kradiusflag, 0, tmp); status.perror("radius flag parsing failed."); radius = tmp; MStatus mytool::redoit() { MStatus stat; return stat; MStatus mytool::undoit() { MStatus stat; "mytoolcontext", mycontextcmd::creator, "mytoolcmd", mytool::creator, mytool::newsyntax); status.perror("registercontextcommand"); MStatus uninitializeplugin( MObject obj) { // Deregister the tool command and the context creation command. status = plugin.deregistercontextcommand( "mytoolcontext", "mytoolcmd" ); status.perror("deregistercontextcommand"); Příklady plug-inu helix tool (kresleni spiraly do obdelniku zadaneho pomoci mysi) helixtool.cpp helixtool.mel lasso tool (vyber objektu v oblasti oznacene mysi) lassotool.cpp lassotoolcreateui.mel return stat; bool mytool::isundoable() const { return true; // Metoda zapisující příkazový řádek pomocí kterého byl příkaz spuštěn do log souboru. MStatus mytool::finalize() { MArgList command; command.addarg( commandstring() ); command.addarg( MString(kRadiusFlag) ); command.addarg( radius ); return MPxToolCommand::doFinalize( command ); void mytool::setradius( double newradius ) { radius = newradius; void mytool::setselectionarea( double startx, double starty, double endx, double endy ) { _startx = startx; _starty = starty; _endx = endx; _endy = endy; MFnPlugin plugin(obj, "Alias", "3.0", "Any"); // Register the context creation command and the tool command // that the helixcontext will use. status = plugin.registercontextcommand( 9 of :05 10 of :05
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
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
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,
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
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í
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,
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
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
Ú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í
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 =
Ú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
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í
Ú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
7. přednáška - třídy, objekty třídy objekty atributy tříd metody tříd
7. přednáška - třídy, objekty třídy objekty atributy tříd metody tříd Algoritmizace (Y36ALG), Šumperk - 7. přednáška 1 Třída jako zdroj funkcionality Třída v jazyku Java je programová jednotka tvořená
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í
Problém, jehož různé instance je třeba často řešit Tyto instance lze vyjádřit větami v jednoduchém jazyce
Interpreter Interpreter Motivace Problém, jehož různé instance je třeba často řešit Tyto instance lze vyjádřit větami v jednoduchém jazyce Příklad: zda daný textový řetězec odpovídá nějakému vzoru (match)
<surface name="pozadi" file="obrazky/pozadi/pozadi.png"/> ****************************************************************************
zdroje/zdroje.xml
State. Známý jako. Účel. Použitelnost. Stav, Object for States. umožňuje objektu měnit svoje chování v závislosti na stavu objekt mění svou třídu
State State Známý jako Stav, Object for States Účel umožňuje objektu měnit svoje chování v závislosti na stavu objekt mění svou třídu Použitelnost chování objektu závisí na jeho stavu, který se mění za
TŘÍDY POKRAČOVÁNÍ. Události pokračování. Příklad. public delegate void ZmenaSouradnicEventHandler (object sender, EventArgs e);
TŘÍDY POKRAČOVÁNÍ Události pokračování public delegate void ZmenaSouradnicEventHandler (object sender, EventArgs e); class Bod private int x; private int y; public event ZmenaSouradnicEventHandler ZmenaSouradnic;
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()
Algoritmizace a programování
Algoritmizace a programování Řídicí struktury jazyka Java Struktura programu Příkazy jazyka Blok příkazů Logické příkazy Ternární logický operátor Verze pro akademický rok 2012/2013 1 Struktura programu
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
Bridge. Známý jako. Účel. Použitelnost. Handle/Body
Bridge Bridge Známý jako Handle/Body Účel odděluje abstrakci (rozhraní a jeho sémantiku) od její konkrétní implementace předchází zbytečnému nárůstu počtu tříd při přidávání implementací používá se v době
PŘETĚŽOVÁNÍ OPERÁTORŮ
PŘETĚŽOVÁNÍ OPERÁTORŮ Jazyk C# podobně jako jazyk C++ umožňuje přetěžovat operátory, tj. rozšířit definice některých standardních operátorů na uživatelem definované typy (třídy a struktury). Stejně jako
Střední škola pedagogická, hotelnictví a služeb, Litoměříce, příspěvková organizace
Střední škola pedagogická, hotelnictví a služeb, Litoměříce, příspěvková organizace Předmět: Vývoj aplikací Téma: Datové typy Vyučující: Ing. Milan Káža Třída: EK3 Hodina: 5 Číslo: V/5 Programování v jazyce
Programování v C++ 2, 8. cvičení
Programování v C++ 2, 8. cvičení návrhový vzor iterátor 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
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é
Definice třídy. úplná definice. public veřejná třída abstract nesmí být vytvářeny instance final nelze vytvářet potomky
JAVA Třídy Definice třídy úplná definice [public] [abstract] [final] class Jmeno [extends Predek] [impelements SeznamInterfacu] {... // telo tridy public veřejná třída abstract nesmí být vytvářeny instance
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é
IRAE 07/08 Přednáška č. 2. atr1 atr2. atr1 atr2 -33
Objekt jako proměnná Objekty a metody Objekt = proměnná referenčního typu vznik pomocí new, chování viz pole jako referenční proměnná minulý semestr Stack Heap objekt ref this 10 20 atr1 atr2 jinyobjekt
Příklad : String txt1 = new String( Ahoj vsichni! ); //vytvoří instanci třídy String a přiřadí ji vnitřní hodnotu Ahoj vsichni!
Java práce s řetězci Trochu povídání.. Řetězce jsou v Javě reprezentovány instancemi tříd StringBuffer a String. Tyto třídy jsou součástí balíčku java.lang, tudíž je možno s nimi pracovat ihned bez nutného
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í
Kolekce, cyklus foreach
Kolekce, cyklus foreach Jen informativně Kolekce = seskupení prvků (objektů) Jednu již známe pole (Array) Kolekce v C# = třída, která implementuje IEnumerable (ICollection) Cyklus foreach ArrayList pro
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í
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ů
Struktura programu v době běhu
Struktura programu v době běhu Miroslav Beneš Dušan Kolář Struktura programu v době běhu Vztah mezi zdrojovým programem a činností přeloženého programu reprezentace dat správa paměti aktivace podprogramů
Obsah. Předmluva 13 Zpětná vazba od čtenářů 14 Zdrojové kódy ke knize 15 Errata 15
Předmluva 13 Zpětná vazba od čtenářů 14 Zdrojové kódy ke knize 15 Errata 15 KAPITOLA 1 Úvod do programo vání v jazyce C++ 17 Základní pojmy 17 Proměnné a konstanty 18 Typy příkazů 18 IDE integrované vývojové
MRBT. Stacionární průmyslový robot EPSON C3 aplikace pro prezentaci
FAKULTA ELEKTROTECHNIKY A KOMUNIKAČNÍCH TECHNOLOGIÍ VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ MRBT Stacionární průmyslový robot EPSON C3 aplikace pro prezentaci Autoři: Jaromír Picka ID:115255 Jaroslav Večeřa ID:115306
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
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ů
Programování v jazyce C a C++
Programování v jazyce C a C++ Richter 1 Petyovský 2 1. března 2015 1 Ing. Richter Miloslav, Ph.D., UAMT FEKT VUT Brno 2 Ing. Petyovský Petr, UAMT FEKT VUT Brno C++ Stručná charakteristika Nesdíĺı normu
Programování v C++ 2, 7. cvičení
Programování v C++ 2, 7. cvičení spojový seznam 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 Dědění
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:
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ů
typová konverze typová inference
Seminář Java Programování v Javě II Radek Kočí Fakulta informačních technologií VUT Únor 2008 Radek Kočí Seminář Java Programování v Javě (2) 1/ 36 Téma přednášky Rozhraní: použití, dědičnost Hierarchie
Programování v Javě I. Leden 2008
Seminář Java Programování v Javě I Radek Kočí Fakulta informačních technologií VUT Leden 2008 Radek Kočí Seminář Java Programování v Javě (1) 1/ 45 Téma přednášky Datové typy Deklarace třídy Modifikátory
Objektově orientované programování
10. října 2011 Pragmatické informace Volitelný předmět, zápočet: zápočtový program(s dokumentací), aktivní účast na cvičení(body v CodExu), praktický test, zkouška: zkoušková písemka na objektový návrh
KTE / ZPE Informační technologie
7 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ň - ternární
Jazyk C# a platforma.net
Jazyk C# a platforma.net Katedra softwarového inženýrství Fakulta informačních technologií České vysoké učení technické v Praze Pavel Štěpán, 2011 Syntaxe jazyka C# - 1. část BI-DNP Evropský sociální fond
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
Základy objektové orientace I. Únor 2010
Seminář Java Základy objektové orientace I Radek Kočí Fakulta informačních technologií VUT Únor 2010 Radek Kočí Seminář Java Základy OO (1) 1/ 20 Téma přednášky Charakteristika objektově orientovaných
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
Základy programování (IZP)
Základy programování (IZP) Jedenácté počítačové cvičení Brno University of Technology, Faculty of Information Technology Božetěchova 1/2, 612 66 Brno - Královo Pole Gabriela Nečasová, inecasova@fit.vutbr.cz
Abstraktní datové typy
Karel Müller, Josef Vogel (ČVUT FIT) Abstraktní datové typy BI-PA2, 2011, Přednáška 10 1/27 Abstraktní datové typy Ing. Josef Vogel, CSc Katedra softwarového inženýrství Katedra teoretické informatiky,
Virtuální metody - polymorfizmus
- polymorfizmus - potomka lze použít v místě, kde je možné použít předka - v dosud probraných situacích byly vždy volány funkce, které jsou známy již v době překladu. V situaci, kdy v době překladu není
int ii char [16] double dd název adresa / proměnná N = nevyužito xxx xxx xxx N xxx xxx N xxx N
Struktura (union) - struktura a union jsou složené typy, které "v sobě" mohou obsahovat více proměnných - struktura obsahuje v každém okamžiku všechny své proměnné, union obsahuje (=je "aktivní") pouze
Java a XML. 10/26/09 1/7 Java a XML
Java a XML Java i XML jsou přenositelné V javě existuje podpora pro práci s XML, nejčastější akce prováděné při zpracování XML: načítání XML elementů generování nových elementů nebo úprava starého zápis
Úvod do jazyka C. Ing. Jan Fikejz (KST, FEI) Fakulta elektrotechniky a informatiky Katedra softwarových technologií
1 Fakulta elektrotechniky a informatiky Katedra softwarových technologií 12. října 2009 Organizace výuky Přednášky Teoretické základy dle normy jazyka C Cvičení Praktické úlohy odpřednášené látky Prostřední
Dynamické datové struktury I.
Dynamické datové struktury I. Seznam. Fronta. Zásobník. Tomáš Bayer bayertom@natur.cuni.cz Katedra aplikované geoinformatiky a kartografie, Přírodovědecká fakulta UK. Tomáš Bayer bayertom@natur.cuni.cz
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)
Seznamy a iterátory. Kolekce obecně. Rozhraní kolekce. Procházení kolekcí
Kolekce obecně Seznamy a iterátory 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 Kolekce ::= homogenní sada prvků
ZPRO v "C" Ing. Vít Hanousek. verze 0.3
verze 0.3 Hello World Nejjednoduší program ukazující vypsání textu. #include using namespace std; int main(void) { cout
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ň
Seminář Java II p.1/43
Seminář Java II Seminář Java II p.1/43 Rekapitulace Java je case sensitive Zdrojový kód (soubor.java) obsahuje jednu veřejnou třídu Třídy jsou organizovány do balíků Hierarchie balíků odpovídá hierarchii
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
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
20. Projekt Domácí mediotéka
Projekt Domácí mediotéka strana 211 20. Projekt Domácí mediotéka 20.1. Základní popis, zadání úkolu V projektu Domácí mediotéka (Dome) se jednoduchým způsobem evidují CD a videa. Projekt je velmi jednoduchý
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ší
Základy programování (IZP)
Základy programování (IZP) Deváté počítačové cvičení Brno University of Technology, Faculty of Information Technology Božetěchova 1/2, 612 66 Brno - Královo Pole Petr Veigend, iveigend@fit.vutbr.cz 27.11.2017,
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í
Zápis programu v jazyce C#
Zápis programu v jazyce C# Základní syntaktická pravidla C# = case sensitive jazyk rozlišuje velikost písmen Tzv. bílé znaky (Enter, mezera, tab ) ve ZK překladač ignoruje každý příkaz končí ; oddělovač
Programování v Javě I. Únor 2009
Seminář Java Programování v Javě I Radek Kočí Fakulta informačních technologií VUT Únor 2009 Radek Kočí Seminář Java Programování v Javě (1) 1/ 44 Téma přednášky Datové typy Deklarace třídy Modifikátory
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á
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í
Jazyk C++ I. Polymorfismus
Jazyk C++ I Polymorfismus AR 2013/2014 Jazyk C++ I Operátory Co to vůbec jsou operátory? Na co je používáme? AR 2013/2014 Jazyk C++ I 2 Operátory Můžeme si upravit operátory pro vlastní objektové typy?
umenugr JEDNOTKA PRO VYTVÁŘENÍ UŽIVATELSKÝCH GRAFICKÝCH MENU Příručka uživatele a programátora
umenugr JEDNOTKA PRO VYTVÁŘENÍ UŽIVATELSKÝCH GRAFICKÝCH MENU Příručka uživatele a programátora SofCon spol. s r.o. Střešovická 49 162 00 Praha 6 tel/fax: +420 220 180 454 E-mail: sofcon@sofcon.cz www:
Konstruktory překladačů
Konstruktory překladačů Miroslav Beneš Dušan Kolář Konstruktor Lex generátor lexikálních analyzátorů M. E. Lesk, 1975 - pro OS Unix flex - Vern Paxson, 1990 - GNU verze určeno pro generování výstupu v
Abstraktní třída a rozhraní
Abstraktní třída a rozhraní Někdy se může stát, zejména při psaní v hierarchické struktuře hodně nadřazených tříd, že tušíme, že bude ve zděděných třídách vhodné použít nějakou metodu. Tuto metodu ještě
Teoretické minimum z PJV
Teoretické minimum z PJV Pozn.: následující text popisuje vlastnosti jazyka Java zjednodušeně pouze pro potřeby výuky. Třída Zavádí se v programu deklarací třídy což je část programu od klíčových slov
IAJCE Přednáška č. 8. double tprumer = (t1 + t2 + t3 + t4 + t5 + t6 + t7) / 7; Console.Write("\nPrumerna teplota je {0}", tprumer);
Pole (array) Motivace Častá úloha práce s větším množstvím dat stejného typu o Př.: průměrná teplota za týden a odchylka od průměru v jednotlivých dnech Console.Write("Zadej T pro.den: "); double t = Double.Parse(Console.ReadLine());
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]()?
Základy C++ I. Jan Hnilica Počítačové modelování 18
Základy C++ I 1 Přechod z C na C++ jazyk C++ je nadmnožinou jazyka C z hlediska syntaxe se jedná o velmi podobné jazyky, spolu s dalšími jazyky "céčkovské" rodiny, jako je např. C# každý platný program
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
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
Ú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
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
Regulární výrazy. Vzory
Regulární výrazy Regulární výrazy jsou určeny pro práci s textovými řetězci, jsou součástí J2SDK až od verze 1.4, v předchozích verzích je potřeba použít některou z externích knihoven, např. knihovnu ORO
Definice třídy. úplná definice. public veřejná třída abstract nesmí být vytvářeny instance final nelze vytvářet potomky
JAVA Třídy Definice třídy úplná definice [public] [abstract] [final] class Jmeno [extends Predek] [impelements SeznamInterfacu] {... // telo tridy public veřejná třída abstract nesmí být vytvářeny instance
Základní pojmy. Úvod do programování. Základní pojmy. Zápis algoritmu. Výraz. Základní pojmy
Úvod do programování Michal Krátký 1,Jiří Dvorský 1 1 Katedra informatiky VŠB Technická univerzita Ostrava Úvod do programování, 2004/2005 Procesor Procesorem je objekt, který vykonává algoritmem popisovanou
Správa paměti. Karel Richta a kol. Katedra počítačů Fakulta elektrotechnická České vysoké učení technické v Praze Karel Richta, 2016
Správa paměti Karel Richta a kol. Katedra počítačů Fakulta elektrotechnická České vysoké učení technické v Praze Karel Richta, 2016 Objektové modelování, B36OMO 10/2016, Lekce 2 https://cw.fel.cvut.cz/wiki/courses/xxb36omo/start
Jazyk C# (seminář 3)
Jazyk C# (seminář 3) Pavel Procházka KMI October 8, 2014 Motivace Největší využití v programování okenních aplikací a GUI knihoven. Data reprezentujeme pomocí objektů (tříd), máme tedy ucelený pohled na
Chain of responsibility
Chain of responsibility Chain of responsibility n Známý jako n Účel q český překlad řetěz(ec) odpovědnosti q umožnit zasílání požadavků (zpráv) neznámým příjemcům q příjemci tvoří frontu è předávají si
SOUBORY, VSTUPY A VÝSTUPY POKRAČOVÁNÍ
SOUBORY, VSTUPY A VÝSTUPY POKRAČOVÁNÍ Vstupy a výstupy pokračování Kódování textů Texty (řetězce nebo znaky) v jazyce C# jsou v paměti uloženy v kódování označovaném běžně Unicode (kódová stránka 1200).
EVROPSKÝ SOCIÁLNÍ FOND. Úvod do PHP PRAHA & EU INVESTUJEME DO VAŠÍ BUDOUCNOSTI
EVROPSKÝ SOCIÁLNÍ FOND Úvod do PHP PRAHA & EU INVESTUJEME DO VAŠÍ BUDOUCNOSTI Úvod do PHP PHP Personal Home Page Hypertext Preprocessor jazyk na tvorbu dokumentů přípona: *.php skript je součást HTML stránky!
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í
Druhy souborů. textové. binární. nestrukturované txt strukturované - ini, xml, csv. veřejné bmp, jpg, wav proprietární docx, cdr, psd
Soubory Druhy souborů textové nestrukturované txt strukturované - ini, xml, csv binární veřejné bmp, jpg, wav proprietární docx, cdr, psd Základy zápisu using System.IO; nutné pro odkázání na jmenný prostor,
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
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í