Pobieranie prezentacji. Proszę czekać

Pobieranie prezentacji. Proszę czekać

Programowanie obiektowe dr hab. inż. Jerzy Kisilewicz, prof. Katedra Systemów i Sieci Komputerowych www.kssk.pwr.wroc.pl C-3, pok. 107 PO1-1 / 30 Konsultacje.

Podobne prezentacje


Prezentacja na temat: "Programowanie obiektowe dr hab. inż. Jerzy Kisilewicz, prof. Katedra Systemów i Sieci Komputerowych www.kssk.pwr.wroc.pl C-3, pok. 107 PO1-1 / 30 Konsultacje."— Zapis prezentacji:

1 Programowanie obiektowe dr hab. inż. Jerzy Kisilewicz, prof. Katedra Systemów i Sieci Komputerowych C-3, pok. 107 PO1-1 / 30 Konsultacje w C-3, pok. 107: Wt, godz. 09:00 – 11:00 Sr, godz. 11:00 – 13:00

2 Wymagania 1.Zdanie egzaminu testowego, 2.Zaliczenie laboratorium, 3.Obecność na wykładach ogłoszonych jako obowiązkowe. 1.Punkty z testu egzaminacyjnego, 2.Punkty z laboratorium, 3.Punkty za obecności i z kartkówek na wykładach. Co wpływa na ocenę 1.Nieobecność na 30% wykładów ogłoszonych jako obowiązkowe powoduje brak zaliczenia przedmiotu. 2.Ocenę określa lokata na liście uszeregowanej według sumy punktów. Progi odcinają kolejno 10%-5, 25%-4,5, 30%-4, 25%-3,5 i 10%-3 z osób, które zaliczyły przedmiot. Uwagi PO1-2 / 30

3 Literatura 1.Grębosz J., Symfonia C++ standard. Programowanie w języku C++ orientowane obiektowo, Kraków, Oficyna Kallimach, Kisilewicz J., Język C++. Programowanie obiektowe, Wrocław, OWPWr, Wileczek R., Microsoft Visual C : tworzenie aplikacji dla Windows, Gliwice, Helion, Kisilewicz J., Zaharieva-Stoyanova E., Ćwiczenia laboratoryjne w Visual C++ 6, Wrocław, OWPWr, Stroustrup B., Język C++, Warszawa, WNT, Mueller J.P., Język programowania Visual C++ 6 od podstaw, Poznań, Nakom, Martin J., Odell J.J., Podstawy metod obiektowych, WNT, Literatura pomocnicza PO1-3 / 30

4 Tematyka wykładów 1.Podstawy C++ i cechy programowania obiektowego. 2.Klasa Zesp i jej hermetyzacja. 3.System klas strumieniowych. 4.Klasa Vec – przykład klasy z alokacją pamięci. 5.Podział operatorów i ich przeciążanie. 6.Definiowanie klas pochodnych, dziedziczenie. 7.Dziedziczenie sekwencyjne i wielobazowe. 8.Funkcje polimorficzne i klasy abstrakcyjne. 9.Programowanie zdarzeniowe pod Windows. 10.Aplikacje dialogowe. 11.Aplikacje SDI. 12.Podstawy UML – diagramy klas. 13.Wybrane zagadnienia: obsługa wyjątków. 14.Wzorce klas i funkcji, dyrektywy preprocesora. PO1-4 / 30

5 e-Katedra SSK PO1-5 / 30 Dla studentów e-KSSK Zacznij teraz od utworzenia nowego konta 1.Zalogować się w e-Katedra SSK (system Moodle). 2.Zapisać się na kurs „Programowanie obiektowe”, oraz „Programowanie obiektowe – laboratorium” hasło: INF2W#JK 3.Edytować swój profil – wpisać swój adres . Materiały dydaktyczne

6 ePortal zdalnej edukacji PO1-5 / 30 Studenci->Studia->E-learning->ePortal Politechniki Wrocławskiej Dla nowych użytkowników ePortalu PWr 1.Zalogować się w ePortalu PWr (system Moodle). 2.Zapisać się na kurs „Programowanie obiektowe” (w kategorii Informatyka/Programowanie), oraz „Programowanie obiektowe – laboratorium” hasło: INF2W#JK 3.Edytować swój profil – wpisać swój adres .

