32
Algoritmi i programiranje Objekti, klase i liste Prof. dr. sc. Tonči Carić ZITS :: Algoritmi i programiranje :: Objekti, klase i liste © 2013 Carić, Ivanjko U izradi predavanja dijelom korišteni materijali predmeta ASP sa FER-a, http://www.fer.unizg.hr/predmet/asp

Algoritmi i programiranje - Weboteka.net i programiranje/e-student/011... · Algoritmi i programiranje Objekti, klase i liste Prof. dr. sc. Tonči Carić ZITS :: Algoritmi i programiranje

  • Upload
    others

  • View
    71

  • Download
    7

Embed Size (px)

Citation preview

Page 1: Algoritmi i programiranje - Weboteka.net i programiranje/e-student/011... · Algoritmi i programiranje Objekti, klase i liste Prof. dr. sc. Tonči Carić ZITS :: Algoritmi i programiranje

Algoritmi i programiranje

Objekti, klase i liste

Prof. dr. sc. Tonči Carić

ZITS :: Algoritmi i programiranje :: Objekti, klase i liste © 2013 Carić, Ivanjko

U izradi predavanja dijelom korišteni materijali predmeta ASP sa FER-a,

http://www.fer.unizg.hr/predmet/asp

Page 2: Algoritmi i programiranje - Weboteka.net i programiranje/e-student/011... · Algoritmi i programiranje Objekti, klase i liste Prof. dr. sc. Tonči Carić ZITS :: Algoritmi i programiranje

ZITS :: Algoritmi i programiranje :: Objekti, klase i liste © 2013 Carić, Ivanjko

• Sadržaj

– Uvod

– Objekti

– Klase

– Liste

Page 3: Algoritmi i programiranje - Weboteka.net i programiranje/e-student/011... · Algoritmi i programiranje Objekti, klase i liste Prof. dr. sc. Tonči Carić ZITS :: Algoritmi i programiranje

ZITS :: Algoritmi i programiranje :: Objekti, klase i liste © 2013 Carić, Ivanjko

• Računalna okolina i zahtjevi koji se postavljaju na nju postaju sve kompleksniji:

– Grafičko sučelje

– Povećanje brzine obrade podataka

– Međusobna komunikacija računala

– Obrada i arhiviranje velike količine podataka

• Jednostavni tipovi podataka postaju niži apstrakcijski nivo i koriste se nova paradigma klasa i objekata

Uvod

Page 4: Algoritmi i programiranje - Weboteka.net i programiranje/e-student/011... · Algoritmi i programiranje Objekti, klase i liste Prof. dr. sc. Tonči Carić ZITS :: Algoritmi i programiranje

ZITS :: Algoritmi i programiranje :: Objekti, klase i liste © 2013 Carić, Ivanjko

• Objekti su složene strukture podataka koje mogu slati poruke drugim objektima i primati poruke od drugih objekata

• Za razvoj određenog programa potrebno je identificirati objekte čijom će interakcijom program rješavati problem

• Identificirani objekti se generaliziraju u klase

• Programiranje zasnovano na objektima

• Aplikacije postaju skup objekata koje izmjenjuju poruke

Objekti

Page 5: Algoritmi i programiranje - Weboteka.net i programiranje/e-student/011... · Algoritmi i programiranje Objekti, klase i liste Prof. dr. sc. Tonči Carić ZITS :: Algoritmi i programiranje

ZITS :: Algoritmi i programiranje :: Objekti, klase i liste © 2013 Carić, Ivanjko

• Svaki objekt ima svoje varijable i metode

– Moguće definiranje razina pristupa

• Razmjena podataka odvija se pomoću metoda za čitanje i pisanje

– Metode za rad s konzolom • Console.ReadLine() i

• Console.WriteLine()

• Moguće je kreirati sličan objekt pomoću nasljeđivanja svojstava

• Moguće definiranje metoda objekta istog imena, ali različitih ulaznih podataka

– Višeobličje ili polimorfizam

Objekti

Page 6: Algoritmi i programiranje - Weboteka.net i programiranje/e-student/011... · Algoritmi i programiranje Objekti, klase i liste Prof. dr. sc. Tonči Carić ZITS :: Algoritmi i programiranje

