Python oop
This presentation is the property of its rightful owner.
Sponsored Links
1 / 18

Python - OOP PowerPoint PPT Presentation


  • 92 Views
  • Uploaded on
  • Presentation posted in: General

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

Download Presentation

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.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


Python oop

Python - OOP

Objekti


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


Python oop

__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


  • Login