Darmowe Forum
Kwiecień 28, 2024, 08:59:46 *
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: Klasy  (Przeczytany 7744 razy)
admin
Administrator
Ekspert
*****
Wiadomości: 821


Email
« : Styczeń 11, 2012, 08:48:30 »

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.
Hermetyzacja(kapsułkowanie) oznacza ukrycie metod w części prywatnej.
Dziedziczenie to specjalny mechanizm, który umożliwia  tworzenie klas pochodnych, czyli będących niejako rozbudowaną wersją klas już istniejących.
 Polimorfizm w programowaniu obiektowym oznacza wykorzystanie tego samego kodu do operowania na obiektach przynależnych różnym klasom, dziedziczącym od siebie. Zjawisko to jest zatem ściśle związane z klasami i dziedziczeniem, aczkolwiek w C++ nie dotyczy ono każdej klasy, a jedynie określonych typów polimorficznych.
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.
Obiekt jest elementem pewnej klasy.
W C++ należy na początku zadeklarować klasę i dopiero potem obiekty będące potomkami klasy.


Metoda zstępująca polega na:
Rozłożyć cały problem na ściśle określone podproblemy i udowodnić, że jeśli każdy podproblem jest rozwiązany poprawnie, a te rozwiązania są połączone w określony sposób, to pierwotny problem też jest rozwiązany poprawnie. Proces dzielenia na podproblemy należy prowadzić tak długo, aż ich rozwiązanie można zapisać za pomocą kilku wierszy w wybranym języku programowania.
« Ostatnia zmiana: Luty 08, 2012, 10:55:50 wysłane przez admin » Zapisane
admin
Administrator
Ekspert
*****
Wiadomości: 821


Email
« Odpowiedz #1 : Styczeń 11, 2012, 09:15:12 »

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(){};

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: Styczeń 11, 2012, 10:05:02 wysłane przez admin » Zapisane
admin
Administrator
Ekspert
*****
Wiadomości: 821


Email
« Odpowiedz #2 : Styczeń 11, 2012, 10:18:30 »

Było ciężko spróbujemy trochę łatwiej. Proszę sobie wyobrazić,że piszemy grę wojenną w której uczestniczą pojazdy takie jak czołgi, transportery, samochody pancerne.

Zadeklarujmy zatem klasę czolg, która będzie posiadała właściwości : amunicja, predkosc,  odpornosc, strzal.
#include <cstdlib>
#include <iostream>

using namespace std;
class czolg
{public:
        int amunicja;
        int predkosc;
        int odpornosc;
        int strzal;};
int main(int argc, char *argv[])
{
    system("PAUSE");
    return EXIT_SUCCESS;
}
-------------------- wersja z klasą transporter ------------------------------------
#include <cstdlib>
#include <iostream>

using namespace std;
class czolg
{public:
        int amunicja;
        int predkosc;
        int odpornosc;
        int strzal;};
class transporter
{public:
        int amunicja;
        int predkosc;
        int odpornosc;
        int strzal;
        int osoby;
        };
int main(int argc, char *argv[])
{
    system("PAUSE");
    return EXIT_SUCCESS;
}

------------------------------------ wersja uproszczona wykorzystująca dziedziczenie -----------
#include <cstdlib>
#include <iostream>

using namespace std;
class czolg
{public:
        int amunicja;
        int predkosc;
        int odpornosc;
        int strzal;};
class transporter :public czolg
{public:
        int osoby;
        };
int main(int argc, char *argv[])
{
    system("PAUSE");
    return EXIT_SUCCESS;
}
« Ostatnia zmiana: Styczeń 11, 2012, 10:31:22 wysłane przez admin » Zapisane
admin
Administrator
Ekspert
*****
Wiadomości: 821


Email
« Odpowiedz #3 : Styczeń 11, 2012, 10:47:38 »

Uwagi do poprzedniego przykładu:
Podczas dziedziczenia zawartość klasy podstawowej staje się automatycznie zawartością klasy pochodnej.
Wszystkie składniki i funkcje składowe stają się dostępne w klasie odziedziczonej. W  przykładzie użyto zmiennych typu public.  Dodajmy teraz kilka funkcje do zadeklarowanych klas.

class czolg
{public:
        int amunicja;
        int predkosc;
        int odpornosc;
        int strzal;
        void jazda();
        };
        void czolg::jazda(){
            int v=0;
           }
           

int main(int argc, char *argv[])
{
    system("PAUSE");
    return EXIT_SUCCESS;
}

-------------------------- wersja z metody typu int -----------------------
class czolg
{public:
        int amunicja;
        int predkosc;
        int odpornosc;
        int strzal;
        void jazda();
        };
        void czolg::jazda(){
            int v=0;
           }
           

int main(int argc, char *argv[])
{
    system("PAUSE");
    return EXIT_SUCCESS;
}
« Ostatnia zmiana: Styczeń 11, 2012, 11:47:32 wysłane przez admin » Zapisane
admin
Administrator
Ekspert
*****
Wiadomości: 821