ZITS :: Algoritmi i programiranje :: Objekti, klase i liste © 2013 Carić, Ivanjko

• Klasa je “kalup” za kreiranje objekata

– Definira atribute i metode kreiranog objekta

– Moguće ju je iskoristiti više puta

• Definiranjem klase definira se novi tip podataka

– Nova varijabla se inicijalizira naredbom new

• Naredbom new se poziva konstruktor

– Posebna metoda kojom se iz klase kreira objekt

– Konstruktor je istog naziva kao i klasa

– Ne navodi se tip podatka kod poziva new

Klase

Page 7: Algoritmi i programiranje - Weboteka.net i programiranje/e-student/011... · Algoritmi i programiranje Objekti, klase i liste Prof. dr. sc. Tonči Carić ZITS :: Algoritmi i programiranje

ZITS :: Algoritmi i programiranje :: Objekti, klase i liste © 2013 Carić, Ivanjko

• Programski jezik C# sadrži gotove klase

• Primjer klasa Random

– Služi za generiranje slučajnih brojeva

– Kreiranja objekta iz klase Random

Random rnd = new Random();

– Generiranje slučajnog cijelog broja

int slucajni;

slucajni = rnd.Next();

// unutar intervala 0 i 100

slucajni = rnd.Next(0, 100);

Klase

tip (klasa) varijabla konstruktor

Page 8: Algoritmi i programiranje - Weboteka.net i programiranje/e-student/011... · Algoritmi i programiranje Objekti, klase i liste Prof. dr. sc. Tonči Carić ZITS :: Algoritmi i programiranje

ZITS :: Algoritmi i programiranje :: Objekti, klase i liste © 2013 Carić, Ivanjko

• Po potrebi moguće definirati vlastite klase

• Sintaksa definicije klase class <NAZIV> {

<DEKLARACIJE ATRIBUTA>

<DEKLARACIJE KONSTRUKTORA>

<DEKLARACIJE METODA>

}

• Atributi su globalne varijable deklarirane prije deklaracije konstruktora i metoda te se mogu koristiti u svim metodama klase

• Konstruktora može biti više sa različitim parametrima

• Ukoliko se konstruktor izostavi, objekt će biti kreiran sa standardnim početnim vrijednostima atributa

Klase

Page 9: Algoritmi i programiranje - Weboteka.net i programiranje/e-student/011... · Algoritmi i programiranje Objekti, klase i liste Prof. dr. sc. Tonči Carić ZITS :: Algoritmi i programiranje

ZITS :: Algoritmi i programiranje :: Objekti, klase i liste © 2013 Carić, Ivanjko

• Kod naziva klasa, prvo slovo svake riječi je veliko

– Ostala pravila analogna imenima varijabli i metoda

– Primjer: Automobil, SeminarskiRad

• Atributi se deklariraju na početku iza čega slijede konstruktori, pa metode

• Svaka klasa se sprema u istoimenu datoteku sa ekstenzijom “.cs”

• Glavnu metodu “Main“sadrži samo klasa iz koje se program pokreće

Klase

Page 10: Algoritmi i programiranje - Weboteka.net i programiranje/e-student/011... · Algoritmi i programiranje Objekti, klase i liste Prof. dr. sc. Tonči Carić ZITS :: Algoritmi i programiranje

ZITS :: Algoritmi i programiranje :: Objekti, klase i liste © 2013 Carić, Ivanjko

• Primjer definicije nove klase

Klase Primjena

Automobil makina = new Automobil(0);

makina.Pokreni();

makina.DodajGas();

makina.DodajGas();

makina.DodajGas();

Console.WriteLine(makina.Brzina);

Uporaba klase Automobil:

Svakoj klasi, atributu, metodi i

konstruktoru može se odrediti

“vidljivost” stavljanjem ključne riječi private (uporaba samo

unutar klase) ili public

(uporaba moguća iz drugih

klasa) ispred deklaracije

