Tutorijali
Objektno orijentirano programiranje og-cs

Što je objektno orijentirano programiranje (OOP)?

U dosadašnjim tutorijalima prošli smo kroz različite koncepte programiranja. Naučili smo Arrays, for loop, metode i druge bitne operacije. Sada ćemo naučiti ključni dio programskog jezika Java, a to je objektno orijentirano programiranje (OOP). Kao i svi dosadašnji tutorijali, i ovaj se nalazi na našem YouTube kanalu.

Objektno orijentirano programiranje je opisivanje odnosno preslikavanje entiteta iz stvarnog života u računalni program. U OOP se entiteti koje tako preslikavamo zovu objekti. Oni sadržavaju informacije o entitetu kojeg opisuju, kao i interakcije koje ti objekti mogu raditi. Iz primjera ćemo najbolje shvatiti što je OOP i kako funkcionira.

class Cat {

    String name;
    String color;

    void meow() {
        System.out.println(name + " says meow!");
    }
}

Napravili smo klasu koja se zove Cat, a poslužit će za kreiranje predloška (blueprint) kojim opisujemo mačku. Klasa Cat sadržava informacije o mački (ime i boju) te akcije koje mačka može raditi. Konkretno, mačka koju opisujemo može mijaukati. Sada ćemo klasu Cat pozvati u main metodi tako što ćemo kreirati objekt.

public class Main {
    public static void main(String[] args) {

        Cat myCat = new Cat(); // kreirali smo novi objekt
        myCat.name = "Jonesy"; // odredili smo ime
        myCat.color = "Yellow"; // odredili smo boju

        myCat.meow(); // pozvali smo akciju koju objekt može činiti
    }
}

U ovom smo primjeru iskoristili klasu Cat da bismo kreirali objekt Cat. Isti smo taj objekt spremili u varijablu myCat te joj dali ime, odredili boju i pozvali akciju koju objekt može izvršiti (mijaukati). Istu tu klasu možemo iskoristiti za kreiranje više objekata.

public class Main {
    public static void main(String[] args) {

        Cat myCat = new Cat(); // kreirali smo novi objekt tipa Cat
        myCat.name = "Jonesy"; // odredili smo ime
        myCat.color = "White"; // odredili smo boju

        myCat.meow(); // pozvali smo akciju koju objekt može činiti
		
		Cat myOtherCat = new Cat(); // kreirali smo novi objekt tipa Cat
        myOtherCat.name = "Blackie"; // odredili smo ime novom objektu
        myOtherCat.color = "Black"; // odredili smo boju novom objektu

        myOtherCat.meow(); // pozvali smo akciju koju novi objekt može činiti
    }
}

Kao što vidite, kreirali smo još jedan objekt (myOtherCat) i dali mu druge informacije s kojima smo ga opisali. Koristeći klase, možemo definirati doslovno svaki entitet iz stvarnog svijeta. Evo još jednog primjera, u kojem ćemo pomoću OOP-a opisati automobil.

class Car {

    String brand;
    String model;
	boolean abs;
    int year;

    void start() {
        System.out.println("The " + brand + " " + model + " is starting.");
    }

    void drive(int distance) {
        System.out.println("Driving the " + brand + " for " + distance + " kilometers.");
    }
}

Kreirali smo klasu Car koja nam daje osnovne podatke o automobilu: koji je brand, model, ima li ABS te koje je godine proizveden. Sada ćemo iskoristiti tu klasu da bismo kreirali dodatne objekte.

public class Main {
    public static void main(String[] args) {

        Car myCar = new Car(); // kreirali smo novi objekt tipa Car
        myCar.brand = "Mazda";
        myCar.model = "MX-5";
		myCar.abs = true;
        myCar.year = 2023;

        myCar.start(); // pokrenuli smo automobil
        myCar.drive(50); // vozili smo ga 50 km

        Car anotherCar = new Car(); // kreirali smo još jedan objekt tipa Car
        anotherCar.brand = "Renault";
        anotherCar.model = "Captur";
		anotherCar.abs = true;
        anotherCar.year = 2022;

        anotherCar.start(); // pokrenuli smo ga
        anotherCar.drive(30); // vozili smo ga 30 km
    }
}

