ITHS Tenta 2 Flashcards

1
Q

Beskriv i vilka fall man skall använda följande typer av klasser:

klasser
basklass & subklasser
Abstrakta basklasser
Interface
Generiska klasser
A

Använd klasser för att beskriva “substantiv”, gruppera egenskaper som hör ihop.
Om klasserna har något gemensamt, skapa en hierarki med basklass och subklasser. Använd abstrakta basklasser om man inte ska kunna skapa objekt av en basklass.
Använd interface om klasser har något gemensamt, men inte kan ingå i samma hierarki.
Använd generiska klasser om man ska kunna skapa “skräddarsydda” versioner av en klass.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q

Besrkiv vad genrics är

A

Generirka klasser introducerar konceptet av “typ parametrar”, vilket gör det möjligt att designa klasser och metoder som avvaktar specifikationen av en eller flera “typer” tills klassen eller metoden är instansierad eller deklrarerad av client kod.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q

Varför är Generics användbart?

A

Generiska metoder och klasser kombinerar återanvändbarhet, type safety och effektivitet som ikke generiska klasser och metoder inte har möjlighet till.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q

Vad kan man applicera generics på?

A

Generics can be applied to interface, abstrct class, method, static method, property, event, delegate and operator.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q

Vad används listor till?

A

Vi använder listor på samma sätt som arrayer, fast vi behöver inte bestämma storleken på dem. Listor har många metoder för att manipulera innehållet eller välja ut det vi vill ha.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q

Vad är IEnumerable och hur använder sig Listor utav det?

