Jeden z języków programowania, który powinieneś znać

Slides:



Advertisements
Podobne prezentacje
Prezentacja specjalności „Programowanie systemowe i sieciowe”
Advertisements

Inżynieria Oprogramowania
Programowanie w języku C++. Jak napisać prosty program obliczeniowy lub grę komputerową? Zbigniew Nagórny Pracownia Komputerowa Wyższa Szkoła Humanistyczno-Przyrodnicza.
Wprowadzenie.
Wprowadzenie do C++ Zajęcia 2.
Obiektowe metody projektowania systemów Design Patterns STRATEGY.
OiZPI Część 5 narzędzia CASE w materiałach wykorzystano:
Tematyka kursu z informatyki dzień 3
Wydział Zastosowań Informatyki i Matematyki SGGW
Narzędzia CASE pod Linux
Platforma .Net i Vs.Net.
PHP vs. ASP PHP – lider wydajności wśród języków skryptowych.
MANDALA.
Obiektowe metody projektowania systemów
Praktyka Programowania Semestr I: –wykład - 1 godz. –laboratorium - 1 godz. –projekt - 1 godz.
Oprogramowanie rejestratora pikosekundowych przebiegów elektrycznych
Wykład 8 Wojciech Pieprzyca
Pomiary w inżynierii oprogramowania
Pomiary w inżynierii oprogramowania
Programowanie obiektowe Andrzej Ziółkowski Wykład 7.
Project made by Bartosz Rumiński Kl. III i rok 2007/2008.
Wprowadzenie do programowania w języku Turbo Pascal
PODSTAWY PROGRAMOWANIA
Analiza, projekt i częściowa implementacja systemu obsługi kina
Made by Mateusz Szirch Kilka słów o JavaScript.
C.d. wstępu do tematyki RUP
LabVIEW Technologie informacyjne – laboratorium Irmina Kwiatkowska
Microsoft Expression Studio
Metody lokalizacji węzłów ruchomych w sieci ZigBee
Opracował : Przemysław Drzymała
QR-CERT Centrum Certyfikacji i Personalizacji
Informatyka I - Wykład ANSI C
Refaktoryzacja Robert Pająk.
Programowanie obiektowe – zastosowanie języka Java SE
JAVA.
Projektowanie obiektowe
WebCreator.c0.pl Krzysztof Abram.
ZAKŁAD SYSTEMÓW KOMPUTEROWYCH
SPECJALNOŚĆ: Oprogramowanie Systemowe
W ramach projektu edukacyjnego pt. „Kalejdoskop zawodów” pracę wykonał Dominik Grelak kl. 2 A Olecko, maj 2014.
C++.
Model obiektowy bazy danych
Temat 1: Ogólne cechy języka PHP
PRACOWNIE MARZEŃ Projekt finansowany z Europejskiego Funduszu Społecznego w ramach Programu Operacyjnego Kapitał Ludzki, Priorytet IX Rozwój Wykształcenia.
Podstawy języka skryptów
Programowanie w językach skryptowych
PHP. PHP obiektowy, skryptowy język programowania zaprojektowany do generowania stron internetowych w czasie rzeczywistym.
Obiektowe metody projektowania systemów Adapter. Wstęp: „Dostosowanie interfejsu klasy do interfejsu, którego oczekuje użytkownik. Adapter umożliwia współprace.
Paweł Starzyk Obiektowe metody projektowania systemów
Podstawy programowania
Podsumowanie wiedzy MPDI2 sem.3 INFORMATYKA. tworzenie nowego pliku i katalogu, nawigacja po katalogach, listowanie zawartości katalogu, zmiana nazw,
Struktura systemu operacyjnego
Dokumentacja programu komputerowego i etapy tworzenia programów.
Temat: Porównanie technologii php,c# oraz javascript na przykładzie webaplikacji typu społecznościowy agregator treści Autor: Wojciech Ślawski.
Visual Basic przygotował Michał Miłek Visual Basic – język programowania wysokiego poziomu i narzędzie programistyczne firmy Microsoft. Składnia jest oparta.
Języki i technologie wytwarzania stron WWW Autor: Michał Walkowski Referat.
Jestem wyrobem papierowym lub foliowym przymocowanym do produktu w celu zidentyfikowania lub określenia jego zawartości.
Informatyka– dziedzina nauki i techniki zajmująca się przetwarzaniem informacji – w tym technologiami przetwarzania informacji oraz technologiami wytwarzania.
Hobby spidersweb.pl Czas przeznaczony na drobne przyjemnosci spedzam na czytaniu ksiazek… krosno24.pl.
Programowanie strukturalne i obiektowe Klasa I. Podstawowe pojęcia dotyczące programowania 1. Problem 2. Algorytm 3. Komputer 4. Program komputerowy 5.
Projekt i implementacja symulatora żaglówki z wykorzystaniem biblioteki DirectX Promotor: dr hab. prof. WWSI Grabowski Michał Dyplomant: Radosław Czebreszuk.
Programowanie Obiektowe – Epilog
Różnice między programowanie strukturalnym a obiektowym
Inżynieria Oprogramowania Laboratorium
Programowanie obiektowe – zastosowanie języka Java SE
czyli wstęp do programowania
Jak używać 1 Usuń linie i tekst, których nie potrzebujesz 2
Zapis prezentacji:

