Start tot program – Werken met datastructuren

print

Inhoud


Wat vooraf ging

U hebt reeds kennis gemaakt met de anatomie van een computerprogramma en het programma in goede banen geleid via de control flow.

Dit is het laatste deel in de reeks Start to program. We gaan nog even snel kennis maken met een aantal structuren. Meer bepaald:

  • Lijsten (array)
  • Objecten
  • Databanken

Dit zijn drie belangrijke begrippen, waar u zeker kennis mee moet maken, maar het zijn ook begrippen die naargelang de gekozen programmeertaal specifiek behandeld zullen worden.

  • Lijsten zijn nog vrij “basis” en worden ook wat uitgebreider behandeld.
  • Objecten zijn essentieel in een objectgeoriënteerde programmeertaal en zullen binnen deze objectgeoriënteerde programmeertaal uitgebreid aan bod komen maar worden hier slechts geduid.
  • Databanken zijn eveneens een essentieel begrip maar er zijn zoveel specifieke manieren om met databanken te werken dat hiervoor een afzonderlijke module is uitgetrokken.

Het is dus niet de bedoeling om in de module Start to program reeds diep in te gaan op deze begrippen, maar u moet er wel weet van hebben en dat is de doelstelling van deze post.

Ik ga opnieuw gebruik maken van App lab en van de goede ondersteunende video’s. log u in op App lab (eventueel Game lab) en we kunnen eraan beginnen.


Lijsten (arrays)

 

Opmerking: de gebruikte functies insertItem(), appendItem() en removeItem() zijn eigen aan App lab en geen standaard Javascript-functies.

Lijsten worden gebruikt wanneer u meerdere waarden aan eenzelfde variabele wenst toe te kennen.

In het geheugen van de computer staan alle elementen van de lijst na elkaar. De index van het element bepaalt de volgorde, het rangnummer, van het element binnen de lijst/array.

Werken zonder array

Voorbeeld 1 (zonder gebruik te maken van een array)

Stel, u wilt 5 willekeurige getallen bijhouden met een waarde tussen 1 en 6.
//Verwerking
var Getal1 = Math.floor(Math.random() * 6) + 1;
var Getal2 = Math.floor(Math.random() * 6) + 1;
var Getal3 = Math.floor(Math.random() * 6) + 1;
var Getal4 = Math.floor(Math.random() * 6) + 1;
var Getal5 = Math.floor(Math.random() * 6) + 1;

//Uitvoer
var Tekst = "";
Tekst += Getal1 + " - ";
Tekst += Getal2 + " - ";
Tekst += Getal3 + " - ";
Tekst += Getal4 + " - ";
Tekst += Getal5;

write(Tekst)

Het genereren van een willekeurig getal is reeds besproken.

In dit voorbeeld willen we slechts 5 willekeurige getallen genereren, maar stel nu dat u er 100 wilt, of 1000, of… Hebt u zin om er aan te beginnen op deze manier?

De oplossing ligt hem in het gebruik van een lijst/array. Een array wordt immers gebruikt om “meerdere waarden aan eenzelfde variabele toe te kennen” en dat is nu net wat we wensen te doen. We wensen een variabele Getal meerdere, gelijkaardige, waarden toe te kennen.

Werken met een array

De array declareren

Eerst moeten we de array declareren. Dit kan op 2 manieren:

var arraynaam = new Array();

var arraynaam = [];

Om redenen van eenvoud, maar ook een paar technische die ik voorlopig even buiten beschouwing laat, is de tweede methode te verkiezen. We gaan dan ook verder met de var arraynaam = []; methode.

De array kan initieel leeg zijn:

var Getallen = [];

Of de array kan initieel opgevuld worden met waarden:

var Vestigingen = ["Ninove", "Oudenaarde", "Zottegem"];

Elementen binnen een array aanspreken

Na het declareren van de array kunnen de elementen met hun index aangesproken worden. Dit gebeurt als volgt:

arraynaam[index];

Het eerste element in een array heeft index = 0.

De waarde van elementen binnen een array wijzigen of toevoegen

Om de waarde van elementen binnen een array te wijzigen gebruiken we onderstaande code:

arraynaam[index] = waarde;

Bijvoorbeeeld:

Getallen[0] = Math.floor(Math.random() * 6) + 1;
Getallen[1] = Math.floor(Math.random() * 6) + 1;

Indien er zich op dat index-nummer nog geen waarde bevindt wordt de waarde op dat index-nummer toegevoegd. Bevat dat index-nummer reeds een waarde dan wordt die waarde gewijzigd in de nieuwe, toegekende, waarde.

