Cursussen/Courses Codesnippets     Top 
Software Ontwikkeling - Programma code


1. Naamgeving
Tools: IDE editors (Android Studio, Visual Studio, Netbeans)
Editors (Notepad++, CodeLobster PHP edition, …), BlueJ
Goede naamgeving gebruiken
Bij het schrijven van programma code ga je veelvuldig zinvolle namen moeten kiezen voor variabelen, functies, bestanden, mappen e.d.
De naam van een variabele moet aangeven wat de mogelijke inhoud kan zijn bv. klantnaam, maandnummer, $actie, $fout, enz … Lusvariabelen en parameters mogen verkorte namen krijgen: $x, y, s1, enz. Hun betekenis wordt duidelijk door de gebruikte structuur of hun toewijzing aan andere variabelen in het programma.
Afhankelijk van de programmeertaal die je gebruikt zijn er mogelijk verschillen. In PHP bv. begint een variabelenaam met een $-teken.
Nog enkele standaard regels voor de naamgeving:
• er mogen geen spaties in staan;
• woorden mogen samengevoegd worden met een liggend streepje (underscore);
• je kan woorden samenvoegen en elk woord met een hoofdletter laten beginnen (CamelCase);
• je kan voorvoegsels gebruiken bv. strNaam, lvcontacten (lv=ListView), btngo (btn=Button), …;
De namen van functies of methodes bevatten meestal een werkwoord zoals bv. get_connection(), setNaam(), find_by_name(), refresh_screen(), enz…
De namen van programmabestanden moeten ook zorgvuldig gekozen worden. Uit de naam moet kunnen afgeleid worden over welk onderdeel van het project het gaat bv. “categorie.php” bevat een beschrijving van de klasse Categorie, “validation_controller.php” bevat functies om gegevens te valideren, “ContactenFragment.java” bevat de fragment code voor het beheer van de contacten, enz…
De namen van de mappen kan je kiezen in functie van de verzameling van bestanden die erin vervat zit bv. in een “controllers” map worden de controllersbestanden geplaatst als je gebruik maakt van het MVC framework, in een “src” map vind je source-code bestanden, enz…


2. Geschikte programma structuren gebruiken
Bij het schrijven van programma’s maak je gebruik van bepaalde structuren.
Zo zal je meermaals een selectie uitvoeren om een bepaalde voorwaarde te testen (if – then – else – endif). Het programmaverloop wordt dan bepaalt door het resultaat van de test.
Bij het gebruik van meer dan 2 geneste if-statements is het aanbevolen om een switch - case (of select - case) structuur te gebruiken.
Sommige programmaregels moeten meermaals uitgevoerd worden. Hiervoor gebruik je dan de iteraties (for – next, foreach, do while, do until, while loop).
In een programma worden gegevens tijdelijk bijgehouden in variabelen. Je kan ook gebruik maken van opslagstructuren zoals bv. een array, een arraylist, een structure of een object.


3. Modulaire opbouw gebruiken
Je kan procedures en functies gebruiken die meermaals kunnen aangeroepen worden (ook vanuit een lusstructuur). Hierdoor wordt het programma leesbaarder.
Door modules (functies of procedures) te gebruiken is het programma beter te onderhouden (een aanpassing moet maar op 1 plaats gebeuren).
Het gebruik van object-georiënteerde programmeertalen en methodes zorgt ervoor dat gegevens die bij mekaar horen vlot kunnen verwerkt worden bv. een categorie object kan vlot doorgegeven worden tussen stukken programmacode, een lijst samenstellen op basis van een array van objecten is gemakkelijk te verwezenlijken.
Als je merkt dat je dezelfde programmaregels enkele keren kopieert en plakt dan kan je overwegen om er een functie voor te maken.


4. MVC framework
Een typisch MVC framework bestaat uit Models, Views en Controllers.
De gebruiker start een actie in een formulier of lijst door op een knop te klikken.
In de Models map bevinden zich de datamodellen. Deze klassen beschrijven de structuur van de gegevens.
In de Views map worden de gebruikersinterface onderdelen geplaatst zoals de formulieren, lijsten en algemene layout scripts.
In de Controllers map worden de controller klassen ondergebracht. Deze klassen bevatten methodes om een formulier, een lijst of een detailscherm te tonen.
De index pagina van een website die is uitgewerkt met het MVC framework bevat code om de juiste controller en de juiste view op te halen en te tonen aan de gebruiker.
De controller en view worden in de URL meegegeven. Als dat niet het geval is wordt de startpagina (home) getoond.
De layout wordt ingevoegd en in het content gedeelte wordt de code ingevoegd om de juiste controller en view op te halen.
De methode in de controller klasse die overeenkomt met de view wordt uitgevoerd. In deze methode worden de gegevens uit de database gehaald en in de eigenschappen van een model klasse gezet.
Dan wordt de view ingevoegd en in de view worden de eigenschappen van het model object (of objecten array in het geval van een lijst) getoond in het formulier.
Als de gebruiker dan op een knop (of hyperlink) in het formulier klikt wordt de actie uitgevoerd die daarbij hoort (verwerking van het formulier, sortering of paginering van de lijst).
De mappenstructuur is compact en in elke map kan een verdere onderverdeling per module gebeuren.
De besturingsprogramma’s vind je terug in de “controllers” map. De database programma’s vind je in de “models” map en de gebruikersinterface programma’s (formulieren, lijsten, layout) vind je in de “views” map.


