Patterns Flashcards

1
Q

What is a Factory pattern?

A

En factory pattern används för att skapa nya instanser av en klass. Till skillnad från en builder pattern kapslas de inte in i en klass. Istället för att använda en constructor och specifiera vilken typ av klass som skapas.https://upload.wikimedia.org/wikipedia/commons/4/43/W3sDesign_Factory_Method_Design_Pattern_UML.jpg

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

What is a Builder pattern?

A

En builder pattern används för att skapa nya instanser av en klass genom att kalla på en statisk builder klass. Klassen tar in argument och returnerar en builder. För att få den konstruerade klassen används metoden .build(). Simplifiera processen att skapa objekt.https://upload.wikimedia.org/wikipedia/commons/thumb/f/f3/Builder_UML_class_diagram.svg/750px-Builder_UML_class_diagram.svg.png

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

What is a Strategy pattern?

A

En strategy pattern liknar en template pattern men de flesta metoderna är redan implementerade i en strategy pattern. Ett objekt tas in som delegeras ta hand om en specifik uppgift. Detta gör det möjligt att bestämma algoritm vid runtime. https://upload.wikimedia.org/wikipedia/commons/3/39/Strategy_Pattern_in_UML.png

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

What is a Template pattern?

A

En template pattern/method har en implementerad template metod som använder sig av abstrakta klasser för specifika detaljer. Subklassen sköter specifika implementationsdetaljer. Används för att undvika att upprepa kod. Antingen kan abstakta metoder överskuggas eller så används lambdauttryck. https://refactoring.guru/images/patterns/diagrams/template-method/solution-en-2x.png?id=4980d5dfb1fe07f065650e09756f5614

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

What is a Command pattern?

A

En command pattern har ett interface som innehåller instruktioner som ska exekveras vid ett senare tillfälle. Subklasser ärver interfacet och implementerar vad execute ska innebära.

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

What is a Decorator pattern?

A

En decorator pattern implementerar ett interface genom att kapsla in en fungerande implementation. Därefter kan detaljer läggas till, genom exempelvis en logger som sparar bankinfo. Anropas metoder i decoratorpattern skickas de vidare till motsvarande metoder till det inkapslade objektet.

Nya detaljer läggs till

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

What is an Observer pattern?

A

En observer pattern bygger på det funktionella abstrakta klassen i java kallat observerable. Funktionen addObserver(Observer) tar in ett objekt som implementerar det funktionella interfacet observer. När Observable meddelar att den uppdaterats enligt funktionen setChanged(); NotifyObservers; utför alla observerare sin metod, update(Observable, Objekt). Vad som gör observerpattern användbart är att en observable kan ha flera observers och vet inget om sina observers. https://upload.wikimedia.org/wikipedia/commons/thumb/a/a8/Observer_w_update.svg/750px-Observer_w_update.svg.png

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

What are the SOLID principles?

(Most importantly SOD)

How can we make sure they are followed?

A

The SOLID principles are guidlines for good code.
S-Single responsibility principle wants code to have low coupling, high cohesion. Varje klass har sin uppgift som den ansvarar helt för.
O-Open closed principles wants the code we write to be flexible and easy to add futher features. This is done by avoiding hardcoding and using interfaces or more generic types. Importantly, without altering previous code.
D-Dependency inversion principle wants our classes to depend on interfaces and not on other classes. This avoids coupling which is bad for adding more feature to the code.
L-Liskov Substitution principle want the subclasses to fullfill the same requirements as the superclass. You should be able to replace a vegetable with a cucumber without the program breaking.
I-Interface segregation principle wants our classes to not implement more methods than are needed. We also don’t want our interfaces to be more complicated than is needed. Smaller interfaces are better.

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

What is Composite pattern?

A

En composite pattern används för att hantera grupper av värden som ett enskilt värde. Exempelvis kan samtliga entities tas bort när kommandot delete körs, eftersom entities implementerar entity interfacet. “Composite should be used when clients ignore the difference between compositions of objects and individual objects. If programmers find that they are using multiple objects in the same way, and often have nearly identical code to handle each of them, then composite is a good choice; it is less complex in this situation to treat primitives and composites as homogeneous” https://www.cs.unc.edu/~stotts/GOF/hires/Pictures/compo075.gif

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

Do you know what a UML-diagram is?

A

Unified Modelling language is an easily digestible standardized, simplistic visual model of computer programs.

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

What is a Class-diagram?

Draw an example

When is it relevant?

A

A class diagram shows how classes in a program are related to each other.

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

What is a Sequence diagram?

Draw an example

When is it relevant?

A

A sequence diagram shows where the program is when it executes. It shows which method is being performed, and what the return value and/or arguments are.

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

What is an Object diagram

Draw an example

When is it relevant?

A

An object diagram shows the object created during runtime of a program.

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

Do you know the methods commonly used for Optional?

How would you make an optional for a string?

A