Voorbeeld 2 (met een array)

Stel, u wilt 5 willekeurige getallen bijhouden met een waarde tussen 1 en 6.
//Declaratie array
var Getallen = [];

//Verwerking
Getallen[0] = Math.floor(Math.random() * 6) + 1;
Getallen[1] = Math.floor(Math.random() * 6) + 1;
Getallen[2] = Math.floor(Math.random() * 6) + 1;
Getallen[3] = Math.floor(Math.random() * 6) + 1;
Getallen[4] = Math.floor(Math.random() * 6) + 1;

//Uitvoer
var Tekst = "";
Tekst += Getallen[0] + " - ";
Tekst += Getallen[1] + " - ";
Tekst += Getallen[2] + " - ";
Tekst += Getallen[3] + " - ";
Tekst += Getallen[4];

write(Tekst)

Ok, we gebruiken nu een array, maar waar is de winst want uiteindelijk moet er nog steeds evenveel getypt worden.

Wel, de winst komt er als we de array opvullen en weergeven gebruikmakend van een lus.

Lussen gebruiken om een array op te vullen en weer te geven

 

We kunnen de array opvullen met willekeurige getallen gebruikmakend van een lus.

var AantalGetallen = 4;
for (var x = 0; x <= AantalGetallen; x++) {
Getallen[x] = Math.floor(Math.random() * 6) + 1;
}

Door de waarde van de variabele AantalGetallen te wijzigen kan u zoveel getallen toevoegen als u wenst.

We kunnen ook een lus gebruiken om de elementen binnen een array één voor één weer te geven:

Let op dat u voor AantalGetallen eentje minder neemt dan het getal dat u wenst omdat u moet beginnen te tellen bij 0. Vandaar AantalGetallen = 4.

Indien u liever toch AantalGetallen = 5 gebruikt, dat kan, maar denkt er dan aan dat u de lus moet doorlopen zolang de waarde van x kleiner is dan het AantalGetallen. U moet dus het =-teken verwijderen.

for (var x = 0; x < Aantalgetallen; x++)

In plaats van de waarde van de variabele kan je ook de lengte van de array opvragen, eens deze gekend is. Dit doe je met de code:

arraynaam.length

Bijvoorbeeld:

for (var y = 0; y < Getallen.length; y++) {
Tekst += Getallen[y] + " - ";
}

Aangezien de indexering begint bij 0 zal de lengte steeds 1 hoger zijn dan de hoogste index.

Voorbeeld 3 (met een array en een lus)

Stel, u wilt 5 willekeurige getallen bijhouden met een waarde tussen 1 en 6.
//Declaratie array
var Getallen = [];

//Verwerking
var AantalGetallen = 4;
for (var x = 0; x <= AantalGetallen; x++) {
	Getallen[x] = Math.floor(Math.random() * 6) + 1;
}

//Uitvoer
var Tekst = "";
for (var y = 0; y < Getallen.length; y++) {
	Tekst += Getallen [y] + " - ";
}

write(Tekst)

Lijsten sorteren

Alfabetisch sorteren van A naar Z

Een array alfabetisch sorteren van A naar Z kan door gebruik te maken van de sort() methode. De syntax is:

NaamArray.sort();

Alfabetisch sorteren van Z naar A

Om een array alfabetisch te sorteren van Z naar A voeren we eerst een sort() uit en nadien gebruiken we de reverse() methode om de volgorde om te keren. De syntax is:

NaamArray.sort();
NaamArray.reverse();

Numerieke waarden sorteren

Om numerieke waarden (getallen) te sorteren kan ook de sort() methode gebruikt worden maar moet tevens, binnen de sort() methode wordt een functie geplaatst die aangeeft hoe de sortering (van klein naar groot of van groot naar klein) moet gebeuren. De functie krijgt 2 parameters mee (bv. a en b) en de return-waarde bepaalt de volgorde.

De syntax voor het sorteren van numerieke waarden

van klein naar groot (stijgend of op zijn Engels Ascending) is:

NaamArray.sort(function(a, b){return a-b});

van groot naar klein (dalend of op zijn Engels Descending) is:

NaamArray.sort(function(a, b){return b-a});

Voorbeeld 4 (met een array en een lus en gesorteerd)

Stel, u wilt 5 willekeurige getallen bijhouden met een waarde tussen 1 en 6.
//Declaratie array
var Getallen = [];

//Verwerking
var AantalGetallen = 4;
for (var x = 0; x <= AantalGetallen; x++) {
	Getallen[x] = Math.floor(Math.random() * 6) + 1;
}

//Sorteren
Getallen.sort(function(a, b){return a-b});

