20TD02U_ForAlle_Blooms_Side1_BlandetDrops - itnett/FTD02H-N GitHub Wiki

+++markdown

🎓 Helhetlig Forståelse av Programmeringskonsepter og Læringsutbytte på Masternivå

Denne redegjørelsen tar sikte på å gi en grundig og helhetlig forståelse av sentrale programmeringskonsepter, samt demonstrere hvordan disse kan anvendes, analyseres, evalueres og videreutvikles i tråd med Blooms taksonomi. Ved å kombinere teoretisk innsikt med praktiske eksempler og refleksjoner, vil vi vise et læringsutbytte på masternivå innenfor de definerte områdene.

📜 1. Programstrukturer: Grunnmuren i All Kode

Programstrukturer er de grunnleggende byggesteinene i all kode. De definerer hvordan instruksjoner utføres og hvordan programmet flyter fra én handling til den neste. På et masternivå forventes det at man ikke bare kan huske og forstå disse strukturene, men også anvende, analysere, evaluere og skape med dem.

🔄 Sekvens:

Den enkleste strukturen, hvor instruksjoner utføres i rekkefølge.

🔄 Valg (Seleksjon):

Brukes til å ta beslutninger i koden, typisk med if, else if, og else-setninger. Dette gir programmet muligheten til å utføre ulike handlinger basert på gitte betingelser.

🔄 Gjentakelse (Iterasjon):

Gjentar en blokk med kode flere ganger, enten et bestemt antall ganger (for-løkker) eller så lenge en betingelse er oppfylt (while-løkker).

🎨 Illustrasjon - Valg (Seleksjon):

alder = 25

if alder < 18:
    print("Du er mindreårig.")
elif alder >= 18 and alder < 67:
    print("Du er voksen.")
else:
    print("Du er pensjonist.")

🗂 2. Datastrukturer: Organisering av Informasjon

Datastrukturer er måten vi organiserer og lagrer data på i et program. På masternivå forventes det en dyp forståelse av ulike datastrukturer, deres egenskaper og hvordan de kan brukes effektivt i ulike situasjoner.

📚 Arrayer/Lister:

En ordnet samling av elementer, hvor hvert element kan nås via en indeks.

📚 Lenkede lister:

En sekvens av noder, hvor hver node inneholder data og en peker til neste node.

📚 Stakker og køer:

Spesialiserte datastrukturer som følger LIFO (Last In, First Out) og FIFO (First In, First Out) prinsipper.

📚 Trær og grafer:

Hierarkiske og nettverksbaserte datastrukturer som brukes til å representere relasjoner mellom data.

📚 Hashtabeller:

Bruker hash-funksjoner for å lagre og hente data raskt basert på en nøkkel.

🎨 Illustrasjon - Lenket Liste:

class Node:
    def __init__(self, data):
        self.data = data
        self.next = None

class LinkedList:
    def __init__(self):
        self.head = None

    def append(self, data):
        new_node = Node(data)   
        if self.head is None:
            self.head = new_node
            return
        last_node = self.head
        while last_node.next:
            last_node = last_node.next
        last_node.next = new_node

📦 3. Bibliotek: Gjenbruk av Kode

Biblioteker er samlinger av ferdiglaget kode som kan gjenbrukes i egne programmer. Dette sparer tid og krefter, og lar utviklere fokusere på kjernelogikken i applikasjonen.

🎨 Illustrasjon - Bruk av requests-Biblioteket:

import requests

response = requests.get('https://www.example.com')
if response.status_code == 200:
    print(response.text) 
else:
    print("Feil ved henting av nettsiden")

🔧 4. Funksjoner og Metoder: Modularisering og Gjenbruk

Funksjoner og metoder er essensielle verktøy for å organisere kode, gjøre den mer lesbar og gjenbrukbar.

🎨 Illustrasjon - Funksjon med Parametere og Returverdi:

def beregn_gjennomsnitt(tall_liste):
    """Beregner gjennomsnittet av en liste med tall."""
    if not tall_liste:  # Sjekk for tom liste
        return None
    return sum(tall_liste) / len(tall_liste)

mine_tall = [1, 5, 3, 8, 2]
gjennomsnitt = beregn_gjennomsnitt(mine_tall)
if gjennomsnitt:
    print

🏗 5. Objektorientert Programmering (OOP): Modellering av den Virkelige Verden

OOP er et kraftig paradigme som lar oss modellere programmer som samlinger av objekter som samhandler med hverandre.

🎨 Illustrasjon - Arv og Polymorfisme:

class Dyr:
    def __init__(self, navn):
        self.navn = navn

    def lag_lyd(self):
        print("Et generisk dyrelyd")

class Hund(Dyr):
    def lag_lyd(self):
        print("Voff!")

class Katt(Dyr):
    def lag_lyd(self):
        print("Mjau!")

dyr = [Hund("Fido"), Katt("Pusi"), Dyr("Ukjent dyr")]
for dyr in dyr:
    dyr.lag_lyd() 