public class Automobil {

private bool MotorPokrenut = false;

public int Brzina = 0;

public Automobil(int brzina) {

Brzina = brzina;

if (Brzina != 0)

MotorPokrenut = true;

}

public void Pokreni() {

MotorPokrenut = true;

}

public void DodajGas() {

if (MotorPokrenut)

Brzina++;

}

}

Page 11: Algoritmi i programiranje - Weboteka.net i programiranje/e-student/011... · Algoritmi i programiranje Objekti, klase i liste Prof. dr. sc. Tonči Carić ZITS :: Algoritmi i programiranje

ZITS :: Algoritmi i programiranje :: Objekti, klase i liste © 2013 Carić, Ivanjko

• Iz jednom definirane klase može se kreirati više objekata

• Primjer

Automobil golf = new Automobil(0);

Automobil fiat = new Automobil(0);

Automobil mercedes = new Automobil(0);

• Iako kreirani iz iste klase sa istim parametrom, tri varijable predstavljaju tri različita objekta u memoriji, nezavisna jedan od drugog

• Svaki objekt ima vlastite atribute definirane u klasi

Klase Primjena

Page 12: Algoritmi i programiranje - Weboteka.net i programiranje/e-student/011... · Algoritmi i programiranje Objekti, klase i liste Prof. dr. sc. Tonči Carić ZITS :: Algoritmi i programiranje

ZITS :: Algoritmi i programiranje :: Objekti, klase i liste © 2013 Carić, Ivanjko

golf.Pokreni();

fiat.Pokreni();

golf.DodajGas();

golf.DodajGas();

fiat.DodajGas();

mercedes.DodajGas();

Console.WriteLine(golf.Brzina);

Console.WriteLine(fiat.Brzina);

Console.WriteLine(mercedes.Brzina);

• Izvršavanjem gornjeg kôda na zaslonu će se ispisati vrijednosti 2, 1, 0

Klase Primjena

Page 13: Algoritmi i programiranje - Weboteka.net i programiranje/e-student/011... · Algoritmi i programiranje Objekti, klase i liste Prof. dr. sc. Tonči Carić ZITS :: Algoritmi i programiranje

ZITS :: Algoritmi i programiranje :: Objekti, klase i liste © 2013 Carić, Ivanjko

• Definirana klasa predstavlja novi tip podataka koji je ravnopravan ostalim ugrađenim tipovima (int, double, string, bool, ...)

• Moguće je napisati metodu koja vraća objekt, npr. Automobil BrziAuto()

{

Random rnd = new Random();

return new Automobil(rnd.Next(100, 130));

}

Klase Metode

Page 14: Algoritmi i programiranje - Weboteka.net i programiranje/e-student/011... · Algoritmi i programiranje Objekti, klase i liste Prof. dr. sc. Tonči Carić ZITS :: Algoritmi i programiranje

ZITS :: Algoritmi i programiranje :: Objekti, klase i liste © 2013 Carić, Ivanjko

• Kada se objekti šalju metodi kao argumenti, vrijede ista pravila kao i za polja, npr. void UbrzajDvaPuta(Automobil a)

{

a.Brzina = a.Brzina * 2;

}

• Za razliku od varijabli primitivnog tipa gdje se metodi šalje vrijednost, kod varijabli objekta šalje se referenca na objekt

• Promjenom objekta u metodi mijenja se i originalni objekt

Klase Metode

Page 15: Algoritmi i programiranje - Weboteka.net i programiranje/e-student/011... · Algoritmi i programiranje Objekti, klase i liste Prof. dr. sc. Tonči Carić ZITS :: Algoritmi i programiranje

ZITS :: Algoritmi i programiranje :: Objekti, klase i liste © 2013 Carić, Ivanjko

• Iz klase Automobil se može kreirati polje

• Primjer Automobil[] voznipark = new Automobil[3];

voznipark[0] = new Automobil(0);

voznipark[1] = new Automobil(50);

voznipark[2] = new Automobil(100);

Console.WriteLine(voznipark[1].Brzina);

Klase Polja

Page 16: Algoritmi i programiranje - Weboteka.net i programiranje/e-student/011... · Algoritmi i programiranje Objekti, klase i liste Prof. dr. sc. Tonči Carić ZITS :: Algoritmi i programiranje

