Showing posts with label class. Show all posts
Showing posts with label class. Show all posts

Friday, November 22, 2024

Top 8 Types of Functions in PHP You Must Know

PHP is a powerful server-side scripting language offering a wide range of functions to facilitate various tasks. Functions in PHP are blocks of code that execute only when called. They can accept data, parameters as input, process it, and return an output using 'return' or simply execute code within the function without returning a value. Such functions are called void functions. If you use a function that PHP has already written for you, such as 'is_numeric' and many others, these are called built-in functions. If a function is located within a class, it is called a method. Regardless of whether you are working with built-in functions, writing your own, or using advanced concepts like closures, understanding functions is crucial for efficient PHP programming. Functions in PHP are a powerful tool that enables modularity, code reuse, and flexibility. You should use them whenever it makes sense in your code, while also professionally creating your own.

Many years ago, if you asked us how many types of functions there are, we would have thought about the basic division and answered four:

a function that takes no parameters and returns a value

a function that takes parameters and does not return a value

a function that takes no parameters but returns a value

a function that takes no parameters and do not return a value

Today, PHP has proven us wrong. There are many more types of functions in the PHP programming language, and today we will list the top 8 that you will often use in your projects.

The student is thrilled with exploring the capabilities of functions in PHP

The student is thrilled with exploring the capabilities of functions in PHP

To make things much clearer for you regarding the numerous functions in PHP, let's dive straight into the practical part when it comes to functions. This is the easiest way to go through and explain even 8 types of functions in the PHP programming language. Unlike previous lessons in this PHP tutorial, today we'll expand our PHP coding by using a CSS file in addition to Bootstrap. You might wonder why use CSS when you're using Bootstrap. The reason is simple. There are things in HTML and PHP coding that you can't always style using Bootstrap alone. So, for larger projects, you'll often find that CSS styling is used in addition to Bootstrap. Nowadays, there are systems that don't allow the use of Bootstrap for security reasons, they only use CSS, while we've never seen a project that prohibited the use of CSS. That's why you should always learn and know how to use HTML and CSS together with PHP. Our HTML & CSS tutorial will make it easier for you to learn or simply refresh your memory, click here.

Then we'll learn how to pass data from one PHP page with an HTML form to another PHP page for further processing. Also, since there are multiple functions, we'll place them in a separate PHP file and teach you how to connect PHP files, so that you have the impression that separate functions in another PHP file are available as if they were in the same one. This PHP lesson might sound a bit complicated, but let us reassure you by coding everything together, writing simple code that you can definitely use in your projects.

Choose the Right Function for the Job: 8 Function Types for Better Code

Sunday, June 05, 2016

Šta su generici i kako se prave?


Pod pojmom generici u većini slučajeva se podrazumevaju sve klase koje sadrži imenski prostor System.Collection.Generic. Često se generičke klase, generičke liste ili uopšteno sve generičke kolekcije svrstavaju pod pojmom generici, ali za iskusnije programere kad kažete generici to se uglavnom misli na generičke klase, metode, strukture i sve što zahteva parametre. Znači češće se misli na nešto što ste vi sami isprogramirali da bude generičko dok pod pojmom generičke liste se misli na generičke liste koje već postoje u imenskom prostoru System.Collection.Generic. U prethodnom postu „Negeneričke kolekcije u C# programskom jeziku“ sam objasnio šta su negeneričke kolekcije, koje postoje u System.Collection imenskom prostoru i dao sam vam jednostavan primer kako da pravite vlastitu negeneričku klasu iako se takve retko prave. Takođe sam vam naveo da su generičke kolekcije za razliku od negenerički kolekcija; one kolekcije koje su parametorizovane; znači moraju imati određen tip podataka i svi elementi u kolekciji moraju biti istog tipa podataka.


