python oop
Download
Skip this Video
Download Presentation
Python - OOP

Loading in 2 Seconds...

play fullscreen
1 / 18

Python - OOP - PowerPoint PPT Presentation


  • 129 Views
  • Uploaded on

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

loader
I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.
capcha
Download Presentation

PowerPoint Slideshow about 'Python - OOP' - arav


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.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript
ustvarjanje objektov
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
problem
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
kako do svojega razreda

Kako do svojega razreda

Na tržišču ni niti približno ustreznega razreda

naredimo razred
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
okostje razreda
Okostje razreda

classRazred :

# konstruktor z deklaracijo lastnosti - komponent

# atributov - polj - ...

# metode

# __str__, __ repr __

razredi in objekti
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
kovanec
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

kovanec1
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

uporaba
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.
kovanci
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')

uporaba1
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č!
razred kvader
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
kvader podatki
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: ….
zakaj enkapsulacija
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!
kvader metode za delo s podatki
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(), …
kvader konstruktor
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
slide18
__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

ad