Darmowe Forum

C++ => Podstawy => W±tek zaczêty przez: admin Grudzieñ 08, 2010, 11:45:33



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;
}


Polityka cookies
Darmowe Fora | Darmowe Forum

proskills shaggydogss mylittlepony spw moikrewni