24
Izvedbo projekta je omogočilo sofinanciranje Evropskega socialnega sklada Evropske unije in Ministrstva za šolstvo in šport. Fakulteta za matematiko in fiziko http://up.fmf.uni- lj.si Objektno programiranje Objektno programiranje

Objektno programiranje

  • Upload
    meena

  • View
    69

  • Download
    0

Embed Size (px)

DESCRIPTION

Objektno programiranje. Objektno programiranje. Objekti. Objekt je skupek podatkov, s katerim želimo upravljati kot s celoto. Ima Podatke kaj o objektu vemo/hranimo Metode Kaj objekt zna Kakšne metode lahko izvajamo nad njem - PowerPoint PPT Presentation

Citation preview

Page 1: Objektno programiranje

Izvedbo projekta je omogočilo sofinanciranje Evropskega socialnega sklada Evropske unije in

Ministrstva za šolstvo in šport.

Fakulteta za matematiko in fiziko

http://up.fmf.uni-lj.si

Objektno programiranje

Objektno programiranje

Page 2: Objektno programiranje

Izvedbo projekta je omogočilo sofinanciranje Evropskega socialnega sklada Evropske unije in

Ministrstva za šolstvo in šport.

Fakulteta za matematiko in fiziko

http://up.fmf.uni-lj.si

Objekti• Objekt je skupek podatkov, s katerim želimo upravljati kot s celoto. • Ima

– Podatke kaj o objektu vemo/hranimo

– Metode Kaj objekt zna Kakšne metode lahko izvajamo nad njem

• Vsak objekt pripada nekemu razredu. Če pripada objekt x razredu R, potem pravimo tudi da je x objekt tipa R.

Page 3: Objektno programiranje

Izvedbo projekta je omogočilo sofinanciranje Evropskega socialnega sklada Evropske unije in

Ministrstva za šolstvo in šport.

Fakulteta za matematiko in fiziko

http://up.fmf.uni-lj.si

Znani objekti• Nekaj primerov objektov iz standardnih knjižnic jezika C# :

– Objekt tipa StreamReader predstavlja vhodni kanal. Kadar želimo brati s tipkovnice ali z datoteke, naredimo tak objekt in kličemo njegovo metodo ReadLine za branje ene vrstice.

– Objekt System.Console predstavlja standardni izhod. Kadar želimo kaj izpisati na zaslon, pokličemo metodo WriteLine na objektu System.Console.

– Objekt tipa Random predstavlja generator naključnih števil.• Seveda pa so objekti uporabni predvsem zato, ker lahko programer definira nove

razrede in objekte.

Page 4: Objektno programiranje

Izvedbo projekta je omogočilo sofinanciranje Evropskega socialnega sklada Evropske unije in

Ministrstva za šolstvo in šport.

Fakulteta za matematiko in fiziko

http://up.fmf.uni-lj.si

Objekti• stanja:

– Lastnosti, podatki, komponente

• “znanje”– Odzivanje na dogodke

• Združeno v celoto– Podatki in metode, ki opisujejo neko stvar/objekt– Žoga:

Podatki: velikost, barva, položaj v prostoru, … Metode: sprememba velikosti, sprememba položaja, …

– Ulomek: Podatki: števec, imenovalec Metode: spremeni števec, spremeni imenovalec, seštej, obratna vrednost, lepo izpiši, ...

Page 5: Objektno programiranje

Izvedbo projekta je omogočilo sofinanciranje Evropskega socialnega sklada Evropske unije in

Ministrstva za šolstvo in šport.

Fakulteta za matematiko in fiziko

http://up.fmf.uni-lj.si

Programiranje v C#• Sestavljanje razredov

– Opis lastnosti objektov– Opis metod (“znanja” objektov)

Ustvarjanje objektov in njihova uporaba "Ukazovanje" objektom, kaj naj počnejo Objekt za izpolnitev določene naloge potrebuje druge objekte in njihove metode

• Začetek – Glavni razred (ki ima metodo Main)– Izvajanje metode Main – ustvarjanje objektov, proženje dogodkov, odzivanje

na dogodke, …

Page 6: Objektno programiranje

