четвртак, 15. октобар 2015.

Klase u C++ programskom jeziku – 1 deo


Najjednostavnije rečeno; klasa je struktura podataka koja omogućava da svojstva i metode posmatramo kao zaseban objekat. Klasa je način da se napravi tip podataka koji ima i stanje i ponašanje. U principu to je samo kolekcija promenjivih različitih tipova koji su kombinovani sa skupom povezanih funkcija. Prva stvar koju trebate shvatiti prilikom učenja klasa su mnoštvo novih programerskih pojmova, ključni reči na engleskom jeziku koje često i kad se prevedu, ostavljaju početnike zbunjenim. Iskusan programer može satima pričati o klasama dok ga početnici slušaju i pitaju se o čemu ovaj priča. Zato je neophodno da razumete svaki pojam kad ga koristite inače vi možete praktično praviti klase da čak i ne razumete kad nešto u klasi treba da koristite a kad ne. Zato vam savetujem bez žurbe i mnogo google-anja i praktični rešenja sa stalnim samoispitivanjem ( Zašto baš onako kad može i ovako? ); dok ne shvatite. Klase se ne mogu objasniti jednim postom, zato ću ovu temu opisati u više postova. Klase su najznačajnije obilježje C++ programskog jezika, one vas uvode u objektno orijentisanje podataka s mnoštvom mogućnosti što podrazumeva i više odluka i odgovornosti. U C programskom jeziku nemate klase; zato se mnogo koriste strukture, dok u C# programskom jeziku rad sa klasama je mnogo jednostavniji i drugačiji zahvaljujući .Net Framework-u. U C++ programskom jeziku rad sa klasama je nešto komplikovaniji.


 ( Definicija klase u C++ programskom jeziku )

U klasičnom programiranju, kod i podaci su odvojeni. OOP – Objektno orjentisano programiranje taj odnos menja i omogućava vam da pakujete i podatke i kod zajedno u nešto što zovemo klasa. Klasa omogućava da zamotate različite promenjive i funkcije u kolekciju i to zovemo objekat. Ali sam postupak svega toga zovemo enkapsuliranje. Znači da enkapsuliranje shvatite kao zamotavanje. Prednost enkapsuliranja je u tome što npr. sve karakteristike i ponašanje kućnih ljubimaca stavite u jednu klasu i nazovete je životinja. Kad vam trebaju karakteristike kućnog ljubimca dovoljno je da pozovete klasu životinja u svom programu. Ali nije sve samo na tome. Mnoštvo je mogućnosti šta vi sve možete da radite sa vašom klasom i do koje mere možete da utičete kako će se tipovi podataka i funkcije ponašati, čak i druge klase uključene u vašu klasu. Klasa se pravi prvo deklarisanjem i ovo je opšta sintaksa za C++ ključnu reč class:

class ime_klase { 
                 deklaracije

};

Obratite pažnju da blok klase obavezno mora da se završi sa „ ; “, ukoliko pišete vašu klasu u isti fajl gde pišete i program. Klasu ne možete pisati u funkciji main() kao ni funkcije, nego klase se često pišu iznad deklaracije main() dok se funkcije pišu ispod. Klase uvek počinju deklaracijom kao što su deklaracija promenjivih, deklaracija funkcija ili i jednog i drugog što imate u klasi. Uglavnom dok učite klase i često u malim programima; klase se pišu u istom fajlu vašeg programa, međutim u projektima tako nešto je neprihvatljivo. Klase se u projektima pišu u odvojenim fajlovima gde se deklaracija klase upisuje u header fajl dok se ostali kod piše u fajlu klase, i onda se inicijalizuje pozivaju preko header fajla.

Kako da napišem jednostavnu malu klasu i pokrenem je u svom programu? 


Da bi vam bilo što jasnije zamislite da pravite klasu koja treba da vam olakša pravljenje liste kućnih ljubimaca i njihovih osnovnih karakteristika. Vi bi ste mogli za to rešenje da koristite mnoge promenjive ili strukturu. Međutim, vi želite veće mogućnosti i bolju kontrolu nad kućnim ljubimcima. Zato pravite klasu. Recimo da želite da vaša klasa ima karakteristike tipa kućnog ljubimca poput imena, pola, godine, težine i broja nogu kućnog ljubimca. Posle vi možete proširiti klasu mnogobrojnim svojstvima i metodama poput; da li kućni ljubimac može da puže, hoda, trči ili leti i sve što vam padne na pamet da neka životinja ima ili može. U igricama bi ste upravu takvu klasu koristili za crtanje i pomeranje vaših životinja. Dakle, prvo navedemo ime naše klase i ispišemo deklaracije svih naših promenjivih i funkcija:



