Programowanie obiektowe C++ Programowanie zorientowane obiektowo
Wykład 1 Witold Dyrka
[email protected] 8/10/2012
Prawa autorskie itp. Wiele slajdów do tego wykładu powstało w oparciu o: ●
●
slajdy Bjarne Stroustrupa do kursu Foundations of Engineering II (C++) prowadzonego w Texas A&M University http://www.stroustrup.com/Programming przykładowe programy Jerzego Grębosza do książki Symfonia C++ Standard http://www.ifj.edu.pl/~grebosz/symfonia_c++_std_p.html
Dziękuję dr inż. lek. med. Marcinowi Masalskiemu za udostępnienie materiałów do wykładu w roku ak. 2010/11
Program wykładów 1. Wprowadzenie. Obsługa błędów. Klasy
(8/10)
2. Abstrakcja i enkapsulacja: klasy i struktury.
(15/10)
3. Polimorfizm: przeładowanie funkcji i operatorów. Konwersje
(22/10)
4. Zarządzanie pamięcią: konstruktory, destruktory, pryzpisanie
(29/10)
5. Dziedziczenie. Polimorfizm dynamiczny 6. Programowanie uogólnione: szablony
(5/11) (12/11)
Materiały Literatura ●
●
●
Bjarne Stroustrup. Programowanie: Teoria i praktyka z wykorzystaniem C++. Helion (2010) Jerzy Grębosz. Symfonia C++ standard. Edition 2000 (2008) Dowolny podręcznik programowania zorientowanego obiektowo w języku C++ w standardzie ISO 98
Środowisko programistyczne ●
Microsoft Visual C++ (rekomendowane)
●
Dowolne środowisko korzystające z GCC
Warunki zaliczenia ●
Kolokwium zaliczeniowe ●
19/11/2012 w terminie wykładu –
●
●
jedno kolokwium poprawkowe – w tyg. 26-30/11/2012
zaliczenie od >50%
Uwaga! ●
jeśli ktoś ma braki z programowania
●
zapraszam na wykład pt. Języki programowania –
w pt o 13.15 do sali 322/A-1
Zasady ●
Nie toleruję plagiatów ●
●
Nie toleruję ściągania ●
●
dot. programów na laboratorium
dot. kolokwium i sprawdzianów na laboratorium
Zachęcam do korzystania z konsultacji ●
ze mną: PN 10-12, ŚR 11.30-12.30, PT 16-17 pok. 118/D-1
●
z innymi Prowadzącymi
●
pomiędzy sobą
Plan na dziś ●
●
Błędy ●
Źródła i rodzaje
●
Mechanizm wyjątków
●
Odrobaczanie
Klasy
Błędy w programie ●
●
●
Podstawowym celem programisty jest poprawność kodu “ … uświadomiłem sobie, że od teraz dużą część mojego życia spędzę szukając i poprawiając moje własne błędy.” Maurice Wilkes “Przypuszczam, że unikanie, znajdowanie i poprawianie błędów stanowi 95% lub więcej wysiłku w poważnym tworzeniu oprogramowania.” Bjarne Stroustrup
Błędy w programie ●
Źródła błędów
●
Rodzaje błędów
●
Sprawdzanie argumentów funkcji ●
Raportowanie błędów
●
Wykrywanie błędów
●
Wyjątki
●
Debugowanie (odrobaczanie)
●
Testowanie
Źródła błędów ●
Słaba specyfikacja (80% dużych projektów wysypuje się przez złą specyfikację)
●
Niekompletny program
●
Nieoczekiwane argumenty funkcji (np. funkcja sqrt() nie przyjmie wartości -1)
●
Niespodziewane dane wejściowe (np. uszkodzony plik z danymi)
●
Niespodziewany stan
●
Błędy logiczne
Rodzaje błędów ●
Błędy kompilacji ●
błędy typów
●
błędy składni
●
Błędy konsolidacji
●
Błędy czasu wykonania (ang. run-time)
●
●
wykryte przez system („program się wysypał”)
●
wykryte przez biblioteki (wyjątki)
●
wykryte przez kod użytkownika
Błędy logiczne ●
wykryte przez programistę/testera
Oczekiwania Każdy program 1)Powinien wytworzyć pożądany wynik dla każdego poprawnego wejścia 2)Powinien zwrócić sensowny komunikat o błędzie dla niepoprawnych danych wejściowych
Twój program 3)Nie musi przejmować się błędami sprzętu 4)Nie musi przejmować się błędami systemu 5)Może zakończyć działanie po znalezieniu błędu
Błędy argumentów funkcji Kompilator sprawdza liczbę i typy argumentów funkcji: int pole(int wysokosc, int szerokosc) { return wysokosc*szerokosc; } int x1 = pole(7);
// błąd kompilacji: zła liczba argumentów
int x2 = pole("siedem", 2);
// błąd kompilacji: argument 1 ma zły typ
int x3 = pole(7, 10);
// ok
int x5 = pole(7.5, 10);
// działa, ale: 7.5 zostanie obcięte do 7; // większość kompilatorów zgłosi ostrzeżenie
int x = pole(10, -7);
// typy się zgadzają, ale wartość -7 nie ma sensu!!!
Obsługa błędów int a = 10; int b = -7; int x = pole(a, b);
// typy się zgadzają, ale wartość -7 nie ma sensu!!!
●
Tym błędem musi zająć się programista
●
Dwie strategie sprawdzania poprawności argumentów ●
sprawdza wywołujący funkcję + wie jak obsłużyć błąd - musi znać specyfikację funkcji, dłuższy i nieczytelny kod
●
sprawdza funkcja wywoływana + prostszy, bardziej elegancki kod - nie wie co zrobić z błędem
●
Pomysł: funkcja zwraca informacje o błędzie, a wywołujący decyduje co z tym zrobić
Raportowanie błedów (1) ●
Zwracanie wartości błędu int pole(int wysokosc, int szerokosc)
// zwraca -1 jeśli błędne dane
{ if(wysokosc