libxml2 parser DOM dla C++ czwartek, 8 grudnia 11

Save this PDF as:
 WORD  PNG  TXT  JPG

Wielkość: px
Rozpocząć pokaz od strony:

Download "libxml2 parser DOM dla C++ czwartek, 8 grudnia 11"

Transkrypt

1 libxml2 parser DOM dla C++ 1

2 SAX vs. DOM Dwa podstawowe typy API do przetwarzania dokumentów XML: Oparte na drzewach (ang. Tree-based API) - mapują strukturę dokumentu do drzewa i pozwalają użytkownikowi nawigować po tym drzewie. Oparte na zdarzeniach (ang. Event based API) - zgłaszają zdarzenia występujące podczas parsowania (np. początek/ koniec elementu). Zdarzenia są zgłaszane do aplikacji za pomocą callback'u. Aplikacja implementuje metody (handlery) przechwytujace te zdarzenia w sposób podobny do obsługi zdarzeń generowanych przez GUI. 2

3 SAX vs. DOM DOM - czesto użyteczne, ale wykorzystują dużo zasobów, szczególnie w przypadku dużych dokumentów. Jesli aplikacje wykorzystują swoje własne struktury danych niekorzystne jest budowanie drzewa tylko po to, żeby na jego podstawie zbudować obiekty wewnętrznych struktur danych. SAX pozwala na parsowanie dokumentów dużo większych niż dostępne zasoby pamięciowe. Własne struktury danych mogą być tworzone za pomocą metod wykorzystywanych do obsługi zdarzeń. 3

4 Kiedy używać SAX - przykład ZADANIE: W dokumencie XML wielkosci 20MB znaleźć element zawierający słowo "Częstochowa" Wykorzystanie DOM - tworzenie drzewa dla tak dużego dokumentu tylko po to, żeby znaleźć jeden element w zbiorze danych byłoby bardzo nie korzystne. Wykorzystanie SAX - możliwe znalezienie elementu (w metodach obsługi zdarzeń) wykorzystując minimalną ilość pamięci. 4

5 SAX - jak to działa. <?xml version="1.0"?> <doc> <para>hello, world!</para> </doc> Podczas przetwarzania dokumentu zgłoszone zostaną zdarzenia: 1. start document 2. start element: doc 3. start element: para 4. characters: Hello, world! 5. end element: para 6. end element: doc 7. end document 5

6 SAX SAX nie wymaga cache'owania całego dokumentu, umożliwia przechwytywanie zdarzeń parsowania tak jakby były to zdarzenia interesu użytkownika. Za pomocą API bazujacego na zdarzeniach możliwe jest utworzenie struktury drzewa i zmapowanie dokumentu XML do tej struktury. 6

7 LibXML2 typy danych xmlchar - znak kodowany w UTF-8. Jeśli dane są kodowane w innym standardzie muszą zostać przekształcone do UTF-8. xmldoc - struktura zawierająca drzewo utworzone przez parser. xmldocptr - wskaźnik na strukturę xmldoc. xmlnode - struktura zawierająca pojedynczy węzeł. xmlnodeptr - wskaźnik na strukturę xmlnode wykorzystywany do przechodzenia po drzewie. 7

8 xmlnode Najwazniejsze pola składowe struktury _xmlnode xmlelementtype type - typ węzła const xmlchar * name - nazwa węzła _xmlnode * children - wskaźnik na pierwsze dziecko _xmlnode * last - wskaźnik na ostatnie dziecko _xmlnode * parent - wskaźnik na rodzica _xmlnode * next - wskaźnik na następne rodzeństwo _xmlnode * prev - wskaźnik na poprzednie rodzeństwo _xmldoc * doc - wskaźnik na węzeł dokumentu xmlchar * content zawartość węzła (value) _xmlattr * properties - wskaźnik na pierwszy atrybut 8

9 Typ węzła - enum xmlelementtype XML_ELEMENT_NODE = 1 XML_ATTRIBUTE_NODE = 2 XML_TEXT_NODE = 3 XML_CDATA_SECTION_NODE = 4 XML_ENTITY_REF_NODE = 5 XML_ENTITY_NODE = 6 XML_PI_NODE = 7 XML_COMMENT_NODE = 8 XML_DOCUMENT_NODE = 9 XML_DOCUMENT_TYPE_NODE = 10 XML_DOCUMENT_FRAG_NODE = 11 XML_NOTATION_NODE = 12 XML_HTML_DOCUMENT_NODE = 13 XML_DTD_NODE = 14 XML_ELEMENT_DECL = 15 XML_ATTRIBUTE_DECL = 16 XML_ENTITY_DECL = 17 XML_NAMESPACE_DECL = 18 XML_XINCLUDE_START = 19 XML_XINCLUDE_END = 20 XML_DOCB_DOCUMENT_NODE = 21 9

10 Węzeł dokumentu - xmldoc Najważniejsze pola składowe struktury _xmldoc xmlelementtype type - XML_DOCUMENT_NODE char * name - nazwa pliku/adres URI dokumentu _xmlnode * children - wskaźnik na pierwsze dziecko _xmldoc * doc - autoreferencja, wskaźnik na samego siebie const xmlchar * version - wersja dokumentu XML const xmlchar * encoding - kodowane dokumentu int properties - zestaw właściwości xmldocproperties 10

11 Właściwości dokumentu XML xmldocproperties XML_DOC_WELLFORMED = 1 - poprawna składnia XML (well formed) XML_DOC_NSVALID = 2 - poprawna przestrzeń nazw XML_DOC_OLD10 = 4 - dokument parsowany z wykorzystaniem starszej wersji parsera 1.0 XML_DOC_DTDVALID = 8 - poprawna walidacja DTD XML_DOC_XINCLUDE = 16 - wykonane podstawienie XInclude XML_DOC_USERBUILT = 32 - dokument utworzony za pomocą API (nie przez parsowanie XMLa) XML_DOC_INTERNAL = 64 - zbudowany dla wewnętrznego przetwarzania XML_DOC_HTML = dokument HTML 11

12 Węzeł atrybutu Najważniejsze pola składowe struktury _xmlattribute xmlelementtype type - XML_ATTRIBUTE_DECL const xmlchar * name - nazwa atrybutu _xmldoc * doc - wskaźnik na węzeł dokumentu _xmlattribute * nexth - wskaźnik na następny atrybut xmlattributetype atype - typ wartości atrybutu xmlattributedefault def - rodzaj wartości domyślniej const xmlchar * defaultvalue - wartość domyślna atrybutu const xmlchar * elem - wartość atrybutu 12

13 Wartości domyślne i typy atrybutów xmlattributedefault XML_ATTRIBUTE_NONE = 1 - brak wartości domyślniej XML_ATTRIBUTE_REQUIRED = 2 - atrybut wymagany XML_ATTRIBUTE_IMPLIED = 3 - wartość domyślna (używana jeśli brak atrybutu) XML_ATTRIBUTE_FIXED = 4 - wartość ustalona xmlattributetype XML_ATTRIBUTE_CDATA = 1 XML_ATTRIBUTE_ID = 2 XML_ATTRIBUTE_IDREF = 3 XML_ATTRIBUTE_IDREFS = 4 XML_ATTRIBUTE_ENTITY = 5 XML_ATTRIBUTE_ENTITIES = 6 XML_ATTRIBUTE_NMTOKEN = 7 XML_ATTRIBUTE_NMTOKENS = 8 XML_ATTRIBUTE_ENUMERATION = 9 XML_ATTRIBUTE_NOTATION = 10 13

14 libxml2 Aby rozpoczac przetwarzanie dokumentu XML nalezy: Utworzyć wskaźnik wskazujący na parsowany dokument (węzeł dokumentu). Sprawdzić poprawność parsowania dokumentu. Jednym z częstych błędów jest próba przetworzenia dokumentu wykorzystujacego inne kodowane niż UTF-8, który nie ma jawnie zadeklarowanego kodowania. Jeśli dokument wykorzystuje inne kodowane i posiada poprawna deklaracje dokumentu xml zawierającą kodowane, libxml automatycznie przekształci dokument do UTF-8 i poprawnie wykona parsowanie. Pobrać korzeń dokumentu i sprawdzić czy cokolwiek zawiera (czy dokument nie jest pusty). Rozpocząć przetwarzanie drzewa, np. od sprawdzenia nazwy węzła będącego korzeniem drzewa. 14

15 libxml2 xmldocptr doc = xmlreadfile(docname); if (doc == NULL ) { std::cerr << "błąd parsowania" << std::endl; return; } xmlnodeptr cur = xmldocgetrootelement(doc); if (cur == NULL) { std::cerr << "dokument pusty" << std::endl; xmlfreedoc(doc); return; } if (xmlstrcmp(cur->name, (const xmlchar *) "story")) { std::cerr << "korzeń dokumentu!= story" << std::endl; xmlfreedoc(doc); return; } 15

16 libxml2 xmldocptr xmlreaddoc (const xmlchar * cur, const char * URL, const char * encoding, int options) tworzy drzewo na podstawie dokumentu XML przekazanego jako ciąg znaków cur doc = xmlreaddoc(bad_cast "<a></a>", NULL, NULL, 0); xmldocptr xmlreadfile (const char * filename, const char * encoding, int options) tworzy drzewo na podstawie dokumentu XML, którego nazwa lub adres URL jest przekazany jako filename doc = xmlreadfile("http://www.w3schools.com/xml/note.xml", NULL, 0); xmlnodeptr xmldocgetrootelement (xmldocptr doc) pobiera korzeń dokumentu doc->children może zwrócić węzeł będący komentarzem, xmldocgetrootelement pomija komentarze 16

17 Enum xmlparseroption XML_PARSE_RECOVER = 1 : recover on errors XML_PARSE_NOENT = 2 : substitute entities XML_PARSE_DTDLOAD = 4 : load the external subset XML_PARSE_DTDATTR = 8 : default DTD attributes XML_PARSE_DTDVALID = 16 : validate with the DTD XML_PARSE_NOERROR = 32 : suppress error reports XML_PARSE_NOWARNING = 64 : suppress warning reports XML_PARSE_PEDANTIC = 128 : pedantic error reporting XML_PARSE_NOBLANKS = 256 : remove blank nodes XML_PARSE_SAX1 = 512 : use the SAX1 interface internally XML_PARSE_XINCLUDE = 1024 : Implement XInclude substitition XML_PARSE_NONET = 2048 : Forbid network access XML_PARSE_NODICT = 4096 : Do not reuse the context dictionnary XML_PARSE_NSCLEAN = 8192 : remove redundant namespaces declarations XML_PARSE_NOCDATA = : merge CDATA as text nodes XML_PARSE_NOXINCNODE = : do not generate XINCLUDE START/END nodes XML_PARSE_COMPACT = : compact small text nodes; no modification of the tree allowed afterwards (will possibly crash if you try to modify the tree) XML_PARSE_OLD10 = : parse using XML-1.0 before update 5 XML_PARSE_NOBASEFIX = : do not fixup XINCLUDE xml:base uris XML_PARSE_HUGE = : relax any hardcoded limit from the parser XML_PARSE_OLDSAX = : parse using SAX2 interface from before

