C# Unity UI Unity C#
Početna stranica
Polazna lekcija
Instalacija
Sintaksa i ispisivanje
Komentari
Varijable i vrste podataka
Pretvaranje vrsta podataka
Unošenje podataka
Operatori
Math
String
Booleans
If i else
Switch
While
For
Break i Continue
Niz
Liste
Metoda
Klasa
Enum
Iznimka
Datoteke

OOP

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...


Klase i objekti

U sljedećem primjeru ćemo vam pokazati kako kreirati klasu.

Primjer:


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.

Primjer:


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.

Primjer:


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.

Program1.cs:


class Auto 
{
    string boja = "crvena";
}
            

Program2.cs:


class Program
{
    static void Main(string[] args)
    {
        Auto objektAuto = new Auto();
        Console.WriteLine(objektAuto.boja); // Ispisuje crvena
    }
}
            


Članovi klase

Polja i metode unutar klasa često se nazivaju "članovi klasa".

Primjer:


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);
    }
}
            


Objekt metode

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.

Primjer:


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
    }
}
            


Konstruktori

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.

Primjer:


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.

Primjer:


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
    }
}
            


Modifikatori pristupa

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.

Primjer:


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.

Primjer:


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.

Primjer:


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.

Primjer:


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.

Primjer:


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

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.

Primjer:


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
    }
}

            


Nasljeđivanje

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.

Primjer:


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.

Primjer:


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'
*/
            


Prijašnje

Sljedeće