🐞 6. Debugging, Testing og Unntaksbehandling: Sikre Robust Kode

Debugging, testing og unntakshåndtering er kritiske ferdigheter for å sikre at kode fungerer som forventet og er robust mot feil.

🎨 Illustrasjon - Unntakshåndtering:

def del_tall(a, b):
    try:
        resultat = a / b
    except ZeroDivisionError:
        print("Feil: Kan ikke dele på null!")
    else:
        print("Resultatet er:", resultat)
    finally:
        print("Uansett hva som skjer, vil denne linjen alltid kjøres.")

🔌 7. API-er: Kommunikasjon mellom Systemer

API-er (Application Programming Interfaces) er grensesnitt som lar ulike programmer kommunisere med hverandre.

🎨 Illustrasjon - Bruk av en REST API:

import requests

response = requests.get('https://api.example.com/users')
if response.status_code == 200:
    users = response.json()   
    for user in users:
        print(user['name'])
else:
    print("Feil ved henting av brukerdata")

🖥 8. GUI: Brukervennlige Grensesnitt

GUI-er (Graphical User Interfaces) er visuelle grensesnitt som lar brukere interagere med et program ved hjelp av grafiske elementer som knapper, menyer og vinduer.

🎨 Illustrasjon - Enkelt GUI med Tkinter:

import tkinter as tk

def hilsen():
    navn = navn_input.get()
    hilsen_label.config(text="Hei, " + navn + "!")

vindu = tk.Tk()
vindu.title("Enkel hilsen")

navn_label = tk.Label(vindu, text="Navn:")
navn_label.pack()

navn_input = tk.Entry(vindu)
navn_input.pack()

hilsen_knapp = tk.Button(vindu, text="Hils", command=hilsen)
hilsen_knapp.pack()

hilsen_label = tk.Label(vindu, text="")
hilsen_label.pack()

vindu.mainloop()

📝 9. UML: Modellering og Design

UML (Unified Modeling Language) er et visuelt språk for å modellere og designe programvare.

🎨 Illustrasjon - Klassediagram:

+-----------------+      +-----------------+
|     Person      |      |      Student     |
+-----------------+      +-----------------+
| - navn: String  |      | - studentnummer: int|
| - alder: int    |      +-----------------+
+-----------------+
| + snakk()       |
+-----------------+

📂 10. Filbehandling: Lagring og Henting av Data

Filbehandling er en viktig del av mange applikasjoner, da det lar oss lagre og hente data permanent.

🎨 Illustrasjon - Lese fra en Tekstfil:

def les_fil(filnavn):
    try:
        with open(filnavn, 'r') as fil:
            innhold = fil.read()
            return innhold
    except FileNotFoundError:
        print(f"Feil: Filen '{filnavn}' ble ikke funnet.")
        return None

filinnhold = les_fil("min_fil.txt")
if filinnhold:
    print(filinnhold)

🔒 11. Datasikkerhet: Beskyttelse av Informasjon

Datas

ikkerhet er avgjørende for å beskytte sensitive data mot uautorisert tilgang, endring eller ødeleggelse.

🎨 Illustrasjon - Sikker Lagring av Passord:

import hashlib

def hash_passord(passord):
    salt = b'mitt_salt'  # Bruk et unikt og hemmelig salt
    return hashlib.pbkdf2_hmac('sha256', passord.encode(), salt, 100000)

hashed_passord = hash_passord("mitt_passord")
print(hashed_passord)

📡 12. Kommunikasjon mellom Programgrensesnitt: Integrasjon og Datautveksling

I dagens sammenkoblede verden er det sjelden at applikasjoner opererer i isolasjon. De trenger å kommunisere med hverandre, utveksle data og utnytte tjenester fra eksterne systemer. Dette gjøres gjennom API-er (Application Programming Interfaces).

🎨 Illustrasjon - REST API-kall med Python Requests:

import requests

response = requests.post('https://api.example.com/orders', json={'produkt_id': 123, 'antall': 2})

if response.status_code == 201:  # Created
    order_id = response.json()['id']
    print("Ordre opprettet med ID:", order_id)
else:
    print("Feil ved opprettelse av ordre:", response.text)

🏆 Læringsutbytte

🎓 Kunnskap:

Kandidaten demonstrerer en dyp og helhetlig forståelse av grunnleggende programmeringskonsepter og verktøy.

🔧 Ferdigheter:

Kandidaten kan ikke bare skrive kode, men også lese, tolke, vedlikeholde og forbedre eksisterende kode.

🌍 Generell Kompetanse:

Kandidaten demonstrerer en evne til å kontinuerlig lære og utvikle seg innen programmering.

🎯 Konklusjon

Gjennom denne redegjørelsen har vi demonstrert en helhetlig forståelse av programmeringskonsepter og læringsutbytte på masternivå. Vi har vist hvordan man kan anvende, analysere, evaluere og skape innenfor ulike områder av programmering, og hvordan disse ferdighetene bidrar til å utvikle kompetente og ansvarlige programvareutviklere. +++