Darmowe Forum
Grudzieñ 22, 2024, 02:33:54 *
Witamy, Go¶æ. Zaloguj siê lub zarejestruj.
Czy dotar³ do Ciebie email aktywacyjny?

Zaloguj siê podaj±c nazwê u¿ytkownika, has³o i d³ugo¶æ sesji
Aktualno¶ci: Forum zosta³o uruchomione!
 
   Strona g³ówna   Pomoc Zaloguj siê Rejestracja  
Strony: [1]
  Drukuj  
Autor W±tek: Programowanie obiektowe  (Przeczytany 5841 razy)
admin
Administrator
Ekspert
*****
Wiadomo¶ci: 821


Email
« : 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.
« Ostatnia zmiana: Grudzieñ 08, 2010, 11:51:45 wys³ane przez admin » Zapisane
admin
Administrator
Ekspert
*****
Wiadomo¶ci: 821


Email
« Odpowiedz #1 : 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.
« Ostatnia zmiana: Grudzieñ 14, 2010, 17:35:05 wys³ane przez admin » Zapisane
admin
Administrator
Ekspert
*****
Wiadomo¶ci: 821


Email
« Odpowiedz #2 : 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(){};
« Ostatnia zmiana: Maj 18, 2011, 08:10:12 wys³ane przez admin » Zapisane
admin
Administrator
Ekspert
*****
Wiadomo¶ci: 821


Email
« Odpowiedz #3 : 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.



« Ostatnia zmiana: Grudzieñ 15, 2010, 04:41:09 wys³ane przez admin » Zapisane
admin
Administrator
Ekspert
*****
Wiadomo¶ci: 821


Email
« Odpowiedz #4 : 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ê.
« Ostatnia zmiana: Grudzieñ 15, 2010, 05:03:20 wys³ane przez admin » Zapisane
admin
Administrator
Ekspert
*****
Wiadomo¶ci: 821


Email
« Odpowiedz #5 : 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;}

Zapisane
admin
Administrator
Ekspert
*****
Wiadomo¶ci: 821


Email
« Odpowiedz #6 : 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;
}
Zapisane
admin
Administrator
Ekspert
*****
Wiadomo¶ci: 821


Email
« Odpowiedz #7 : 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;
}
Zapisane
admin
Administrator
Ekspert
*****
Wiadomo¶ci: 821


Email
« Odpowiedz #8 : 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;
}
Zapisane
admin
Administrator
Ekspert
*****
Wiadomo¶ci: 821


Email
« Odpowiedz #9 : 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;
}
Zapisane
Strony: [1]
  Drukuj  
 
Skocz do:  

Powered by SMF 1.1.11 | SMF © 2006-2008, Simple Machines LLC | Sitemap

Polityka cookies
Darmowe Fora | Darmowe Forum

zlotasiodemka shaggydogss polski-serwer-rpg proskills mylittlepony