Darmowe Forum
Kwiecień 19, 2024, 09:43:05 *
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: Obowiązujące zasady, czyli co należy wkuć  (Przeczytany 12175 razy)
admin
Administrator
Ekspert
*****
Wiadomości: 821


Email
« : Maj 03, 2011, 18:13:38 »

Wstęp.
Klasyczne programowanie , nazywane programowaniem strukturalnym jest związane z rozdzieleniem dwóch składowych programu : danych i przetwarzających je funkcji. Czyli jeżeli stworzymy pewną strukturę np. o nazwie czolg.
Niech struktura czolg posiada pola:amunicja, szybkosc , sila_ognia i zasieg_ognia. To chcąc napisać prosta gierkę w której będą walczyły dwa rożne czołgi. Trzeba zadeklarować dwie struktury np. Leopard i Abrams. Obie struktury posiadają tylko dane, tzn. w polach szybkosc Abrams ma np. 10, a Leopard 12. Brak jest funkcji przemieszczającej te czołgi na ekranie i umożliwiającej im walkę z sobą.  W programie strukturalnym sterowaniem jazdą każdego czołgu zajmuje się oddzielna funkcja, dość łatwo można stworzyć funkcje oddziałującą na szybkosc.  Jeżeli czołgi będą dwa można napisać jedną funkcję, do której bedą wczytywane jako zmienne zewnętrzne parametry jazdy określonego czołgu np. polozenie( Abrams.szybkosc). Co jednak będzie jeżeli szybkość czołgu zależy również od jego położenia na planszy i liczby pocisków. Wtedy mamy dwa rozwiązania piszemy dwie oddzielne funkcje opisujące ruch dla Abrams'a i Leoparda. I jest ok jeżeli mamy tylko dwa czołgi (tak wyglądały kiedyś gry). Ale jeżeli mamy 20 czołgów po każdej stronie, to liczba funkcji rośnie straszliwie. Drugim rozwiązaniem jest zachowanie jednej funkcji ale wczytującej kilkadziesiąt parametrów opisujących stan czołgu. Też dla większej liczby pojazdów robi się z tego porażka.
Najbardziej rzucającym sie w oczy rozwiązaniem byłoby przypisanie do każdej danej złożonej (struktury) całego zestawu funkcji opisującej działanie na danych tylko w jednej strukturze. I to jest właśnie tworzenie klasy. Klasą jest czolg który posiada dane i funkcje zmieniające te dane. Obiekty wywodzące się z klasy czolg czyli konkretne czołgi Abrams i Leopard posiadają własne podobne ale nie takie same funkcje.  
« Ostatnia zmiana: Maj 18, 2011, 07:18:24 wysłane przez admin » Zapisane
admin
Administrator
Ekspert
*****
Wiadomości: 821


Email
« Odpowiedz #1 : Maj 03, 2011, 19:24:03 »

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ł.
« Ostatnia zmiana: Maj 18, 2011, 07:24:27 wysłane przez admin » Zapisane
admin
Administrator
Ekspert
*****
Wiadomości: 821


Email
« Odpowiedz #2 : Maj 18, 2011, 07:57:41 »

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.
« Ostatnia zmiana: Maj 18, 2011, 08:24:25 wysłane przez admin » Zapisane
admin
Administrator
Ekspert
*****
Wiadomości: 821


Email
« Odpowiedz #3 : Maj 18, 2011, 11:29:05 »

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;
}
« Ostatnia zmiana: Maj 18, 2011, 12:08:50 wysłane przez admin » Zapisane
admin
Administrator
Ekspert
*****
Wiadomości: 821


Email
« Odpowiedz #4 : Maj 18, 2011, 11:36:03 »

Przykład ograniczeń w dziedziczeniu zmiennych protected i private

#include <cstdlib>
#include <iostream>

using namespace std;
class Nowa_klasa
{
    public:
        int a;
    protected:
        int b;
    private:
        int c;
};

class Potomna:public Nowa_klasa
{
    void metoda()
    {
        a = 2;  // Tak wolno
        b = 3;  //Tak wolno
        c = 4;  //Wystąpi błąd - można odwołąć się tylko w swojej klasie
    }
};