18 libxml2 xmlchar * xmlstrdup (const xmlchar * cur) tworzy kopię łańcucha znakowego i zwraca wskaźnik do niego int xmlstrlen (const xmlchar * str) zwraca długość łańcucha znakowego int xmlstrcmp (const xmlchar * str1, const xmlchar * str2) porównuje dwa łańcuchy znakowe (const xmlchar*), zwraca 0 jeśli ciągi znakowe są takie same int xmlstrcasecmp (const xmlchar * str1, const xmlchar * str2) porównuje dwa łańcuchy znakowe (const xmlchar*) nie biorąc pod uwagę wielkości znaków xmlchar * xmlstrsub (const xmlchar * str, int start, int len) tworzy nowy łańcuch znaków na podstawie str, rozpoczynając od znaku start o długości len 18

19 Zwalnianie zasobów void xmlfreedoc (xmldocptr cur) zwolnienie pamięci wykorzystywanej przez struktury tworzące dokument void xmlcleanupparser (void) zwolnienie pamięci wykorzystywanej przez bibliotekę. void xmlfreenode (xmlnodeptr cur) zwolnienie pamięci przydzielonej dla węzła, rekurencyjnie usuwa też wszystkie dzieci węzła. void xmlfreeprop (xmlattrptr cur), void xmlfreeproplist (xmlattrptr cur) zwalnia atrybut (listę atrybutów) oraz pamięć wykorzystywaną przez wartość atrybutu. 19

