( rednio)zaawansowane programowanie w C++



Podobne dokumenty
(Średnio)zaawansowane programowanie w C++

Zaawansowane programowanie w C++ (PCP)

Spis treści 1. Wstęp 2. Projektowanie systemów informatycznych

Zaawansowane programowanie w C++ (PCP)

Technologie internetowe Internet technologies Forma studiów: Stacjonarne Poziom kwalifikacji: I stopnia. Liczba godzin/tydzień: 2W, 2L

Stacjonarne Wszystkie Katedra Inżynierii Produkcji dr Sławomir Luściński. Kierunkowy Nieobowiązkowy Polski Semestr trzeci. Semestr zimowy Brak Tak

Singleton. Cel: Przykład: Zastosowanie: Zapewnienie, że klasa ma tylko jedną instancję i dostarczenie globalnego dostępu do niej.

Wykład 8: klasy cz. 4

Programowanie w internecie nazwa przedmiotu SYLABUS A. Informacje ogólne

Praca Dyplomowa Magisterska

Zagadnienia programowania obiektowego

Politechnika Krakowska im. Tadeusza Kościuszki. Karta przedmiotu. obowiązuje w roku akademickim 2012/2013. Przedmioty kierunkowe

Wzorce projektowe strukturalne cz. 1

Politechnika Krakowska im. Tadeusza Kościuszki. Karta przedmiotu. obowiązuje studentów rozpoczynających studia w roku akademickim 2012/2013

Projekt konceptualny z Baz Danych "Centralny system zarz dzania salami na AGH"

Stacjonarne Wszystkie Katedra Informatyki Stosowanej dr inż. Krzysztof Strzałkowski. Kierunkowy Nieobowiązkowy Polski Semestr piaty

Program współbieżny jest zbiorem sekwencyjnych PROGRAMOWANIE C++

Projekt przejściowy 2015/2016 BARTOSZ JABŁOŃSKI, TOMASZ JANICZEK

Dobre praktyki w zakresie zarządzania ładem architektury korporacyjnej

Programowanie Zespołowe

Biorąc udział w projekcie, możesz wybrać jedną z 8 bezpłatnych ścieżek egzaminacyjnych:

Wykwalifikowani LOGISTYCY. podejmą zatrudnienie

Podstawy programowania obiektowego

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

Wykład Ćwiczenia Laboratorium Projekt Seminarium

I. KARTA PRZEDMIOTU CEL PRZEDMIOTU

Programowanie i struktury danych. Wykład 4 Dr Piotr Cybula

Programowanie obiektowe

Metody numeryczne i statystyka dla in»ynierów

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

WYMAGANIA EDUKACYJNE I KRYTERIA OCENIANIA Z PRZEDMIOTU PROGRAMOWANIE APLIKACJI INTERNETOWYCH

Opteamum korzyści. Aktualnie poszukujemy kandydatów na stanowisko: Programista ASP.NET MVC / WCF Nr ref. PROGRAMISTA ASP.NET/DRP/2014.

Wzorce projektowe kreacyjne

Zaawansowane programowanie w języku C++

Język JAVA podstawy. wykład 1, część 1. Jacek Rumiński. Politechnika Gdańska, Inżynieria Biomedyczna

Dziedziczenie : Dziedziczenie to nic innego jak definiowanie nowych klas w oparciu o już istniejące.

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

1. Wprowadzenie do C/C++

OGŁOSZENIE O ZAMÓWIENIU - usługi

WYKŁAD. Jednostka prowadząca: Wydział Techniczny. Kierunek studiów: Elektronika i telekomunikacja. Nazwa przedmiotu: Język programowania C++

Zaawansowane programowanie w C++ (PCP)

Projekt ATENA - system wspomagaj cy zarz dzanie szkoª lub zespoªem szkóª przedlicealnych

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

Wykład 5: Klasy cz. 3

Wprowadzenie. Narzędzia i środowiska programistyczne. Laboratorium 1. Prowadzący: Kierunek: Semestr: Rok: Tomasz Gądek Informatyka Zimowy 2

Laboratorium 1 Temat: Przygotowanie środowiska programistycznego. Poznanie edytora. Kompilacja i uruchomienie prostych programów przykładowych.

EKONOMETRIA II SYLABUS A. Informacje ogólne

Optymalizacja R dlaczego warto przesi ± si na Linuxa?

OPIS PRZEDMIOTU. Podstawy edukacji matematycznej. Wydzia Pedagogiki i Psychologii

System kontroli wersji SVN

Pola i metody statyczne. Klasy zawierające pola i metody statyczne

Szablony funkcji i klas (templates)