( Generici u C# programskom jeziku )


Jednostavno, generičke kolekcije koriste se kad želite da svi elementi u kolekciji budu istog tipa podataka i zato su type safe. Izuzetno su korisni kada želite da izbegnete hard kodirane tipove i ne morate da pamtite koja vrsta podataka se koristi. Takođe nemate potrebe ni za eksplicitnom konverzijom. To se sve odnosi i na generike i na generičke liste i uopšteno na sve generičke kolekcije. Inače pod pojmom generici ću se isključivo baviti pravljenjem vlastitih generički kolekcija. Vi ćete u vašim programima često koristiti već napravljene generičke liste iz klasa .Net-a, ali će te takođe često dolaziti u situaciju da sami pravite svoje generike. Još samo jedna napomena. Ukoliko pravite igrice, korišćenje uopšteno svih kolekcija se smatra skupo, uzima više memorije i može usporiti igricu, pa u tom slučaju preporučujem da izbegavate kolekcije iako programerima olakšavaju posao. Inače u poslovnim aplikacijama, kolekcije se koriste konstantno ali generičke kolekcije. Kada pokrenete Microsoft Visual Studio, primetiće te da se imenski prostor System.Collection.Generic insertuje u vašim aplikacijama dok to nije slučaj sa imenskim prostorom System.Collection. To vam je takođe znak da treba da koristite generičke kolekcije ako već koristite kolekcije.

Generička klasa sa jednim parametrom

Wednesday, May 04, 2016

Rad sa taskovima u C# programskom jeziku


U prethodnom postu „Rad sa nitima u C# programskom jeziku“ je u najkraćim crtama sa čak 7 primera objašnjeno kako se radi sa nitima. Međutim, da bi ste razumeli niti i to je malo. Na internetu možete pronaći mnogo primera varijacija i upotrebe niti, dok možete i trebate eksperimentisati i sa vlastitim kombinacijama. Zato vam savetujem da mnogo samostalno eksperimentišete i testirate vaše vlastite metode pozivajući ih u nitima; u vašim vlastitim testovima i aplikacijama. To se isto odnosi i na taskove i na asinhronizovane metode i sve što učite. Takođe, morate da poznajete razliku i kad i šta treba da koristite. Na primer, pored upotrebe niti će te brzo shvatili da je mnogo bolje koristiti klasu ThreadPool nego klasu Threading pogotovo ako nameravate koristiti više niti sa dugotrajnim procesima ili kad više puta nameravate koristiti istu nit. Razlog je jednostavan, niti su expensive – skupi. Znači uzimaju mnogo memorije i vremena. Potrebno vam je 1MB za svaku nit koju koristite. Klasa Threading vam omogućava da kreirate niti na veoma niskom nivou, na nivou OS – Operativnog sistema. To znači da nad niti imate punu kontrolu, tj. možete da nit pokrenete, zaustavite ili prekinete.

 
( Taskovi su često mnogo bolje rešenje od upotrebe niti ) 

Za razliku od niti ThreadPool je delimično rešenje jer je mnogo jeftiniji; upamtite i da u ThreadPool-u svaka nit je uvek Background nit i da se niti u ThreadPool ne uništavaju kad se nit izvrši. Ali sa ThreadPool-om vi ne možete određivati prioritete izvršavanja niti, zato bi ste morali koristiti neke druge mehanizme; isto tako vi ne možete niti prekinuti u vreme izvršavanja. Kada koristite ThreadPool nemate kontrolu nad nitima kao sa klasom Threading jer ThreadPool radi na nivou CLR – Common Language Runtime-a. To znači i da broj niti koji možete izvršavati u ThreadPool-u zavisi od verzije .Net Framework-a kojeg koristite. Na primer ako koristite .NET Framework 4.0 onda možete koristiti 1 023 niti za 32-bit aplikacije ili 32 767 za 64-bit aplikacije. Međutim ako koristite .Net Framework 2.0 ograničeni ste na samo 25 niti prema procesoru. Isto tako vi faktički, najjednostavnije rečeno; samo pošaljete vaše zadatke u ThreadPool, kad se ThreadPool napuni vi samo trebate sačekati dok se ne oslobodi i nastavi sa izvršavanjem drugih zadataka. Vi čak možete i sami da odredite veličinu ThreadPool-a ali činjenica je da kontrolu nemate. Vi možete da pošaljete neki zadatak, ali ne možete sačekati da se završi ili da prihvatite neki rezultat. Zato postoji klasa Task koja rešava probleme i nedostatke i klase Threading i klase ThreadPool.

Kako da kreiramo taskove?


Tuesday, March 22, 2016

Manifest, GAC i Refleksija


Pre nego što pređemo na Manifest, podsetio bi vas da dobro prostudirate dva prethodna posta Arhitektura Microsoft .NET Framework-a i Šta su sklopovi? Koje sve komponente sadrži .Net Framework i koji je proces kompajliranja i izvršavanja aplikacija programiranih u .Net programskim jezicima je toliko bitno znati, da ćemo prvo u najkraćim crtama ponoviti materiju koja se mora znati. Znači, Microsoft .Net Framework je platforma koja omogućava razvoj i izvršavanje .Net aplikacija. To je platforma koje obezbeđuje komponentnu infrastrukturu, integraciju programskih jezika, internet interoperabilnost, jednostavan razvoj, jednostavnu instalaciju, pouzdanost i bezbednost. CLR – Common Language Runtime je najvažniji deo Microsoft .Net Framework-a nadležan za aktiviranje objekata, izvršavanje bezbednosnih provera nad njima, njihovo smeštanje u memoriju, izvršavanje i uklanjanje iz memorije. CLR podržava sve programske jezike koje se mogu prevesti u MSIL – Microsoft Intermediate Language. 
 

( Sklop u jednom i sklop u više fajlova )

Sledeće komponente Microsoft .Net Framework-a su BCL – Base Class Library, biblioteka baznih klasa koja se sastoji se od klasa, interfejsa i tipova podataka koje omogućavaju korišćenje funkcija sistema i FCL – Framework Class Library koja sadrži specijalizovane biblioteke tipova podataka koje sadrže Data i XML klase. Microsoft .Net Framework sadrži i klase koje omogućavaju tehnologije za razvoj aplikacija poput konzolni aplikacija, formi, WPF aplikacija, univerzalni aplikacija, mobilni aplikacija, web servisa, web aplikacija itd. Proces prevođenja izvornog koda u izvršni u najkraćim crtama se može podeliti u dva koraka. Prvo se izvorni kod prevodi u MSIL – Microsoft Intermediate Language, zatim u mašinski kod. MSIL je jezik nižeg nivoa koji se lako pretvara u mašinski kod. On omogućuje platformsku nezavisnost, poboljšanje performansi i jezičku interoperabilnost. Jednostavno klasa koja je napisana u jednom programskom jeziku može da komunicira sa klasom pisanom u drugom programskom jeziku. CTS – Common Type System – zajednički sistem tipova definiše skup pravila koje .Net kompajleri moraju da poštuju. CTS tipovi imaju istu semantiku bez obzira u kom su programskom jeziku definisani. I naravno ne treba izostaviti ni GC – Garbidge Collection – skupljač smeća, komponentu za upravljanje memorijom. GC jedino radi sa referentnim tipovima podataka, što znači da objekte na hipu do kojih ne vodi ni jedna referenca se automatski oslobađa. GC sprečava curenje memorije, tačno vreme oslobađanja memorije nije određeno i oslobađanje resursa ne treba da se radi u destruktoru klase.

Gde se sad u sve navedeno uklapa sklop? 
 

Tuesday, February 23, 2016

Object klasa u C# programskom jeziku


Već vam je poznato da klasu možete da posmatrate i kao šablon objekta, dok za objekat možete da kažete da je objekat instanca klase. Međutim, šta je Object klasa? U mnogim programskim jezicima, tako i u C# programskom jeziku, za sve klase postoji koreni tip iz koga se izvode svi ostali objekti u hijerarhiji. Tako su sve .NET klase u krajnjoj liniji izvedene ili preciznije rečeno nasleđene iz klase Object koja se nalazi u imenskom prostoru System (System.Object). Ukoliko u C# programskom jeziku ne naznačite da je neka klasa izvedena iz druge klase, kompajler automatski pretpostavlja da je navedena klasa izvedena iz klase Object. Što u praksi znači da vi automatski imate pristup velikom broju javnih i zaštićenih metoda članova koji su već definisani za klasu Object. Ove metode su vam takođe dostupne i u svim drugim klasama koje definišete.

 
( Metode Object klase u C# programskom jeziku )

Isto tako kada koristite u vašim deklaracijama tip object, on definitivno predstavlja krajnji roditeljski tip iz kog se dalje izvode svi izvorni i korisnički definisani tipovi. Ključna reč ili tip object je samo alias za System.Object klasu. To je najključnija stvar u C# programskom jeziku po kojoj se C# programski jezik razlikuje od C++ programskog jezika. Pre nego što pređemo na praktičan primer kako se koristi klasa Object, pogledajte spisak metoda koji su definisani u klasi Object.
  • ToString() – Vraća objekat u obliku string.
  • GetHashCode() – Koristi se prilikom implementiranja rečnika (heš tabela).
  • Equals(Object) – Poredi jednakost primerka objekta.
  • Equals(Object, Object) – Poredi jednakost dva primerka objekta.
  • ReferenceEquals(Object, Object) – Proverava da li se dve reference odnose na isti objekat.
  • GetType() – Vraća detalje tipa objekta.
  • MemberwiseClone() – Pravi površnu kopiju objekta.
  • Finalize() – Ovo je .NET verzija destruktora.
Da bi ste koristili navedene metode u vašim klasama, većinu njih treba da prekoračite sa ključnom rečju override i napišete vašu implementaciju. U praksi bi na primer svaka klasa trebala da ima svoju implementaciju metode ToString() inače svako ko koristi vašu klasu može pozvati metodu ToString() jer vaša klasa je izvedena iz Object klase; ali ako niste implementirali ovu metodu, nećete dobiti rezultat koji očekujete.

Kako u praktičnom primeru da koristimo navedene metode? 
 

Wednesday, February 10, 2016

Apstraktne klase u C# programskom jeziku



Svaka klasa koja sadrži ključnu reč abstract i koja ima najmanje jednu apstraktnu metodu se naziva apstraktna klasa. Apstraktna metoda je metoda koja sadrži ključnu reč abstract i koja nema ni telo ni implementaciju. Apstraktna klasa ne može da se instancira dok svaka njena apstraktna metoda mora da bude nadjačana u svakoj ne apstraktnoj klasi koja nasleđuje apstraktnu klasu. To jednostavno znači da apstraktnu klasu i njene apstraktne metode koristite kad niste sigurni kakva će biti implementacija neke metode ali vam je ta metoda neophodna. Apstraktna klasa je u svakom slučaju nepotpuna klasa. 


( Apstraknta klasa je klasa koja ne može imati objekte )

Na primer, pretpostavite da u vašem projektu morate imati klasu koja predstavlja konekciju sa bazom podataka, međutim vi ne znate kakve će sve baze koristiti kompanija za koju radite projekat.


public abstract class Connection
{
public abstract string ConnectionString();

}

Tada pravite apstraktnu klasu sa apstraktnom metodom koja predstavlja konekciju sa bazom podataka i ostavljate kompaniji da prilikom korišćenja vaše apstraktne klase u drugoj klasi nadjačaju metodu za konekciju i definišu njeno ponašanje.

class Program : Connection
{
public override string ConnectionString()
       {
return "ConnectionString for the database!";

}          
}

Na ovaj način svako ko na primer hoće da vidi tabelu zaposlenih mora implementirati konekciju sa bazom podataka u kojoj se podaci zaposlenih nalaze. Možda kompanija ima posebnu bazu podataka i tabelu zaposlenih u Beogradu i jednu drugu u Novom Sadu i podaci su fizički odvojeni, što nije praksa ali se dešava kad velika kompanija kupi malu. Onda vaša apstraktna klasa je idealno rešenje za sve vaše konekcije sa bazama podataka.

Koje su još stvari bitne za apstraktnu klasu? 

Friday, January 22, 2016

Matematika, klasa Math u C# programskom jeziku



Pre se prilikom učenja programiranja u C i C++ programskom jeziku često koristila matematika i zbirke matematičkih zadataka kako bi se kroz matematiku učilo programiranje. Poznavanje matematičkih formula, manipulacije brojevima i poznavanje geometrije je na neki način bio preduslov da bi ste se uopšte i upustili u programiranje. Danas se toliko ne insistira na tome; kad učite C# programski jezik; jedna od najbitnijih matematičkih klasa Math, retko da se i uopšte spominje prilikom edukacije. Jednostavno se podrazumeva da koristite klasu Math kad vam je ona potrebna kao i bilo kakva sporedna klasa .Net Framework-a. Međutim ja vam savetujem da ovu klasu dobro prostudirate jer će te je često koristiti ukoliko se budete bavili ozbiljnim projektima.



( Math klasa, nezaobilazna za matematičke proračune )


Klasa Math je statička klasa, koja se nalazi u System.Math imenskom prostoru, tako da nemate potrebe da uvozite ovu klasu ukoliko već koristite imenski prostor System. Klasa Math vam omogućava da koristite osnovne matematičke funkcije, koje su već testirane i nemate potrebe da vi pišete vaše. Od verzije C# 6.0 vi možete da imenski prostor Math koristite i na ovakav način:

using static System.Math;

Na ovaj način možete pisati kraće konstante i metode klase Math.

WriteLine(PI.ToString()); // Math.PI.ToString() = 3.14159265358979

Pored toga što ne morate razmišljati koliko je tačno PI u vašim proračunima kad koristite klasu Math, isto tako ne morate ni da razmišljate ni koliki je prirodni logaritam, od pre poznat kao hiperbolički logaritam što je logaritam za bazu e, gdje je e iracionalna konstanta, čija je približna vrijednost:

WriteLine(E.ToString()); // E = 2.71828182845905

Koje matematičke metode sadrži klasa Math?

Tuesday, January 19, 2016

Rad sa stringovima u C# programskom jeziku


Još od prvog posta posvećenom C# programskom jeziku, mi konstantno koristimo stringove. Njihova upotreba u kodiranju je toliko česta čak i kad ne koristite ni delimično sve mogućnosti manipulacije sa stringovima. String u C# programskom jeziku vam je instanca klase System.String koja predstavlja tekst kao nepromenjivu sekvencu Unicode karaktera. Svaki karakter u stringu je Unicode simbol; ključna reč string sa kojom deklarišemo promenjive tipa string je samo alias klase System.String.

string link = "www.manuelradovanovic.com";
String link = "www.manuelradovanovic.com";
System.String link = "www.manuelradovanovic.com";

Sve tri navedene deklaracije su vam iste. Ono što je bitno da upamtite da je string referentni tip podataka. Pre inicijalizacije tip string ima vrednost null.



( Svaki karakter u stringu je Unicode simbol )

Često će te čuti da je string kao i niz tipa char; sličnost definitivno postoji, indeksiranje počinje od 0 ali ovo definitivno neće raditi jer karakteri ne mogu biti modifikovani kao u nizovima.

link[0] = 'M'; // error

Međutim, ovo hoće:

char[] alphabet = new char[18];
alphabet[0] = link[4]; // Output: m

Klasa String jednostavno tretira stringove kao niz char ali read-only. Vi možete dodeliti vrednost tipu string, dodeliti mu neku vrednost niza tipa char ili dodeliti mu neku vrednost tipa string.

string link = "www.manuelradovanovic.com";
char[] alphabets = { 'M', 'a', 'n', 'u', 'e', 'l' };
link = new string(alphabets);
string name = link;

Ali za manipulisanje karakterima u stringu, to možete jedino implicitno preko metoda klase String. Jednom kad deklarišete i dodelite vrednost promenjivoj tipa string; to je nepromenjivo! Zato kad vi dodelite ili promenite neku drugu vrednost promenjivoj tipa string vi u stvari stvarate novi string u memoriji dok samo imate utisak da je vaš string promenio vrednost. Vaš stari string će biti uklonjen čim to ustanovi sakupljač otpadaka, dok vi vidite vrednost novog stringa. Ukoliko nameravate u vašem programu da mnogo manipulišete stringovima onda vam je bolje koristiti klasu StringBuilder i radi brzine i radi memorije da vaša aplikacija nebi imala ozbiljne komplikacije sa performansama.

Koje se metode najčešće koriste za manipulaciju stringovima?


Friday, December 11, 2015

Klase u C# programskom jeziku


Klasa je šablon za objekat koji opisuje vrstu i količinu podataka koje će objekat sadržavati, ali ne predstavlja ni jedan određen primerak objekta. Tačnije, klase u osnovi predstavljaju šablone iz kojih se mogu stvarati objekti. Objekti sadrže podatke i metode za manipulisanje i pristup podacima, ali klasa određuje koje podatke mora da sadrži svaki konkretan objekat iako klasa sama ne sadrži nikakve podatke. Taj konkretan objekat uglavnom u literaturi se naziva primerak ili instanca. Inače klasa kao reč je nastala prema pojmu klasifikacija. Kada pravite klasu, vi uređujte članove klase u smisleni entitet. Za razliku od stuktura, klase vam daju mnogo veću fleksibilnost i više mogućnosti s obzirom da klase podržavaju nasleđivanje. Strukture su vrednosni tip podataka dok su klase referentni tip. Klase imaju ključnu ulogu u C# programskom jeziku i kodiraju se drugačije od klasa u C++ programskom jeziku. O klasama u C++ programskom jeziku možete pogledati ovde. Rad sa klasama u C# programskom jeziku je mnogo jednostavniji.



( Diagram članova klase u C# programskom jeziku ) 


Primer iz stvarnog sveta za klasu možete zamisliti i kao svojstva koja opisuju na primer tramvaj. Tramvaj ima motor, sedišta, kočnice, ponekad i klima uređaj; može da se vozi napred i nazad. Klasa opisuje sva svojstva i radnje koje jedan tramvaj poseduje ali klasa ne predstavlja ni jedan određen tramvaj. U stvarnom svetu tramvaj bi predstavljao objekat. S obzirom da postoje različiti tramvaji, znači da postoje i različiti objekti; ali svi bi objekti tramvaj bili prepoznati kao primerci klase tramvaj. Klase opisuju svojstva i ponašanje objekta preko članova. Članovi klase mogu biti polja, svojstva, metode i događaji. Klasu pravite tako što koristite ključnu reč class. Sintaksa za pravljenje klase je sledeća:

class ime_klase
{
         članovi_klase

}


Šta je enkapsulacija?


Monday, October 26, 2015

Rad sa stringovima u C++ programskom jeziku


Jedan od najčešći komunikacija računara sa korisnikom su tekstualni stringovi. Gotovo je nemoguće i zamisliti neki program bez teksta. Mogućnost da kombinujete, rastavljate i analizirate stringove je danas nešto što se podrazumeva kao abeceda programiranja. Bez obzira šta vi radite sa stringovima, računar njih pamti i radi s njima kao da su to brojevi. Zato tekstualni podaci jednostavno u svakom bajtu koriste specijalan kod koji odgovara konkretnom znaku, i taj kod zovemo ASCII kod. Prevođenje stringova u brojeve i obratno se vrši iza scene, pa vi nemate taj osećaj ali tako se prevode najmanje dvaput kad unosite tekst sa tastature i kad ga prikazujete na ekranu. Inače u C++ programskom jeziku string je zapravo niz, koji se sastoji od elemenata tipa char i završava se null karakterom ( \0 ).



( C++ , string data type )


Pogledajte ovu liniju koda:

char myString[] = {'M','a','n','u','e','l','','R','a','d','o','v','a','n','o','v','i','c','\0' };

Ovako pisanje koda kad je tekst u pitanju je zamorno i kompleksno. Iako karakter po karakter, ovaj niz funkcioniše, postoji mogućnost i za pravljenje grešaka. Zato postoji i lakši način pisanja istog koda, ali sa navodnicima ““.

char myStringSimple[] = "Manuel Radovanovic";

Pisanje stringa pod duplim navodnicima bez zareza i vitičasti zagrada je mnogo lakše. Čak nije ni potrebno da dodajete null karakter jer će kompajler to uraditi umesto vas. Vi možete deklarisati niz char i bez inicijalizacije, ali možete i odrediti unapred koliko elemenata ima vaš niz char. Obratite pažnju samo kada uzimate podatke od korisnika, tada treba da koristite ovakav pristup:

char myStringSimpleInput[19];
cin.get(myStringSimpleInput, 19);

Inače ako koristite samo naredbu cin da dodelite stringove, kod prvog praznog prostora će cin ubaciti null karakter i umesto rezultata Manuel Radovanovic, vaš rezultat će biti samo Manuel. Programski jezik C++ je nasledio biblioteku funkcija koje služe za rad sa stringovima poput strcpy() I strncpy() za kopiranje jednog stringa u drugi. Međutim ukoliko radite sa stringovima u C++ programskom jeziku, najbolje je da koristite klasu string, inače možete imati dosta bezbedonosni propusta i bagova u programu.

Šta je klasa string i kako se koristi? 

Friday, October 16, 2015

Klase u C++ programskom jeziku – 2 deo



U prethodnom postu; možete ga pogledati ovde, sam vam predstavio jedan osnovni primer pravljenja i korišćenja klase koja je kodirana u istom fajlu vašeg programa. U poslovnom svetu to nije praksa i zato ću vam pokazati kako se pravi i poziva klasa koja je podeljena u header fajl i poseban fajl za klasu iz Visual Studio-a 2015. Ukoliko koristite neki drugi IDE, verovatno sami trebate napraviti fajlove ili je procedura nešto drugačija ili IDE odrađuje posao na svoj način. Važno je da je suština ista. U ovom postu opisujem isti program kao u prethodnom postu osim što je prepravljen i što su mu dodate neke stvari, pre svega radi pravilnije upotrebe klasa ali i dalje njihovog učenja. Kad pokrenete novi program, vi možete u prozoru Solution Explorer-a da kliknite na projekat desnim tasterom miša, zatim na Add i izaberite Class, kao na slici:


( Solution Explorer, dodavanje klase projektu )

Zatim je potrebno da izaberite C++ Class, i samo klikom na dugme Add pokrećete čarobnjaka za klase Generic C++ Class Wizard. Klasi je dovoljno dati naziv i pritisnuti dugme Finished. U našem primeru klasa se zove Animal.


( Generic C++ Class Witzard )

Čarobnjak za klase je dodao dva nova fajla u projekat; Animal.h i Animal.cpp. U fajlu Animal.h definišu se deklaracije promenjivih i funkcija dok se funkcije pišu u Animal.cpp fajlu. Kad pogledate u fajl Animal.h, možete videti da je IDE čarobnjak za wizard ubacio naziv i telo klase, ali i prazan konstruktor klase i destruktor iste. Pogledajte kod u fajlu Animal.h koji Visual Studio-a 2015 
generiše i pre nego što počnete da pišete klasu:

#pragma once

class Animal
{
public:
        Animal();
       ~Animal();

};

Šta je konstruktor, a šta je destruktor?

Thursday, October 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?