20 Dostęp do węzła Dostęp do węzła uzyskiwany jest poprzez przejście przez węzły dokumentu dopóki nie znajdziemy węzła, którego szukamy. cur = cur->xmlchildrennode; while (cur!= NULL) { if (!xmlstrcmp(cur->name, (const xmlchar *)"storyinfo")){ // przetwarzaj węzeł "storyinfo" } cur = cur->next; } 20

21 Tworzenie dokumentu xmldocptr xmlnewdoc (const xmlchar * version) tworzy nowy dokument version - wersja XMLa 1.0 doc = xmlnewdoc(bad_cast "1.0"); BAD_CAST - makro rzutujące stringa do xmlchar*. Powinno być używane tylko wtedy, kiedy jesteśmy pewni, że jest bezpieczne. xmlnodeptr xmlnewnode (xmlnsptr ns, const xmlchar * name) tworzy nowy element o podanej nazwie, ns jest opcjonalne (NULL) zwraca wskaźnik na utworzony węzeł nazwa nowego węzła jest tworzona za pomocą funkcji xmlstrdup() xmlnodeptr xmldocsetrootelement (xmldocptr doc, xmlnodeptr root) ustawia korzeń dokumentu zwraca stary korzeń jeśli istniał, jeśli nie NULL 21

22 Tworzenie węzłów xmlnodeptr xmlnewchild (xmlnodeptr parent, xmlnsptr ns, const xmlchar * name, const xmlchar * content) Tworzy nowy element i dodaje go na końcu listy dzieci elementu parent. ns i content to parametry opcjonalne. Jeśli content nie jest pusty tworzony jest węzeł tekstowy dodany jako dziecko nowego węzła. Wartość parametru content jest traktowana jako XML CDATA, co pozwala na wykorzystanie referencji do encji. zwracaany jest wskaźnik na nowo utworzony węzeł xmlnewchild(root_node, NULL, BAD_CAST "node1", BAD_CAST "content of node 1"); 22

23 Tworzenie atrybutów i węzłów tekstowych xmlattrptr xmlnewprop (xmlnodeptr node, const xmlchar * name, const xmlchar * value) tworzy i zwraca nowy węzeł atrybutu node - węzeł do którego dodawany jest atrybut xmlnodeptr xmlnewtextchild (xmlnodeptr parent, xmlnsptr ns, const xmlchar * name, const xmlchar * content) tworzy nowy węzeł tekstowy i dodaje go na końcu listy dzieci węzła parent. content i ns są opcjonalne content - wartość węzła tekstowego. Znaki specjalne XMLa (&, < itp.) są automatycznie przekształcane do sekwencji unikowych. void xmlnodeaddcontent (xmlnodeptr cur, const xmlchar * content) dodaje tekst (content) do obecnej wartości węzła tekstowego content - dane RAW (możliwe wystąpienie &,< itp) void xmlnodesetcontent (xmlnodeptr cur, const xmlchar * content) ustawia tekst (content) jako wartości węzła tekstowego - content XML CDATA content - dane XML CDATA 23

24 Dodawanie dzieci xmlnodeptr xmladdchild (xmlnodeptr parent, xmlnodeptr cur) Dodaje nowe dziecko do węzła parent na końcu listy dzieci (jako ostatnie dziecko). Jeśli dodawany węzeł jest atrybutem jest dołączany na końcu listy atrybutów. Jeśli atrybut o takiej nazwie istnieje jest on najpierw usuwany. Jeśli dodawanym węzłem jest węzeł tekstowy jego zawartość jest łączona z już istniejącą w tym miejscu treścią. Węzeł cur jest zwalniany. xmlnodeptr xmladdchildlist (xmlnodeptr parent, xmlnodeptr cur) Dodaje listę węzłów na końcu listy dzieci rodzica łącząc przyległe węzły tekstowe (węzeł cur może być zwolniony jeśli jest węzłem tekstowym) 24

25 Dodawanie rodzeństwa xmlnodeptr xmladdnextsibling (xmlnodeptr cur, xmlnodeptr elem) Dodaje nowy węzeł (elem) jako następne rodzeństwo (next sibling) węzła cur. xmlnodeptr xmladdprevsibling (xmlnodeptr cur, xmlnodeptr elem) Dodaje nowy węzeł jako poprzednie rodzeństwo Podczas dodawania rodzeństwa obowiązują następujące zasady: Jeśli węzeł istniał wcześniej w dokumencie jest najpierw odłączany od dokumentu (unlink). Jeśli węzeł elem jest typu tekstowego może zostać połączony z innym węzłem i w rezultacie zwolniony. Jeśli węzeł elem jest atrybutem jest dodawany do do listy atrybutów. Jeśli atrybut o podanej nazwie istnieje jest on najpierw niszczony. 25

26 libxml2 - przydatne funkcje unsigned long xmlchildelementcount (xmlnodeptr parent) zwraca liczbę dzieci węzła, które są węzłami elementu. xmlnodeptr xmlfirstelementchild (xmlnodeptr parent) zwraca pierwsze dziecko będące typu element xmlnodeptr xmlgetlastchild (xmlnodeptr parent) zwraca ostatnie dziecko węzła parent xmldocptr xmlcopydoc (xmldocptr doc, int recursive) tworzy kopię informacji o drzewie. Jeśli recursive jest różne od zera kopia wykonywana jest rekursywnie. xmlnodeptr xmlcopynode (const xmlnodeptr node, int extended) tworzy kopię węzła, extended == 1 - kopia rekursywna obejmująca atrybuty, przestrzenie nazw i dzieci extended == 2 - kopia węzła razem z atrybutami i przestrzenie nazw xmlattrptr xmlcopyprop (xmlnodeptr target, xmlattrptr cur) tworzy kopię atrybutu cur target - element, do którego atrybut jest dodawany 26

27 libxml2 - przydatne funkcje unsigned long xmlchildelementcount (xmlnodeptr parent) zwraca liczbę dzieci węzła, które są węzłami elementu. xmlnodeptr xmlfirstelementchild (xmlnodeptr parent) zwraca pierwsze dziecko będące typu element xmlnodeptr xmlgetlastchild (xmlnodeptr parent) zwraca ostatnie dziecko węzła parent xmldocptr xmlcopydoc (xmldocptr doc, int recursive) tworzy kopię informacji o drzewie. Jeśli recursive jest różne od zera kopia wykonywana jest rekursywnie. xmlnodeptr xmlcopynode (const xmlnodeptr node, int extended) tworzy kopię węzła, extended == 1 - kopia rekursywna obejmująca atrybuty, przestrzenie nazw i dzieci extended == 2 - kopia węzła razem z atrybutami i przestrzenie nazw xmlattrptr xmlcopyprop (xmlnodeptr target, xmlattrptr cur) tworzy kopię atrybutu cur target - element, do którego atrybut jest dodawany 27

28 Zapis drzewa int xmldocformatdump (FILE * f, xmldocptr cur, int format) zrzuca dokument do pliku (lub na standardowe wyjście) format == 1 - dodawane są znaki formatujące (koniec linii, spacje itp) zapis na standardowe wyjście: xmldocformatdump(stdout, doc, 1); zapis do pliku: FILE *fd = fopen ("doc.xml", "wt"); xmldocformatdump(fd, doc, 1); 28

29 libxml2 i XPath 29

30 libxml2 i xpath LibXML2 pozwala na wykorzystanie wyrażeń XPath do uzyskiwania dostępu do węzłów. XPath pozwala wybrać z dokumentu XML zbiór węzłów, które spełniają określone kryteria. Aby używać XPath należy utworzyć kontekst xmlxpathcontext i przekazać wyrażenie XPath oraz kontekst do funkcji xmlxpathevalexpression. Funkcja xmlxpathevalexpression zwraca wskaźnik na xmlxpathobject (xmlxpathobjectptr), który zawiera zbiór węzłów spełniających kryteria wyrażenia XPath. Aby używać XPath należy dołączyć pliki nagłówkowe <libxml/xpath.h> oraz <libxml/xpathinternals.h> 30

31 libxml2 i XPath xmldocptr doc = xmlreadfile("http://...", NULL, 0); // utworzenie kontekstu xmlxpathcontextptr context = xmlxpathnewcontext(doc); // pobranie węzłów zspełniających kryteria XPath xmlxpathobjectptr result = xmlxpathevalexpression(xpath, context); // jeśli zbiór elementów jest pusty zwalniamy pamięć if (xmlxpathnodesetisempty(result->nodesetval)){ } xmlxpathfreeobject(result); printf("no result\n"); Po zakończeniu przetwarzania dokumentu XML należy zwolnić kontekst za pomocą funkcji xmlxpathfreecontext(context) 31

32 Struktura xmlxpathobject Wskaźnik na xmlxpathobject zwrócony przez funkcję xmlxpathevalexpression zawiera zbiór węzłów i informacje potrzebne do przejścia po tych węzłach. Najważniejsze pola składowe struktury xmlxpathobject: xmlxpathobjecttype type - typ obiektu xmlnodesetptr nodesetval - wskaźnik na zbiór węzłów Po zakończeniu przetwarzania instancja struktury xmlxpathobject powinna zostać usunięta za pomocą funkcji xmlxpathfreeobject. 32

33 Typ obiektów xmlxpathobject Typ obiektu xmlxpath - typ wyliczeniowy xmlxpathobjecttype XPATH_UNDEFINED = 0 XPATH_NODESET = 1 XPATH_BOOLEAN = 2 XPATH_NUMBER = 3 XPATH_STRING = 4 XPATH_POINT = 5 XPATH_RANGE = 6 XPATH_LOCATIONSET = 7 XPATH_USERS = 8 XPATH_XSLT_TREE = 9 33

34 Zestaw węzłów xmlnodeset Obiekt xmlxpathobject zawiera wskaźnik na zestaw węzłów xmlnodeset (xmlnodesetptr). Są to węzły, które spełniają kryterium XPath. Pola składowe struktury xmlnodeset: int nodenr - liczba węzłów w zbiorze int nodemax - wielkość zaalokowanej pamięci xmlnodeptr * nodetab - tablica węzłów - nieuporządkowana (wskaźnik na pierwszy element tablicy) 34

35 Zestaw węzłów xmlnodeset if (xpathobj->nodesetval == NULL) { printf("coś poszło nie tak... :( "); return 0; } for (int i=0; i < xpathobj->nodesetval->nodenr; i++) { xmlnodeptr child = xpathobj->nodesetval->nodetab[i]->xmlchildrennode; const xmlchar * str = xmlnodelistgetstring(doc, child, 1); printf("str: %s\n", str); xmlfree((void*)str); } 35

36 xmlnodelistgetstring xmlchar * xmlnodelistgetstring (xmldocptr doc, xmlnodeptr list, int inline) Tworzy ciąg znakowy równy tekstowi zawartemu we wszystkich węzłach należących do listy węzłów. doc - węzeł dokumentu list - lista węzłów inline - czy zastępować encje Wartość zwracana przez funkcję to wskaźnik na kopię ciągu znakowego - wskaźnik ten musi zostać zwolniony za pomocą funkcji xmlfree(). Funkcja wywołana dla pola składowego xmlchildrennode węzła a dla dokumentu <a> x <b/> y <c/> z </a> zwróci wartość xyz. 36

37 Wywołanie zwrotne - callback 37

38 Wywołanie zwrotne - callback Technika programowania (wzorzec programowania) będąca odwrotnością wywołania funkcji. Zasada działania: Referencja do funkcji A jest przekazywana do funkcji B, najczęściej wywoływanej na osobnym wątku. Wątek główny nadal kontynuuje swoją pracę, w czasie gdy funkcja B działa niezależnie od niego. Gdy funkcja B zakończy swoje działanie, wywołuje funkcję A zwracając rezultat swojego działania. 38

39 Wywołanie zwrotne 39

40 Wywołanie zwrotne w językach obiektowych W językach obiektowych do funkcji przekazywany jest wskaźnik na obiekt, a czasami również nazwa metody, która ma być wywołana na rzecz tego obiektu jako wywołanie zwrotne. Przed wywołaniem funkcji powinno się sprawdzić czy obiekt, na rzecz którego wywoływana jest metoda nadal istnieje i czy udostępnia odpowiednią metodę! Interfejsy - mechanizm gwarantujący, że przekazany obiekt udostępnia wymaganą metodę. 40

41 Wywołanie zwrotne w językach obiektowych Klasa A: void fun(){ B b; b.dosomething(this, didfinishdoing ); Klasa B: } /* kontynuuj wykonywanie innych operacji */... /**************************************************************/ void didfinishdoing(resulttype result) { } /* wynik działania funkcji dosomething to result - możemy go np. zapisać do bazy lub pokazać użytkownikowi */ callback void dosomething(object obj, string method){ } // wykonaj czasochłonną operację resulttype res =... /* wykonaj wywołanie zwrotne i przekaż do metody method wynik znajdujący się w zmiennej res */ obj. callmethod[method](res); 41

42 SAX w libxml2 42

43 SAX - jak to działa. <?xml version="1.0"?> <doc> <para>hello, world!</para> </doc> Podczas przetwarzania dokumentu zgłoszone zostaną zdarzenia: 1. start document 2. start element: doc 3. start element: para 4. characters: Hello, world! 5. end element: para 6. end element: doc 7. end document 43

44 Rozpoczęcie parsowania dokumentu int xmlsaxuserparsefile(xmlsaxhandlerptr sax, void * user_data, const char * filename); int xmlsaxuserparsememory(xmlsaxhandlerptr sax, void * user_data, char * buffer, int size); sax - SAX handler, instancja struktury przechowująca wskaźniki na funkcje user_data - dane użytkownika przekazywane do funkcji podczas wywołań zwrotnych (callback) filename - nazwa pliku buffer - dokument XML size - długość dokumentu XML (w bajtach) Funkcje zwracają 0 jeśli operacja się powiedzie, w przeciwnym razie kod błędu. 44

45 Dane użytkownika user_data - dane użytkownika przekazywane do funkcji podczas wywołań zwrotnych (callback) Wskaźnik na obiekt (strukturę), w którym przechowywany jest stan parsera oraz dane odczytane z dokumentu XML. Wskaźnik ten jest przekazywany za każdym razem kiedy parser wywołuje funkcję za pomocą wywołania zwrotnego, dzięki czemu możemy zapisać dane związane z napotkanym zdarzeniem oraz aktualną pozycję w dokumencie XML (wewnątrz jakiego znacznika jesteśmy). 45

46 xmlsaxhandler Struktura xmlsaxhandler zawiera wskaźniki na metody, które będą wykonane w momencie wystąpienia zdarzenia - napotkania odpowiedniego elementu w dokumencie XML. Jeśli zdarzenia mają nie być obsługiwane wskaźnikom na funkcje można przypisać wartość NULL. 46

47 xmlsaxhandler - funkcje internalsubsetsaxfunc internalsubset; isstandalonesaxfunc isstandalone; hasinternalsubsetsaxfunc hasinternalsubset; hasexternalsubsetsaxfunc hasexternalsubset; resolveentitysaxfunc resolveentity; getentitysaxfunc getentity; entitydeclsaxfunc entitydecl; notationdeclsaxfunc notationdecl; attributedeclsaxfunc attributedecl; elementdeclsaxfunc elementdecl; unparsedentitydeclsaxfunc unparsedentitydecl; setdocumentlocatorsaxfunc setdocumentlocator; startdocumentsaxfunc startdocument; enddocumentsaxfunc enddocument; startelementsaxfunc startelement; endelementsaxfunc endelement; referencesaxfunc reference; characterssaxfunc characters; ignorablewhitespacesaxfunc ignorablewhitespace; processinginstructionsaxfunc processinginstruction; commentsaxfunc comment; warningsaxfunc warning; errorsaxfunc error; fatalerrorsaxfunc fatalerror; 47

48 Funkcje inicjujące i finalizujące startdocumentsaxfunc void startdocumentsaxfunc (void * ctx) ctx - kontekst parsera enddocumentsaxfunc void enddocumentsaxfunc (void * ctx) ctx - kontekst parsera Funkcje te są najczęściej wykorzystywane do zainicjowania struktur, w których będą przechowywane dane oraz zwolnienia zasobów. 48

49 Funkcje przetwarzające dane startelementsaxfunc void startelementsaxfunc (void * ctx, const xmlchar * name, const xmlchar ** atts) ctx - kontekst parsera ch - nazwa znacznika atts - tablica par nazwa/wartość zakończona wartością NULL endelementsaxfunc void endelementsaxfunc (void * ctx, const xmlchar * name) ctx - kontekst parsera ch - nazwa znacznika characterssaxfunc void characterssaxfunc (void * ctx, const xmlchar * ch, int len) ctx - kontekst parsera ch - string xmlchar len - liczba znaków 49

50 Odczyt nazw elementów XML class Fun{ public: static void startf (void * ctx, const xmlchar * name, const xmlchar ** atts) { } ((std::vector<const xmlchar *> *)ctx)->push_back(name); }; int main (int argc, const char * argv[]) { } xmlsaxhandler handler = {0}; handler.startelement = Fun::startF; std::vector<const xmlchar *> * v = new std::vector<const xmlchar *>(0); xmlsaxuserparsefile(&handler, v, "http://icis.pcz.pl/~wawszczak/tzt/przedszkole.xml"); for (int i =0; i<v->size(); ++i) std::cout<< (*v)[i] << std::endl; delete v; return 0; 50

51 Odczyt wartości elementów tekstowych class Fun { public: static void charactersf (void * ctx, const xmlchar * ch, int len) { ((std::vector<std::string> *)ctx)->push_back(std::string((char*)ch, len)); } }; int main (int argc, const char * argv[]) { xmlsaxhandler handler = {0}; handler.characters = Fun::charactersF; std::vector<std::string> * v = new std::vector<std::string>(0); xmlsaxuserparsefile(&handler, v, "http://icis.pcz.pl/~wawszczak/tzt/przedszkole.xml"); for (int i =0; i<v->size(); ++i) std::cout<< (*v)[i] << std::endl; return 0; } 51

52 Odczyt wartości elementów tekstowych class B{ public: bool insideimie; std::vector<std::string> v; B() { v = std::vector<std::string>(0); } }; class Fun{ public: static void startf (void * ctx, const xmlchar * name, const xmlchar ** atts) { if (xmlstrcmp(name, BAD_CAST"imie") == 0) ((B*)ctx)->insideImie=true; } static void endf (void * ctx, const xmlchar * name) { if (xmlstrcmp(name, BAD_CAST"imie") == 0) ((B*)ctx)->insideImie=false; } static void charactersf (void * ctx, const xmlchar * ch, int len) { if (((B*)ctx)->insideImie) ((B*)ctx)->v.push_back(std::string((char*)ch, len)); } }; int main (int argc, const char * argv[]){ xmlsaxhandler handler = {0}; handler.startelement = Fun::startF; handler.endelement = Fun::endF; handler.characters = Fun::charactersF; B * b = new B(); xmlsaxuserparsefile(&handler, b, "http://icis.pcz.pl/~wawszczak/tzt/przedszkole.xml"); for(int i =0; i<b->v.size(); ++i) std::cout<< b->v[i] << std::endl; delete b; return 0; } 52

53 Odczyt wartości elementów tekstowych class B{ public: bool insideimie; std::vector<std::string> v; B() { v = std::vector<std::string>(0); } }; class Fun{ public: static void startf (void * ctx, const xmlchar * name, const xmlchar ** atts) { if (xmlstrcmp(name, BAD_CAST"imie") == 0) ((B*)ctx)->insideImie=true; } static void endf (void * ctx, const xmlchar * name) { if (xmlstrcmp(name, BAD_CAST"imie") == 0) ((B*)ctx)->insideImie=false; } static void charactersf (void * ctx, const xmlchar * ch, int len) { if (((B*)ctx)->insideImie) ((B*)ctx)->v.push_back(std::string((char*)ch, len)); } }; int main (int argc, const char * argv[]){ xmlsaxhandler handler = {0}; handler.startelement = Fun::startF; handler.endelement = Fun::endF; handler.characters = Fun::charactersF; B * b = new B(); xmlsaxuserparsefile(&handler, b, "http://icis.pcz.pl/~wawszczak/tzt/przedszkole.xml"); for(int i =0; i<b->v.size(); ++i) std::cout<< b->v[i] << std::endl; delete b; return 0; } 53

54 Odczyt wartości elementów tekstowych class B{ public: bool insideimie; std::vector<std::string> v; B() { v = std::vector<std::string>(0); } }; class Fun{ public: static void startf (void * ctx, const xmlchar * name, const xmlchar ** atts) { if (xmlstrcmp(name, BAD_CAST"imie") == 0) ((B*)ctx)->insideImie=true; } static void endf (void * ctx, const xmlchar * name) { if (xmlstrcmp(name, BAD_CAST"imie") == 0) ((B*)ctx)->insideImie=false; } static void charactersf (void * ctx, const xmlchar * ch, int len) { if (((B*)ctx)->insideImie) ((B*)ctx)->v.push_back(std::string((char*)ch, len)); } }; int main (int argc, const char * argv[]){ xmlsaxhandler handler = {0}; handler.startelement = Fun::startF; handler.endelement = Fun::endF; handler.characters = Fun::charactersF; B * b = new B(); xmlsaxuserparsefile(&handler, b, "http://icis.pcz.pl/~wawszczak/tzt/przedszkole.xml"); for(int i =0; i<b->v.size(); ++i) std::cout<< b->v[i] << std::endl; delete b; return 0; } 54

55 libxml2 Podstawowe API - bazujące na drzewie DOM - wynik parsowania w całości ładowany do pamięci; proste w użyciu, ale nie pozwala na przetwarzanie bardzo dużych dokumentów. API sterowane zdarzeniami - skomplikowane w użyciu, nie jest w pełni formalnie zdefiniowane dla języka C, nie pozwala na walidację dokumentu XML XmlTextReader - łatwy i wydajny! 55

56 XmlTextReader XmlTextReader API zapewnia znacznie prostszy model programowania. XmlTextReader zachowuje się jak kursor, który przesuwa się do przodu po strumieniu dokumentu zatrzymując się na każdym węźle, który napotka. Użytkownik kontroluje przebieg procesu parsowania i wywołuje funkcję xmltextreaderread() w celu przetworzenia kolejnego węzła w kolejności w jakiej występują w dokumencie. 56

57 Przejście przez drzewo dokumentu XmlTextReader API pozwala na przejście przez drzewo tylko do przodu. Przetwarzanie XMLa odbywa się w następujących krokach: przygotowanie kontekstu czytnika (kursora) działającego na określonym wejściu, iteracyjne (w pętli) przejście po wszystkich węzłach w dokumencie i odczytanie ich za pomocą funkcji xmltextreaderread(), zwolnienie kontekstu. 57

58 Przetwarzanie drzewa XmlTextReader #include <libxml/xmlreader.h> void processnode(xmltextreaderptr reader) { /*... */ } int streamfile(char *filename) { xmltextreaderptr reader = xmlnewtextreaderfilename(filename); } if (reader!= NULL) { int ret = xmltextreaderread(reader); while (ret == 1) { processnode(reader); ret = xmltextreaderread(reader); } xmlfreetextreader(reader); if (ret!= 0) printf("%s : failed to parse\n", filename); } else printf("unable to open %s\n", filename); 58

59 Tworzenie kontekstu i zwalnianie pamięci xmltextreaderptr xmlnewtextreaderfilename (const char * URI) utworzenie kontekstu dla dokumentu XML przekazanego jako adres URI xmltextreaderptr xmlreaderfordoc (const xmlchar * cur, const char * URL, const char * encoding, int options) utworzenie kontekstu dla dokumentu XML przekazanego ciąg znaków xmltextreaderptr xmlnewtextreader (xmlparserinputbufferptr input, const char * URI) utworzenie kontekstu dla dokumentu XML przekazanego jako bufor wejściowy void xmlfreetextreader (xmltextreaderptr reader) zwolnienie pamięci wykorzystywanej przez kontekst parsera 59

60 Dostęp do węzła i odczyt jego wartości int xmltextreaderread (xmltextreaderptr reader) Przesuwa pozycję kursora do następnego węzła w strumieniu. Wartość zwracana: 1 - poprawny odczyt 0 - nie ma więcej węzłów -1 - wystąpienie błędu xmlchar * xmltextreaderreadstring (xmltextreaderptr reader) odczyt wartości tekstowej danego węzła 60

61 Dostęp do informacji dotyczących bieżącego węzła Dostęp do właściwości węzła możliwy jest za pomocą funkcji przyjmujących wskaźnik na xmltextreaderptr. Jeśli typem zwracanym przez funkcję jest ciąg znaków xmlchar *, pamięć musi zostać zwolniona za pomocą xmlfree(). xmlchar * name = xmltextreadername(reader); 61

62 Typ węzła int xmltextreadernodetype (xmltextreaderptr reader) 1 - początek elementu (znacznik otwierający), 15 - koniec elementy (znacznik zamykający), 2 - atrybut, 3 - węzeł tekstowy, 4 - sekcja CData, 5 - referencja do encji, 6 - deklaracja encji, 7 - instrukcja przetwarzania, 8 - komentarz, 9 - węzeł dokumentu, 10 - węzeł typu dokumentu DTD. 62

63 Nazwa węzła xmlchar * xmltextreadername (xmltextreaderptr reader) const xmlchar * xmltextreaderconstname (xmltextreaderptr reader) kwalifikowana nazwa węzła xmlchar * xmltextreaderlocalname (xmltextreaderptr reader) const xmlchar * xmltextreaderconstlocalname (xmltextreaderptr reader) lokalna nazwa węzła Różnica pomiędzy funkcjami Const i nie Const??? 63

64 Nazwa węzła xmlchar * xmltextreadername (xmltextreaderptr reader) const xmlchar * xmltextreaderconstname (xmltextreaderptr reader) kwalifikowana nazwa węzła xmlchar * xmltextreaderlocalname (xmltextreaderptr reader) const xmlchar * xmltextreaderconstlocalname (xmltextreaderptr reader) lokalna nazwa węzła W przypadku funkcji Const pamięć jest zwalniana przez parser, w przeciwnym przypadku musi zostać zwolniona przez użytkownika. 64

65 Odczyt informacji o węźle int xmltextreaderhasattributes (xmltextreaderptr reader) sprawdzenie czy węzeł ma atrybuty int xmltextreaderhasvalue (xmltextreaderptr reader) sprawdzenie czy węzeł ma wartość int xmltextreaderisemptyelement (xmltextreaderptr reader) sprawdzenie czy węzeł jest węzłem pustym Wartość zwracana: 1 - TAK 0 - NIE -1 - błąd 65

66 Odczyt wartości węzła xmlchar * xmltextreadervalue (xmltextreaderptr reader) const xmlchar * xmltextreaderconstvalue (xmltextreaderptr reader) zwraca wartość węzła jako ciąg znaków będący kopią lub jako stały ciąg znaków. 66

67 Odczyt atrybutów int xmltextreaderattributecount (xmltextreaderptr reader) zwraca liczbę atrybutów xmlchar * xmltextreadergetattribute (xmltextreaderptr reader, const xmlchar * name) zwraca wartość atrybutu o podanej nazwie xmlchar * xmltextreadergetattributeno (xmltextreaderptr reader, int no) zwraca wartość atrybutu numer no 67

68 Odczyt atrybutów int xmltextreadermovetofirstattribute (xmltextreaderptr reader) przejście do pierwszego atrybutu int xmltextreadermovetonextattribute (xmltextreaderptr reader) przejście do następnego atrybutu int xmltextreadermovetoattribute (xmltextreaderptr reader, const xmlchar * name) przejście do atrybutu o nazwie name int xmltextreadermovetoattributeno (xmltextreaderptr reader, int no) przejście do atrybutu o numerze no int xmltextreadermovetoelement (xmltextreaderptr reader) przesuniecie kursora do węzła elementu Zwracana wartość: 1 - OK, 0 - jeśli nie znaleziono węzła, -1 - w przypadku błędu. 68

69 xmltextreader + DOM xmlnodeptr xmltextreaderexpand (xmltextreaderptr reader) Odczytuje bieżący węzeł i całe poddrzewo tego węzła. Zwraca wskaźnik na xmlnode lub NULL jeśli wystąpił błąd Drzewo jest dostępne do następnego wywołanie xmltextreaderread() 69

70 Funkcje zwracające obiekty const cout << xmltextreadername(reader) << endl; 70

71 Funkcje zwracające obiekty const cout << xmltextreadername(reader) << endl; Wyciek pamięci! 71

72 Funkcje zwracające obiekty const xmlchar * name = xmltextreadername(reader); cout << name << endl; xmlfree(name); lub: cout<<xmltextreaderconstname(reader)<<endl; 72

Wykorzystywanie parsera DOM w programach Java i PL/SQL

Wykorzystywanie parsera DOM w programach Java i PL/SQL Wykorzystywanie parsera DOM w programach Java i PL/SQL Maciej Zakrzewicz mzakrz@cs.put.poznan.pl http://www.cs.put.poznan.pl/~mzakrz/ Parser DOM Aplikacja DOM API Parser DOM Dokument XML Drzewo DOM Parser

Bardziej szczegółowo

Zasady programowania Dokumentacja

Zasady programowania Dokumentacja Marcin Kędzierski gr. 14 Zasady programowania Dokumentacja Wstęp 1) Temat: Przeszukiwanie pliku za pomocą drzewa. 2) Założenia projektu: a) Program ma pobierać dane z pliku wskazanego przez użytkownika