Wykład V. Rzut okiem na języki programowania. Studia Podyplomowe INFORMATYKA Podstawy Informatyki

Zaawansowane programowanie w C++ (PCP)

Rok akademicki: 2012/2013 Kod: IET SW-s Punkty ECTS: 3. Kierunek: Elektronika i Telekomunikacja Specjalność: Systemy wbudowane

PRZEWODNIK PO PRZEDMIOCIE

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

Pierwsze kroki. Algorytmy, niektóre zasady programowania, kompilacja, pierwszy program i jego struktura

PLAN WYNIKOWY PROGRAMOWANIE APLIKACJI INTERNETOWYCH. KL III TI 4 godziny tygodniowo (4x30 tygodni =120 godzin ),

I. KARTA PRZEDMIOTU CEL PRZEDMIOTU

Numer obszaru: 4 Technologie informacyjno-komunikacyjne w realizacji podstawy programowej

Wzorce projektowe i refaktoryzacja


Konfiguracja historii plików

Wartości domyślne, szablony funkcji i klas

Produktywne tworzenie aplikacji webowych z wykorzystaniem Groovy i

Laboratorium nr 12. Temat: Struktury, klasy. Zakres laboratorium:

I. KARTA PRZEDMIOTU CEL PRZEDMIOTU

WSTĘP DO PROGRAMOWANIA

Dzisiejszy wykład. Wzorce projektowe. Visitor Client-Server Factory Singleton

WYNIKI EGZAMINU MATURALNEGO W 2009 ROKU

Praca badawcza. Zasady metodologiczne ankietowego badania mobilności komunikacyjnej ludności

Podstawy programowania. Wprowadzenie

1. Wprowadzenie do C/C++

PROE wykład 1. dr inż. Jacek Naruniec

Przedszkole nr 5 im. JASIA i MAŁGOSI w Wałczu

Programowanie komputerów

KARTA KURSU. Programowanie obiektowe

Karta przedmiotu. obowiązuje studentów rozpoczynających studia w roku akademickim 2013/2014. Forma studiów: Stacjonarne Kod kierunku: 11.

KARTA PRZEDMIOTU. Forma prowadzenia zajęć

Programowanie obiektowe. Dr hab. Inż. Marta Gładysiewicz-Kudrawiec Pokój 229 A1 Operatory new delete pliki-odczyt

Języki i paradygmaty programowania - 1

Rok akademicki: 2014/2015 Kod: IEL s Punkty ECTS: 5. Poziom studiów: Studia I stopnia Forma i tryb studiów: -

Zaawansowane programowanie w języku C++ Funkcje uogólnione - wzorce

Nazwa przedmiotu: PODSTAWY TEORII ZBIORÓW ROZMYTYCH I ARYTMETYKI PRZEDZIAŁOWEJ Foundations of fuzzy set theory and interval arithmetic Kierunek:

Zaawansowane programowanie w C++ (PCP)

Technologie obiektowe

Instrukcja do pracowni specjalistycznej z przedmiotu. Obiektowe programowanie aplikacji

Języki i paradygmaty programowania

Języki i paradygmaty programowania doc. dr inż. Tadeusz Jeleniewski

PROE wykład 1. dr inż. Jacek Naruniec

Projekt przejściowy 2016/2017 BARTOSZ JABŁOŃSKI

Politechnika Krakowska im. Tadeusza Kościuszki. Karta przedmiotu. obowiązuje studentów rozpoczynających studia w roku akademickim 2013/2014

Programowanie obiektowe - 1.

PROGRAMOWANIE OBIEKTOWE W C++ - cz 1. Definicja klasy, składniki klasy, prawa dost pu, definiowanie funkcji składowych, konstruktory i destruktory.

Karta przedmiotu. obowiązuje studentów rozpoczynających studia w roku akademickim 2014/2015. Forma studiów: Stacjonarne Kod kierunku: 11.

przewidywania zapotrzebowania na moc elektryczn

Java - wprowadzenie. Programowanie Obiektowe Mateusz Cicheński

Załącznik Nr 5 do Zarz. Nr 33/11/12 KARTA PRZEDMIOTU. 2. Kod przedmiotu 3. ZOH1-7

Transkrypt:

( rednio)zaawansowane programowanie w C++ Wykªad 1 - wst p Robert Nowak 2015Z ( rednio)zaawansowane programowanie w C++ 1/36

Programowanie Programowanie umiej tno± zapisu algorytmów w danym j zyku programowania umiej tno± rozwi zywania problemów umiej tno± rozwi zania problemów przy pomocy komputera Czy problem mo»e by rozwi zany przez komputer? Czy problem powinien by rozwi zany przez komputer? ( rednio)zaawansowane programowanie w C++ 2/36

