You are on page 1of 39

OSNOVE OBJEKTNO USMJERENOG

PROGRAMIRANJA
Prednosti objektno usmjerenog programiranja
• Lakše modeliranje problema
• Brži razvoj kvalitetne programske podrške
• Lakše održavanje programskih rješenja

Objektno usmjereni programski jezici


• C#
• C++
• Java
• Python
OSNOVNI POJMOVI

 Objekt – element programa karakteriziran svojim svojstvima i metodama

 Klasa – predložak po kojem se izgrađuju objekti


OBJEKT

 Konkretna vrijednost određene klase


 Naziv objekt klase i jedinka klase smatrat ćemo sinonimima
 Opisan je svojstvima (atributima)
KLASA

 Struktura koja
se koristi za
stvaranje
njezinih jedinki
 Svi tipovi
podataka u
Pythonu su
klase
Klasa: Automobil
 Atributi (svojstva): proizvođač, model, tip motora, snaga motora, vanjska boja, broj vrata, …

 Metode: Vozi(), Koči(), Otvori prozor(), …

 Klasa automobil = bilo koji automobil na svijetu


 Objekt automobil = točno određeni automobile koji možemo pokazati na ulici
 Tipovi podataka
 Osnovni
 int
 float
 bool

 Podatkovne zbirke
 stringovi
 n-torke
 liste
 rječnici
PRIMJERI POZNATIH KLASA PYTHONA

 String

 Operatori: +, *, in, not in


 Funkcije: len(), min(), max()
 Svojstvo: niz znakova pohranjen u stringu
 Metode: lower(), upper(), index(),…

 Lista
 Svojstvo: članovi liste
 Metode: append(), sort(),…
• Svi tipovi podataka u Pythonu su klase, a sve pojedine vrijednosti jedinke, odnosno objekti klasa.
OBLIKOVANJE KLASA U JEZIKU PYTHON

• Definiciju čini niz metoda (funkcija) te svojstva


• U pravilu se ime klase piše velikim početnim slovom
• Svaka metoda obavezno ima parametar self – preko njega dolazimo do svih svojstava i metoda klase,
on predstavlja pojedini objekt klase
KONSTRUKTOR KLASE

 Osnovna metoda unutar koje se postavljaju vrijednosti svojstava klase


 Posrednik koji se poziva prilikom kreiranja objekta iz klase

def __init__(self , parametri):


definicija
 Osnovna namjena metode je postavljanje svojstava (atributa) klase
 Atributi klase su globalni i pristupamo im: self.ime_atributa
PRIMJER 1.
PRIMJER 2. KLASA PRAVOKUTNIK

Objekt

Djelovanje metode
PRIMJER 2.

 Klasa GeometrijskiLik
 Hijerarhija klase geometrijskih likova
OPIS KLASE GeometrijskiLik

 Konstruktor klase izgleda kao i konstruktor klase Pravokutnik


 Formule za opseg i površinu tih likova bitno su različite zbog toga ćemo u tijelo metoda opseg() i povrsina()
staviti pass, time je naznačeno da će svaka klasa dati svoju implementaciju tim metodama
NASLJEĐIVANJE

 Definiranje nove klase moguće je iz već definirane klase


 Izvedena klasa će nasljediti svojstva i metode postojeće klase,
ali i proširivati njene funkcionalnosti
 Metode se u izvedenim klasama mogu redefinirati
 Opći oblik definicije klase koja nasljeđuje neku klasu je:

 Unutar konstruktora izvedene klase unutar metode __init__()


trebamo pozvati metodu __init__() klase koju nasljeđujemo tako da
ispred imena metode koju nasljeđujemo stavimo super().__init__().
KLASA KRUG
 Parametar r je definiran kao opcionalni parametar s inicijalnom
vrijednošću 0. Opcionalni parametri mogu se izostaviti pri pozivu
funkcije.
KLASA KVADRAT

 Klasa Kvadrat nasljeđivat će klasu Pravokutnik


ZADATAK 1: KLASA TROKUT

 Kod konstruktora treba dodati varijablu za treću stranicu trokuta


 Izraditi metodu za opseg
 Izraditi metodu za površinu (Heronova formula)
 Kreirajte objekt i pozovite metodu
RJEŠENJE
PRIMJER. KLASA RAZLOMAK

 Parametar metode može biti i objekt te metoda može vraćati objekt


 Kreirajmo klasu Razlomak te metodu umnozak() koja će vraćati umnožak dviju svojih jedinki (dvaju razlomaka).
 Klasa Razlomak će imati dva atributa: brojnik b i nazivnik n, pri čemu ćemo postaviti početnu vrijednost brojnika
