TIP

De opgave van deze oefening bestaat uit relatief veel tekst. Daarom kan het handig zijn om 2 browser vensters te openen (eentje met de opgave en eentje waarin je de oplossing noteert), zodat je niet steeds moet scrollen.

Elk object van de klasse Figuur is opgebouwd uit een aantal Vormen. We beschouwen in deze oefening twee specifieke soorten vormen, namelijk rechthoeken (objecten van de klasse Rechthoek) en driehoeken (objecten van de klasse Driehoek). Omdat rechthoeken en driehoeken speciale soorten vormen zijn, erven beide klassen over van de klasse Vorm. Programmeer de klassen Vorm, Rechthoek, Driehoek en Figuur, volgens onderstaande richtlijnen.

Klasse Vorm

Voorbeeld (tabblad 1)

v1 = Vorm('A')
v2 = Vorm('B')
v3 = Vorm('A')
v4 = Vorm('C')
print(v1 == v2)                 #False
print(hash(v1) == hash(v2))     #False
print(v1 == v3)                 #True
print(hash(v1) == hash(v3))     #True
v = set([v1, v2, v3, v4])
print(set([str(e) for e in v])) #{'(B,?)', '(C,?)', '(A,?)'}

Klasse Rechthoek

De klasse Rechthoek erft over van Vorm. Gebruik zoveel mogelijk de functionaliteit uit de klasse Vorm!

Klasse Driehoek

Ook de klasse Driehoek erft over van Vorm. Gebruik ook hier zoveel mogelijk de functionaliteit uit de klasse Vorm!

Voorbeeld (tabblad 2)

v = Vorm('A')
r1 = Rechthoek('B', 1, 2)
r2 = Rechthoek('C', 3, 4)
d1 = Driehoek('D', 2, 6)
d2 = Driehoek('B', 3, 4)

isinstance(r1, Rechthoek) #True
isinstance(r2, Vorm)      #True
isinstance(d1, Driehoek)  #True
isinstance(d2, Vorm)      #True

print(v)  #(A,?)
print(r1) #(B,R)[1,2]
print(r2) #(C,R)[3,4]
print(d1) #(D,D)[2,6]
print(d2) #(B,D)[3,4]

print(v.oppervlakte())  #0
print(r1.oppervlakte()) #2
print(r2.oppervlakte()) #12
print(d1.oppervlakte()) #6
print(d2.oppervlakte()) #6

vormen = set([v, r1, r2, d1, d2])
print(set([str(e) for e in vormen])) #{'(C,R)[3,4]', '(A,?)', '(D,D)[2,6]', '(B,R)[1,2]'}

Klasse Figuur

Elke figuur bestaat uit een verzameling Vormen. Initieel is deze verzameling leeg. De Figuur wordt dan opgebouwd door telkens een Vorm toe te voegen aan de Figuur via de +=-operator.

Voorbeeld (tabblad 3)

v = [Vorm(naam) for naam in ['A', 'B']]
r = [Rechthoek(naam, l, b) for (naam, l, b) in zip(['RA', 'RB'], [1, 2], [3, 4])]
d = [Driehoek(naam, b, h) for (naam, b, h) in zip(['DA', 'DB'], [2, 4], [3, 5])]

fig = Figuur()
for vorm in v + r + d:
	fig += vorm
print(fig) #{(A,?),(B,?),(DA,D)[2,3],(DB,D)[4,5],(RA,R)[1,3],(RB,R)[2,4]}

for e in [('R', 'RC', 4, 5), ('R', 'RD', 2, 7), ('D', 'DC', 2, 2), ('D', 'DD', 4, 4)]:
	fig += e
print(fig)
#{(A,?),(B,?),(DA,D)[2,3],(DB,D)[4,5],(DC,D)[2,2],(DD,D)[4,4],(RA,R)[1,3],(RB,R)[2,4],(RC,R)[4,5],(RD,R)[2,7]}

print(fig.oppervlakte())     #68
print(fig.max_oppervlakte()) #(RC,R)[4,5]