//Uitvoer
var Tekst = "";
for (var y = 0; y < Getallen.length; y++) {
	Tekst += Getallen [y] + " - ";
}

write(Tekst)

Het sorteren gebeurt uiteraard nadat de waarden zijn ingelezen en toegekend aan de array en voor de waarden worden weergegeven.

Een array updaten (Javascript)

We hebben reeds gezien dat de gebruikte functies insertItem(), appendItem() en removeItem() uit bovenstaande video eigen zijn aan App lab en geen standaard Javascript-functies.

Misschien toch even kort aanhalen hoe u dit in Javascript kunt doen (en dus ook in App lab).

Elementen toevoegen met de push() methode

Om elementen aan een array toe te voegen kent javaScript de push() methode. Het voordeel is dat u zelf geen index-nummer moet meegeven en dat de push() methode altijd het volgende vrije index-nummer neemt zodat u een mooi oplopende reeks van index-nummers krijgt. De syntax is:

NaamArray.push(waarde);

Voorbeeld:

var Vestigingen = ["Ninove", "Oudenaarde", "Zottegem"];
Vestigingen.push("Nieuwe vestiging");
write(Vestigingen);

Met bovenstaande code wordt “Nieuwe vestiging” toegevoegd aan de array Vestigingen op index 3.

De push() methode voegt elementen achteraan de array toe.Indien u echter een element aan het begin van de array wilt invoegen (en de andere elementen opschuiven naar achteren) dan kan de unshift() methode gebruikt worden.

Getallen.unshift();

Technisch: de unshift() methode voegt een element op index 0 in en verhoogt de indexen van alle andere elementen met 1.

Elementen verwijderen met de pop() methode

Om het laatste element uit een array te verwijderen kent JavaScript de pop() methode. De syntax is:

NaamArray.pop();

Voorbeeld:

var Vestigingen = ["Ninove", "Oudenaarde", "Zottegem"];
Vestigingen.pop();
write(Vestigingen);

De pop() methode verwijderd het laatste element van de array.Indien u echter het eerste element van de array wilt verwijderen (en de andere elementen opschuiven naar voren) dan kan de shift() methode gebruikt worden.

Getallen.shift();

Technisch: de shift() methode verwijdert het element op index 0 in en verlaagt de indexen van alle andere elementen met 1.

Elementen van een array verbinden met een specifiek teken

Met write(Vestigingen) wordt de array weergegeven met de elementen gescheiden door een komma. Om de array expliciet als een string weer te geven kan je hem converteren naar het type string met de methode toString().

Vestigingen.toString()

Op zich wijzigt dit echter niets aan de uitvoer.

Wilt u geen komma’s zien tussen de elementen maar bv. Streepjes dan kan de methode join() gebruikt worden met tussen de haakjes (en tussen “”) het teken waarmee de elementen van de array verbonden (joined) moeten worden.

Vestigingen.join(" - ")

Voorbeeld:

var Vestigingen = ["Ninove", "Oudenaarde", "Zottegem"];
Vestigingen.push("Nieuwe vestiging");
write(Vestigingen.join(" - "));

Nagaan of een waarde in een array voorkomt

Om na te gaan of een waarde in een array voorkomt kan de methode indexOf() gebruikt worden. De methode indexOf() geeft de index terug waarde de waarde gevonden is. Staat de waarde niet in de array dan geeft indexOf() de waarde -1 terug.
NaamArray.indexOf(waarde);

Voorbeeld:

var Vestigingen = ["Ninove", "Oudenaarde", "Zottegem"];
var GevondenOp = Vestigingen.indexOf("Oudenaarde");
write(GevondenOp);

De variabele GevondenOp krijgt de waarde 1 in bovenstaand voorbeeld.


Objecten

 

Als u rondom u kijkt dan ziet u overal objecten.

Deze objecten hebben allemaal eigenschappen/properties en wellicht ook methoden (dingen die een object kan doen of dingen die u met een object kan doen).

Een wagen, een object, heeft een aantal eigenschappen/properties. Denk aan het merk, het model, het gewicht, de kleur,…

Een wagen heeft ook een aantal methoden. Denk aan starten, stoppen, rijden, remmen,….

Alle wagens hebben dezelfde eigenschappen/properties maar de waarden die aan deze eigenschappen worden toegekend kunnen verschillen. Sommige wagens zijn van het merk BMW en hebben een zwarte kleur, anderen zijn van het merk Fiat en hebben een rode kleur.

Alle wagens hebben dezelfde methoden maar een BMW zal anders starten, stoppen, rijden en remmen dan een Fiat.