int main(int argc, char *argv[])
{    Potomna obiekt;
    obiekt.a = 5;  //Tak wolno
    obiekt.b = 6;  //NIe można
    obiekt.c = 7;  //Nie można

    system("PAUSE");
    return EXIT_SUCCESS;
}
« Ostatnia zmiana: Maj 18, 2011, 11:50:01 wysłane przez admin » Zapisane
admin
Administrator
Ekspert
*****
Wiadomości: 821


Email
« Odpowiedz #5 : Maj 18, 2011, 11:49:16 »


Przykład 3
Wszystkie zmienne public z klasy pierwsza  stają się zmiennymi typu private w klasie Potmek i wszystkie zmienne protected z klasy Pierwsza stają się zmiennymi typu private w klasie Potomek.


#include <cstdlib>
#include <iostream>

class Pierwsza
{
    public:
      int a;
    protected:
      int b;
    private:
      int c;
};

class Potomek :private Pierwsza   
{
    void metoda()
    {
        a = 2;  //Tak wolno
        b = 3;  //Tak wolno
        c = 4;  //Wystąpi błąd
    }
};

class Potomek_potomka:public Potomek
{
    void metoda()
    {
        a = 5;  //Bład, a to jest teraz zmienna private klasy Potomek
        b = 6;  //Bład, b to jest teraz zmienna private klasy Potomek
        c = 7;  //Bład, cały czas private
    }
};


int main(int argc, char *argv[])
{    Potomek obiekt;
    obiekt.a = 5;  //Tak nie można
    obiekt.b = 6;  //NIe można
    obiekt.c = 7;  //Nie można

    system("PAUSE");
    return EXIT_SUCCESS;
}
Zapisane
admin
Administrator
Ekspert
*****
Wiadomości: 821


Email
« Odpowiedz #6 : Maj 18, 2011, 12:04:51 »


Wszystkie zmienne public z klasy Pierwsza stają się protected w klasach potomek i wszystkie zmienne protected klasy Pierwsza stają się protected w klasi Potomek.

#include <cstdlib>
#include <iostream>
class Pierwsza
{
    public:
        int a;
    protected:
        int b;
    private:
        int c;
};

class Potomek:protected Pierwsza 
{
    void metoda()
    {
        a = 2;  //Tak wolno
        b = 3;  //Tak wolno
        c = 4;  //Tak nie wolno
    }
};

class Potomek_potomka:public Potomek
{
    void metoda()
    {
        a = 5;  //Wolno, a jest protected wewnątrz klasy Potomek
         
        b = 6;  //Wolno, b  jest protected w potomek_potomka
        c = 7;  //Wystąpi bład
    }
};



int main(int argc, char *argv[])
{    Potomek obiekt;
   obiekt.a = 5;  //Nie można
   obiekt.b = 6;  //NIe można
   obiekt.c = 7;  //Nie można

    system("PAUSE");
    return EXIT_SUCCESS;
}
Zapisane
admin
Administrator
Ekspert
*****
Wiadomości: 821


Email
« Odpowiedz #7 : Maj 25, 2011, 07:44:35 »

1. Czy zaprezentowane poniżej fragmenty programu napisane są poprawnie? Jeśli tak - to co wyświetli się na ekranie, jeśli nie - to gdzie jest błąd ?
a)
class mojaklasa
{int i;
};
main()
{mojaklasa test;
test.i=100;
cout<<test.i;
}
b)
class mojaklasa
{
public:
int funkcja(int a);
};
int mojaklasa :: funkcja (int a)
{
cout<<a;
}
main()
{
mojaklasa test;
test.funkcja(5);
}
c)
class mojaklasa
{
public:
int x,y;
mojaklasa();
};
mojaklasa::mojaklasa()
{cout<<"Konstruktor "<<endl;
x=10;y=20;
}
main()
{mojaklasa test, test1;
cout<<test.x<<","<<test.y;
cout<<test1.x<<","<<test1.y;
}

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


Email
« Odpowiedz #8 : Maj 25, 2011, 07:51:07 »

Zadanie 2. Proszę zadeklarować klasę Figura zawierającą metody pole powierzchni, obwod. Na podstawie klasy figura zadeklarować obiekty prostokat kwadrat kolo. W deklaracji klasy jawnie zadeklarowac konstruktora i destruktora.
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

wataha-wilkow-nocy life bross- dogo-dom pytamy