7 Wykład 1 Rozszerzenia C++ 1.Wstęp do języka C++ 2.Obiekty strumieniowe cin, cout, cerr 3.Od struktury w C do klasy w C++ 4.Podejście obiektowe PO1-6 / 30

8 Od C do C++ Wstęp do języka C++ PO1-7 / 30

9 Słowa kluczowe C++ PO1-8 / 30 anddynamic_castoperatortrue and_eqexplicitortry asmexportor_eqtypeid bitandfalseprivatetypename bitorfriendprotectedusing boolinlinepublicvirtual catchmutablereinterpret_castwchar_t classnamespacestatic_castxor complnewtemplatexor_eq const_castnotthis deletenot_eqthrow

10 Rozszerzenia C++ Instrukcje deklaracyjne Zmienne referencyjne Operatory new i delete Obiektowe operacje wejścia i wyjścia Pojęcie klasy Operator zakresu Funkcje przeciążone Argumenty domniemane Funkcje otwarte Definicje i deklaracje zmiennych mogą pojawiać się między instrukcjami. Np.: for(int i = 0; i < n; i + +) Nie wolno wykonywać skoków przez instrukcje deklaracyjne, np. if(... ) int k; else double k; // niejawny skok k =... // jakiego typu jest zmienna k ?! PO1-9 / 30

11 Zmienne referencyjne Typy referencyjne znajdują praktyczne zastosowanie jako: referencyjne argumenty funkcji - aby uniknąć kopiowania wartości argumentu, - aby przekazać do funkcji zmienną, referencyjne wyniki funkcji - wynikiem funkcji jest zmienna. int k, &n = k;// n jest tożsame z k // Zmienna referencyjna n jest drugą nazwą zmiennej k PO1-10 / 30

12 Operatory new i delete Operator new : new typ new typ (wartość) new typ[rozmiar] Operator delete : delete ptr; delete [ ] ptr; double *p, *q, *A; int n; cin>>n; p = new double; q = new double(5.75); A = new double[n]; delete p; delete q; delete [ ]A; PO1-11 / 30

13 Operator new - uwagi Operator new w przypadku nieudanej alokacji zgłasza wyjątek typu bad_alloc, który niewyłapany, kończy aplikację. Aby new zamiast zgłaszać wyjątek, dawał w wyniku wskaźnik pusty, należy go wywoływać z parametrem nothrow: new(nothrow) typ new(nothrow) typ (wartość) new(nothrow) typ[rozmiar] double *p, *q, *A; int n; cin>>n; p = new(nothrow) double; q = new(nothrow) double(5.75); A = new(nothrow) double[n]; PO1-12 / 30

14 Operatory > Jeżeli lewy argument jest obiektem strumieniowym, to operatory > są operatorami wyprowadzania i wprowadzania. cout << k; // ostream << int – wyprowadzenie wartości typu int cout << '\n'; // ostream << char – wyprowadzenie znaku cout << "K="; // ostream << char* – wyprowadzenie tekstu cin >> k; // istream >> int – wprowadzenie wartości typu int int k = 11; k / 4 // int / int – dzielenie całkowite, wynik = 2 k / 4.0 // int / double – dzielenie rzeczywiste, wynik = 2,75 k << 4 // int << int – bitowe przesunięcie o 4 w lewo k >> 4 // int >> int – bitowe przesunięcie o 4 w prawo PO1-13 / 30 Pod symbolami > kryje się wiele różnych operatorów wprowadzania i wyprowadzania – zależnie od typu prawego argumentu.

