Centralt innehåll

Se avsnitten Klasser   Inkapsling   Arv

Begrepp

Klass: En mall för att skapa objekt.

Objekt: En verklig förekomst av en klass.

Attribut: Variabler i en klass.

Metod: En funktion som definieras i en klass.

Konstruktor: En metod som automatiskt anropas när ett objekt skapas.

Inkapsling: Att skydda attribut i ett objekt för okontrollerad ändringar.

Åtkomstnivåer: Attribut i objekt kan skyddas på olika sätt. De kan vara publika, skyddade eller privata.

Publika attribut: Attribut som kan läsas och ändras hur som helst.

Skyddade attribut: Attribut med ett understreck som prefix och rekommenderas att inte ändras utanför objektet.

Privata attribut: Attribut med två understreck som prefix och rekommenderas att inte ändras utanför objektet.

Get- och set-metoder: Används för att läsa eller ändra attributens värden.

Dekoratörer: Ett mer läsbart sätt att använda inkapsling utan get- och set-metoder.

Arv: När klasser definieras baserat på en annan klass.

Subklass: Klassen som ärver egenskaper och beteenden (attribut och metoder).

Basklass: Den klass som man ärver ifrån.

Superklass: Samma som basklass.

Override: Omdefinerar en metod i basklassen.

Fakta

Övningar

Inlämningsuppgift - OOP

Uppgift 1 och 2 är obligatoriska.
Frivillga extra-uppgifter: Uppgift 3 är C-nivå och uppgift 4 är A-nivå.

1. Du ska skriva en klass Person.

Klassen Person har tre publika attribut: first_name, last_name och birth_year.
Konstruktorn ska ha parametrar för alla tre attribut.
Metoden age(self, current_year), har aktuellt årtal som parameter och returnerar personens ålder.
Metoden __str__(), ska returnera information (namn och födelseår) om personen (se exempel-utskrift nedan).


Kom ihåg att metoderna i klasserna inte får innehålla print-satser.
Programmet som ska köras är:

		
person = Person("Jan", "Gran", 1986)
print(person)
print(f'{person.first_name} är {person.age(2022)} år')
och ska då ge utskriften
Jan Gran är född 1986
Jan är 36 år

2. Du ska skriva en klass Teacher, som ärver från klassen Person.

Subklassen Teacher har de publika attributen salary (månadslönen) och employed_year (anställningsår).
Konstruktorn ska ha parametrar för first_name, last_name, birth_year, salary och employed_year. Konstruktorn ska anropas superklassens konstruktor med attributen first_name, last_name och birth_year.

Metoden __str__(), som returnerar information (namn, födelseår och månadslön) om läraren (se exempel-utskrift nedan).
Metoden years_of_employment(current_year), som returnerar antal år läraren varit anställd (se exempel-utskrift nedan).

Kom ihåg att metoderna i klasserna inte får innehålla print-satser.
Programmet som ska köras är:

		
teacher = Teacher("Jan", "Gran", 1986, 28000, 2015)
print(teacher)
print(f'Läraren {teacher.first_name} är {teacher.age(2022)} år')
print(f'Antal anställningsår: {teacher.years_of_employment(2022)}')
och ska då ge utskriften
Jan Gran är född 1986 och tjänar 28000 kr/månad
Läraren Jan är 36 år
Antal anställningsår: 7

3. Metoden years_of_employment(current_year), ska istället returnera ett * för varje år läraren varit anställd (se exempel-utskrift nedan).

		
teacher = Teacher("Jan", "Gran", 1986, 28000, 2015)
print(teacher)
print(f'Läraren {teacher.first_name} är {teacher.age(2022)} år')
print(f'Antal anställningsår: {teacher.years_of_employment(2022)}')
och ska då ge utskriften
Jan Gran är född 1986 och tjänar 28000 kr/månad
Läraren Jan är 36 år
Antal anställningsår: *******

4. Extra: Ändra åtkomstnivån till attributen för klassen Person och Teacher till privata. Använd dekoratörer för att komma åt de privata attributen utanför objektet.