Jeden z języków programowania, który powinieneś znać C++ Jeden z języków programowania, który powinieneś znać

Jestem Piotr Kłos Czytam i polecam: Napisałem: Kilka podstawowych książek, wątki na forach, dokumentacje, kod źródłowy w C++ „Wzorce Projektowe” według „Bandy czworga” „Nowoczesne projektowanie w C++” Andrei Alexandrescu Głupią grę o nazwie „Kartofel” Obiektowo orientowany graficzny interfejs użytkownika „PKgui” Edytor Labiryntów, część Generatora Labiryntów

Ta prezentacja jest o… Teorii C++ Zalety i wady C++ Znaczenie C++ w nowoczesnym programowaniu

Czym jest C++? kompilowany język programowania ogólnego przeznaczenia Język obiektowo orientowany Osadzony na C => wspiera programowanie proceduralne Wysoko rozwinięty, ustandaryzowany język; jego jakość stale się zwiększa bezpieczny <= bezwzględna statyczna kontrola typów Umożliwia programowanie generyczne<= szablony

Historia C++ Bjarne Stroustrup Pierwsza, nędzna wersja z 1979 „C z klasami” C++ jako standard ISO z1998 Rosnąca popularność ostatni standard w 2003 r. Jest tworzona nowa wersja, C++ 0x

Obiektowo orientowany? główne cechy paradygmatu orientowania obiektowego: klasy dziedziczenie polimorfizm „Oparty na obiektach” (ang. „Object-based”) język (jak Visual Basic czy JavaScript) nie ma co najmniej jednego z nich.