ZITS :: Algoritmi i programiranje :: Objekti, klase i liste © 2013 Carić, Ivanjko

• Sadržaj

– Uvod

– Objekti

– Klase

– Liste

Page 17: Algoritmi i programiranje - Weboteka.net i programiranje/e-student/011... · Algoritmi i programiranje Objekti, klase i liste Prof. dr. sc. Tonči Carić ZITS :: Algoritmi i programiranje

ZITS :: Algoritmi i programiranje :: Objekti, klase i liste © 2013 Carić, Ivanjko

• Polja mogu spremiti više podataka istog tipa

– Potrebno je zauzeti dovoljno memorije za spremanje svih podataka

• Ponekad se javlja neiskorišten memorijski prostor

Liste

Page 18: Algoritmi i programiranje - Weboteka.net i programiranje/e-student/011... · Algoritmi i programiranje Objekti, klase i liste Prof. dr. sc. Tonči Carić ZITS :: Algoritmi i programiranje

ZITS :: Algoritmi i programiranje :: Objekti, klase i liste © 2013 Carić, Ivanjko

• Pogodno koristiti dinamičku alokaciju memorije

– Memorija se zauzima kada je potrebna i oslobađa kada podatak postane nepotreban

• Koriste se liste

• Lista se sastoji od reference na prvi član i elemenata liste

– Element liste sadrži podatke i referencu na sljedeći (po potrebi i na prethodni) element

Liste

Sljedeći

Podaci

Sljedeći

Podaci Glava

Page 19: Algoritmi i programiranje - Weboteka.net i programiranje/e-student/011... · Algoritmi i programiranje Objekti, klase i liste Prof. dr. sc. Tonči Carić ZITS :: Algoritmi i programiranje

ZITS :: Algoritmi i programiranje :: Objekti, klase i liste © 2013 Carić, Ivanjko

• Kada je lista prazna referenca na početak liste ima vrijednost null – Referenca zadnjeg elementa u listi ima također

vrijednosti null

• Posebna ključna riječ null u C#-u označava

neinicijalizirani objekt • Pristup neinicijaliziranoj varijabli objekta može

dovesti do iznimke NullReferenceException

• Svaka objektna varijabla ili rezultat metode se može ispitati uspoređivanjem sa null

Liste Vrijednost null

Glava

Page 20: Algoritmi i programiranje - Weboteka.net i programiranje/e-student/011... · Algoritmi i programiranje Objekti, klase i liste Prof. dr. sc. Tonči Carić ZITS :: Algoritmi i programiranje

ZITS :: Algoritmi i programiranje :: Objekti, klase i liste © 2013 Carić, Ivanjko

• Kod korištena objekata dobro napraviti provjeru da li referenca na objekt ima vrijednost

• Primjer

Automobil a;

...

if (a == null)

{

Console.WriteLine(“Varijabla nema vrijednost”);

}

else

{

Console.WriteLine(“Brzina = “ + a.Brzina);

}

Liste Vrijednost null

Page 21: Algoritmi i programiranje - Weboteka.net i programiranje/e-student/011... · Algoritmi i programiranje Objekti, klase i liste Prof. dr. sc. Tonči Carić ZITS :: Algoritmi i programiranje

ZITS :: Algoritmi i programiranje :: Objekti, klase i liste © 2013 Carić, Ivanjko

• Programski jezik C# ima gotovu klasu za korištenje listi -> klasa ArrayList

• Definirana u sistemskom prostoru imena System.Collections

– Učitava se uporabom naredbe using

• Služi za pohranu elemenata u listu

• Često se koristi, u mnogim slučajevima jednostavnija alternativa za polje

• Elementi mogu biti objekti bilo kojeg tipa (klase)

• Kod dohvaćanja elemenata potrebno je koristiti ukalupljivanje (engl. “cast”)

Liste Klasa ArrayList

Page 22: Algoritmi i programiranje - Weboteka.net i programiranje/e-student/011... · Algoritmi i programiranje Objekti, klase i liste Prof. dr. sc. Tonči Carić ZITS :: Algoritmi i programiranje

ZITS :: Algoritmi i programiranje :: Objekti, klase i liste © 2013 Carić, Ivanjko

