Informatika2-2014/teszt
A MathWikiből
(Változatok közti eltérés)
65. sor: | 65. sor: | ||
<python> | <python> | ||
class Komplex: | class Komplex: | ||
+ | |||
def __init__(self, real, imag): | def __init__(self, real, imag): | ||
self.r = real | self.r = real | ||
164. sor: | 165. sor: | ||
def __init__(self, nev, fizetes): | def __init__(self, nev, fizetes): | ||
"""Konstruktor az alkalmazottaknak""" | """Konstruktor az alkalmazottaknak""" | ||
+ | |||
self.nev = nev | self.nev = nev | ||
self.fizetes = fizetes | self.fizetes = fizetes | ||
Alkalmazott.alkSzamlalo += 1 | Alkalmazott.alkSzamlalo += 1 | ||
self.sorszam = Alkalmazott.alkSzamlalo | self.sorszam = Alkalmazott.alkSzamlalo | ||
− | + | ||
def szamlalot_kiir(self): | def szamlalot_kiir(self): | ||
mit = "{0} a {1}. alkalmazott az összesen {2} között" | mit = "{0} a {1}. alkalmazott az összesen {2} között" | ||
193. sor: | 195. sor: | ||
<python> | <python> | ||
class Ellipszis: | class Ellipszis: | ||
+ | |||
def __init__(self, kozeppont, felx, fely): | def __init__(self, kozeppont, felx, fely): | ||
self.kozeppont = kozeppont | self.kozeppont = kozeppont | ||
206. sor: | 209. sor: | ||
<python> | <python> | ||
class Kor(Ellipszis): | class Kor(Ellipszis): | ||
+ | |||
def __init__(self, kozeppont, sugar): | def __init__(self, kozeppont, sugar): | ||
Ellipszis.__init__(self, kozeppont, sugar, sugar) | Ellipszis.__init__(self, kozeppont, sugar, sugar) | ||
230. sor: | 234. sor: | ||
</python> | </python> | ||
− | + | Függvény felülírása: | |
<python> | <python> |
A lap 2014. március 16., 23:07-kori változata
OOP
[[1]]
[[2]]
- Egységbezárás (encapsulation)
- a procedurális megközelítéssel ellentétben az adatok és a függvények a program nem különálló részét képezik, azok összetartoznak: együtt alkotnak egy objektumot. Az objektum felülete(ke)n (interfész, interface) keresztül érhető el a többi objektum számára.
- Osztály (class)
- egy objektum prototípusa, tulajdonságokkal ellátva, melyek jellemzik az osztály példányait. A tulajdonságok osztály és példányváltozók, és metódusok (tagfüggvények). Pont-jelöléssel érhetők el.
- Attribútum/tulajdonság (attribute)
- egy objektum tulajdonsága, jellemzője, az objektum nevét követő pont után írjuk a nevét.
- Példány (instance)
- egy osztályhoz tartozó egyedi objektum.
- Példányosítás (instantiation)
- egy osztály egy példányának létrehozása.
- Példány változó (instance variable)
- metóduson belül definiált változó, mely csak az osztály adott példányához tartozik.
- Osztályváltozó (class variable)
- változó, melyet az osztály minden példánya elér.
- Metódus (method, tagfüggvény)
- osztályon belül definiált spec. függvény, első argumentuma tipikusan a self.
- Öröklődés (inheritance)
- származtatással egy már meglévő osztályból egy újat hozunk létre. Ez rendelkezni fog az ős minden tulajdonságával, amihez továbbiakat ad(hat)unk.
- Polimorfizmus/többalakúság (polymorphism)
- különböző viselkedésmódokkal ruházzuk fel az egymásból származtatott objektumokat.
- Névtér (namespace)
- megadja, hogy egy név melyik objektumhoz tartozik (leképezés a nevekről az objektumokra). (Példák névterekre: foglalt nevek, globális változók, egy függvény lokális nevei).
- Hatókör/szkóp (scope)
- a kód azon része, ahol a névtér közvetlenül (a teljes elérési út magadása nélkül) elérhető.
>>> class Osztalyom: ... "Egy egyszerű példa osztályra" ... i = 123 ... def f(self, i): ... self.i = i ... return 'hello vilag' ... >>> x = Osztalyom() >>> x.i 123 >>> x.f(5) 'hello vilag' >>> x.i 5 >>> Osztalyom.i 123
Objektum kívülről ráaggatott attribútumokkal (ritkán van erre szükség):
>>> x.szamlalo = 1 >>> while x.szamlalo < 10: ... x.szamlalo = x.szamlalo * 2 ... >>> print x.szamlalo 16 >>> del x.szamlalo
Konstruktor __init__
class Komplex: def __init__(self, real, imag): self.r = real self.i = imag def konjugalt(self): return Komplex(self.r, -self.i)
Használatára létrejön egy példány, melynek memóriacímét kapjuk vissza nevének beírása után:
>>> z = Komplex(3, 4) >>> z <__main__.Komplex instance at 0x184a710> >>> w = z.konjugalt() >>> w <__main__.Komplex instance at 0x184a758>
Tulajdonságaik lekérdezhetők:
>>> z.r, z.i (3, 4) >>> w.r, w.i (3, -4)
További tulajdonságokkal ruházzuk fel a Komplex osztály objektumait. Ehhez a speciális metódusokat használjuk:
class Komplex: """Komplex számok kezelése.""" def __init__(self, real, imag): """Komplex szám létrehozása""" self.r = real self.i = imag def konjugalt(self): return Komplex(self.r, -self.i) def __add__(self, z): """Az infix '+' művelet használatához.""" return Komplex(self.r + z.r, self.i + z.i) def __repr__(self): """Komplex szám megjelenése interaktív módban. Ugyanezt kapjuk a print parancsra is.""" # ez egyelőre rossz, mert a 3 - 4i képe ez lesz: 3 + -4i return repr(self.r) + " + " + repr(self.i) + "i"
Alkalmazása:
>>> z1 = Komplex(3, 4) >>> z2 = Komplex(1, 5) >>> z1 + z2 4 + 9i >>> z1 3 + 4i >>> z2 1 + 5i >>> z1 + z2 4 + 9i
>>> type(z1) <type 'instance'> >>> isinstance(z1, Komplex) True >>> z1.__class__ <class __main__.Komplex at 0x21ce3f8> >>> z1.__module__ '__main__' >>> z1.__class__.__name__ 'Komplex' >>> dir(z1) ['__add__', '__doc__', '__init__', '__module__', '__repr__', 'i', 'konjugalt', 'r'] >>> print z1.__doc__ Komplex számok kezelése. >>> z1.konjugalt() 3 + -4i >>> z1.__add__(z2) 4 + 9i
Egy példa az osztályváltozó alkalmazására:
class Alkalmazott: """Alkalmazottak osztálya""" alkSzamlalo = 0 def __init__(self, nev, fizetes): """Konstruktor az alkalmazottaknak""" self.nev = nev self.fizetes = fizetes Alkalmazott.alkSzamlalo += 1 self.sorszam = Alkalmazott.alkSzamlalo def szamlalot_kiir(self): mit = "{0} a {1}. alkalmazott az összesen {2} között" print mit.format(self.nev, self.sorszam, Alkalmazott.alkSzamlalo) def adatot_kiir(self): print "Név: ", self.nev, ", Fizetés: ", self.fizetes
>>> a1 = Alkalmazott("Jóska", 1000000) >>> a2 = Alkalmazott("Pista", 200000) >>> a3 = Alkalmazott("Ildikó", 2000000) >>> a2.szamlalot_kiir() Pista a 2. alkalmazott az összesen 3 között >>> a2.adatot_kiir() Név: Pista , Fizetés: 200000 >>> a3.adatot_kiir() Név: Ildikó , Fizetés: 2000000
Példa az öröklésre. Szülő osztály:
class Ellipszis: def __init__(self, kozeppont, felx, fely): self.kozeppont = kozeppont self.felx = felx self.fely = fely def terulete(self): return self.felx*self.fely*3.14159
Gyerek osztály:
class Kor(Ellipszis): def __init__(self, kozeppont, sugar): Ellipszis.__init__(self, kozeppont, sugar, sugar) self.sugar = sugar
>>> e = Ellipszis((0, 0), 3, 2) >>> e.felx 3 >>> e.fely 2 >>> e.terulete() 18.849539999999998 >>> k = Kor((2, 0), 3) >>> k.felx 3 >>> k.fely 3 >>> k.sugar 3 >>> k.terulete() 28.27431
Függvény felülírása:
class Kor(Ellipszis): def __init__(self, kozeppont, sugar): Ellipszis.__init__(self, kozeppont, sugar, sugar) self.sugar = sugar def terulete(self): return self.sugar**2*3.14159