Pobierz prezentację
Pobieranie prezentacji. Proszę czekać
1
Programowanie strukturalne i obiektowe C++
Robert Nowak Programowanie strukturalne i obiektowe C++ Wstęp do programowania obiektowego
2
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.
3
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.
4
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ę.
5
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.
6
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.
7
Definiowanie klasy w programie
Składnia definicji klasy wygląda natomiast następująco: class nazwa_klasy { specyfikator_dostępu: pola metody };
8
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); };
9
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.
10
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.
11
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.
12
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, ...);
13
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).
14
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; } };
15
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;
16
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; }
17
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; } };
18
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;
19
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;
20
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();
21
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 ();
22
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; }
23
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; }
24
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;
25
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;
26
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; }
Podobne prezentacje
© 2024 SlidePlayer.pl Inc.
All rights reserved.