Bardziej szczegółowo

Zaawansowane aplikacje WWW - laboratorium

Zaawansowane aplikacje WWW - laboratorium Zaawansowane aplikacje WWW - laboratorium Przetwarzanie XML (część 2) Celem ćwiczenia jest przygotowanie aplikacji, która umożliwi odczyt i przetwarzanie pliku z zawartością XML. Aplikacja, napisana w

Bardziej szczegółowo

Perl a XML. Narzędzia informatyczne w językoznawstwie. Generowanie danych XML - Przykład. Generowanie danych XML. Perl - Przetwarzanie XML

Perl a XML. Narzędzia informatyczne w językoznawstwie. Generowanie danych XML - Przykład. Generowanie danych XML. Perl - Przetwarzanie XML Perl a XML Narzędzia informatyczne w językoznawstwie Perl - Przetwarzanie XML Marcin Junczys-Dowmunt junczys@amu.edu.pl Zakład Logiki Stosowanej http://www.logic.amu.edu.pl 31 modułów w CPAN zawiera w

Bardziej szczegółowo

1. Wartość, jaką odczytuje się z obszaru przydzielonego obiektowi to: a) I - wartość b) definicja obiektu c) typ oboektu d) p - wartość

1. Wartość, jaką odczytuje się z obszaru przydzielonego obiektowi to: a) I - wartość b) definicja obiektu c) typ oboektu d) p - wartość 1. Wartość, jaką odczytuje się z obszaru przydzielonego obiektowi to: a) I - wartość b) definicja obiektu c) typ oboektu d) p - wartość 2. Poprawna definicja wskażnika b to: a) float *a, **b = &a; b) float

