# Expert 1 Sprint 1

---

## K1: Je hebt object georiënteerde software gemaakt die samenwerkt met een database.

Voor het maken van object georiënteerde software die samenwerkt met een database ben ik nog niet ver genoeg. Ik ben bezig geweest met het maken van OOP software, maar ik ben nog niet begonnen met het maken van een database. Ik ben wel van plan om dit te gaan doen in de volgende sprint. Door een verandering in ons product zal de database anders ingericht worden dan eerder gedacht. Daarom zal ik in deze expert laten zien wat ik al wel heb kunnen doen en wat ik van plan ben om te gaan doen. 

### Database

De database moet nog worden opgezet. Het idee is om dit te doen met behulp van: NodeJs, MariaDB en Apache. De database zal worden opgezet op een Raspberry Pi.

De database zou eerder worden gebruik voor gegevens van de gebruiker en veel andere data. Dit is veranderd na de feedback van de sprint review, de feedback die wij kregen was om het project/product veel simpeler te houden en aan te passen op onze doelgroep. De database zal nu worden gebruikt voor opslaan van bepaalde oefeningen en de bijbehorende data.

### OOP

Object Oriented Programming is een programmeermethode dat gebruik maakt van objecten en classes. Het doel van OOP is om de code beter te structureren en te hergebruiken. Omdat wij gebruik maken van java voor het maken van de software, is het makkelijk om gebruik te maken van OOP. Java is een object georiënteerde programmeertaal en maakt het makkelijk om gebruik te maken van OOP sinds het een van de belangrijkste concepten is van Java.

#### Inheritance

Inheritance is een princiepe waarbij een nieuwe class wordt gemaakt met behulp van eigenschappen van een bestaande class. De nieuwe class wordt afgeleid van de bestaande class.

Voorbeeld: Een olifant is een dier. Een olifant heeft alle eigenschappen van een dier, zoals ademhalen, eten, slapen, enz. Een olifant heeft ook enkele specifieke eigenschappen, zoals grootte, gewicht, slurf, enz.

Use case: 

```java

public class MainActivity extends RobotActivity implements RobotLifecycleCallbacks {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // Register the RobotLifecycleCallbacks to this Activity.
        QiSDK.register(this, this);
    }

    @Override
    protected void onDestroy() {
        // Unregister the RobotLifecycleCallbacks for this Activity.
        QiSDK.unregister(this, this);
        super.onDestroy();
    }

    @Override
    public void onRobotFocusGained(QiContext qiContext) {
        // The robot focus is gained.
    }

    @Override
    public void onRobotFocusLost() {
        // The robot focus is lost.
    }

    @Override
    public void onRobotFocusRefused(String reason) {
        // The robot focus is refused.
    }
}

```

De MainActivity class erft van RobotActivity, dit zorgt ervoor dat MainActivity properties en methods kan gebruiken van RobotActivity.

#### Abstraction

Abstraction is een princiepe om de complexiteit van een object te verbergen en alleen de nodige kenmerken weer te geven.

Voorbeeld: Een auto bestaat uit verschillende onderdelen, zoals motor, versnellingsbak, wielen, enz. Maar we hoeven niet te weten hoe deze onderdelen werken om een auto te besturen. We moeten alleen weten hoe we de auto moeten besturen, zoals hoe we gas moeten geven, remmen, sturen, enz.

Use case:

```java

@Override
public void onRobotFocusGained(QiContext qiContext) {

    Say say = SayBuilder.with(qiContext) // Create a new Say action.
            .withText("Hello world!")
            .build();

    say.run(); // Execute the Say action.
}

```

In de method `onRobotFocusGained` wordt een `Say` actie gemaakt en uitgevoerd. De gebruiker hoeft niet te weten hoe de `Say` method werkt, maar kan deze gewoon gebruiken.

#### Encapsulation

Encapsulation is een princiepe om de interne gegevens van een object te verbergen en alleen toegang te geven via methods.

Voorbeeld: Een bank heeft verschillende methods om geld te storten, geld op te nemen, saldo te controleren, enz. We kunnen niet rechtstreeks toegang krijgen tot de interne gegevens van de bank, zoals de balans, de rekeningnummers, enz. We moeten de methods van de bank gebruiken om deze gegevens te krijgen.
p
Use case:

```java

To be added

```

