Kod je prisutan svim klasama.
Kod je prisutan samo unutar iste klase.
Kod je dostupan unutar iste klase ili u klasi koja je izvedena iz te klase.
Kod je dostupan samo unutar vlastite skupine, ali ne i iz druge skupine.
OOP(objektno orijentirano programiranje) je vrsta programiranja koja se temelji na konceptu objekta di su objekti instance klase, a klase predstavljaju šablone za stvaranje objekta.
Objekt su instance klasa koje kombiniraju atribute i funkcije/metode.
Klase predstavljaju šablone za stvaranje objekata. Definiraju atribute i metode koje će objekti imati, ali same po sebi ne stvaraju objekte.
Primjer klase iz stvarnog života bi bio auto, a njegovi objekti bi bili Toyota, Nissan, Tesla...
U sljedećem primjeru ćemo vam pokazati kako kreirati klasu.
class ImeKlase
{
}
Objekt se stvori iz klase. U sljedećem primjeru ćemo stvoriti klasu Auto i iz nje ćemo stvoriti objekt. Kako bi stvorili objekt iz klase Auto, moramo specificirati ime klase i nakon toga ime objekta. Nakon toga koristimo se s new.
class Auto
{
string boja = "plava";
static void Main(string[] args)
{
Auto objektAutomobila = new Auto();
Console.WriteLine(objektAutomobila.boja); // Ispisuje plava
}
}
Moguće je imati više od jednog objekta iste klase.
class Auto
{
string boja = "plava";
static void Main(string[] args)
{
Auto objektAutomobila1 = new Auto();
Auto objektAutomobila2 = new Auto();
Console.WriteLine(objektAutomobila1.boja); // Ispisuje plava
Console.WriteLine(objektAutomobila2.boja); // Ispisuje plava
}
}
Možete stvoriti objekt klase i pristupiti mu u drugoj klasi. To se uglavnom radi zbog bolje organizacije koda.
class Auto
{
string boja = "crvena";
}
class Program
{
static void Main(string[] args)
{
Auto objektAuto = new Auto();
Console.WriteLine(objektAuto.boja); // Ispisuje crvena
}
}
Polja i metode unutar klasa često se nazivaju "članovi klasa".
class Auto
{
// Članovi klase
string boja = "ljubicasta"; // polje
int brzina = 200; // polje
static void Main(string[] args)
{
Auto objektAuto = new Auto();
Console.WriteLine("Boja automobila je " + objektAuto.boja);
Console.WriteLine("Brzina automobila je " + objektAuto.brzina);
}
}
Objekti metode bi se odnoslio na metode objekta, odnosno funkcije koje su povezane s objektom određene klase. Klase u C# definiraju objekte, a metode su funkcije koje se izvršavaju u kontekstu tih objekata.
U sljedećem primjeru ćemo stvoriti objekt metode maksimalniPotencijal.
class Auto
{
string boja = "crna"; // polje
int brzina = 100; // polje
public void maksimalniPotencijal() // metoda
{
Console.WriteLine("Auto je postigao svoj maksimalni potencijal.");
}
static void Main(string[] args)
{
Auto objektAuto = new Auto();
objektAuto.maksimalniPotencijal(); // Pozvali smo metodu maksimalni potencijal
}
}
Konstruktor je posebna metoda koja se koristi za inicijalizaciju objekti. Prednost konstruktora je u tome što se poziva kada se stvori objekt klase. Koristi se za postavljanje početnih vrijednosti za polja.
class Auto
{
public string model; // Polje
// Konstruktor
public Auto()
{
model = "Qashqai";
}
static void Main(string[] args)
{
Auto Nissan = new Auto();
Console.WriteLine(Nissan.model); // Ispisuje Qashqai
}
}
U sljedećem primjeru ćemo stvoriti klasu konstruktora s parametrom.
class Auto
{
public string model; // Polje
// Konstruktor
public Auto(string imeModela)
{
model = imeModela;
}
static void Main(string[] args)
{
Auto Nissan = new Auto("Qashqai");
Console.WriteLine(Nissan.model); // Ispisuje Qashqai
}
}
public | Kod je prisutan svim klasama. |
---|---|
private | Kod je prisutan samo unutar iste klase. |
protected | Kod je dostupan unutar iste klase ili u klasi koja je izvedena iz te klase. |
internal | Kod je dostupan samo unutar vlastite skupine, ali ne i iz druge skupine. |
public string boja;
private string model;
U sljedećem primjeru ako probamo pristupiti boja dobit ćemo error. Razlog zašto ga ne dobivamo je jer je taj dio koda komentiran.
class Auto
{
public string model = "Qashqai";
private string boja = "plava";
}
class Program
{
static void Main(string[] args)
{
Auto nissan = new Auto();
Console.WriteLine(nissan.model); // Ispisuje Qashqai
/* Console.WriteLine(nissan.boja); da ovaj dio nije komentiran dobili bi error
jer je boja stavljena pod privatno */
}
}
Kako bi mogli pristupiti boji moramo je postaviti umjesto private napisati public.
class Auto
{
public string model = "Qashqai";
public string boja = "plava";
}
class Program
{
static void Main(string[] args)
{
Auto nissan = new Auto();
Console.WriteLine(nissan.model); // Ispisuje Qashqai
Console.WriteLine(nissan.boja); // Ispisuje plava
}
}
U ovom primjeru, pristupanjem boja iz Main metode izazvat će grešku jer boja ima protected pristup, što znači da je vidljiva samo unutar klase Auto.
class Auto
{
public string model = "Qashqai";
protected string boja = "plava"; // Primjena protecteda na varijablu boja
}
class Program
{
static void Main(string[] args)
{
Auto nissan = new Auto();
Console.WriteLine(nissan.model); // Ispisuje Qashqai
Console.WriteLine(nissan.boja); // Ovo će uzrokovati grešku jer je boja protected i ne može se pristupiti izvan klase ili izvedene klase
}
}
U ovom primjeru, boja je označena s internal, pa se može koristiti unutar iste skupine (u okviru istog projekta). Ako biste pokušali pristupiti boja iz druge skupine, dobili biste grešku pristupa.
class Auto
{
public string model = "Qashqai";
internal string boja = "plava"; // Primjena internala na varijablu boja
}
class Program
{
static void Main(string[] args)
{
Auto nissan = new Auto();
Console.WriteLine(nissan.model); // Ispisuje Qashqai
Console.WriteLine(nissan.boja); // Ispisuje plava, jer smo unutar iste skupine
}
}
Svojstva vam omogućuju definiranje članova klase koji se ponašaju kao atributi, ali imaju dodatnu logiku povezanu s čitanjem get i pisanjem set njihovih vrijednosti.
U prijašnjoj lekciji naučili smo da ne možemo pristupiti atribute s modifikatorom private unutar drugih klasa. Nekad nam je potrebno pristupiti privatnom atributu i to je moguće uz korištenje svojstva get i set.
class Auto
{
private string model; // polje
public string Model // svojstvo
{
get { return model; }
set { model = value; }
}
}
class Program
{
static void Main(string[] args)
{
Auto marka = new Auto();
marka.Model = "Nissan";
Console.WriteLine(marka.Model); // Ispisuje Nissan
}
}
U C# je moguće naslijediti polja i metode iz jedne klase u drugu
Izvedena klasa je klasa koja nasljeđuje iz druge klase.
Osnovna klasa je klasa od koje se nasljeđuje.
Da bismo nešto naslijedili iz klase, koristimo se znakom:.
U sljedećem primjeru, klasa Kompjuter će nasljediti polja i metode iz klase Racunala.
class Racunalo
{
public string brand = "Razer"; // polje Racunala
public void ventilator() // Metoda Racunala
{
Console.WriteLine("Vrrrrrrrrrrr!");
}
}
class Kompjuter : Racunalo // Izvedena klasa
{
public string kompanija = "Asus"; // Kompjuter field
}
class Program
{
static void Main(string[] args)
{
Kompjuter mojKompjuter = new Kompjuter();
// Pozovi metodu ventilator() iz klase Racunalo na objekt mojKompjuter.
mojKompjuter.ventilator();
Console.WriteLine(mojKompjuter.brand + " " + mojKompjuter.kompanija);
/*Ispisuje:
Vrrrrrrrrrrr!
Razer Asus
*/
}
}
Ako želite onemogućiti nasljeđivanje klasa, koristite riječ sealed.
sealed class Vozilo
{
// Komentar
}
class Auto : Vozilo
{
// Komentar
}
/*
S obzirom da je klasa vozilo "sealed"
dobit ćemo error koji glasi
'Auto': cannot derive from sealed type 'Vozilo'
*/