Izvedbo projekta je omogočilo sofinanciranje Evropskega socialnega sklada Evropske unije in

Ministrstva za šolstvo in šport.

Fakulteta za matematiko in fiziko

http://up.fmf.uni-lj.si

Objekti• Objekt je kakršenkoli skupek podatkov, s katerimi želimo upravljati. • Osnovni pristop objektnega programiranja

– objekt = podatki + metode za delo s podatki. • Ko želimo kak podatek (objekt) obdelati, objektu (podatku) signaliziramo,

kaj naj se zgodi. – Pokličemo ustrezno metodo v objektu.

• Objekt je "črna škatla“, ki sprejema in pošilja sporočila. Jedro objekta sestavljajo njegove spremenljivke, okrog katerih se nahajajo njegove metode.

Page 7: Objektno programiranje

Izvedbo projekta je omogočilo sofinanciranje Evropskega socialnega sklada Evropske unije in

Ministrstva za šolstvo in šport.

Fakulteta za matematiko in fiziko

http://up.fmf.uni-lj.si

Princip črne škatle• Imamo objekt obj, ki hrani podatke o neki osebi.• Zanima nas inteligenčni količnik te osebe.

– obj.KolikoJeIQ()

• Objekt se odzove z odgovorom• Uporabnika ne zanima, kako je objekt prišel do odgovora, le kaj ga lahko vpraša in

v kakšni obliki bo dobil odgovor!• Ni važno, kako je objekt odgovoril – kako je prišel do IQ (je to podatek, ki je

zapisan nekje v objektu, je to rezultat nekega preračunavanja …

Koliko je

tvoj IQ ?

92

Page 8: Objektno programiranje

Izvedbo projekta je omogočilo sofinanciranje Evropskega socialnega sklada Evropske unije in

Ministrstva za šolstvo in šport.

Fakulteta za matematiko in fiziko

http://up.fmf.uni-lj.si

Prednosti "črne škatle"• Če kasneje spremenimo notranjost "črne škatle" (razreda)• Spremembe v programih, ki razred uporabljajo, niso potrebne

– Seveda, če je način spraševanja in odgovarjanja ostal nespremenjen– Če so metode ostale enake (imajo enaka imena, nabor parametrov in tip

rezultata)

Page 9: Objektno programiranje

Izvedbo projekta je omogočilo sofinanciranje Evropskega socialnega sklada Evropske unije in

Ministrstva za šolstvo in šport.

Fakulteta za matematiko in fiziko

http://up.fmf.uni-lj.si

Klasično/objektno progr.• metoda f na podatku x: • Klasično:

– Izvedi metodo f na podatku x – f(x);

• Objektno: – podatku/objektu x signaliziraj, da naj izvede metodo f – x.f();

Page 10: Objektno programiranje

Izvedbo projekta je omogočilo sofinanciranje Evropskega socialnega sklada Evropske unije in

Ministrstva za šolstvo in šport.

Fakulteta za matematiko in fiziko

http://up.fmf.uni-lj.si

Od kje razredi?• Veliko vgrajenih (oziroma v standardnih knjižnicah) v C#

– .NET Framework C# je .NET jezik – ima dostop do vseh razredov, definiranih v knjižnicah (zbirkah

razredov) okolja .NET Glej npr. http://msdn2.microsoft.com/sl-si/library/ms229335(en-us).aspx

– Razporejeni v imenske prostore System, System.IO …

• Drugi viri– Naši “stari” razredi– Drugi programerji

• Potrebujemo dostop do ustrezne datoteke (dll, exe)

Page 11: Objektno programiranje

Izvedbo projekta je omogočilo sofinanciranje Evropskega socialnega sklada Evropske unije in

Ministrstva za šolstvo in šport.

Fakulteta za matematiko in fiziko

http://up.fmf.uni-lj.si

Moj prvi razredOglejmo si naslednji program:

using System;

public class MojR{

private string mojNiz;

public MojR(string nekNiz) {

mojNiz = nekNiz;

}

public void Izpisi() {

Console.WriteLine(mojNiz);

}

}