15 Klasy i struktury Klasy i struktury w C++: zawierają funkcje, a nie tylko zmienne, mogą ukrywać swoje zmienne i funkcje w sekcjach (private, protected, public), Domyślną sekcją struktury jest public. Domyślną sekcją klasy jest private. class Zesp { double Re, Im;// dane ukryte przed użytkownikiem public:// początek sekcji publicznej Zesp(double Re=0, double Im=0): Re(Re), Im(Im) { }// funkcja konstruktora double Realis( ) { return Re; }// funkcja Realis };// koniec definicji klasy Przykład klasy PO1-14 / 30

16 Operatory.* oraz ->* Zesp Z, *p=&Z;// definicja obiektu i wskaźnika na obiekt double Zesp::*r;// definicja wskaźnika na komponent klasy r=&Zesp::Re;// r wskazuje na zmienną Re w klasie Zesp Z.* r = 0;// Z. Re = 0; r=&Zesp::Im;// r wskazuje na zmienną Im w klasie Zesp p ->* r = 0;// p -> Im = 0; czyli Z. Im = 0; Nazwa_obiektu. Nazwa_komponentu Wskaźnik_na_obiekt -> Nazwa_komponentu Nazwa_obiektu.* Wskaźnik na_komponent Wskaźnik_na_obiekt ->* Wskaźnik na_komponent PO1-15 / 30

17 Operatory zakresu PO1-16 / 30 ZESP(double Re=0, double Im=0) { ZESP::Re = Re; ZESP::Im = Im; } lokalne zmienne funkcji zmienne w obiekcie klasy ZESP Operator 1-argumentowy :: Nazwa_stałej_zmiennej_lub_funkcji Kwalifikuje stałą, zmienną lub funkcję jako globalną, Np. int K = 20; main( ) { int n, K = 5; n=K+::K;// n = 5+20, bo K=5, ale ::K=20 Operator 2-argumentowy Nazwa_klasy :: Nazwa_stałej_zmiennej_lub_funkcji Kwalifikuje stałą, zmienną lub funkcję do podanej klasy Stałe zdefiniowane w klasie ios: ios::in ios::out ios::left ios::showpoint Operator 2-argumentowy Nazwa_klasy :: Nazwa_stałej_zmiennej_lub_funkcji Kwalifikuje stałą, zmienną lub funkcję do podanej klasy

18 Funkcje i argumenty Instrukcje deklaracyjne Zmienne referencyjne Operatory new i delete Obiektowe operacje wejścia i wyjścia Pojęcie klasy Operator zakresu Funkcje przeciążone Argumenty domniemane Funkcje otwarte Funkcje przeciążone to funkcje o tej samej nazwie lecz o różnych parametrach. Np.: double sin(double); Zesp sin(Zesp&);// inny typ argumentu int Max(int, int, int); int Max(int, int, int, int); // inna liczba argumentów Argumenty domniemane Kolejnym parametrom funkcji, poczynając od ostatniego, można nadawać wartości domyślne. Np.: int Suma( int a=1, int b=20, int c=30 ) { return a+b+c; } Powyższą funkcję można wywołać na 4 sposoby: z trzema, dwoma, jednym argumentem lub bez argumentów, np.: k = Suma( ); // K=51 k = Suma( 7 ); // K=57 k = Suma( 7, 0 ); // K=37 k = Suma( 0, 2, 6 ); // K=8 Funkcje otwarte - inline Proste funkcje mogą być definiowane jako makrodefinicje. W miejscu wywołania wpisywany jest zmodyfikowany argumentami kod funkcji Np.: inline int Suma( int a=1, int b=20, int c=30 ) { return a+b+c; } Poniższe wywołania generują instrukcje jak w komentarzach: k = Suma( ); // K= ; k = Suma( 7 ); // K= ; k = Suma( 7, 0 ); // K=7+0+30; k = Suma( 0, 2, 6 ); // K=0+2+6; PO1-17/ 30

19 Obiekty strumieniowe Obiekty cin, cout, cerr PO1-18 / 30

20 Otoczenie programu w C++ Program System opera- cyjny System opera- cyjny stdin klawiatura ekran stderr stdout cin cout cerr scanf(... printf(... fprintf(stderr,... PO1-19 / 30

21 Przykład użycia cout i cin Pierwiastki równania ax+b=0. #include "stdafx.h" #include "iostream.h" // Włącz opisy operatorów > void main(void) { double a, b, x; cerr << "A= ";// Zaproszenie „Podaj A” do cerr cin >> a; cerr << "B= ";// Zaproszenie „Podaj B” do cerr cin >> b; if(a==0) if(b==0) cout << "Tozsamosc, X dowolne"; // Wynik else cout << "Sprzecznosc – brak X"; // Wynik else {x= –b/a; cout << "X= " << x; // Wynik } cout << endl;// Drukuj nową linię po wyniku } PO1-20 / 30

22 Obiektowe wejście i wyjście cout << "A[" << (i+1) << "] = " << A[i] << '\n'; A[1] = 5.75 char* operator wypro- wadzania tekstu int cout << (i+1) operator wypro- wadzania liczby całkowitej char* cout << "] = " operator wypro- wadzania tekstu double cout << A[i] operator wypro- wadzania liczby rzeczywistej char cout << '\n' operator wypro- wadzania znaku PO1-21 / 30

23 Klasa i struktura PO1-22 / 30

24 Klasa i struktura w C++ 1.Strukturę można definiować używając słowa kuczowego struct albo słowa class. 2.Komponentami struktury (klasy) mogą być nie tylko zmienne ale też funkcje. 3.Komponenty struktury (klasy) można ukrywać przed użytkownikiem w sekcjach: prywatnej (private:), zabezpieczonej (protected:) i publicznej (public:). class Zesp{ private: double Re, Im; public: double Realis( ) { return Re; } double modul( ) { return sqrt( Re*Re + Im*Im ); } }; Zesp z; double y; y = z. Re; y = z. Realis( ); PO1-23 / 30

25 Zmienne strukturowe 1.Zmienne typu struktury (klasy) nazywane są obiektami. 2.Każdy tworzony obiekt jest automatycznie inicjowany przez wywołanie do niego funkcji konstruktora. Jawne wywołanie konstruktora tworzy i inicjuje obiekt. 3.Do usuwanego obiektu jest automatycznie wywoływana funkcja destruktora. Jawne wywołanie destruktora do obiektu nie usuwa tego obiektu. Zesp A( 2, 5 ), B; // wymaga zdefiniowania w klasie // konstruktora Zesp(double, double ); // oraz konstruktora Zesp( ); Zesp T[ ] = { Zesp( 2, 0 ), Zesp( 5.2, 0.5 ), Zesp( 2, 0.5 ), Zesp( 5.2, 0.5 ), Zesp( 1, 0 ) }; // zainicjowanie tablicy 5 obiektów PO1-24 / 30

26 Podejście obiektowe Najważniejsze mechanizmy programowania obiektowego to: hermetyzacja danych i metod, dziedziczenie, przeciążanie funkcji i operatorów, polimorfizm. PO1-25 / 30 definiowanie klas,

27 Hermetyzacja danych i metod Hermetyzacja danych i metod polega na ukryciu wewnętrznej struktury obiektów i wewnętrznych metod przetwarzania w sekcji prywatnej (private:) oraz w sekcji zabezpieczonej (protected:). PO1-26 / 30

28 class Zesp { private: double Re, Im;// ukryte wnętrze obiektu public: //... double Realis( ) const { return Re; } //... }; Przykład hermetyzacji class Zesp { private: double r, fi; // ukryte wnętrze obiektu public: //... double Realis( ) const { return r*cos( fi ); } //... }; PO1-27 / 30

29 Dziedziczenie Dziedziczenie umożliwia tworzenie nowych klas na bazie klas już opracowanych bez wnikania do wnętrza klas bazowych, przejmując pożądane cechy tych klas. Klasa pochodna przejmuje z klasy bazowej zarówno dane jak i algorytmy przetwarzania tych danych. class Mac:public Vec // przejęcie zmiennych i funkcji klasy Vec { // definicje dodatkowych zmiennych i funkcji klasy Mac }; PO1-28 / 30

30 Przeciążanie umożliwia stosowanie tradycyjnych jednakowych nazw wielu funkcji i jednakowych nazw wielu operatorów opracowanych do przetwarzania różnych obiektów. Przeciążanie funkcji i operatorów //przeciążenie funkcji sqrt Zesp sqrt(Zesp &b) { double r=sqrt(sqrt(b.Re*b.Re+b.Im*b.Im)); double fi=r ? 0.5*atan2(b.Im, b.Re) : 0; return Zesp(r*cos( fi ), r*sin( fi ) ); } //przeciążenie operatora dodawania Zesp Zesp::operator+(const Zesp &b) const { return Zesp(Re+b.Re, Im+b.Im); } PO1-29 / 30

31 Polimorfizm pozwala na automatyczny wybór funkcji zależnie od aktualnych, nie zaś od formalnych, właściwości obiektów, na rzecz których te funkcje są aktywowane. Polimorfizm ostream &operator <<(ostream &wy, const Vec &b) {//funkcję drukuj zadeklarowano w Vec jako polimorficzną b.drukuj( );//wykonanie drukuj z klasy Vec albo Mac //zależnie od typu obiektu tożsamego z b return wy; } PO1-30 / 30


Pobierz ppt "Programowanie obiektowe dr hab. inż. Jerzy Kisilewicz, prof. Katedra Systemów i Sieci Komputerowych www.kssk.pwr.wroc.pl C-3, pok. 107 PO1-1 / 30 Konsultacje."

Podobne prezentacje


Reklamy Google