• Metode za kreiranje i rad sa listama

– Add – dodavanje objekta u listu

– Clear – uklanja sve objekte iz liste

– Contains – provjerava prisutnost zadanog objekta

– IndexOf – vraća indeks zadanog objekta

– Insert – umeće zadani objekt na zadano mjesto

– Remove – uklanja zadani objekt

– RemoveAt – uklanja objekt sa zadanim rednim

brojem

– Reverse – okreće naopako redoslijed objekata

Liste Klasa ArrayList

Page 23: Algoritmi i programiranje - Weboteka.net i programiranje/e-student/011... · Algoritmi i programiranje Objekti, klase i liste Prof. dr. sc. Tonči Carić ZITS :: Algoritmi i programiranje

ZITS :: Algoritmi i programiranje :: Objekti, klase i liste © 2013 Carić, Ivanjko

• Lista se kreira naredbom new kao i svi drugi objekti • Veličina liste se ne mora zadati unaprijed jer se ona

sama po potrebi proširuje – Proširivanjem se zauzima optimalna količina memorije

• Primjer ArrayList lista = new ArrayList(); lista.Add(new Automobil(70)); lista.Add(“ovo je obican string“); Console.WriteLine(lista.Count);

• Atributom Count se može doznati ukupan broj elemenata u listi

Liste Klasa ArrayList

Page 24: Algoritmi i programiranje - Weboteka.net i programiranje/e-student/011... · Algoritmi i programiranje Objekti, klase i liste Prof. dr. sc. Tonči Carić ZITS :: Algoritmi i programiranje

ZITS :: Algoritmi i programiranje :: Objekti, klase i liste © 2013 Carić, Ivanjko

• Za umetanje objekata u listu koristi se metoda Insert kojoj je prvi parametar pozicija na koju se objekt umeće ArrayList lista = new ArrayList(); lista.Add("prvi"); lista.Add("drugi"); lista.Insert(1, "treci");

• Kao i kod polja, indeksi kreću od nule • Umetanjem stringa “treci“ na indeks 1,

redoslijed elemenata u listi će biti prvi, treci, drugi

Liste Klasa ArrayList

Page 25: Algoritmi i programiranje - Weboteka.net i programiranje/e-student/011... · Algoritmi i programiranje Objekti, klase i liste Prof. dr. sc. Tonči Carić ZITS :: Algoritmi i programiranje

ZITS :: Algoritmi i programiranje :: Objekti, klase i liste © 2013 Carić, Ivanjko

• Dohvaćanje pojedinog elementa izvodi se kao kod polja, upisivanjem uglatih zagrada i indeksa elementa kojeg želimo dohvatiti

• Zbog univerzalnosti i mogućnosti da pohrani i vrati objekt bilo kojeg tipa, kod dohvaćanja elementa potrebno je koristiti ukalupljivanje

Automobil a = (Automobil) lista[0];

string s = (string) lista[1];

• Dobra praksa je koristiti samo jedan tip u listi jer postoji potencijalna opasnost krivog ukalupljivanja

Liste Klasa ArrayList

Page 26: Algoritmi i programiranje - Weboteka.net i programiranje/e-student/011... · Algoritmi i programiranje Objekti, klase i liste Prof. dr. sc. Tonči Carić ZITS :: Algoritmi i programiranje

ZITS :: Algoritmi i programiranje :: Objekti, klase i liste © 2013 Carić, Ivanjko

• Kada imamo listu objekata istog tipa, za brz prolaz kroz cijelu listu može se koristiti naredba foreach

– Slična for petlji

– Koristi se za brz prolaz kroz polje ili listu

– Na svaki element primjeni naredbe u svom tijelu

– Primjer

int[] fibarray = new int[] { 0, 1, 2, 3};

foreach (int i in fibarray)

{

System.Console.WriteLine(i);

}

Liste Klasa ArrayList

Page 27: Algoritmi i programiranje - Weboteka.net i programiranje/e-student/011... · Algoritmi i programiranje Objekti, klase i liste Prof. dr. sc. Tonči Carić ZITS :: Algoritmi i programiranje