b na nula, a nazivnika n na 1
PRIMJER. KLASA RAZLOMAK

 Kreirajmo dva objekta klase Razlomak. Nazovimo ih x i y. Želimo izračunati njihov umnožak z. Taj umnožak je
ponovno objekt iz iste klase Razlomak. U skladu s pravilima objektno usmjerenog programiranja, objekt x treba
pozvati metodu svoje klase koja će kao parametar imati objekt y, a kao rezultat ćemo dobiti objekt iste te klase z,
tj. z = x.umnozak(y)

#objekt x je u metodi umnozak() predstavljem varijablom self,


dok je objekt y postao parametar metode umnozak() koja mora
biti definirana ovako.
#y.b je brojnik, dok je y.n nazivnik razlomka (objekta) y
PRIMJER. KLASA RAZLOMAK
PRIMJER. KLASA RAZLOMAK

 Klasi Razlomak dodaj metodu krati() koja će skratiti razlomak.


Iskoristi je u metodi umnozak()
SPECIJALNE METODE __str__() I __repr__()
• __str__ - vraća tekstualni prikaz objekta kakav će se ispisivati
pozivom tog objekta unutar funkcije print()
• __repr__-vraća prikaz objekta kakav će se ispisati kada u
interaktivnom sučelju navedemo samo ime objekta
ZADATAK.

 Nadopuni klasu Razlomak s metodom zbroj(self, y) koja zbraja dva razlomka x i y.


 Nadopuni klasu Razlomak s metodom potencija(self, pot) koja će razlomak potencirati s potencijom pot
 Nadopuni klasu Razlomak s metodom usporedba(self, y) koja će usporediti dva razlomka x i y te vratiti True ili
False.
UČAHURIVANJE (ENKAPSULACIJA)

 U objektno usmjerenom programiranju enkapsulacija označava proces grupiranja i zaštite atributa u jednu cjelinu-
klasu
 Jedan od osnovnih koncepata objektno usmjerenog programiranja
 Primjer: Samoposlužni aparat
 Naša interakcija s aparatom je ograničena i ne možemo utjecati na rad aparata

Novac Proizvod
ENKAPSULACIJA

 Dijeli elemente klase na dva dijela


 Privatni – vidljivi samo unutar klase, a ne i izvan klase. Njegov naziv započinje dvjema donjim crtama (__naziv)
 Javni – vidljiv i izvan definicije klase

Primjer. Nogometna momčad


Javni elementi – igrači
Privatni elementi – strategija igre
PRIVATNI I JAVNI ELEMENTI
GETTER I SETTER METODE

 Za pristup privatnim atributima klase koristimo Getter i Setter metode


 getter() je metoda kojom pristupamo atributu van klase
 setter() je metoda kojom postavljamo odgovarajuće vrijednosti van klase

 Imaju standardni oblik kao i druge metode, samo ispred početka funkcije imaju opisnike @property za getter(),
odnosno @naziv_svojstva.setter za setter(). I getter() i setter() imaju isto ime koje treba podsjećati na naziv
svojstva
PRIMJER. Zadana je klasa Krug (s početka poglavlja).
a) Promijenimo ju tako da atribut R bude privatan, te dodajmo još jednu privatnu metodu za računanje poluopsega kružnice.
b) Pomoću gettera i settera omogućimo pristup privatnom atributu R.

b)
KLASA date
 Klasa se nalazi u modulu datetime
Naziv metode opis
date(godina, mjesec, dan) Konstruktor klase
year Svojstvo koje predstavlja godinu za dani objekt tipa datum

month Svojstvo koje predstavlja mjesec za dani objekt tipa datum

day Svojstvo koje predstavlja dan za dani objekt tipa datum


weekday() Vraća redni broj dana u tjednu na koji pada trenutačni datum
(0 – ponedjeljak, …, 6- nedjelja
today() Vraća trenutačni datum, pozivamo je nad bilo kojim
objektom, najčešće nad praznim date objektom (date.today())
toordinal() Vraća redni broj dana, počevši od 1.1.1. za trenutačni datum
fromordinal(n) Vraća datum koji pada n dana nakon 1.1.1.
ILUSTRACIJA
ZADATAK. KLASA DATUM

 Kreiraj klasu Datum koja će imati sve što ima i klasa date, ali će imati još i metode za računanje razlike (u
danima) između dva datuma te računanje datuma koji će biti n dana nakon danog datuma. Osim toga, promijeni
prikaz datuma na način da se datum ispisuje u obliku stringa dd.mm.yyyy.
ZADATAK. KLASA DATUM

You might also like