Email
« Odpowiedz #4 : Styczeń 11, 2012, 12:08:14 »

Pamiętaj: Z klasy tworzone są obiekty.
Trzy cechy programowania obiektowego:

    Hermetyzacja (kapsułkowanie) - definiowanie nowego typu danych które zawierają pola i metody (funkcje). Klasa to struktura która zawiera dane i funkcje.  Klasa czolg zawiera parametry czołgu  i funkcje opisujące jak będzie się zachowywał np. funkcję czolg.przemieszczenie opisująca zmianę położenia czołgu na planszy gry.
    Dziedziczenie - jeżeli do definicji nowego obiektu używamy opisu innego wcześniej zdefiniowanego , to ten nowy obiekt będzie dziedziczył wszystkie cechy (dane i metody) po obiekcie rodzicielskim. Abrams i Leopard posiadają dziedziczone z klasy czolg funkcję przemieszczenie
    Polimorfizm - umożliwia zmniejszenie do minimum pracy przy pisaniu kodu. Funkcja która została wprowadzona do obiektu potomnego posiada taką samą nazwę jak funkcja w klasie z której powstała ale może wykonywać różne zadania. Np. przy funkcji przemieszczanie Abrams może utonąć w bagnie podczas gdy Leopard będzie jechał.
Zapisane
admin
Administrator
Ekspert
*****
Wiadomości: 821


Email
« Odpowiedz #5 : Styczeń 11, 2012, 12:09:38 »

Kontrola dostępu do elementów klasy
 
Prywatne składowe klasy (private : int a;) są dostępne jedynie wewnątrz samej klasy , tj. tylko dla jej własnych metod.

Publiczne składowe klasy (public : int wiek;) widoczne są zawsze i wszędzie - nie tylko dla samej klasy (jej metod), ale na zewnątrz - np. dla jej obiektów.

Jeżeli nie zadeklarowano sposobu ograniczenia dostępu do danych, to w przypadku klas (definiowanych poprzez class ) jest to dostęp prywatny, natomiast dla typów strukturalnych (słówko struct ) - dostęp publiczny.

Metody czynią klasy. To dzięki funkcjom składowym pasywne zbiory danych, którymi są struktury, stają się aktywnymi obiektami.
Zapisane
admin
Administrator
Ekspert
*****
Wiadomości: 821


Email
« Odpowiedz #6 : Styczeń 11, 2012, 12:10:37 »

Przykład w którym do zmiennych b, c zadeklarowanych jako private i protected nie moga być użyte w programie głównym , czyli poza klasą.
Aby program kompilował trzeba wyłączyć linijki z odwołaniem do zmiennych w programie głównym.

#include <cstdlib>
#include <iostream>
using namespace std;
class Nowa_klasa
{
    public:
        int a;
    protected:
        int b;
    private:
        int c;
};
int main(int argc, char *argv[])
{Nowa_klasa obiekt;
    obiekt.a = 2;     //wolno
    obj.b = 3;     //nie wolno
    obiekt.c = 4;  //nie wolno   
    system("PAUSE");
    return EXIT_SUCCESS;
}
Zapisane
admin
Administrator
Ekspert
*****
Wiadomości: 821


Email
« Odpowiedz #7 : Luty 29, 2012, 11:43:40 »

Zadanie 3. Zadeklarować klasę Marta posiadającą metody: konstruktora, destruktora, glos oraz właściwości: masa typu int , kolor typu char. Następnie zadeklarować klasę malwina posiadającą takie same metody i właściwości jak marta ale dodatkow jeszcze metodę rysunek zwracająca wartość pustą.

using namespace std;
class marta
      {public:
        marta(){};
        ~marta(){};
        void glos(){};
        int masa;
        char kolor;};
       
        class malwina{
        public :
        malwina(){};
        ~malwina(){};
        void glos(){};
        void rysunek(){};
         int masa;
         char kolor;     
              };
       
int main(int argc, char *argv[])
{
    system("PAUSE");
    return EXIT_SUCCESS;
}
Zapisane
admin
Administrator
Ekspert
*****
Wiadomości: 821


Email
« Odpowiedz #8 : Luty 29, 2012, 11:46:47 »

Zadanie 4. Podobnie jak poprzednio tylko klasa malwina jest potomkiem klasy marta.

#include <cstdlib>
#include <iostream>

using namespace std;
class marta
      {public:
        marta(){};
        ~marta(){};
        void glos(){};
        int masa;
        char kolor;};
       
        class malwina:public  marta
        {
        void rysunek(){};
           
              };
       
int main(int argc, char *argv[])
{
    system("PAUSE");
    return EXIT_SUCCESS;
}
Zapisane
admin
Administrator
Ekspert
*****
Wiadomości: 821


Email
« Odpowiedz #9 : Luty 29, 2012, 12:36:54 »