Bardziej szczegółowo

Java. język programowania obiektowego. Programowanie w językach wysokiego poziomu. mgr inż. Anna Wawszczak

Java. język programowania obiektowego. Programowanie w językach wysokiego poziomu. mgr inż. Anna Wawszczak Java język programowania obiektowego Programowanie w językach wysokiego poziomu mgr inż. Anna Wawszczak 1 Język Java Język Java powstał w roku 1995 w firmie SUN Microsystems Java jest językiem: wysokiego

Bardziej szczegółowo

Język C++ Różnice między C a C++

Język C++ Różnice między C a C++ Język C++ Różnice między C a C++ Plan wykładu C a C++ Różnice ogólne Typy Deklaracje zmiennych C++ jako rozszerzenie C Domyślne argumenty funkcji Przeciążanie funkcji Referencje Dynamiczny przydział pamięci

Bardziej szczegółowo

Podstawy programowania skrót z wykładów:

Podstawy programowania skrót z wykładów: Podstawy programowania skrót z wykładów: // komentarz jednowierszowy. /* */ komentarz wielowierszowy. # include dyrektywa preprocesora, załączająca biblioteki (pliki nagłówkowe). using namespace

Bardziej szczegółowo

Ćwiczenie nr 6. Poprawne deklaracje takich zmiennych tekstowych mogą wyglądać tak:

Ćwiczenie nr 6. Poprawne deklaracje takich zmiennych tekstowych mogą wyglądać tak: Ćwiczenie nr 6 Temat: Operacje na łańcuchach znaków. Zagadnienia: Zasady pracy z łańcuchami tekstowymi (tablice wartości typu char). funkcje standardowe operacji na łańcuchach, funkcje I/O dla operacji

Bardziej szczegółowo

Programowanie obiektowe i C++ dla matematyków

Programowanie obiektowe i C++ dla matematyków Programowanie obiektowe i C++ dla matematyków Bartosz Szreder szreder (at) mimuw... 22 XI 2011 Uwaga! Ponieważ już sobie powiedzieliśmy np. o wskaźnikach i referencjach, przez które nie chcemy przegrzebywać

Bardziej szczegółowo

Wykład I. Programowanie II - semestr II Kierunek Informatyka. dr inż. Janusz Słupik. Wydział Matematyki Stosowanej Politechniki Śląskiej

Wykład I. Programowanie II - semestr II Kierunek Informatyka. dr inż. Janusz Słupik. Wydział Matematyki Stosowanej Politechniki Śląskiej Wykład I - semestr II Kierunek Informatyka Wydział Matematyki Stosowanej Politechniki Śląskiej Gliwice, 2015 c Copyright 2015 Janusz Słupik Zaliczenie przedmiotu Do zaliczenia przedmiotu niezbędne jest

Bardziej szczegółowo

Wykład II. Programowanie II - semestr II Kierunek Informatyka. dr inż. Janusz Słupik. Wydział Matematyki Stosowanej Politechniki Śląskiej

Wykład II. Programowanie II - semestr II Kierunek Informatyka. dr inż. Janusz Słupik. Wydział Matematyki Stosowanej Politechniki Śląskiej Wykład II - semestr II Kierunek Informatyka Wydział Matematyki Stosowanej Politechniki Śląskiej Gliwice, 2015 c Copyright 2015 Janusz Słupik Operacje dyskowe - zapis do pliku #include #include

Bardziej szczegółowo

Struktury. Przykład W8_1

Struktury. Przykład W8_1 Struktury Struktury pozwalają na grupowanie zmiennych różnych typów pod wspólną nazwą. To istotnie ułatwia organizacje danych, które okazują się w jednym miejscu kodu programu. To jest bardzo ważne dla

Bardziej szczegółowo

Wskaźniki. Informatyka

Wskaźniki. Informatyka Materiały Wskaźniki Informatyka Wskaźnik z punktu widzenia programisty jest grupą komórek pamięci (rozmiar wskaźnika zależy od architektury procesora, najczęściej są to dwa lub cztery bajty ), które mogą

Bardziej szczegółowo

Dariusz Brzeziński. Politechnika Poznańska, Instytut Informatyki

Dariusz Brzeziński. Politechnika Poznańska, Instytut Informatyki Dariusz Brzeziński Politechnika Poznańska, Instytut Informatyki W językach niskopoziomowych błędy zgłaszane były przez zwracanie odpowiedniego statusu (liczby) W C main() zwraca int żeby można było określić

Bardziej szczegółowo

akademia androida Składowanie danych część VI

akademia androida Składowanie danych część VI akademia androida Składowanie danych część VI agenda 1. SharedPreferences. 2. Pamięć wewnętrzna i karta SD. 3. Pliki w katalogach /res/raw i /res/xml. 4. Baza danych SQLite. 5. Zadanie. 1. SharedPreferences.

Bardziej szczegółowo

Projektowanie klas c.d. Projektowanie klas przykład

Projektowanie klas c.d. Projektowanie klas przykład Projektowanie klas c.d. ogólne wskazówki dotyczące projektowania klas: o wyodrębnienie klasy odpowiedź na potrzeby życia (obsługa rozwiązania konkretnego problemu) o zwykle nie uda się utworzyć idealnej

Bardziej szczegółowo

DYNAMICZNE PRZYDZIELANIE PAMIECI

DYNAMICZNE PRZYDZIELANIE PAMIECI DYNAMICZNE PRZYDZIELANIE PAMIECI Pamięć komputera, dostępna dla programu, dzieli się na cztery obszary: kod programu, dane statyczne ( np. stałe i zmienne globalne programu), dane automatyczne zmienne

Bardziej szczegółowo

METODY I JĘZYKI PROGRAMOWANIA PROGRAMOWANIE STRUKTURALNE. Wykład 02

METODY I JĘZYKI PROGRAMOWANIA PROGRAMOWANIE STRUKTURALNE. Wykład 02 METODY I JĘZYKI PROGRAMOWANIA PROGRAMOWANIE STRUKTURALNE Wykład 02 NAJPROSTSZY PROGRAM /* (Prawie) najprostszy przykład programu w C */ /*==================*/ /* Między tymi znaczkami można pisać, co się

Bardziej szczegółowo

Kurs programowania. Wykład 1. Wojciech Macyna. 3 marca 2016

Kurs programowania. Wykład 1. Wojciech Macyna. 3 marca 2016 Wykład 1 3 marca 2016 Słowa kluczowe języka Java abstract, break, case, catch, class, const, continue, default, do, else, enum, extends, final, finally, for, goto, if, implements, import, instanceof, interface,

Bardziej szczegółowo

PROE wykład 2 operacje na wskaźnikach. dr inż. Jacek Naruniec

PROE wykład 2 operacje na wskaźnikach. dr inż. Jacek Naruniec PROE wykład 2 operacje na wskaźnikach dr inż. Jacek Naruniec Zmienne automatyczne i dynamiczne Zmienne automatyczne: dotyczą kontekstu, po jego opuszczeniu są usuwane, łatwiejsze w zarządzaniu od zmiennych

Bardziej szczegółowo

IMIĘ i NAZWISKO: Pytania i (przykładowe) Odpowiedzi

IMIĘ i NAZWISKO: Pytania i (przykładowe) Odpowiedzi IMIĘ i NAZWISKO: Pytania i (przykładowe) Odpowiedzi EGZAMIN PIERWSZY (25 CZERWCA 2013) JĘZYK C++ poprawiam ocenę pozytywną z egzaminu 0 (zakreśl poniżej x) 1. Wśród poniższych wskaż poprawną formę definicji

Bardziej szczegółowo

Szablony klas, zastosowanie szablonów w programach

Szablony klas, zastosowanie szablonów w programach Szablony klas, zastosowanie szablonów w programach 1. Szablony klas i funkcji 2. Szablon klasy obsługującej uniwersalną tablicę wskaźników 3. Zastosowanie metody zwracającej przez return referencję do

Bardziej szczegółowo

29. Poprawność składniowa i strukturalna dokumentu XML

29. Poprawność składniowa i strukturalna dokumentu XML 29. i strukturalna dokumentu XML 13 października 2015 1 2 Poprawny składniowo dokument XML powinien być tworzony zgodnie z poniżej przedstawionymi zasadami. Deklaracja XML Powinien zawierać deklarację

Bardziej szczegółowo

Strona główna. Strona tytułowa. Programowanie. Spis treści. Sobera Jolanta 16.09.2006. Strona 1 z 26. Powrót. Full Screen. Zamknij.

Strona główna. Strona tytułowa. Programowanie. Spis treści. Sobera Jolanta 16.09.2006. Strona 1 z 26. Powrót. Full Screen. Zamknij. Programowanie Sobera Jolanta 16.09.2006 Strona 1 z 26 1 Wprowadzenie do programowania 4 2 Pierwsza aplikacja 5 3 Typy danych 6 4 Operatory 9 Strona 2 z 26 5 Instrukcje sterujące 12 6 Podprogramy 15 7 Tablice

Bardziej szczegółowo

Język C++ wykład VIII

Język C++ wykład VIII Programowanie uzupełnienie notatek: dr Jerzy Białkowski 1 2 3 4 Obiektowość języka C++ ˆ Klasa (rozszerzenie struktury), obiekt instancją klasy, konstruktory i destruktory ˆ Enkapsulacja - kapsułkowanie,

Bardziej szczegółowo

Składnia C++ Programowanie Obiektowe Mateusz Cicheński

Składnia C++ Programowanie Obiektowe Mateusz Cicheński Składnia C++ Programowanie Obiektowe Mateusz Cicheński Klasy i modyfikatory dostępu Przesłanianie metod Polimorfizm Wskaźniki Metody wirtualne Metody abstrakcyjne i interfejsy Konstruktory i destruktory

Bardziej szczegółowo

Wstęp do Programowania 2

Wstęp do Programowania 2 Wstęp do Programowania 2 dr Bożena Woźna-Szcześniak bwozna@gmail.com Akademia im. Jana Długosza Wykład 5 W programowaniu obiektowym programista koncentruje się na obiektach. Zadaje sobie pytania typu:

Bardziej szczegółowo

Podstawy programowania w języku C++

Podstawy programowania w języku C++ Podstawy programowania w języku C++ Część dziewiąta Tablice a zmienne wskaźnikowe Wersja skrócona, tylko C++ Autor Roman Simiński Kontakt roman.siminski@us.edu.pl www.us.edu.pl/~siminski Niniejsze opracowanie

Bardziej szczegółowo

Programowanie w języku C++

Programowanie w języku C++ Programowanie w języku C++ Część siódma Autor Roman Simiński Kontakt roman.siminski@us.edu.pl www.us.edu.pl/~siminski Niniejsze opracowanie zawiera skrót treści wykładu, lektura tych materiałów nie zastąpi

Bardziej szczegółowo

W2 Wprowadzenie do klas C++ Klasa najważniejsze pojęcie C++. To jest mechanizm do tworzenia obiektów. Deklaracje klasy :

W2 Wprowadzenie do klas C++ Klasa najważniejsze pojęcie C++. To jest mechanizm do tworzenia obiektów. Deklaracje klasy : Wprowadzenie do klas C++ Klasa najważniejsze pojęcie C++. To jest mechanizm do tworzenia obiektów. Deklaracje klasy : class nazwa_klasy prywatne dane i funkcje public: publiczne dane i funkcje lista_obiektów;

Bardziej szczegółowo

SAX i DOM wykorzystanie XML-a we własnych aplikacjach. Simple API for XML Parsing Document Object Model

SAX i DOM wykorzystanie XML-a we własnych aplikacjach. Simple API for XML Parsing Document Object Model SAX i DOM wykorzystanie XML-a we własnych aplikacjach Simple API for XML Parsing Document Object Model 1 SAX - wstęp Definicja: standardowy interfejs do parsowania plików XML oparty na modelu zdarzeniowym

Bardziej szczegółowo

UML a kod w C++ i Javie. Przypadki użycia. Diagramy klas. Klasy użytkowników i wykorzystywane funkcje. Związki pomiędzy przypadkami.

UML a kod w C++ i Javie. Przypadki użycia. Diagramy klas. Klasy użytkowników i wykorzystywane funkcje. Związki pomiędzy przypadkami. UML a kod w C++ i Javie Projektowanie oprogramowania Dokumentowanie oprogramowania Diagramy przypadków użycia Przewoznik Zarzadzanie pojazdami Optymalizacja Uzytkownik Wydawanie opinii Zarzadzanie uzytkownikami

Bardziej szczegółowo

Listy powiązane zorientowane obiektowo

Listy powiązane zorientowane obiektowo Listy powiązane zorientowane obiektowo Aby zilustrować potęgę polimorfizmu, przeanalizujmy zorientowaną obiektowo listę powiązaną. Jak zapewne wiesz, lista powiązana jest strukturą danych, zaprojektowaną

Bardziej szczegółowo

Programowanie w językach

Programowanie w językach Programowanie w językach wysokiego poziomu Obsługa plików za pomocą strumieni Elektronika i Telekomunikacja, semestr III rok akademicki 2013/2014 dr inż. Paweł Myszkowski Plan zajęć a) otwieranie i zamykanie

Bardziej szczegółowo

Część 4 życie programu

Część 4 życie programu 1. Struktura programu c++ Ogólna struktura programu w C++ składa się z kilku części: część 1 część 2 część 3 część 4 #include int main(int argc, char *argv[]) /* instrukcje funkcji main */ Część

