You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Med en ordlista är implementeringen mycket kortare och enklare. Med en klass är strukturen däremot mer "hårt bunden", så vi kan förvänta oss att alla `Bankkonto`-objekt är strukturellt lika. Dessutom är en klass också namngiven. Klassen `Bankkonto` refereras till när ett nytt bankkonto skapas, och objektets typ är `Bankkonto`, inte dict.
37
+
Med en ordlista är implementeringen mycket kortare och enklare. Med en klass är strukturen däremot hårdare bunden, vilket innebär att vi kan förvänta oss att alla `Bankkonto`-objekt är strukturellt lika. Dessutom är en klass också namngiven. Klassen `Bankkonto` refereras till när ett nytt bankkonto skapas, och objektets typ är `Bankkonto`, inte `dict`.
38
38
39
-
En annan stor fördel med klasser är att de förutom data även kan innehålla funktionalitet. En av de vägledande principerna för objektorienterad programmering är att ett objekt används för att komma åt både den data som är kopplad till ett objekt och funktionaliteten för att bearbeta denna data.
39
+
En annan stor fördel med klasser är att de förutom data även kan innehålla funktionalitet. En av de vägledande principerna för objektorienterad programmering är att ett objekt används för att komma åt både de data som är kopplad till objektet och funktionalitet för att bearbeta dessa data.
40
40
41
41
## Metoder i klasser
42
42
@@ -102,9 +102,9 @@ Som du kan se ovan läggs den årliga räntan endast till på de konton som meto
102
102
103
103
## Inkapsling
104
104
105
-
Inom objektorienterad programmering dyker ordet klient upp då och då. Det används för att hänvisa till ett kodavsnitt som skapar ett objekt och använder dem med hjälp av de metoder som motsvarande klass ger möjlighet till. När data som finns i ett objekt endast används genom de metoder som definierats i klassen, garanteras objektets interna integritet. I praktiken innebär detta att t.ex. en `Bankkonto`-klass erbjuder metoder för att hantera `saldo`-attributet, så att saldot aldrig nås direkt av klienten. Dessa metoder kan sedan verifiera att saldot till exempel inte tillåts gå under noll.
105
+
Inom objektorienterad programmering dyker ordet klient upp då och då. En klient innebär i detta sammanhang inte en person eller mänsklig kund, utan extern kod. Klient används för att hänvisa till det kodavsnitt som skapar ett objekt och använder det med hjälp av de metoder som motsvarande klass ger möjlighet till. När data som finns i ett objekt endast används genom de metoder som definierats i klassen, garanteras objektets interna integritet. I praktiken innebär detta att t.ex. en `Bankkonto`-klass erbjuder metoder för att hantera `saldo`-attributet, så att saldot aldrig nås direkt av klienten. Dessa metoder kan sedan verifiera att saldot till exempel inte tillåts gå under noll.
106
106
107
-
Ett exempel på hur detta skulle fungera:
107
+
Ett exempel på hur detta kunde fungera:
108
108
109
109
```python
110
110
classBankkonto:
@@ -115,12 +115,12 @@ class Bankkonto:
115
115
self.saldo = saldo
116
116
self.arsranta = arsranta
117
117
118
-
# Metoden tillsätter den årliga räntat till saldot av kontot
118
+
# Metoden lägger till den årliga räntan till kontots saldo
119
119
deflagg_till_ranta(self):
120
120
self.saldo +=self.saldo *self.arsranta
121
121
122
122
# Den här metoden "tar ut" pengar från kontot
123
-
# Metoden returnerar True ifall det lyckades, och False ifall det misslyckades
123
+
# Metoden returnerar True ifall det lyckas, och False ifall det misslyckas
124
124
defuttag(self, uttagssumma: float):
125
125
if uttagssumma <=self.saldo:
126
126
self.saldo -= uttagssumma
@@ -149,9 +149,9 @@ Uttaget lyckades inte, saldot var otillräckligt
149
149
150
150
</sample-output>
151
151
152
-
Att bibehålla objektets interna integritet och erbjuda lämpliga metoder för att säkerställa detta kallas inkapsling. Tanken är att objektets inre arbete är dolt för klienten, men objektet erbjuder metoder som kan användas för att komma åt den data som lagras i objektet.
152
+
Att bibehålla objektets interna integritet och erbjuda lämpliga metoder för att säkerställa detta kallas _inkapsling_. Tanken är att objektets interna struktur och funktionalitet hålls dolt för klienten, medan objektet erbjuder metoder som klienten kan använda för att komma åt och arbeta med de data som lagras i objektet.
153
153
154
-
Att lägga till en metod innebär inte att attributet automatiskt döljs. Även om klassdefinitionen `Bankkonto` innehåller metoden `uttag` för att ta ut pengar, kan klientkoden fortfarande komma åt och ändra attributet `saldo` direkt:
154
+
Att lägga till en metod innebär inte att attributet automatiskt döljs. Även om klassdefinitionen `Bankkonto` innehåller metoden `uttag` för att ta ut pengar, kan klienten fortfarande komma åt och ändra attributet `saldo` direkt:
Som avslutning på detta avsnitt tittar vi på en klass som modellerar en spelares personliga bästa. Klassdefinitionen innehåller separata valideringsmetoder som kontrollerar att de argument som skickas är giltiga. Metoderna anropas redan i konstruktorn. Detta säkerställer att det skapade objektet är sunt internt.
283
+
Som avslutning på detta avsnitt tittar vi på en klass som modellerar en spelares personliga bästa. Klassdefinitionen innehåller separata valideringsmetoder som kontrollerar att de argument som skickas är giltiga. Metoderna anropas redan i konstruktorn. Detta säkerställer att det skapade objektet har den struktur som förväntas av objekt av denna typ.
284
284
285
285
```python
286
286
from datetime import date
@@ -302,7 +302,7 @@ class PersonligtRekord:
302
302
ifself.poang_ok(poang):
303
303
self.poang = poang
304
304
305
-
#Hjälparmetoder som kollar att argumenten är giltiga
305
+
#Hjälpmetoder som kollar att argumenten är giltiga
306
306
defnamn_ok(self, namn: str):
307
307
returnlen(namn) >=2# Namnet ska vara minst två tecken
308
308
@@ -341,11 +341,11 @@ Pernilla
341
341
342
342
</sample-output>
343
343
344
-
I exemplet ovan anropades även hjälpmetoderna via parameternamnet `self` när de användes i konstruktorn. Det är också möjligt att inkludera /statiska/ metoddefinitioner i klassdefinitioner. Dessa är metoder som kan anropas utan att det någonsin skapas en instans av klassen. Vi återkommer till detta i nästa del.
344
+
I exemplet ovan anropades även hjälpmetoderna via parameternamnet `self` när de användes i konstruktorn. Det är också möjligt att inkludera /statiska/ metoddefinitioner i klassdefinitioner. Dessa är metoder som kan anropas utan att det någonsin skapas en instans av klassen. Vi återkommer till detta i nästa modul.
345
345
346
346
Parameternamnet `self` används endast när man hänvisar till /objektets egenskaper som en instans av klassen/. Det gäller både dataattributen och de metoder som är knutna till ett objekt. För att göra terminologin mer förvirrande kallas dataattributen och metoderna tillsammans ibland helt enkelt för objektets attribut, vilket är anledningen till att vi i detta material ofta har angett dataattribut när vi menar de variabler som definieras inom klassen. Det är här terminologin hos vissa Python-programmerare skiljer sig något från den terminologi som mer allmänt används inom objektorienterad programmering, där attribut vanligtvis bara hänvisar till dataattributen hos ett objekt.
347
347
348
-
Det är också möjligt att skapa lokala variabler inom metoddefinitioner utan att hänvisa till `self`. Detta bör du göra om det inte finns något behov av att komma åt variablerna utanför metoden. Lokala variabler inom metoder har inga speciella nyckelord; de används precis som alla vanliga variabler som du har stött på hittills. .
348
+
Det är också möjligt att skapa lokala variabler inom metoddefinitioner utan att hänvisa till `self`. Detta bör du göra om det inte finns något behov av att komma åt variablerna utanför metoden. Lokala variabler inom metoder har inga speciella nyckelord; de används precis som alla vanliga variabler som du har stött på hittills.
I den här övningen ska du skapa ett program för att arbeta med siffror, på samma sätt som i [slutet av modul 2](https://rage.github.io/ohjelmointi-24-sv/osa-8/4-metoder-i-egna-klasser) i kursen Introduktion till Programmering. Den här gången ska du definiera en klass för ändamålet.
414
+
I den här övningen ska du skapa ett program för att arbeta med siffror, på samma sätt som i [slutet av modul 2](https://rage.github.io/ohjelmointi-24-sv/osa-8/4-metoder-i-egna-klasser) i grundkursen. Den här gången ska du definiera en klass för ändamålet.
415
415
416
416
### Antalet nummer
417
417
418
418
Skapa en klass med namnet `Nummerstatistik`, med följande metoder:
419
419
420
420
- metoden `lagg_till_nummer` lägger till ett nytt nummer till statistiken
421
-
- metoden `antalet_nummer` returnerar antalet nummer som har tillsatts
421
+
- metoden `antalet_nummer` returnerar antalet nummer som har lagts till
422
422
423
-
I det här skedet finns det inget behov av att lagra själva siffrorna i någon datastruktur. Det räcker att bara komma ihåg hur många som har lagts till. Metoden `lagg_till_nummer` tar emot ett argument, men det finns inget behov av att bearbeta det faktiska värdet på något sätt ännu.
423
+
I det här skedet finns det inget behov av att lagra själva talen i någon datastruktur. Det räcker att bara komma ihåg hur många som har lagts till. Metoden `lagg_till_nummer` tar emot ett argument, men det finns inget behov av att bearbeta det faktiska värdet på något sätt ännu.
424
424
425
425
Funktionen borde ha följande struktur:
426
426
@@ -453,10 +453,10 @@ Antalet nummer: 4
453
453
454
454
### Summa och medeltal
455
455
456
-
Tillsätt följande metoder till klassdefinitionen:
456
+
Lägg till följande metoder i klassdefinitionen:
457
457
458
-
- metoden `summa` returnerar summan av talen som satts till (en tom statistik returnerar 0)
459
-
- metoden `medeltat` returnerar medeltalet av numren (en tom statistiks medeltal är 0)
458
+
- metoden `summa` returnerar summan av de tal som har satts till (en tom statistik returnerar 0)
459
+
- metoden `medeltal` returnerar medeltalet av talen (medeltalet för en tom statistik är 0)
460
460
461
461
```python
462
462
statistik = NummerStatistik()
@@ -481,11 +481,11 @@ Medeltal: 2.75
481
481
482
482
Skriv ett huvudprogram som fortsätter att fråga användaren om heltal tills användaren skriver in -1. Programmet ska sedan skriva ut summan och medelvärdet av de inmatade talen.
483
483
484
-
Ditt program ska använda `NummerStatistik`-objekt för att hålla koll på numren som läggs till.
484
+
Ditt program ska använda `NummerStatistik`-objekt för att hålla koll på de tal som läggs till.
485
485
486
-
OBS: Du behöver inte ändra `NummerStatistik`-klassen, i denna del, använd en instans av klassen för att slutföra denna del.
486
+
OBS: Du behöver inte ändra `NummerStatistik`-klassen, använd en instans av klassen för att slutföra denna del av uppgiften.
487
487
488
-
OBS2: Ditt huvudprogram ska inte vara inuti ett `if __name__ == "__main__"`-block, annars fungerar inte testen.
488
+
OBS2: Ditt huvudprogram ska inte vara inuti ett `if __name__ == "__main__"`-block. Om du lägger till det kommer testerna inte att fungera.
489
489
490
490
<sample-output>
491
491
@@ -502,11 +502,11 @@ Medeltal: 3.25
502
502
503
503
### Flera summor
504
504
505
-
Bygg på ditt huvudprogram så att det också separat räknar summan av de jämna och udda tal som läggs till.
505
+
Bygg på ditt huvudprogram så att det också separat beräknar summan av de jämna och udda tal som läggs till.
506
506
507
-
OBS: Ändra inte din `NummerStatistik`-klassdefinition i denna del av övningen heller. Definiera i stället tre `NummerStatistik`-objekt. Ett av dem ska hålla reda på alla siffror, ett annat ska hålla reda på de jämna siffrorna och det tredje ska hålla reda på de udda siffror som skrivs in.
507
+
OBS: Ändra inte din `NummerStatistik`-klassdefinition i denna del av övningen heller. Definiera i stället tre `NummerStatistik`-objekt. Ett av dem ska hålla reda på alla tal, ett annat ska hålla reda på de jämna talen och det tredje ska hålla reda på de udda tal som skrivs in.
508
508
509
-
OBS2: Ditt huvudprogram ska inte vara inuti ett `if __name__ == "__main__"`-block, annars fungerar inte testen.
509
+
OBS2: Ditt huvudprogram ska inte vara inuti ett `if __name__ == "__main__"`-block.
0 commit comments