(Średnio)zaawansowane programowanie w C++

Podobne dokumenty
( rednio)zaawansowane programowanie w C++

Zaawansowane programowanie w C++ (PCP)

Zaawansowane programowanie w C++ (PCP)

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

Zaawansowane programowanie w języku C++

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

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

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

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

Wykład 8: klasy cz. 4

Wykład Ćwiczenia Laboratorium Projekt Seminarium

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

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

PROGRAMOWANIE WSPÓŁCZESNYCH ARCHITEKTUR KOMPUTEROWYCH DR INŻ. KRZYSZTOF ROJEK

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

PRZEWODNIK PO PRZEDMIOCIE

KARTA KURSU. Programowanie obiektowe

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

Podstawy programowania obiektowego

Programowanie komputerów

Praktyczne zastosowanie bibliotek Boost oraz nowego standardu C++11

Technologie obiektowe

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

Zaawansowane programowanie w C++ (PCP)

PRZEWODNIK PO PRZEDMIOCIE

Podstawy Programowania

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

Programowanie Strukturalne i Obiektowe Słownik podstawowych pojęć 1 z 5 Opracował Jan T. Biernat

Historia modeli programowania

Podstawy programowania

Programowanie obiektowe

Java - wprowadzenie. Programowanie Obiektowe Mateusz Cicheński

Technologie informacyjne - wykład 12 -

Podstawy programowania wykład

INFORMATYKA, TECHNOLOGIA INFORMACYJNA ORAZ INFORMATYKA W LOGISTYCE

Szablony funkcji i szablony klas

I. KARTA PRZEDMIOTU CEL PRZEDMIOTU

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

INŻYNIERIA OPROGRAMOWANIA

Podstawy programowania.

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

Produktywne tworzenie aplikacji webowych z wykorzystaniem Groovy i

Tworzenie oprogramowania

Zaawansowane programowanie w C++ (PCP)

Programowanie obiektowe

Języki i paradygmaty programowania - 1

Tematy seminariów wg Roger S. Pressman, Praktyczne podejście do oprogramowania, WNT, Zofia Kruczkiewicz

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

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

Wprowadzenie. Organizacja pracy i środowisko programistyczne. Mirosław Ochodek

Kierunek: Informatyka Poziom studiów: Studia I stopnia Forma i tryb studiów: Stacjonarne. Wykład Ćwiczenia

Opisy efektów kształcenia dla modułu

PRZEWODNIK PO PRZEDMIOCIE

Programowanie obiektowe W1 Wprowadzenie. Dr hab. inż. Lucyna Leniowska, prof. UR Zakład Mechatroniki, Automatyki i Optoelektroniki

Efekt kształcenia. Ma uporządkowaną, podbudowaną teoretycznie wiedzę ogólną w zakresie algorytmów i ich złożoności obliczeniowej.

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

I. KARTA PRZEDMIOTU CEL PRZEDMIOTU

Szablony funkcji i klas (templates)

Inżynieria oprogramowania - opis przedmiotu

Java EE produkcja oprogramowania

Elektrotechnika I stopień (I stopień / II stopień) Ogólno akademicki (ogólno akademicki / praktyczny) Kierunkowy (podstawowy / kierunkowy / inny HES)

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

Kierunek: Informatyka Poziom studiów: Studia I stopnia Forma studiów: Stacjonarne. audytoryjne. Wykład Ćwiczenia

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

Języki i paradygmaty programowania

Efekty kształcenia dla kierunku studiów INFORMATYKA, Absolwent studiów I stopnia kierunku Informatyka WIEDZA

Czym jest Java? Rozumiana jako środowisko do uruchamiania programów Platforma software owa


Paostwowa Wyższa Szkoła Zawodowa w Płocku Dariusz Wardowski

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

Rok akademicki: 2012/2013 Kod: ZIE s Punkty ECTS: 3. Poziom studiów: Studia I stopnia Forma i tryb studiów: -

Nazwa przedmiotu: MODELOWANIE I ANALIZA SYSTEMÓW INFORMATYCZNYCH. Modeling and analysis of computer systems Forma studiów: Stacjonarne

Programowanie w C. dr inż. Stanisław Wszelak

Spis treści. Wprowadzenie 15

Programowanie obiektowe - 1.

Wzorce projektowe i refaktoryzacja

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

Informatyka I stopień (I stopień / II stopień) Ogólnoakademicki (ogólno akademicki / praktyczny) stacjonarne (stacjonarne / niestacjonarne)