Bardziej szczegółowo

Podstawowe elementy proceduralne w C++ Program i wyjście. Zmienne i arytmetyka. Wskaźniki i tablice. Testy i pętle. Funkcje.

Podstawowe elementy proceduralne w C++ Program i wyjście. Zmienne i arytmetyka. Wskaźniki i tablice. Testy i pętle. Funkcje. Podstawowe elementy proceduralne w C++ Program i wyjście Zmienne i arytmetyka Wskaźniki i tablice Testy i pętle Funkcje Pierwszy program // Niezbędne zaklęcia przygotowawcze ;-) #include using

Bardziej szczegółowo

Temat: Dynamiczne przydzielanie i zwalnianie pamięci. Struktura listy operacje wstawiania, wyszukiwania oraz usuwania danych.

Temat: Dynamiczne przydzielanie i zwalnianie pamięci. Struktura listy operacje wstawiania, wyszukiwania oraz usuwania danych. Temat: Dynamiczne przydzielanie i zwalnianie pamięci. Struktura listy operacje wstawiania, wyszukiwania oraz usuwania danych. 1. Rodzaje pamięci używanej w programach Pamięć komputera, dostępna dla programu,

Bardziej szczegółowo

Języki i metodyka programowania. Typy, operatory, wyrażenia. Wejście i wyjście.

Języki i metodyka programowania. Typy, operatory, wyrażenia. Wejście i wyjście. Typy, operatory, wyrażenia. Wejście i wyjście. Typy, operatory, wyrażenia Zmienna: [] [ '[' ']' ] ['=' ]; Zmienna to fragment pamięci o określonym

Bardziej szczegółowo

Programowanie obiektowe

Programowanie obiektowe Programowanie obiektowe Wykład 2: Wstęp do języka Java 3/4/2013 S.Deniziak: Programowanie obiektowe - Java 1 Cechy języka Java Wszystko jest obiektem Nie ma zmiennych globalnych Nie ma funkcji globalnych

Bardziej szczegółowo

Programowanie obiektowe w C++ Wykład 12