5. Responsive, mobile first design toepassen
Bij het ontwerpen van een website moet je rekening houden met de verschillende weergave mogelijkheden die de gebruiker heeft. Een website op een smartphone ziet er anders uit dan op een tablet of op een laptop of PC.
De ontwerpblokken kunnen naast mekaar weergegeven worden als er ruimte is op het beeldscherm (PC, laptop of tablet in liggende stand). Als de ruimte op het beeldscherm te gering is (tablet in staande stand of smartphone) dan worden de ontwerpblokken onder mekaar weergegeven.
De navigatie menu kan weergegeven worden of verborgen worden achter een knop.
Als op de knop geklikt of gedrukt wordt dan worden de menu-items onder mekaar weergegeven.
Het “responsive mobile first” ontwerp wordt uitgewerkt door gebruik te maken van de juiste stijl elementen van het CSS-bestand (bv. w3.css). In de layout html wordt dan de volgende code opgenomen:
<head>
   <meta name='viewport' content='width=device-width,initial-scale=1,maximum-scale=1'>
   <link rel='stylesheet' href='views/css/w3.css'>
   <script src='views/scripts/navigatie.js'></script>
   …
</head>


6. Bibliotheken gebruiken
Op het internet kan je veel (klasse)bibliotheken vinden. Hierbij is het belangrijk dat je de juiste versie van de programmeertaal gebruikt.
Hoe je de bibliotheek gebruikt kan je lezen in de bijgeleverde handleiding of “readme” tekst.
De meeste bibliotheken zijn uitvoerig getest en besparen je dus vele uren programmeerwerk. Je moet het wiel niet opnieuw gaan uitvinden, niet?


7. Testen
Het build proces
Als de programma code volledig is en er staan geen “syntax”-fouten meer in dan kan je het project laten “builden”.
Dit “build” proces houdt in dat de broncode wordt gecompileerd volgens de gebruikte programmeertaal. Het resultaat is dan een uitvoerbaar programma of een tussentijdse vertaling van de broncode (intermediate language).
De ontwikkelomgeving gaat de tussentijdse vertaling samenvoegen met code uit de gebruikte noodzakelijke bibliotheken.
Aan het einde van het build proces kan je de applicatie uitvoeren.
Android Studio produceert een *.apk bestand dat kan geïnstalleerd worden op een tablet of smartphone met het besturingssysteem Android.
Visual Studio produceert een *.exe bestand dat kan uitgevoerd worden op een laptop of PC met het besturingssysteem Windows.
Nota: sommige programmeertalen worden geïnterpreteerd wat betekent dat de programmaregels direct worden vertaald en uitgevoerd.
Debuggen
In een IDE (Integrated Development Environment) zijn de nodige voorzieningen getroffen om de programmacode te testen op fouten (in de “Debug” menu-ingang).
Door in de programma code “breakpoints” te plaatsen kan je de uitvoering van het programma tijdelijk onderbreken om de inhoud van de variabelen en opslagstructuren te controleren.
Je kan daarna (of van in het begin) stapsgewijs verder door het programma gaan en daarbij stukken code binnengaan (“step into”). Bij een functie aanroep kan je beslissen om de regels van de functie één voor één te laten uitvoeren om eventuele logische fouten op te sporen.
Je kan ook beslissen om de functie in zijn geheel te laten uitvoeren (“step over”). Als je merkt dat er geen fouten aanwezig zijn bij het uitvoeren van enkele regels van de functie dan kan je uit de functie stappen (“step out”).
In het onderstaande voorbeeld wordt het Debug panel van Android Studio getoond tijdens een debug sessie. De inhoud van enkele variabelen wordt getoond.
Loggen
Tijdens het uitvoeren van een programma in de ontwikkelomgeving wordt er ook een log-bestand bijgehouden van alle operaties die uitgevoerd werden. Men spreekt hier van een “trace” of “backtrace” waarmee men wil aangeven dat je in de lijst terug kunt gaan naar de vorige stappen die werden uitgevoerd.
In Android Studio wordt hiervoor het “Logcat” venster gebruikt. In dit venster verschijnen ook de “run-time” fouten. Dit zijn onvoorziene fouten die optreden bij de uitvoering van het programma. Hierdoor stopt het programma en wordt er bv. op het Android apparaat een foutmelding getoond.
In het onderstaande voorbeeld is het programma gestopt omdat er een “String resource ID” niet werd gevonden (“ResourcesNotFoundException”).
Testmodules schrijven
Tijdens de uitvoering van een programma kan je tussentijdse inhoud van variabelen op het scherm tonen bv. in PHP met het “echo” of “var_dump” commando, in java voor Android met het “Toast” object, in C# (Visual Studio) met een “MessageBox.Show()” instructie.
In grote projecten wordt hier handig gebruik van gemaakt. Men schrijft dan speciale testmodules of test programma’s die de inhoud van de variabelen tonen in de verschillende omstandigheden die in het te testen programma zijn voorzien.
Door in het testprogramma variabelen een verschillende waarde te geven kan men nagaan hoe het te testen programma reageert op deze waarden. Men kiest bv. waarden die toegelaten zijn en waarden die niet toegelaten zijn.
Als men het bereik van een numerieke variabele wil testen zal men de hoogste en de laagste waarden invullen en het testprogramma laten lopen.