Cel i zakres przedmiotu zapoznanie sªuchaczy z zagadnieniami tworzenia oprogramowania efektywne wykorzystanie j zyka C++ wspóªcze±nie stosowane techniki i biblioteki wykorzystywanie ró»nych j zyków programowania w tej samej aplikacji, na przykªadzie C++ i Pythona Zakªadana znajomo± : programowania strukturalnego i obiektowego j zyka C++ ( rednio)zaawansowane programowanie w C++ 3/36

Podstawowe dane o przedmiocie Miejsce spotka«: (±roda 18 15 20 00 ), sala 04B Prowadz cy: dr hab. in». Robert Nowak Zakªad Sztucznej Inteligencji, ISE e-mail: r.m.nowak@elka.pw.edu.pl Konsultacje: ±rody 13 15 pok. 227 Strona przedmiotu: http://studia.elka.pw.edu.pl/pub/zpr.a http://staff.elka.pw.edu.pl/ rnowak2/zpr2015z ( rednio)zaawansowane programowanie w C++ 4/36

Tematyka wykªadów Programowanie obiektowe w C++, wzorce projektowe Obsªuga bª dów, mechanizm wyj tków, sprytne wska¹niki Aplikacje wspóªbie»ne (wielow tkowe), synchronizacja Szablony, programowanie generyczne Biblioteka standardowa Rozszerzenia biblioteki standardowej - boost ( rednio)zaawansowane programowanie w C++ 5/36

Literatura Wst p Gamma et al.,, WNT, 2005. Alexandrescu, Nowoczesne projektowanie w C++, 2005. Alexandrescu, Sutter, Jezyk C++. Standardy kodowania. 101 zasad, wytycznych i zalecanych praktyk, Helion, 2005. Meyers,50 efektywnych sposobów na udoskonalenie Twoich programów, Helion, 2003. Stroustrup,Programowanie. Teoria i praktyka z wykorzystaniem C++, Helion 2010. Nowak, Paj k,j zyk C++:mechanizmy, wzorce, biblioteki, BTC, 2010. Hunt, Thomas,Pragmatyczny programista, Helion, 2011 literatura po angielsku: http://www.drdobbs.com/cpp/c-reading-list/240155654 ( rednio)zaawansowane programowanie w C++ 6/36

Zaliczenie przedmiotu Wst p kolokwium I (7 wykªad) kolokwium II (14 wykªad) projekt zadanie dodatkowe 0 25pkt 0 25pkt 0 50pkt 0 10pkt Projekt: propozycje tematów ustalenie skªadu zespoªów, przydziaª zada«dokumentacja wst pna (max. 3 strony A4) oddanie szkieletu aplikacji dostarczenie implementacji i dokumentacji ostateczny termin oddania projektu 1 Zadanie dodatkowe (nieobowi zkowe) rezerwacja zadania termin oddania 1 po tym terminie projekty nie b d przyjmowane >= 90 pkt. ocena 5 80 89 pkt. ocena 4 1 2 70 79 pkt. ocena 4 60 69 pkt. ocena 3 1 2 50 59 pkt. ocena 3 < 50 pkt. ocena 2 13 pa¹dziernika 20 pa¹dziernika 27 pa¹dziernika 1 grudnia 20 stycznia 26 stycznia 1 grudnia 15 stycznia ( rednio)zaawansowane programowanie w C++ 7/36

Wymaganie oprogramowanie kompilatory: the GNU Compiler Collection 4.9 Microsoft Visual Studio 2013 lub 2015 biblioteki: inne: stl boost - http://www.boost.org repozytorium (np. mercurial) edytor tekstu (np. emacs) debugger (np. gdb) narz dzie do automatycznej kompilacji (np. SCons) narz dzie do generowania dokumentacji (np. doxygen) optymalizacja kodu, proler (np. gprof) ( rednio)zaawansowane programowanie w C++ 8/36

Podstawowe zasady dobrego stylu programowania ( rednio)zaawansowane programowanie w C++ 9/36

Czytelny kod KISS (Keep It Simple Software) prosty projekt pojedyncza odpowiedzialno± przedkªada si czytelno± kodu nad jego optymalno± Standardy kodowania: pliki ¹ródªowe, nazewnictwo, formatowanie kodu ¹ródªowego, stosowa konsekwentnie ten sam styl kodowania. ( rednio)zaawansowane programowanie w C++ 10/36

