Darmowe Forum
Maj 02, 2024, 07:05:57 *
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 5498 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

justplay santera cybersteam polishmaxlive endermanpl