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