Stosowanie narz dzi Wst p Wykrywanie bª dów w programach Wykorzystywa kompilator. Zawsze doprowadzi do czystej kompilacji (bez»adnych ostrze»e«) na najwy»szym poziomie. Rozumie ka»de ostrze»enie. Zarz dzanie kodami ¹ródªowymi (stosowanie repozytorium) Systemy do automatycznej kompilacji Optymalizacja oprogramowania nie optymalizowa je»eli nie ma takiej potrzeby skupi si na zªo»ono±ci obliczeniowej ( O(.) ) u»ywa narz dzi (proler) do wykrywania czasochªonnych fragmentów kodu ( rednio)zaawansowane programowanie w C++ 11/36

Pewne fakty zwi zane z tworzeniem oprogramowania Najcz stsze przyczyny niepowodzenia projektu: niestabilne wymagania optymistyczna estymacja kosztów (gªównie czasu) realizacji projektów niska jako± oprogramowania R. Glass, Frequently Forgotten Facts about Software Engineering, 2001 ( rednio)zaawansowane programowanie w C++ 12/36

Jako± w tworzeniu programowania ( rednio)zaawansowane programowanie w C++ 13/36

Prostota obsªugi oprogramowania http://lightsquid.sourceforge.net ( rednio)zaawansowane programowanie w C++ 14/36

Po co prowadzi si projekty zespoªowe na studiach Graka z endlessorigami.com ( rednio)zaawansowane programowanie w C++ 15/36

Popularno± j zyków programowania ( rednio)zaawansowane programowanie w C++ 16/36

Wybór odpowiedniego j zyka programowania Miara popularno±ci: liczba linii kodu napisanych w danym j zyku (w oprogramowaniu które jest obecnie wykorzystywane) liczba odwoªa«do stron opisuj cych dany j zyk / liczba sprzedanych ksi»ek opisuj cych dany j zyk liczba ofert pracy dla programistów danego j zyka programowania Wszelkie miary s przybli»one, poniewa»: nie uwzgl dnia komercyjnego (przemysªowego) kodu ¹ródªowego liczba odwoªa«do opisu j zyka mo»e ±wiadczy o jego zªo»ono±ci (a nie tylko popularno±ci) mo»e oznacza mobilno± programistów ( rednio)zaawansowane programowanie w C++ 17/36

Liczba linii dla wybranych projektów nazwa LOC 2 j zyki programowania Linux Kernel 12M C(11M) Assembler (250k) MySql 12.5M C++(7.1M) C(3.8M) Firefox 9M C++(3.7M) C(1.8M) JavaScript (1.4M) Próba oszacowania wielko±ci oprogramowania biznesowe (Gartner Group, 1997): 310 10 9 LOC (COBOL 60%) szacunki 2008 rok: 10 10 12 LOC Open Source, 2008 rok: 1.2 10 9 LOC 2 Lines of Code, http://www.ohloh.net ( rednio)zaawansowane programowanie w C++ 18/36

Oprogramowanie Open Source przy podziale na j zyki sourceforge (2007) Google code (2012) ( rednio)zaawansowane programowanie w C++ 19/36

Zliczanie trae«dla stron internetowych (www.tiobe.com) ( rednio)zaawansowane programowanie w C++ 20/36

Oferty pracy http://www.itjobswatch.co.uk Java C# C++ Python Java Script SQL ( rednio)zaawansowane programowanie w C++ 21/36

Ankiety w±ród pracodawców http://blog.codeeval.com ( rednio)zaawansowane programowanie w C++ 22/36

Wydajno± shootout.alioth.debian.org Java kontra C++ (GNU g++) Python kontra C++ x64 Ubuntu, Intel Q6600 (quad-core) ( rednio)zaawansowane programowanie w C++ 23/36

Zmiana akcentów w tworzeniu programowania Programi±ci w ci gu ostatnich 2 lat zaczeli masowo u»ywa wi cej ni» jednego j zyka programowania jednocze±nie a a The Quiet Revolution in Programming, By Andrew Binstock, April 03, 2013, Dr.Dobb's Journal 2010 2012 ( rednio)zaawansowane programowanie w C++ 24/36

Zalety i wady j zyka C++ + standard j zyka jest tworzony przez organizacj standaryzacyjn ANSI/ISO (nie przez rm ) - nieco przestarzaªy standard (ale obecnie C++11, C++14) + j zyk kompilowany do kodu maszynowego, mo»liwo± tworzenia bardzo wydajnych aplikacji + wspiera wiele paradygmatów: programowanie strukturalne, obiektowe, generyczne - zªo»ony, wiele poprawnych konstrukcji do rozwi zywania tego samego problemu + du»a popularno±, dost pno± wielu narz dzi dla wielu platform (w tym wbudowanych) + du»a stabilno± - uboga biblioteka standardowa ( rednio)zaawansowane programowanie w C++ 25/36

