Programowanie strukturalne i obiektowe C++

Slides:



Advertisements
Podobne prezentacje
C++ wykład 9 ( ) Szablony.
Advertisements

C++ wykład 2 ( ) Klasy i obiekty.
Język C/C++ Funkcje.
Programowanie obiektowe
Programowanie obiektowe PO PO - LAB 2 Wojciech Pieprzyca.
Programowanie obiektowe
Programowanie obiektowe
Programowanie obiektowe PO PO - LAB 4 Wojciech Pieprzyca.
Programowanie obiektowe
Programowanie obiektowe
Programowanie obiektowe PO PO - LAB 3 Wojciech Pieprzyca.
Wzorce.
Prowadzący: mgr inż. Elżbieta Majka
Static, const, volatile.
Dziedziczenie. Po co nam dziedziczenie? class osoba { char * imie, char * imie, * nazwisko; * nazwisko;public: void wypisz_imie(); void wypisz_imie();
PROGRAMOWANIE STRUKTURALNE
Programowanie obiektowe w Javie
OOPC++ - wstêp, klasy1 Klasy Do struktury można dołączyć operacje działające na jej polach. struct date { int day, month, year; void set (int d, int m,
Kurs Pascala – spis treści
Struktury.
Tablice.
C++ wykład 2 ( ) Klasy i obiekty.
Zasady zaliczenia Warunki uzyskania zaliczenia:
Pakiety i ATD 1 Definicja. Pakietem albo jednostką programową nazywamy grupę logicznie powiązanych elementów, które mogą być typami, podtypami, obiektami.
Typy prywatne 1 Typy prywatne W Adzie typy prywatne (private types) służą do bezpiecznego udostępniania danych zdefiniowanych w pakiecie, z którego korzysta.
Wstęp do programowania obiektowego
Klasy w C++. Deklaracja klasy class NazwaTwojejKlasy { //w tym miejscu piszemy definicje typów, //zmienne i funkcje jakie mają należeć do klasy. }; //tutaj.
Podstawy programowania
Podstawy programowania
Podstawy programowania
Podstawy programowania II
Podstawy informatyki Struktury, operatory, wyjątki
T: Różnice pomiędzy programowaniem strukturalnym a obiektowym
Pętla do ... While C++ Źródło:
Podstawy programowania
Programowanie strukturalne i obiektowe
Jakub Wołczko W obiektowym świecie… Jakub Wołczko
Podstawy programowania w języku C i C++
Java – coś na temat Klas Piotr Rosik
Dziedziczenie Maciek Mięczakowski
Programowanie obiektowe Wykład 3 dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 1/21 Dariusz Wardowski.
Programowanie obiektowe Wykład 7 dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 1/20 Dariusz Wardowski.
Programowanie obiektowe Wykład 6 dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 1/14 Dariusz Wardowski.
Programowanie obiektowe – język C++
Programowanie obiektowe 2013/2014
Prasek Aneta, Skiba Katarzyna. Funkcje stałe const to takie funkcje, które nie mogą modyfikować stanu obiektu. Oznacza to, że funkcja stała nie może zmieniać.
Kurs języka C++ – wykład 3 ( )
Programowanie w języku C++
Programowanie strukturalne i obiektowe C++
Programowanie strukturalne i obiektowe C++
Treści multimedialne - kodowanie, przetwarzanie, prezentacja Odtwarzanie treści multimedialnych Andrzej Majkowski informatyka +
Programowanie strukturalne i obiektowe C++
Model obiektowy bazy danych
Programowanie strukturalne i obiektowe C++
Programowanie strukturalne i obiektowe C++ Przeładowanie operatorów Robert Nowak.
Kurs języka C++ – wykład 4 ( )
K URS JĘZYKA C++ – WYKŁAD 2 ( ) Klasy i obiekty.
Klasy ( uzupełnienie ). Definicja klasy Klasa jest zbiorem logicznie powiązanych danych i funkcji, przeznaczonych do realizacji konkretnego zadania; Zamknięcie.
Programowanie strukturalne i obiektowe C++ Powtórzenie wiadomości z C++ Robert Nowak.
Dziedziczenie wielobazowe. dana klasa może mieć kilka bezpośrednich klas bazowych: dana klasa może mieć kilka bezpośrednich klas bazowych: kolorpołożenie.
Programowanie Zaawansowane
Dziedziczenie Wykład 7 Dziedziczenie sekwencyjne
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.
Programowanie Obiektowe – Wykład 6
Klasy, pola, obiekty, metody. Modyfikatory dostępu, hermetyzacja
Programowanie Obiektowe – Wykład 2
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 strukturalne i obiektowe C++ Robert Nowak Programowanie strukturalne i obiektowe C++ Wstęp do programowania obiektowego

WSTĘP Otaczający nas świat to różnego rodzaju przedmioty. Tworząc program komputerowy dokonujemy pewnego ich odwzorowania. Krokiem do integracji opisu przedmiotów i metod określających jego właściwości jest przejście z programowania proceduralnego (strukturalnego) do programowania obiektowego. W programowaniu proceduralnym funkcje i zmienne opisujące dany przedmiot nie były ze sobą powiązane. W przypadku programowania orientowanego na obiekt (programowania obiektowego) dokonuje się powiązania metod (funkcji programu) z danymi (zmiennymi) definiującymi przedmiot.

Obiekt Obiektem w tym programowaniu nazywamy podstawowy element programu łączący opis stanu pewnej cząstki rzeczywistości z jej zachowaniem, czyli funkcjami inaczej zwanymi metodami obiektu.

Przykład obiektu Przykładem obiektu może być samochód, który jest opisany przez takie parametry jak: marka, moc silnika, aktualna prędkość, waga itp. Samochód ma również przyporządkowane funkcje (akcje), które może wykonać, na przykład: jazda z przyspieszeniem, tankowanie albo sposób zachowania na zakręcie. Oczywiście, funkcje wykonywane przez samochód mogą, ale nie muszą wpływać na wartość parametrów opisujących jego stan, na przykład przyśpieszenie ma wpływ na aktualną prędkość, lecz nie na markę.

Formalna definicja obiektu Obiekt jest modułem, z którego programista buduje cały program. Obiekt w swej strukturze zawiera dane zwane polami i funkcje zwane metodami.

Definicja klasy Aby w C++ móc w programie stworzyć obiekt, musimy zdefiniować klasę, do której obiekt należy. Klasa jest to złożony typ danych będący opisem (definicją) pól i metod obiektów w programie. Relację między obiektem a klasą możemy określić w następujący sposób: Obiekt jest zmienną typu zdefiniowanego w klasie. Definicja klasy nie wiąże się z utworzeniem obiektu, jest to jedynie zdefiniowanie nowego typu obiektów (zmiennych). Klasa jest typem obiektu, a nie samym obiektem.

Definiowanie klasy w programie Składnia definicji klasy wygląda natomiast następująco: class nazwa_klasy { specyfikator_dostępu: pola metody };

Przykład definicji klasy class samochod { public: char marka[15]; float moc_silnika; float predkosc_akt; float waga; float przyspieszenie (float przys); void tankowanie (int litry); };

Specyfikatory dostępu Nazwa specyfikator_dostępu określa prawa dostępu do części składowych klasy (czyli pól lub metod), wyróżniając ich trzy rodzaje: prywatne (ang. private), publiczne (ang. public) oraz zabezpieczone (ang. protected). Prywatne składowe klasy (wpisane po słowie private: w jej definicji) są dostępne jedynie wewnątrz samej klasy, tj. tylko dla jej własnych metod oraz dla funkcji zaprzyjaźnionych. Publiczne składowe klasy (wpisane po słowie public: w jej definicji) widoczne są zawsze i wszędzie - nie tylko dla samej klasy (jej metod), ale na zewnątrz - np. dla jej obiektów. Zabezpieczone składowe klasy (wpisane po słowie protected: w jej definicji) są dostępne jedynie wewnątrz samej klasy, tj. tylko dla jej własnych metod.

Deklaracje pól klasy Pola są właściwą treścią każdego obiektu klasy, to one stanowią jego reprezentację w pamięci operacyjnej. Pod tym względem nie różnią się niczym od znanych nam już pól w strukturach i są po prostu zwykłymi zmiennymi, zgrupowanymi w jedną, kompleksową całość. Jako miejsce na przechowywanie wszelkiego rodzaju danych, pola mają kluczowe znaczenie dla obiektów i dlatego powinny być chronione przez niepowołanym dostępem z zewnątrz. Przyjęło się więc, że w zasadzie wszystkie pola w klasach deklaruje się jako prywatne.

Deklaracje metod klasy Metody czynią klasy. To dzięki swym funkcjom składowym pasywne zbiory danych, którymi są struktury, stają się aktywnymi obiektami. Z praktycznego punktu widzenia metody niewiele różnią się od zwyczajnych funkcji - oczywiście poza faktem, iż są deklarowane zawsze wewnątrz jakiejś klasy. Deklaracje te mają formę prototypów funkcji, a stworzone w ten sposób metody wymagają jeszcze implementacji (definicji), czyli wpisania ich kodu.

Prototyp funkcji Prototyp (deklaracja) funkcji to wstępne określenie jej nagłówka. Stanowi on informację dla kompilatora i programisty o sposobie, w jaki funkcja może być wywołana. Składnia prototypu funkcji ma postać: typ_zw_wart nazwa_funkcji (typ_par nazwa_par, ...);

Definiowanie metod klasy Definicje metod klasy możemy w programie umieszczać na dwa sposoby: wewnątrz definicji klasy i poza definicją klasy. Wewnątrz definicji klasy umieszczamy definicję krótki metod (nie zawierających instrukcji iteracyjnych – pętli). Poza definicją klasy umieszczamy definicję dłuższych metod. Wtedy dodatkowo nazwę metody musimy poprzedzić nazwą klasy i tak zwanym operatorem zakresu oznaczanym :: (podwójnym dwukropkiem).

Przykład programu 1 #include <iostream> using namespace std; class ulamek { int licznik; int mianownik; public: int zapisz (int l, int m); void wypisz () cout <<licznik<<"/"<<mianownik; } };

Ciąg dalszy programu 1 int ulamek:: zapisz (int l, int m) { licznik=l; if (m!=0) mianownik=m; return 1; } else cout <<"Mianownik nie moze miec wartosci 0"; return 0;

Ciąg dalszy programu 1 int main () { ulamek ul1, ul2, ul3; int licz, mian,w; ul1.zapisz (4,5); ul2.zapisz (1,7); cout << "Pierwszy ulamek: "; ul1.wypisz (); cout <<'\n'<<"Drugi ulamek: "; ul2.wypisz (); cout <<'\n'<<'\n'<<"Podaj licznik swojego ulamka: "; cin>>licz; cin.ignore(); do { cout <<'\n'<<"Podaj mianownik swojego ulamka: "; cin>>mian; w=ul3.zapisz (licz,mian); }while (w==0); cout <<'\n'<<"Twoj ulamek: "; ul3.wypisz (); getchar (); return 0; }

Przykład programu 2 #include <iostream> using namespace std; class ulamek { public: int licznik; int mianownik; int zapisz (int l, int m); void wypisz () cout <<licznik<<"/"<<mianownik; } };

Ciąg dalszy programu 2 int ulamek:: zapisz (int l, int m) { licznik=l; if (m!=0) mianownik=m; return 1; } else cout <<"Mianownik nie moze miec wartosci 0\n"; return 0;

Ciąg dalszy programu 2 void pomnoz (ulamek &u_1, ulamek &u_2, ulamek &u_3) { int l,m; l=u_1.licznik*u_2.licznik; m=u_1.mianownik*u_2.mianownik; u_3.zapisz(l,m); } void podziel (ulamek &u_1, ulamek &u_2, ulamek &u_3) l=u_1.licznik*u_2.mianownik; m=u_1.mianownik*u_2.licznik;

Ciąg dalszy programu 2 int main () { ulamek ul1, ul2, ul3, ul4, ul5; int licz, mian,r; ul1.zapisz (4,5); ul2.zapisz (1,7); cout << "Pierwszy ulamek: "; ul1.wypisz (); cout <<'\n'<<"Drugi ulamek: "; ul2.wypisz (); pomnoz(ul1,ul2,ul5); cout <<'\n'<<"Wynik mnozenia u1*u2 wynosi:"; ul5.wypisz(); podziel(ul1,ul2,ul5); cout <<'\n'<<"Wynik dzielenia u1/u2 wynosi:"; podziel(ul2,ul1,ul5); cout <<'\n'<<"Wynik dzielenia u2/u1 wynosi:"; cout <<'\n'<<"Podaj licznik swojego ulamka 3: "; cin>>licz; cin.ignore();

Ciąg dalszy programu 2 do { cout <<"Podaj mianownik swojego ulamka 3: "; cin>>mian; cin.ignore(); r=ul3.zapisz (licz,mian); }while (r==0); cout <<"Podaj licznik swojego ulamka 4: "; cin>>licz; cout <<"Podaj mianownik swojego ulamka 4: "; r=ul4.zapisz (licz,mian); cout <<'\n'<<"Twoj ulamek 3: "; ul3.wypisz (); cout <<'\n'<<"Twoj ulamek 4: "; ul4.wypisz ();

Ciąg dalszy programu 2 pomnoz(ul3,ul4,ul5); cout <<'\n'<<"Wynik mnozenia u3*u4 wynosi:"; ul5.wypisz(); podziel(ul3,ul4,ul5); cout <<'\n'<<"Wynik dzielenia u3/u4 wynosi:"; podziel(ul4,ul3,ul5); cout <<'\n'<<"Wynik dzielenia u4/u3 wynosi:"; getchar (); return 0; }

Przykład programu 3 #include <iostream> #include <cmath> using namespace std; class odcinek { public: double x_poc; double y_poc; double x_kon; double y_kon; void zapisz (double x_p, double y_p, double x_k, double y_k) x_poc=x_p; y_poc=y_p; x_kon=x_k; y_kon=y_k; }

Ciąg dalszy programu 3 void wypisz () { cout <<"("<<x_poc<<","<<y_poc<<")"; cout <<" "; cout <<"("<<x_kon<<","<<y_kon<<")"; } }; double dlugosc (odcinek od) double dl; dl=sqrt(pow(od.x_kon-od.x_poc,2)+pow(od.y_kon-od.y_poc,2)); return dl;

Ciąg dalszy programu 3 int main() { odcinek AB, CD; double xp,yp,xk,yk; CD.zapisz(0,0,3,0); cout <<"Oto wspolrzedne odcinka CD:\n"; CD.wypisz(); cout <<'\n'<<"Dlugosc odcinka CD wynosi: "; cout << dlugosc(CD)<<'\n'; cout <<"Podaj wspolrzedne punktow wznaczajacych odcinek AB\n"; cout <<"Podaj wspolrzedna x poczatku odcinka: "; cin>>xp; cin.ignore(); cout <<"Podaj wspolrzedna y poczatku odcinka: "; cin>>yp;

Ciąg dalszy programu 3 cout <<"Podaj wspolrzedna x konca odcinka: "; cin>>xk; cin.ignore(); cout <<"Podaj wspolrzedna y konca odcinka: "; cin>>yk; AB.zapisz(xp,yp,xk,yk); cout <<"Oto wspolrzedne ktore podales:\n"; AB.wypisz(); cout <<'\n'<<"Dlugosc odcinka AB wynosi: "; cout << dlugosc(AB); cout <<"\n\nNacisnij ENTER aby zakonczyc...\n"; getchar(); return 0; }