Composition over Inheritance Flashcards

1
Q

Vilket av följande används för att indikera en klass i UML-diagram?

  1. En cirkel
  2. En triangel
  3. En rektangel med tre sektioner
  4. En linje
A
  1. En rektangel med tre sektioner
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q

Vad representerar ett “+” tecken framför ett attribut eller en metod i ett UML-diagram?

  1. Attributet/metoden är privat
  2. Attributet/metoden är skyddat
  3. Attributet/metoden är publikt
  4. Attributet/metoden är abstrakt
A
  1. Attributet/metoden är publikt

(We can mark attributes or operations as public, private, or protected by prepending a plus sign
(+), minus sign (-), or hash symbol (#), respectively).

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

Vad anger en heldragen linje med en ihålig pilspets i ett UML-diagram?

  1. Aggregation
  2. Generalisering (arv)
  3. Implementering av ett interface
  4. Association
A
  1. Generalisering (arv)

(Inheritance)

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

Vilket av följande symboliserar ett fält (field) i en UML-klass?

  1. En pil
  2. En streckad linje
  3. En attributdeklaration
  4. Ett metodnamn följt av ett returtyp
A
  1. En attributdeklaration
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q

Hur representeras en egenskap (property) i UML?

  1. Med en asterisk (*)
  2. Med stereotypen «get» eller «set»
  3. Med en pil
  4. Som en separat sektion i diagrammet
A
  1. Med stereotypen «get» eller «set»
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q

Hur illustreras en konstruktor i UML-diagram enligt UML-specifikationen?

  1. Med stereotypen «Create»
  2. Med en pil mot bas-klassen
  3. Genom att inkludera returtypen “void”
  4. Med en streckad linje
A
  1. Med stereotypen «Create»
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
7
Q

Vad representerar en streckad linje med en ihålig pil i UML?

  1. En kompositionsrelation
  2. En aggregeringsrelation
  3. Implementering av ett interface (realisering)
  4. En association mellan klasser
A
  1. Implementering av ett interface (realisering)
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
8
Q

Vilket av följande beskriver komposition i UML-diagram?

  1. En relation där en klass äger en annan
  2. En hierarki av ärvda klasser
  3. En instansmetod
  4. En abstrakt klass
A
  1. En relation där en klass äger en annan

(Has-a relation. In the diagram, the arrow from the Player class to the IWeapon interface is an example of
composition, of a has-a relationship between two types).

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

Vilket av följande används för att indikera en abstrakt metod i UML?

  1. Metodnamnet i fetstil
  2. En streckad linje under metodnamnet
  3. Kursiv text eller notationen {abstract}
  4. En asterisk (*) framför metodnamnet
A
  1. Kursiv text eller notationen {abstract}
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
10
Q

I UML, vad innebär en association mellan två klasser?

  1. Att de är i en kompositionsrelation
  2. Att de delar attribut
  3. Att en klass kan ha en referens till en annan
  4. Att de implementerar samma interface
A
  1. Att en klass kan ha en referens till en annan
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
11
Q

What is composition in object-oriented design?

  1. A method for inheriting properties and behaviors from a superclass
  2. A way to combine objects to create more complex behaviors
  3. A process for overriding methods in a subclass
  4. A technique for creating abstract classes
A
  1. A way to combine objects to create more complex behaviors

(Förklaring: Komposition innebär att man kombinerar olika objekt för att skapa komplexa beteenden genom att sätta samman komponenter istället för att ärva från en bas-klass.
Kompositon har följande pil i UML –> “has-a”).

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

What is inheritance in object-oriented programming?

  1. A method for including methods and fields from one object in another
  2. A process to create new classes based on existing ones, forming an “is-a” relationship
  3. A pattern to separate abstraction from implementation
  4. A way to create a unique interface for each object
A
  1. A process to create new classes based on existing ones, forming an “is-a” relationship

(Förklaring: Arv skapar en hierarki där en klass ärver egenskaper och beteenden från en annan klass, vilket ofta innebär ett “is-a” förhållande, t.ex., en “WildDuck is-a Duck”.
Inheritance har följande pil i UML –I> “is-a).

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

What is the Strategy Pattern used for?

  1. To create a single, unchangeable behavior in a class
  2. To allow an object to choose its behavior dynamically at runtime
  3. To ensure that an abstraction can vary independently from its implementation
  4. To simplify class hierarchies by removing unused methods
A
  1. To allow an object to choose its behavior dynamically at runtime

(Förklaring: Strategy Pattern gör det möjligt att definiera olika beteenden och att dynamiskt byta dessa, vilket gör det lätt att ändra hur ett objekt beter sig utan att behöva ändra dess klass).

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

What is the purpose of the Bridge Pattern?

  1. To allow objects to have interchangeable behaviors at runtime
  2. To separate abstraction from its implementation, allowing them to vary independently
  3. To ensure all subclasses of a base class share the same behavior
  4. To enforce a strict hierarchy between classes
A
  1. To separate abstraction from its implementation, allowing them to vary independently

(Förklaring: Bridge Pattern används för att separera abstraktion från implementation, vilket gör att båda kan utvecklas oberoende av varandra. Det är särskilt användbart när man har flera oberoende dimensioner av variation).

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

Vad är huvudpoängen med komposition över arv?

  1. Att främja användningen av arv för alla typer av hierarkier
  2. Att möjliggöra horisontell delning av kod utan hierarki
  3. Att göra kod mer beroende av specifika implementationer
  4. Att eliminera alla typer av arv i objektorienterad design
A
  1. Att möjliggöra horisontell delning av kod utan hierarki​

(Förklaring: Komposition över arv uppmuntrar att dela funktionalitet horisontellt genom att kombinera objekt snarare än att skapa djupa arvshierarkier. Detta gör koden mer flexibel och lätt att förändra utan att påverka hela strukturen).

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

Vilket av följande mönster är en implementering av principen komposition över arv?

  1. Decorator Pattern
  2. Observer Pattern
  3. Strategy Pattern
  4. Factory Pattern
A
  1. Strategy Pattern

(Förklaring: Strategy Pattern möjliggör att byta ut beteenden dynamiskt, vilket är ett centralt koncept i komposition över arv. Istället för att ärva funktionalitet kan ett objekt “sammansättas” med olika strategier).

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

Vad beskriver den så kallade “Duck Dilemma” inom design?

  1. Problem med arv när alla objekt delar exakt samma funktionalitet
  2. Svårigheten att hantera olika beteenden i en hierarki
  3. Behovet av att använda fler klasser i arvsträdet
  4. Fördelarna med att använda inheritance för att hantera komplexa hierarkier
A
  1. Svårigheten att hantera olika beteenden i en hierarki

(Förklaring: “Duck Dilemma” refererar till problem som uppstår när en hierarki försöker hantera olika beteenden (exempelvis kväka och simma). Komposition gör det möjligt att använda dessa beteenden flexibelt utan att behöva skapa en komplex arvshierarki).

18
Q

Hur representeras komposition mellan objekt i ett UML-diagram?

  1. Med en heldragen linje och en fylld diamant
  2. Med en streckad linje och en ihålig pil
  3. Med en heldragen linje utan diamant
  4. Med en streckad linje och en fylld diamant
A
  1. Med en heldragen linje och en fylld diamant​
19
Q

Vilken av följande fördelar ges av att använda komposition med dependency injection?

  1. Minskat beroende av externa bibliotek
  2. Förbättrad flexibilitet att byta ut implementationer under körning
  3. Bättre minneshantering under kompilering
  4. Möjligheten att använda fler arvsträd
A
  1. Förbättrad flexibilitet att byta ut implementationer under körning

(Förklaring: Dependency injection gör att vi kan byta ut implementationer under körning, vilket ökar flexibiliteten i koden och är en central princip för komposition).

20
Q

Vilken metod använder kompositionsprincipen för att ge en Duck-klass möjlighet att “simma” och “kväka”?

  1. Genom arv från en superklass
  2. Genom att implementera två nya underklasser
  3. Genom att injicera Swim och Quack beteenden som komponenter
  4. Genom att skriva en ny klass för varje simtyp
A
  1. Genom att injicera Swim och Quack beteenden som komponenter

(Förklaring: Genom att injicera Swim och Quack-beteenden som komponenter kan vi kombinera olika beteenden för Duck-klassen utan att behöva använda arv, vilket ger en mer flexibel design).

21
Q

Vilket av följande designmönster hjälper till att hantera två olika typer av variationer, som färg och form?

  1. Strategy Pattern
  2. Bridge Pattern
  3. Observer Pattern
  4. Singleton Pattern
A
  1. Bridge Pattern

(Förklaring: Bridge Pattern separerar objekt i två oberoende hierarkier, vilket gör det möjligt att hantera olika typer av variationer, som färg och form, utan att skapa en komplex arvshierarki).

22
Q

Varför är “dependency injection” fördelaktigt vid komposition över arv?

  1. Det minskar behovet av arvsträd
  2. Det gör objekt beroende av specifika underklasser
  3. Det tillåter dynamisk uppdatering av beteenden utan kodändringar
  4. Det gör systemet mer beroende av arv
A
  1. Det tillåter dynamisk uppdatering av beteenden utan kodändringar

(Förklaring: Dependency injection gör det möjligt att dynamiskt uppdatera beteenden utan att behöva ändra kod, vilket ökar återanvändbarheten och flexibiliteten).

23
Q

Vad gör bridge pattern särskilt användbart?

  1. Det låter två oberoende hierarkier interagera utan att behöva känna till varandra
  2. Det gör det möjligt att skapa klasser utan att använda några typer
  3. Det gör att man kan ha flera oberoende arvsträd i en klass
  4. Det tillåter variabel kodning för klassinstanser
A
  1. Det låter två oberoende hierarkier interagera utan att behöva känna till varandra

(Förklaring: Bridge Pattern gör att två oberoende hierarkier kan arbeta tillsammans utan att direkt känna till varandra, vilket gör det lättare att ändra och utöka funktionaliteten).

24
Q

Vilket av följande designmönster används ofta tillsammans med lambdauttryck för att underlätta kodåteranvändning?

  1. Strategy Pattern
  2. Observer Pattern
  3. Proxy Pattern
  4. Singleton Pattern
A
  1. Strategy Pattern

(Förklaring: Strategy Pattern är utmärkt för att låta beteenden bytas ut med hjälp av lambdauttryck, vilket gör det enklare att skapa flexibla och återanvändbara kodkomponenter).

25
Q

Which of the following statements is true about composition over inheritance?

  1. Composition only works if there is no inheritance
  2. Composition allows you to dynamically change behaviors at runtime
  3. Inheritance always offers better flexibility than composition
  4. Composition requires the use of abstract classes
A
  1. Composition allows you to dynamically change behaviors at runtime

(Förklaring: Komposition tillåter dynamisk förändring av objektets beteenden vid runtime, vilket gör att vi kan kombinera och byta ut komponenter efter behov, vilket arv inte tillåter på samma sätt).

26
Q

Fill in the blank: In composition, objects can be created by combining various _____.

  1. interfaces
  2. behaviors
  3. abstract classes
  4. base classes
A
  1. behaviors

(Förklaring: Beteenden kan kombineras med hjälp av komposition för att skapa flexibla objekt utan att förlita sig på arv, vilket kan bli stelbent).

27
Q

What will this code output if Duck has behaviors for quacking and swimming using composition?
Duck mallard = new Duck(new QuackBehavior(), new SwimBehavior());
mallard.PerformQuack();
mallard.PerformSwim();

  1. The duck remains silent
  2. A runtime error occurs
  3. The duck quacks and swims
  4. The duck only quacks
A
  1. The duck quacks and swims

(Förklaring: Genom att ge Duck-klassen “Quack” och “Swim” som separata beteenden med komposition kan vi få objektet att utföra båda utan arv).

28
Q

Which of the following is an advantage of using composition over inheritance?

  1. It makes classes more rigid and harder to modify
  2. It allows for code reuse by extending a base class
  3. It allows combining different behaviors without deep inheritance
  4. It enforces a strict class hierarchy
A
  1. It allows combining different behaviors without deep inheritance

(Förklaring: Komposition ger flexibilitet att kombinera olika beteenden utan djupa arvsträd, vilket gör koden mer modulär och lätt att underhålla).

29
Q

Which of the following patterns supports composition over inheritance by enabling flexible behavior selection?

  1. Singleton Pattern
  2. Strategy Pattern
  3. Observer Pattern
  4. Factory Pattern
A
  1. Strategy Pattern

(Förklaring: Strategy Pattern är designat för att låta objekt dynamiskt välja och ändra beteenden, vilket gör det till ett bra val för kompositionsbaserade lösningar).

30
Q

In the context of composition, what role does dependency injection play?

  1. It forces objects to inherit from a base class
  2. It allows objects to receive their dependencies at runtime
  3. It requires all dependencies to be known at compile-time
  4. It ensures that all behaviors are immutable
A
  1. It allows objects to receive their dependencies at runtime

(Förklaring: Dependency injection gör det möjligt att tilldela objekt sina beroenden vid runtime, vilket stödjer komposition genom att möjliggöra flexibel användning av olika komponenter).

31
Q

Which of the following is a way to create reusable, interchangeable behaviors without inheritance?

  1. By implementing different interfaces in a single class
  2. By using static methods in classes
  3. By injecting behavior objects through constructors
  4. By defining multiple abstract classes for each behavior
A
  1. By injecting behavior objects through constructors

(Förklaring: Genom att injicera beteendeobjekt i en konstruktor kan vi dynamiskt ändra objektets beteenden utan att behöva skapa nya underklasser för varje variation).

32
Q

Fill in the blank: Composition can be especially useful when a class needs multiple _____.

  1. static methods
  2. inheritance hierarchies
  3. behaviors that vary independently
  4. private fields
A
  1. behaviors that vary independently

(Förklaring: När klasser behöver flera olika beteenden som varierar oberoende av varandra är komposition särskilt fördelaktigt eftersom det undviker komplexa arvsträd).

33
Q

What will be the output of this code if Robot uses composition to perform different actions?
Robot android = new Robot(new WalkBehavior(), new TalkBehavior());
android.PerformWalk();
android.PerformTalk();

  1. The robot performs only the walk behavior
  2. The robot performs both walk and talk behaviors
  3. The robot remains stationary
  4. The robot performs an unknown behavior
A
  1. The robot performs both walk and talk behaviors

(Förklaring: Genom att använda komposition med “WalkBehavior” och “TalkBehavior” kan Robot utföra båda beteendena, vilket är möjligt utan arv).

34
Q

In composition, what does the Bridge Pattern primarily help with?

  1. Ensuring strict inheritance hierarchies
  2. Allowing multiple independent hierarchies to work together
  3. Reducing the need for interfaces
  4. Preventing objects from holding state
A
  1. Allowing multiple independent hierarchies to work together

(Förklaring: Bridge Pattern hjälper två hierarkier att fungera oberoende men samtidigt samarbeta, vilket gör det lättare att utöka koden och lägga till nya funktioner).

35
Q

What is a key difference between composition and inheritance in object-oriented design?

  1. Composition combines behaviors from multiple classes, while inheritance shares behaviors through a class hierarchy
  2. Inheritance enables dynamic behavior selection at runtime, while composition is static
  3. Composition only allows methods, while inheritance allows properties
  4. Inheritance is more flexible than composition in changing object behaviors
A
  1. Composition combines behaviors from multiple classes, while inheritance shares behaviors through a class hierarchy.

(Förklaring: Komposition möjliggör att olika objekt kombineras för att skapa önskat beteende, medan arv ärver beteende från en förälderklass, vilket skapar en hierarki).

36
Q

Which of the following is an advantage of using composition over inheritance?

  1. Composition allows for more flexible behavior changes without altering the class hierarchy
  2. Inheritance simplifies code by using one class to store all methods
  3. Composition requires more rigid structures than inheritance
  4. Inheritance always provides better code reusability than composition
A
  1. Composition allows for more flexible behavior changes without altering the class hierarchy

(Förklaring: Komposition gör det möjligt att kombinera olika komponenter och beteenden utan att låsa in sig i en specifik arvshierarki, vilket gör det enklare att justera och utöka funktionaliteten).

37
Q

When is inheritance more suitable than composition in object-oriented design?

  1. When flexibility to change behavior at runtime is essential
  2. When the class requires multiple independent behaviors
  3. When the class represents an “is-a” relationship and shares core behaviors
  4. When the application uses dependency injection
A
  1. When the class represents an “is-a” relationship and shares core behaviors

(Förklaring: Arv är mer lämpligt när objekt har ett “is-a” förhållande, t.ex., en hund är ett djur, eftersom det då är naturligt att ärva grundläggande funktionalitet från en förälderklass).

38
Q

What is the main purpose of the Bridge Pattern?

  1. To allow multiple behaviors to be chosen at runtime
  2. To create a single reusable interface for multiple implementations
  3. To dynamically change strategies based on conditions
  4. To separate abstraction from its implementation to allow independent evolution
A
  1. To separate abstraction from its implementation to allow independent evolution

(Förklaring: Bridge Pattern används för att separera abstraktionen från dess implementation så att båda kan utvecklas oberoende av varandra, vilket är särskilt användbart när olika variationer behövs).

39
Q

What is a key difference between Bridge Pattern and Strategy Pattern?

  1. Bridge Pattern is used for combining behaviors, while Strategy Pattern is used for injecting behaviors
  2. Strategy Pattern allows behaviors to vary independently, while Bridge Pattern separates abstraction from implementation
  3. Bridge Pattern only supports single inheritance, while Strategy Pattern supports multiple inheritance
  4. Strategy Pattern is limited to runtime decisions, while Bridge Pattern is compile-time only
A
  1. Strategy Pattern allows behaviors to vary independently, while Bridge Pattern separates abstraction from implementation

(Förklaring: Strategy Pattern gör det möjligt att variera beteenden oberoende av varandra, medan Bridge Pattern skapar en tydlig separation mellan en abstraktion och dess implementation för att hantera olika varianter).

40
Q

When would you use Strategy Pattern over Bridge Pattern?

  1. When you need to change the behavior of an object at runtime
  2. When you need a flexible way to handle complex object hierarchies
  3. When you want to separate the implementation from the interface
  4. When you want to bind two classes permanently
A
  1. When you need to change the behavior of an object at runtime

(Förklaring: Strategy Pattern är idealiskt när vi vill kunna ändra beteendet för ett objekt under programmets gång, medan Bridge Pattern används för att hantera komplexa hierarkier).

41
Q

Which of the following best describes when to use the Bridge Pattern?

  1. When you need to swap behaviors dynamically
  2. When you have multiple, independent dimensions of variation
  3. When classes need to inherit multiple behaviors simultaneously
  4. When the application has only a single implementation.
A
  1. When you have multiple, independent dimensions of variation

(Förklaring: Bridge Pattern är användbart när vi har flera dimensioner av variation, exempelvis när en grafisk form kan ha olika färger och former, och dessa kan utvecklas oberoende av varandra).