Programowanie obiektowe w C++ Wykład 12 Programowanie obiektowe w C++ Wykład 12 dr Lidia Stępień Akademia im. Jana Długosza w Częstochowie L. Stępień (AJD) 1 / 22 Zakresowe pętle for double tab[5] {1.12,2.23,3.33,4.12,5.22 for(double x: tab)

Bardziej szczegółowo

Podstawy programowania w języku C++

Podstawy programowania w języku C++ Podstawy programowania w języku C++ Część siódma Przetwarzanie tablic znaków Autor Roman Simiński Kontakt roman.siminski@us.edu.pl www.us.edu.pl/~siminski Niniejsze opracowanie zawiera skrót treści wykładu,

Bardziej szczegółowo

XML w.net. Dominik Baś nr alb. 160345. Wrocław, 29 maja 2007

XML w.net. Dominik Baś nr alb. 160345. Wrocław, 29 maja 2007 XML w.net Dominik Baś nr alb. 160345 Wrocław, 29 maja 2007 Przetwarzanie dokumentów XML API: SAX Simple Api for XML - przetwarzanie strumieniowe DOM - Document Object Model - odwzorowanie dokumentu XML

Bardziej szczegółowo

Operacje wejścia/wyjścia (odsłona druga) - pliki

Operacje wejścia/wyjścia (odsłona druga) - pliki Operacje wejścia/wyjścia (odsłona druga) - pliki Bogdan Kreczmer ZPCiR IIAiR PWr pokój 307 budynek C3 bogdan.kreczmer@pwr.wroc.pl Copyright c 2005 2008 Bogdan Kreczmer Niniejszy dokument zawiera materiały

Bardziej szczegółowo

I - Microsoft Visual Studio C++

I - Microsoft Visual Studio C++ I - Microsoft Visual Studio C++ 1. Nowy projekt z Menu wybieramy File -> New -> Projekt -> Win32 Console Application w okienku Name: podajemy nazwę projektu w polu Location: wybieramy miejsce zapisu i

Bardziej szczegółowo

Pliki. Informacje ogólne. Obsługa plików w języku C

Pliki. Informacje ogólne. Obsługa plików w języku C Pliki Informacje ogólne Plik jest pewnym zbiorem danych, zapisanym w systemie plików na nośniku danych (np. dysku twardym, pendrive, płycie DVD itp.). Może posiadać określone atrybuty, a odwołanie do niego

Bardziej szczegółowo

Uwagi dotyczące notacji kodu! Moduły. Struktura modułu. Procedury. Opcje modułu (niektóre)

Uwagi dotyczące notacji kodu! Moduły. Struktura modułu. Procedury. Opcje modułu (niektóre) Uwagi dotyczące notacji kodu! Wyrazy drukiem prostym -- słowami języka VBA. Wyrazy drukiem pochyłym -- inne fragmenty kodu. Wyrazy w [nawiasach kwadratowych] opcjonalne fragmenty kodu (mogą być, ale nie

Bardziej szczegółowo

Zmienne i struktury dynamiczne

Zmienne i struktury dynamiczne Zmienne i struktury dynamiczne Zmienne dynamiczne są to zmienne, które tworzymy w trakcie działania programu za pomocą operatora new. Usuwa się je operatorem delete. Czas ich występowania w programie jest

Bardziej szczegółowo

Laboratorium 03: Podstawowe konstrukcje w języku Java [2h]

Laboratorium 03: Podstawowe konstrukcje w języku Java [2h] 1. Typy. Java jest językiem programowania z silnym systemem kontroli typów. To oznacza, że każda zmienna, atrybut czy parametr ma zadeklarowany typ. Kompilator wylicza typy wszystkich wyrażeń w programie

Bardziej szczegółowo

Języki i metodyka programowania. Wprowadzenie do języka C

Języki i metodyka programowania. Wprowadzenie do języka C Literatura: Brian W. Kernighan, Dennis M. Ritchie Język Ansi C, Wydawnictwa Naukowo - Techniczne, 2007 http://cm.bell-labs.com/cm/cs/cbook/index.html Scott E. Gimpel, Clovis L. Tondo Język Ansi C. Ćwiczenia

Bardziej szczegółowo

Smarty PHP. Leksykon kieszonkowy

Smarty PHP. Leksykon kieszonkowy IDZ DO PRZYK ADOWY ROZDZIA SPIS TREœCI KATALOG KSI EK KATALOG ONLINE ZAMÓW DRUKOWANY KATALOG Smarty PHP. Leksykon kieszonkowy Autor: Daniel Bargie³ ISBN: 83-246-0676-9 Format: B6, stron: 112 TWÓJ KOSZYK

Bardziej szczegółowo

Oprogramowanie i wykorzystanie stacji roboczych. Wykład 4

Oprogramowanie i wykorzystanie stacji roboczych. Wykład 4 Wykład 4 p. 1/1 Oprogramowanie i wykorzystanie stacji roboczych Wykład 4 Dr inż. Tomasz Olas olas@icis.pcz.pl Instytut Informatyki Teoretycznej i Stosowanej Politechnika Częstochowska Obsługa sieci Wykład

Bardziej szczegółowo

Programowanie Komputerów

Programowanie Komputerów Programowanie Komputerów Łukasz Kuszner pokój 209, WETI http://www.kaims.pl/ kuszner/ kuszner@eti.pg.gda.pl Wykład 30 godzin, Laboratoria 30 godzin 2012/ Strona 1 z 28 1. Tablice w C# Indeksowane od zera

Bardziej szczegółowo

// Liczy srednie w wierszach i kolumnach tablicy "dwuwymiarowej" // Elementy tablicy są generowane losowo #include <stdio.h> #include <stdlib.

// Liczy srednie w wierszach i kolumnach tablicy dwuwymiarowej // Elementy tablicy są generowane losowo #include <stdio.h> #include <stdlib. Wykład 10 Przykłady różnych funkcji (cd) - przetwarzanie tablicy tablic (tablicy "dwuwymiarowej") - sortowanie przez "selekcję" Dynamiczna alokacja pamięci 1 // Liczy srednie w wierszach i kolumnach tablicy

Bardziej szczegółowo

Programowanie obiektowe w C++ Wykład 1

Programowanie obiektowe w C++ Wykład 1 Programowanie obiektowe w C++ Wykład 1 dr Lidia Stępień Akademia im. Jana Długosza w Częstochowie L. Stępień (AJD) POwCPP 1 / 24 Literatura Prata Stephen, Szkoła programowania. Język C++. Wydawnictwo Helion,

Bardziej szczegółowo

Temat 1: Podstawowe pojęcia: program, kompilacja, kod

Temat 1: Podstawowe pojęcia: program, kompilacja, kod Temat 1: Podstawowe pojęcia: program, kompilacja, kod wynikowy. Przykłady najprostszych programów. Definiowanie zmiennych. Typy proste. Operatory: arytmetyczne, przypisania, inkrementacji, dekrementacji,

Bardziej szczegółowo

Pytania sprawdzające wiedzę z programowania C++

Pytania sprawdzające wiedzę z programowania C++ Pytania sprawdzające wiedzę z programowania C++ Wstęp 1. Zaprezentuj mechanikę tworzenia programu napisanego w języku C++. 2. Co to jest kompilacja? 3. Co to jest konsolidacja? 4. Co to jest kod wykonywalny?

Bardziej szczegółowo

Opis: Instrukcja warunkowa Składnia: IF [NOT] warunek [AND [NOT] warunek] [OR [NOT] warunek].

Opis: Instrukcja warunkowa Składnia: IF [NOT] warunek [AND [NOT] warunek] [OR [NOT] warunek]. ABAP/4 Instrukcja IF Opis: Instrukcja warunkowa Składnia: IF [NOT] warunek [AND [NOT] warunek] [OR [NOT] warunek]. [ELSEIF warunek. ] [ELSE. ] ENDIF. gdzie: warunek dowolne wyrażenie logiczne o wartości

Bardziej szczegółowo

Wykład 4: Klasy i Metody

Wykład 4: Klasy i Metody Wykład 4: Klasy i Metody Klasa Podstawa języka. Każde pojęcie które chcemy opisać w języku musi być zawarte w definicji klasy. Klasa definiuje nowy typ danych, których wartościami są obiekty: klasa to

Bardziej szczegółowo

Programowanie obiektowe

Programowanie obiektowe Programowanie obiektowe Wykład 2 Marcin Młotkowski 4 marca 2015 Plan wykładu 1 2 3 4 5 Marcin Młotkowski Programowanie obiektowe 2 / 47 Krótki opis C Obiektowy, z kontrolą typów; automatyczne odśmiecanie;

Bardziej szczegółowo

Programowanie obiektowe i zdarzeniowe wykład 4 Kompozycja, kolekcje, wiązanie danych

Programowanie obiektowe i zdarzeniowe wykład 4 Kompozycja, kolekcje, wiązanie danych Programowanie obiektowe i zdarzeniowe wykład 4 Kompozycja, kolekcje, wiązanie danych Obiekty reprezentują pewne pojęcia, przedmioty, elementy rzeczywistości. Obiekty udostępniają swoje usługi: metody operacje,

Bardziej szczegółowo

Kurs języka Python Wykład 8. Przetwarzanie tekstu Wyrażenia regularne Biblioteka urllib Parsowanie html'a XML

Kurs języka Python Wykład 8. Przetwarzanie tekstu Wyrażenia regularne Biblioteka urllib Parsowanie html'a XML Kurs języka Python Wykład 8. Przetwarzanie tekstu Wyrażenia regularne Biblioteka urllib Parsowanie html'a XML Wyrażenia regularne c:\> dir *.exe $ rm *.tmp Wyrażenia regularne 'alamakota' '(hop!)*' { '',

Bardziej szczegółowo

Programowanie obiektowe

Programowanie obiektowe Programowanie obiektowe Laboratorium 1. Wstęp do programowania w języku Java. Narzędzia 1. Aby móc tworzyć programy w języku Java, potrzebny jest zestaw narzędzi Java Development Kit, który można ściągnąć

Bardziej szczegółowo

Kurs WWW. Paweł Rajba. pawel@ii.uni.wroc.pl http://pawel.ii.uni.wroc.pl/

Kurs WWW. Paweł Rajba. pawel@ii.uni.wroc.pl http://pawel.ii.uni.wroc.pl/ Paweł Rajba pawel@ii.uni.wroc.pl http://pawel.ii.uni.wroc.pl/ Spis treści Wprowadzenie Automatyczne ładowanie klas Składowe klasy, widoczność składowych Konstruktory i tworzenie obiektów Destruktory i

Bardziej szczegółowo

Wyrażenie include(sciezka_do_pliku) pozwala na załadowanie (wnętrza) pliku do skryptu php. Plik ten może zawierać wszystko, co może się znaleźć w

Wyrażenie include(sciezka_do_pliku) pozwala na załadowanie (wnętrza) pliku do skryptu php. Plik ten może zawierać wszystko, co może się znaleźć w Wyrażenie include(sciezka_do_pliku) pozwala na załadowanie (wnętrza) pliku do skryptu php. Plik ten może zawierać wszystko, co może się znaleźć w obrębie skryptu. Wyrażenia include() i require() są niemal

Bardziej szczegółowo

Wskaźnik może wskazywać na jakąś zmienną, strukturę, tablicę a nawet funkcję. Oto podstawowe operatory niezbędne do operowania wskaźnikami:

Wskaźnik może wskazywać na jakąś zmienną, strukturę, tablicę a nawet funkcję. Oto podstawowe operatory niezbędne do operowania wskaźnikami: Wskaźniki są nieodłącznym elementem języka C. W języku C++ także są przydatne i korzystanie z nich ułatwia pracę, jednak w odróżnieniu do C wiele rzeczy da się osiągnąć bez ich użycia. Poprawne operowanie

Bardziej szczegółowo

Programowanie komputerowe. Zajęcia 4

Programowanie komputerowe. Zajęcia 4 Programowanie komputerowe Zajęcia 4 Typ logiczny Wartości logiczne są reprezentowane przez typ bool. Typ bool posiada tylko dwie wartości: true i false. Zamiast wartości logicznych można używać wartości

Bardziej szczegółowo

Techniki Programowania wskaźniki 2

Techniki Programowania wskaźniki 2 Techniki Programowania wskaźniki 2 Łukasz Madej Katedra Informatyki Stosowanej i Modelowania Wykłady opracowane we współpracy z Danutą Szeligą, Łukaszem Sztangretem Jeżeli wskaźnik pokazuje na element

Bardziej szczegółowo

Wstęp do programowania obiektowego. WYKŁAD 3 Dziedziczenie Pola i funkcje statyczne Funkcje zaprzyjaźnione, this

Wstęp do programowania obiektowego. WYKŁAD 3 Dziedziczenie Pola i funkcje statyczne Funkcje zaprzyjaźnione, this Wstęp do programowania obiektowego WYKŁAD 3 Dziedziczenie Pola i funkcje statyczne Funkcje zaprzyjaźnione, this 1 Nazwa typu Rozmiar Zakres Uwagi bool 1 bit wartości true albo false stdbool.h TYPY ZNAKOWE

Bardziej szczegółowo

dr inż. Jarosław Forenc

dr inż. Jarosław Forenc Informatyka 2 Politechnika Białostocka - Wydział Elektryczny Elektrotechnika, semestr III, studia niestacjonarne I stopnia Rok akademicki 2011/2012 Pracownia nr 9 (20.01.2012) dr inż. Jarosław Forenc Rok

Bardziej szczegółowo

Dariusz Brzeziński. Politechnika Poznańska, Instytut Informatyki

Dariusz Brzeziński. Politechnika Poznańska, Instytut Informatyki Dariusz Brzeziński Politechnika Poznańska, Instytut Informatyki int getmax (int a, int b) { return (a > b? a : b); float getmax (float a, float b) { return (a > b? a : b); long getmax (long a, long b)

Bardziej szczegółowo

Składnia C++ Programowanie Obiektowe Mateusz Cicheński

Składnia C++ Programowanie Obiektowe Mateusz Cicheński Składnia C++ Programowanie Obiektowe Mateusz Cicheński Klasy i modyfikatory dostępu Przesłanianie metod Polimorfizm Wskaźniki Metody wirtualne Metody abstrakcyjne i interfejsy Przeciążanie operatorów Słowo

Bardziej szczegółowo

Funkcje zawarte w bibliotece < io.h >

Funkcje zawarte w bibliotece < io.h > PLIKOWE OPERACJE WEJŚCIA - WYJŚCIA Język C/C++ nie ma wbudowanych żadnych instrukcji umożliwiających wykonywanie operacji wejścia-wyjścia! Służą do tego funkcje biblioteczne. Funkcje zawarte w bibliotece

Bardziej szczegółowo

Rodzina protokołów TCP/IP. Aplikacja: ipconfig.

Rodzina protokołów TCP/IP. Aplikacja: ipconfig. Rodzina protokołów TCP/IP. Aplikacja: ipconfig. dr Zbigniew Lipiński Instytut Matematyki i Informatyki ul. Oleska 48 50-204 Opole zlipinski@math.uni.opole.pl Specyfikacja struktury FIXED_INFO Nazwa struktury:

Bardziej szczegółowo

Język C++ zajęcia nr 2

Język C++ zajęcia nr 2 Język C++ zajęcia nr 2 Inicjalizacja Definiowanie obiektu może być połączone z nadaniem mu wartości początkowej za pomocą inicjalizatora, który umieszczany jest po deklaratorze obiektu. W języku C++ inicjalizator

Bardziej szczegółowo

Kurs programowania. Wykład 2. Wojciech Macyna. 17 marca 2016

Kurs programowania. Wykład 2. Wojciech Macyna. 17 marca 2016 Wykład 2 17 marca 2016 Dziedziczenie Klasy bazowe i potomne Dziedziczenie jest łatwym sposobem rozwijania oprogramowania. Majac klasę bazowa możemy ja uszczegółowić (dodać nowe pola i metody) nie przepisujac

Bardziej szczegółowo

Zaawansowane programowanie w języku C++ Klasy w C++

Zaawansowane programowanie w języku C++ Klasy w C++ Zaawansowane programowanie w języku C++ Klasy w C++ Prezentacja jest współfinansowana przez Unię Europejską w ramach Europejskiego Funduszu Społecznego w projekcie pt. Innowacyjna dydaktyka bez ograniczeń

Bardziej szczegółowo

Klasy Obiekty Dziedziczenie i zaawansowane cechy Objective-C

Klasy Obiekty Dziedziczenie i zaawansowane cechy Objective-C #import "Fraction.h" #import @implementation Fraction -(Fraction*) initwithnumerator: (int) n denominator: (int) d { self = [super init]; } if ( self ) { [self setnumerator: n anddenominator:

Bardziej szczegółowo

Język ludzki kod maszynowy

Język ludzki kod maszynowy Język ludzki kod maszynowy poziom wysoki Język ludzki (mowa) Język programowania wysokiego poziomu Jeśli liczba punktów jest większa niż 50, test zostaje zaliczony; w przeciwnym razie testu nie zalicza

Bardziej szczegółowo

Kurs programowania. Wykład 9. Wojciech Macyna. 28 kwiecień 2016

Kurs programowania. Wykład 9. Wojciech Macyna. 28 kwiecień 2016 Wykład 9 28 kwiecień 2016 Java Collections Framework (w C++ Standard Template Library) Kolekcja (kontener) Obiekt grupujacy/przechowuj acy jakieś elementy (obiekty lub wartości). Przykładami kolekcji sa

Bardziej szczegółowo

Tablice (jedno i wielowymiarowe), łańcuchy znaków

Tablice (jedno i wielowymiarowe), łańcuchy znaków Tablice (jedno i wielowymiarowe), łańcuchy znaków wer. 8 z drobnymi modyfikacjami! Wojciech Myszka Katedra Mechaniki i Inżynierii Materiałowej 2017-04-07 09:35:32 +0200 Zmienne Przypomnienie/podsumowanie

Bardziej szczegółowo

Globalne / Lokalne. Wykład 15. Podstawy programowania (język C) Zmienne globalne / lokalne (1) Zmienne globalne / lokalne (2)

Globalne / Lokalne. Wykład 15. Podstawy programowania (język C) Zmienne globalne / lokalne (1) Zmienne globalne / lokalne (2) Podstawy programowania (język C) Globalne / Lokalne Wykład 15. Tomasz Marks - Wydział MiNI PW -1- Tomasz Marks - Wydział MiNI PW -2- Zmienne globalne / lokalne (1) int A, *Q; // definicja zmiennych globalnych

Bardziej szczegółowo

DANE TEKSTOWE W JĘZYKU C/C++ - TABLICE ZNAKOWE

DANE TEKSTOWE W JĘZYKU C/C++ - TABLICE ZNAKOWE DANE TEKSTOWE W JĘZYKU C/C++ - TABLICE ZNAKOWE Stała tekstowa / łańcuchowa jest tablicą znaków zakończoną znakiem o kodzie: 0 np. stała łańcuchowa: Jestem tekstem ASCII... J e s t e m t e k s t e m \0...

Bardziej szczegółowo

Operator przypisania. Jest czym innym niż konstruktor kopiujący!

Operator przypisania. Jest czym innym niż konstruktor kopiujący! Operator przypisania Jest czym innym niż konstruktor kopiujący! Domyślnie jest zdefiniowany jako przypisanie składowa po składowej (zatem niekoniecznie bajt po bajcie). Dla klasy X definiuje się jako X&

Bardziej szczegółowo

Podstawy informatyki. Informatyka stosowana - studia niestacjonarne. Grzegorz Smyk. Wydział Inżynierii Metali i Informatyki Przemysłowej

Podstawy informatyki. Informatyka stosowana - studia niestacjonarne. Grzegorz Smyk. Wydział Inżynierii Metali i Informatyki Przemysłowej Podstawy informatyki Informatyka stosowana - studia niestacjonarne Grzegorz Smyk Wydział Inżynierii Metali i Informatyki Przemysłowej Akademia Górniczo Hutnicza im. Stanisława Staszica w Krakowie, rok

Bardziej szczegółowo

Jzyk C++ cz 3. Jarosław Gramacki Instytut Informatyki i Elektroniki ( $)*)+' *, - ( ' )*'.' '',*/ *, ','*0) 1 / ) %*+ 2'' 2" ( $%%) )'20 )*0) 1 / )

Jzyk C++ cz 3. Jarosław Gramacki Instytut Informatyki i Elektroniki ( $)*)+' *, - ( ' )*'.' '',*/ *, ','*0) 1 / ) %*+ 2'' 2 ( $%%) )'20 )*0) 1 / ) Jzyk C++ cz 3 Jarosław Gramacki Instytut Informatyki i Elektroniki # $$%%& ' ( $)*)+' *, - ( ' )*'.' '',*/ *, ','*0) 1 / ) %*+ 2'' 2" ( $%%) )'20 )*0) 1 / )!" 2 # $$%%& ' ( $%%/,))3 ( %* 2 / 4 ( ( *' *''*,

