Leuk dat je hebt meegedaan aan onze actie op de JFall! Mocht je nieuwsgierig zijn naar de juiste antwoorden op de vragen: hier zijn ze.
- Nog niet alle onderdelen van de Nerfgun zijn met elkaar verbonden! In een Spring applicatie zijn er verschillende methoden om dit met inversion of control te bereiken. De aansturingsapplicatie gebruikt meerdere, maar welke werkt niet?
- via een veld geannoteerd met @Autowired
- via een veld geannoteerd met @Inject
- via een veld geannoteerd met @Bean
- via een enkele constructor zonder annotatie
2. Het systeem is gebouwd zodat het meerdere soorten turrets bedienen. We verwachten op den duur een groot arsenaal aan types op te bouwen en moeten snel de juiste kunnen selecteren. We willen dit implementeren met een Map, welke implementatie zou het meest geschikt zijn voor een compact en efficiënt resultaat?
- Map.of(…)
- new HashMap<>()
- new EnumMap<>(TurretType.class)
- new TreeMap<>()
3. Nu we de succesvol een Nerfgun kunnen selecteren moeten we ook de munitie kunnen laden. Een Nerfgun maakt gebruik Munitie met type Dart. De MunitieRepository geeft een Stream terug van alle aanwezige Munitie. Met welke Collector kunnen we de munitie sorteren in een map van type `Map<MunitionType, List>`?
- Collectors.toMap(Munition::type)
- Collectors.groupingBy(Munition::type)
- Collectors.flatMapping(Munition::type)
- Collectors.partitionBy(Munition::type)
De overige opties resulteren in een ander type en hebben een tweede argument nodig.
4. Om het doel te kunnen raken moet de Nerfgun gericht worden met behulp van de TargetingService. Op het moment implementeert de Nerfgun al de Turret interface, maar deze zal nu ook het Aimeable interface moeten implementeren. Beide interfaces hebben echter beide een methode `aim(float direction, float angle)`. Is dit een probleem en hoe los je dit op?
- Geen probleem, implementeer de methoden uit beide interfaces expliciet
- Geen probleem, Beide kunnen in één keer geimplementeerd als het method signature hetzelfde is
- Dit kan niet, het is sowieso niet mogelijk twee interfaces te implemeneteren
- Dit kan niet, het is niet mogelijk om twee interfaces met dezelfde methode te implementeren
5. We willen niet dat iedereen zomaar schoten kan lossen! Met welke modifier zorg je ervoor dat een methode alleen vanuit hetzelfde package gebruikt kan worden?
- private
- default (= geen modifier)
- protected
- final
Door geen modifier op te geven.
6. De Nerfgun is nu klaar voor gebruik, maar om deze daadwerkelijk te mogen gebruiken moet aan een aantal kwaliteitseisen voldaan worden. Om te voorkomen dat er nu of in de toekomst iets mis gaat met dit gevaarlijke appraat natuurlijk! Een gedocumenteerde model van het systeem is hierbij belangrijk. Volgens het C4 model voor softwarearchitectuur, welk diagram beschrijft welke deployables binnen je IT-landschap aanwezig zijn die samen het volledige systeem vormen.
- System context diagram
- Container diagram
- Component diagram
- Code diagram
7. Om te garanderen dat verschillende verantwoordelijkheden binnen de aansturingsapplicatie van de Nerfgun goed belegd zijn is gekozen om een Layered Architecture toe te passen. Hoe worden deze lagen over het algemeen aangeduid?
- A = Controller, B = Service, C = Repository
- A = Presentation, B = Business, C = Persistence
- A = Web, B = Model, C = Data
- A = Api, B = Business, C = Repository
8. Een afgedwaald schot van de Nerfgun zou dramatische gevolgen kunnen hebben. De software voor de aansturing moet dan ook begrijpbaar en overzichtelijk blijven zodat deze kan worden onderhouden en doorontwikkeld. Stel erzijn de volgende relaties tussen packages aanwezig:
- controller -> service
- controller.exception
- service -> repository, jms, model
- service.util
- model
- repository -> controller.exception
- jms -> service
In deze relaties, welk ongewenst patroon is aanwezig?
- een cyclus tussen packages
- relaties tussen ongerelateerde packages
- ongebruikte code
- alle bovenstaande
Cyclus tussen jms en service, ongewenste relatie tussen repository en controller.exception, service.util is ongebruikt