#include "stdafx.h"
#include <iostream>
#include <string>
using namespace std;

class Animal
{
private:

       bool m_gender = true;

public:

       string name;
       string species;
       string gender = Gender(m_gender);
       unsigned short age;
       unsigned int weight;
       unsigned short legs;

       string Gender(bool m_gender)
       {
             if (m_gender)
             {
                    return "Male";

             }
             else
             {
                    return "Female";

             }
       }

};

Za razliku od C# programskog jezika, prvo što možete primetiti je da se u klasama za javne i privatne promenjive koriste blokovi. Drugo, klasa bez blokova je klasa sa svim privatnim deklaracijama i tako se podrazumeva dok vi ne navedete drugačije. Klasa sa svim privatnim deklaracijama neće raditi, jednostavno morate imate bar jednu deklaraciju javnog tipa ili nema ni svrhe pozivati klasu ako u njoj nemate čemu pristupiti. U prethodno navedenom kodu vidimo da je promenjiva gender tipa Boolean jedina privatna promenjiva i ona nam treba da se koristi u funkciji Gender. Kad deklarišete promenjivu kao privatnu, onda se njoj ne može pristupiti van klase. Funkcija Gender je vrlo jednostavna, ona prihvata vrednost true ili false i vraća nam string koji nam jasnije govori da li je kućni ljubimac muškog ili ženskog pola. S obzirom da ona vraća string, napravili smo i javnu string promenjivu gender da bi njoj dodelili rezultat funkcije. Pogledajte celi kod kako izgleda kada klasu koristimo u našem jednostavnom programu:



#include "stdafx.h"
#include <iostream>
#include <string>
using namespace std;

class Animal
{
private:

       bool m_gender = true;

public:

       string name;
       string species;
       string gender = Gender(m_gender);
       unsigned short age;
       unsigned int weight;
       unsigned short legs;

       string Gender(bool m_gender)
       {
             if (m_gender)
             {
                    return "Male";

             }
             else
             {
                    return "Female";

             }
       }

};

int main()
{
       Animal myanimal1, myanimal2;
       void Printing(Animal animal);

       myanimal1.name = "Leo";
       myanimal1.species = "Dog";
       myanimal1.age = 3;
       myanimal1.Gender(true);
       myanimal1.weight = 15;
       myanimal1.legs = 4;

       myanimal2.name = "Katty";
       myanimal2.species = "Cat";
       myanimal2.age = 5;
       myanimal2.Gender(false);
       myanimal2.weight = 8;
       myanimal2.legs = 4;

       Printing(myanimal1);
       Printing(myanimal2);

       system("PAUSE");
       return 0;

}

void Printing(Animal animal)
{
       cout << "Name:" << animal.name << endl;
       cout << "Species: " << animal.species << endl;
       cout << "Age: " <<  animal.age << " years." << endl;
       cout << "Gender: " << animal.gender << endl;
       cout << "Weight: " << animal.weight << " kg." << endl;
       cout << "Number of Legs: " << animal.legs << " legs." << endl << endl;

}

Kad pokrenete program, rezultat je u ovom slučaju najkraća lista kućni ljubimaca i njihovih osnovnih karakteristika. Za ostale karakteristike koje mogu da sadrže kućni ljubimci najbolje da pogledate u enciklopediji i dovedete vašu klasu do savršenstva.

Name:Leo
Species: Dog
Age: 3 years.
Gender: Male
Weight: 15 kg.
Number of Legs: 4 legs.
Name:Katty

Species: Cat
Age: 5 years.
Gender: Male
Weight: 8 kg.
Number of Legs: 4 legs.


Press any key to continue . . .

Kako to sve izgleda možete pogledati i na video-u:





  

( C++ Tutorial - 9. Classes ( Part I ) )


Nastaviće se . . .