Obiektowo orientowany? klasy – zdefiniowane przez użytkownika, pełnoprawne typy Poprawny przykład (słowa kluczowe na czerwono): class ClassName { private: OtherClassName b; public: int a; ClassName* c; void f() { cout<<a; } ClassName(){/*a body*/ } ClassName(int arg){ a=arg; } ClassName(ClassName& ){/*a body*/ } ~ClassName(){/*a body*/ } ClassName operator+(ClassName & arg){ return ClassName(a+ arg.a); friend class OtherClassName; };

Obiektowo orientowany? dane class ClassName { private: OtherClassName b; /// public: int a; /// ClassName* c; /// void f() { cout<<a; } ClassName(){/*a body*/ } ClassName(int arg){ a=arg; } ClassName(ClassName& ){/*a body*/ } ~ClassName(){/*a body*/ } ClassName operator+(ClassName & arg){ return ClassName(a+ arg.a); friend class OtherClassName; };

Obiektowo orientowany? Dane typów wbudowanych class ClassName { private: OtherClassName b; public: int a; /// ClassName* c; void f() { cout<<a; } ClassName(){/*a body*/ } ClassName(int arg){ a=arg; } ClassName(ClassName& ){/*a body*/ } ~ClassName(){/*a body*/ } ClassName operator+(ClassName & arg){ return ClassName(a+ arg.a); friend class OtherClassName; };

Obiektowo orientowany? Dane typów zdefiniowanych przez użytkownika class ClassName { private: OtherClassName b; /// public: int a; ClassName* c; void f() { cout<<a; } ClassName(){/*a body*/ } ClassName(int arg){ a=arg; } ClassName(ClassName& ){/*a body*/ } ~ClassName(){/*a body*/ } ClassName operator+(ClassName & arg){ return ClassName(a+ arg.a); friend class OtherClassName; };

Obiektowo orientowany? Wskaźniki, referencje, tablice, wskaźniki do wskaźników, referencje do tablic wskaźników itd. class ClassName { private: OtherClassName b; public: int a; ClassName* c; /// void f() { cout<<a; } ClassName(){/*a body*/ } ClassName(int arg){ a=arg; } ClassName(ClassName& ){/*a body*/ } ~ClassName(){/*a body*/ } ClassName operator+(ClassName & arg){ return ClassName(a+ arg.a); friend class OtherClassName; };

Obiektowo orientowany? Zachowania obiektów: funkcje składowe, które łatwo przetwarzają dane obiektu lub robią czego tylko potrzeba class ClassName { private: OtherClassName b; public: int a; ClassName* c; void f() { /// cout<<a; /// } /// ClassName(){/*a body*/ } /// ClassName(int arg){ a=arg; } /// ClassName(ClassName& ){/*a body*/ } /// ~ClassName(){/*a body*/ } /// ClassName operator+(ClassName & arg){ /// return ClassName(a+ arg.a); /// friend class OtherClassName; };

Obiektowo orientowany? Najzwyklejsza funkcja (drukowanie wartości a)‏ class ClassName { private: OtherClassName b; public: int a; ClassName* c; void f() { /// cout<<a; /// } /// ClassName(){/*a body*/ } ClassName(int arg){ a=arg; } ClassName(ClassName& ){/*a body*/ } ~ClassName(){/*a body*/ } ClassName operator+(ClassName & arg){ return ClassName(a+ arg.a); } friend class OtherClassName; };

Obiektowo orientowany? Konstruktory i konstruktory kopiujące class ClassName { private: OtherClassName b; public: int a; ClassName* c; void f() { cout<<a; } ClassName(){/*a body*/ } /// ClassName(int arg){ a=arg; } /// ClassName(ClassName& ){/*a body*/ } /// ~ClassName(){/*a body*/ } ClassName operator+(ClassName & arg){ return ClassName(a+ arg.a); friend class OtherClassName; };

Obiektowo orientowany? Destruktor class ClassName { private: OtherClassName b; public: int a; ClassName* c; void f() { cout<<a; } ClassName(){/*a body*/ } ClassName(int arg){ a=arg; } ClassName(ClassName& ){/*a body*/ } ~ClassName(){/*a body*/ } /// ClassName operator+(ClassName & arg){ return ClassName(a+ arg.a); friend class OtherClassName; };

Obiektowo orientowany? Przeładowywane operatory ClassName x(3),y(4); x=x+y; /*x.a==7*/ class ClassName { private: OtherClassName b; public: int a; ClassName* c; void f() { cout<<a; } ClassName(){/*a body*/ } ClassName(int arg){ a=arg; } ClassName(ClassName& ){/*a body*/ } ~ClassName(){/*a body*/ } ClassName operator+(ClassName & arg){ /// return ClassName(a+ arg.a); /// } /// friend class OtherClassName; };

Obiektowo orientowany? Ukrywanie składników Unikanie błędów i niepotrzebnych zależności plików class ClassName { private: /// OtherClassName b; public: /// int a; ClassName* c; void f() { cout<<a; } ClassName(){/*a body*/ } ClassName(int arg){ a=arg; } ClassName(ClassName& ){/*a body*/ } ~ClassName(){/*a body*/ } ClassName operator+(ClassName & arg){ return ClassName(a+ arg.a); friend class OtherClassName; };

Obiektowo orientowany? Selektywne ukrywanie składników class ClassName { private: /// OtherClassName b; public: /// int a; ClassName* c; void f() { cout<<a; } ClassName(){/*a body*/ } ClassName(int arg){ a=arg; } ClassName(ClassName& ){/*a body*/ } ~ClassName(){/*a body*/ } ClassName operator+(ClassName & arg){ return ClassName(a+ arg.a); friend class OtherClassName; /// };

Obiektowo orientowany? dziedziczenie NextClassName zawiera składniki ClassName class NextClassName :public ClassName /// { int d; float z; };

Obiektowo orientowany? Pozostałe OO-przyjazne idiomy w standardzie C++: Obsługa sytuacji wyjątkowych Stałość obiektów Inlining Łatwa w użyciu oraz dynamiczna alokacja pamięci Przestrzenie nazw Przeładowanie operatorów hermetyzacja identyfikowanie typów w czasie wykonania programu

Obiektowo orientowany? OO, jednorodne, łatwe w użyciu , wbudowane techniki można użyć aby: Aby odzwierciedlać realny świat Aby odzwierciedlać wszystkie byty istniejące jedynie w naszej wyobraźni Aby odzwierciedlać wszystkie techniczne byty w architekturze komputera Paradygmat OO jest bardzo potężny!

Przykłady kodu w C++: Dosłownie wszystko w Microsofcie Oprogramowanie Adobe Systems Google – silnik do wyszukiwania Apple OS X Havoc – silnik fizyczny Metrowerks – narzędzia Mozilla Firefox Większość dużych gier

Wielu programistów jest niezadowolonych z C++ ponieważ: Czy C++ jest idealny? Wielu programistów jest niezadowolonych z C++ ponieważ: Nie obsługuje wielowątkowości Nie posiada delegatów (wskaźników na funkcję składową dowolnej klasy)‏ Nie uwzględnia niektórych wzorców projektowych – (bardziej abstrakcyjne rzeczy, które nie mogą być zdefiniowane jako obiekty)‏

Czy C++ jest idelany? Wiele bibliotek do C++ ją posiada Obsługa wielowątkowości: Wiele bibliotek do C++ ją posiada C++ 0x naprawi to Jak dotąd brak jednolitej obsługi wielowątkowości

Czy C++ jest idealny? Wiele bibliotek C++ je implementuje delegaty: Wiele bibliotek C++ je implementuje C++ 0x może to poprawić Nie ma ujednoliconych delegatów

Czy C++ jest idealny? Wsparcie dla wzorców projektowych: Co to są wzorce projektowe? Wzorzec projektowy– nazwane i formalnie opisane rozwiązanie skomplikowanego problemu.

Czy C++ jest idealny? Wsparcie dla wzorców projektowych: Da się zaimplementować niektóre używając obiektów Są także biblioteki w C++ implementujące część z nich Te rozwiązania nadają się do ogólnego użytku Ale niezbyt eleganckie i łatwe w użyciu To się nie zmieni

Czy C++ jest idealny? Wsparcie dla wzorców projektowych: Problem z zależnościami pomiędzy zachowaniami obiektów Nie mogą być zdefiniowane tylko w języku obiektów Różnica pomiędzy zbiorem pojęć w projekcie i strukturami w kodzie Kod nie odzwierciedla kontekstu problemu Paradygmat OO nie odzwierciedla światów !!! 28

C++ nie jest idealny. Nie można przetłumaczyć niektórych projektów na język C++ ponieważ C++ jest językiem OO Rozwiązanie tego: języki orientowane aspektowo* *Paradygmat AO– przedstawiony ostatnio przez Gregora Kiczalesa; są już takie języki, np. AspectJ czy AspectC++ którego go używają; zobacz http://www.cs.ubc.ca/~gregor/

Dlaczego C++ jest tak popularny? Możesz skompilować kod C jako C++ Więc możesz używać starych bibliotek C w C++ C++ obsługuje programowanie liniowe, proceduralne, bazujące na obiektach, orientowane obiektowo i abstrakcje danych. Skompilowany kod C++ jest bardzo szybki. Najprawdopodobniej jest językiem „najbardziej ogólnego przeznaczenia” na świecie.

Ogólnego przeznaczenia… więc istnieje wielka wspólnota więc istnieje wiele bibliotek C++! więc jest konkurencja Więc jakość kodu jest bardzo wysoka Jakość standardu C++ rośnie, by się przystosować do wymagań Inny istotny powód…

Programowanie uogólnione w C++ Szablony – sposób programowania abstrakcji Kompilator generuje podobne części kodu zamiast programisty Wielka wspólnota C++ produkuje wiele bibliotek szablonowych Przykłady: STL, Boost, Loki i inne Gotowe rozwiązania skomplikowanych problemów Szybkie, łatwe, bezpieczne i skuteczne programowanie

Wnioski C++ jest mocarny! C++ i dalsze wersje będą używane przez długi, długi czas C++ wpłynął na Java, C#, PHP, ADA95 etc. Prawdopodobnie wpłynie na inne języki w przyszłości Warto go znać