Informatika2-2012/Hazi11

A MathWikiből
(Változatok közti eltérés)
(Új oldal, tartalma: „[http://wiki.math.bme.hu/view/Informatika2-2012 <-- vissza] == Síkidom osztálystruktúra == Készíts osztályokat a következő struktúra szerint: <code> Alakzat\…”)
 
(super() függvény)
 
(egy szerkesztő 2 közbeeső változata nincs mutatva)
2. sor: 2. sor:
  
 
== Síkidom osztálystruktúra ==
 
== Síkidom osztálystruktúra ==
 +
 +
'''Beadási határidő: 2012. máj. 7.'''
 +
 
Készíts osztályokat a következő struktúra szerint:
 
Készíts osztályokat a következő struktúra szerint:
  
<code>
+
<python>
Alakzat\n
+
Pont
|\n
+
  |
* - Negyzet\n
+
  * - Negyzet
      |\n
+
        |
      * - Teglalap\n
+
        * - Teglalap
      |\n
+
        |
      * - Kor\n
+
        * - Kor
<code>
+
Vektor
 +
</python>
 +
 
 +
A '''Pont''' osztály definiálja hogy egy koordináta rendszerben hol helyezkedik el (x,y)
 +
Legyen neki két függvénye, amik konstans nullával térnek vissza.:
 +
* terulet
 +
* kerulet
 +
 
 +
Konstruktorában az x és az y legyen paraméter, és ha nem adják meg, akkor alapból a 0,0 legyen hozzájuk rendelve.
 +
 
 +
A pontot az + (__add__) operátorral el lehessen tolni, ha egy vektort kap.
 +
 
 +
A '''Vektor''' osztály két pontot tartalmaz, amit a konstruktorban inicializálunk, ha nem adnak meg koordinátákat akkor alapból a 0,0 és az 1,0 értéket kapja.
 +
A konstruktor Pontokat hozzon létre és ezt tárolja a Vektor osztályba (ezt nevezzük tartalmazásnak)
 +
 
 +
Definiáljuk továbbá a '''+''' (__add__), '''-''' (__sub__), '''*''' (__mul__) operátorokat is. Az operátorok minden esetben egy új vektorral térjenek vissza.
 +
 
 +
A '''Negyzet''' osztály a Pont leszármazottja, a konstruktora használja az őse konstruktorát is a super() függvény segítségével. És értelem szerűen definiálja felül a kerület, terület függvényeket. Írd felül az __add__ operátort ha kell, hogy hasonlóan az eltolást valósítsa meg.
 +
 
 +
A '''Teglalap''' és a '''Kor''' őse a Negyzet, ők is használják fel ősük konstruktorát a super() segítségével és írják felül értelemszerűen a kerület, terület függvényeket. Írd felül az __add__ operátort ha kell, hogy hasonlóan az eltolást valósítsa meg.
 +
 
 +
Ezután tegyétek ezeket egy modulba és írjatok egy fv. ami csak abban az esetben fut le ha nem importaljak a modult hanem futtatják. A fv. pedig rátok bízom, de demonstrálja a megírt osztályokat.
 +
 
 +
pl.:
 +
* példányosítás
 +
* vektorok összeadása, ...
 +
* területek kerületek számítása, ...
 +
 
 +
 
 +
'''Levonunk pontot ha nincs:'''
 +
* modul
 +
* import soran is lefut a demonstracio
 +
* demonstráció nem tér ki mindenre
 +
* nincsenek meg a kért osztályok
 +
* nincsenek meg a kért fv-ek
 +
* nincsenek meg a kért osztályok operátorai
 +
 
 +
== super() függvény ==
 +
a super fv egy típust vár paraméterként és visszaad egy "proxy"-t amin keresztül elérjük az ős függvényeit.
 +
A proxy-n az operátorok nem használhatók!
 +
 
 +
super(<type>) - type ősének közvetítőjét adja vissza
 +
super(<type>, <obj>) - type ősének közvetítőjét adja vissza ha az obj type típusú
 +
super(<type1>, <type2>) - az type1 type2 ősének közvetítőjét adja vissza (többes öröklés esetén)
 +
 
 +
<python>
 +
class A(object):
 +
  def __init__(self, x):
 +
    self.hey = x * x
 +
 
 +
class B(A):
 +
  def __init__(self, x, y):
 +
    self.zed = y / x
 +
    super(B, self).__init__(x)
 +
 
 +
print B
 +
a = A(5)
 +
print a.hey
 +
b = B(5, 30)
 +
print b.zed, b.hey
 +
</python>
 +
 
 +
[http://docs.python.org/library/functions.html#super super függvény leírása]
  
 
[http://wiki.math.bme.hu/view/Informatika2-2012 <-- vissza]
 
[http://wiki.math.bme.hu/view/Informatika2-2012 <-- vissza]

A lap jelenlegi, 2012. április 28., 17:21-kori változata

<-- vissza

Síkidom osztálystruktúra

Beadási határidő: 2012. máj. 7.

Készíts osztályokat a következő struktúra szerint:

Pont
  |
  * - Negyzet
        |
        * - Teglalap
        |
        * - Kor
Vektor

A Pont osztály definiálja hogy egy koordináta rendszerben hol helyezkedik el (x,y) Legyen neki két függvénye, amik konstans nullával térnek vissza.:

  • terulet
  • kerulet

Konstruktorában az x és az y legyen paraméter, és ha nem adják meg, akkor alapból a 0,0 legyen hozzájuk rendelve.

A pontot az + (__add__) operátorral el lehessen tolni, ha egy vektort kap.

A Vektor osztály két pontot tartalmaz, amit a konstruktorban inicializálunk, ha nem adnak meg koordinátákat akkor alapból a 0,0 és az 1,0 értéket kapja. A konstruktor Pontokat hozzon létre és ezt tárolja a Vektor osztályba (ezt nevezzük tartalmazásnak)

Definiáljuk továbbá a + (__add__), - (__sub__), * (__mul__) operátorokat is. Az operátorok minden esetben egy új vektorral térjenek vissza.

A Negyzet osztály a Pont leszármazottja, a konstruktora használja az őse konstruktorát is a super() függvény segítségével. És értelem szerűen definiálja felül a kerület, terület függvényeket. Írd felül az __add__ operátort ha kell, hogy hasonlóan az eltolást valósítsa meg.

A Teglalap és a Kor őse a Negyzet, ők is használják fel ősük konstruktorát a super() segítségével és írják felül értelemszerűen a kerület, terület függvényeket. Írd felül az __add__ operátort ha kell, hogy hasonlóan az eltolást valósítsa meg.

Ezután tegyétek ezeket egy modulba és írjatok egy fv. ami csak abban az esetben fut le ha nem importaljak a modult hanem futtatják. A fv. pedig rátok bízom, de demonstrálja a megírt osztályokat.

pl.:

  • példányosítás
  • vektorok összeadása, ...
  • területek kerületek számítása, ...


Levonunk pontot ha nincs:

  • modul
  • import soran is lefut a demonstracio
  • demonstráció nem tér ki mindenre
  • nincsenek meg a kért osztályok
  • nincsenek meg a kért fv-ek
  • nincsenek meg a kért osztályok operátorai

super() függvény

a super fv egy típust vár paraméterként és visszaad egy "proxy"-t amin keresztül elérjük az ős függvényeit. A proxy-n az operátorok nem használhatók!

super(<type>) - type ősének közvetítőjét adja vissza super(<type>, <obj>) - type ősének közvetítőjét adja vissza ha az obj type típusú super(<type1>, <type2>) - az type1 type2 ősének közvetítőjét adja vissza (többes öröklés esetén)

class A(object):
  def __init__(self, x):
    self.hey = x * x
 
class B(A):
  def __init__(self, x, y):
    self.zed = y / x
    super(B, self).__init__(x)
 
print B
a = A(5)
print a.hey
b = B(5, 30)
print b.zed, b.hey

super függvény leírása

<-- vissza

Személyes eszközök