Expert review sprint 2/3 Senna de Vries¶
K1 - Je hebt object georiënteerde software gemaakt die samenwerkt met een database.¶
Object georienteerd programmeren bestaat uit de volgende onderdelen: encapsulation, abstraction, inheritance en polymorphism.
Onderstaand zijn de classes en functies die ik heb geschreven gebruikmakend van de principes van OOP.
private void DrawSpecialTiles()
{
for(int i = 0; i < 3; i++)
{
Random number = new Random();
int x = number.Next(0, 7);
int y = number.Next(3, 6);
SpecialTiles NewSpecialTile = new()
{
Position = new Microsoft.Xna.Framework.Vector2(358 + (x * 72.5f), 0 + (y * 72.5f))
};
Add(NewSpecialTile);
SpecialTileSelected specialTileSelected = new();
specialTileSelected.SpecialTileLocation = $"{NewSpecialTile.Position}";
SocketClient.Instance.SendDataPacket(specialTileSelected);
Console.WriteLine("SpecialTile selected = " + specialTileSelected.SpecialTileLocation);
}
}
Encapsulation¶
Bij encapsulation wordt data bij elkaar gebundeld in een class. Deze class kan vervolgens verborgen worden gehouden voor andere classes/buitenstaanders waardoor de code van buiten af niet kan worden beinvloed. Dit zorgt ervoor dat de functies, variabelen en andere stukken code niet onbedoelt worden aangepast.
//Special Tile class
protected readonly Tile tile;
public SpriteGameObject SpecialTile;
public SpecialTiles() : base()
//Special Tile Selected class
public string SpecialTileLocation { get; set; }
public string SessionId { get; set; }
public string UserId { get; set; }
public string RoomId { get; set; }
public SpecialTileSelected() : base()
//GameState: Draw Special Tile functie
private void DrawSpecialTiles()
Abstraction¶
Abstraction is het kort en bondig maken van de code waarbij irrelevante details worden weggelaten. Dit vergroot de leesbaarheid en herbruikbaarheid van de code.
//GameState: Draw SpecialTiles functie
for(int i = 0; i < 3; i++)
{
Random number = new Random();
int x = number.Next(0, 7);
int y = number.Next(3, 6);
SpecialTiles NewSpecialTile = new()
{
Position = new Microsoft.Xna.Framework.Vector2(358 + (x * 72.5f), 0 + (y * 72.5f))
};
Add(NewSpecialTile);
SpecialTileSelected specialTileSelected = new();
specialTileSelected.SpecialTileLocation = $"{NewSpecialTile.Position}";
SocketClient.Instance.SendDataPacket(specialTileSelected);
Console.WriteLine("SpecialTile selected = " + specialTileSelected.SpecialTileLocation);
}
//Special Tile Selected class
public string SpecialTileLocation { get; set; }
public string SessionId { get; set; }
public string UserId { get; set; }
public string RoomId { get; set; }
Inheritance¶
Inheritance is het overnemen van eigenschappen en methodes tussen classes. Hierbij neemt een child class de eigenschappen over van zijn parent class.
Polymorphisme¶
Polymorphisme is de mogelijkheid om een methode op meerdere manieren te kunnen gebruiken. Hiervoor kunnen inheritance gebruikmakend van virtual en override statements of interfaces gebruikt worden. Een class geeft een bepaalde standaardcode aan. Via inheritance of interfaces kan deze code worden overschreden waarbij eigen implementaties worden ingevoegd. Op deze manier kan de originele class code op meerdere manieren worden ingezet.
Mogelijkheid voor implementatie: Als er een piece op de special tile staat wordt de special tile class ge-override waarbij de kleur van de special tile wordt aangepast. Dit wordt gedaan door middel van een if-statement die checkt of de posities van een piece gelijk is aan de positie van een special tile. Als dit het geval is dan wordt de override statement gecalled waarbij de spritegameobject wordt overschreden.
UML klassendiagram¶
In het bovenstaande UML klassendiagram zijn mijn classes weergegeven. Te zien is dat er een specialTiles class is aangemaakt die inherit van GameObjectList wat weer inherit van IGameObjectLoop. Ook zijn de variabelen en methods van de specialTiles class weergegeven en is er met een plus of min aangegeven of de variabele/methode public of private is gemaakt. Ook is er een SpecialTileSelected class aangemaakt die inherit van DataPacket. Ook hier zijn de variabelen en methods aangegeven met een plus- of minteken ervoor.
Database¶
Voor de database heb ik eerst een EER model gemaakt. Ik heb meerdere tabellen gemaakt en deze aan elkaar gelinkt. Bij het linken hield ik rekening met de verschillende soorten relaties (one to one, one to many, zero to many, etc). In de tabellen heb ik primary keys, foreign keys en andere waarden toegevoegd. Ook heb ik een connectie opgezet. Het EER diagram is een nogal breed diagram met alle aspecten van de game. Dit biedt enkele voor- en nadelen.
Voordelen:
- De hele game is compleet weergegeven in 1 database
- Alle relaties tussen de verschillende aspecten van de game zijn in 1 oogopslag duidelijk te zien
Nadelen:
- De database is lastig te realiseren door de omvang
- Het ophalen en opslaan van data zal minder precies gaan door de omvang van de database
K3 - Je hebt een infrastructuur ontworpen en gebouwd volgens de gegeven specificaties.¶
Voor het ontwerpen van de infrastructuur heb ik een Json pakketje gemaakt waarbij er informatie van en naar de server wordt verzonden. Ook heb ik een sequence- en network diagram gemaakt.
Network Diagram:
Sequence Diagram:
G3 - Je werkt planmatig en volgens gegeven aanpak aan een project.¶
Gedurende de tweede sprint heb ik veel gefocust op het aantonen van de verschillende onderdelen die van ons als student verwacht worden. Dit gaat om het werken met een database, het opzetten van een infrastructuur en het coderen gebruikmakend van de pilaren van OOP. Mijn focus lag voornamelijk op het maken van de database. In het vorige blok had ik niet genoeg aangetoond vaardig te zijn met het opzetten van een database. Om deze reden kreeg ik dit blok een aanvullende opdracht rondom dit onderwerp. Ik had hier weinig ervaring mee en had geen idee waar ik moest beginnen. Ik had vervolgens om mij heen gevraagd aan docenten en studentmentoren om mij op weg te helpen. Via deze weg heb ik een begin weten te maken met een EER diagram. Vervolgens heb ik een studentmentor gevraagd of hij mijn diagram zou kunnen beoordelen en of hij nog verbeterpunten zag. Daarna ben ik een connectie op gaan zetten om de database te realiseren. Bij het opzetten en realiseren ben ik tegen een hoop problemen gelopen. Met hulp van een paar SE-studenten ben ik een stuk verder gekomen.
Bronnen¶
Encapsulation
Abstraction
Inheritance
Polymorphisme bron 1
Polymorphisme bron 2
Network diagram
Sequence diagram