Programowanie obiektowe

Slides:



Advertisements
Podobne prezentacje
C++ wykład 2 ( ) Klasy i obiekty.
Advertisements

C++ wykład 4 ( ) Przeciążanie operatorów.
Język C/C++ Funkcje.
Programowanie obiektowe
C++ Paweł Rzechonek Instytut Informatyki Uniwersytetu Wrocławskiego
Deklaracje i definicje klas w C++ Składowe, pola, metody Konstruktory
Klasa listy jednokierunkowej Przekazywanie parametrów do funkcji
Programowanie obiektowe
Programowanie obiektowe PO PO - LAB 4 Wojciech Pieprzyca.
Programowanie obiektowe
Wzorce.
Język ANSI C Funkcje Wykład: Programowanie komputerów
Prowadzący: mgr inż. Elżbieta Majka
Wprowadzenie.
Dziedziczenie. Po co nam dziedziczenie? class osoba { char * imie, char * imie, * nazwisko; * nazwisko;public: void wypisz_imie(); void wypisz_imie();
PROGRAMOWANIE STRUKTURALNE
formatowanie kodu źródłowego
1 Dygresja: cztery płyty główne…. 2 Dygresja: osobliwości C /* cos o nieistniejacym typie Boolean */ /* oraz o operatorze przecinkowym */ #include int.
C++ wykład 2 ( ) Klasy i obiekty.
Zasady zaliczenia Warunki uzyskania zaliczenia:
Programowanie obiektowe W2
Klasy w C++. Deklaracja klasy class NazwaTwojejKlasy { //w tym miejscu piszemy definicje typów, //zmienne i funkcje jakie mają należeć do klasy. }; //tutaj.
Metody Programowania Wykład
Podstawy programowania II Wykład 2: Biblioteka stdio.h Zachodniopomorska Szkoła Biznesu.
Programowanie obiektowe III rok EiT
Podstawy Programowania
Podstawy programowania
Programowanie strukturalne i obiektowe
Programowanie obiektowe III rok EiT
Programowanie obiektowe III rok EiT dr inż. Jerzy Kotowski Wykład VIII.
Jerzy F. Kotowski1 Informatyka I Wykład 14 DEKLARATORY.
Programowanie obiektowe III rok EiT
Java – coś na temat Klas Piotr Rosik
Dziedziczenie Maciek Mięczakowski
Inicjalizacja i sprzątanie
Programowanie obiektowe Wykład 3 dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 1/21 Dariusz Wardowski.
Programowanie obiektowe Wykład 6 dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 1/14 Dariusz Wardowski.
Podstawy informatyki 2013/2014
Przekazywanie parametrów do funkcji oraz zmienne globalne i lokalne
Programowanie obiektowe 2013/2014
Kurs języka C++ – wykład 9 ( )
Programowanie w języku C++
Treści multimedialne - kodowanie, przetwarzanie, prezentacja Odtwarzanie treści multimedialnych Andrzej Majkowski informatyka +
Programowanie strukturalne i obiektowe C++
Kurs języka C++ – wykład 4 ( )
K URS JĘZYKA C++ – WYKŁAD 2 ( ) Klasy i obiekty.
Programowanie obiektowe Wykład 9 dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 1/15 Dariusz Wardowski.
Dziedziczenie Wykład 7 Dziedziczenie sekwencyjne
Wykład 4 Klasa Vec, której konstruktory alokują pamięć dla obiektów 1.Przykład definicji klasy Vec 2.Definicje konstruktorów i destruktora 3.Definicja.
PO13-1 / 19 Wykład 13 Wyjątki i ich zgłaszanie Wyłapywanie wyjątków Obsługa wyjątków Wykorzystanie polimorfizmu Filtrowanie wyjątków Błędy w konstruktorach.
Wykład 2 Klasa Zesp i jej hermetyzacja 1.Przykład definicji klasy Zesp 2.Zmiana definicji klasy 3.Zmienne i funkcje statyczne PO2-1 / 28.
Wykład 5 Klasa Vec i jej operatory 1.Kategorie operatorów 2.Operatory ogólne - przykłady 3.Operatory specjalne [ ], ( ) oraz –> 4.Operatory new i delete.
Wykład 8 Polimorfizm 1.Funkcje polimorficzne 2.Czyste funkcje wirtualne i klasy abstrakcyjne PO8-1 / 38.
Seminarium Dyplomowe: Metodyka i Techniki Programowania Autor: Bartłomiej Fornal.
Podstawy informatyki Tablice Łukasz Sztangret Katedra Informatyki Stosowanej i Modelowania Prezentacja przygotowana w oparciu o materiały Danuty Szeligi.
Wstęp do programowania Wykład 2 Dane, instrukcje, program.
Podstawy informatyki Funkcje Łukasz Sztangret Katedra Informatyki Stosowanej i Modelowania Prezentacja przygotowana w oparciu o materiały Danuty Szeligi.
Łukasz Sztangret Katedra Informatyki Stosowanej i Modelowania Prezentacja przygotowana w oparciu o materiały Danuty Szeligi i Pawła Jerzego Matuszyka Podstawy.
K URS JĘZYKA C++ – WYKŁAD 3 ( ) Przenoszenie Składowe statyczne Funkcje wbudowane Argumenty domyślne.
C++ mgr inż. Tomasz Turba Politechnika Opolska 2016.
C++ mgr inż. Tomasz Turba Politechnika Opolska 2016.
Programowanie Obiektowe – Wykład 6
Kurs języka C++ – wykład 3 ( )
Klasy, pola, obiekty, metody. Modyfikatory dostępu, hermetyzacja
Programowanie Obiektowe – Wykład 2
Kurs języka C++ – wykład 4 ( )
Programowanie obiektowe
Założenia projektowe Javy
Język C++ Typy Łukasz Sztangret Katedra Informatyki Stosowanej i Modelowania Prezentacja przygotowana w oparciu o materiały Danuty Szeligi i Pawła Jerzego.
Zapis prezentacji:

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

Wymagania Co wpływa na ocenę Uwagi Zdanie egzaminu testowego, Zaliczenie laboratorium, Obecność na wykładach ogłoszonych jako obowiązkowe. Co wpływa na ocenę Punkty z testu egzaminacyjnego, Punkty z laboratorium, Punkty za obecności i z kartkówek na wykładach. Uwagi Nieobecność na 30% wykładów ogłoszonych jako obowiązkowe powoduje brak zaliczenia przedmiotu. 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. PO1-2 / 30

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

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

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

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

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

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

Słowa kluczowe C++ and dynamic_cast operator true and_eq explicit or try asm export or_eq typeid bitand false private typename bitor friend protected using bool inline public virtual catch mutable reinterpret_cast wchar_t class namespace static_cast xor compl new template xor_eq const_cast not this delete not_eq throw PO1-8 / 30

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

Zmienne referencyjne referencyjne argumenty funkcji int k, &n = k; // n jest tożsame z k // Zmienna referencyjna n jest drugą nazwą zmiennej k 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. PO1-10 / 30

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

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

Operatory << oraz >> 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 Jeżeli lewy argument jest obiektem strumieniowym, to operatory << oraz >> 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 Pod symbolami << oraz >> kryje się wiele różnych operatorów wprowadzania i wyprowadzania – zależnie od typu prawego argumentu. PO1-13 / 30

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

Operatory .* oraz ->* Nazwa_obiektu . Nazwa_komponentu Wskaźnik_na_obiekt -> Nazwa_komponentu Nazwa_obiektu .* Wskaźnik na_komponent Wskaźnik_na_obiekt ->* Wskaźnik na_komponent 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; PO1-15 / 30

Operatory zakresu Operator 2-argumentowy Nazwa_klasy :: Nazwa_stałej_zmiennej_lub_funkcji Kwalifikuje stałą, zmienną lub funkcję do podanej klasy 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 ZESP(double Re=0, double Im=0) { ZESP::Re = Re; ZESP::Im = Im; } lokalne zmienne funkcji zmienne w obiekcie klasy ZESP 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 PO1-16 / 30

Funkcje i argumenty Funkcje przeciążone Funkcje otwarte - inline 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 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=1+20+30; k = Suma( 7 ); // K=7+20+30; k = Suma( 7, 0 ); // K=7+0+30; k = Suma( 0, 2, 6 ); // K=0+2+6; 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 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 PO1-17/ 30

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

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

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

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

Klasa i struktura PO1-22 / 30

Klasa i struktura w C++ Strukturę można definiować używając słowa kuczowego struct albo słowa class. Komponentami struktury (klasy) mogą być nie tylko zmienne ale też funkcje. 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

Zmienne strukturowe Zmienne typu struktury (klasy) nazywane są obiektami. Każdy tworzony obiekt jest automatycznie inicjowany przez wywołanie do niego funkcji konstruktora. Jawne wywołanie konstruktora tworzy i inicjuje obiekt. 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

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

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

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

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

Przeciążanie funkcji i operatorów Przeciążanie umożliwia stosowanie tradycyjnych jednakowych nazw wielu funkcji i jednakowych nazw wielu operatorów opracowanych do przetwarzania różnych obiektó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

Polimorfizm 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. 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