Zadanie 5. Napisać program w którym zadeklarowano klasę wieżowiec. Klasa zawiera funkcję: objętość, oraz zmienne: liczba pięter i powierzchnia piętra. Należy zadeklarować obiekt wieża będąca potomkiem klasy wieżowiec . Następnie w programie wprowadzić z klawiatury wartości liczby pięter i powierzchni i przez wywołanie funkcji objętość obliczyć kubaturę obiektu wieża.

#include <cstdlib>
#include <iostream>

using namespace std;
class wiezowiec
      {public:
        //wiezowiec(){}; konstruktor
        //~wiezowiec(){}; destruktor
        float objetosc(float a, float b){return (a*b);};
        float liczba_pieter;
        float powierzchnia;};
     
       
int main(int argc, char *argv[])
{wiezowiec wieza;
cout<<"Podaj liczbe pieter: "; cin>>wieza.liczba_pieter;
cout<<endl<<"podaj powierzchnie uzytkowa: ";
cin>>wieza.powierzchnia;
cout<<"kubatura: "<<wieza.objetosc(wieza.liczba_pieter, wieza.powierzchnia)<<endl;
    system("PAUSE");
    return EXIT_SUCCESS;
}
« Ostatnia zmiana: Luty 29, 2012, 13:00:49 wysłane przez admin » Zapisane
admin
Administrator
Ekspert
*****
Wiadomości: 821


Email
« Odpowiedz #10 : Marzec 07, 2012, 08:24:01 »

Zadanie 6. W programie zadeklarować klasę pies posiadającą funkcje: konstruktora, destruktora, int szybkość z argumentem x typu integer. Następnie zadeklarować klasę potomną kot. W funkcji głównej zadeklarować obiekt mysio będący potomkiem klasy kot.

#include <cstdlib>
#include <iostream>

using namespace std;
class pies
{public:
      pies(){};
~pies(){};
int szybkosc(int x){};};

class kot :public pies
{};

int main(int argc, char *argv[])
{kot mysio;
    system("PAUSE");
    return EXIT_SUCCESS;
}
« Ostatnia zmiana: Marzec 07, 2012, 08:33:45 wysłane przez admin » Zapisane
admin
Administrator
Ekspert
*****
Wiadomości: 821


Email
« Odpowiedz #11 : Marzec 07, 2012, 09:17:48 »

Zadanie 7. Zadeklarować klasę pojazd,  klasa ma posiadać konstruktora, destruktora oraz dwie funkcje public: szybkość posiadającą argument int x, y. oraz zużycie paliwa z argumentem (int z).
private: karoseria typu void.
Napisać klasę samochod potomną do klasy pojazd posiadająca dodatkowo metodę void wysokosc(void).
W funkcji głównej zadeklarować obiekt fiat klasy samochod.
do funkcji szybkość należy wczytać z klawiatury wartości zmiennych x,y.


#include <cstdlib>
#include <iostream>

using namespace std;
class pojazd
{public:
        int szybkosc(int x,int y){return x*y;};
        int zuz_pal(int z){return 2*z;};
      pojazd(){};
~pojazd(){};
private: void karoseria(void){};};
class samochod :public pojazd
{void wysokosc(void){};};

int main(int argc, char *argv[])
{samochod fiat;
int a,b;
cout<< "podaj x:=";cin>>a;
cout<< "podaj y:=";cin>>b;
cout<<fiat.szybkosc(a,b);
    system("PAUSE");
    return EXIT_SUCCESS;
}

 
« Ostatnia zmiana: Marzec 07, 2012, 10:24:22 wysłane przez admin » Zapisane
admin
Administrator
Ekspert
*****
Wiadomości: 821


Email
« Odpowiedz #12 : Marzec 07, 2012, 09:57:10 »

Zadanie 8. Do poprzedniego zadania. zadeklarować dwa obiekty fiat i opel. Dopisać  porównanie które prosi o podanie zmiennych x,y dla dwóch obiektów fiat i opel i wyświela większa wartość funkcji szybkość.

#include <cstdlib>
#include <iostream>

using namespace std;
class pojazd
{public:
        int szybkosc(int x,int y){return x*y;};
        int zuz_pal(int z){return 2*z;};
      pojazd(){};
~pojazd(){};
private: void karoseria(void){};};
class samochod :public pojazd
{void wysokosc(void){};};
     
int main(int argc, char *argv[])
{samochod fiat,opel;
int a,b,c,d;
cout<< "fiat podaj x:=";cin>>a;
cout<< "fiat podaj y:=";cin>>b;
cout<< "opel podaj x:=";cin>>c;
cout<< "opel podaj y:=";cin>>d;
if(fiat.szybkosc(a,b)<opel.szybkosc(c,d)){};
    system("PAUSE");
    return EXIT_SUCCESS;
}
« Ostatnia zmiana: Marzec 07, 2012, 10:32:16 wysłane przez admin » 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

planszowanie th paladyni animeozywiolach watahaniebieskiegoksiezyca