1=Przestrzenie nazw, wyjatki, geneza jezyka C++

Transkrypt

1=Przestrzenie nazw, wyjatki, geneza jezyka C++
Przestrzenie nazw
Wyjątki
Geneza języka C++
Przestrzenie nazw, wyjątki, geneza języka C++
Bogdan Kreczmer
[email protected]
Katedra Cybernetyki i Robotyki
Politechnika Wrocławska
Kurs: Programowanie obiektowe
c
Copyright2015
Bogdan Kreczmer
Niniejszy dokument zawiera materiały do wykładu dotyczącego programowania obiektowego. Jest on
udostępniony pod warunkiem wykorzystania wyłącznie do własnych prywatnych potrzeb i może on być kopiowany
wyłącznie w całości, razem z niniejszą stroną tytułową.
Programowanie obiektowe
Przestrzenie nazw, wyjątki, geneza języka C++
Przestrzenie nazw
Wyjątki
Geneza języka C++
Niniejsza prezentacja została wykonana przy użyciu systemu składu LATEX oraz stylu beamer, którego autorem
jest Till Tantau.
Strona domowa projektu Beamer:
http://latex-beamer.sourceforge.net
Programowanie obiektowe
Przestrzenie nazw, wyjątki, geneza języka C++
Przestrzenie nazw
Wyjątki
Geneza języka C++
Plan prezentacji
1
Przestrzenie nazw
Idea przestrzeni nazw
Podstawowe cechy przestrzeni nazw
2
Wyjątki
Podstawowe idee
Jak to działa
Wyjątki standardowe
3
Geneza języka C++
Historia narodzin
Motywacja
Chronologia
Programowanie obiektowe
Przestrzenie nazw, wyjątki, geneza języka C++
Przestrzenie nazw
Wyjątki
Geneza języka C++
Idea przestrzeni nazw
Podstawowe cechy przestrzeni nazw
Plan prezentacji
1
Przestrzenie nazw
Idea przestrzeni nazw
Podstawowe cechy przestrzeni nazw
2
Wyjątki
Podstawowe idee
Jak to działa
Wyjątki standardowe
3
Geneza języka C++
Historia narodzin
Motywacja
Chronologia
Programowanie obiektowe
Przestrzenie nazw, wyjątki, geneza języka C++
Przestrzenie nazw
Wyjątki
Geneza języka C++
Idea przestrzeni nazw
Podstawowe cechy przestrzeni nazw
Zarys problemu
Należy stworzyć zbiór klas modelujących pojęcie prostej w
przestrzeni i na płaszczyźnie. Ich metody powinny umożliwić w
łatwy sposób określenie, czy dany punkt w przestrzeni lub na
płaszczyźnie należy do danej prostej czy też nie.
Programowanie obiektowe
Przestrzenie nazw, wyjątki, geneza języka C++
Przestrzenie nazw
Wyjątki
Geneza języka C++
Idea przestrzeni nazw
Podstawowe cechy przestrzeni nazw
Te same nazwy, różne definicje
prosta-plaszczyzna.hh
prosta-przestrzen.hh
class Wektor {
double x, y;
...
};
class Wektor {
double x, y, z;
...
};
class Prosta {
Wektor WekNorm;
double
c;
...
};
class Prosta {
Wektor WekOsiowy;
Wektor PnkProstej;
...
};
#include ”prosta-plaszczyzna.hh”
#include ”prosta-przestrzen.hh”
int main( )
{
Prosta Pr2;
Prosta Pr3;
...
}
Programowanie obiektowe
Przestrzenie nazw, wyjątki, geneza języka C++
Przestrzenie nazw
Wyjątki
Geneza języka C++
Idea przestrzeni nazw
Podstawowe cechy przestrzeni nazw
Te same nazwy, różne definicje
prosta-plaszczyzna.hh
prosta-przestrzen.hh
class Wektor {
double x, y;
...
};
class Wektor {
double x, y, z;
...
};
class Prosta {
Wektor WekNorm;
double
c;
...
};
class Prosta {
Wektor WekOsiowy;
Wektor PnkProstej;
...
};
#include ”prosta-plaszczyzna.hh”
#include ”prosta-przestrzen.hh”
int main( )
{
Prosta Pr2;
Prosta Pr3;
...
}
Programowanie obiektowe
Przestrzenie nazw, wyjątki, geneza języka C++
Przestrzenie nazw
Wyjątki
Geneza języka C++
Idea przestrzeni nazw
Podstawowe cechy przestrzeni nazw
Zroznicownie nazw
prosta2d.hh
prosta3d.hh
class Wektor2D {
double x, y;
...
};
class Wektor3D {
double x, y, z;
...
};
class Prosta2D {
Wektor2D WekNorm;
double
c;
...
};
class Prosta3D {
Wektor3D WekOsiowy;
Wektor3D PnkProstej;
...
};
#include ”prosta2d.hh”
#include ”prosta3d.hh”
int main( )
{
Prosta2D Pr2;
Prosta3D Pr3;
...
}
Programowanie obiektowe
Przestrzenie nazw, wyjątki, geneza języka C++
Przestrzenie nazw
Wyjątki
Geneza języka C++
Idea przestrzeni nazw
Podstawowe cechy przestrzeni nazw
Zroznicownie nazw w stylu C
d2 prosta.hh
d3 prosta.hh
class D2 Wektor {
double x, y;
...
};
class D3 Wektor {
double x, y, z;
...
};
class D2 Prosta {
D2 Wektor WekNorm;
double
c;
...
};
class D3 Prosta {
D3 Wektor WekOsiowy;
D3 Wektor PnkProstej;
...
};
#include ”d2 prosta.hh”
#include ”d3 prosta.hh”
int main( )
{
D2 Prosta Pr2;
D3 Prosta Pr3;
...
}
Programowanie obiektowe
Przestrzenie nazw, wyjątki, geneza języka C++
Przestrzenie nazw
Wyjątki
Geneza języka C++
Idea przestrzeni nazw
Podstawowe cechy przestrzeni nazw
Przestrzenie nazw
d2 prosta.hh
d3 prosta.hh
namespace D2 {
class Wektor {
double x, y;
...
};
namespace D3 {
class Wektor {
double x, y, z;
...
};
class Prosta {
Wektor WekNorm;
double
c;
...
};
}
class Prosta {
Wektor WekOsiowy;
Wektor PnkProstej;
...
};
}
#include ”d2 prosta.hh”
#include ”d3 prosta.hh”
int main( )
{
D2::Prosta Pr2;
D3::Prosta Pr3;
...
}
Programowanie obiektowe
Przestrzenie nazw, wyjątki, geneza języka C++
Przestrzenie nazw
Wyjątki
Geneza języka C++
Idea przestrzeni nazw
Podstawowe cechy przestrzeni nazw
Plan prezentacji
1
Przestrzenie nazw
Idea przestrzeni nazw
Podstawowe cechy przestrzeni nazw
2
Wyjątki
Podstawowe idee
Jak to działa
Wyjątki standardowe
3
Geneza języka C++
Historia narodzin
Motywacja
Chronologia
Programowanie obiektowe
Przestrzenie nazw, wyjątki, geneza języka C++
Przestrzenie nazw
Wyjątki
Geneza języka C++
Idea przestrzeni nazw
Podstawowe cechy przestrzeni nazw
Blok przestrzeni nazw
int ZmGlobalna;
namespace D3 {
class Wektor {
double x, y, z;
...
};
class Prosta {
Wektor WekOsiowy;
Wektor PnkProstej;
...
};
}
int main( )
{
ZmGlobalna = 4;
D3::Wektor Wk;
D3::Prosta Pr;
}
Programowanie obiektowe
W danej jednostce translacyjnej można stworzyć
jednolity blok grupujący wszystkie definicje w
wybranej przewstrzeni nazw.
Przestrzenie nazw, wyjątki, geneza języka C++
Przestrzenie nazw
Wyjątki
Geneza języka C++
Idea przestrzeni nazw
Podstawowe cechy przestrzeni nazw
Blok przestrzeni nazw
int ZmGlobalna;
namespace D3 {
class Wektor {
double x, y, z;
...
};
}
namespace D3 {
class Prosta {
Wektor WekOsiowy;
Wektor PnkProstej;
...
};
}
int main( )
{
ZmGlobalna = 4;
D3::Wektor Wk;
D3::Prosta Pr;
}
Programowanie obiektowe
Tę samą przestrzeń nazw można jednak rozbić
na dowolną liczbę bloków.
Przestrzenie nazw, wyjątki, geneza języka C++
Przestrzenie nazw
Wyjątki
Geneza języka C++
Idea przestrzeni nazw
Podstawowe cechy przestrzeni nazw
Ta sama przestrzeń nazw w różnych modułach
d3 wektor.hh
d3 prosta.hh
...
#include “d3 wektor.hh”
...
namespace D3 {
class Wektor {
double x, y, z;
...
};
}
...
namespace D3 {
class Prosta {
Wektor WekOsiowy;
Wektor PnkProstej;
...
};
}
...
#include ”d3 wektor.hh”
#include ”d3 prosta.hh”
int main( )
{
D3::Wektor
D3::Prosta
...
}
Wk;
Pr;
Programowanie obiektowe
Ta sama przestrzeń nazw może być
rozbita na zbiór różnych jednostek
translacyjnych (np. 3d wektor.cpp i
3d prosta.cpp) z własnymi plikami
nagłówkowymi (np. 3d wektor.hh i
3d prosta.hh) zawierającymi definicje
klas i zapowiedzi definicji metod.
Przestrzenie nazw, wyjątki, geneza języka C++
Przestrzenie nazw
Wyjątki
Geneza języka C++
Idea przestrzeni nazw
Podstawowe cechy przestrzeni nazw
Co dają przestrzenie nazw
Definiowanie przestrzeni nazw pozwala rozwiązać konflikty
nazw. Tym samym daje znacznie większą swobodę
programiście.
Definicja przestrzeni nazw może być „kontynuowana” w kilku
jednostek translacyjnych.
Jedną z ważniejszych konsekwencji wykorzystywania przestrzeni
nazw jest możliwość tworzenia modułów w sensie logicznym, a
nie tak jak to ma miejsce, np. w języku C tylko w sensie stricte
fizycznym.
Programowanie obiektowe
Przestrzenie nazw, wyjątki, geneza języka C++
Przestrzenie nazw
Wyjątki
Geneza języka C++
Idea przestrzeni nazw
Podstawowe cechy przestrzeni nazw
Co dają przestrzenie nazw
Definiowanie przestrzeni nazw pozwala rozwiązać konflikty
nazw. Tym samym daje znacznie większą swobodę
programiście.
Definicja przestrzeni nazw może być „kontynuowana” w kilku
jednostek translacyjnych.
Jedną z ważniejszych konsekwencji wykorzystywania przestrzeni
nazw jest możliwość tworzenia modułów w sensie logicznym, a
nie tak jak to ma miejsce, np. w języku C tylko w sensie stricte
fizycznym.
Programowanie obiektowe
Przestrzenie nazw, wyjątki, geneza języka C++
Przestrzenie nazw
Wyjątki
Geneza języka C++
Idea przestrzeni nazw
Podstawowe cechy przestrzeni nazw
Co dają przestrzenie nazw
Definiowanie przestrzeni nazw pozwala rozwiązać konflikty
nazw. Tym samym daje znacznie większą swobodę
programiście.
Definicja przestrzeni nazw może być „kontynuowana” w kilku
jednostek translacyjnych.
Jedną z ważniejszych konsekwencji wykorzystywania przestrzeni
nazw jest możliwość tworzenia modułów w sensie logicznym, a
nie tak jak to ma miejsce, np. w języku C tylko w sensie stricte
fizycznym.
Programowanie obiektowe
Przestrzenie nazw, wyjątki, geneza języka C++
Przestrzenie nazw
Wyjątki
Geneza języka C++
Idea przestrzeni nazw
Podstawowe cechy przestrzeni nazw
Dostęp do przesłoniętych zmiennych globalnych
int Zm = 7;
void Funkcja( )
{
int Zm = 55;
::Zm = Zm;
}
int main( )
{
cout << ”Zm. Globalna: ”
Funkcja( );
cout << ”Zm. Globalna: ”
}
<< Zm << endl;
<< Zm << endl;
Programowanie obiektowe
Przestrzenie nazw, wyjątki, geneza języka C++
Przestrzenie nazw
Wyjątki
Geneza języka C++
Idea przestrzeni nazw
Podstawowe cechy przestrzeni nazw
Dostęp do przesłoniętych zmiennych globalnych
int Zm = 7;
void Funkcja( )
{
int Zm = 55;
::Zm = Zm;
}
int main( )
{
cout << ”Zm. Globalna: ”
Funkcja( );
cout << ”Zm. Globalna: ”
}
Wynik działania:
Zm. Globalna: 7
Zm. Globalna: 55
<< Zm << endl;
<< Zm << endl;
W nienazwanej przestrzeni nazw znajdują się wszystkie globalnie definiowane
zmiennych, typy oraz funkcje. Zmienne te można zawsze “odsłonić” stosując
nazwę kwalifikowaną.
Programowanie obiektowe
Przestrzenie nazw, wyjątki, geneza języka C++
Przestrzenie nazw
Wyjątki
Geneza języka C++
Idea przestrzeni nazw
Podstawowe cechy przestrzeni nazw
Dostęp do przesłoniętych zmiennych globalnych
int Zm = 7;
void Funkcja( int Zm )
{
::Zm = Zm;
}
int main( )
{
cout << ”Zm. Globalna: ”
Funkcja( 10 );
cout << ”Zm. Globalna: ”
}
Wynik działania:
Zm. Globalna: 7
Zm. Globalna: 10
<< Zm << endl;
<< Zm << endl;
W nienazwanej przestrzeni nazw znajdują się wszystkie globalnie definiowane
zmiennych, typy oraz funkcje. Zmienne te można zawsze “odsłonić” stosując
nazwę kwalifikowaną.
Programowanie obiektowe
Przestrzenie nazw, wyjątki, geneza języka C++
Przestrzenie nazw
Wyjątki
Geneza języka C++
Idea przestrzeni nazw
Podstawowe cechy przestrzeni nazw
Dostęp do przesłoniętych typów
enum
Symbole { a, b, c};
void Funkcja LokalnyTyp( Symbole Param )
{
enum Symbole { x, y, z };
Symbole
}
::Symbole
::Symbole
int main( )
{
Symbole
}
Zm1 = x;
Zm2 = Param;
Zm3 = ::a;
Wynik działania:
Zm. Globalna: 7
Zm. Globalna: 10
x = a;
Funkcja LokalnyTyp( x );
W nienazwanej przestrzeni nazw znajdują się wszystkie globalnie definiowane
zmiennych, typy oraz funkcje. Zmienne te można zawsze “odsłonić” stosując
nazwę kwalifikowaną.
Programowanie obiektowe
Przestrzenie nazw, wyjątki, geneza języka C++
Przestrzenie nazw
Wyjątki
Geneza języka C++
Idea przestrzeni nazw
Podstawowe cechy przestrzeni nazw
Zagnieżdżanie przestrzeni nazw
int ZmGlobalna;
namespace D3 {
class Wektor {
...
};
namespace Bryly {
class Szescian {
...
};
}
}
int main( )
{
ZmGlobalna = 4;
D3::Wektor
D3::Bryly::Szescian
}
Przestrzenie nazw mogą być zagnieżdżane.
Wk;
Sz;
Programowanie obiektowe
Przestrzenie nazw, wyjątki, geneza języka C++
Przestrzenie nazw
Wyjątki
Geneza języka C++
Idea przestrzeni nazw
Podstawowe cechy przestrzeni nazw
Dyrektywa using namespace
int ZmGlobalna;
namespace D3 {
class Wektor {
...
};
namespace Bryly {
class Szescian {
...
};
}
}
using namespace D3;
int main( )
{
ZmGlobalna = 4;
Wektor
Wk;
Bryly::Szescian Sz;
}
Programowanie obiektowe
Użycie dyrektyw using namespace powoduje
przeniesienie wszystkich nazw z danej
podrzestrzeni, do której się ona odnosi, do
przestrzeni nazw, w której jest zastosowana.
W przedstawionym przykładzie nazwy z
podprzestrzeni D3 zostały przeniesione do
przestrzeni nienazwanej związanej z
tradycyjnymi zmiennymi globalnymi.
Przestrzenie nazw, wyjątki, geneza języka C++
Przestrzenie nazw
Wyjątki
Geneza języka C++
Idea przestrzeni nazw
Podstawowe cechy przestrzeni nazw
Użycie dyrektywy using namespace
Dyrektywy using namespace nie należy używać w
plikach nagłówkowych. Jej użycie tam jest
przejawem bardzo złego stylu programowania.
Programowanie obiektowe
Przestrzenie nazw, wyjątki, geneza języka C++
Przestrzenie nazw
Wyjątki
Geneza języka C++
Idea przestrzeni nazw
Podstawowe cechy przestrzeni nazw
Dyrektywa using namespace
int ZmGlobalna;
namespace D3 {
class Wektor {
...
};
namespace Bryly {
class Szescian {
...
};
}
}
using namespace D3::Bryly;
int main( )
{
ZmGlobalna = 4;
D3::Wektor
Wk;
Szescian
Sz;
}
Programowanie obiektowe
Dyrektywę using namespace możemy stosować
selektywnie do wybranych podprzestrzeni.
W tym przykładzie została ona zastosowana do
podprzestrzeni D3::Bryly. Do pozostałych
elementów przestrzeni nazw D3 musimy
odwoływać się poprzez pełną nazwę
kwalifikowaną.
Przestrzenie nazw, wyjątki, geneza języka C++
Przestrzenie nazw
Wyjątki
Geneza języka C++
Idea przestrzeni nazw
Podstawowe cechy przestrzeni nazw
Dyrektywa using namespace
namespace D3 {
class Wektor {
...
};
namespace Bryly {
class Szescian {
...
};
}
Szescian
SzesWzorcowy;
using namespace Bryly;
Szescian
DrugiSzes;
}
Dyrektywę using namespace możemy stosować
również w podprzestrzeniach. Jej działanie
ograniczone jest tylko do danej podprzestrzeni.
W tym przykładzie dyrektywa using namespace
powoduje przeniesienie wszystkich nazw z
podprzestrzeni Bryla do przestrzeni nazw D3.
int main( )
{
D3::DrugiSzes = D3::SzesWzorcowy;
}
Programowanie obiektowe
Przestrzenie nazw, wyjątki, geneza języka C++
Przestrzenie nazw
Wyjątki
Geneza języka C++
Idea przestrzeni nazw
Podstawowe cechy przestrzeni nazw
Dyrektywa using namespace
namespace D3 {
class Wektor {
...
};
namespace Bryly {
class Szescian {
...
};
}
Szescian
Bryly::Szescian
SzesWzorcowy;
DrugiSzes;
}
Bez tej dyrektywy nie stracimy podprzestrzeni
Bryly i niezbędne jest wówczas odwoływanie
się do jej poszczególnych elementów poprzez
nazwy kwalifikowane.
int main( )
{
D3::DrugiSzes = D3::Bryly::SzesWzorcowy;
}
Programowanie obiektowe
Przestrzenie nazw, wyjątki, geneza języka C++
Przestrzenie nazw
Wyjątki
Geneza języka C++
Idea przestrzeni nazw
Podstawowe cechy przestrzeni nazw
Deklaracja using
namespace D3 {
class Wektor {
...
};
namespace Bryly {
class Szescian {
...
};
}
Szescian
SzesWzorcowy;
Elementy danej podprzestrzeni nazw możemy
przenosić selektywnie stosując deklarację using.
Bryly::Szescian DrugiSzes;
}
using D3::Bryly::SzesWzorcowy;
int main( )
{
D3::DrugiSzes = SzesWzorcowy;
}
Programowanie obiektowe
Przestrzenie nazw, wyjątki, geneza języka C++
Przestrzenie nazw
Wyjątki
Geneza języka C++
Idea przestrzeni nazw
Podstawowe cechy przestrzeni nazw
Dyrektywa using namespace – ograniczanie zakresu
namespace D3 {
class Wektor {
...
};
namespace Bryly {
class Szescian {
...
};
}
Szescian
Bryly::Szescian
SzesWzorcowy;
DrugiSzes;
}
int main( )
{
{
using namespace D3;
}
Ograniczenie użycia dyrektywy using namespace
możemy zrealiwać poprzez jej wykorzystanie w
bloku ciała funkcji. Ogranicza on wówczas
ważność stosowania tej deklaracji do tego bloku.
DrugiSzes = Bryly::SzesWzorcowy;
}
D3::DrugiSzes = D3::Bryly::SzesWzorcowy;
Programowanie obiektowe
Przestrzenie nazw, wyjątki, geneza języka C++
Przestrzenie nazw
Wyjątki
Geneza języka C++
Idea przestrzeni nazw
Podstawowe cechy przestrzeni nazw
Deklaracja using – ograniczanie zakresu
namespace D3 {
class Wektor {
...
};
namespace Bryly {
class Szescian {
...
};
}
Szescian
Bryly::Szescian
SzesWzorcowy;
DrugiSzes;
}
Analogicznie można ograniczyć zakres ważności
deklaracji using.
int main( )
{
{
using D3::Bryly::SzescWzorcowy;
}
D3::DrugiSzes = SzesWzorcowy;
}
D3::DrugiSzes = D3::Bryly::SzesWzorcowy;
Programowanie obiektowe
Przestrzenie nazw, wyjątki, geneza języka C++
Przestrzenie nazw
Wyjątki
Geneza języka C++
Idea przestrzeni nazw
Podstawowe cechy przestrzeni nazw
Użycie deklaacji using
W plikach nagłówkowych nie powinno używać się
zarówno dyrektywy using namespace jak też
deklaracji using.
Programowanie obiektowe
Przestrzenie nazw, wyjątki, geneza języka C++
Przestrzenie nazw
Wyjątki
Geneza języka C++
Podstawowe idee
Jak to działa
Wyjątki standardowe
Plan prezentacji
1
Przestrzenie nazw
Idea przestrzeni nazw
Podstawowe cechy przestrzeni nazw
2
Wyjątki
Podstawowe idee
Jak to działa
Wyjątki standardowe
3
Geneza języka C++
Historia narodzin
Motywacja
Chronologia
Programowanie obiektowe
Przestrzenie nazw, wyjątki, geneza języka C++
Przestrzenie nazw
Wyjątki
Geneza języka C++
Podstawowe idee
Jak to działa
Wyjątki standardowe
Tradycyjny sposób obsługi błędów
int Funkcja1()
{ ...
if (Gdy cos jest zle) { errno = KOD BLEDU; return -1; }
...
return 0;
}
...
int Funkcja()
{
int err;
if (Funkcja1() < 0) { /∗ Obsługa błędu ∗/
...
if (Jezeli nie mozemy sobie poradzic) return -1;
...
}
if ((err = Funkcja2()) < 0) { /∗ Obsługa błędu ∗/
...
return 0;
}
Programowanie obiektowe
...
}
Przestrzenie nazw, wyjątki, geneza języka C++
Przestrzenie nazw
Wyjątki
Geneza języka C++
Podstawowe idee
Jak to działa
Wyjątki standardowe
Czym jest obsługa wyjątków
Wyjątki w C++ są sposobem na oddzielenie wykrywania błędów od ich
obsługi.
Mechanizm obsługi wyjątków jest nielokalną strukturą sterującą, która
korzysta ze zwijania stosu.
Zwijaniem stosu nazywamy proces przeszukiwania stosu w celu
znalezienia procedury obsługi wyjątku.
Mechanizmy obsługi wyjątków służą do sygnalizowania i obsługi zdarzeń
wyjątkowych. Jednak to programista musi zdecydować co to znaczy
wyjątkowy w danym programie.
Wyjątki często w sposób naturalny tworzą rodziny. Oznacza to, że
dziedziczenie może być użyteczne w strukturalizacji wyjątków i ich
obsłudze.
Programowanie obiektowe
Przestrzenie nazw, wyjątki, geneza języka C++
Przestrzenie nazw
Wyjątki
Geneza języka C++
Podstawowe idee
Jak to działa
Wyjątki standardowe
Plan prezentacji
1
Przestrzenie nazw
Idea przestrzeni nazw
Podstawowe cechy przestrzeni nazw
2
Wyjątki
Podstawowe idee
Jak to działa
Wyjątki standardowe
3
Geneza języka C++
Historia narodzin
Motywacja
Chronologia
Programowanie obiektowe
Przestrzenie nazw, wyjątki, geneza języka C++
Przestrzenie nazw
Wyjątki
Geneza języka C++
Podstawowe idee
Jak to działa
Wyjątki standardowe
Obsługa wyjątków – trochę tradycyjnie
int Funkcja1( )
{ ...
if (Gdy cos jest zle) throw KOD BLEDU; // . . . . . . . . Tutaj zgłaszamy wyjątek
...
}
...
int Funkcja( )
{
try { // . . . . . . . . . . . . . . . . . . . . W tej sekcji zakładamy możliwość zgłoszeń wyjątki
);
.Funkcja1(
..
} // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
catch (int err) { // . . Tutaj rozpoczyna się przechwytywanie i obsługa wyjątków
switch (err) {
case KOD BLEDU:
...
if (Jezeli nie mozemy sobie poradzic) throw KOD BLEDU;
...
break ;
...
}
} // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
...
Programowanie obiektowe
Przestrzenie nazw, wyjątki, geneza języka C++
←−
Przestrzenie nazw
Wyjątki
Geneza języka C++
Podstawowe idee
Jak to działa
Wyjątki standardowe
Przepływ sterowania – przypadek braku zgłoszenia wyjątku
int Funkcja(int arg)
{
try { //
...
↓
cout << ”Tu coś się dzieje.” << endl;
↓
...
↓
} // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
←−
catch (int const ∗wskKomunikat) {
...
}
catch (int Komunikat) {
...
}
catch ( . . . ) {
...
} //
−→
...
// Dalsza część kodu
↓
...
}
Programowanie obiektowe
Przestrzenie nazw, wyjątki, geneza języka C++
Przestrzenie nazw
Wyjątki
Geneza języka C++
Podstawowe idee
Jak to działa
Wyjątki standardowe
Przepływ sterowania – przypadek zgłoszenia wyjątku
int Funkcja(int arg)
{
try { //
...
↓
throw 10;
↓
...
↓
} // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
←−
catch (int const ∗wskKomunikat) {
...
}
−→
catch (int Komunikat) {
↓
cout << ”Obsługa zgłoszenia.” << endl;
←− ↓
}
catch ( . . . ) {
...
} //
...
// Dalsza część kodu
−→
...
↓
}
Programowanie obiektowe
Przestrzenie nazw, wyjątki, geneza języka C++
Przestrzenie nazw
Wyjątki
Geneza języka C++
Podstawowe idee
Jak to działa
Wyjątki standardowe
Zgłoszenia wyjątku – wcześniejszy powrót z funkcji
int Funkcja(int arg)
{
try { //
...
↓
throw 10;
↓
...
↓
} // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
←−
catch (int const ∗wskKomunikat) {
...
}
−→
catch (int Komunikat) {
←− ↓
return 2;
}
catch ( . . . ) {
...
} //
...
// Dalsza część kodu
...
−→ }
Programowanie obiektowe
Przestrzenie nazw, wyjątki, geneza języka C++
Przestrzenie nazw
Wyjątki
Geneza języka C++
Podstawowe idee
Jak to działa
Wyjątki standardowe
Funkcja w sekcji try
[Gdy arg == 0]
↓
int Funkcja(int arg) // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
try {
...
↓
if ( arg == 0 ) throw 10;
←−
...
// Ta część kodu jest osiągalna warunkowo
return 0;
} // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
catch (int const ∗wskKomunikat) {
...
return 0;
}
−→ ↓ catch (int Komunikat) {
...
return -2;
←− ↓
}
Sekcje catch muszą zwracać wartość
catch ( . . . ) {
tego samego typu co funkcja.
...
return 0;
} //
Programowanie obiektowe
Przestrzenie nazw, wyjątki, geneza języka C++
Przestrzenie nazw
Wyjątki
Geneza języka C++
Podstawowe idee
Jak to działa
Wyjątki standardowe
Problem kopiowania zgłaszanej wartości
class Blad {
Blad( Blad const & ) { } Kopiowanie obiektu jest niemożliwe (poza tą klasą)
public :
int nr bledu;
Blad(int nr = 0) { nr bledu = nr; };
};
void Funkcja(int arg)
{
try {
...
throw Blad(3);
...
}
catch ( Blad &Bl ) {
cout <<”Nr Bledu: ”
}
...
}
<< Bl. nr bledu << endl;
Programowanie obiektowe
Przestrzenie nazw, wyjątki, geneza języka C++
Przestrzenie nazw
Wyjątki
Geneza języka C++
Podstawowe idee
Jak to działa
Wyjątki standardowe
Problem kopiowania zgłaszanej wartości
class Blad {
Blad( Blad const & ) { } Kopiowanie obiektu jest niemożliwe (poza tą klasą)
public :
int nr bledu;
Blad(int nr = 0) { nr bledu = nr; };
};
void Funkcja(int arg)
{
try {
...
P
throw
Blad(3);
PP
...
}
catch ( Blad &Bl ) {
cout <<”Nr Bledu: ”
}
...
}
Zgłoszenie wyjątku powoduje zawsze
przekopiowanie parametru polecenia throw.
<< Bl. nr bledu << endl;
Programowanie obiektowe
Przestrzenie nazw, wyjątki, geneza języka C++
Przestrzenie nazw
Wyjątki
Geneza języka C++
Podstawowe idee
Jak to działa
Wyjątki standardowe
Ominięcie problemu kopiowania obiektu
class Blad {
Blad( Blad const & ) { } Kopiowanie obiektu jest niemożliwe (poza tą klasą)
public :
int nr bledu;
Blad(int nr = 0) { nr bledu = nr; };
};
void Funkcja(int arg)
{
try {
...
W tym przypadku kopiowany jest jedynie
throw new Blad(3);
wskaźnik.
...
}
catch ( const Blad∗ wB ) {
cout <<”Nr Bledu: ” << B-> nr bledu << endl;
delete wB;
}
...
}
Programowanie obiektowe
Przestrzenie nazw, wyjątki, geneza języka C++
Przestrzenie nazw
Wyjątki
Geneza języka C++
Podstawowe idee
Jak to działa
Wyjątki standardowe
Zwalnianie zasobów
void Funkcja(int arg)
{
FILE ∗wPolecenie = popen(”last -n 100”,”r”);
try {
...
...
}
catch ( . . . ) {
pclose(wProc);
throw ;
}
pclose(wProc);
W przypadku zasobów, które nie mają
charakteru lokalnego (np. dynamicznie
przydzielana
pamięć),
należy pamiętać,
// Powt”orne
zg”loszenie
wyj”atkuaby
zwalniać je w trakcie obsługi zgłoszonego
wyjątku.
}
Programowanie obiektowe
Przestrzenie nazw, wyjątki, geneza języka C++
Przestrzenie nazw
Wyjątki
Geneza języka C++
Podstawowe idee
Jak to działa
Wyjątki standardowe
Wyjątki inaczej
#include <iostream>
#include <vector>
#include <stdexcept>
//Tu znajduje się definicje wyjątku std::out of range
int PrzegladajTablice( const std::vector<int> &Tablica )
{
try {
for
(int ind = 0; ; ++ind) {
if (Tablica.at(ind) / 2) std::cout << Tablica.at(++ind) << std::endl;
}
}
catch (std::out of range) {
return 0;
}
return 0;
}
Zgłoszenie wyjątku może być sposobem na przerwanie
pętli w sytuacji, gdy bezpo”srednie sprawdzanie
warunku jest kłopotliwe w zapisie i sprawdzenie to
musiałoby występować w wielu miejscach.
Zgłoszenie wyjątku może być pomocne również w
przypadkach konstrukcji niestrukturalnych, w których
wykorzystywano instrukcję goto.
Programowanie obiektowe
Przestrzenie nazw, wyjątki, geneza języka C++
Przestrzenie nazw
Wyjątki
Geneza języka C++
Podstawowe idee
Jak to działa
Wyjątki standardowe
Konwersje typów w obsłudze wyjątków
class Wektor2f { // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
public :
...
Wektor2f( );
}; // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
class LZespolona { // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
public :
...
LZespolona( );
LZespolona(const Wektor2f &W);
}; // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Przy obsłudze wyjątków domyślne
int main()
konwersje nie są realizowane.
{
throw Wektor2f( );
}
try {
catch (LZespolona Z) {
// Czy wyjątek zgłoszony powyżej zostanie tu obsłużony?
...
}
}
Programowanie obiektowe
Przestrzenie nazw, wyjątki, geneza języka C++
Przestrzenie nazw
Wyjątki
Geneza języka C++
Podstawowe idee
Jak to działa
Wyjątki standardowe
Plan prezentacji
1
Przestrzenie nazw
Idea przestrzeni nazw
Podstawowe cechy przestrzeni nazw
2
Wyjątki
Podstawowe idee
Jak to działa
Wyjątki standardowe
3
Geneza języka C++
Historia narodzin
Motywacja
Chronologia
Programowanie obiektowe
Przestrzenie nazw, wyjątki, geneza języka C++
Przestrzenie nazw
Wyjątki
Geneza języka C++
Podstawowe idee
Jak to działa
Wyjątki standardowe
Wyjątki standardowe
Standardowe wyjątki zgłaszane przez
Nazwa
Zgłaszane przez
bad alloc
new
bad cast
dynamic cast
bad typeid
typeid
bad exception
specyfikacja wyjątku
język
Nagłówek
<new>
<typeinfo>
<typeinfo>
<exception>
Standardowe wyjątki zgłaszane przez bibliotekę
Nazwa
Zgłaszane przez
Nagłówek
out of range
at()
<stdexcept>
bitset< >::operator []() <stdexcept>
invalid argument
konstruktor bitset
<stdexcept>
overflow error
bitset< >::to ulong()
<stdexcept>
ios base::failure
ios base::clear()
<ios>
Programowanie obiektowe
Przestrzenie nazw, wyjątki, geneza języka C++
Przestrzenie nazw
Wyjątki
Geneza języka C++
Podstawowe idee
Jak to działa
Wyjątki standardowe
Ustawianie handlera dla obsługi wyjątków
unexpected handler set unexpected(unexpected handler fun) throw();
Programowanie obiektowe
Przestrzenie nazw, wyjątki, geneza języka C++
Przestrzenie nazw
Wyjątki
Geneza języka C++
Podstawowe idee
Jak to działa
Wyjątki standardowe
Wyjątki dla operacji wejścia/wyjścia
int main ( ) {
ifstream Plik;
int Liczba;
Plik.exceptions( ifstream ::failbit | ifstream ::badbit );
try {
Plik.open(”zbior liczba.txt”);
while (!Plik.eof()) Plik >> Liczba;
}
catch (ifstream ::failure) {
cout << ”Wyjątek operacji otwarcia lub czytania”;
}
return
0;
}
Programowanie obiektowe
Przestrzenie nazw, wyjątki, geneza języka C++
Przestrzenie nazw
Wyjątki
Geneza języka C++
Historia narodzin
Motywacja
Chronologia
Bjarne Stroustrup
Bjarne Stroustrup — (ur. 30.12.1950 – Århus, Dania) jest twórcą
języka C++ i nadal aktywnie uczestniczy w jego dalszym rozwoju.
Inspiracją do stworzenia tego typu języka były problemy i spostrzeżenia, których dokonał w trakcie swoich prac nad doktoratem w
Uniwersytecie Cambridge.
Programowanie obiektowe
Przestrzenie nazw, wyjątki, geneza języka C++
Przestrzenie nazw
Wyjątki
Geneza języka C++
Historia narodzin
Motywacja
Chronologia
Plan prezentacji
1
Przestrzenie nazw
Idea przestrzeni nazw
Podstawowe cechy przestrzeni nazw
2
Wyjątki
Podstawowe idee
Jak to działa
Wyjątki standardowe
3
Geneza języka C++
Historia narodzin
Motywacja
Chronologia
Programowanie obiektowe
Przestrzenie nazw, wyjątki, geneza języka C++
Przestrzenie nazw
Wyjątki
Geneza języka C++
Historia narodzin
Motywacja
Chronologia
Tło akcji
Bezpośrednim przyczynkiem do powstania koncepcji języka C++
były prace Stroustrupa w Cambridge nad doktoratem. W trakcie
swoich prac miał zbadać różne organizacje systemowego oprogramowania w systemach rozproszonych.
Programowanie obiektowe
Przestrzenie nazw, wyjątki, geneza języka C++
Przestrzenie nazw
Wyjątki
Geneza języka C++
Historia narodzin
Motywacja
Chronologia
Zdarzenia
Udana (w sensie konstrukcji aplikacji) realizacja symulatora
systemu rozproszenego z wykorzystaniem Simuli. Pojęcie klasy
w Simuli było bardzo pomocne na etapie projektu i
implmentacji.
Poważne problemy związne z wydajnością programów
napisanego w Simuli zmusza do poszukiwania bardziej
wydajnego narzędzia.
Traumatycznie bolesne doświadczenia związane z
koniecznością implementacji symulatora w oparciu o język
BCPL. Osiągnięta została bardzo dobra wydajność kosztem
wielu problemów przy realizacji implementacji.
Programowanie obiektowe
Przestrzenie nazw, wyjątki, geneza języka C++
Przestrzenie nazw
Wyjątki
Geneza języka C++
Historia narodzin
Motywacja
Chronologia
Zdarzenia
Udana (w sensie konstrukcji aplikacji) realizacja symulatora
systemu rozproszenego z wykorzystaniem Simuli. Pojęcie klasy
w Simuli było bardzo pomocne na etapie projektu i
implmentacji.
Poważne problemy związne z wydajnością programów
napisanego w Simuli zmusza do poszukiwania bardziej
wydajnego narzędzia.
Traumatycznie bolesne doświadczenia związane z
koniecznością implementacji symulatora w oparciu o język
BCPL. Osiągnięta została bardzo dobra wydajność kosztem
wielu problemów przy realizacji implementacji.
Programowanie obiektowe
Przestrzenie nazw, wyjątki, geneza języka C++
Przestrzenie nazw
Wyjątki
Geneza języka C++
Historia narodzin
Motywacja
Chronologia
Zdarzenia
Udana (w sensie konstrukcji aplikacji) realizacja symulatora
systemu rozproszenego z wykorzystaniem Simuli. Pojęcie klasy
w Simuli było bardzo pomocne na etapie projektu i
implmentacji.
Poważne problemy związne z wydajnością programów
napisanego w Simuli zmusza do poszukiwania bardziej
wydajnego narzędzia.
Traumatycznie bolesne doświadczenia związane z
koniecznością implementacji symulatora w oparciu o język
BCPL. Osiągnięta została bardzo dobra wydajność kosztem
wielu problemów przy realizacji implementacji.
Programowanie obiektowe
Przestrzenie nazw, wyjątki, geneza języka C++
Przestrzenie nazw
Wyjątki
Geneza języka C++
Historia narodzin
Motywacja
Chronologia
Zdarzenia
Udana (w sensie konstrukcji aplikacji) realizacja symulatora
systemu rozproszenego z wykorzystaniem Simuli. Pojęcie klasy
w Simuli było bardzo pomocne na etapie projektu i
implmentacji.
Poważne problemy związne z wydajnością programów
napisanego w Simuli zmusza do poszukiwania bardziej
wydajnego narzędzia.
Traumatycznie bolesne doświadczenia związane z
koniecznością implementacji symulatora w oparciu o język
BCPL. Osiągnięta została bardzo dobra wydajność kosztem
wielu problemów przy realizacji implementacji.
Programowanie obiektowe
Przestrzenie nazw, wyjątki, geneza języka C++
Przestrzenie nazw
Wyjątki
Geneza języka C++
Historia narodzin
Motywacja
Chronologia
Epilog
Po zakończeniu prac nad doktoratem Stroustrup postanawia stworzyć język programowania, który łączyłby koncepcje klas z Simuli
oraz elastyczność tego języka z efektywnością kodu języka BCPL.
Programowanie obiektowe
Przestrzenie nazw, wyjątki, geneza języka C++
Przestrzenie nazw
Wyjątki
Geneza języka C++
Historia narodzin
Motywacja
Chronologia
Plan prezentacji
1
Przestrzenie nazw
Idea przestrzeni nazw
Podstawowe cechy przestrzeni nazw
2
Wyjątki
Podstawowe idee
Jak to działa
Wyjątki standardowe
3
Geneza języka C++
Historia narodzin
Motywacja
Chronologia
Programowanie obiektowe
Przestrzenie nazw, wyjątki, geneza języka C++
Przestrzenie nazw
Wyjątki
Geneza języka C++
Historia narodzin
Motywacja
Chronologia
Niektóre spostrzeżenia
Kompilator Simuli dobrze wychwytywał błędy typu. Błędy te
przeważnie były albo wynikiem “głupich” pomyłek w trakcie
programowania albo też potknięć koncepcyjnych.
Ten drugi rodzaj błędów ma wręcz fundamentalne znaczenie
dla procesu projektowania i pisania programownia (autor kursu
pozwolił sobie tę uwagę wzmocnić).
Żaden inny prosty system sprawdzania ścisłej zgodności typów
nie dostarczył tego rodzaju wsparcia.
Przykładem może być system Pascala. Sprawiał on więcej
kłopotów niż pozwalał ich uniknąć. Zmuszał do modyfikacji
projektu, aby dostosować go do warunków narzuconych przez
implementację (co nie zmienia faktu, że jest to bardzo dobry język dla
początkowego kursu nauki informatyki – uwaga autora kursu).
Programowanie obiektowe
Przestrzenie nazw, wyjątki, geneza języka C++
Przestrzenie nazw
Wyjątki
Geneza języka C++
Historia narodzin
Motywacja
Chronologia
Niektóre spostrzeżenia
Kompilator Simuli dobrze wychwytywał błędy typu. Błędy te
przeważnie były albo wynikiem “głupich” pomyłek w trakcie
programowania albo też potknięć koncepcyjnych.
Ten drugi rodzaj błędów ma wręcz fundamentalne znaczenie
dla procesu projektowania i pisania programownia (autor kursu
pozwolił sobie tę uwagę wzmocnić).
Żaden inny prosty system sprawdzania ścisłej zgodności typów
nie dostarczył tego rodzaju wsparcia.
Przykładem może być system Pascala. Sprawiał on więcej
kłopotów niż pozwalał ich uniknąć. Zmuszał do modyfikacji
projektu, aby dostosować go do warunków narzuconych przez
implementację (co nie zmienia faktu, że jest to bardzo dobry język dla
początkowego kursu nauki informatyki – uwaga autora kursu).
Programowanie obiektowe
Przestrzenie nazw, wyjątki, geneza języka C++
Przestrzenie nazw
Wyjątki
Geneza języka C++
Historia narodzin
Motywacja
Chronologia
Niektóre spostrzeżenia
Kompilator Simuli dobrze wychwytywał błędy typu. Błędy te
przeważnie były albo wynikiem “głupich” pomyłek w trakcie
programowania albo też potknięć koncepcyjnych.
Ten drugi rodzaj błędów ma wręcz fundamentalne znaczenie
dla procesu projektowania i pisania programownia (autor kursu
pozwolił sobie tę uwagę wzmocnić).
Żaden inny prosty system sprawdzania ścisłej zgodności typów
nie dostarczył tego rodzaju wsparcia.
Przykładem może być system Pascala. Sprawiał on więcej
kłopotów niż pozwalał ich uniknąć. Zmuszał do modyfikacji
projektu, aby dostosować go do warunków narzuconych przez
implementację (co nie zmienia faktu, że jest to bardzo dobry język dla
początkowego kursu nauki informatyki – uwaga autora kursu).
Programowanie obiektowe
Przestrzenie nazw, wyjątki, geneza języka C++
Przestrzenie nazw
Wyjątki
Geneza języka C++
Historia narodzin
Motywacja
Chronologia
Niektóre spostrzeżenia
Kompilator Simuli dobrze wychwytywał błędy typu. Błędy te
przeważnie były albo wynikiem “głupich” pomyłek w trakcie
programowania albo też potknięć koncepcyjnych.
Ten drugi rodzaj błędów ma wręcz fundamentalne znaczenie
dla procesu projektowania i pisania programownia (autor kursu
pozwolił sobie tę uwagę wzmocnić).
Żaden inny prosty system sprawdzania ścisłej zgodności typów
nie dostarczył tego rodzaju wsparcia.
Przykładem może być system Pascala. Sprawiał on więcej
kłopotów niż pozwalał ich uniknąć. Zmuszał do modyfikacji
projektu, aby dostosować go do warunków narzuconych przez
implementację (co nie zmienia faktu, że jest to bardzo dobry język dla
początkowego kursu nauki informatyki – uwaga autora kursu).
Programowanie obiektowe
Przestrzenie nazw, wyjątki, geneza języka C++
Przestrzenie nazw
Wyjątki
Geneza języka C++
Historia narodzin
Motywacja
Chronologia
Niektóre spostrzeżenia
Pojęcie klasy było zasadniczym elementem różniącym
„sztywny” Pascal od „elastycznej” Simuli.
Wyczerpujące sprawdzanie zgodności typów w Simuli
sprawiało, że liczba problemów i błędów nie wzrastała szybciej
niż liniowo wraz ze wzrostem programu.
Programowanie obiektowe
Przestrzenie nazw, wyjątki, geneza języka C++
Przestrzenie nazw
Wyjątki
Geneza języka C++
Historia narodzin
Motywacja
Chronologia
Niektóre spostrzeżenia
Pojęcie klasy było zasadniczym elementem różniącym
„sztywny” Pascal od „elastycznej” Simuli.
Wyczerpujące sprawdzanie zgodności typów w Simuli
sprawiało, że liczba problemów i błędów nie wzrastała szybciej
niż liniowo wraz ze wzrostem programu.
Programowanie obiektowe
Przestrzenie nazw, wyjątki, geneza języka C++
Przestrzenie nazw
Wyjątki
Geneza języka C++
Historia narodzin
Motywacja
Chronologia
Plan prezentacji
1
Przestrzenie nazw
Idea przestrzeni nazw
Podstawowe cechy przestrzeni nazw
2
Wyjątki
Podstawowe idee
Jak to działa
Wyjątki standardowe
3
Geneza języka C++
Historia narodzin
Motywacja
Chronologia
Programowanie obiektowe
Przestrzenie nazw, wyjątki, geneza języka C++
Przestrzenie nazw
Wyjątki
Geneza języka C++
Historia narodzin
Motywacja
Chronologia
Ważniejsze daty
1979 – (Maj) Początek prac na C z Klasami. (Październik) Oddanie
do użytku pierwszej implementacji tego języka.
1983 – (Sierpień) Oddanie do użytku pierwszej implementacji języka
C++. (Grudzień) Powstanie nazwy C++.
1985 – (Luty) Powstanie pierwszej wersji języka C++ (wersja E) do
użytku zewnętrznego. (Październik) Ukazanie się pierwszego
wydania książki “Język C++”.
1987 – (Grudzień) Ukazanie się kompilatora GNU C++.
Programowanie obiektowe
Przestrzenie nazw, wyjątki, geneza języka C++
Przestrzenie nazw
Wyjątki
Geneza języka C++
Historia narodzin
Motywacja
Chronologia
Ważniejsze daty
1979 – (Maj) Początek prac na C z Klasami. (Październik) Oddanie
do użytku pierwszej implementacji tego języka.
1983 – (Sierpień) Oddanie do użytku pierwszej implementacji języka
C++. (Grudzień) Powstanie nazwy C++.
1985 – (Luty) Powstanie pierwszej wersji języka C++ (wersja E) do
użytku zewnętrznego. (Październik) Ukazanie się pierwszego
wydania książki “Język C++”.
1987 – (Grudzień) Ukazanie się kompilatora GNU C++.
Programowanie obiektowe
Przestrzenie nazw, wyjątki, geneza języka C++
Przestrzenie nazw
Wyjątki
Geneza języka C++
Historia narodzin
Motywacja
Chronologia
Ważniejsze daty
1979 – (Maj) Początek prac na C z Klasami. (Październik) Oddanie
do użytku pierwszej implementacji tego języka.
1983 – (Sierpień) Oddanie do użytku pierwszej implementacji języka
C++. (Grudzień) Powstanie nazwy C++.
1985 – (Luty) Powstanie pierwszej wersji języka C++ (wersja E) do
użytku zewnętrznego. (Październik) Ukazanie się pierwszego
wydania książki “Język C++”.
1987 – (Grudzień) Ukazanie się kompilatora GNU C++.
Programowanie obiektowe
Przestrzenie nazw, wyjątki, geneza języka C++
Przestrzenie nazw
Wyjątki
Geneza języka C++
Historia narodzin
Motywacja
Chronologia
Ważniejsze daty
1979 – (Maj) Początek prac na C z Klasami. (Październik) Oddanie
do użytku pierwszej implementacji tego języka.
1983 – (Sierpień) Oddanie do użytku pierwszej implementacji języka
C++. (Grudzień) Powstanie nazwy C++.
1985 – (Luty) Powstanie pierwszej wersji języka C++ (wersja E) do
użytku zewnętrznego. (Październik) Ukazanie się pierwszego
wydania książki “Język C++”.
1987 – (Grudzień) Ukazanie się kompilatora GNU C++.
Programowanie obiektowe
Przestrzenie nazw, wyjątki, geneza języka C++
Przestrzenie nazw
Wyjątki
Geneza języka C++
Historia narodzin
Motywacja
Chronologia
Ważniejsze daty
1989 – (Grudzień) Powstanie zespołu ANSI X3J16 do spraw normalizacji języka C++.
1990 – (Maj) Powstawnie w firmie Borland pierwszej implementacji
języka C++.
Lipiec: Przyjęcie koncepcji szablonów.
Listopad: Przyjęcie koncepcji wyjątków.
1990 – Wydanie książki: Ellis Margaret A., Stroustrup B.
„The Annotated C++ Reference Manual ”,
Reading, MA, Addison-Wesley 1990.
Stał się on nieformalnym standardem języka, określanego jako
C++ ARM.
Programowanie obiektowe
Przestrzenie nazw, wyjątki, geneza języka C++
Przestrzenie nazw
Wyjątki
Geneza języka C++
Historia narodzin
Motywacja
Chronologia
Ważniejsze daty
1989 – (Grudzień) Powstanie zespołu ANSI X3J16 do spraw normalizacji języka C++.
1990 – (Maj) Powstawnie w firmie Borland pierwszej implementacji
języka C++.
Lipiec: Przyjęcie koncepcji szablonów.
Listopad: Przyjęcie koncepcji wyjątków.
1990 – Wydanie książki: Ellis Margaret A., Stroustrup B.
„The Annotated C++ Reference Manual ”,
Reading, MA, Addison-Wesley 1990.
Stał się on nieformalnym standardem języka, określanego jako
C++ ARM.
Programowanie obiektowe
Przestrzenie nazw, wyjątki, geneza języka C++
Przestrzenie nazw
Wyjątki
Geneza języka C++
Historia narodzin
Motywacja
Chronologia
Ważniejsze daty
1989 – (Grudzień) Powstanie zespołu ANSI X3J16 do spraw normalizacji języka C++.
1990 – (Maj) Powstawnie w firmie Borland pierwszej implementacji
języka C++.
Lipiec: Przyjęcie koncepcji szablonów.
Listopad: Przyjęcie koncepcji wyjątków.
1990 – Wydanie książki: Ellis Margaret A., Stroustrup B.
„The Annotated C++ Reference Manual ”,
Reading, MA, Addison-Wesley 1990.
Stał się on nieformalnym standardem języka, określanego jako
C++ ARM.
Ellis Margaret została zatrudniona przez AT&T specjalnie do opisu
języka C++.
Programowanie obiektowe
Przestrzenie nazw, wyjątki, geneza języka C++
Przestrzenie nazw
Wyjątki
Geneza języka C++
Historia narodzin
Motywacja
Chronologia
Ważniejsze daty
1992 – (Luty) Powstanie pierwszej implementacji języka C++ (zawierającej szablony i wyjątki) w firmie DEC. (Marzec) Powstanie
pierwszej implementacji języka C++ w firmie Microsoft. (Maj)
Powstanie pierwszej implementacji języka C++ w firmie IBM.
1993 – Marzec: Przyjęcie koncepcji identyfikowania typu podczas wykonywania programu.
Lipiec: Przyjęcie koncepcji przestrzeni nazw.
1998 – Przyjęcie standardu ANSI/ISO języka C++.
Programowanie obiektowe
Przestrzenie nazw, wyjątki, geneza języka C++
Przestrzenie nazw
Wyjątki
Geneza języka C++
Historia narodzin
Motywacja
Chronologia
Ważniejsze daty
1992 – (Luty) Powstanie pierwszej implementacji języka C++ (zawierającej szablony i wyjątki) w firmie DEC. (Marzec) Powstanie
pierwszej implementacji języka C++ w firmie Microsoft. (Maj)
Powstanie pierwszej implementacji języka C++ w firmie IBM.
1993 – Marzec: Przyjęcie koncepcji identyfikowania typu podczas wykonywania programu.
Lipiec: Przyjęcie koncepcji przestrzeni nazw.
1998 – Przyjęcie standardu ANSI/ISO języka C++.
Programowanie obiektowe
Przestrzenie nazw, wyjątki, geneza języka C++
Przestrzenie nazw
Wyjątki
Geneza języka C++
Historia narodzin
Motywacja
Chronologia
Ważniejsze daty
1992 – (Luty) Powstanie pierwszej implementacji języka C++ (zawierającej szablony i wyjątki) w firmie DEC. (Marzec) Powstanie
pierwszej implementacji języka C++ w firmie Microsoft. (Maj)
Powstanie pierwszej implementacji języka C++ w firmie IBM.
1993 – Marzec: Przyjęcie koncepcji identyfikowania typu podczas wykonywania programu.
Lipiec: Przyjęcie koncepcji przestrzeni nazw.
1998 – Przyjęcie standardu ANSI/ISO języka C++.
Programowanie obiektowe
Przestrzenie nazw, wyjątki, geneza języka C++
Przestrzenie nazw
Wyjątki
Geneza języka C++
Historia narodzin
Motywacja
Chronologia
Genealogia
Programowanie obiektowe
Przestrzenie nazw, wyjątki, geneza języka C++
Przestrzenie nazw
Wyjątki
Geneza języka C++
Historia narodzin
Motywacja
Chronologia
Chronologia wprowadzanych standardów
C++98
1998 – (ISO/IEC 14882:2011) Przyjęcie standardu
ANSI/ISO języka C++.
2003 – (ISO/IEC 14882:2003) Korekcja wcześniejszego standardu.
2007 – (ISO/IEC TR 19768:2007) Oparty na technicznym raporcie „Library Technical Report 1 ”, który wprowadzał
rozszerzenia do biblioteki standardowej.
2011 – (ISO/IEC 14882:2011) 11 sierpnia 2011: Nowy standard
języka C++ wcześniej roboczo określany jako C++0x.
Programowanie obiektowe
Przestrzenie nazw, wyjątki, geneza języka C++
Przestrzenie nazw
Wyjątki
Geneza języka C++
Historia narodzin
Motywacja
Chronologia
Chronologia wprowadzanych standardów
C++98
1998 – (ISO/IEC 14882:2011) Przyjęcie standardu
ANSI/ISO języka C++.
C++03
2003 – (ISO/IEC 14882:2003) Korekcja wcześniejszego standardu.
2007 – (ISO/IEC TR 19768:2007) Oparty na technicznym raporcie „Library Technical Report 1 ”, który wprowadzał
rozszerzenia do biblioteki standardowej.
2011 – (ISO/IEC 14882:2011) 11 sierpnia 2011: Nowy standard
języka C++ wcześniej roboczo określany jako C++0x.
Programowanie obiektowe
Przestrzenie nazw, wyjątki, geneza języka C++
Przestrzenie nazw
Wyjątki
Geneza języka C++
Historia narodzin
Motywacja
Chronologia
Chronologia wprowadzanych standardów
C++98
1998 – (ISO/IEC 14882:2011) Przyjęcie standardu
ANSI/ISO języka C++.
C++03
2003 – (ISO/IEC 14882:2003) Korekcja wcześniejszego standardu.
C++TR1
2007 – (ISO/IEC TR 19768:2007) Oparty na technicznym raporcie „Library Technical Report 1 ”, który wprowadzał
rozszerzenia do biblioteki standardowej.
2011 – (ISO/IEC 14882:2011) 11 sierpnia 2011: Nowy standard
języka C++ wcześniej roboczo określany jako C++0x.
Programowanie obiektowe
Przestrzenie nazw, wyjątki, geneza języka C++
Przestrzenie nazw
Wyjątki
Geneza języka C++
Historia narodzin
Motywacja
Chronologia
Chronologia wprowadzanych standardów
C++98
1998 – (ISO/IEC 14882:2011) Przyjęcie standardu
ANSI/ISO języka C++.
C++03
2003 – (ISO/IEC 14882:2003) Korekcja wcześniejszego standardu.
C++TR1
2007 – (ISO/IEC TR 19768:2007) Oparty na technicznym raporcie „Library Technical Report 1 ”, który wprowadzał
rozszerzenia do biblioteki standardowej.
C++11
2011 – (ISO/IEC 14882:2011) 11 sierpnia 2011: Nowy standard
języka C++ wcześniej roboczo określany jako C++0x.
Programowanie obiektowe
Przestrzenie nazw, wyjątki, geneza języka C++
Przestrzenie nazw
Wyjątki
Geneza języka C++
Historia narodzin
Motywacja
Chronologia
Dalszy rozwój
C++14
2014 – usunięcie błędów i uzupełnienie wcześniejszego standardu.
C++14 pełni rolę korekty do C++11. W niewielkim tylko
stopniu rozszerzy koncepcje standardu C++11.
C++17
2017 – Będzie miał charakter zasadniczego rozszerzenia w stosunku do standardu C++11.
Programowanie obiektowe
Przestrzenie nazw, wyjątki, geneza języka C++
Przestrzenie nazw
Wyjątki
Geneza języka C++
Historia narodzin
Motywacja
Chronologia
Dalszy rozwój
C++14
2014 – usunięcie błędów i uzupełnienie wcześniejszego standardu.
C++14 pełni rolę korekty do C++11. W niewielkim tylko
stopniu rozszerzy koncepcje standardu C++11.
C++17
2017 – Będzie miał charakter zasadniczego rozszerzenia w stosunku do standardu C++11.
Programowanie obiektowe
Przestrzenie nazw, wyjątki, geneza języka C++
Przestrzenie nazw
Wyjątki
Geneza języka C++
Historia narodzin
Motywacja
Chronologia
Dalszy rozwój
C++14
2014 – usunięcie błędów i uzupełnienie wcześniejszego standardu.
C++14 pełni rolę korekty do C++11. W niewielkim tylko
stopniu rozszerzy koncepcje standardu C++11.
C++17
2017 – Będzie miał charakter zasadniczego rozszerzenia w stosunku do standardu C++11.
http://isocpp.org/std/status
Programowanie obiektowe
Przestrzenie nazw, wyjątki, geneza języka C++
Przestrzenie nazw
Wyjątki
Geneza języka C++
Historia narodzin
Motywacja
Chronologia
Wzajemne powiązania
Kilka faktów:
Słowo kluczowe class pochodzi z Simuli (podobnie jak
notacja wskaźnika this).
Zapis funkcja(void) w ANSI C pochodzi z języka C z
Klasami.
Programowanie obiektowe
Przestrzenie nazw, wyjątki, geneza języka C++
Przestrzenie nazw
Wyjątki
Geneza języka C++
Historia narodzin
Motywacja
Chronologia
Wzajemne powiązania
Kilka faktów:
Słowo kluczowe class pochodzi z Simuli (podobnie jak
notacja wskaźnika this).
Zapis funkcja(void) w ANSI C pochodzi z języka C z
Klasami.
Programowanie obiektowe
Przestrzenie nazw, wyjątki, geneza języka C++
Przestrzenie nazw
Wyjątki
Geneza języka C++
Historia narodzin
Motywacja
Chronologia
Wzajemne powiązania
Kilka faktów:
Słowo kluczowe class pochodzi z Simuli (podobnie jak
notacja wskaźnika this).
Zapis funkcja(void) w ANSI C pochodzi z języka C z
Klasami.
Programowanie obiektowe
Przestrzenie nazw, wyjątki, geneza języka C++
Przestrzenie nazw
Wyjątki
Geneza języka C++
Historia narodzin
Motywacja
Chronologia
Dlaczego C
C jest językiem elastycznym
C jest językiem wydajnym
C jest językiem szeroko dostępnym
C jest językiem przenośnym
Programowanie obiektowe
Przestrzenie nazw, wyjątki, geneza języka C++
Przestrzenie nazw
Wyjątki
Geneza języka C++
Historia narodzin
Motywacja
Chronologia
Dlaczego C
C jest językiem elastycznym – nie ma wewnętrznych
ograniczeń wykluczających możliwość napisania jakiegoś
rodzaju programu, tzn. można korzystać w nim z większości
technik programowania.
C jest językiem wydajnym
C jest językiem szeroko dostępnym
C jest językiem przenośnym
Programowanie obiektowe
Przestrzenie nazw, wyjątki, geneza języka C++
Przestrzenie nazw
Wyjątki
Geneza języka C++
Historia narodzin
Motywacja
Chronologia
Dlaczego C
C jest językiem elastycznym
C jest językiem wydajnym – semantyka języka znajduje się na
“niskim poziomie”, tzn. podstawowe pojęcia języka
odzwierciedlają podstawowe pojęcia tradycyjnego komputera.
C jest językiem szeroko dostępnym
C jest językiem przenośnym
Programowanie obiektowe
Przestrzenie nazw, wyjątki, geneza języka C++
Przestrzenie nazw
Wyjątki
Geneza języka C++
Historia narodzin
Motywacja
Chronologia
Dlaczego C
C jest językiem elastycznym
C jest językiem wydajnym
C jest językiem szeroko dostępnym – implementacje tego
języka istnieją zarówno dla mikrokomputerów jak też dla
dużych superkomputerów.
C jest językiem przenośnym
Programowanie obiektowe
Przestrzenie nazw, wyjątki, geneza języka C++
Przestrzenie nazw
Wyjątki
Geneza języka C++
Historia narodzin
Motywacja
Chronologia
Dlaczego C
C jest językiem elastycznym
C jest językiem wydajnym
C jest językiem szeroko dostępnym
C jest językiem przenośnym – programy napisane w C
zazwyczaj nie można automatycznie przenosić z jednego
systemu operacyjnego do drugiego. Jednak przenośność z
uwzględnieniem odpowiednich uwarunkowań jest możliwa.
Programowanie obiektowe
Przestrzenie nazw, wyjątki, geneza języka C++
Przestrzenie nazw
Wyjątki
Geneza języka C++
Koniec prezentacji
Dziękuję za uwagę
Programowanie obiektowe
Przestrzenie nazw, wyjątki, geneza języka C++