Een object is een groep van gerelateerde eigenschappen die u gevarieerde waarden kunt toekennen.

Een object versus een variabele

Een variabele bevat 1 enkele waarde. Bijvoorbeeld:

var wagen = "BMW";

Een object is als een variabele maar bevat meerdere waarden. Bijvoorbeeld:

var wagen = {merk:"BMW", model:"X3", kleur:"blauw"};

U haalt nu een specifieke eigenschap op via:

objectName.propertyName

Bijvoorbeeld:

var wagen = {merk:"BMW", model:"X3", kleur:"blauw"};
write(wagen.kleur);

Van een lijst naar een object

Stel, u wilt niet enkel de vestigingen van het PCVO Dender en Schelde bijhouden maar ook hun adres en telefoonnummers.

U zou kunnen drie lijsten (steden, adressen en telefoonnummers) aanmaken en deze opvullen met de juisten waarden om deze vervolgens te doorlopen op basis van hun index.

De code ziet er ongeveer als volgt uit (de code br wordt gebruikt om naar een nieuwe regel te gaan):

//met een array
var steden = ["Ninove", "Oudenaarde", "Zottegem"];
var adressen = ["Centrumlaan 160", "Minderbroedersstraat 6", "Sabina van Beierenlaan 35"]
var telefoonnummers = ["054/31.78.60", "055/31.32.87", "09/360.19.93"]

for(x = 0; x <= 2; x++){
  
  write(steden[x] + " - " + adressen[x] + " - " + telefoonnummers[x])
}

U merkt wellicht zelf wel op dat het heel moeilijk is om de data synchroon te houden over deze arrays en hoe meer eigenschappen u wenst toe te voegen hoe moeilijker dit wordt.

Een object kan voor een oplossing zorgen.

Declareer eerst de array:

var vestigingen = [];

Maak vervolgens de objecten aan en voeg ze push() toe aan de array, bijvoorbeeld voor Ninove kan dit er als volgt uitzien:

Ninove = {stad: "Ninove", adres:"Centrumlaan 160", telefoon:"054/31.78.60"};
vestigingen.push(Ninove);

Gebruik opnieuw een lus om de array te doorlopen en verwijs naar de gewenste eigenschappen.

for(x = 0; x <= vestigingen.length; x++){
write(vestigingen[x].stad + " - " + vestigingen[x].adres + " - " + vestigingen[x].telefoon)
}

De volledige code wordt nu:

//met een object
var vestigingen = [];

Ninove = {stad: "Ninove", adres:"Centrumlaan 160", telefoon:"054/31.78.60"};
vestigingen.push(Ninove);

Oudenaarde = {stad: "Oudenaarde", adres:"Minderbroedersstraat 6", telefoon:"055/31.32.87"};
vestigingen.push(Oudenaarde);

Zottegem = {stad: "Zottegem", adres:"Sabina van Beierenlaan 35", telefoon:"09/360.19.93"};
vestigingen.push(Zottegem);


for(x = 0; x < vestigingen.length; x++){
  
  write(vestigingen[x].stad + " - " + vestigingen[x].adres + " - " + vestigingen[x].telefoon)
}

Deze code is weliswaar langer maar gemakkelijker uit te breiden en te synchroniseren en dus efficiënter in het onderhouden van de code.

U weet nu wat objecten zijn en hoe ze zich verhouden tegenover variabelen en lijsten. Als u zich verder verdiept in objectgeoriënteerd programmeren zult u ook zien hoe u methoden kunt toevoegen en hoe u een klasse kunt maken voor een object. Maar als kennismaking volstaat dit.


Databanken

 

Leren werken met databanken is een cursus op zich, we gaan hier dan ook slechts kennismaken met een aantal basisbegrippen.

Wat is een databank?

Het woord database wordt voor verschillende begrippen gebruikt:

  • De opgeslagen gegevens als zodanig.
  • De wijze waarop de gegevens zijn opgeslagen: datamodel.
  • De software waarmee databases kunnen worden aangemaakt en benaderd: Database management systeem (DBMS).

Een database (de opgeslagen gegevens als zodanig) moet aan de volgende minimale voorwaarden voldoen om als database gezien te worden.

  • Gegevens moeten eenvoudig kunnen worden opgeslagen.
  • Gegevens moeten eenvoudig kunnen worden opgezocht.
  • Gegevens moeten gewijzigd kunnen worden.
  • Gegevens moeten verwijderd kunnen worden zonder dat dit de werking van dat systeem nadelig beïnvloedt.
  • Gegevens mogen niet dubbel worden opgeslagen.

