http://wiki.math.bme.hu/history/Informatika2-2018/Gyakorlat7?feed=atom&Informatika2-2018/Gyakorlat7 - Laptörténet2024-03-28T11:35:10ZAz oldal laptörténete a wikibenMediaWiki 1.18.1http://wiki.math.bme.hu/index.php?title=Informatika2-2018/Gyakorlat7&diff=13410&oldid=prevGaebor: /* Öröklődés és konstruktorok */2018-03-27T18:22:36Z<p><span class="autocomment">Öröklődés és konstruktorok</span></p>
<table class='diff diff-contentalign-left'>
<col class='diff-marker' />
<col class='diff-content' />
<col class='diff-marker' />
<col class='diff-content' />
<tr valign='top'>
<td colspan='2' style="background-color: white; color:black;">←Régebbi változat</td>
<td colspan='2' style="background-color: white; color:black;">A lap 2018. március 27., 18:22-kori változata</td>
</tr><tr><td colspan="2" class="diff-lineno">23. sor:</td>
<td colspan="2" class="diff-lineno">23. sor:</td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>     class B(A):</div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>     class B(A):</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>         def __init__(self, x, y, a, b):</div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>         def __init__(self, x, y, a, b):</div></td></tr>
<tr><td class='diff-marker'>−</td><td style="background: #ffa; color:black; font-size: smaller;"><div>             A.__init__(self, x,y)</div></td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div>             A.__init__(self, x, y)</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>             # vagy</div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>             # vagy</div></td></tr>
<tr><td class='diff-marker'>−</td><td style="background: #ffa; color:black; font-size: smaller;"><div>             super(B, self).__init__(x,y)</div></td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div>             super(B, self).__init__(x, y)</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>Az első változatban</div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>Az első változatban</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td></tr>
<tr><td class='diff-marker'>−</td><td style="background: #ffa; color:black; font-size: smaller;"><div>     A.__init__(self, x,y)</div></td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div>     A.__init__(self, x, y)</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>megmondjuk, hogy az '''A''' osztály konstruktorát akarjuk meghívni (amit már korábban megírtunk).<br></div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>megmondjuk, hogy az '''A''' osztály konstruktorát akarjuk meghívni (amit már korábban megírtunk).<br></div></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>A második változatban</div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>A második változatban</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td></tr>
<tr><td class='diff-marker'>−</td><td style="background: #ffa; color:black; font-size: smaller;"><div>     super(B, self).__init__(x,y)</div></td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div>     super(B, self).__init__(x, y)</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>azt mondjuk, hogy a '''B''' mindenkori ősosztályát hívjuk meg, ami most éppen '''A'''.</div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>azt mondjuk, hogy a '''B''' mindenkori ősosztályát hívjuk meg, ami most éppen '''A'''.</div></td></tr>
</table>Gaeborhttp://wiki.math.bme.hu/index.php?title=Informatika2-2018/Gyakorlat7&diff=13409&oldid=prevGaebor: Új oldal, tartalma: „előző fel következő = Feladatok = Nyissuk meg a Sypdert. == Alakzatok a vá…”2018-03-27T18:22:02Z<p>Új oldal, tartalma: „<a href="/view/Informatika2-2018/Gyakorlat6" title="Informatika2-2018/Gyakorlat6">előző</a> <a href="/view/Informatika2-2018" title="Informatika2-2018">fel</a> <a href="/view/Informatika2-2018/Gyakorlat8" title="Informatika2-2018/Gyakorlat8">következő</a> = Feladatok = Nyissuk meg a Sypdert. == Alakzatok a vá…”</p>
<p><b>Új lap</b></p><div>[[Informatika2-2018/Gyakorlat6|előző]] [[Informatika2-2018|fel]] [[Informatika2-2018/Gyakorlat8|következő]]<br />
<br />
= Feladatok =<br />
Nyissuk meg a Sypdert.<br />
== Alakzatok a vásznon ==<br />
=== Alakzatok ===<br />
Írjunk egy '''Shape''' osztályt. <br />
*Legyen '''x''' és '''y''' változója, ezek tárolják az alakzat pozícióját a síkon. <br />
*Legyen egy '''move''' metódusa, aminek egyetlen '''v''' paramétere van, egy kételemű lista, a vektor, amivel el kell mozgatni az alakzatot.<br />
<br />
Definiáljuk a '''Shape''' osztály leszármazottaiként az <br />
* '''Ellipse''' ellipszis, legyen meg a kis- és nagytengelye ('''a,b''')<br />
* '''Rectangle''' téglalap, legyen meg az oldalak hossza ('''a,b''')<br />
osztályokat. Mindkét esetben a pozíciójuk a súlypontjukat jelentse. <br />
<br />
Írjunk mindkét osztályhoz egy '''area''' függvényt, ami kiszámítja az alakzat területét!<br />
<br />
Definiáljuk az '''Ellipse''' osztály '''equation''' metódusát, ami kiírja az adott ellipszis egyenletét!<br />
<br />
=== Öröklődés és konstruktorok ===<br />
Ha a ''leszármazott osztályban'' (például Ellipse) az ''ősosztály konstruktorát'' (jelen esetben Shape) akarjuk hívni, akkor erre két módszer is lehetséges:<br />
<br />
class B(A):<br />
def __init__(self, x, y, a, b):<br />
A.__init__(self, x,y)<br />
# vagy<br />
super(B, self).__init__(x,y)<br />
<br />
Az első változatban<br />
<br />
A.__init__(self, x,y)<br />
<br />
megmondjuk, hogy az '''A''' osztály konstruktorát akarjuk meghívni (amit már korábban megírtunk).<br><br />
A második változatban<br />
<br />
super(B, self).__init__(x,y)<br />
<br />
azt mondjuk, hogy a '''B''' mindenkori ősosztályát hívjuk meg, ami most éppen '''A'''.<br />
<br />
=== Vászon ===<br />
Definiáljuk a '''Canvas''' (vászon) osztályt. <br />
* Egyetlen tagváltozója legyen a '''shapes''', ami alakzatok listáját tárolja. <br />
* Definiáljuk egy '''add''' metódust, amivel újabb '''Shape'''-et adunk a vászonhoz!<br />
* Oldjuk meg, hogy az osztályunk iterálható legyen! Ehhez definiáljuk az '''__iter__(self)''' metódust, valamit a '''next(self)''' metódust, ahogy az előadáson láttuk.<br />
* Definiáljuk a '''crop''' metódust a következőképp: a bemeneti paraméter két pont koordinátája, ezek egy téglalap bal felső és jobb alsó pontjai. A függvény térjen vissza azon alakzatok listájával, amelyek a vásznon vannak és teljesen beleférnek az így definiált téglalapba. Ehhez a feladathoz az '''Ellipse''' és a '''Rectangle''' osztálynak is szüksége lesz egy '''box()''' metódusra, ami a legkisebb tartalmazó doboz bal felső és jobb alsó sarkait adja vissza.<br />
<br />
== Overload ==<br />
# Írjunk egy függvényt, aminek az első argumentuma '''n''', egy '''int''' típusú változó. A függvény térjen vissza '''True'''-val, ha annyi extra paraméterrel hívták meg, mint az első bemeneti paraméter értéke, egyébként térjen vissza '''False'''-szal.<br />
# Definiáljunk egy '''szumma''' függvényt, ami tetszőlegesen sok bemeneti paraméterének összegével tér vissza!<br />
## Kezeljük le a kivételt, ha a paraméterek típusa nem azonos!<br />
# Definiáljunk egy '''print_words''' függvényt, úgy, hogy a megadott (akármennyi) szavakat annyiszor írja ki, amennyit megadunk bemenetnként (szavanként)!<br />
## Kezejük le kivételként, ha a bemeneten nem egész számot adtak meg a szó gyakoriságára!<br />
<br />
== Iterálható ==<br />
<br />
Íjunk olyan iterálható osztályt, mint a '''range''', de ne egy listát járjon be, hanem csak az aktuális elemet tárolja.<br />
<br />
class Range(object):<br />
def __init__( ... ):<br />
...<br />
def __iter__( ... ):<br />
...<br />
def next( ... ):<br />
...<br />
* konstruktora egy számot vagy sztringet kapjon. Addig a számig lehessen iterálni rajta, nullától, egyesével.<br />
* Ha a szám nem pozitív, akkor 0 hosszan lehessen iterálni rajta.<br />
* Ha sztringet kap a konstruktor és az nem értelmezhető egészként, akkor emeljünk '''ValueError''' kivételt.<br />
** Ha értelmezhető egészként, akkor alakítsuk át egésszé és számoljunk azzal.<br />
* Ha '''"inf"''' sztringet kap a konstruktor, akkor végtelen sokáig lehessen rajta iterálni!<br />
<br />
[[Informatika2-2018/Gyakorlat6|előző]] [[Informatika2-2018|fel]] [[Informatika2-2018/Gyakorlat8|következő]]</div>Gaebor