(Średnio) zaawansowane programowanie w C++ (ZPR)

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

Download "(Średnio) zaawansowane programowanie w C++ (ZPR)"

Transkrypt

1 (Średnio) zaawansowane programowanie w ++ (ZPR) Wykład 6 - łączenie ++ i a, powtórzenie Robert Nowak 2019L (Średnio) zaawansowane programowanie w ++ (ZPR) 1/45

2 Łączenie i ++ Kompilatory muszą być zgodne (w taki sam sposób reprezentować typy wbudowane) problemy: dekorowanie nazw dla linkera struktury danych funkcja main operacje na stercie (Średnio) zaawansowane programowanie w ++ (ZPR) 2/45

3 dekorowanie nazw linker w nazwy nie mogą być przeciążane w ++ mogą nazwa funkcji jest dekorowana przez kompilator ++ (name mengling, name decoration) extern "" { //Zapobiega dekorowaniu nazw int funkcja(int a, int b) /*... */ //Zapobiega dekorowaniu nazw jeżeli jest kompilowane przez ++ #ifdef cplusplus extern "" { #endif int funkcja( int a, int b) /*... */ #ifdef cplusplus #endif (Średnio) zaawansowane programowanie w ++ (ZPR) 3/45

4 funkcja main i struktury danych Należy wybierać implementację main z ++, ponieważ zapewnia ona prawidłową inicjację składowych statycznych zapewnia wołanie destruktorów dla składowych statycznych Struktury danych (tylko te, które są dostępne w ): typy wbudowane, POD struktury, które nie mają funkcji wirtualnych obiekty, które zostały powołane przez new powinny być zwalniane przez delete pamięć zaalokowana przez malloc powinna być zwalniana przez free (Średnio) zaawansowane programowanie w ++ (ZPR) 4/45

5 interpretowany, interaktywny język programowania Software Fundation, programowanie funkcyjne, obiektowe i strukturalne dynamiczna kontrola typów brak enkapsulacji zarządzanie pamięcią przez garbage collection dokumentacja w kodzie źródłowym zmienna liczba argumentów funkcji i metod zaznaczanie bloków przez wcięcia (Średnio) zaawansowane programowanie w ++ (ZPR) 5/45

6 - hello world uruchomienie interpretera python >>> print Hello world! # comments after hash >>> quit() skrypt utworzenie pliku o nazwie hello.py print Hello world! uruchomienie skryptu python hello.py (Średnio) zaawansowane programowanie w ++ (ZPR) 6/45

7 , obliczenia - wykorzystanie interpretera do obliczeń >>> >>> (2+3*3)/2 # arytmetyka całkowita 5 >>> width = 20.1 >>> height = 5/2.0 # arytmetyka rzeczywista >>> width * height >>> x = y = 0 # równoczesne przypisanie do dwóch obiektów >>> n # odwołanie się do niezdefiniowanego obiektu Traceback (most recent call last): File "<stdin>", line 1, in <module> NameError: name n is not defined None oznacza brak wartości x = None (Średnio) zaawansowane programowanie w ++ (ZPR) 7/45

8 , obliczenia (2) % modulo (5 % 2 = 1) Funkcje wbudowane ** potęga (2 ** 3 = 8) int() konwersja (podłoga) float() konwersja Math module (import math) math.pi π = math.e e = math.sqrt() pierwiastek kwadratowy math.log(), math.log10(), funkcje wykładnicze i logarytmiczne math.exp(x), math.pow(x,y) dodatkowo funkcje trygonometryczne i inne Google: python math or (Średnio) zaawansowane programowanie w ++ (ZPR) 8/45

9 - napis >>> s = Hello # pojedyncze lub podwójne cudzysłowy >>> print s Hello >>> print s + "world" # konkatenacja przez operator + Hello world >>> print s + man *3 # powtórzenia napisów za pomocą * Hello man man man >>> u Hello # unicode >>> print u Section \u00a7 # unicode character >>> unicode( xyz, utf-8 ) # ASII, UTF-8, UTF-16, Latin-1, etc. Indeksowanie >>> s = Hello >>> s[0] # pierwsza litera, tutaj H >>> s[-1] # ujemy indeks oznacza liczenie od końca, tutaj o >>> s[1:3] # substring, tutaj el >>> s[:3] # pierwszy indeks jest domyślnie równy 0 >>> s[1:] # drugi indeks jest domyślnie równy długości napisu >>> len(s)# długość napisu (Średnio) zaawansowane programowanie w ++ (ZPR) 9/45

10 - lista l = [ Hello, world, 1, 2] # elementy listy mogą być różnych typów l[0] # indeks używany dla list len(l) # liczba elementów w liscie l[1:3] # wycinanie dla list (podobnie jak dla napisów) l + [ X, Y ] # łączenie list print l[2:]*3 # powtórzenia dla list l[0] = cat # l = [ cat, world, 1, 2 ] l.append( mouse ) # dodaje element na koniec listy l[0:2] = [ xxx ] # modyfikuje listę, może dodać lub usunąć elementy l[:] = [ ] # czyści listę l = [ 1, 2, 3 ] m = [ l, [ 4 ] ] # m jest listą list # [[1, 2, 3], [4]] (Średnio) zaawansowane programowanie w ++ (ZPR) 10/45

11 - słownik len(d) - liczba obiektów w słowniku k in d - czy d zawiera klucz k d[k] - zwraca wartość dla klucza k, jeżeli brak klucza zgłasza wyjątek KeyError d[k] = val - dodaje parę klucz-wartość, jeżeli poprzednio istniała para jest nadpisywana d = { one :1, three :3 # tworzy słownik d[ two ] = 1 # d = { one :1, three :3, two :1 d[ two ] = 2 # d = { one :1, three :3, two :2 d = { John Smidth : , Mark Brown : , Max Sugar : (Średnio) zaawansowane programowanie w ++ (ZPR) 11/45

12 - instrukcje sterujące Bloki są oznaczane przez wcięcia x = int(raw_input("enter integer:")) if x < 0: print Negative elif x == 0: print Zero else: print Positive while x > 0: # pętla while x = x - 1 print x animals = [ dog, cat, mouse ] for a in animals: # pętla for for i in range(len(a)): # range generuje listę, np. [0, 1, 2] print a[:i] (Średnio) zaawansowane programowanie w ++ (ZPR) 12/45

13 Programowanie strukturalne w ie Nowa funkcja definiowana za pomocą def Przykład: wieże Hanoi, animacja: Tower_of_Hanoi_4.gif a b c a b c a b c a b c def hanoi(in_tower, out_tower, tmp_tower, nr): "documentation of the function" # narzędzia używają tego opisu if nr == 1: print move 1 from + in_tower + to + out_tower return hanoi(in_tower, tmp_tower, out_tower, nr - 1) print move + str(nr) + from + in_tower + to + out_tower hanoi(tmp_tower, out_tower, in_tower, nr - 1) return (Średnio) zaawansowane programowanie w ++ (ZPR) 13/45

14 - wyjątki 1 def f(i): 2 if i == 2: 3 raise Exception( i==2 ) 4 else: 5 g(i-1) 6 def g(i): 7 while i > 0: 8 i = i - 1; 9 f(i) 10 def h(i): 11 try: 12 g(i) 13 except Exception: 14 pass 15 h(5) linia 15 h(5) 10 i=5 11 * 12 * g(5) 06 i=5 07 * 08 i=4 09 * f(4) 01 i=4 02 * 04 * 05 * g(3) 06 i=3 07 * 08 i=2 (Średnio) 09 zaawansowane programowanie * w ++ f(2) (ZPR) 14/45

15 Programowanie funkcyjne w ie >>>g= lambda x: x**2 # tworzy funkcję anomimową >>>g(4) 16 >>>add = lambda a, b: a+b >>>add(2,3) 5 >>># pierwszy argument to warunek >>>print filter(lambda x: x % 2 == 0, [1, 2, 3, 4, 5, 6, 7]) [2, 4, 6] >>># domknięcie (closure) - zapamiętuje otoczenie funkcji >>>def callback(msg):... print msg >>>words = [ do, re, mi ] >>>func = [] >>>for w in words:... func.append( lambda p = w: callback(p) ) >>>func[0]() do (Średnio) zaawansowane programowanie w ++ (ZPR) 15/45

16 - moduł (plik) Moduł - plik z rozszerzeniem py zawierający kod a wewnątrz modułu jego nazwa jest zmienną name gdy moduł jest uruchomiony jako skrypt python module.py jego nazwą jest main definicje mogą być użyte w innym module import name Funkcje: dir(module-name) - zawartość modułu help(module-name) - dokumentacja modułu Moduł może zawierać sekcję wykonywaną gdy po raz pierwszy moduł jest użyty def f() # definicja if name == main : # nie uruchamia gdy moduł jest dołączany # sekcja wykonywana gdy moduł jest wołany jako skrypt (Średnio) zaawansowane programowanie w ++ (ZPR) 16/45

17 - programowanie obiektowe definicja klasy po słowie kluczowym class class Mylass: default_x = 1 # składowa statyczna def init (self, x, y=0): # metoda inicjująca self.x = x # składowa obiektu self.y = y # składowa obiektu def f(self): # metoda return self.x język upraszcza wołanie metody inicjującej obiekt, np. m=mylass(23), wtedy m.x==23 język upraszcza dostęp do atrybutu lub wołanie metody, np. m.f() to to samo co Mylass.f(m) pierwszy atrybut metody jest wymieniony jawnie, przyjęło się go nazywać self (Średnio) zaawansowane programowanie w ++ (ZPR) 17/45

18 - (wielo)dziedziczenie # dziedziczenie class Derivedlass(Baselass): # definicja klasy pochodnej jeżeli atrybut (lub metoda) nie jest zdefiniowana w danej klasie klasy bazowe są przeszukiwane (rekursywnie) wszystkie metody zachowują się jak wirtualne w ++ można wołać metody wprost Baselass.method(self, arguments) brak enkapsulacji (wszystkie metody i składowe są publiczne) isinstance(obj, class) bada, czy obj is typu class issubclass(classa, classb) bada, zcy classa jest pochodna po classb (Średnio) zaawansowane programowanie w ++ (ZPR) 18/45

19 - programowanie obiektowe (2) Można dodawać metody w czasie działania class A(): def init (self): self.i = 0 def f(self, p): print A::f, i= + str(self.i) + p= + str(p) >>>a=a() >>>a.f(1) A::f, i=0 p=1 >>>a. class.g = lambda self: self.f( ala ) >>>a.g() A::f, i=0, p=ala (Średnio) zaawansowane programowanie w ++ (ZPR) 19/45

20 Pakiety Pakiet - katalog zawierający moduły a i moduł specjalny (inicjujący) o nazwie init.py server/ # przykład pakietu init.py # inicjacja config/ # pakiet składowy init.py models.py # moduł simulator/ init.py camera.py radar.py nazwy modułów wykorzystują kropki import server.simulator.camera # import module Plik init.py musi istnieć, nawet gdy nie jest potrzebna inicjacja pakietu (wielkość pliku=0) (Średnio) zaawansowane programowanie w ++ (ZPR) 20/45

21 Ścieżka poszukiwań modułów Gdy name jest dołączany, poszukuje się plików w katalogach: lokalnym, zawierającym uruchomiony skrypt innych, katalogi są przechowywane w zmiennej sys.path import sys print sys.path # drukuje aktualne ścieżki aby dodać ścieżkę, można ustawić zmienną środowiskową PYTHONPATH (Średnio) zaawansowane programowanie w ++ (ZPR) 21/45

22 Standardowe pakiety a - dostarczane wraz z interpreterem dokumentacja: string re struct difflib StringIO cstringio textwrap codecs unicodedata stringprep fpformat datetime calendar collections heapq bisect array sets sched mutex Queue weakref UserDict UserList UserString types new copy pprint repr numbers math cmath decimal fractions random itertools functools operator os.path fileinput stat statvfs filecmp tempfile glob fnmatch linecache shutil dircache macpath pickle cpickle copy_reg shelve marshal anydbm whichdb dbm gdbm dbhash bsddb dumbdbm sqlite3 zlib gzip bz2 zipfile tarfile csv onfigparser robotparser netrc xdrlib plistlib hashlib hmac md5 sha os io time argparse optparse getopt logging logging.config logging.handlers getpass curses curses.textpad curses.ascii curses.panel platform errno ctypes select threading thread dummy_threading dummy_thread multiprocessing mmap readline rlcompleter subprocess socket ssl signal popen2 asyncore asynchat json mailcap mailbox mhlib mimetools mimetypes MimeWriter mimify multifile rfc822 base64 binhex binascii quopri uu HTMLParser sgmllib htmllib htmlentitydefs xml.parsers.expat xml.dom xml.dom.minidom xml.dom.pulldom xml.sax xml.sax.handler xml.sax.saxutils xml.sax.xmlreader xml.etree.elementtree webbrowser cgi cgitb wsgiref urllib urllib2 httplib ftplib poplib imaplib nntplib smtplib smtpd telnetlib uuid urlparse SocketServer BaseHTTPServer SimpleHTTPServer GIHTTPServer cookielib ookie xmlrpclib SimpleXMLRPServer DocXMLRPServer audioop imageop aifc sunau wave chunk colorsys imghdr sndhdr ossaudiodev gettext locale cmd shlex Tk Tkinter ttk Tix ScrolledText turtle IDLE Packages pydoc doctest unittest translation test test.test_support bdb pdb ommands Profilers hotshot timeit trace sys sysconfig future_builtins warnings contextlib abc atexit traceback gc inspect site user fpectl distutils code codeop rexec Bastion imp imputil zipimport pkgutil modulefinder runpy parser ast symtable symbol token keyword tokenize tabnanny pyclbr py_compile compileall dis pickletools i wiele innych (Średnio) zaawansowane programowanie w ++ (ZPR) 22/45

23 automatyczna instalacja pakietów kilka tysięcy pakietów dostępnych w repozytorium Package Index. pypi.python.org Dostępne są narzędzia do automatycznego instalowania pakietów przechowywanych w tym repozytorium zainstalować setuptools dla odpowiedniej wersji interpretera run the egg: sh setuptools-version.egg Następnie: pip install package_name wersja pakietu jest wybierana automatycznie (najczęściej najnowsza) (Średnio) zaawansowane programowanie w ++ (ZPR) 23/45

24 Łączenie ++ i a (Średnio) zaawansowane programowanie w ++ (ZPR) 24/45

25 Potrzeba użycia różnych języków w aplikacjach (patrz wykład 1) System komputerowy zawsze: ma ograniczenia czasowe, więc tworzenie całości powinno być możliwie szybkie posiada pewne elementy, które są wąskim gardłem - powinny być zaimplementowane wydajnie (20% kodu) System komputerowy często: posiada pewne elementy, których autor nie chce udostępniać (kod ukryty przed użytkownikiem) posiada pewne fragmenty, które powinny być dostępne dla użytkownika (aby dostosować aplikację do indywidualnych potrzeb, np. konfiguracja) (Średnio) zaawansowane programowanie w ++ (ZPR) 25/45

26 Łączenie ++ i a powody rozszerzania a w ++ kod wykonywany jest szybciej wykorzystanie istniejącego kodu kod jest ukryty przed użytkownikiem powody osadzania a w ++ brak potrzeby kompilacji wykorzystanie bibliotek a kod dostępny dla użytkownika Interfejsy: API Boost (Średnio) zaawansowane programowanie w ++ (ZPR) 26/45

27 Przykłady Rozszerzanie a w ++: utworzenie biblioteki dzielonej zawierającej funkcje w ++ import biblioteki do a i wykonanie Przykład: hello world Osadzanie a w ++ (Boost ): Przykład: embedding (Średnio) zaawansowane programowanie w ++ (ZPR) 27/45

28 Dodatkowa lektura ( R. Nowak, Biblioteka Boost.. Łączenie ++ i a, Software Developer s Journal, R. Nowak, Wydajne i elastyczne programy. Łączenie ++ i a przy pomocy Boost., Programista, R. Nowak, Komunikacja z serwerem w aplikacjach flex, Programista, no. 7, pp , R. Nowak, Aplikacje internetowe wykorzystujące python. biblioteki flup, web2py, django, Programista, no. 13, pp , (Średnio) zaawansowane programowanie w ++ (ZPR) 28/45

29 Przykładowe zadania (Średnio) zaawansowane programowanie w ++ (ZPR) 29/45

30 Przykładowe zadania Wzorce projektowe Wzorce kreacyjne (tworzenie obiektów) fabryka obiektów fabryka abstrakcyjna prototyp singleton wzorce strukturalne (budowa obiektów) adapter fasada proxy kompozyt dekorator wzorce czynnościowe (współpraca pomiędzy obiektami) polecenie, komenda wizytator wielometoda obserwator iterator (Średnio) zaawansowane programowanie w ++ (ZPR) 30/45

31 Przykładowe zadania i uzupełnienie wiadomości o ++ stałość, const, mutable polimorfizm, funkcje wirtualne, dziedziczenie wielobazowe dynamiczna informacja o typie różne strategie obsługi błędów, mechanizm wyjątków sprytne wskaźniki: std::unique_ptr, std::auto_ptr (wycofywany) std::shared_ptr, boost::shared_ptr std::weak_ptr, boost::weak_ptr boost::scoped_ptr, boost::scoped_array boost::intrusive_ptr referencja do r-wartości w ++11 (r-value reference) (Średnio) zaawansowane programowanie w ++ (ZPR) 31/45

32 Przykładowe zadania Przykładowe zadania (Średnio) zaawansowane programowanie w ++ (ZPR) 32/45

33 Przykładowe zadania Zad1 - zaproponuj implementację readfromstream wczytuje ona kolekcję pracowników ze strumienia (hierarchia taka jak na rysunku). Deklaracje są zaproponowane poniżej. enum PracownikTyp { SEZNONOWY, SPEJALISTA, KIEROWNIK; typedef boost::shared_ptr<pracownik> PracownikPtr; typedef std::vector<pracownikptr> Pracownicy; Pracownicy readfromstream(std::istream& iys); (Średnio) zaawansowane programowanie w ++ (ZPR) 33/45

34 Przykładowe zadania typedef boost::shared_ptr<pracownik> PracownikPtr; class UnknownTypeException : public std::exception { ; class PracownikFactory { public: typedef PracownikPtr (*PracownikreateFun)(); static PracownikFactory& getinstance() { static PracownikFactory instance; return instance; void regist(int t, PracownikreateFun fun) { creators_.insert( std::pair<int,pracownikreatefun>(t,fun) ); PracownikPtr create(std::istream& is) { int typ; is >> typ; reators::const_iterator it = creators_.find(typ); if(it!= creators_.end() ) return it->second(); else throw UnknownTypeException(); private: typedef std::map<int,pracownikreatefun> reators; reators creators_; ; (Średnio) zaawansowane programowanie w ++ (ZPR) 34/45

35 Przykładowe zadania Zad1 - przykładowe rozwiązanie typedef std::vector<pracownikptr> Pracownicy; Pracownicy readfromstream(std::istream& is) { Pracownicy out; while(is) { try { PracownikPtr p = PracownikFactory::getInstance().create(is); out.push_back(p); catch(unknowntypeexception&) { return out; (Średnio) zaawansowane programowanie w ++ (ZPR) 35/45

36 Przykładowe zadania class File { std::string name_; int size_; public: File(std::string n, int s) : name_(n), size_(s) { std::string getname() const { return name_; int getsize() const { return size_; ~File(){ ; class Dir { typedef File* hild; typedef std::vector<hild> hildren; std::string name_; hildren ch_; public: Dir(const std::string& n) : name_(n) { std::string getname() const { return name_; int getsize() const { int size = 0; for(hildren::const_iterator i=ch_.begin(); i!=ch_.end();++i) size += (*i)->getsize(); return size; void add(hild el) { ch_.push_back(el); ~Dir() { for(hildren::iterator i=ch_.begin(); i!=ch_.end();++i) delete *i; ; (Średnio) zaawansowane programowanie w ++ (ZPR) 36/45

37 Przykładowe zadania Zad3 - podać napis, który zostanie wydrukowany M m; D1* d1 = &m; cout << m.f() << d1->f() << static_cast<d2&>(m).f() << static_cast<b&>(m).f() << flush; struct B { virtual int f() { return 1; ; struct D1 : virtual public B { virtual int f() { return 2; ; struct D2 : virtual public B { ; struct M : public D1, public D2 { virtual int f() { return 3; ; (Średnio) zaawansowane programowanie w ++ (ZPR) 37/45

38 Przykładowe zadania try { h(); catch(const std::exception&) { std::cout << c ; catch(const E& e) { std::cout << e.c_; Ile razy zostanie wywołany destruktor klasy X Jeżeli definicja typu PX zostanie zmieniona na następującą: typedef X* PX;, to ile razy zostanie wywołany destruktor klasy X struct E : public std::exception { char c_; E(char c):c_(c){ ; struct X { char c_; X(char c):c_(c){cout << c_; ~X(){ std::cout << c_; ; typedef std::auto_ptr<x> PX; PX f(char c){ return PX(new X(c) ); void g(const PX& px){ throw E(px->c_); void h() { PX pa = f( a ); try { PX pb = pa; g(f( b )); catch(const E& e){ cout << e.c_;throw; (Średnio) zaawansowane programowanie w ++ (ZPR) 38/45

39 Przykładowe zadania Wekt2D w1(1,1), w2(2); assert( w1 + w2 == Wekt2D(3,1) ); class Wekt2D { public: explicit Wekt2D(int dx = 0, int dy ) : dx_(dx), dy_(dy) { int getdx() { return dx_; int getdy() { return dy_; Wekt2D& operator+=(const Wekt2D& w) { Wekt2D o; o.dx_ = w.dx_ + dx_; o.dy_ = w.dy_ = dy_; return o; Wekt2D& operator+(wekt2d& w) const { Wekt2D o(*this); o += w; return o; int operator==(wekt2d w) const { return dy_ == w.dy_; private: int dx_, dy_; ; std::ostream& operator<{<(std::ostream os, Wekt2D w) { os << "(" << w.getdx() << ", " << w.getdy() << ")"; (Średnio) zaawansowane programowanie w ++ (ZPR) 39/45

40 Przykładowe zadania class Wekt2D { public: explicit Wekt2D(int dx = 0, int dy = 0) : dx_(dx), dy_(dy) { int getdx() const { return dx_; int getdy() const { return dy_; Wekt2D& operator+=(const Wekt2D& w) { dx_ += w.dx_; dy_ += w.dy_; return *this; Wekt2D operator+(const Wekt2D& w) const { Wekt2D o(*this); o += w; return o; bool operator==(const Wekt2D& w) const { return dx_ == w.dx_ && dy_ == w.dy_; private: int dx_, dy_; ; std::ostream& operator<<(std::ostream& os, const Wekt2D& w) { os << "(" << w.getdx() << "," << w.getdy() << ")"; return os; (Średnio) zaawansowane programowanie w ++ (ZPR) 40/45

41 Przykładowe zadania Zadanie 6 (Guru of The Week, 2), niepotrzebne obiekty string FindAddr( list<employee> l, string name ) { for( list<employee>::iterator i = l.begin(); i!= l.end(); i++ ) if( *i == name ) return (*i).addr; return ""; (Średnio) zaawansowane programowanie w ++ (ZPR) 41/45

42 Przykładowe zadania Zadanie 6 (Guru of The Week, 2), niepotrzebne obiekty string FindAddr( list<employee> l, string name ) { for( list<employee>::iterator i = l.begin(); i!= l.end(); i++ ) if( *i == name ) return (*i).addr; return ""; string FindAddr( const list<employee>& l, const string& name ) { string addr; for( list<employee>::iterator i = l.begin(); i!= l.end(); ++i ) if( i->name() == name ){ addr = (*i).addr; break; return addr; (Średnio) zaawansowane programowanie w ++ (ZPR) 42/45

43 Przykładowe zadania Zadanie 6 (Guru of The Week, 2), niepotrzebne obiekty string FindAddr( list<employee> l, string name ) { for( list<employee>::iterator i = l.begin(); i!= l.end(); i++ ) if( *i == name ) return (*i).addr; return ""; string FindAddr( const list<employee>& l, const string& name ) { string addr; for( list<employee>::iterator i = l.begin(); i!= l.end(); ++i ) if( i->name() == name ){ addr = (*i).addr; break; return addr; list<employee>::const_iterator it = find_if(l.begin(), l.end(), bind(&employee::name,_1) == name); (Średnio) zaawansowane programowanie w ++ (ZPR) 43/45

44 Przykładowe zadania Zadanie 6 (Guru of The Week, 2), niepotrzebne obiekty string FindAddr( list<employee> l, string name ) { for( list<employee>::iterator i = l.begin(); i!= l.end(); i++ ) if( *i == name ) return (*i).addr; return ""; string FindAddr( const list<employee>& l, const string& name ) { string addr; for( list<employee>::iterator i = l.begin(); i!= l.end(); ++i ) if( i->name() == name ){ addr = (*i).addr; break; return addr; list<employee>::const_iterator it = find_if(l.begin(), l.end(), bind(&employee::name,_1) == name); auto it = find_if(l.begin(), l.end(), [&](Employee& e){ return e.name == name;); (Średnio) zaawansowane programowanie w ++ (ZPR) 44/45

45 Przykładowe zadania Dziękuję (Średnio) zaawansowane programowanie w ++ (ZPR) 45/45

( rednio) zaawansowane programowanie w C++ (ZPR)

( rednio) zaawansowane programowanie w C++ (ZPR) ( rednio) zaawansowane programowanie w C++ (ZPR) Wykªad 6 - ª czenie C++ i a, powtórzenie Robert Nowak 2015Z ( rednio) zaawansowane programowanie w C++ (ZPR) 1/46 Š czenie C i C++ C Kompilatory musz by

Bardziej szczegółowo

Zaawansowane programowanie w C++ (PCP)

Zaawansowane programowanie w C++ (PCP) Wykład 9 - powtórzenie. 11 maja 2007 Powtórzenie materiału obiekty automatyczne, statyczne, tymczasowe, dynamiczne dziedziczenie, agregacja polimorfizm, funkcje wirtualne wzorce projektowe (strukturalne,

Bardziej szczegółowo

Zaawansowane programowanie w C++ (PCP)

Zaawansowane programowanie w C++ (PCP) Zaawansowane programowanie w C++ (PCP) Wykład 4 - wzorce projektowe. dr inż. Robert Nowak - p. 1/18 Powtórzenie klasy autonomiczne tworzenie nowych typów: dziedziczenie i agregacja dziedziczenie: przedefiniowywanie

Bardziej szczegółowo

JĘZYK PYTHON - NARZĘDZIE DLA KAŻDEGO NAUKOWCA. Marcin Lewandowski [ ]

JĘZYK PYTHON - NARZĘDZIE DLA KAŻDEGO NAUKOWCA. Marcin Lewandowski [ ] JĘZYK PYTHON - NARZĘDZIE DLA KAŻDEGO NAUKOWCA Marcin Lewandowski [ mlew@ippt.gov.pl ] PYTHON 3 2 Int int jest obecnie odpowiednikiem dawnego long int nie ma wartości maksymalnej (sys.maxint) 2/4 == 0.5

Bardziej szczegółowo

PARADYGMATY PROGRAMOWANIA Wykład 4

PARADYGMATY PROGRAMOWANIA Wykład 4 PARADYGMATY PROGRAMOWANIA Wykład 4 Metody wirtualne i polimorfizm Metoda wirualna - metoda używana w identyczny sposób w całej hierarchii klas. Wybór funkcji, którą należy wykonać po wywołaniu metody wirtualnej

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

Zaawansowane programowanie w C++ (PCP)

Zaawansowane programowanie w C++ (PCP) Zaawansowane programowanie w C++ (PCP) Wykład 3 - polimorfizm. dr inż. Robert Nowak - p. 1/14 Powtórzenie Powtórzenie: klasy autonomiczne: konstruktor, konstruktor kopiujacy, operator przypisania, destruktor

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

Kurs rozszerzony języka Python

Kurs rozszerzony języka Python Wykład 1. 6 października 2017 Plan wykładu 1 2 3 4 Plan wykładu 1 2 3 4 Wykładowca: Termin wykładu: piątek, 10:15 12:00, sala 119 Strona wykładu http://www.ii.uni.wroc.pl/ marcinm/dyd/python Materiały

Bardziej szczegółowo

Spis treści. Wprowadzenie 15

Spis treści. Wprowadzenie 15 Spis treści Wprowadzenie 15 1. Mechanizmy języka C++ 19 1.1. Struktura programu jednostki translacji.................. 21 1.1.1. Składnia tekstu źródłowego...................... 22 1.1.2. Preprocesor...

Bardziej szczegółowo

Kurs rozszerzony języka Python

Kurs rozszerzony języka Python Wykład 2. 13 października 2017 Plan wykładu Klasy i obiekty 1 Klasy i obiekty 2 3 4 Plan wykładu Klasy i obiekty 1 Klasy i obiekty 2 3 4 Deklaracja klasy Klasy i obiekty Przykłady class Figura: Pierwsza

Bardziej szczegółowo

3. Biblioteka standardowa Pythona

3. Biblioteka standardowa Pythona Gdańsk, 2014 i plików tekstowych Użyteczne typy danych Biblioteka numeryczna Operacje systemowe i programowanie współbieżne Sieci Inne Standardowa biblioteka Pythona to ok. 200 modułów i ok. 100 podmodułów.

Bardziej szczegółowo

Obszar statyczny dane dostępne w dowolnym momencie podczas pracy programu (wprowadzone słowem kluczowym static),

Obszar statyczny dane dostępne w dowolnym momencie podczas pracy programu (wprowadzone słowem kluczowym static), Tworzenie obiektów Dostęp do obiektów jest realizowany przez referencje. Obiekty w języku Java są tworzone poprzez użycie słowa kluczowego new. String lan = new String( Lancuch ); Obszary pamięci w których

Bardziej szczegółowo

Python. Wprowadzenie. Jolanta Bachan

Python. Wprowadzenie. Jolanta Bachan Python Wprowadzenie Jolanta Bachan Zainstaluj i przetestuj Pythona https://www.python.org/downloads/ print 'Hello world!' operatory numeryczne: + - * / // % ** operatory porównania: ==!= > < >=

Bardziej szczegółowo

Programowanie 2. Język C++. Wykład 3.

Programowanie 2. Język C++. Wykład 3. 3.1 Programowanie zorientowane obiektowo... 1 3.2 Unie... 2 3.3 Struktury... 3 3.4 Klasy... 4 3.5 Elementy klasy... 5 3.6 Dostęp do elementów klasy... 7 3.7 Wskaźnik this... 10 3.1 Programowanie zorientowane

Bardziej szczegółowo

JAVA. Java jest wszechstronnym językiem programowania, zorientowanym. apletów oraz samodzielnych aplikacji.

JAVA. Java jest wszechstronnym językiem programowania, zorientowanym. apletów oraz samodzielnych aplikacji. JAVA Java jest wszechstronnym językiem programowania, zorientowanym obiektowo, dostarczającym możliwość uruchamiania apletów oraz samodzielnych aplikacji. Java nie jest typowym kompilatorem. Źródłowy kod

Bardziej szczegółowo

Zaawansowane programowanie w C++ (PCP)

Zaawansowane programowanie w C++ (PCP) Zaawansowane programowanie w C++ (PCP) Wykład 6 - szablony. dr inż. Robert Nowak - p. 1/15 Kolekcje i algorytmy» Deklaracja szablonu y Pojęcia niezależne od typu: kolekcje (np. listy) algorytmy (np. znajdowania

Bardziej szczegółowo

Przegląd języka Python. Łukasz Anwajler

Przegląd języka Python. Łukasz Anwajler Przegląd języka Python Łukasz Anwajler lukasz.anwajler@pjwstk.edu.pl Nie wierzcie mi na słowo Zaraz zobaczymy: czym jest Python dlaczego warto go używać jakie ma zastosowania gdzie z niego korzystają jakzacząć

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

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

JAVA W SUPER EXPRESOWEJ PIGUŁCE

JAVA W SUPER EXPRESOWEJ PIGUŁCE JAVA W SUPER EXPRESOWEJ PIGUŁCE Obiekt Obiekty programowe to zbiór własności i zachowań (zmiennych i metod). Podobnie jak w świecie rzeczywistym obiekty posiadają swój stan i zachowanie. Komunikat Wszystkie

Bardziej szczegółowo

Współczesne Narzędzia Obliczeniowe - Python

Współczesne Narzędzia Obliczeniowe - Python Współczesne Narzędzia Obliczeniowe - Python mgr. inż. M. Czubenko Politechnika Gdańska Wydział Elektroniki Telekomunikacji i Informatyki Katedra Systemów Decyzyjnych 7 maja 2012 Podstawy podstaw Co to

Bardziej szczegółowo

Metody getter https://www.python-course.eu/python3_object_oriented_programming.php 0_class http://interactivepython.org/runestone/static/pythonds/index.html https://www.cs.auckland.ac.nz/compsci105s1c/lectures/

Bardziej szczegółowo

Technologie cyfrowe semestr letni 2018/2019

Technologie cyfrowe semestr letni 2018/2019 Technologie cyfrowe semestr letni 2018/2019 Tomasz Kazimierczuk Wykład 8 (15.04.2019) Kompilacja Kompilacja programu (kodu): proces tłumaczenia kodu napisanego w wybranym języku na kod maszynowy, zrozumiały

Bardziej szczegółowo

Zaawansowane programowanie w C++ (PCP)

Zaawansowane programowanie w C++ (PCP) Zaawansowane programowanie w C++ (PCP) Wykład 5 - obsługa błędów. Mechanizm wyjatków. dr inż. Robert Nowak - p. 1/24 Powtórzenie - wzorce wzorce kreacyjne fabryka abstrakcyjna (abstract factory) prototyp

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 w Internecie. Java

Programowanie w Internecie. Java Programowanie w Internecie Java Autor: dr inż. Zofia Kruczkiewicz Literatura: L. Lemay, R. Cadenhead P. Naughton Krzysztof Barteczko Boone Barry Java 2 dla każdego Podręcznik Języka Programowania Java

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

Programowanie Obiektowe i C++

Programowanie Obiektowe i C++ Programowanie Obiektowe i C++ Marcin Benke Instytut Informatyki UW 6.11.2006 Marcin Benke (IIUW) Programowanie Obiektowe i C++ 6.11.2006 1 / 138 Operator przypisania Jest czym innym niż konstruktor kopiujacy!

Bardziej szczegółowo

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

Wykład VII. Programowanie. dr inż. Janusz Słupik. Gliwice, 2014. Wydział Matematyki Stosowanej Politechniki Śląskiej. c Copyright 2014 Janusz Słupik Wykład VII Wydział Matematyki Stosowanej Politechniki Śląskiej Gliwice, 2014 c Copyright 2014 Janusz Słupik Kompilacja Kompilator C program do tłumaczenia kodu źródłowego na język maszynowy. Preprocesor

Bardziej szczegółowo

Zaawansowany kurs języka Python

Zaawansowany kurs języka Python Wykład 1. 4 października 2013 Plan wykładu 1 2 3 4 Typy proste Kolekcje Instrukcje w języku (przypomnienie) Wykładowca: Termin wykładu: piątek, 10:15 12:00, sala 119 Strona wykładu http://www.ii.uni.wroc.pl/

Bardziej szczegółowo

Wyjątki. Wyjątki. Bogdan Kreczmer. Katedra Cybernetyki i Robotyki Politechnika Wrocławska

Wyjątki. Wyjątki. Bogdan Kreczmer. Katedra Cybernetyki i Robotyki Politechnika Wrocławska Bogdan Kreczmer bogdan.kreczmer@pwr.edu.pl Katedra Cybernetyki i Robotyki Politechnika Wrocławska Kurs: Copyright c 2018 Bogdan Kreczmer Niniejszy dokument zawiera materiały do wykładu dotyczącego programowania

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

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

1 Atrybuty i metody klasowe

1 Atrybuty i metody klasowe 1 Atrybuty i metody klasowe Składowe klasowe (statyczne) Każdy obiekt klasy posiada własny zestaw atrybutów. Metody używają atrybutów odpowiedniego obiektu. Czasem potrzeba atrybutów wspólnych dla wszystkich

Bardziej szczegółowo

Automatyczne tworzenie operatora = Integer2& operator=(const Integer& prawy) { zdefiniuje. Integer::operator=(ri);

Automatyczne tworzenie operatora = Integer2& operator=(const Integer& prawy) { zdefiniuje. Integer::operator=(ri); Przeciążanie operatorów [] Przykład: klasa reprezentująca typ tablicowy. Obiekt ma reprezentować tablicę, do której można się odwoływać intuicyjnie, np. Tab[i] Ma być też dostępnych kilka innych metod

Bardziej szczegółowo

Zaawansowany kurs języka Python

Zaawansowany kurs języka Python Wykład 4. 23 października 2015 Plan wykładu 1 2 Pliki tekstowe Trwałość obiektów CSV Strumienie Plan wykładu 1 2 Pliki tekstowe Trwałość obiektów CSV Strumienie Protokół iteracyjny Producent Umiem dostarczać

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

Wykład 1. Program przedmiotu. Programowanie Obiektowe (język C++) Literatura. Program przedmiotu c.d.:

Wykład 1. Program przedmiotu. Programowanie Obiektowe (język C++) Literatura. Program przedmiotu c.d.: Program przedmiotu Programowanie Obiektowe (język C++) Wykład 1. Definiowanie prostych klas. Przykłady. Przypomnienie: typy referencyjne, domyślne wartości argumentów, przeciąŝanie funkcji. Konstruktory,

Bardziej szczegółowo

Wykład 1. Program przedmiotu. Programowanie (język C++) Literatura. Program przedmiotu c.d.:

Wykład 1. Program przedmiotu. Programowanie (język C++) Literatura. Program przedmiotu c.d.: Program przedmiotu Programowanie (język C++) Wykład 1. Język C a C++. Definiowanie prostych klas. Typy referencyjne. Domyślne wartości argumentów. PrzeciąŜanie funkcji. Konstruktory, destruktory. Definiowanie

Bardziej szczegółowo

Zaawansowane programowanie w języku C++ Programowanie obiektowe

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

Bardziej szczegółowo

Kurs języka Python. Wykład 11. Marcin Młotkowski. 4 stycznia Kontrola poprawności podczas biegu programu. 2 Testowanie oprogramowania

Kurs języka Python. Wykład 11. Marcin Młotkowski. 4 stycznia Kontrola poprawności podczas biegu programu. 2 Testowanie oprogramowania Wykład 11. 4 stycznia 2010 1 Kontrola poprawności podczas biegu programu 2 3 4 Asercje Asercja to formuła logiczna; Asercji używa się do kontrolowania czy np. wartość zmiennej ma odpowiedni typ lub mieści

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

Programowanie 2. Język C++. Wykład 9.

Programowanie 2. Język C++. Wykład 9. 9.1 Ukrywanie metod, metody nadpisane... 1 9.2 Metody wirtualne, wirtualny destruktor... 2 9.3 Metody czysto wirtualne... 6 9.4 Klasy abstrakcyjne... 7 9.5 Wielodziedziczenie... 9 9.1 Ukrywanie metod,

Bardziej szczegółowo

Programowanie w języku C++

Programowanie w języku C++ Programowanie w języku C++ Część dziewiąta Autor Roman Simiński Kontakt 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

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

Język Python (3) Język Python (3) 1/35

Język Python (3) Język Python (3) 1/35 Język Python (3) Język Python (3) 1/35 Język Python (3) 2/35 Kod samotestujący Tworzenie def t e s t e r ( ) : p r i n t ( "Wywołanie funkcji testujacych..." ) i f n ame == main : t e s t e r ( ) Język

Bardziej szczegółowo

Wykład 8: klasy cz. 4

Wykład 8: klasy cz. 4 Programowanie obiektowe Wykład 8: klasy cz. 4 Dynamiczne tworzenie obiektów klas Składniki statyczne klas Konstruktor i destruktory c.d. 1 dr Artur Bartoszewski - Programowanie obiektowe, sem. 1I- WYKŁAD

Bardziej szczegółowo

TEMAT : KLASY DZIEDZICZENIE

TEMAT : KLASY DZIEDZICZENIE TEMAT : KLASY DZIEDZICZENIE Wprowadzenie do dziedziczenia w języku C++ Język C++ możliwa tworzenie nowej klasy (nazywanej klasą pochodną) w oparciu o pewną wcześniej zdefiniowaną klasę (nazywaną klasą

Bardziej szczegółowo

Programowanie obiektowe

Programowanie obiektowe Programowanie obiektowe Język programowania Ruby Marcin Młotkowski 12 kwietnia 2018 Plan wykładu 1 Wstęp 2 Typy numeryczne Łańcuchy znaków (klasa String) Przedziały Tablice i tablice asocjacyjne Nazwy

Bardziej szczegółowo

Programowanie obiektowe. Literatura: Autor: dr inŝ. Zofia Kruczkiewicz

Programowanie obiektowe. Literatura: Autor: dr inŝ. Zofia Kruczkiewicz Programowanie obiektowe Literatura: Autor: dr inŝ. Zofia Kruczkiewicz Java P. L. Lemay, Naughton R. Cadenhead Java Podręcznik 2 dla kaŝdego Języka Programowania Java Linki Krzysztof Boone oprogramowania

Bardziej szczegółowo

Wyjątki (exceptions)

Wyjątki (exceptions) Instrukcja laboratoryjna nr 6 Programowanie w języku C 2 (C++ poziom zaawansowany) Wyjątki (exceptions) dr inż. Jacek Wilk-Jakubowski mgr inż. Maciej Lasota dr inż. Tomasz Kaczmarek Wstęp Wyjątki (ang.

Bardziej szczegółowo

Język Python (2) Język Python (2) 1/36

Język Python (2) Język Python (2) 1/36 Język Python (2) Język Python (2) 1/36 Język Python (2) 2/36 Podstawy funkcji Pojęcia podstawowe Instrukcja def tworzy obiekt funkcji i przypisuje go do nazwy Instrukcja return przekazuje obiekt wynikowy

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

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

Programowanie 2. Język C++. Wykład 2.

Programowanie 2. Język C++. Wykład 2. 2.1 Definicja, deklaracja, wywołanie funkcji.... 1 2.2 Funkcje inline... 4 2.3 Przekazanie do argumentu funkcji wartości, adresu zmiennej.... 5 2.4 Wskaźniki do funkcji... 8 2.5 Przeładowanie funkcji...

Bardziej szczegółowo

Java Język programowania

Java Język programowania Java Język programowania Język Java Bazuje i jest zbliżony do C/C++ Porosty zbiór typów danych (podział na typy prymitywne i obiektowe) Zarządzanie pamięcią i Garbage Collection Zintegrowana synchronizacja

Bardziej szczegółowo

EGZAMIN 2 (14 WRZEŚNIA 2015) JĘZYK C++

EGZAMIN 2 (14 WRZEŚNIA 2015) JĘZYK C++ IMIĘ i NAZWISKO: przykładowe odpowiedzi NR: 0 EGZAMIN 2 (14 WRZEŚNIA 2015) JĘZYK C++ 1. Napisz precyzyjnie co to jest ptr jeśli: const * const Foo ptr; ptr to stały wskaźnik do stałego obiektu typu Foo

Bardziej szczegółowo

Programowanie obiektowe

Programowanie obiektowe Programowanie obiektowe Wykład 5 Marcin Młotkowski 23 marca 2017 Plan wykładu 1 2 3 4 5 Marcin Młotkowski Programowanie obiektowe 2 / 50 Historia Początkowe założenia Projekt OAK Sterowanie urządzeniami

Bardziej szczegółowo

Kurs programowania. Wykład 13. Wojciech Macyna. 14 czerwiec 2017

Kurs programowania. Wykład 13. Wojciech Macyna. 14 czerwiec 2017 Wykład 13 14 czerwiec 2017 Java vs cpp - podobieństwa Podobny sposób definiowania klas. Występowanie typów podstawowych: boolean, char, byte, short, int, long, float, double. Podobna zasada definiowania

Bardziej szczegółowo

Programowanie obiektowe, wykład nr 7. Przegląd typów strukturalnych - klasy i obiekty - c.d.

Programowanie obiektowe, wykład nr 7. Przegląd typów strukturalnych - klasy i obiekty - c.d. Dr hab. inż. Lucyna Leniowska, prof. UR, Zakład Mechatroniki, Automatyki i Optoelektroniki, IT Programowanie obiektowe, wykład nr 7 Przegląd typów strukturalnych - klasy i obiekty - c.d. Klasa - powtórzenie

Bardziej szczegółowo

Podstawy Programowania Obiektowego

Podstawy Programowania Obiektowego Podstawy Programowania Obiektowego Wprowadzenie do programowania obiektowego. Pojęcie struktury i klasy. Spotkanie 03 Dr inż. Dariusz JĘDRZEJCZYK Tematyka wykładu Idea programowania obiektowego Definicja

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

1. Które składowe klasa posiada zawsze, niezależnie od tego czy je zdefiniujemy, czy nie?

1. Które składowe klasa posiada zawsze, niezależnie od tego czy je zdefiniujemy, czy nie? 1. Które składowe klasa posiada zawsze, niezależnie od tego czy je zdefiniujemy, czy nie? a) konstruktor b) referencje c) destruktor d) typy 2. Które z poniższych wyrażeń są poprawne dla klasy o nazwie

Bardziej szczegółowo

Informatyka I. Klasy i obiekty. Podstawy programowania obiektowego. dr inż. Andrzej Czerepicki. Politechnika Warszawska Wydział Transportu 2018

Informatyka I. Klasy i obiekty. Podstawy programowania obiektowego. dr inż. Andrzej Czerepicki. Politechnika Warszawska Wydział Transportu 2018 Informatyka I Klasy i obiekty. Podstawy programowania obiektowego dr inż. Andrzej Czerepicki Politechnika Warszawska Wydział Transportu 2018 Plan wykładu Pojęcie klasy Deklaracja klasy Pola i metody klasy

Bardziej szczegółowo

Microsoft IT Academy kurs programowania

Microsoft IT Academy kurs programowania Microsoft IT Academy kurs programowania Podstawy języka C# Maciej Hawryluk Język C# Język zarządzany (managed language) Kompilacja do języka pośredniego (Intermediate Language) Kompilacja do kodu maszynowego

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

Programowanie obiektowe zastosowanie języka Java SE

Programowanie obiektowe zastosowanie języka Java SE Programowanie obiektowe zastosowanie języka Java SE Wstęp do programowania obiektowego w Javie Autor: dr inŝ. 1 Java? Java język programowania obiektowo zorientowany wysokiego poziomu platforma Javy z

Bardziej szczegółowo

Obsługa wyjątków. Język C++ WW12

Obsługa wyjątków. Język C++ WW12 Obsługa wyjątków Pozwala zarządzać błędami wykonania w uporządkowany sposób. Umożliwia automatyczne wywołanie części kodu, funkcji, metod klas, który trzeba wykonać przy powstaniu błędów. try //blok try

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

Automatyczne tworzenie operatora = Integer2& operator=(const Integer& prawy) {

Automatyczne tworzenie operatora = Integer2& operator=(const Integer& prawy) { Przeciążanie a dziedziczenie class Integer2: public Integer Operatory, z wyjątkiem operatora przypisania są automatycznie dziedziczone w klasach pochodnych. Integer2(int i): Integer(i) Automatyczne tworzenie

Bardziej szczegółowo

Swift (pol. jerzyk) nowy język programowania zaprezentowany latem 2014 r. (prace od 2010 r.)

Swift (pol. jerzyk) nowy język programowania zaprezentowany latem 2014 r. (prace od 2010 r.) Swift (pol. jerzyk) nowy język programowania zaprezentowany latem 2014 r. (prace od 2010 r.) przeznaczony do programowania zarówno pod ios jak i Mac OS X bazuje na logice Objective-C bez kompatybilności

Bardziej szczegółowo

Automatyczne tworzenie operatora = Integer2& operator=(const Integer& prawy) {

Automatyczne tworzenie operatora = Integer2& operator=(const Integer& prawy) { Przeciążanie operatorów [] Przykład: klasa reprezentująca typ tablicowy. Obiekt ma reprezentować tablicę, do której można się odwoływać intuicyjnie, np. Tab[i] Ma być też dostępnych kilka innych metod

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

Programowanie w C++ Wykład 14. Katarzyna Grzelak. 3 czerwca K.Grzelak (Wykład 14) Programowanie w C++ 1 / 27

Programowanie w C++ Wykład 14. Katarzyna Grzelak. 3 czerwca K.Grzelak (Wykład 14) Programowanie w C++ 1 / 27 Programowanie w C++ Wykład 14 Katarzyna Grzelak 3 czerwca 2019 K.Grzelak (Wykład 14) Programowanie w C++ 1 / 27 Na ostatnim wykładzie: Konstruktor standardowy (domyślny) to taki, który nie ma żadnych argumentów

Bardziej szczegółowo

Zaawansowane programowanie w C++ (PCP)

Zaawansowane programowanie w C++ (PCP) Wykład 7 - sprytne wskaźniki. 20 kwietnia 2007 Potrzeba współdzielenia kodu źródłowego Pojęcia niezależne od typu: kolekcje (np. listy) algorytmy (np. znajdowania największego elementu) Szablony mechanizm

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

EGZAMIN PROGRAMOWANIE II (10 czerwca 2010) pytania i odpowiedzi

EGZAMIN PROGRAMOWANIE II (10 czerwca 2010) pytania i odpowiedzi EGZAMIN PROGRAMOWANIE II (10 czerwca 2010) pytania i odpowiedzi 1. Napisz wskaźnik do funkcji fun tak zdeklarowanej: T* fun( int, double const& ) const; definicja wskaźnika musi być precyzyjna, inaczej

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 zaprojektowany jako rozszerzenie języka C o obiektowe mechanizmy abstrakcji danych jest to język pozwalający na programowanie zarówno proceduralne

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

Dziedziczenie jednobazowe, poliformizm

Dziedziczenie jednobazowe, poliformizm Dziedziczenie jednobazowe, poliformizm 1. Dziedziczenie jednobazowe 2. Polimorfizm część pierwsza 3. Polimorfizm część druga Zofia Kruczkiewicz, ETE8305_6 1 Dziedziczenie jednobazowe, poliformizm 1. Dziedziczenie

Bardziej szczegółowo

Kurs programowania. Wykład 3. Wojciech Macyna. 22 marca 2019

Kurs programowania. Wykład 3. Wojciech Macyna. 22 marca 2019 Wykład 3 22 marca 2019 Klasy wewnętrzne Klasa wewnętrzna class A {... class B {... }... } Klasa B jest klasa wewnętrzna w klasie A. Klasa A jest klasa otaczajac a klasy B. Klasy wewnętrzne Właściwości

Bardziej szczegółowo

Podstawy programowania obiektowego

Podstawy programowania obiektowego Podstawy programowania obiektowego Technologie internetowe Wykład 5 Program wykładu Podejście obiektowe kontra strukturalne do tworzenie programu Pojęcie klasy i obiektu Składowe klasy: pola i metody Tworzenie

Bardziej szczegółowo

Wykład. Materiały bazują częściowo na slajdach Marata Dukhana

Wykład. Materiały bazują częściowo na slajdach Marata Dukhana Wykład Materiały bazują częściowo na slajdach Marata Dukhana Języki programowania Kompilowane np. C, C++, Pascal Interpretowane np. JavaScript, PHP, Python, VBA Pośrednie np. Java, C# Znane kompilatory

Bardziej szczegółowo

Podczas dziedziczenia obiekt klasy pochodnej może być wskazywany przez wskaźnik typu klasy bazowej.

Podczas dziedziczenia obiekt klasy pochodnej może być wskazywany przez wskaźnik typu klasy bazowej. Polimorfizm jest filarem programowania obiektowego, nie tylko jeżeli chodzi o język C++. Daje on programiście dużą elastyczność podczas pisania programu. Polimorfizm jest ściśle związany z metodami wirtualnymi.

Bardziej szczegółowo

Programowanie obiektowe, wykład nr 6. Klasy i obiekty

Programowanie obiektowe, wykład nr 6. Klasy i obiekty Dr hab. inż. Lucyna Leniowska, prof. UR, Zakład Mechatroniki, Automatyki i Optoelektroniki, IT Programowanie obiektowe, wykład nr 6 Klasy i obiekty W programowaniu strukturalnym rozwój oprogramowania oparto

Bardziej szczegółowo

Python. Skąd taka nazwa? Kurs systemu UNIX 1

Python. Skąd taka nazwa? Kurs systemu UNIX 1 Python Skąd taka nazwa? Kurs systemu UNIX 1 Cechy języka marketing Obiektowy (dużo prostszy od C++) Darmowy Nie tylko Unix (choć tam najpopularniejszy) Wiele bibliotek (np. Tkinter, czyli interfejs do

Bardziej szczegółowo

Programowanie obiektowe

Programowanie obiektowe Programowanie obiektowe Literatura: Autor: dr inŝ. Zofia Kruczkiewicz Java P. L. Krzysztof Lemay, Naughton Barteczko R. Cadenhead JAVA, Java Podręcznik 2 wykłady dla kaŝdego Języka i ćwiczenia Programowania

Bardziej szczegółowo

Wprowadzenie do języka Java

Wprowadzenie do języka Java WSNHiD, Programowanie 2 Lab. 1 [ część 1 ] Wprowadzenie do języka Java Wprowadzenie Język programowania Java jest obiektowym językiem programowania. Powstał w 1995 i od tej pory był intensywnie rozwijany.

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

ATD. Wykład 8. Programowanie (język C++) abstrakcyjny typ danych. Abstrakcyjne typy danych (ATD) Metody czysto wirtualne. Definicje i uwagi:

ATD. Wykład 8. Programowanie (język C++) abstrakcyjny typ danych. Abstrakcyjne typy danych (ATD) Metody czysto wirtualne. Definicje i uwagi: Programowanie (język C++) Wykład 8. ATD abstrakcyjny typ danych Tomasz Marks - Wydział MiNI PW -1- Tomasz Marks - Wydział MiNI PW -2- Metody czysto wirtualne Metody czysto wirtualne otrzymujemy inicjalizując

Bardziej szczegółowo

Język C++ Programowanie obiektowe

Język C++ Programowanie obiektowe Język C++ Programowanie obiektowe Cechy programowania obiektowego abstrakcyjne typy danych hermetyczność obiektów (kapsułkowanie) dziedziczenie polimorfizm Programowanie proceduralne vs. programowanie

Bardziej szczegółowo

Programowanie współbieżne Wykład 8 Podstawy programowania obiektowego. Iwona Kochaoska

Programowanie współbieżne Wykład 8 Podstawy programowania obiektowego. Iwona Kochaoska Programowanie współbieżne Wykład 8 Podstawy programowania obiektowego Iwona Kochaoska Programowanie Obiektowe Programowanie obiektowe (ang. object-oriented programming) - metodyka tworzenia programów komputerowych,

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

Zaawansowane programowanie w C++ (PCP)

Zaawansowane programowanie w C++ (PCP) Zaawansowane programowanie w C++ (PCP) Wykład 1 - sprawy organizacyjne i wprowadzenie. dr inż. Robert Nowak - p. 1/27 Cel i zakres przedmiotu Umiejętność programowania to umiejętność rozwiazania problemów

Bardziej szczegółowo

Programowanie obiektowe - 1.

Programowanie obiektowe - 1. Programowanie obiektowe - 1 Mariusz.Masewicz@cs.put.poznan.pl Programowanie obiektowe Programowanie obiektowe (ang. object-oriented programming) to metodologia tworzenia programów komputerowych, która

Bardziej szczegółowo

Wykład 7: Pakiety i Interfejsy

Wykład 7: Pakiety i Interfejsy Wykład 7: Pakiety i Interfejsy Plik Źródłowy w Javie Składa się z: instrukcji pakietu (pojedyncza, opcjonalna) instrukcji importujących (wielokrotne, opcjonalne) deklaracji klasy publicznej (pojedyncza,

Bardziej szczegółowo

Podstawy otwartych języków programowania Przechowywanie danych

Podstawy otwartych języków programowania Przechowywanie danych Podstawy otwartych języków programowania Przechowywanie danych Wiktor Wandachowicz Sposoby przechowywania danych Typy podstawowe Pojedyncze obiekty Tablice obiektów i tablice typów podstawowych jednowymiarowe

Bardziej szczegółowo

Języki i metody programowania Java. Wykład 2 (część 2)

Języki i metody programowania Java. Wykład 2 (część 2) Języki i metody programowania Java INF302W Wykład 2 (część 2) Autor Dr inż. Zofia Kruczkiewicz 1 Struktura wykładu 1. Identyfikacja danych reprezentowanych przez klasy podczas opracowania koncepcji prostego

Bardziej szczegółowo

Języki i metodyka programowania. Język C# pętle, sterowanie, wyjątki

Języki i metodyka programowania. Język C# pętle, sterowanie, wyjątki Język C# pętle, sterowanie, wyjątki Język C# pętle Pętle: while ( ) do { while ( ); for ( ; ; ) foreach ( in

Bardziej szczegółowo