Tytu³: Programowanie obiektowe Wiadomo¶æ wys³ana przez: admin Grudzieñ 08, 2010, 11:45:33 Programowanie strukturalne przedstawia program jako seriê procedur, dzia³aj±cych na danych.
Funkcja jest zestawem specyficznych, wykonywanych jedna po drugiej instrukcji. Dane s± ca³kowicie odseparowane od funkcji, zadaniem programisty by³o zapamiêtanie, która funkcja wywo³uje inne funkcje, oraz jakie dane by³y w wyniku tego zmieniane. G³ówn± ide± programowania strukturalnego jest: „dziel i rz±d¼.” Program komputerowy mo¿e byæ uwa¿any za zestaw zadañ. Ka¿de zadanie, które jest zbyt skomplikowane aby mo¿na by³o je ³atwo opisaæ, jest rozbijane na zestaw mniejszych zadañ sk³adowych, a¿ do momentu gdy, wszystkie zadania s± wystarczaj±co ³atwe do zrozumienia. Programowanie strukturalne stanowi niezwykle efektywny sposób rozwi±zywania z³o¿onych problemów. Posiada kilka ograniczeñ nie pozwalaj±cych na bardziej efektywne u¿ywanie kodu. Jêzyk C++ jest zorientowanym obiektowo, pozwala to na zastosowanie w nim trzech zasad charakterystycznych dla programowania obiektowego: hermetyzacjê (kapsu³kowanie), dziedziczenie oraz polimorfizm. Tytu³: Odp: Programowanie obiektowe Wiadomo¶æ wys³ana przez: admin Grudzieñ 14, 2010, 17:24:49 Programowanie obiektowe - pozwala na operowanie w programie struktur± która nosi nazwê obiektu.
Obiekt = Dane +Metody. Dane - (w³a¶ciwo¶ci/ properties) to warto¶ci opisuj±ce obiekt, odpowiadaj± zmiennym w programowaniu strukturalnym. Mo¿na im przypisywaæ warto¶ci za pomoc± operatora = . Metody - to funkcje wykorzystywane dla ¶ci¶le okre¶lonych danych. Tytu³: Odp: Programowanie obiektowe Wiadomo¶æ wys³ana przez: admin Grudzieñ 14, 2010, 17:29:37 Obiekt jest elementem pewnej klasy.
W C++ nale¿y na pocz±tku zadeklarowaæ klasê i dopiero potem obiekty bêd±ce potomkami klasy. Przyk³ad przedstawiaj±cy deklaracjê klasy i obiektu bêd±cego potomkiem tej klasy. #include <cstdlib> #include <iostream> using namespace std; class osoba {protected: char imie[255], nazwisko[255]; int dlug; public: osoba(); osoba(char *aimie, char anazwisko, int adlug){}; private: int wiek; }; int main(int argc, char *argv[]) { osoba miecio; system("PAUSE"); return EXIT_SUCCESS; } osoba::osoba(){}; Tytu³: Odp: Programowanie obiektowe Wiadomo¶æ wys³ana przez: admin Grudzieñ 15, 2010, 04:37:07 W programie przedstawionym wy¿ej napisa³em dwie metody o nazwie osoba. Osoba to równie¿ nazwa klasy. Takie dzia³anie nazywane jest przeci±¿eniem nazwy metody , kompilator rozpozna w³a¶ciw± metodê na podstawie liczby parametrów.
Kolejn± nowo¶ci± jest sposób deklaracji cia³a metody. Podobnie jak przy deklarowaniu funkcji w programowaniu strukturalnym cia³o mo¿na umie¶ciæ przy deklaracji prototypu (osoba(char *aimie, char anazwisko, int adlug){};) lub poza deklaracj± klasy (osoba::osoba(){}). Wtedy jednak trzeba napisaæ do jakiej klasy przypisana jest dana metoda, s³u¿y temu podwójny dwukropek :: . Operator :: nazywany jest operatorem widoczno¶ci. Do ograniczenia dostêpu do danych konieczne jest zadeklarowanie z jakimi zmiennymi ma program do czynienia. Istniej± trzy poziomy dostêpno¶ci: public - oznacza,¿e umieszczone za nim pola i metody s± dostêpne w ca³ym programie. protected - s± dostêpne w sposób bezpo¶redni, przez u¿ycie operatora wyboru sk³adowej - kropki ( o tym pó¼niej) tylko w klasach pochodnych od danej klasy. private - brak jest bezpo¶redniego dostêpu do do pól. Je¿eli zmienna jest typu public, to mo¿na do niej siê do niej odwo³aæ stosuj±c wywo³anie: miecio.osoba(); Je¿eli zmienna jest typu private lub protected to na zewn±trz klasy nie mo¿na tego zrobiæ, trzeba wykorzystaæ metodê która bêdzie typu public, ale o tym pó¼niej. Tytu³: Odp: Programowanie obiektowe Wiadomo¶æ wys³ana przez: admin Grudzieñ 15, 2010, 04:54:32 Hermetyzacja danych
Pola danej klasy powinny byæ zatem zadeklarowane w czê¶ci private lub protected, metody umo¿liwiaj±ce dostêp do pól nale¿y deklarowaæ w czê¶ci public ( czêsto metody nazywa siê funkcjami interfejsu). Dostêp do pól powinien siê odbywaæ wy³±cznie przy pomocy metody. Takie dzia³anie nazywamy hermetyzacj±. Je¿eli w deklaracji klasy nie okre¶lono jakiego jest ona typu , to domy¶lenie przyjmuje stan private. Konstruktor - metoda o takiej samej nazwie jak nazwa klasy, automatycznie wywo³ywane w chwili tworzenia obiektu danej klasy. Konstruktor powoduje zajêcie miejsca w pamiêci komputera podczas deklarowania klasy. Deklaracja konstruktora nie mo¿e zawieraæ typu. Je¿eli w klasie nie zamieszczono konstruktora, to zostanie on automatycznie wywo³any. Przyk³ad 1 zawiera dwa konstruktory o ró¿nych prototypach. Destruktor - specjalna metoda (funkcja) bez parametrów wywo³ywana zawsze w momencie usuwania obiektu. Nazw± destruktora jest nazwa klasy poprzedzona znakiem ~ . Dla klasy osoba , nazwa destruktora to: ~osoba. Dla prostych klas nie jest konieczne tworzenie konstruktora . Konstruktor zwalnia pamiêæ zajmowan± przez klasê. Tytu³: Odp: Programowanie obiektowe Wiadomo¶æ wys³ana przez: admin Grudzieñ 15, 2010, 05:30:03 Przyk³ad 2. Program zliczaj±cy ile razy wprowadzono w s³owie literê a.
#include <cstdlib> #include <iostream> using namespace std; class licznik {char znak; int ile; public: licznik (char ); void plus(void); char pokaz(void); int efekt (void);}; licznik::licznik(char x) {znak=x; ile=0;} int main(int argc, char *argv[]) {licznik licz('A'); cout<<endl<<"Program spawdza : znak ile?"<<"\n\t\t"; cout<<licz.pokaz()<<"\t"; cout<<licz.efekt(); cout<<endl<<"Prosze wpisaæ tekst zawoerajacy litere A"; cout<<endl<<"wprowadzenie literu x lub X"; cout<<"oznacza zakonczenie zliczania:"; while(1){ char znakw; cin>>znakw; if(znakw=='x' ||znakw=='X')break; if(licz.pokaz()==toupper(znakw)) licz.plus(); } cout<<endl<<"litera "<<licz.pokaz(); cout<<" wystapila "<<licz.efekt(); cout<<" razy "; cout<<endl; system("PAUSE"); return EXIT_SUCCESS; } void licznik::plus(void){ile++;} char licznik::pokaz (void){return znak;} int licznik:: efekt(void){return ile;} Tytu³: Odp: Programowanie obiektowe Wiadomo¶æ wys³ana przez: admin Grudzieñ 15, 2010, 14:56:09 Zadanie 2. Wersja light bez cia³a metody selekcja.
#include <cstdlib> #include <iostream> using namespace std; class samochod { int masa; int dlugosc; int szerokosc; public: samochod(){}; char selekcja (float dlugosc){};}; int main(int argc, char *argv[]) { samochod rodzaj_sam; float x; cout<<"podaj dlugosc:"; cin>>x; cout<< rodzaj_sam.selekcja(x); system("PAUSE"); return EXIT_SUCCESS; } Tytu³: Odp: Programowanie obiektowe Wiadomo¶æ wys³ana przez: admin Grudzieñ 15, 2010, 15:04:07 Zadanie 2 v semi light
#include <cstdlib> #include <iostream> using namespace std; class samochod { int masa; float dlugosc; int szerokosc; public: samochod(){}; char selekcja (float dlugosc){ if (dlugosc<3.5){return('A');}else if ((dlugosc>3.5)&&(dlugosc<4)){return('B');}; }; }; int main(int argc, char *argv[]) { samochod rodzaj_sam; float x; cout<<"podaj dlugosc:"; cin>>x; cout<< rodzaj_sam.selekcja(x); cout<<endl; system("PAUSE"); return EXIT_SUCCESS; } Tytu³: Odp: Programowanie obiektowe Wiadomo¶æ wys³ana przez: admin Grudzieñ 15, 2010, 15:12:54 Zadanie 2 v. semi full wypas
#include <cstdlib> #include <iostream> using namespace std; class samochod { int masa; float dlugosc; int szerokosc; public: samochod(){}; char selekcja (float dlugosc){ if (dlugosc<3.5){return('A');}else if ((dlugosc>=3.5)&&(dlugosc<4)){return('B');} else if ((dlugosc>=4)&&(dlugosc<4.5)){return('C');} else if ((dlugosc>=4.5)&&(dlugosc<5)){return('D');} else {return('E');}; }; }; int main(int argc, char *argv[]) { samochod rodzaj_sam; float x; cout<<"podaj dlugosc:"; cin>>x; cout<< rodzaj_sam.selekcja(x); cout<<endl; system("PAUSE"); return EXIT_SUCCESS; } Tytu³: Odp: Programowanie obiektowe Wiadomo¶æ wys³ana przez: admin Maj 18, 2011, 11:00:58 #include <cstdlib>
#include <iostream> using namespace std; class samochod { int masa; float dlugosc; int szerokosc; public: samochod(){}; //a<3,5 B<4, C<4.5 D<5, E<6 char selekcja (float dlugosc){ char q; if(dlugosc<3.5){q='A';} else if(dlugosc<4){q='B';} else if (dlugosc<4.5){q='C';} else if(dlugosc<5){q='D';} else {q='E';}; switch (q){ case 'A':{cout<<"klasa A";break;} case 'B':{cout<<"klasa B";break;} case 'C':{cout<<"klasa C";break;} case 'D':{cout<<"klasa D";break;} default: {cout<<"klasa E";}}; }; char selekcja1 (float rozos){ char q; if(rozos<2){q='A';} else if(rozos<2.3){q='B';} else if (rozos<2.5){q='C';} else if(rozos<2.7){q='D';} else {q='E';}; switch (q){ case 'A':{cout<<"klasa A";break;} case 'B':{cout<<"klasa B";break;} case 'C':{cout<<"klasa C";break;} case 'D':{cout<<"klasa D";break;} default: {cout<<"klasa E";}}; }; ~samochod(){}; }; int main(int argc, char *argv[]) { samochod rodzaj_sam; float x,y; cout<<"podaj dlugosc:"; cin>>x; cout<<endl<<"podaj rozstaw osi:"; cin>>y; cout<< rodzaj_sam.selekcja(x)<<endl;; cout<< rodzaj_sam.selekcja1(y)<<endl;; cout<<endl; system("PAUSE"); return EXIT_SUCCESS; } |