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