Bardziej szczegółowo

Programowanie obiektowe

Programowanie obiektowe Programowanie obiektowe Podstawowe cechy i możliwości języka Scala mgr inż. Krzysztof Szwarc krzysztof@szwarc.net.pl Sosnowiec, 2017 1 / 32 mgr inż. Krzysztof Szwarc Programowanie obiektowe Informacje

Bardziej szczegółowo

Java - tablice, konstruktory, dziedziczenie i hermetyzacja

Java - tablice, konstruktory, dziedziczenie i hermetyzacja Java - tablice, konstruktory, dziedziczenie i hermetyzacja Programowanie w językach wysokiego poziomu mgr inż. Anna Wawszczak PLAN WYKŁADU zmienne tablicowe konstruktory klas dziedziczenie hermetyzacja

Bardziej szczegółowo

SQL 4 Structured Query Lenguage

SQL 4 Structured Query Lenguage Wykład 5 SQL 4 Structured Query Lenguage Instrukcje sterowania danymi Bazy Danych - A. Dawid 2011 1 CREATE USER Tworzy nowego użytkownika Składnia CREATE USER specyfikacja użytkownika [, specyfikacja użytkownika]...

Bardziej szczegółowo

Wykład VI. Programowanie. dr inż. Janusz Słupik. Gliwice, 2014. Wydział Matematyki Stosowanej Politechniki Śląskiej. c Copyright 2014 Janusz Słupik

Wykład VI. Programowanie. dr inż. Janusz Słupik. Gliwice, 2014. Wydział Matematyki Stosowanej Politechniki Śląskiej. c Copyright 2014 Janusz Słupik Wykład VI Wydział Matematyki Stosowanej Politechniki Śląskiej Gliwice, 2014 c Copyright 2014 Janusz Słupik Operacje na plikach Operacje na plikach Aby móc korzystać z pliku należy go otworzyć w odpowiednim

Bardziej szczegółowo

Elementy języka C. ACprogramislikeafastdanceonanewlywaxeddancefloorbypeople carrying razors.

Elementy języka C. ACprogramislikeafastdanceonanewlywaxeddancefloorbypeople carrying razors. Wykład 3 ACprogramislikeafastdanceonanewlywaxeddancefloorbypeople carrying razors. Waldi Ravens J. Cichoń, P. Kobylański Wstęp do Informatyki i Programowania 75 / 146 deklaracje zmiennych instrukcja podstawienia

Bardziej szczegółowo

Programowanie komputerowe. Zajęcia 5

Programowanie komputerowe. Zajęcia 5 Programowanie komputerowe Zajęcia 5 Tablice wielowymiarowe Tablicę dwuwymiarową możemy deklarować statycznie: typ nazwa[rozmiar1][rozmiar2]; Ma ona elementy nazwa[i][j] dla i=0,,rozmiar1-1, j=0,...,rozmiar2-1.

Bardziej szczegółowo

PARADYGMATY PROGRAMOWANIA Wykład 3

PARADYGMATY PROGRAMOWANIA Wykład 3 PARADYGMATY PROGRAMOWANIA Wykład 3 Definiowanie operatorów i ich przeciążanie Przykłady zastosowania operatorów: a) operator podstawienia ( = ) obiektów o złożonej strukturze, b) operatory działania na

Bardziej szczegółowo

Wykład 9 2014-06-20 09:37 PP2_W9

Wykład 9 2014-06-20 09:37 PP2_W9 Wykład 9 Przykłady programów z wykorzystaniem klas - przykład funkcji operatorowych - obiektowa implementacja listy jednokierunkowej kopiowanie obiektów - klasa "latający napis" Pozycjonowanie w plikach

Bardziej szczegółowo

Stałe, znaki, łańcuchy znaków, wejście i wyjście sformatowane

Stałe, znaki, łańcuchy znaków, wejście i wyjście sformatowane Stałe, znaki, łańcuchy znaków, wejście i wyjście sformatowane Stałe Oprócz zmiennych w programie mamy też stałe, które jak sama nazwa mówi, zachowują swoją wartość przez cały czas działania programu. Można

Bardziej szczegółowo

Zajęcia nr 1 Podstawy programowania. dr inż. Łukasz Graczykowski mgr inż. Leszek Kosarzewski Wydział Fizyki Politechniki Warszawskiej

Zajęcia nr 1 Podstawy programowania. dr inż. Łukasz Graczykowski mgr inż. Leszek Kosarzewski Wydział Fizyki Politechniki Warszawskiej Zajęcia nr 1 Podstawy programowania dr inż. Łukasz Graczykowski mgr inż. Leszek Kosarzewski Wydział Fizyki Politechniki Warszawskiej Ramowy program warsztatów 1. Pierwsze: Podstawy programowania 2. Drugie:

Bardziej szczegółowo

Programowanie Procedurale. Pliki w języku C++

Programowanie Procedurale. Pliki w języku C++ Programowanie Procedurale. Pliki w języku C++ Bożena Woźna-Szcześniak bwozna@gmail.com Jan Długosz University, Poland Wykład 10 Bożena Woźna-Szcześniak (AJD) Programowanie Procedurale. Pliki w języku C++

Bardziej szczegółowo

Programowanie obiektowe i C++ dla matematyków

Programowanie obiektowe i C++ dla matematyków Programowanie obiektowe i C++ dla matematyków Bartosz Szreder szreder (at) mimuw... 8 XI 2 1 Sposoby przekazywania argumentów Powiedzmy, że chcemy napisać funkcję, która zamieni miejscami wartość dwóch

Bardziej szczegółowo

Rozdział 4 KLASY, OBIEKTY, METODY

Rozdział 4 KLASY, OBIEKTY, METODY Rozdział 4 KLASY, OBIEKTY, METODY Java jest językiem w pełni zorientowanym obiektowo. Wszystkie elementy opisujące dane, za wyjątkiem zmiennych prostych są obiektami. Sam program też jest obiektem pewnej

Bardziej szczegółowo

Struktury czyli rekordy w C/C++

Struktury czyli rekordy w C/C++ Struktury czyli rekordy w C/C++ Wprowadzenie do programowania w języku C struktury. pola bitowe, unie Struktury (rekordy) są złożonymi zmiennymi, składającymi się z elementów różnych typów zwanych polami,

Bardziej szczegółowo