Inżynieria oprogramowania (Software Engineering) Wykład 1

PRYWATNA WYŻSZA SZKOŁA BUSINESSU, ADMINISTRACJI I TECHNIK KOMPUTEROWYCH S Y L A B U S

Zaawansowane programowanie w C++ (PCP)

PRZEWODNIK PO PRZEDMIOCIE

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

Wykwalifikowani LOGISTYCY. podejmą zatrudnienie

Ćwiczenia laboratoryjne. Ćwiczenia projektowe (W) (Ć) (L) (P) (S) (T) IV

Zagadnienia egzaminacyjne INFORMATYKA. Stacjonarne. I-go stopnia. (INT) Inżynieria internetowa STOPIEŃ STUDIÓW TYP STUDIÓW SPECJALNOŚĆ

PRZEWODNIK PO PRZEDMIOCIE

Podstawy programowania. Wprowadzenie

Grzegorz Ruciński. Warszawska Wyższa Szkoła Informatyki Promotor dr inż. Paweł Figat

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

Imię, nazwisko i tytuł/stopień KOORDYNATORA (-ÓW) kursu/przedmiotu zatwierdzającego protokoły w systemie USOS Dr Adam Naumowicz

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

Zagadnienia egzaminacyjne INFORMATYKA. stacjonarne. I-go stopnia. (INT) Inżynieria internetowa STOPIEŃ STUDIÓW TYP STUDIÓW SPECJALNOŚĆ

Wykład 1 Inżynieria Oprogramowania

Instrukcja do pracowni specjalistycznej z przedmiotu. Obiektowe programowanie aplikacji

PLAN WYNIKOWY PROGRAMOWANIE APLIKACJI INTERNETOWYCH. KL IV TI 6 godziny tygodniowo (6x15 tygodni =90 godzin ),

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

E-1IZ3-06-s6. Inżynieria Programowania. Informatyka. I stopień (I stopień / II stopień) ogólnoakademicki (ogólno akademicki / praktyczny)

I. KARTA PRZEDMIOTU CEL PRZEDMIOTU

Scala - programowanie obiektowo-funkcyjne

Transkrypt:

(Średnio)zaawansowane programowanie w C++ Wykład 1 - wstęp Robert Nowak 2019L (Ś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ń: (wtorek 18 15 20 00 ), sala 162 Prowadzący: dr hab. inż. Robert Nowak Zakład Sztucznej Inteligencji, Instytut Informatyki e-mail: r.m.nowak@elka.pw.edu.pl Konsultacje: wtorek 17 18, środy 11 12 pok. 23 Strona przedmiotu: http://studia.elka.pw.edu.pl/pub/zpr.a http://staff.elka.pw.edu.pl/ rnowak2/zpr2019l (Ś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 Gamma et al.,, WNT, 2005. Alexandrescu, Nowoczesne projektowanie w C++, 2005. Alexandrescu, Sutter, Jȩzyk 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 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 28 lutego 11 i 13 marca 1 kwietnia 1 maja 7 czerwca 11 czerwca 30 kwietnia 31 maja (Średnio)zaawansowane programowanie w C++ 7/36

Wymaganie oprogramowanie kompilatory: the GNU Compiler Collection 5.1 lub nowszy Microsoft Visual Studio 2015 lub nowszy biblioteki: stl boost - http://www.boost.org inne: 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, profiler (np. gprof) narzędzie do wirtualizacji (np. kvm) (Ś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 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 (profiler) 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 Grafika 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) GitHub 2015 GitHub 2018 (Średnio)zaawansowane programowanie w C++ 19/36

Zliczanie trafień 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 firmę) - nieco przestarzały standard (ale jest C++11, C++14, C++17) + 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 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 wyrafinowane 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. konfiguracja) (Ś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ąć private: Singleton(); Singleton(const Singleton&) = delete; Singleton& operator=(const Singleton&) = delete; }; //lepiej implementację przenieść do pliku.cpp //metoda inline w msvc może generować wiele instancji //jest bezpieczny w C++11 w aplikacjach współbieżnych Singleton& Singleton::getInstance() { static Singleton instance; //lokalna zmienna statyczna return instance; } Wykorzystuje kod generowany przez kompilator: inicjujący i niszczący lokalne obiekty statyczne, w C++11 dodatkowo w sposób bezpieczy w aplikacjach współbieżnych (Średnio)zaawansowane programowanie w C++ 30/36

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

Singleton Mutex 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 Singleton współbieżny //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