J zyki programowania Wst p Kompromis: jednoznaczny (komputer) poj cia bliskie programi±cie (czªowiek) Translacja: tªumaczenie z postaci ¹ródªowej (zrozumiaªa dla czªowieka) do wynikowej (zrozumiaªa dla komputera) kompilacja interpretacja Teza nie istnieje jeden, najlepszy j zyk programowania stosowanie zawsze jednego j zyka programowania - niezbyt wyranowane rozwi zania ( rednio)zaawansowane programowanie w C++ 26/36

Potrzeba u»ycia ró»nych j zyków w aplikacjach 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. konguracja) ( rednio)zaawansowane programowanie w C++ 27/36

Singleton standardowe rozwi zania cz sto pojawiaj cych si problemów projektowych sprawdzone w praktyce najcz ±ciej dotycz programowania obiektowego znajomo± wzorców projektowych pozwala lepiej zrozumie obiektowe podej±cie do programowania ( rednio)zaawansowane programowanie w C++ 28/36

Singleton Wzorzec singletona Obiekt globalny (problemy): inicjacja jedna kopia w programie class Singleton { public: static Singleton* getinstance() { //Dost p do obiektu if(!pinstance_) pinstance_ = new Singleton; return pinstance_; } private: Singleton(); //Prywatny konstruktor Singleton(const Singleton&) = delete; //zabroniony, C++11 Singleton& operator=(const Singleton&) = delete; //zabroniony, C++11 static Singleton* pinstance_; }; //w pliku.cpp Singleton* Singleton::pInstance_ = nullptr; ( rednio)zaawansowane programowanie w C++ 29/36

Singleton Wzorzec singletona w C++ (Meyers) class Singleton { public: static Singleton& getinstance(); //nie mo»na usun /* pozostaªe metody */ private: Singleton(); Singleton(const Singleton&) = delete; Singleton& operator=(const Singleton&) = delete; /* skªadowe */ }; //lepiej implementacj przenie± do pliku.cpp //metoda inline w msvc mo»e generowa wiele instancji Singleton& Singleton::getInstance() { static Singleton instance; //lokalna zmienna statyczna return instance; } Wykorzystuje kod generowany przez kompilator: inicjuj cy i niszcz cy lokalne obiekty statyczne ( rednio)zaawansowane programowanie w C++ 30/36

Singleton i wiele w tków Singleton Singleton& Singleton::getInstance() { //1 if(!pinstance_) //2 pinstance_ = new Singleton; //3 return *pinstance_; //4 } //5 ( rednio)zaawansowane programowanie w C++ 31/36

Mutex Wst p Singleton Mutex(Mutual Exclusive) obiekt synchronizuj cy (dost p ma tylko jeden w tek w danym momencie) mutex.lock(); //Sekcja krytyczna mutex.unlock(); struct Lock { //Klasa pomocnicza Lock(Mutex& m) : m_(m) { m_.lock(); } ~Lock() { m_.unlock(); } //Destruktor wychodzi z sekcji Mutex& m_; //Mutex, którym zarz dza }; ( rednio)zaawansowane programowanie w C++ 32/36

Singleton wspóªbie»ny Wst p Singleton //Singleton poprawny, ale nieefektywny Singleton& Singleton::getInstance() { Lock guard(mutex_);//teraz tworzenie w sekcji krytycznej if(!pinstance_) pinstance_ = new Singleton; return pinstance_; } //Singleton wielow tkowy efektywny Singleton& Singleton::getInstance() { if(!pinstance_) { Lock guard(mutex_);//teraz tworzenie w sekcji krytycznej if(!pinstance_) pinstance_ = new Singleton; } return *pinstance_; } ( rednio)zaawansowane programowanie w C++ 33/36

Singleton Singleton DCLP (Double checked locking pattern) Singleton& Singleton::getInstance() { if(!pinstance_) { Lock guard(mutex_); if(!pinstance_) pinstance_ = new Singleton; } return *pinstance_; } mo»e by niepoprawny (brak 'sequence point') próby poprawy mog by nieskuteczne dodatkowe instrukcje (wstawianie 'sequence point') oznaczanie obiektów jako zmienne (volatile) dziaªa w praktyce Wniosek singletony inicjowa w tym samym w tku (start aplikacji) ( rednio)zaawansowane programowanie w C++ 34/36

Singleton zalecenia ko«cowe Czyta kod innych. Programowa. ( rednio)zaawansowane programowanie w C++ 35/36

Singleton Dzi kuj ( rednio)zaawansowane programowanie w C++ 36/36