Skip to content

Commit 840ad4e

Browse files
authored
Update 4-metoder-i-egna-klasser.md
updated language
1 parent 0faffe4 commit 840ad4e

File tree

1 file changed

+25
-25
lines changed

1 file changed

+25
-25
lines changed

Diff for: data/osa-8/4-metoder-i-egna-klasser.md

+25-25
Original file line numberDiff line numberDiff line change
@@ -34,9 +34,9 @@ peters_konto = Bankkonto("12345-678", "Peter Python", 1500.0, 0.015)
3434
peters_konto = {"kontonummer": "12345-678", "agare": "Peter Python", "saldo": 1500.0, "arsranta": 0.0}
3535
```
3636

37-
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`.
3838

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.
4040

4141
## Metoder i klasser
4242

@@ -102,9 +102,9 @@ Som du kan se ovan läggs den årliga räntan endast till på de konton som meto
102102

103103
## Inkapsling
104104

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.
106106

107-
Ett exempel på hur detta skulle fungera:
107+
Ett exempel på hur detta kunde fungera:
108108

109109
```python
110110
class Bankkonto:
@@ -115,12 +115,12 @@ class Bankkonto:
115115
self.saldo = saldo
116116
self.arsranta = arsranta
117117

118-
# Metoden tillsätter den årliga räntat till saldot av kontot
118+
# Metoden lägger till den årliga räntan till kontots saldo
119119
def lagg_till_ranta(self):
120120
self.saldo += self.saldo * self.arsranta
121121

122122
# 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
124124
def uttag(self, uttagssumma: float):
125125
if uttagssumma <= self.saldo:
126126
self.saldo -= uttagssumma
@@ -149,9 +149,9 @@ Uttaget lyckades inte, saldot var otillräckligt
149149

150150
</sample-output>
151151

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.
153153

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:
155155

156156
```python
157157
peters_konto = Bankkonto("12345-678", "Peter Python", 1500.0, 0.015)
@@ -168,7 +168,7 @@ else:
168168
print("Saldot är nu:", peters_konto.saldo)
169169
```
170170

171-
Det är möjligt att dölja dataattributen från klientkoden, vilket kan bidra till att lösa detta problem. Vi återkommer till detta ämne i nästa del.
171+
Det är möjligt att dölja dataattributen från klientkoden, vilket kan bidra till att lösa detta problem. Vi återkommer till detta i nästa modul.
172172

173173
<programming-exercise name='Minskande räknare' tmcname='osa08-10_minskande_raknare'>
174174

@@ -280,7 +280,7 @@ värde: 55
280280

281281
</programming-exercise>
282282

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 ä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.
284284

285285
```python
286286
from datetime import date
@@ -302,7 +302,7 @@ class PersonligtRekord:
302302
if self.poang_ok(poang):
303303
self.poang = poang
304304

305-
# Hjälparmetoder som kollar att argumenten är giltiga
305+
# Hjälpmetoder som kollar att argumenten är giltiga
306306
def namn_ok(self, namn: str):
307307
return len(namn) >= 2 # Namnet ska vara minst två tecken
308308

@@ -341,11 +341,11 @@ Pernilla
341341

342342
</sample-output>
343343

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.
345345

346346
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.
347347

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.
349349

350350
Så här skulle det till exempel fungera:
351351

@@ -411,16 +411,16 @@ Pythonson
411411

412412
<programming-exercise name='Nummerstatistik' tmcname='osa08-11_nummerstatistik'>
413413

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 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.
415415

416416
### Antalet nummer
417417

418418
Skapa en klass med namnet `Nummerstatistik`, med följande metoder:
419419

420420
- 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
422422

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.
424424

425425
Funktionen borde ha följande struktur:
426426

@@ -453,10 +453,10 @@ Antalet nummer: 4
453453

454454
### Summa och medeltal
455455

456-
Tillsätt följande metoder till klassdefinitionen:
456+
Lägg till följande metoder i klassdefinitionen:
457457

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)
460460

461461
```python
462462
statistik = NummerStatistik()
@@ -481,11 +481,11 @@ Medeltal: 2.75
481481

482482
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.
483483

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.
485485

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.
487487

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.
489489

490490
<sample-output>
491491

@@ -502,11 +502,11 @@ Medeltal: 3.25
502502

503503
### Flera summor
504504

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.
506506

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.
508508

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.
510510

511511
Programmet ska fungera så här:
512512

0 commit comments

Comments
 (0)