public class Pozdrav {

public static void Main(string[] arg) {

MojR prvi;

prvi = new MojR("Pozdravljen, moj prvi objekt v C#!");

prvi.Izpisi();

}

}

Oznaka objekta

Definicija razreda

naredimo objekt

ukazujemo objektu

Page 12: Objektno programiranje

Izvedbo projekta je omogočilo sofinanciranje Evropskega socialnega sklada Evropske unije in

Ministrstva za šolstvo in šport.

Fakulteta za matematiko in fiziko

http://up.fmf.uni-lj.si

Objekt in ime spremenljivke• NekiObjekt a;

– a je naslov, kjer bo objekt (referenca na objekt)

• new NekiObjekt();– V pomnilniku se je naredil objekt tipa NekiObjekt() / po pravilih, ki so

določena z opisom razreda NekiObjekt• a = new NekiObjekt();

– V pomnilniku se je naredil objekt tipa NekiObjekt() in a kaže na ta novo ustvarjeni objekt

Page 13: Objektno programiranje

Izvedbo projekta je omogočilo sofinanciranje Evropskega socialnega sklada Evropske unije in

Ministrstva za šolstvo in šport.

Fakulteta za matematiko in fiziko

http://up.fmf.uni-lj.si

Ustvarjanje objektov• Razred je šablona, ki definira spremenljivke in metode skupne vsem objektom iste

vrste. • class

– Načrt objekta, šablona• Primerek razreda (instanca) – konkretni objekt

– Ustvarimo ga z new– Brez tega objekta NE MOREMO uporabiti – NekiObjekt a;

Objekt NE obstaja a je IME objekta natančneje

– a je ime spremenljivke, kjer hranimo NASLOV objekta vrste NekiObjekt

Page 14: Objektno programiranje

Izvedbo projekta je omogočilo sofinanciranje Evropskega socialnega sklada Evropske unije in

Ministrstva za šolstvo in šport.

Fakulteta za matematiko in fiziko

http://up.fmf.uni-lj.si

C#in objekti• Razred (class) je opis vrste objekta (načrt, kako naj bo objekt videti) – opis ideje

objekta• Primerek razreda (instanca) – konkretni objekt