ZITS :: Algoritmi i programiranje :: Objekti, klase i liste © 2013 Carić, Ivanjko

• Pod pretpostavkom da lista naziva studenti sadrži 30 nizova znakova (string) lakši ispis elemenata liste bi bio

foreach(string s in studenti)

{

Console.WriteLine(s);

}

• Petlja će se izvršiti 30 puta mijenjajući vrijednost varijable s, od prvog do posljednjeg elementa

Liste Klasa ArrayList

Page 28: Algoritmi i programiranje - Weboteka.net i programiranje/e-student/011... · Algoritmi i programiranje Objekti, klase i liste Prof. dr. sc. Tonči Carić ZITS :: Algoritmi i programiranje

ZITS :: Algoritmi i programiranje :: Objekti, klase i liste © 2013 Carić, Ivanjko

• Metoda IndexOf vraća poziciju zadanog elementa – U slučaju da objekt ne pripada listi vraća -1

ArrayList lista = new ArrayList(); Automobil a1 = new Automobil(20); Automobil a2 = new Automobil(50); lista.Add(a1); Console.WriteLine( lista.IndexOf(a1) ); // 0 Console.WriteLine( lista.IndexOf(a2) ); // -1

• Metoda Contains vraća vrijednost true ili false ovisno o tome da li se zadani objekt nalazi u listi Console.WriteLine( lista.Contains(a1) ); // true Console.WriteLine( lista.Contains(a2) ); // false

Liste Klasa ArrayList

Page 29: Algoritmi i programiranje - Weboteka.net i programiranje/e-student/011... · Algoritmi i programiranje Objekti, klase i liste Prof. dr. sc. Tonči Carić ZITS :: Algoritmi i programiranje

ZITS :: Algoritmi i programiranje :: Objekti, klase i liste © 2013 Carić, Ivanjko

• Uklanjanje objekta iz liste ne znači njegovo trajno brisanje iz memorije, već samo izbacivanje reference iz liste – Sam objekt ostaje netaknut

ArrayList lista = new ArrayList(); Automobil f1 = new Automobil(300); lista.Add(f1); lista.Remove(f1); Console.WriteLine(f1.Brzina);

• Za uklanjanje elementa koji se nalazi na određenom mjestu u listi koristi se metoda RemoveAt, npr. lista.RemoveAt(0);

• Za uklanjanje svih elemenata iz liste koristi se metoda Clear, npr. lista.Clear();

Liste Klasa ArrayList

Page 30: Algoritmi i programiranje - Weboteka.net i programiranje/e-student/011... · Algoritmi i programiranje Objekti, klase i liste Prof. dr. sc. Tonči Carić ZITS :: Algoritmi i programiranje

ZITS :: Algoritmi i programiranje :: Objekti, klase i liste © 2013 Carić, Ivanjko

• Generičke liste

– su programske strukture kojima se može pohraniti više vrijednosti istog tipa

– kao i u slučaju polja, elementima liste moguće je pristupiti navodeći indekse, a prvi element ima indeks 0. Način kreiranja liste:

List<tip> varijabla = new List<tip>();

– U listu je moguće dodati samo vrijednosti odabranog tipa.

– Za razliku od polja, lista ne mora imati unaprijed definiran broj elemenata

Page 31: Algoritmi i programiranje - Weboteka.net i programiranje/e-student/011... · Algoritmi i programiranje Objekti, klase i liste Prof. dr. sc. Tonči Carić ZITS :: Algoritmi i programiranje

ZITS :: Algoritmi i programiranje :: Objekti, klase i liste © 2013 Carić, Ivanjko

Primjer:

List<int> lista = new List<int>();

lista.Add(2);

• razlika između ArrayList i List strukture:

– u ArrayList strukturi mogu se dodavati različiti tipovi podataka što je potencijalna opasnost za runtime pogrešku

– kod List strukture mora se unaprijed definirirati tip podatka i samo se može koristiti taj tip,češće se koristi List

Page 32: Algoritmi i programiranje - Weboteka.net i programiranje/e-student/011... · Algoritmi i programiranje Objekti, klase i liste Prof. dr. sc. Tonči Carić ZITS :: Algoritmi i programiranje