A
Listor implementerar interfacet IEnumerable (sv. uppräkningsbar) vilket innebär att man kan använda dem med foreach.
List list = new List();
list.Add(new Gorilla());
for( int i=0; i
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
7
Q

Vad är Dictionary och vad kan man använda det till?

A
Dictionary är en generisk lista som vi kan använda för att slå upp elementen, i stället för att indexera.
Dictionary population = 
		new Dictionary();
population.Add("Grodd", new Gorilla());
population.Add("Gustav", new Gorilla());
Gorilla gustav = population["Gustav"];
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
8
Q

Genom att använda sig av Queue kan man skapa en kö av objekt.

exempel: 
        Queue numbers = new Queue();

Vad är Enqueue och Dequeue och hur skulle man använda sig av dem i samband med kö variablen ovan ?

A

Enqueue lägger till ett element sist i kön
Dequeue plockar ut det äldsta

    numbers.Enqueue("one");

    Console.WriteLine("Peek at next item to dequeue: {0}",
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
9
Q

Genom att initiera en stack skapar man en kö där man kan lägga/plocka ut till ett objekt (Last in/out).

Exempel:

    Stack numbers = new Stack();

Vad är Push och pop, samt hur kan man använda dem i samband med koden ovan?

A

Push lägger till ett element
överst på kön.
Pop plockar ut det översta

    numbers.Push("one");
    Console.WriteLine("Popping '{0}'", numbers.Pop());
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
10
Q

Nämn och beskriv 6 typer av Listor/Mängder/Samlingar

A
Array - indexera element, fast storlek
List - indexera element, variabel storlek
Dictionary - slå upp element effektivt
Stack - last-in, first-out
Queue - first-in, first-out
Hashtable (sv. hacka)
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
11
Q

Vad står LINQ för?

A

LINQ = Language INtegrated Query

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
12
Q

Vad kan Linq användas på för objekt?

A

Kan användas på allt som implementerar IEnumerable

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
13
Q

Vad använder vi LINQ till?

A

Används för att skapa nya collections genom att filtrera, ändra och sortera listor

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
14
Q

Vad menas med Lazy evaluation i samband med LINQ och hur använder man det?

A

Använder lazy evalutation - resultatet räknas inte ut förrän man loopar igenom resultatet med foreach (använd metoden ToList för att tvinga uträkning)

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
15
Q

Vad används LINQ ofta tillsammans med?

A

Varning! LINQ används ofta med delegates och extension methods. Vi tar upp dem senare i kursen.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
16
Q

Vilka 2 obligatoriska ord måste man använda sig av om man använder LINQ?

A

LINQ använder en speciell syntax med två obligatoriska ord: from och select. Vi kan lägga till where för att filtrera listan.

List nums = new List(new int[] { 5, 4, 3, 2, 1 });
var query = from variabelnamn in nums
            where villkor
            select resultat;
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
17
Q
List nums = new List(new int[] { 5, 4, 3, 2, 1 });
var query = from variabelnamn in nums
            where villkor
            select resultat;

Vad har query för datayp?

A

// Query har datatypen IEnumerable

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
18
Q

from n in ns

Med LINQ vad motsvarar uttrycket ovan?

A

FROM används för att skapa en loopvariabel och välja vilken collection vi ska plocka element från.

List nums = new List(new int[] { 5, 4, 3, 2, 1 });
var query = from n in nums
            where n >= 4
            select n;
// motsvaras av följande for-loop
List newList = new List();
foreach( int n in nums )
	if( n >= 4 )
		newList.Add(n);
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
19
Q

where n >= 4

med LINQ vad motsvarar utrrycket ovan?

A

WHERE fungerar som en if-sats, som väljer vilka element i listan som vi ska använda för att skapa den nya lista. Det kallas att filtrera listan.

List nums = new List(new int[] { 5, 4, 3, 2, 1 });
var query = from n in nums
            where n >= 4
            select n;
// motsvaras av följande for-loop
List newList = new List();
foreach( int n in nums )
	if( n >= 4 )
		newList.Add(n);
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
20
Q

select n

med LINQ vad motsvarar uttrycket ovan?

A

SELECT väljer ut det som ska läggas i den nya listan, motsvarar returvärde.

List nums = new List(new int[] { 5, 4, 3, 2, 1 });
var query = from n in nums
            where n >= 4
            select n;
// motsvaras av följande for-loop
List newList = new List();
foreach( int n in nums )
	if( n >= 4 )
		newList.Add(n);
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
21
Q
var query = from n in nums
            where n % 2 == 1
            select n;

Vilket svar får vi från queryn ovan?

A
// Alla udda tal i listan
var query = from n in nums
            where n % 2 == 1
            select n;
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
22
Q
var query = from n in nums
            where n >= 2 &amp;&amp; n <= 4
            select n;

Vilket svar får vi från queryn ovan?

A
// Alla tal mellan 2 och 4
var query = from n in nums
            where n >= 2 &amp;&amp; n <= 4
            select n;
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
23
Q

med LINQ och om man använder sig av select kan man förändra variabeln man väljer ut?

A
// Man måste inte välja ut variabeln oförändrad
// Alla tal i listan, multiplicerade med 10
var query = from n in nums
            select n * 10;
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
24
Q

I LINQ vad används orderby till ?

A

Man kan lägga till orderby för att sortera en lista.
var query = from variabelnamn in nums
where villkor
orderby sorteringsnyckel [ascending/descending]
select resultat;

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
25
Q

Hur använder vi ascending och decending i ett LINQ uttryck?

A

Använd ascending (stigande) eller descending (fallande) för att bestämma sorteringsordning.

var query = from variabelnamn in nums
where villkor
orderby sorteringsnyckel [ascending/descending]
select resultat;

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
26
Q
var query = from n in nums        
            orderby n
            select n;

Hur sorteras uttrycket ovan ?

A

// Sortera i nummerordning

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
27
Q
var query = from n in nums        
            orderby -n ascending  
            select n

Hur sorteras uttrycket ovan ?

A
// Sortera i omvänd ordning
// ascending har ingen effekt
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
28
Q
var query = from n in nums        
            orderby "" + n descending
            select n;

Hur sorteras uttrycket ovan ?

A

// Sortera som strängar fallande

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
29
Q

Vad används gruppering till i LINQ?

A

Gruppering är ett sätt att klumpa ihop liknande
värden, för att behandla dem samtidigt. Några
exempel är summa, medelvärde, min och max.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
30
Q

Vad behöver man för att gruppera med LINQ?

A

För att gruppera med LINQ behöver man ange en grupperingsnyckel. Ofta är den en egenskap i objekten man har i listan.
var query = from variabelnamn in nums
group variabelnamn by grupperingsnyckel into gruppnamn
where villkor
orderby sorteringsnyckel
select resultat;

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
31
Q

Om du har en lista med som ser ut som följer:

Username Articled Vote
Anna 1 1
Nisse 1 1
Anna 1 1
Nisse 1 1

Sen kör du LINQ uttrycket nedan, hur kommer kommer svaret på queryn se ut?

from user in userList
group user by user.Username into usernameGroup

A

Anna 2 2
Nisse 2 2

Alla rader med samma värde på Username “klumpas ihop”.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
32
Q

Vad får du ut av queryn nedan?

A
var doubles = from n in numberList
              group n by n into nGroup
              where nGroup.Count() > 1
              select nGroup.First();
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
33
Q

IEnumerable interfacet har många metoder som kan användas med Linq Queries. Beskriv vad metoderna nedan gör.

Average - 
Count - 
Distinct -
First, Last -
Max, Min - 
Reverse - 
Single -
Skip(x) -
Sum - 
Take(x) - 
ToArray, ToList, ToDictionary - 
FirstOrDefault, LastOrDefault, SingleOrDefault -
A
Average - medelvärdet
Count - antalet element
Distinct - tar bort dubbletter
First, Last - returnerar första respektive sista elementet, körfel om det inte finns några element
Max, Min - största eller minsta värdet
Reverse - vänder på elementens ordning

Single - returnerar ett element om det finns exakt ett, körfel annars
Skip(x) - hoppar över de första x elementen
Sum - returnerar summan av alla element
Take(x) - plockar de första x elementen
ToArray, ToList, ToDictionary - gör om en collection till en annan datastruktur
FirstOrDefault, LastOrDefault, SingleOrDefault - fungerar som First/Last/Single men returnerar defaultvärdet (null eller 0) om det inte finns några element i stället för körfel

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
34
Q

Vad får du ut av nedstående LINQ Utryck?

var query = from book in library
            where book.Genre == "biography"
            select book;
A
// Välj ut alla böcker som tillhör genren biografier
var query = from book in library
            where book.Genre == "biography"
            select book;
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
35
Q

Hur plockar du ut den 5 boken ur queryn nedan?

var query = from book in library
            where book.Genre == "biography"
            select book;
A
// Välj ut alla böcker som tillhör genren biografier
var query = from book in library
            where book.Genre == "biography"
            select book;
// Plocka bok nr 5
var skip4 = query.Skip(4);   // alla utom de 4 första elementen
var take1 = skip4.Take(1);   // en collection med ett element
Book book = take1.Single();  // plocka det första elementet
var book5 = query.Skip(4).Take(1).Single();  // allt på en rad!
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
36
Q

med select kan man skapa anonyma objekt, vad innebär det?

A
När vi använder select för att bestämma vad som ska returneras, så kan vi skapa anonyma objekt. De kallas anonyma eftersom de inte har någon klass.
// Skapar collection med anonyma objekt
var query = from n in nums
            select new { Number = n, HalfNumber = n * 0.5 };
// Klass som motsvarar det anonyma objektet
class MyObject {
	public int Number { get; set; }
	public double HalfNumber { get; set; }
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
37
Q

vad kan man göra med LINQ uttrycket join?

Skriv gärna ett uttryck, och testa.

A

Man kan kombinera två collections med join. Här är exempel på INNER JOIN.
var innerJoin = from v1 in collection1
join v2 in collection2 on
v1.Property equals v2.Property
select new { Property = v1.Property,
Value1 = v1.Value, Value2 = v2.Value };
foreach( var x in query )
Console.WriteLine(“Found object with property=” + x.Property
+ “ and values “ + x.Value1 + “, “ + x.Value2);

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
38
Q

i LINQ finns något som heter group join, vad är det och hur används det?

skriv gärna ett uttryck och testa.

A

En GROUP JOIN är ett sätt att associera element. Exempel
var groupJoin = from c in categories
join p in products on
c.Name equals p.CategoryName into prodGroup
select new { CategoryName = c.Name,
Products = prodGroup };
Uttrycket resulterar i en collection av anonyma objekt, som har egenskaperna CategoryName och Products. Egenskapen Products kommer att vara en collection med Product-objekt.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
39
Q

Vad används indexOf-metoden till och vilka begränsningar har den?

A
Ibland vill vi kontrollera om en sträng innehåller en annan sträng. Exempel:
int index = "hejsan hoppsan".IndexOf("hopp");
// index == 7

IndexOf-metoden returnerar -1 om söksträngen inte återfinns i den större strängen.

IndexOf-metoden kan bara söka en gång och den hittar bara exakta sökträffar.

40
Q

Vad skiljer ett reguljärt uttryck från indexOf-metoden?

A

IndexOf-metoden kan bara söka en gång och den hittar bara exakta sökträffar.
“Kontakta mig på pontus@email.com eller pontus2@another.se”
Reguljära uttryck svarar på frågor som “hur många e-postadresser finns det i texten”. C# stöder regular expressions genom namespace System.Text.RegularExpressions

41
Q

i följande reguljära uttrck vad får du fram?

string pattern = “eller”;
string input = “Kontakta mig på david@email.com eller ..”;
Match match = Regex.Match(input, pattern);
Console.WriteLine(“Match success? “ + match.Success);

A

string pattern = “eller”;
string input = “Kontakta mig på david@email.com eller ..”;
Match match = Regex.Match(input, pattern);
Console.WriteLine(“Match success? “ + match.Success); // True
Punkt kan användas som wildcard. En punkt matchar vilket tecken som helst.

42
Q

vad får du ut av följande reguljärt uttryck?

Regex.Match(“Kontakta”, “t.k”);

A

Punkt kan användas som wildcard. En punkt matchar vilket tecken som helst.
Regex.Match(“Kontakta”, “t.k”) → true, punkten matchar ‘a’

43
Q

Med regex kan du använda dig av [] och [^] vad används de till?

A

Vi kan matcha grupper av tecken genom att lista alla tillåtna tecken med [] och otillåtna tecken med [^]. Grupper av intilliggande tecken kan också matchas.
Regex.Match(“match eller ej”, “[ae]”) → true
Regex.Match(“eller ellor ellOr”, “ell[eou]r”)
Regex.Match(“match 1 2 3 ?”, “[0-9]”) → true
Regex.Match(“eller ellor ellOr”, “ell[^e]r”) → true

44
Q

Inom ett regex uttryck vad betyder följande symboler:

?
{n}
*
+

A

? 0 eller 1 tecken
{n} Exakt n tecken
* 0 eller flera
+ 1 eller flera

45
Q

Vad får du ut av följande regex uttryck?

Regex.Match(“eller ellor ellOr”, “el?”) → true
Regex.Match(“ellre ellor ellOr”, “el*”) → true
Regex.Match(“ellre ellor ellOr”, “el+”) → true

A

samtliga är true

46
Q

Punkt matchar alla tecken, men det finns character classes för vanliga grupper av tecken. Vad gör character classes nedan?

\s
\S 
\w
\W 
\d
 \D inte decimaltal
^	
$
A

\s whitespace, \S inte whitespace
\w ord, bokstäver som är omgivna av whitespace; \W inte ord
\d decimaltal, \D inte decimaltal
^ början av strängen eller början av en rad
$ slutet av strängen eller slutet av en rad

47
Q

hur använder man gruppering med regex?

A

Man kan gruppera uttryck med parenteser. Grupper får ett nummer, som kan användas för att ersätta texten. Alla matchade grupper läggs i en collection.

Regex.Match(“O oller ellor ellOr”, “ll([oO])”) → true
Regex.Replace(“ellor ellOr”, “ll([oO])”, “LLe”) → “eLLer eLLer”
var match = Regex.Match(“one car many cars”, “(car)s?”)
match.Groups.Count → 2
match.Groups[0] → “car”

48
Q

vad ger regexuttrycket nedan?

var match = Regex.Match(“one car many cars”, “(car)s?”)

match. Groups.Count
match. Groups[0]

A

2

“car”

49
Q

Vad representerar en extenion method?

A

“An extension represents a static method as an instance method.”
Vi kan skapa statiska funktioner som ser ut att vara en metod i en klass som någon annan har skrivit. På så sätt kan vi lägga till nya funktioner till LINQ queries. Det fungerar till och med i primitiva datatyper!

public static class ExtensionMethods {
	public static bool IsEvenLength(this string instance) {
		return instance.Length % 2 == 0;
	}
}
public class Program {
	public static void Main(string[] args) {
		bool even = "vanlig sträng!".IsEvenLength();
	}
}
50
Q

Vad är en delegate?

A

A delegate is a type that references methods.

51
Q

vad används delegates till?

A

Vi använder delegates bland annat för att hantera events och callbacks. Delegates kan användas för att byta ut kod, motsvarande ett interface fast utan att metoderna behöver ha samma namn.

52
Q

events använder sig av delegates, till vad?

A

Events använder sig av delegates för att koppla ihop händelser med kod. Man kan prenumerera på events för att få kod att köras när de inträffar.

53
Q

Om du kör fölajnde kod vad får du ut?

PowDelegate x = new PowDelegate(Test);

     Console.WriteLine(Pythagoras(1,2, x)); 

public delegate double PowDelegate(double x, double pow);

     private static double Test(double x, double pow)
        {
            double sum = x + pow;
            return sum; 
        }
public double Pythagoras(double sideA, double sideB, PowDelegate algorithm) {
	double aSquared = algorithm(sideA, 2);
	double bSquared = algorithm(sideB, 2);
	return Math.Sqrt(aSquared + bSquared);
}
A

true

2,64575131106459

54
Q

vad får du ut av följande kod?

A

public delegate void RetrieveTreasure(Treasure t);
public delegate void NoTreasureFound();

public void DigForTreasure(RetrieveTreasure rt,
NoTreasureFound nt) {
	// dig for treasure ..
	if (true)
		rt(new Treasure());
	else
		nt();
}
55
Q

vilka inbyggda delegates finns det och vad gör dem?

A

Action: en funktion som tar noll eller flera parametrar och inte returnerar något värde. Action, Action, Action, …
Func: en Action som returnerar ett värde. Func, Func, Func, …
Predicate: en Func som returnerar en bool. (används mycket i LINQ) Predicate, Predicate, …

56
Q

Vad anväder sig events av?

A

Event använder sig av en Action-delegate med noll eller flera parametrar.

57
Q

Hur prenumererar/avprenumererar du på eventet nedan:

public event Action Event1;

A

Event1 += HandleEvent1; // subscribe

Event1 -= HandleEvent1; // unsubscribe

58
Q

Vad får du ut om du skapar en instans av rabbit?

public class Rabbit
        {
            public event Action Jump, Eat, Sleep;
            public Rabbit()
            {
                Jump += OnJump;
                Jump.Invoke(); 
            }
            public void DoJump()
            {
                Console.WriteLine("Rabbit jumps");
                Jump();
            }
        }
A

Console.WriteLine(“The rabbit jumped!”);

59
Q

Vad står WPF för och vad används det till?

A

WPF = Windows Presentation Foundation
Bygga “vanliga” Windows-applikationer
Använder .NET Framework, finns inte för Core

60
Q

Nämn 5 vanliga events i WPF och vad de gör

A
Click, MouseDown, MouseUp
MouseMove, MouseEnter, MouseLeave
GotFocus, LostFocus (alla utom Label)
TextChanged (TextBox)
SelectionChanged (ListBox)
61
Q

vad motsvarar den inbyggda delegaten Action?

A

Action motsvarar en funktion som kan ta noll eller flera parametrar och inte returnerar något värde. Exempel:
private void myAction() { Console.WriteLine(“Hello world”);}
private void myAction(int x) { Console.WriteLine(“x is: “ + x);}

62
Q

vad motsvarar den inbyggda delegaten FUnc?

A

Func motsvarar en funktion som tar noll eller flera parametrar och returnerar ett värde. Exempel: private int myFunc(int x) { return x + 1; }

63
Q

vad motsvarar den inbyggda delegaten Predicate?

A

Predicate är en Func som returnerar ett värde av typen bool.

private bool myPredicate(int x) { return x == 0; }

64
Q

Vad är ett lambda uttryck?

A

Ett lambda-uttryck är en delegate.

65
Q

IEnumerable har funktioner som tar ett lambda-uttryck som parameter, Ofta i formen av vad?

A

predicate

66
Q

Vad används lambda uttryck till?

A

De används för att skapa en ny collection genom att iterera igenom en collection.
Vi skapar en ny, anonym funktion, utan att behöva deklarera den i förväg.

Exempel på en Func-lambda:
o => o.ToString()
Uttrycket ska uttalas “o goes to o.ToString”. Det motsvaras av följande funktion:
private string MyFunction(object o) { return o.ToString();}

67
Q

Det finns 7 sätt att skriva lambda uttryck, vilka är det?

A

Action func0 = () => Console.WriteLine();
Func func1 = x => x + 1;
Func func2 = x => { return x + 1; };
Func func3 = (int x) => x + 1;
Func func4 = (int x) => { return x + 1; };
Func func5 = (x, y) => x + y;
Func func6 = delegate(int x) { return x + 1; };

68
Q

skriv Linq uttrycket nedan med ett lambda uttryck

var query = from n in numbers where n > 5 select n * n;

A

var result = numbers.Where(n => n > 5).Select(n => n * n);

69
Q

koden som körs i ett event av en wpf applikation körs vart?

Hur många event kan man köra samtidigt och hur påverkar det GUI´t?

A

Koden som körs i eventen av en WPF komponent körs på main tråden.

Så därför kan bara ett event kan köras samtidigt. Allt som körs i eventet blockerar GUI uppdateringen tills funktionen har kört färdigt.

button_Click(object sender, EventArgs e) {
DoSomethingThatTakesALongTime();
// problem: användaren kan inte använda GUI samtidigt
}
Vi vill ge användaren möjlighet att göra andra saker i gränssnittet medan hen väntar, så appen upplevs responsivt.

70
Q

vad är skillnaden mellan Task & Thread?

A

En tråd är en del av ett program, som körs parallellt med andra trådar. Vi ser till att den långa operationen körs som en egen tråd och inte belastar GUI-tråden.
Klasserna Task och Thread representerar en tråd. Skillnaden är att Thread alltid motsvarar en fysisk tråd, medan det är upp till operativsystemet om en Task ska få en egen tråd. Det är bättre att låta operativsystemet avgöra det, använd Task!
using System.Threading.Tasks;

71
Q

Vad gör metoden yield i uttrycket nedan?

Thread.Yield();

A

Ibland vill man ge andra trådar chansen att köra, innan man fortsätter. Funktionen Yield pausar den aktuella tråden tills datorn hinner fortsätta med den.

72
Q

Vad använder task sig av för att kunna köra en funktion parallelt?

A

Task använder sig av en delegate för att köra en funktion parallellt. Vi kan använda en Action-delegate eller ett lambda-uttryck.
Action action1 = method1; // Action
Task.Run(action1);
Task.Run( () => method1() ); // Lambda-uttryck
int myValue;
Task.Run( () => method2(myValue) );

73
Q

Vad menas med ett race condition?

A

När ett program har fler än en Task uppkommer en risk, när två tasks försöker använda samma objekt. Det kallas för race condition.

74
Q

Vad skrivs ut på konsolen?

List lista = new List() { 1, 2, 3, 4, 5 };

Task.Run(() => {
	Thread.Sleep(new Random().Next(0, 3));
	lista.RemoveAt(0);  // Task 1
	Console.WriteLine("T1: " + lista[0]);
});
Task.Run(() =>  {
	Thread.Sleep(new Random().Next(0, 3));
	lista.RemoveAt(0);  // Task 2
	Console.WriteLine("T2: " + lista[0]);
});
A

T1: 2
T2: 3

75
Q
Vad skrivs ut på consolen? 
private static void Competition()
        {
            string winner = "";
            int number = 1;
            Task t1 = Task.Run(() =>
            {
                while (number > 0) { }
                Thread.Sleep(5);
                Console.WriteLine(winner += "T1 vann!");
                number++;
            });
            Task t2 = Task.Run(() => {
                while (number > 0) { }
                Thread.Sleep(5);
             Console.WriteLine(   winner += "T2 vann!");
                number++;
            });
            number = 0;
            Thread.Sleep(500);
    }
A

T1 vann!

T1 vann!T2 vann!

76
Q

WPF har en särskild Task “dispatcher” vad gör denna?

A
På grund av dessa problem måste man vara försiktig när man använder objekt i flera trådar. WPF har en särskild Task, dispatcher, som hanterar grafiska komponenter. Om någon annan Task eller Thread försöker komma åt en grafisk komponent kastas ett Exception.
För att på ett trådsäkert sätt komma åt grafiska komponenter måste man be C# göra ändringarna i dispatcher.
Dispatcher.Invoke( () => {
	// it's safe here
} );
77
Q

Vart borde du göra din kalkyler i koden nedan för att undvika race condidtion?

Task.Run( () => {
	Dispatcher.Invoke( () => {
		myButton.Content = "Done!";  
		myButton.IsEnabled = true;
	} );
});
A
Task.Run( () => {
	// Do slow calculations. This area is UNSAFE
	Dispatcher.Invoke( () => {
		myButton.Content = "Done!";  // this is SAFE
		myButton.IsEnabled = true;
	} );
78
Q

Det finns trådsäkra collections. När skall man anvädn dem och nämn 5 stycken.

A
Det finns några collections som är trådsäkra. Använd dem i stället för de vanliga när en collection ska användas av flera trådar.
ConcurrentQueue	
ConcurrentStack
ConcurrentDictionary
ConcurrentBag
BlockingCollection
79
Q

Vad behövs för att stoppa en task?

A

Ibland vill man avsluta en Task innan den har kört klart, till exempel när användaren klickar på en knapp. Klassen CancellationToken har en property som heter IsCancellationRequested, som vi kan läsa av. Exempel:
CancellationTokenSource cts = new CancellationTokenSource();
CancellationToken ct = cts.Token;
Task.Run( () => {
while( !ct.IsCancellationRequested ) { Thread.Sleep(50); }
} );
cts.Cancel(); // cancel thread

80
Q

Vad gör keywordet async och await?

A
private async void Button_Click(..) {
	var result = await SlowMethod();	
}
private async Task SlowMethod() {
	var t = await Task.Run(() =>
	{
		Thread.Sleep(2000); return true;
		// exception om vi använder GUI-komponenter här
	}
	// ok att använda GUI-komponenter här!
	return t;
} Mer läsning
81
Q

Förklara följande centrala begrepp i designprinciper för OOP

inkapsling
abstraktion
arv

A

Ett centralt begrepp i all programmering är abstraktion.

Med detta menas att man döljer tekniska detaljer, finner gemensamma drag hos problem och hittar generella lösningar.

(encapsulation) – principen att ett objekts inre uppbyggnad ska vara ointressant för den som använder objektet i programmering. Detta är en grundprincip i objektorienterad programmering. Allt en programmerare behöver veta är vad objektet kan göra och hur man instruerar objektet att göra det. Inkapsling innebär att man skiljer mellan objektets innehåll (data och program) och dess gränssnitt mot andra objekt.

82
Q

förklara de 3 klassiska kategorierna för design mönster

creational
structural
behavioral

A

Creational - skapa objekt på sätt som gör programmet mer flexibelt
Structural - använda arv och interface för att sätta ihop klasser
Bahavioral - kommunikation mellan objekt
Exempel finns på http://www.dofactory.com/net/design-patterns

83
Q

Factory Metho och Abstract factory är CREATIIONAL design patterns.

Hur används de?

A

Factory method används för att dynamiskt bestämma vilken sorts objekt som ska skapas i ett program medan det körs. Man flyttar logiken som väljer vilken klass som ska skapas till en klass som man kallar “factory”.

Abstract factory påminner om factory method, men är mer komplicerat och involverar fler klasser, som är relaterade till varandra.

84
Q

Förklara creational design pattern Builder

A

Separate the construction of a complex object from its representation so that the same construction process can create different representations.
Skapa en separat klass som kan bygga upp ett objekt steg för steg.
Exempel: StringBuilder
StringBuilder builder = new StringBuilder();
builder.Append(“hello “);
builder.Append(“world”);
String result = builder.ToString();

85
Q

Förlara creational design pattern Prototype

A

Skapa nya objekt genom att kopiera (clone) ett befintligt. Det gör att vi inte behöver veta vilken klass det första objektet är, för att skapa ett till av samma sort.
IAnimal firstAnimal = GetRandomAnimal();
IAnimal secondAnimal = firstAnimal.Clone();

86
Q

Förlara creational design pattern Singelton

A
En klass som det bara kan finnas en av och som är globalt tillgänglig. Privat konstruktor gör att ingen annan kan skapa objekt av klassen.
public class MySingleton {
	private MySingleton() {}
	private static MySingleton instance = new MySingleton();
public static MySingleTon GetInstance() {
	return instance;
} }
87
Q

Vilket design patterna ingår följande i ?

Adapter
Bridge
Composite
Decorator
Facade
Flyweight
Proxy
A

Structural design patterns

88
Q

Vad gör följande structual design patterns?

Adapter
Bridge
Composite
Decorator
Facade
Flyweight
Proxy
A

Bridge används för att skilja mellan en abstraktion och en implementation. Adapter används ofta för att implementera bridge.

Decorator används för att ge klasser nya funktioner, som ett alternativ till att använda subklasser.

Flyweight är ovanligt. Det används när en applikation förväntas använda många objekt under kort tid. I stället för att skapa och slänga objekt varje gång vi behöver ett nytt, så finns det ett factory-objekt som håller ordning på alla Flyweights. När man vill skapa ett objekt så hämtas det i stället från factory. Factory avgör om man kan återanvända ett tidigare objekt eller behöver skapa ett nytt.

Proxy är ett objekt som reglerar tillgången till ett annat objekt.
class Proxy {
	public RealObject RequestObject() { .. }
}

Adapter placeras mellan två klasser som behöver prata med varandra, men som inte har samma interface.
Första klassen anropar en metod i adapter-objektet. Adaptern anropar i sin tur rätt metod i den andra klassen med rätt parametrar.
Kan användas om vi inte kan ändra på klasserna A och B direkt.

Composite används för att bygga en trädstruktur av objekt.
public abstract class Composite {}
public class Node : Composite {
	public List> Children { get; set; }
}
public class Leaf : Composite {
	public T Value { get; set; }
}

Facade Kapsla in ett större system i ett objekt, för att göra ett stort system mer hanterligt.
Facade-klassen har publika metoder som anropar motsvarande metod i de inre objekten.

89
Q

Vilket design pattern är följande:

Chain of responsibility
Command
Interpreter
Iterator
Mediator
Memento
Observer
State
Strategy
Template method
Visitor
A

Behavioral design patterns

90
Q

Vad gör följande behavioral design patterns?

Chain of responsibility
Command
Interpreter
Iterator
Mediator
Memento
Observer
State
Strategy
Template method
Visitor
A

Events i C# använder sig av Chain of responsibility. När ett event triggas så kommer de funktioner som prenumererar på eventet att anropas i tur och ordning.

Command kapslar in något som ska göras i ett objekt, för att kunna utföra händelsen senare eller stödja undo/redo. Exempel: när användaren klickar på knappen “Copy” så skapas ett objekt som beskriver händelsen. Objektet läggs på en kö. Efter hand så plockar det objekt som ansvarar för kön ett Command-objekt och utför det som objektet
representerar.

Interpreter är ett ovanligt designmönster som används för att tolka språk.

Iterator handlar om att kunna gå igenom en collection utan att känna till innehållet och implementeras i C# genom ett interface,

Mediator handlar om att två objekt av samma sort kommunicerar med en gemensam Mediator-klass, i stället för att kommunicerar direkt med varandra genom events eller delegates.

Memento innebär att spara innehållet i ett objekt, så att man kan återskapa det senare. Konceptet Serialization i C# är att man kan konvertera ett helt objekt till en ström av bytes. Man kan sedan spara det i en fil, i en databas eller skicka över ett nätverk.
Mediator och Memento är inte så vanligt förekommande

Observer implementeras i C# med events. De flesta grafiska gränssnitt använder sig av någon variation av Observer.

Strategy handlar om att göra en algoritm utbytbar. Exempel på det har ni i kodexempel från 17/10, funktionen Pythagoras, som använder delegates för att kunna byta ut den funktion som räknar ut upphöjt till två.

Template method är en variant på strategy där man delar upp en algoritm i flera steg, där varje steg är utbytbart.

Visitor handlar om att gå igenom varje element i en datastruktur och utföra en operation på dem. Vi kan använda LINQ för att åstadkomma liknande effekter.

State (sv. tillstånd) är i sin enklaste form att ett objekt kommer ihåg vilket läge det befinner sig, och kan göra olika saker beroende på det. Exempel på klass med två möjliga tillstånd, 0 och 1:
public class MyClass {
	private int state = 0;
	public string Value { get; set; }
	public void DoSomething() {
		if( state == 0 ) { state++; Value = "On"; }
		else if( state == 1 ) { state = 0; Value = "Off"; }
	}
}
91
Q

vad får du av följande regex expression

        string pattern = "kat";
        string input = "min katt har tre konkatenerade kanter";

        Match match = Regex.Match(input, pattern);

        Console.WriteLine(match.Success);
A

true

        //1 Skriv ett regex - mönster som testar om ordet strängen "kat" förekommer i strängen "min katt har tre konkatenerade kanter".
92
Q

Vad får du ut av följande regex expression:

        string input = "min katt har tre konkatenerade kanter";
        string pattern = @"(kat)|(kon)|(kan)";

        MatchCollection matches = Regex.Matches(input, pattern);
        Console.WriteLine($"Number of hits: {matches.Count}");

        foreach (Match match in matches)
        {
            Console.WriteLine(match.Value);
        }
A
Number of hits: 4
kat
kon
kat
kan
  //2 2 Skriv ett pattern som tar reda på hur många gånger orden "kat", "kan" och "kon" förekommer i samma sträng som uppgift 1.
            //Loopa sedan igenom matchningarna och skriv ut varje sökträff på konsolen.
93
Q

Vad får du ut av följande regex expression?

string input = “min katt har tre konkatenerade kanter”;
string pattern = “[a][a-z]”;

        MatchCollection matches = Regex.Matches(input, pattern);

        Console.WriteLine(matches.Count);

        foreach (Match match in matches)
        {
            Console.WriteLine(match.Value);
        }
A
5
at
ar
at
ad
an
  //  3 Skriv ett pattern som tar reda på hur många gånger bokstaven "a" med valfri bokstav efter förekommer i strängen.
            //Skriv ut varje sökträff på konsolen.
94
Q

Vad får du ut av följande regex expression?

string input = “min katt har tre konkatenerade kanter”;

        var pattern = "[t][t.t]";

        MatchCollection matches = Regex.Matches(input, pattern);

        foreach (Match match in matches)
        {
            Console.WriteLine(match.Groups.Count);
        }
A
1
 //4 Skriv ett pattern som tar reda på hur många gånger bokstaven "t" förekommer i strängen,
            //omgiven av tecken som inte är t.
95
Q

Vad får du ut av följande regex expression?

         string input = "hands jumbled terrific old-fashioned grass highfalutin stupendous daughter feigned skirt modern truthful";

        string pattern = "[a][a.s]|[o][o.d]";

        MatchCollection matches = Regex.Matches(input, pattern);

        foreach (Match match in matches)
        {
            Console.WriteLine(match.Groups.Count);
        }
A

1
1
1

        //5 Skriv ett pattern som tar reda på hur många gånger bokstaven "a" följs av "s", eller "o" följs av "d" i strängen.
96
Q

Vad får du ut av följande regex expression?

         string input = "hands jumbled terrific old-fashioned grass highfalutin stupendous daughter feigned skirt modern truthful";

        string pattern = "[a|e][a|e.n|d|s]";

        MatchCollection matches = Regex.Matches(input, pattern);

        foreach (Match match in matches)
        {

            Console.WriteLine(match.Value);
            Console.WriteLine(match.Groups.Count);
        }
A
an
1
ed
1
as
1
ed
1
as
1
en
1
ed
1
        //6 Skriv ett pattern som tar reda på hur många gånger bokstäverna "a" eller "e" följs av "n", "d" eller "s" i strängen.
97
Q

Vad får du ut av följande regex expression?

         string input = "hands jumbled terrific old-fashioned grass highfalutin stupendous daughter feigned skirt modern truthful";

        string pattern1 = @"\b[dh]\w*\W";
        string pattern2 = @"[s]\b";

        MatchCollection matches = Regex.Matches(input, pattern1);
        MatchCollection matches2 = Regex.Matches(input, pattern2);

        foreach (Match match in matches)
        {
            Console.WriteLine(match.Value);
        }
        Console.WriteLine(matches.Count);

        foreach (Match match in matches2)
        {
            Console.WriteLine(match.Value);
        }
        Console.WriteLine(matches.Count);
A
hands
highfalutin
daughter
3
s
s
s
3
            //7 Skriv ett pattern som tar reda på hur många ord i strängen som börjar med "d" eller "h".
            //Sedan ett nytt pattern för hur många ord som slutar med "s".