In de `MainActivity` class worden de methods `onCreate`, `onDestroy`, `onRobotFocusGained`, `onRobotFocusLost` en `onRobotFocusRefused` gebruikt om pepper te kunnen besturen. De gebruiker hoeft niet te weten hoe deze methods werken, maar kan deze gewoon gebruiken.

#### Polymorphism

Polymorfism is een princiepe waarmee een class verschillende vormen kan hebben. Het kan worden bereikt door methods te hebben met dezelfde naam, maar met verschillende parameters.

Voorbeeld: Een dier kan verschillende geluiden maken, zoals een hond kan blaffen, een kat kan miauwen, enz. Maar we kunnen een algemene method maken die `makeSound` heet en deze method in de dierclass implementeren. De hondclass kan deze method overschrijven en blaffen implementeren, en de katclass kan deze method overschrijven en miauwen implementeren.

Use case:

```java

To be added

```

---

## K2: Je hebt de wensen en behoeften van gebruikers verwerkt in een goed doordacht prototype.

De wensen en behoeften van de gebruikers zijn op dit moment nog niet verwerkt in een prototype. Dit is omdat er nog niet genoeg informatie hebben over de wensen en behoeften van de gebruikers. In sprint 2 zal er een prototype worden gemaakt waarin de wensen en behoeften van de gebruikers zijn verwerkt.

De manier waarop ik de wensen en behoeften van de gebruikers wil gaan verwerken in het prototype is door middel van Test/Learning cards. Dit is een manier om de gebruikerservaring te testen en te verbeteren.

---
### ISO

Voor het testen van de gebruikerservaring wordt de ISO (International Standard Organization) definitie van kwaliteit in gebruik gebruikt.

“Qualiteit in gebruik is de mate waarin een product of systeem door specifieke gebruikers kan worden gebruikt om aan hun behoeften te voldoen om specifieke doelen te bereiken met effectiviteit, efficiëntie, vrijheid van risico en tevredenheid in specifieke gebruiksomstandigheden.”

#### Effectiviteit

Effectiviteit is de mate waarin gebruikers specifieke doelen kunnen bereiken met nauwkeurigheid en volledigheid.

##### Test Card

In de test card wordt de test beschreven die wordt uitgevoerd. De test card bestaat uit de volgende onderdelen:

Hypothese:
Test:
Meetmethode:
Criteria:

##### Resulaat 

In `Resultaat` worden de resultaten van de test beschreven. De resultaten worden beschreven aan de hand van de hypothese, test, meetmethode en criteria.

##### Learning Card

In de learning card wordt beschreven wat er is geleerd van de test. De learning card bestaat uit de volgende onderdelen:

Hypothese:
Observatie:
Leerpunt en inzicht:
Advies:

---

De effectiviteit en tevredenheid worden op gelijke manieren getest. Zodra de test is uitgevoerd en de resultaten zijn geanalyseerd, wordt er een learning card gemaakt. In de learning card wordt beschreven wat er is geleerd van de test en wat er kan worden verbeterd. Na alle resultaten te hebben geanalyseerd, wordt er een prototype gemaakt waarin de wensen en behoeften van de gebruikers zijn verwerkt.

---

## K3: Je hebt een infrastructuur ontworpen en gebouwd volgens zelf-gedefinieerde vereisten.

Op dit moment is de infrastructuur nog niet ontworpen. Dit is omdat wij nog niet toegekomen zijn aan het opzetten van de vereisten. In sprint 2 zal er een infrastructuur worden ontworpen en gebouwd volgens zelf-gedefinieerde vereisten.

Hoe dit er uit kan gaan zien:

![alt text](../../../documentation/diagrams/assets/appDiagram.png)

Ik ben van plan te gaan werken met NodeJs en MariaDB. Dit is iets wat ik eerder nog niet heb gedaan en waar ik nog niet veel ervaring mee heb. Ik ben van plan om dit te gaan doen omdat het mij een leuke uitdaging lijkt en omdat ik denk dat ik hier veel van kan leren.

## K4: Je ontwerpt een embedded systeem op basis van gegeven hardware.

Nog niet aan begonnen.

Hoe ik dit ga doen:

1. Bepalen van de hardware
2. BOM maken
3. Aansluit diagram van de hardware maken
4. Plan van aanpak maken

---

## K5: Je kan software schrijven voor een intelligente controller voorzien van actuatoren en sensoren.

Nog niet aan begonnen.

Hoe ik dit ga doen:

1. K4 afronden
2. Software schrijven voor de intelligente controller
3. Testen van de software