class Neki {… new Neki(12, 89, 24, “red”, …

Page 15: Objektno programiranje

Izvedbo projekta je omogočilo sofinanciranje Evropskega socialnega sklada Evropske unije in

Ministrstva za šolstvo in šport.

Fakulteta za matematiko in fiziko

http://up.fmf.uni-lj.si

Ustvarjanje objektov– Ulomek ime = new Ulomek(3, 4);– Rečemo:

V objektu ime je shranjen ulomek ¾;

– Točneje V spremenljivki ime je naslov nekega objekta tipa Ulomek, ki predstavlja ulomek ¾. Spremenljivka ime kaže na objekt tipa Ulomek, ki …

– Prvi ukaz je dejansko spoj dveh stavkov: deklaracija prireditev

– Ulomek ime;– ime = new Ulomek(3, 4);

Page 16: Objektno programiranje

Izvedbo projekta je omogočilo sofinanciranje Evropskega socialnega sklada Evropske unije in

Ministrstva za šolstvo in šport.

Fakulteta za matematiko in fiziko

http://up.fmf.uni-lj.si

Ustvarjanje objektov– Ulomek ime;– ime = new Ulomek(3, 4);

ime: ________

2h11b11:

¾

2h11b11

Page 17: Objektno programiranje

Izvedbo projekta je omogočilo sofinanciranje Evropskega socialnega sklada Evropske unije in

Ministrstva za šolstvo in šport.

Fakulteta za matematiko in fiziko

http://up.fmf.uni-lj.si

Še en zgled• Poglejmo si še en zgled. Denimo, da bi radi napisali program, ki bo prebral

nek ulomek in mu prištel 1/2. • "klasično" se bomo tega lotili takole

Page 18: Objektno programiranje

Izvedbo projekta je omogočilo sofinanciranje Evropskega socialnega sklada Evropske unije in

Ministrstva za šolstvo in šport.

Fakulteta za matematiko in fiziko

http://up.fmf.uni-lj.si

Povečaj ulomek "klasično"using System;

namespace UlomkiKlasika {

class Program

{

public static void Main(string[] args)

{

// vnos podatkov

Console.Write("Števec ulomka: ");

string beri = Console.ReadLine();

int stevec = int.Parse(beri);

Console.Write("Imenovalec ulomka: ");

beri = Console.ReadLine();

int imenovalec = int.Parse(beri);

// "delo"

stevec = stevec + 1;

imenovalec = imenovalec + 2;

// izpis

Console.WriteLine("Nov ulomek je: " + stevec + " / " + imenovalec);

Console.Write("Press any key to continue . . . ");

Console.ReadKey(true);

}

}

}

Page 19: Objektno programiranje

Izvedbo projekta je omogočilo sofinanciranje Evropskega socialnega sklada Evropske unije in

Ministrstva za šolstvo in šport.

Fakulteta za matematiko in fiziko

http://up.fmf.uni-lj.si

Povečaj ulomek - objektno• Razred Ulomek• Hrani podatke o svojem števcu in imenovalcu• "se zna" povečati za drug ulomek

– Vsebuje metodo, ki ta ulomek poveča za drug ulomek

Page 20: Objektno programiranje

Izvedbo projekta je omogočilo sofinanciranje Evropskega socialnega sklada Evropske unije in

Ministrstva za šolstvo in šport.

Fakulteta za matematiko in fiziko

http://up.fmf.uni-lj.si

"Objektni" program

Page 21: Objektno programiranje

Izvedbo projekta je omogočilo sofinanciranje Evropskega socialnega sklada Evropske unije in

Ministrstva za šolstvo in šport.

Fakulteta za matematiko in fiziko

http://up.fmf.uni-lj.si

Ulomki - objektnousing System;

namespace UlomkiObjektno

{

class Ulomek {

public int stevec;

public int imenovalec;

public Ulomek(int st, int im) {

this.stevec = st;

this.imenovalec = im;

}

public void pristej(Ulomek a) {

this.stevec = this.stevec + a.stevec;

this.imenovalec = this.imenovalec + a.imenovalec;

}

}

class Program

{

public static void Main(string[] args)

{

// vnos podatkov

Page 22: Objektno programiranje

Izvedbo projekta je omogočilo sofinanciranje Evropskega socialnega sklada Evropske unije in

Ministrstva za šolstvo in šport.

Fakulteta za matematiko in fiziko

http://up.fmf.uni-lj.si

Ulomki - objektnoConsole.Write("Števec ulomka: ");

string beri = Console.ReadLine();

int stevec = int.Parse(beri);

Console.Write("Imenovalec ulomka: ");

beri = Console.ReadLine();

int imenovalec = int.Parse(beri);

Ulomek moj = new Ulomek(stevec, imenovalec);

// "delo"

Ulomek polovica = new Ulomek(1, 2);

moj.pristej(polovica);

// izpis

Console.WriteLine("Nov ulomek je: " + moj.stevec + " / " +

moj.imenovalec);

Naredimo ulomek

"Ukazujemo " ulomku

Page 23: Objektno programiranje

Izvedbo projekta je omogočilo sofinanciranje Evropskega socialnega sklada Evropske unije in

Ministrstva za šolstvo in šport.

Fakulteta za matematiko in fiziko

http://up.fmf.uni-lj.si

Primerjava• "klasično"

// "delo"

stevec = stevec + 1;

imenovalec = imenovalec + 2;

• objektno

Ulomek polovica = new Ulomek(1, 2);

moj.pristej(polovica);

Page 24: Objektno programiranje

Izvedbo projekta je omogočilo sofinanciranje Evropskega socialnega sklada Evropske unije in

Ministrstva za šolstvo in šport.

Fakulteta za matematiko in fiziko

http://up.fmf.uni-lj.si

Objektno programiranje• Problem

– Z analizo ugotovimo, kakšne objekte potrebujemo za reševanje– Pregledamo, ali že imamo na voljo ustrezne razrede

Standardna knjižnica Druge knjižnice Naši stari razredi

– Sestavimo ustrezne manjkajoče razrede– Sestavimo “glavni” program, kjer s pomočjo objektov rešimo problem