Vad innebär objekt?
En designkonstruktion som specificerar :
Identititet
Tillstånd
Tjänster
Vilka två delar består objekt av?
Data och metoder.
Vad innebär klass?
En beskrivning av objekttyp, egenskaper och beteende.
Man säger att klass är vad till ett objekt?
En mall, eller ritning.
Vad kallas det när man skapar ett objekt?
Instantiering.
Vad är bra att tänka på vid namngivning av klassnamn?
Ett substantiv givet av uppdragsgivaren, eller från verkligheten som programmet modellerar. Inleds med versal, följt av gemener. Tex BankAccount
Det finns två olika typer av klasser, vilka?
Abstrakt och konkret klass.
Vad är bra att tänka på vid namngivning av metodnamn?
Inleds med en gemen, och om sammansatta ord, börjar nästa med versal. Tex accountName
När bör ett metodnamn vara ett verb?
När det förändrar objektets tillstånd. Tex bytPin()
Det finns 2 olika metoder i en klass, vilka?
Instansmetod och klassmetod.
Vad innebär instansmetod?
Att varje instans har sin egna unika uppsättning.
Vad innebär klassmetod?
Finns endast en uppsättning, som delas mellan samtliga instanser.
Vilka är de fyra grundläggande principerna i objektorienterad design?
Inkapsling
Abstraktion
Arv
Polymorfism
Vad menas med abstraktion?
Man bryter ner problemet.
Vad innebär inkapsling?
Att dölja information som är oväsentlig.
Inkapsling möjliggör abstraktion.
Vad är .NET plattformen?
Ett mjukvaruramverk som tillåter skapandet av de flesta applikationer (AI, webb, moln, spel, m.m.) på Windows-operativsystem.
Vilka 2 delar består .NET plattformen av?
En körtidsmiljö och ett standardbibliotek.
vad ansvarar körtidsmiljön för?
Att lokalisera, ladda och hantera .NET-objekt.
Vad innehåller standardbibliotek? Ge några exempel.
Trådar, fil I/O (input/output), databastillgång, m.m.
Vad är “unmanaged“ kod?
Kod som inte kan köras direkt av .NET runtime.
Vad är “managed“ kod?
Kod som kan köras i .NET runtime.
Vad är assembly?
En binärfil (.exe eller. dll) som innehåller “managed“ kod.
Vad är det .NET kod kompileras till?
Binärfiler, eller “assemblies“.
Vilka tre delar innehåller en assembly?
CIL-kod
Metadata
Manifest
Vad innebär metadata i .NET?
Det är en fullständig beskrivning av varje typ (klass, interface m.m.) som finns i binärfilen, och varje medlem (fält, metoder, events m.m.) i varje typ.
Vad är manifest i .NET?
Metadata som beskriver själva assemblyn.
Tex assemblyns namn och versionnummer, copyright information, och vilka externa assemblies denna assemblyn behöver.
Vad är CTS?
En specifiktation som beskriver hur typer (class, struct, interface, enum, delegate) måste defineras för att kunna köras i CLR.
Vilka medlemmar kan en klass i CTS innehålla?
Fält/attribut
Properties
Konstruktorer
Metoder
Events
Vilka modifierare kan CTS innehålla?
Public
Internal
Abstract
Sealed
Vad innebär interface?
Det är namngivna samlingar av abstrakta medlemmar som kan implementeras av en class eller struct.
Vilken konstruktion möjliggörs när en class eller struct implementerar ett interface?
Interface-baserad polymorfism.
Vad är enumerationer?
Namngivna samlingar av namn-värdepar.
Vad ansvarar körtidsmiljön för?
Att lokalisera en given assembly på hårddisken
Hitta den relevanta typen i assemblyn genom metadata
Lägga ut aktuell typ i minnet
Kompilera tillhörande CIL till plattformsspecifika instruktioner
Utföra säkerhetskontroller
Köra de plattformsspecifika instruktionerna
Vad är en namespace?
En grupp av semantisk relaterade typer som finns i en assembly.
Vad står UML för?
Unified Modeling Language
Vad används UML för?
Att beskriva olika aspekter av objektorienterade system. Genom att :
visualisera
specificera
konstruera
dokumentera
Varför modellerar man?
För att minska komplexitet av problem och öka förståelse av ett system.
Vad är syntax inom UML?
Hur symbolen får se ut och kombineras.
Vad är semantik inom UML?
Symbolernas betydelse.
Vilka 6 symboler finns för att förklara klassrelatioer?
Association
Arv
Realisera
Beroende
Aggregation
Komposition
Varför har man Use-Case?
För att kunna fånga kunders och användares mål och behov.
Vad är en aktör?
Någon med ett beteende (Person, datorsystem, organisation, databas m.m.)
Vilka fyra delar innefattar den övergripande utvecklingsmodellen?
Inception
Elaboration
Construction
Transition
Vad innefattar inception delen?
Vision
Affärsmodell
Omfattning
Affärsmodellering
Kravspecifikation
Resulterar i en konceptuell domänmodell.
Säkerställer att vi löser rätt problem.
Vad innefattar elaboration delen?
Samma steg som i inceptions delen:
Vision
Affärsmodell
Omfattning
Affärsmodellering
Kravspecifikation
Men resulterar i en Designmodell.
För att säkerställa att vi utvecklar lösningen på rätt sätt.
Vad innefattar construction delen?
Man fokusera på implementationen av designmodellen. Översätta lösningen till kod (tex C#). För att realisera en bra lösning på problemet.
Vad innefattar transition delen?
Överlämning av mjukvaran till de nya ägarna.
Vad är viktigt i analys av en problembeskrivning?
Vilka begrepp beskriver problemet?
Vilken information används (attribut, fält eller parametrar)?
Vilken relation/samband finns mellan dessa?
När anses ett mjukvarusystem vara komplext?
Domänen är svår att begripa
Utvecklingsprocessen är svår att hantera
Mjukvaruprogram möjliggör flexibilitet i stor utsträckning
Beteendet utgörs av interaktion mellan diskreta system
Vilka egenskaper har komplexa system?
En hierarkisk struktur (rankade komponenter)
Primitiva komponenter (tolkning av abstrakt-valbara)
Intra- och inter- komponenter (lätt uppdelning med tydliga gränser)
Gemensamma mönster (tydliga mönster)
Stabilt mellanliggande former (komponenter som är starkt kopplade)
Vilka 4 steg följer man i nedbrytningen av en process?
Textanalys (Hitta substantiv och attribut)
Identifiera roller
Hitta relevanta abstraktion
Rangordna abstraktioner i hierarki
Vad är objektorienterad design?
Ett tankesätt för att designa objektorienterade system
Vad resulterar en objektorienterad analys (OOA) i?
En domänmodell, dvs klasser med associationer och kardinaliteter
Vad ligger i fokus i objektorienterad design (OOD)?
Klasser och objekt på substantiv från problemdomänen. Riktas mer inpå hur lösningen ska se ut.
Vad innebär objektorienterad programmering (OOP)?
Programkod som består av klasser och objekt, där varje objekt är en instans av en klass (eller en mall)
Vad innebär abstraktion?
Man väljer ut och fokuserar på systemets relevanta komponenter.
Vad innebär inkapsling?
Principen att objekts inre uppbyggnad ska vara ointressant för den som använder objektet i programmering. Allt en programmerare behöver veta är vad objektet kan göra och hur man instruerar objektet att göra.
Vad innebär modularitet?
Det att något är uppdelat i delar (moduler, komponenter), så att det kan tas i sär och sättas ihop på olika sätt.
Vad innebär hierarki?
Mm strukturering av information: med underavdelningar i flera led (i en hierarki). Exempel: katalogerna (mapparna) i ett filsystem, domänerna i internets adressystem DNS.
Vad används undantagshantering till?
Om ett fel inträffar i ett program under körtid, kommer programmet att avslutas på ett okontrollerat sätt.
Felet kan hanteras med ett undantag(Exception) och undantagshantering (Exception Handling)
Genom att tillämpa undantagshantering, kan man hantera fel som uppstår under körtid så att programmet kan fortsätta sin exekvering eller avslutas på ett kontrollerat sätt.
Vilka fördelar finns med Undantagshantering?
Den tillåter en metod att kasta ett undantag till dess anropande metod, varpå den anropande metoden kan hantera undantaget.
Utan denna konstruktion, måste en metod antingen hantera felet eller avsluta programmet.
Vad gör undantag inom undantagstyper och undantagshierarkin?
Undantag representerar fel som orsakas av ett program samt av externa omständigheter som kan “fångas“ och hanteras av programmet.
Vad innebär att “Kasta undantag“?
När en metod upptäcker ett fel, kan metoden skapa en instans av ett lämpligt undantag och kasta den.
En metod kastar ett undantag genom att ange det reserverade ordet “throw“ efterföljt av undantagsinstansen.
Hur fångar man undantag (catching exceptions)?
Undantag fångas genom att använda try…catch block
Koden som ska kasta undantag, innesluts i ett try block
Varje undantagstyp som skall fångas, anges i ett eget catch block
Vilken information finns i undantag?
Message
Innehåller meddelandet som beskriver undantaget.
StackTrace
Innehåller information om anropsstacken.
ToString()
Returnerar
Vad för funktioner kan undantag göra?
Kasta
Fånga
Kasta vidare
Länka
Vad används ett finally klausal?
Används ihop med try eller try…catch för att skapa ett try…finally block eller ett try…catch…finally block
Ett finally block exekveras alltid, oberoende av om undantag kastas eller inte.
Nämn en fördel och en nackdel med undantag…
Fördel:
Undantagshantering separerar felhanteringen från det normala programflödet, vilket gör det lättare att läsa samt underhålla kod.
Nackdel:
Undantagshantering kräver längre exekveringstid samt fler resurser
När ska man kasta undantag?
När ett systemfel inträffar
När ett fel inträffar som metoden vet om
Om felet kan hanteras i metoden, kasta INTE ett undantag.
När ska man använda undantag?
Använd undantagshantering i koden för att hantera oförutsedda feltillstånd.
Undvik undantagshantering i koden för att hantera förutsedda feltillstånd.
Ex
Använd hellre if… else än try…catch som i bilden.
Namespace System.IO innehåller typer för att?
Manipulera: diskenheter, foldrar och filer
Läsa & skriva till/från
Filer
Minne
Strängar
Vad måste inkluderas för att kunna använda typerna från namespace System.IO?
System.IO måste inkluderas längst upp i källkodsfilen med nyckelordet “using“.
Ex. kolla bild.
System.IO innehåller fyra klasser, vilka och varför?
Directory
File
DirectoryInfo
FileInfo
Dessa för att manipulera filer samt integrera med datorns filsystem.
Directory och File, ärvs av? och innebär vad?
Ärver från Objekt
Är statiska klasser
Innehåller statiska medlemmar för att skapa, ta bort, kopiera och flytta foldrar/filer.
DirectoryInfo & FileInfo, ärvs av? och innebär?
Ärver från FileSystemInfo
Har liknande funktionalitet som Directory och File men via instansmedlemmar.
Returnerar strängar
Vad för egenskap har DirectoryInfo?
När man har skapat en DirectoryInfo instans, kan man använda de ärvda medlemmerna från FileSystemInfo för att undersöka folderns innehåll.
DriveInfo innehåller vad ?
DriveInfo klassen innehåller en statisk metod DriveInfo.GetDrives() som också listar datorns enheter, men returnerar DriveInfo objekt med detaljerad information.
Vad används DriveInfo till?
Används för att erhålla information om diskenheter.
Vad för skillnader finns mellan textfiler och binärfiler?
Data som lagras som textfiler kan läsas av en människa via en texteditor.
C# kod lagras i textfiler.
Data som lagras som binärfiler kan inte läsas av en människa via en texteditor.
Binärfiler är designade att läsas av ett program, och processas därför mycket effektivare än textfiler.
C# kompilerad kod kan lagras som bytekod i binärfiler (.dll, .exe)
Vad gör en filpekare?
Är en speciell pekare, kallad filpekaren, pekar alltid på en viss byte i filen.
En läs-/skrivoperation utförs alltid för den byte som filpekaren pekar på.
När en fil öppnas, pekar filpekaren på första byten i filen.
När en läs-/skrivoperation utförs, flyttas filpekaren automatiskt fram i filen.
Vad är serialisering?
Den beskriver processen att konventera ett objekt till en sekvens av bytes som kan skickas till en ström.
All nödvändig information för att återskapa ett objekt serialiseras.
Serialisering leder oftast till mindre kod.
För att en klass ska vara vara seraliserbar måste klassen märkas med attributet [Seralizable] (kolla bilden)
Vad gör deseralisering?
Beskriver processen att återskapa ett objekt från en sekvens av bytes som kan tas emot från en ström.
Vad är en Delegate?
I.NET är en delegate en klass som representerar en funktionspekare, och innehåller:
Adressen av metoden som den anropar
Metodens parametrar
Metodens returtyp
Delegates kan peka på både statiska och instansmetoder
Delagates kan även peka på flera metoder samtidigt, så länge de har samma signatur.
Hur derfinerar man en Delegate?
Defineras med nyckelordet delegate efterföljt av en metodsignatur.
Hur använder man Delegates för bitufuerubgar från ett objekt?
Delegates tillämpas normalt så att ett objekt kan notifiera andra objekt om dess tillståndsförändringar:
Definiera en delegate typ i klassen som används för att notifiera andra objekt.
Skapa ett attribut med delegate typen som datatyp i klassen.
Skapa en metod i klassen som andra objekt kan använda för att registrera sig (dvs de registrerar en metod som delegaten kan anropa vid tillståndsförändringar).
Anropa delegaten i klassen när tillståndsförändringar sker för att notifiera \n registrerade objekt.
Vilka två generiska delegate typerna finns?
Action<>
Func<>
Varför använder man de två generiska delegate typerna?
För att slippa skriva egen definierade delegates.
Vad innebär nyckelordet Event?
Kan användas för att göra processen mycket simplare och säkrare.
Vad representerar klassen EventArgs?
Ett händelseargument utan någon extra information.
Man kan skapa egendefinerade händelseargument genom att ärva från EventArgs.
Hur gör man en “anonym metod“ i C#?
Skapas genom att ersätta metodnamnet med nyckelordet delegate.
Vad är lambdauttryck?
Ännu ett sätt att skriva anonyma metoder på, och på ett ännu simplare sätt att jobba med delegates.
Vad gäller för anonyma typer?
Programmeraren vet inte namnet på den anonyma typen
Ärver alltid direkt från System.Object
Alla attribut och properties är endast läsbara
Har inga egendefinierade metoder, events, osv.
Går ej att ärva från
Skapas alltid med defaultkonstruktorn
Vad är designmönster?
Mikroarkitekturer som ofta förekommer i väl designade applikationer.
Ett sätt att återanvända tidigare lösningar på vanligt förekommande problem.
En namngiven beskrivning av ett problem och en lösning som kan tillämpas i olika situationer.
Ett gemensamt språk för vanligt förekommande problem-lösning par.
Myntades av arkitekten Christopher Alexander.
Vad består designmönster huvudsakligen av?
Ett namn
Ett problem
En lösning
En konsekvens
Designmönster bygger på något eller några koncept, vilka finns?
Interface
Abstrakta klasser
Arv
Delegering
“GoF” designmönster står för?
“The gang of four“
GoF har 23 designmönster enligt boken, vilka tre kategorier indelas dem i?
Skapelsemönster (Creational Patterns)
Strukturella mönster (Structural Patterns)
Beteendemönster (Behavioral Patterns)
Vad gör skapelsemönster?
Beskriver olika sätt att styra skapandet av objekt.
Abstract Factory \n Förser klienten med en familj av relaterade eller beroende objekt (runtime).
Builder \n Skapar komplexa objekt, uppbyggda av delobjekt som skapas enligt någon algoritm.
Factory Method \n Abstraherar skapelseprocessen av objekt genom att ersätta konstruktorer (runtime).
Prototype \n Instansierar ett nytt objekt genom att klona ett befintligt objekt.
Singleton \n Ser till så att endast 1 instans av en klass skapas.
Vad gör Strukturella mönster?
Beskriver hur klasser och objekt kan kombineras för att bilda större strukturer.
Adapter
Används för att göra en annars inkompatibel klass kompatibel med klienten genom att innesluta den inkompatibla klassen i en kompatibel klass (dvs som implementerar ett interface som klienten kräver).
Bridge
Används för att separera de abstrakta elementen i en klass från implementationen, så att implementationen kan ändras utan att behöva ändra på abstraktionen.
Composite
Används för att skapa hierarkiska, rekursiva strukturer av relaterade objekt, där ett godtyckligt \n element i strukturen kan accessas och användas på vanligt sätt.
Decorator
Används för att utöka eller ändra objekts funktionalitet under körtid genom att innesluta dem i en Decorator klass (alternativ till att använda arv).
Façade
Används för att definiera ett enklare interface till ett mera komplext delsystem.
Flyweight
Används för att minska resursanvändning för komplexa modeller som innehåller många liknande objekt.
Proxy
Används för att skapa en surrogat-objekt, som refererar till ett underliggade objekt, och som implementerar samma interface som det underliggande objektet. Surrogat-objektet vidarebefordrar anrop från klienten till det underliggade objektet vid behov.
Vad gör Beteendemönster?
Beskriver olika sätt för klasser och objekt att kommunicera med varandra.
Chain of Responsibility \n Används för att processera data i en pipeline där flera hanterare kan processera datan
Command \n Kapslar in ett kommando, med argument, där kommandot kan exekveras eller sparas.
Interpreter \n Används för att definiera en grammatik för instruktioner som tillhör ett språk.
Iterator \n Används för att skapa ett standardinterface för att traversera en samling objekt.
Mediator \n Används för att minska beroendet mellan klasser som kommunicerar med varandra \n (meddelanden mellan klasserna skickas via ett Mediator objekt).
Memento \n Används för att lagra tillståndet för ett objekt, så att det kan återskapas senare.
Observer \n Används för att tillåta ett objekt att notifiera andra objekt om interna förändringar.
State \n Används för att förändra beteendet av ett objekt då dess inre tillstånd förändras.
Strategy \n Används för att skapa en familj av algoritmer som kan väljas under körtid.
Template \n Används för att definiera stegen i en algoritm, där implementationen kan ändras.
Visitor \n Används för att separera en komplex mängd strukturerad data från funktionaliteten som kan \n utföras på datan som de innesluter.