Een database, gegevensbank of databank is een digitaal opgeslagen archief, ingericht met het oog op flexibele raadpleging en gebruik.

Wat is een tabel?

Een databank bevat meestal meerdere tabellen. Iedere tabel bevat de gegevens die in deze tabel thuis horen.

Zo bevat een tabel TblCursisten gegevens over cursisten, een tabel Tblleerkrachten gegevens over leerkrachten, een tabel TblOpleidingen gegevens over de opleidingen, een tabel TblCursus gegevens over de cursus waarin een opleiding wordt gegeven door een leerkracht op een bepaald moment in een bepaald lokaal. Een tabel TblCursistenInCursus kan dan een tabel zijn die gegevens bevat over de cursisten die een cursus volgen.

  • Een tabel bestaat uit kolommen en uit rijen.
  • Kolommen bepalen welke gegevens de tabel gaat bijhouden (naam, voornaam, functie, adres,…). Iedere kolom is van een bepaald datatype (tekst, numeriek, datum,…).
  • Rijen zijn de unieke voorkomens binnen de tabel. Een unieke cursist binnen de tabel TblCursist, een unieke werknemer binnen de tabel TblWerkemer, een unieke factuur binnen de tabel TblFactuur,… Een rij wordt ook een record genoemd.
  • De kruising van een kolom met een rij is een veld. Een veld mag al dan niet Null (leeg) zijn. Indien het niet leeg is moet de inhoud van het veld van het gekozen datatype van die kolom zijn.
  • Iedere tabel heeft een sleutelveld, een primary key. Dit sleutelveld is uniek binnen de tabel en duidt het record op een eenduidige, ondubbelzinnige manier. Vaak is een sleutelveld een veld dat automatisch genummerd wordt. Een primary key kan ook samengesteld zijn uit meerdere velden. De combinatie van deze velden dient in dit geval uniek te zijn.

Server-based, cloud-based of file-based databank?

Server-based

Server-based databanken zijn databanksystemen zoals SQL Server, Oracle, MySQL,…

Een server-based databanksysteem draait op een specifieke server, heeft gevorderde functionaliteiten betreffende onderhoud, beveiliging, schaalbaarheid, ontwikkeling,…. Hiermee gaat een grote complexiteit gepaard waardoor een server-based databanksysteem vaak zijn eigen administrator heeft.

Een server-based databank is de keuze die u maakt indien uw website/app een professionele databank nodig heeft en/of indien de databank niet enkel voor die website/app dient maar ook voor andere websites, applicaties,… gebruikt moet kunnen worden.

Vanuit uw website/app dient u een connectie te leggen met deze server-based databank die ergens gehost staat.Een server-based databank kan, maar moet niet, op het internet gehost worden.

cloud-based

Is een server-based databank gehost op het internet (of anders verwoord, in de cloud) dan spreken we van cloud-based. Een cloud-based databank hoeft niet persé de complexiteit te hebben van een server-based databank, een cloud-based databank kan vrij eenvoudig gehouden worden. ik denk dan aan de easy tables van Microsoft Azure die gebruikt worden in de opleiding mobiele apps programmeren met Xamarin.

File-based

File-based databanken zijn databanksystemen zoals Microsoft Access of SQL Server Compact.

In een file-based databanksysteem wordt de databank bewaard in een bestand. Dit bestand kan gewoon deel uitmaken van het bestandensysteem van uw website/app. Met andere woorden, de databank draait lokaal.

Een file-based databanksysteem heeft slechts beperkte functionaliteiten betreffende onderhoud, schaalbaarheid, beveiliging, ontwikkeling,… en heeft dan ook geen eigen administratie nodig. Het is een eenvoudig, toegankelijke maar beperkte databank, eerder voor persoonlijk gebruik (een persoonlijke website of app) dan voor professioneel gebruik.

 


Behandelde Basiscompetenties uit de module ICT Programmeren – Start to program

  • IC BC228 – kent de verschillende principes en onderdelen op basis waarvan een programma kan opgebouwd worden
  • IC BC237 – kan een eenvoudig programma wijzigen
  • IC BC239 – kan bij het programmeren een juiste logica volgen
  • IC BC240 – kan een eenvoudig programma maken
  • IC BC242 – kan een programma uittesten
  • IC BC243 – kan een programma documenteren
  • IC BC352 – begrijpt het systeem en de functies die achter een programma zitten

Real programmers count from 0

Geef een reactie

  • Abonneer je op deze website d.m.v. e-mail

    Voer je e-mailadres in om je in te schrijven op deze website en e-mailmeldingen te ontvangen van nieuwe berichten.