TIG054 Fortsättning i programmering Flashcards
Kompileringsfel (Compile Error)
Syntaxfel eller liknande
Saker som gör att Python inte förstår koden.
Måste åtgärdas innan programmet kan köras.
Vanligtvis ger kompilatorn felmeddelande.
Ex. print(“Hello, world!”
Ex. print(y), men y är inte definerad
Ex. z = x + y, men x är en int medan y är en string
Ex. Glömt kolon efter if sats
Ex. Felstavat funktion
Exekveringsfel
Runtime Error
Uppstår under programmets gång (inte under kompileringen).
Uppstår när ett program försöker utföra en åtgärd som inte kan slutföras korrekt av olika anledningar.
Ex. Division med noll, index utanför gränserna, nullreferens (referera till variabel som inte har något värde).
Programmet avbryts och ett felmeddelande visas.
Logiska Fel
Fel i själva logiska uppbyggnaden av programmet.
Orsaker inte krascher eller kompileringsfel, men resulterar ändå i ett oönskat beteende eller felaktig resultat när programmet körs.
Ex. Uppstår ofta i komplicerade villkorssatser.
Debugging
Åtgärda fel i programmet.
Identifiera, isolera och korrigera fel (buggar).
Breakpoints
Markeringar som sätts ut där man vill att stegandet ska börja.
Programmet körs som vanligt fram till första breakpointen. Sedan stannar den upp (innan koden på breakpointen körs) och låter den stega fram rad för rad.
Continue (VS Debugging)
Höger pil.
Kör vidare (till nästa breakpoint eller till programslut)
Step In (VS Debugging)
Om det finns ett funktionsanrop på raden, så följ med in i funktionen.
Annars, gå vidare till nästa rad.
Step Over (VS Debugging)
Gå vidare till nästa rad.
Om det finns ett funktionsanrop på raden, utför det bakom kulisserna (hoppa inte in och visa).
Abstraktion (Abstraction)
Process att generalisera konkreta detaljer.
Fokusera på detaljer med större betydelse.
Ex. Skapa klasser av vanligt förekommande objekt, skapa funktioner för vanliga händelser
Användaren av funktionen behöver bara veta dess indata och resultatet, inte nödvändigtvis dess interna arbete
Ex. För vårt Zoo skapar vi en klass Animal med information som namn, id och ålder samt metoder för att komma åt denna information.
Sedan skapar vi subklasser av sköldpadda, lejon och pingvin som inherite från Animal. Animal klassen är således en abstraction eftersom vi aldrig kommer skapa enbart en Animal utan vi skapar ett specifikt djur.
D: Don’t
R: Repeat
Y: Yourself
Stepwise Refinement / Stegvis Förfining
Man bryter ner en komplex uppgift eller system i mindre, mer hanterbara delar (delproblem).
Sedan fokuserar man på att förbättra varje del (problem) steg för steg tills man har en fullständig lösning.
Processen börjar med en övergripande idé eller mål. Sedan delas detta upp i mindre delar eller delproblem.
Passar bäst “i det lilla”, ex. när man ska designa en funktion med sina underfunktioner
Ex. Jackson Structured Programming (JSP), göra det grafiskt
Objektorienterad Programering (OOP)
Programmeringsparadigm/Metod
Programvaran struktureras kring objekt, vilka är grundläggande enheter som innehåller data och metoder för att manipulera den data.
Procedurell Programmering
Programmeringsparadigm/Metod
Programmen struktureras kring sekvenser av instruktioner, kända som procedurer eller funktioner.
Fokus är på att bryta ned problem i mindre delar och lösa dem steg för steg genom att använda sekvenser, selektion (villkor) och iteration (loopar).
Objekt
Ett objekt representerar en entitet i systemet och innehåller data, känd som attribut eller egenskaper, samt metoder, vilka är funktioner som kan användas för att manipulera data.
Ex. Objektet “bil” har attribut som modell, färg och hastighet
Klass
En klass är en mall eller en ritning för att skapa objekt.
Den beskriver strukturen och beteendet för objekt av en viss typ.
Från en klass kan flera objekt skapas, och de delar samma struktur och beteende som definierats av klassen.
Ex.
class Car:
def __init__(self, make, model, year):
self.make = make
self.model = model
self.year = year
self.odometer_reading = 0
Vad för speciell metod behövs i Python för att skapa en instans av ett objekt?
__init__
Den kallas även för konstruktorn (i andra programmeringsspråk).
Det är en speciell metod i Python som kallas när en instans av en klass skapas
Vad för första argument måste finnas med i __init__ metoden av en klass?
self
Self behövs för att referera till den aktuella instansen av klassen.
När du definierar en metod i en klass i Python, måste den första parametern alltid vara self.
Ex.
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
“self “ är en konventionell term, men du kan använda vilket namn du vill, men det är en allmänt accepterad praxis att använda self
När en metod på en klass kallas, skickas den aktuella instansen av klassen automatiskt till metoden som det första argumentet (vanligtvis self). Detta gör att metoden kan arbeta med de attribut och metoder som tillhör den specifika instansen av klassen
Attribut
Datafälten som tillhör ett objekt.
Representerar egenskaper eller tillstånd för objekten som skapas från klassen.
Lagrar data som är associerad med varje instans av klassen.
Attributen definieras inuti klassen och kan vara av olika datatyper, till exempel strängar, heltal, listor, eller till och med andra objekt.
När du skapar en instans av en klass, får varje instans sina egna kopior av klassens attribut. Detta innebär att varje instans kan ha olika värden för sina attribut, och att ändra attributens värden för en instans inte påverkar andra instanser av samma klass
Ex. Kan en klass som representerar en bil ha attributen tillverkare, modell och år
Bil1 är Tesla, Model X, 2023
Bil2 är Volvo, XC40, 2020
Metoder
Funktioner som är definierade i en klass och som används för att manipulera objektens tillstånd eller utföra andra åtgärder relaterade till klassen.
Fungerar som vanliga funktioner, fast knutna till objektet.
Ex. Introduce är en metod i klassen Person
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
def introduce(self): print(f"My name is {self.name} and I am {self.age} years old.")
Instans (Objektinstans)
Refererar till en specifik förekomst av en klass.
När du skapar en instans av en klass, skapar du ett konkret objekt baserat på den mall eller blåsprint som klassen representerar.
Ex.
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
Skapa instans av klassen ‘Person’
person1 = Person(“Alice”, 30)
Instansvariabler
Instansvariabler är variabler som är associerade med en specifik instans av en klass.
Varje instans av en klass har sina egna kopior av instansvariabler, och ändringar som görs på dessa variabler påverkar bara den specifika instansen.
I Python definieras instansvariabler inuti klassens konstruktor (__init__) med hjälp av self-referensen. När en instans skapas, används konstruktorn för att initialisera dess instansvariabler
Fungerar som vanliga variabler, fast knutna till objektet.
Ex.
class Person:
def __init__(self, name, age):
self.name = name # Instansvariabel
self.age = age # Instansvariabel
Skapa instanser av klassen ‘Person’
person1 = Person(“Alice”, 30)
person2 = Person(“Bob”, 25)
Användning av instansvariabler
print(person1.name) # Output: Alice
print(person2.age) # Output: 25
Hur definieras instansvariabler?
I Python definieras instansvariabler inuti klassens konstruktor (__init__) med hjälp av self-referensen. När en instans skapas, används konstruktorn för att initialisera dess instansvariabler.
Ex. species
class Animal:
def __init__(self, species):
self.species = species
animal1 = Animal(“dog”)
animal1 har en egen kopia av dessa instansvariabler med ett specifikt värde som tilldelats när instansen skapades.
Parameter
En variabel eller värde som används för att överföra data till en funktion eller metod när den kallas.
Parametrar används för att göra funktioner och metoder mer generella och återanvändbara, eftersom de tillåter funktioner att utföra operationer på olika värden utan att behöva hårdkoda dem direkt inuti funktionen.
Ex. a och b i funktionen
def add_numbers(a, b):
return a + b
result = add_numbers(3, 5)
print(result)
Vad behöver alla parameterlistor (samt instansvariabler) inledas med?
Self, som refererar till objektet själv.
När man anropar funktioner i objektet så måste själva objektet skickas med i processen. Detta för att klassen ska veta vilket objekt det är som ska använda sig av funktionen som finns i “ritningen”.
Detta gäller även för funktioner som inte har andra parametrar.
Instansvariablarna börjar med self för att visa att de hör till objektet.
Ex.
class Person:
def __init__(self, name, birth)
self.name = name
self.birth = birth
def updateName(self, name):
self.name = name
Information Hiding
Ett koncept inom objektorienterad programmering som handlar om att begränsa tillgången till viss information eller implementeringsdetaljer om en klass eller ett objekt.
Målet är att isolera och skydda interna detaljer från att bli oavsiktligt eller medvetet ändrade av andra delar av programmet som använder klassen eller objektet.
Genom att tillämpa information hiding kan du kontrollera hur data och metoder används och manipuleras utanför klassens gränssnitt. Detta ökar säkerheten och stabiliteten i koden samt underlättar underhåll och utveckling.
Det finns flera sätt att uppnå information hiding.
Ex. Använd av privata medlemmar, Använda getter/setter-metoder (för att styra åtkomsten och ändringen av attribut)