Objektno Orjentisano Programiranje- prvi dio


Objektno orijentisano programiranje (OOP) predstavlja način programiranja pri čemu se definišu objekti koji poprimaju osobine objekata iz realnog svijeta. Nastao na ovom konceptu, OOP s jedne strane proširuje funkcionalnosti osnovnih i izvedenih tipova na način da implementaciju enkapsulira (ugrađuje) u sami tip, dok s druge strane uvodi nove osobine tipova poput nasljeđivanja i polimorfizma koji daju nove funkcionalnosti i način implementacije. Sve tri paradigme OOP (enkapsulacija, nasljeđivanje i polimorfizam) čine objektno orjentisano programiranje efikasnije, lakše za kolaboraciju i održavanje te u većem dijelu rješava probleme proceduralnog programiranja.

Klase

Tipovi podataka u čistom OO jeziku poput C# označavaju se klasama, koje se mogu podijeliti na osnovne i izvedene tipove. Programski jezik poput C++, osnovne tipove ne tretira kao klase, dok klasama označava samo izvedene odnosno apstraktne tipove. Osnovne tipove poput integer, double, float, bool, char u čisto OOP jeziku zovemo klasama jer u sebi enkapsuliraju metode koje nam omogućuju rad nad samim tipovima, na isti način kako to radimo i sa izvedenim tipovima. Izvedeni tipovi su svi tipovi koji su definisani od strane programera.
U čistom objektno orijentisanom programskom jeziku ne postoji mogućnost izvršavanja koda koji nije dio neke klase, odnosno koji nije definisan unutar određene metode kao članice klase. S druge strane ovo implicira da se u objektno orijentisanom programiranju može izvršiti samo onaj kod koji je definisan unutar određene klase, odnosno instanciranjem objekta i poziva neke metode članice. Ovom činjenicom se shvata naziv objektno orijentisano programiranje, kao programirnje objekata.
Naravno, programski jezici nužno ne poštuju ovu strogu činjenicu, a pored toga imaju mogućnost izvršavanja koda izvan objekata klase. Kako je ranije naglađeno programski jezik koji ima ovakvu dualnu osobinu jeste C++. C++ programski jezik je objektno orijentisani jezik koji podržava sve osobine OO koncepta, dok istovremeno predstavlja klasični proceduralno orjentisani jezik. Zbog te činjenice danas C++ jezik predstavlja najrasprostranjeniji i najviše korišten programski jezik. Pogodan je kako za programiranje sistemskih komponenti operativnih sistema i drivera za uređaje, tako i za projekte zasnovane na poslovnoj logici. Deklaracija klase u C++ sa pripadajućim članovima možemo predstaviti u obliku prijera tipa Osoba.

class Osoba
{
    //konstruktori/destruktor klase
public:
    Osoba();
    ~Osoba();  

//clanovi klase /atributi
private:
	string  imePrezime;
	time_t  datumRodjenja;
	string  mjestoRodjenja;  

	//javne metode clanica
public:
	void Init (string ime, string datum);  

	//javne virtualne metode clanice
public:
	virtual string Status();
};

Prethodni listing predstavlja deklaraciju klase Osoba. Implementacija klase u smislu implementacije konstruktora, destruktora i metoda Init i Status nalazi se izvan tijela klase, a često u posebnoj cpp datoteci. Primjer implementacije klase Osoba vidimo na sljedećem listingu.

//defoltni konstruktor
Osoba::Osoba()
{
    imePrezime = "n/a";
}  

//destruktor klase
Osoba::~Osoba()
{
}  

//virtuelna metoda koja vraca status osobe
string Osoba::Status()
{
	return "Osoba";
}  

//postavljanje imena i datuma rodjenja osobe
void Osoba::Init(string ime, string datum)
{
	imePrezime = ime;  

	//konverzija string u datum
	struct tm tm = {0};
	strptime(datum.c_str(), "%d/%m/%Y", &tm);
	datumRodjenja = mktime(&tm);
}

Prethodni listing čini implementacija kontsruktora koji se poziva prilikom formiranja objekta Osoba, dok se implementacija dstruktora nalazi odmah iza. Metoda Init postavlja ime i datum rođenja za osobu, dok metoda Status vraća string sa nazivom vrste osobe.
C# i Java predstavljaju najpopularnije OO programske jezike pored C++, u kojima sve počinje sa objektima, i nije dozvoljeno definisanje metode izvan klasa. Specijalna metoda koja označava ulaznu ili početnu tačku zove se main metoda. Ovu metodu je dovoljno definisati u bilo kojoj klasi, a kompajler će je prepoznati kao početnu metodu i označiti je kao ulaznu tačku programa. Primjer listing 1 i 2 u C# izgledaju na slijedeći način:

public class Osoba
{
	//konstruktori/destruktor klase
	public Osoba()
	{
		imePrezime = "n/a";
}  

~Osoba()
	{  

	}  

	//clanovi klase /atributi
	private string      imePrezime;
	private DateTime    datumRodjenja;
	private string      mjestoRodjenja;  

	//javne metode
	public void Init(string ime, string datum)
	{
		imePrezime = ime;
		DateTime dat;
		if(DateTime.TryParse(datum, out dat))
			datumRodjenja= dat;
	}  

	//javne virtualne metode clanice
	public virtual string Status()
	{
		return "Osoba";
	}
};

Iz prethodnih listinga možemo vidjeti određenu razliku u deklarisanju i implementaciji klase i njenih članova. U C++ vidimo da je deklaracija i implementacija metoda članica klase razdvojena. Za razliku od C++ u C# deklaracija i implementacija klase u C# se ne razdvajaju, tako da se svaka metoda članica deklariše i implementira na jednom mjestu.

About Bahrudin Hrnjica

PhD in Mechanical Engineering, Microsoft MVP for .NET. Likes .NET, Math, Mechanical Engineering, Evolutionary Algorithms, Blogging.

Posted on 16/05/2016, in .NET, C#, C/C++, Knjige, Programiranje and tagged , , , , . Bookmark the permalink. Leave a comment.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s