Programowanie obiektowe C++ Programowanie zorientowane obiektowo
Wykład 1 Witold Dyrka
[email protected] 10/10/2011
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 0. Bezpieczeństwo typów. Kontener vector. Obsługa błędów (26/09/2011) 1. Abstrakcja i enkapsulacja: klasy i struktury. Typ wyliczeniowy (10/10/2011) 2. Polimorfizm: przeładowanie funkcji i operatorów (24/10/2011) 3. Zarządzanie pamięcią: konstruktory, destruktory. Konwersje (21/11/2011) 4. Dziedziczenie (05/11/2011) 5. Programowanie uogólnione: szablony (19/12/2011) 6. Projektowanie programów orientowanych obiektowo (02/01/2012) 7. Kolokwium zaliczeniowe (16/01/2012)
Program laboratorium ●
Techniki programowania orientowanego obiektowo w języku C++ ●
Enkapsulacja i polimorfizm (lista 1)
●
Zarządzanie pamięcią (lista 2)
●
Dziedziczenie i abstrakcja (lista 3)
●
Programowanie uogólnione (lista 4?)
●
Obsługa błędów i odrobaczanie programu
●
Korzystanie z biblioteki standardowej
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 ●
16/01/2012 w czasie wykładu –
●
●
jedno kolokwium poprawkowe
zaliczenie od >50%
Uwaga! ●
jeśli ktoś ma braki z programowania
●
zapraszam na wykład pt. Języki programowania –
w środę o 18.55 do sali 1.30/C-13
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ą: PT 10-11, pok. 118A/D-1
●
pomiędzy sobą
Plan na dziś ●
Klasy ● ● ● ● ●
●
Implementacja i interfejs Konstruktory Funkcje składowe Składowe stałe Składowe statyczne
Typ wyliczeniowy
Klasy ●
Klasa bezpośrednio reprezentuje pojęcie w programie ●
Jeśli o „czymś” można myśleć jako o oddzielnym bycie, to prawdopodobnie może to być klasą lub obiektem klasy Np. wektor, macierz, strumień wejściowy, łańcuch znakowy, szybka transformata Fouriera, kontroler zaworu, ramię robota, sterownik urządzenia, obraz na ekranie, okno dialogowe, wykres, okno, odczyt temperatur, zegar
●
●
Klasa jest typem zdefiniowanym przez użytkownika, który określa jak tworzyć i używać obiekty tego typu Klasy po raz pierwszy wprowadzono w języku Simula67
Klasa, obiekt, zmienna class Pralka { // ta klasa nazywa się Pralka // Ciało klasy // ... }; Pralka czerwona;
// definicja zmiennej czerwona typu Pralka // powstaje nowy obiekt, który otrzymuje nazwę czerwona
int numer;
// definicja zmiennej numer typu int // powstaje nowy obiekt, który otrzymuje nazwę numer
Pralka *wskaznik;
// definicja wskaznika na typ Pralka
Pralka &ruda = czerwona;
// definicja referencji ruda do zmiennej czerwona
Słowniczek: Klasa – typ danych użytkownika Obiekt – miejsce w pamięci przechowujące dane określonego typu Zmienna – nazwany obiekt
Dane składowe klasy class Pralka { public:
// ta klasa nazywa się Pralka
// … int nr_programu; // dane składowe (przechowują informacje) float temperatura_prania; string model; // … }; czerwona.model = “Frania”; // dostęp do danej składowej model zmiennej czerwona wskaznik = &czerwona;
// ustawienie wskaznika na zmiennej czerwona
wskaznik->model = “Frania”;
// dostęp przez wskaźnik
ruda.model = “Frania”;
// dostęp przez referencję
Funkcje składowe klasy (metody) class Pralka { // ta klasa nazywa się Pralka public: int pierz(int program); // funkcje składowe (robią coś z danymi składowymi) void wiruj(int minuty); int nr_programu; // dane składowe (przechowują informacje) float temperatura_prania; string model; float krochmalenie(void);
// znowu funkcja składowa
};
int x = czerwona.pierz(1);
// wywołanie funkcji składowej pierz() dla czerwona
int y = ruda.pierz(2);
// wywołanie funkcji składowej pierz() dla referencji ruda
wskaznik = &czerwona; int z = wskaznik->pierz(3);
// wywołanie funkcji składowej pierz() dla wskaznika
Definiowanie funkcji składowych wewnątrz ciała funkcji – inline class osoba { public: string nazwisko; int wiek; // Definicje funkcji składowych: ==================================== void zapamietaj(const string &napis, int lata) { nazwisko = napis; wiek = lata; } // ------------------------------------------------------------------------------------------------------------void wypisz() { cout