map() utför lamdauttryck på alla optionals, ignorera om tom.
filter(predicate) -> replace optionals who do not fullfill the predicate.
flatmap() tar bort ett lager av “map” Optional<Optional<String>> -> Optional<String>
**get()** -> returns value or error if empty
toString -> return a value (good for printline debugging)
**orElseGet(other)** -> return value, otherwise invoke other
**orElse(T other)** -> return value, otherwise return other.
ofNullable -> return optional with value, otherwise return empty Optional.
**of(value)** -> return optional if value present.
**isPresent** -> return true if Optional is not empty
**empty()** -> return empty optional</String></String>

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

What is an MVC pattern?

Draw a simple klass diagram demonstrating the relationship

A

En model-view-controller pattern används för att göra gui som fortsätter att hålla relativt låg coupling och single responsibility.
Model är modellen för att som programmet ska göra i bakgrunden. (räknaren i en miniräknare)
View är vyn som användaren ser. I en miniräknare blir det siffrorna och knapparna som syns på skärmen.
Controller tar hand om kommunikationen mellan användaren och uppdaterar modellen och vyn. (Beror lite på implementation)
Eftersom view ska presentera model måste den känna till modellen. Controller måste också kunna uppdatera model och view.

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

What is a singleton pattern?

A

A singleton pattern is pretty simple, it’s a class which can only be instantiated once. This results in a single responsibilty, Singleton has a constructor and a getInstance().

17
Q

What is a Facade pattern?

A

Används för att bygga upp en simplifierad “fasad” av en mer komplificerad kod. Fasaden gör den komplicerade koden mer användarvänlig och gömmer implementationen.
Istället för DrawCircle(10,10,5).execute(drawing)
blir det ex: drawing.circle()

18
Q

How do you use a stream?

Give an example

A

Klassen Stream<T>
▸ Gör det möjligt att hantera beräkningar i en ’pipeline’.
▸ Vi har en källa, och utför ett antal transformationer och/eller filtreringar på de
värden som ’strömmar’ från källan.
▸ Vi utför i regel något slags avslutande operation som ger det sökta värdet
primes.stream()
.filter(prime -> prime > 10)
.mapToInt(prime -> prime)
.sum();
[https://fileadmin.cs.lth.se/cs/Education/edaf60/classes/fS777tOo7tDZcg5SM9c74/lect06.pdf](http://)</T>

19
Q

What is cohesion and coupling?

Why do we care about them?

A

Cohesion-hur sammanhängande programrader är med varandra. Hög cohesion gör att raderna arbetar mot samma mål, för att slutföra samma uppgift.
Coupling-Hur beroende klasser är av varandra. Delas mer information mellas klasser har de högre coupling.
För att göra kod som är lättare att läsa och ändra behöver vi sträva mot hög cohesion och låg coupling.

20
Q

DRY?

A

Don’t repeat yourself.

21
Q

Vad innebär lokalitetsprincipen?

Incapsulation & information hiding

A

Vi vill gärna kaspla in information som hör ihop för att få bra cohesion. Gömmer vi undan överflödig information minskar vi risken att bli beroende av den underliggande implementationen, låg coupling.

22
Q

Computer programmet

Vilka mönster användes framförallt?

A

Command pattern till operanderna

23
Q

XL-programmet

Vilka mönster användes framförallt?

A

MVC pattern såklart.
I vårt fall körde vi observer pattern, pga observer synchronization.
Jag är osäker om composite användes.

24
Q

Flow synchronization vs
Observer synchronization

A

När vi har en MVC-model kommer vi att behöva uppdatera view och model när användaren interagerar med controllen. Antingen låter vi controller anropa view varje gång den ska uppdateras (flow synchronization) eller så låter vi view observera model och uppdateras när modellen uppdateras.

25
Q

Do you know anything about microservices?

Not important

A

“Microservices are an architectural and organizational approach to software development where software is composed of small independent services that communicate over well-defined APIs.”

26
Q

What is a fluent interface?

A

Ett fluent interface är ett interface som gör det möjligt att att anropa metoder i en kedja av anrop (method chaning), det bildas ett flöde. Precis som med en builder där metoden returnerar en ny builder. Liknande sker när vi har optional eller stream.

27
Q

What is dependency injection?

inte jätteviktigt

A

Istället för att skapa objekt på plats kan vi skicka in dem som parametrar.

28
Q

What is an adapter pattern?

A

Om vi har en klass som har en metod som gör det ett interface säger, men under fel namn, går det att istället kapsla in den i en annan klass som implementerar interfaces. Anropas metoden på wrappern delegeras den till motsvarande metod i den inkapslade klassen. Detta är likt decorator pattern mer lägger inte till ytterligare funktionalitet direct utan gör enbart att klassen kan användes under interfacet. Alternativt kan man låter adaptern extenda klassen istället, men det är inte att föredra.

29
Q

What is a singleton pattern?

A

En singelton har endast en enda instans, det ska inte gå att skapa fler. Ger verkligen single responsibility.