1 / 18

Python - OOP

Python - OOP. Objekti. Ustvarjanje objektov. Razred je šablona, ki definira spremenljivke in metode skupne vsem objektom iste vrste . Dejansko gre za definiranje novega tipa podatkov class Načrt objekta, šablona Primerek razreda (instanca) – konkretni objekt

arav
Télécharger la présentation

Python - OOP

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Python - OOP Objekti

  2. Ustvarjanje objektov • Razred je šablona, ki definira spremenljivke in metode skupne vsem objektom iste vrste. • Dejansko gre za definiranje novega tipa podatkov • class • Načrt objekta, šablona • Primerek razreda (instanca) – konkretni objekt • Ustvarimo ga z ImeKn.ImeRazreda(morebitni parametri metode __init__) • Brez tega objekta NE MOREMO uporabiti • Ker ga ni ;-) • a = ImeKn.ImeRazreda() • aje IME objekta • natančneje • a je ime spremenljivke, kjer hranimo NASLOV objekta vrste ImeRazreda

  3. Problem • Banka Butale se intenzivno pripravlja na prihod nove valute arve • Med drugim bo potrebno nakovati nove kovance • Za ustrezno informacijsko podporo kovačnici najamejo tebe • Po nekajmesečnih pogovorih ugotoviš: • Potrebovali bomo objekte vrste Kovanec • Potrebujemo torej razred Kovanec

  4. Kako do svojega razreda Na tržišču ni niti približno ustreznega razreda

  5. Naredimo razred • Analiza • Pa ne matematični predmet • Katera so stanja/lastnosti • Kaj hočemo o objektih te vrste vedeti • Kakšne lastnosti imajo • Katere so metode • Kakšno je “znanje” objektov • Na katere “ukaze” se odzovejo • Način uporabe lastnosti objekta (podatke o objektu) skrijemo • Enkapsulacija • Pomeni dvoje • Združevanje podatkov "pod eno streho" (v isti kapsuli) • Združeni podatki in metode

  6. Okostje razreda classRazred : # konstruktor z deklaracijo lastnosti - komponent # atributov - polj - ... # metode # __str__, __ repr __

  7. Razredi in objekti • Sestavimo razred Kovanec, s katerim predstavimo kovance. • Naredimo analizo: • Denimo, da so kovanci okrogli, z danim polmerom in višino. Poleg konstruktorja in standardnih metod, ki nastavijo in vrnejo vrednosti lastnosti in za pretvorbo v niz, naj razred pozna še metodi, ki vrneta površino in volumen kovanca. • Odločitev o načinu predstavitve podatkov • Kje, kako bomo podatke (polmer, višina) hranili

  8. Kovanec classKovanec : # konstruktor def __init__(self, r = 1, v = 1) # int polmer # intvisina #"SET" metode defnastaviPolmer(self, r) defnastaviVisino(self, visina) # "GET" metode defpovejPolmer(self) defpovejVisino(self) # v niz def __str__(self) # kako je objekt “videti” kot niz def __repr__(self) # kako je objekt “predstavljen” # "znanje" def volumen(self) defpovrsina(self) le navedba metod

  9. Kovanec class Kovanec : # konstruktor def __init__(self, r = 1, v = 1) # int polmer # intvisina # "SET" metode defnastaviPolmer(self, r) : self.polmer = r defnastaviVisino(self, visina) : # smiselna visina je le med 1 in 100 # drugače jo pustimo pri miru if 1 <= visina <= 100 : self.visina = visina # "GET" metode defpovejPolmer(self) : returnself.polmer defpovejVisino(self) : returnself.visina # v niz def __str__(self) : # kako je objekt “videti” kot niz return 'r = ' + str(self.povejPolmer()) + '\nvisina = ' + str(self.povejVisino()) def __repr__(self) : # kako je objekt “predstavljen” return '(' + str(self.povejPolmer()) + ', ' + str(self.povejVisino()) + ')' # "znanje" def volumen(self) defpovrsina(self) le skica

  10. Uporaba • Državna kovnica te najame, da napišeš program, ki reši naslednji problem • Ali lahko iz bakrenega kvadra velikosti 20 x 12 x 30 naredimo n "običajnih" kovancev? • interpretacija odgovorov (DA/NE) • ne: nikakor to ne gre • da: mogoče, ni pa nujno • Kovanec() ustvari nov, “običajni” kovanec.

  11. Kovanci importknjiznica kvader_x = 20 kvader_y = 12 kvader_z = 30 volumenKvadra= kvader_x * kvader_y * kvader_z n = int(input('Koliko kovancev potrebujemo: ')) enKovanec= knjiznica.Kovanec() volKovanca= enKovanec.volumen() if(volumenKvadra > n * volKovanca) : print('DA') else : print('NE')

  12. Uporaba • Državni zakladnik spremeni dimenzije "običajnih" kovancev. Je potrebno spremeniti tvoj program? Kje so potrebne spremembe? • Razrede sestavljamo tako, da uporabniki tega razreda niso prizadeti ob morebitnih spremembah razredov • Glave metod pustimo enake • Uporabniški programi ostanejo enaki • Potrebujejo le nove različice knjižnic • Za uporabnika se s tem dejansko ne spremeni nič!

  13. Razred Kvader • Geometrijsko telo • Podatki • Komponente • opisujejo stanje objekta • Metode • Konstruktor (posebna metoda __init__) • Kaj se zgodi ko ustvarimo objekt • “znanje” objektov tega razreda • volumen, površina, ... • Metode za ravnanje s podatki • Nastavi podatek • Vrni podatek • __str__ Komponente:stranice • Metode: • konstruktor • volumen • povrsina • stranicaA • stranicaB • stranicaC • kolikoA • …

  14. Kvader - podatki • Podatki: • Stranice: a, b, c • Odločitev o načinu predstavitve • Kako bo imel objekt predstavljene stranice • Ena od možnosti: • 3x spremenljivka tipa int • Druga možnost • Seznam s tremi polji • Tretja možnost: ….

  15. Zakaj enkapsulacija? • Način predstavitve uporabnika NE SME (;-) ) zanimati • Zato za dostop do lastnosti • Pripravimo ustrezne metode • Če se podpisi metod ne spreminjajo – ni težav s spreminjanjem razreda • Vsi programi, ki uporabljajo objekte določenega razreda, si podatke izmenjujejo le preko metod • Če se klic ne bo spremenil, je vseeno, kako je spremenjen razred!

  16. Kvader – metode za delo s podatki • Za podatke, za katere je smiselno, da jih uporabnik vidi: • Metode, ki povejo vrednost podatka • povejA(), … • Za podatke, za katere je smiselno, da jih uporabnik spremeni: • Metode, ki spremenijo vrednost podatka • Možnost kontrole • stranicaA(), …

  17. Kvader - konstruktor • Standardno – konstruktor brez parametrov • Naredi “privzeti” objekt • Denimo – kvader s stranicami 1 x 1 x 1 • def __init__(self) :self.a= 1self.b= 1 self.c= 1 • Kaj pa, če bi uporabniku radi ponudili več možnosti “začetnega” kvadra? • Uporaba parametrov s privzetimi vrednostmi • def __init__(self, a = 1, b = 1, c = 1) :self.a = aself.b = b self.c = c

  18. __str__ • Metoda, ki se uporabi avtomatično, če moramo objekt spremeniti v niz • Vedno obstaja (dedovanje), a verjetno nekoristna • Zato običajno – sestavljamo sami def __str__(self) : opis = str(self.a) + ' x ' opis = opis + str(self.b) + ' x ' opis = opis + str(self.c) return opis

More Related