U prethodnom bloku koda smo kreirali dva objekta, za što smo kao predložak koristili istu klasu Car. Ujedno smo pomoću metoda start() i drive() pozvali dvije akcije koje ti objekti mogu izvršiti.

Kao što vidite, OOP nam omogućava rad s entitetima iz stvarnog svijeta u našem kodu. Istovremeno nam olakšava rad jer pomoću OOP možemo isti kod koristiti više puta, čime izbjegavamo dupliciranje.

OOP u složenijem primjeru

Napravit ćemo još jedan primjer OOP-a u Javi, ali ovog puta nešto složeniji. Kreirat ćemo bankovnu aplikaciju koja sadrži popis klijenata banke, njihovih računa i ostvarenih transakcija.

public class Customer {

    private String name;
    private double accountBalance;

    public Customer(String name, double accountBalance) {
        this.name = name;
        this.accountBalance = accountBalance;
    }

    public void deposit(double amount) {
        System.out.println("Customer " + name + ", your balance is €" + accountBalance);
        accountBalance += amount;
        System.out.println("You deposited €" + amount + ". New balance is €" + accountBalance);
    }

    public void withdraw(double amount) {
        if (amount > accountBalance) {
            System.out.println("Customer " + name + ", you don't have enough funds. You tried to withdraw " +
                    amount + ", but your current balance is €" + accountBalance);
        } else {
            accountBalance -= amount;
            System.out.println("Customer " + name + ", you withdraw €" + amount +
                    ". New balance is €" + accountBalance);
        }
    }
}

Kreirali smo klasu Customer, koja sadrži osnovne podatke o klijentu banke (ime i stanje na računu). Metodama deposit() i withdraw() opisali smo što klijent može učiniti sa svojim računom. Klijent konkretno može položiti novac na račun te podići novac s njega. Ujedno je dodana jednostavna logika u slučaju da nema dovoljno novca na računu. Također je dodan konstruktor, kako bismo jednostavnije pristupali podacima iz klase Customer. Sada ćemo iskoristiti tu klasu da bismo kreirali objekte.

public class Main {
    public static void main(String[] args) {

        Customer ivan = new Customer("Ivan", 14.45);
        Customer maja = new Customer("Maja", 228.56);

        ivan.deposit(250.00);
        maja.withdraw(200.00);
        ivan.withdraw(80.00);
        maja.deposit(1000.00);
    }
}

Klasa Customer nam je poslužila za kreiranje dva objekta, pri čemu svaki objekt ima ime i početno stanje na računu. Metodama deposit() i withdraw() opisali smo što objekti mogu raditi. Rezultat pozivanja metoda deposit() i withdraw() je sljedeći:

Customer Ivan, your balance is €14.45 
You deposited €250.0. New balance is €264.45 // ovaj i prethodni red su rezultat deposit metode za Ivana
Customer Maja, you withdraw €200.0. New balance is €28.56 // ovo je rezultat metode withdraw za Maju
Customer Ivan, you withdraw €80.0. New balance is €184.45 // ovo je rezultat metode withdraw za Ivana
Customer Maja, your balance is €28.56
You deposited €1000.0. New balance is €1028.56 // ovaj i prethodni red su rezultat deposit metode za Maju

Ključni koncepti OOP-a

Objektno orijentirano programiranje je znatno širi pojam od primjera koji su ovdje navedeni. Da bismo shvatili svrhu i mogućnosti OOP paradigme važno je znati četiri ključna koncepta OOP-a, a to su

Za svaki od ova četiri koncepta slijedi vlastiti tutorijal, kako bismo lakše svladali najbitniji dio programiranja u Javi.

Autor

Marko Lubar

Ova stranica koristi kolačiće da bi poboljšalo korisničko iskustvo, više o tome možete saznajte na našoj stranici "politika privatnosti"

Politika privatnosti