Computer Science General
Cover
1.5 Aanpak van projecten_SNE-2526(1).pdf
Summary
# De watervalmethode
De watervalmethode is een projectaanpak waarbij ontwikkelingsfasen sequentieel worden doorlopen, met een strikte volgorde en afsluiting van elke fase alvorens aan de volgende te beginnen [5](#page=5).
### 1.1 Kenmerken van de watervalmethode
De watervalmethode kenmerkt zich door een sequentiële en lineaire voortgang van projectfasen. Elke fase moet volledig zijn afgesloten voordat de volgende fase kan beginnen, wat vergelijkbaar is met een "vloeiende waterval". Indien een fout wordt ontdekt in een eerdere fase, is het noodzakelijk om terug te keren naar die specifieke fase om het probleem op te lossen en vervolgens alle daaropvolgende fasen opnieuw te doorlopen [5](#page=5).
Een cruciaal aspect is dat de scope, oftewel het afgebakende werk dat ontwikkeld zal worden, aan het begin van het project wordt vastgesteld en gedurende het project strikt wordt bewaakt. Het eindresultaat van het project wordt eveneens in de beginfase gedefinieerd. Een passend voorbeeld voor deze methode is de bouw van een huis, waarbij de fasen (ontwerp, fundering, ruwbouw, afwerking) duidelijk na elkaar komen [5](#page=5).
### 1.2 Voordelen van de watervalmethode
De watervalmethode biedt diverse voordelen voor zowel het team, het bedrijf als de klanten.
#### 1.2.1 Voordelen voor het team
* **Duidelijke structuur en planning:** De taken zijn per fase bekend en de volgorde en verwachtingen zijn helder voor iedereen binnen het team [8](#page=8).
* **Minder risico op misverstanden:** Elke fase wordt grondig gedocumenteerd en goedgekeurd, wat de kans op misverstanden verkleint [8](#page=8).
* **Focus op één fase:** Men werkt geconcentreerd aan één specifieke fase, met aandacht voor kwaliteit bij elke stap [8](#page=8).
* **Goede controle over budget en planning:** De methode faciliteert een efficiënte beheersing van het projectbudget en de tijdlijn [9](#page=9).
* **Duidelijke documentatie:** De uitgebreide documentatie is zeer nuttig voor de inwerking van nieuwe teamleden, audits en juridische kwesties [9](#page=9).
* **Minder afhankelijk van klantinteractie:** De ontwikkeling vereist minder intensieve interactie met de klant, wat tijd bespaart [9](#page=9).
#### 1.2.2 Voordelen voor het bedrijf
* **Klanten hebben een goed beeld:** Klanten krijgen aan het begin van het project een helder inzicht in wat zij mogen verwachten [10](#page=10).
* **Vaste planning en kosten:** De planning en de kosten worden aan het begin van het project vastgelegd [10](#page=10).
* **Uitgebreide documentatie:** Dit maakt het onderhoud van het project op de lange termijn eenvoudiger [10](#page=10).
#### 1.2.3 Voordelen voor de klanten
* **Duidelijk beeld van verwachtingen:** Aan het begin van het project is er een helder beeld van het te verwachten eindresultaat [10](#page=10).
* **Vaste planning en kosten:** De afspraken over de planning en kosten aan het begin van het project bieden zekerheid [10](#page=10).
* **Uitgebreide documentatie:** Dit draagt bij aan een beter begrip van het project en maakt onderhoud gemakkelijker [10](#page=10).
### 1.3 Nadelen van de watervalmethode
Ondanks de voordelen kent de watervalmethode ook significante nadelen.
#### 1.3.1 Nadelen voor het team
* **Weinig ruimte voor creativiteit:** De noodzaak om de gedocumenteerde specificaties te volgen, beperkt de creatieve vrijheid van het team [8](#page=8).
* **Hoge druk aan het einde:** Een groot deel van de test- en kwaliteitsborging wordt naar het einde van het project verschoven, wat kan leiden tot hoge druk [8](#page=8).
* **Tragere feedback:** De klant ziet het uiteindelijke resultaat pas laat in het project, waardoor feedback pas laat beschikbaar is [8](#page=8).
* **Weinig flexibiliteit bij veranderingen:** Wijzigingen tijdens het project zijn kostbaar in termen van tijd en geld [9](#page=9).
* **Fouten worden later ontdekt:** Problemen die pas in de testfase aan het licht komen, kunnen leiden tot aanzienlijke vertragingen en extra kosten [9](#page=9).
* **Lange tijd voor zichtbare resultaten:** Het duurt lang voordat er tastbare resultaten van het project zichtbaar zijn [9](#page=9).
#### 1.3.2 Nadelen voor het bedrijf
* **Weinig flexibiliteit bij veranderingen:** Het implementeren van wijzigingen is inefficiënt en leidt tot tijdsverlies en extra kosten [9](#page=9).
* **Fouten kunnen leiden tot vertraging/kosten:** Ontdekte fouten in latere fases kunnen de projectvoortgang belemmeren en de kosten opdrijven [9](#page=9).
* **Tragere oplevering van waarde:** De klant ervaart de waarde van het project pas aan het einde [10](#page=10).
#### 1.3.3 Nadelen voor de klanten
* **Weinig flexibiliteit bij wijzigingen:** Klanten ervaren beperkte mogelijkheden om tijdens het project wijzigingen aan te brengen [10](#page=10).
* **Latere feedbackmogelijkheden:** De klant ziet het eindresultaat pas laat, wat het risico op een mismatch tussen het resultaat en de initiële verwachtingen vergroot [10](#page=10).
* **Tragere oplevering van waarde:** De klant profiteert pas aan het einde van het project van de geleverde waarde [10](#page=10).
> **Tip:** De watervalmethode is het meest geschikt voor projecten met zeer duidelijke en stabiele vereisten, waarbij de kans op veranderingen gedurende het project klein is. Denk hierbij aan projecten waarbij de technologie volwassen is en de specificaties vooraf gedetailleerd en onomstotelijk vastgelegd kunnen worden [6](#page=6).
> **Voorbeeld:** De bouw van een standaard woning waarbij de architecturale plannen en materiaalkeuze volledig vastliggen, of de ontwikkeling van een softwarecomponent met zeer specifieke, onveranderlijke technische vereisten.
---
# Agile en scrum principes
Agile werken stelt organisaties in staat om veerkrachtig en duurzaam succesvol te zijn in dynamische omgevingen door snel in te spelen op veranderingen, nieuwe trends en klantwensen. Scrum is een specifieke methode die deze agile principes volgt om op een flexibele manier, met focus op teamwerk, producten te ontwikkelen [12](#page=12) [13](#page=13) [20](#page=20).
## 2.1 Wat is agile?
Agile, wat staat voor wendbaar, lenig en flexibel, is een benadering om projecten aan te pakken waarbij de organisatie, het projectteam, klantwensen en technische keuzes snel aangepast kunnen worden [13](#page=13).
### 2.1.1 Nuttigheid van agile werken
Agile werken biedt diverse voordelen:
* Het stelt organisaties in staat om goed in te spelen op veranderingen [14](#page=14).
* Het verbetert het inspelen op de behoeften van de klant [14](#page=14).
* Het maakt het mogelijk om zo snel mogelijk een kleine demo te geven en feedback te ontvangen [14](#page=14).
* Het resulteert sneller in een product dat klaar en bruikbaar is voor de klant [14](#page=14).
### 2.1.2 Voorbeeld van agile werken
De ontwikkeling van de Linux-kernel is een bekend voorbeeld van agile werken. Duizenden ontwikkelaars wereldwijd werken in korte iteraties, leveren regelmatig nieuwe versies in en verwerken snel feedback van de community. Deze continue samenwerking en aanpassing zorgen ervoor dat de kernel stabiel, veilig en up-to-date blijft met de noden van gebruikers en hardware-fabrikanten [14](#page=14).
### 2.1.3 Agile principes ervaren
De principes van agile werken kunnen worden ervaren door middel van oefeningen, zoals het "Agile balspel". De spelregels van dit spel omvatten onder andere dat iedereen de bal moet raken, de bal in de lucht moet zijn geweest, de bal de grond niet mag raken en de bal niet naar de directe buur mag worden doorgegeven [16](#page=16) [17](#page=17).
#### 2.1.3.1 Kernprincipes uit het balspel
Uit dit spel kunnen de volgende agile principes worden afgeleid:
* **Vertrouwen in het team**: Er is vertrouwen nodig dat iedereen zijn rol opneemt en men werkt samen [17](#page=17).
* **Zelforganisatie**: Het team neemt zelf beslissingen over hoe ze werken en opereert autonoom [17](#page=17).
* **Leren & aanpassen**: Continu kijken naar het verloop, evalueren, aanpassen en verbeteren leidt tot betere resultaten [17](#page=17).
* **Iteratief werken**: Dit betekent herhalend werken, waarbij schatten, plannen en verbeteren plaatsvinden binnen een afgesproken tijd [17](#page=17).
* **Focus op waarde voor de klant**: Zo goed mogelijk leveren wat waarde heeft voor de klant [17](#page=17).
> **Tip:** De term "iteratief" betekent dat het proces zich vele malen herhaalt [17](#page=17).
## 2.2 Wat is Scrum?
Scrum is een methode die de agile principes volgt en wordt gebruikt om op een flexibele manier (software)producten te maken. De term "scrum" is afkomstig uit rugby, waar het een manier is om een spel te hervatten na een kleine, technische overtreding en de nadruk ligt op teamwerk [20](#page=20).
### 2.2.1 Doel van Scrum
Het doel van Scrum is:
* In korte tijd werkende producten opleveren [21](#page=21).
* Snel duidelijkheid verschaffen of men goed bezig is [21](#page=21).
* Het risico verminderen dat de klant ontevreden is met het eindresultaat [21](#page=21).
* Snelle duidelijkheid over voortgang creëren [21](#page=21).
* Snelle communicatie tussen teamleden bevorderen [21](#page=21).
* Voortbouwen op inzichten die gedurende het proces worden verkregen [21](#page=21).
### 2.2.2 Kenmerken van Scrum
Scrum is een vast framework voor agile werken, gebaseerd op duidelijke principes en rollen. Het hanteert een vaste terminologie, waardoor bedrijven die Scrum toepassen dezelfde "taal" spreken. Het biedt structuur en houvast in projecten [22](#page=22).
> **Tip:** De volgende secties zullen dieper ingaan op de specifieke ceremonies, artefacten, rollen, user stories, epics, inschatting van werk, werkopvolging en uitdagingen en toepassingen binnen Scrum [19](#page=19).
---
# Scrum ceremonies en artefacts
Dit onderdeel van Scrum beschrijft de terugkerende gebeurtenissen (ceremonies) en de zichtbare resultaten (artefacten) die essentieel zijn voor het gestructureerd en efficiënt uitvoeren van een project [19](#page=19) [23](#page=23).
### 3.2.1 De rol van ceremonies in scrum
Scrum ceremonies zijn de vaste bijeenkomsten binnen een sprint die het team helpen om te communiceren, te plannen, te inspecteren en aan te passen [24](#page=24).
#### 3.2.1.1 Sprint Planning
* **Doel:** Aan het begin van elke sprint wordt het werk voor die sprint vastgelegd. Het team bepaalt welke Product Backlog Items (PBIs) ze kunnen realiseren binnen de komende sprint [36](#page=36) [42](#page=42).
* **Proces:** Het team selecteert de meest geprioriteerde items uit de Product Backlog en splitst deze op in gedetailleerde taken. Deze taken worden door het hele team ingeschat [36](#page=36).
* **Resultaat:** De Sprint Backlog wordt opgesteld, wat de planning voor de komende sprint vormt. Dit omvat de taken die gerealiseerd moeten worden [36](#page=36) [44](#page=44).
#### 3.2.1.2 Daily Stand-up (Daily Scrum)
* **Doel:** Een dagelijkse, korte bijeenkomst om de voortgang van het werk te bespreken en eventuele obstakels te identificeren [39](#page=39) [42](#page=42).
* **Proces:** Elk teamlid deelt drie kernpunten:
1. Wat heb ik bereikt sinds de vorige daily stand-up [39](#page=39) [40](#page=40) [44](#page=44)?
2. Wat ga ik vandaag doen en bereiken [39](#page=39) [40](#page=40) [44](#page=44)?
3. Verwacht ik problemen of uitdagingen, en wie kan me daarbij helpen [39](#page=39) [40](#page=40) [44](#page=44)?
* **Kenmerken:** De meeting moet kort gehouden worden, idealiter maximaal 10 tot 15 minuten. Details worden in een apart overleg besproken, met focus op vooruitgang en benodigde ondersteuning [39](#page=39).
#### 3.2.1.3 Sprint Review
* **Doel:** Aan het einde van de sprint wordt geëvalueerd of het sprintdoel is behaald, het voltooide werk wordt getoond, en feedback van de klant wordt verzameld [26](#page=26) [42](#page=42) [44](#page=44).
* **Proces:** Het team presenteert het opgeleverde deelproduct, bespreekt of alles is behaald, en noteert feedback [26](#page=26).
* **Agile balspel analoog:** Na elke poging werd gekeken wat er van het doel bereikt was en hoeveel balletjes er doorgegeven waren [26](#page=26).
#### 3.2.1.4 Sprint Retrospective
* **Doel:** Een interne teammeeting aan het einde van de sprint om het verloop en de geleerde lessen te bespreken en te verbeteren [27](#page=27) [42](#page=42) [44](#page=44).
* **Proces:** Het team bespreekt:
* Wat ging goed? Wat ging minder goed [27](#page=27) [44](#page=44)?
* Waarom gingen dingen zo, en wat hebben we ervan geleerd [27](#page=27)?
* Concrete acties worden afgesproken om samenwerking, processen en resultaten voor de volgende sprint te verbeteren [27](#page=27) [44](#page=44).
* **Agile balspel analoog:** Na elke poging besprak het team hoe ze het beter konden doen [27](#page=27).
> **Tip:** Alle Scrum ceremonies zijn verplicht uit te voeren wanneer Scrum wordt toegepast [42](#page=42).
### 3.2.2 De rol van artefacten in scrum
Scrum artefacten zijn de zichtbare middelen die informatie verschaffen over het werk en de voortgang van het project, en zorgen voor transparantie [29](#page=29) [30](#page=30).
#### 3.2.2.1 Product Backlog
* **Definitie:** Een dynamische, geprioritiseerde lijst van alle gewenste "punten" of werkzaamheden die ontwikkeld moeten worden gedurende het project [30](#page=30) [44](#page=44).
* **Product Backlog Item (PBI):** Elk individueel punt op de Product Backlog dat waarde toevoegt aan het product voor de klant. Deze worden vaak geformuleerd als user stories [30](#page=30).
* **Levensduur:** PBIs worden over meerdere sprints heen opgeleverd [30](#page=30) [44](#page=44).
> **Voorbeeld Product Backlog (kamer vernieuwing):**
> 1. Nieuwe gaming stoel [33](#page=33).
> 2. Opnieuw verven [33](#page=33).
> 3. Nieuwe gordijnen [33](#page=33).
> 4. Nieuwe posters [33](#page=33).
> 5. Grotere bureau [33](#page=33).
#### 3.2.2.2 Sprint Backlog
* **Definitie:** Een verzameling van taken die gerealiseerd moeten worden binnen één specifieke sprint [31](#page=31) [44](#page=44).
* **Relatie met Product Backlog:** De PBIs die worden opgenomen in een sprint, worden verder opgesplitst in gedetailleerde taken die in de Sprint Backlog worden genoteerd. Deze taken worden ingeschat door het hele team tijdens de Sprint Planning [31](#page=31) [36](#page=36) [44](#page=44).
* **Visueel Management:** De Sprint Backlog wordt vaak weergegeven op een scrumbord, waar taken visueel worden gemarkeerd in verschillende kolommen (bv. 'todo', 'doing', 'done') [37](#page=37) [38](#page=38) [41](#page=41).
> **Voorbeeld Sprint Backlog (sprint 1, kamer vernieuwing):**
> * Bureaustoel kiezen in winkel [33](#page=33).
> * Bureaustoel bestellen [33](#page=33).
> * Nieuwe verfkleur kiezen [33](#page=33).
> * Verf kopen [33](#page=33).
> * Plamuren [33](#page=33).
> * Verven [33](#page=33).
#### 3.2.2.3 Visueel Management (Scrumbord)
* **Definitie:** Het visueel inzichtelijk maken van taken en de voortgang daarvan [37](#page=37) [42](#page=42) [44](#page=44).
* **Doel:** Transparantie bieden over wat er nog gedaan moet worden, waarmee men bezig is, wat voltooid is, en welke punten later worden opgepakt [37](#page=37) [44](#page=44).
* **Gebruik:** Wordt dagelijks gebruikt tijdens de Daily Stand-up om de voortgang met het team te bespreken. Tijdens de Sprint Planning wordt het scrumbord klaargemaakt voor de volgende sprint [38](#page=38).
> **Tip:** Visueel management is een krachtige tool bij het toepassen van Scrum [37](#page=37).
---
### 3.2.3 De Sprint
Een sprint is een korte periode met een vaste lengte, typisch variërend van één tot vier weken, waarin een Scrumteam werkt aan het opleveren van een werkend en waardevol stuk software of product. Elke sprint heeft een duidelijk doel. Het leveren van een werkend product aan het einde van elke sprint is cruciaal [24](#page=24) [25](#page=25) [44](#page=44).
> **Agile balspel analoog:** Elke poging om zoveel mogelijk balletjes door te geven was een iteratie of een sprint, waarbij men aan het einde van elke poging keek naar de resultaten. In softwareontwikkeling betekent dit het ontwikkelen van een eerste stukje software of een bruikbaar product voor de klant [24](#page=24) [25](#page=25).
---
# Rollen en user stories in scrum
In scrum spelen specifieke rollen en de heldere formulering van user stories en epics een cruciale rol in het succesvol leveren van waarde [19](#page=19) [46](#page=46).
### 4.1 Rollen binnen een scrumteam
Scrum kent drie kernrollen die essentieel zijn voor het proces: de Product Owner, de Scrum Master en het Scrum Team [48](#page=48).
#### 4.1.1 Product Owner
De Product Owner is primair verantwoordelijk voor het maximaliseren van de waarde van het product dat door het Scrum Team wordt ontwikkeld [49](#page=49).
* **Verantwoordelijkheden:**
* Bepalen van de visie en prioriteiten van het product [49](#page=49).
* Motiveren van het team om de vastgestelde prioriteiten te realiseren [49](#page=49).
* Beheren van de product backlog [49](#page=49).
* Samenwerken met het Scrum Team en andere stakeholders [49](#page=49).
* Deelnemen aan de planningsmeetings en de sprint review [49](#page=49).
#### 4.1.2 Scrum Master
De Scrum Master is de procesexpert die ervoor zorgt dat het scrum proces goed verloopt en de spelregels worden nageleefd [50](#page=50).
* **Verantwoordelijkheden:**
* Organiseren van de scrum ceremonies (zoals de Daily Scrum en Retrospective) [50](#page=50).
* Wegnemen van storende elementen om het team te helpen focussen op de sprint [50](#page=50).
* Coachen van het Scrum Team om productiever te worden, fungerend als raadgever en inspirator [50](#page=50).
* Zorgen dat het scrum proces goed verloopt en de spelregels bekend zijn [50](#page=50).
#### 4.1.3 Scrum Team
Het Scrum Team is een multidisciplinaire groep die verantwoordelijk is voor het leveren van een werkend product aan het einde van elke sprint [51](#page=51).
* **Kenmerken:**
* Multidisciplinair samengesteld: leden beschikken over verschillende kennis en vaardigheden die nodig zijn voor softwareontwikkeling [51](#page=51).
* Verantwoordelijk voor het afleveren van productwaarde [52](#page=52).
* Bestraaft bij voorkeur maximaal negen personen [52](#page=52).
* Is zelfsturend en organiseert zichzelf [52](#page=52).
* Voert al het werk uit dat nodig is om het product klaar te krijgen, inclusief analyse, ontwerp, ontwikkeling, testen en documentatie [52](#page=52).
* **Factoren voor een succesvol Scrum Team:**
* Toewijding [53](#page=53).
* Focus [53](#page=53).
* Openheid [53](#page=53).
* Respect [53](#page=53).
* Moed/kwetsbaarheid [53](#page=53).
#### 4.1.4 Vergelijking met Waterval
In tegenstelling tot traditionele methoden zoals Waterval, werkt Scrum met een geïntegreerd Scrum Team, een Product Owner (die geen lid is van het team) en een Scrum Master, wat verschilt van de structuur van een projectteam in een Watervalmodel [54](#page=54).
### 4.2 User Stories en Epics
User stories en epics zijn concepten die worden gebruikt om werk te definiëren en te organiseren binnen een agile omgeving zoals Scrum [55](#page=55).
#### 4.2.1 User Stories
Een User Story is een korte, eenvoudige beschrijving van een behoefte van een eindgebruiker, geschreven vanuit hun perspectief [56](#page=56).
* **Doel:**
* Duidelijk maken wat een eindgebruiker wil of nodig heeft, en waarom [56](#page=56).
* De waarde voor de gebruiker of klant beschrijven, niet de oplossing [56](#page=56).
* **Formaat:**
Een user story volgt een gestandaardiseerd formaat:
* Als `` `` [56](#page=56).
* Wil ik `` [56](#page=56).
* Zodat `` [56](#page=56).
> **Voorbeeld:** "Als zorgverlener wil ik inzicht in de medicatiehistoriek van de patiënt, zodat ik bij twijfel de nieuw voorgeschreven dosering gemakkelijk kan verifiëren." [56](#page=56).
* **Totale Waarde:**
* Alle user stories op de product backlog vertegenwoordigen de totale waarde van een project [58](#page=58).
* Met elke user story wordt een stukje waarde geleverd aan de eindgebruiker/klant [58](#page=58).
* **Creatie en Implementatie:**
* Een user story wordt geschreven door een Product Owner of business analist en genoteerd op de product backlog [58](#page=58).
* Een agile development team/Scrum team neemt user stories van de product backlog, werkt ze uit en levert ze op in een sprint [58](#page=58).
#### 4.2.2 Epics
Een Epic is een grotere eenheid van werk die meerdere user stories kan verzamelen en groeperen [59](#page=59).
* **Kenmerken:**
* Beschrijft grote stukken werk, vergelijkbaar met een "grote user story" [59](#page=59).
* Verzamelt meerdere user stories onder een groter thema [59](#page=59).
* Geeft samenhang aan user stories [59](#page=59).
* Is groter en minder specifiek dan een individuele user story, die gericht is op één functionaliteit [59](#page=59).
* **Gebruik van Epics:**
* Handig bij het maken van grote producten, door het werk op te delen [60](#page=60).
* Helpt bij het faseren en geeft stakeholders een helder overzicht [60](#page=60).
* Kan worden gebruikt om user stories te groeperen per soort gebruiker [60](#page=60).
* **Sprint Planning:**
* Aan één epic kan in meerdere sprints gewerkt worden [60](#page=60).
* Een user story daarentegen moet idealiter in één sprint afgerond kunnen worden [60](#page=60).
> **Voorbeeld Epic:** "aantrekkelijke en gebruiksvriendelijke interface" [62](#page=62).
> **Bijbehorende User Stories:**
> * Als gebruiker wil ik dat de belangrijkste knoppen en menu’s duidelijk zichtbaar zijn, zodat ik snel kan vinden wat ik zoek [62](#page=62).
> * Als gebruiker wil ik dat titels, subtitels en tekstblokken logisch geordend en visueel onderscheiden zijn, zodat ik de informatie gemakkelijk kan verwerken [62](#page=62).
> * Als gebruiker wil ik dat de interface zich automatisch aanpast aan verschillende schermgroottes (desktop, tablet, mobiel), zodat ik overal dezelfde gebruikservaring heb [62](#page=62).
> **Voorbeeld Epic:** "gebruikersaccount beheren" [63](#page=63).
> **Bijbehorende User Stories:**
> * Als gebruiker wil ik mijn wachtwoord kunnen resetten zodat ik gemakkelijk en snel een nieuw wachtwoord heb als dat nodig is [63](#page=63).
> * Als gebruiker wil ik mijn e-mail adres kunnen bijwerken zodat ik zelf kan zorgen dat mijn e-mail adres altijd up to date is in mijn persoonlijke account [63](#page=63).
> * Als gebruiker wil ik mijn profielfoto kunnen uploaden zodat ik altijd een foto naar keuze kan gebruiken [63](#page=63).
* **Relatie tot Project:**
Een epic kan worden gezien als een belangrijk onderdeel van een groter project, waarbij meerdere epics samen de scope van een project kunnen definiëren [61](#page=61) [66](#page=66).
> **Tip:** Het is belangrijk om onderscheid te maken tussen de omvang van een project, een epic en een user story. Een epic is nuttig om grote stukken werk te structureren en te visualiseren voor stakeholders, maar mag niet te groot zijn om in meerdere sprints te worden afgerond. User stories daarentegen moeten klein genoeg zijn om in één sprint te kunnen worden gerealiseerd. Het correct definiëren van epics draagt bij aan een succesvol project door helderheid en focus te bieden, terwijl slecht gedefinieerde epics tot problemen kunnen leiden [65](#page=65).
---
# Werkinschattingen, werkopvolging en uitdagingen van scrum
Dit onderwerp behandelt de unieke benaderingen van werkinschatting en voortgangsbewaking binnen het Scrum-framework, evenals de inherente uitdagingen en diverse toepassingen ervan.
### 5.1 Werkinschattingen in scrum
In tegenstelling tot klassieke projectmethodes die werk inschatten in absolute tijdseenheden zoals mandagen, manuren, of Euro, hanteert Scrum een systeem van relatieve inschattingen. Dit houdt in dat werkitems worden ingeschat op basis van hun grootte of complexiteit, door ze te vergelijken met reeds bekende of ingeschatte items [68](#page=68) [70](#page=70).
#### 5.1.1 Relatieve inschattingen
Relatieve inschattingen in Scrum maken gebruik van "punten" (story points) als een abstracte eenheid voor het inschatten van werk. Vaak worden T-shirtmaten (XS, S, M, L, XL) gebruikt als een meer tastbaar referentiepunt voor deze inschattingen. Deze methode vergelijkt de omvang of complexiteit van een taak met die van een ander bekend item [73](#page=73).
> **Voorbeeld:** Het ene gebouw is dubbel zo hoog als het andere, of het ontwerpen van een affiche kost dubbel zoveel tijd als het maken van schetsen [70](#page=70).
#### 5.1.2 Wanneer werkinschattingen in scrum?
Werkinschattingen worden primair gedaan tijdens de sprintplanningsmeeting, in samenwerking met het hele team en de Product Owner. Hierbij wordt bepaald wat er in de komende sprint kan worden gedaan, waarbij de hoogst geprioriteerde items uit de product backlog worden genomen. De Product Owner geeft uitleg bij user stories, waarna deze worden ingeschat. Het team bespreekt vervolgens welk werk ze realistisch kunnen oppakken en stelt het sprintdoel vast. Gedetailleerde taken worden besproken en opgesplitst, en elke taak op de sprint backlog wordt ingeschat [75](#page=75).
Een best practice is om user stories vooraf in te schatten tijdens backlog refinement (ook wel grooming genoemd), wat de sprintplanning efficiënter maakt [75](#page=75).
#### 5.1.3 Vergelijking Waterval vs. Scrum voor inschattingen
| Kenmerk | Waterval | Scrum |
|----------------|-------------------------------------------------------------------------|----------------------------------------------------------------------|
| Wat? | Schatting in absolute waarde (uren, werkdagen, manuren, etc.) | Relatieve inschatting (T-shirt size, Story points) | [87](#page=87).
| Bv. | Gebouw B is 4 meter hoog | Gebouw B is dubbel zo hoog als gebouw A | [87](#page=87).
| Bv. | Het maken van schetsen kost 2 uur tijd | Het ontwerpen kost dubbel zoveel tijd als schetsen | [87](#page=87).
| Wanneer? | Begin van het project (en herzien) | Tijdens sprintplanningsmeeting, begin van elke sprint | [87](#page=87).
### 5.2 Werkopvolging
De gemaakte werkinschattingen vormen de basis voor de opvolging van de projectvoortgang. Dit wordt door het team gemonitord met behulp van een burndown chart [78](#page=78).
#### 5.2.1 Burndown chart
Een burndown chart is een grafische weergave van de resterende hoeveelheid werk ten opzichte van de beschikbare tijd. Het biedt visuele informatie voor dagelijkse projectmonitoring, waarbij zowel het totale resterende werk als het werk voor de huidige sprint kan worden weergegeven [78](#page=78) [79](#page=79).
De burndown chart toont twee lijnen:
* Een lijn die het "resterende werk" aangeeft [79](#page=79).
* Een lijn die de "ideale voortgang" weergeeft [79](#page=79).
#### 5.2.2 Interpretatie van de burndown chart
* Als de lijn van het resterende werk (vaak blauw) onder de lijn van de ideale voortgang (vaak rood) ligt, loopt het project voor op schema [80](#page=80).
* Als de lijn van het resterende werk boven de lijn van de ideale voortgang ligt, loopt het project achter op schema [80](#page=80).
### 5.3 Uitdagingen en toepassingen van scrum
#### 5.3.1 Uitdagingen in scrum
Het werken met Scrum brengt diverse uitdagingen met zich mee:
* **Leercurve:** Er is een leercurve in het proces zelf en in het omgaan met problemen [84](#page=84).
* **Teamontwikkeling:** Het team moet groeien; goede samenwerking en het leren benutten van vrijheden zijn cruciaal [84](#page=84).
* **Organisatie-integratie:** Omgaan met de rest van de organisatie die mogelijk niet volgens Scrum werkt [84](#page=84).
* **Focus behouden:** Managers buiten het team mogen zich niet bemoeien met de dagelijkse werkzaamheden, en prioriteiten mogen niet zomaar veranderen zonder overleg met de Product Owner en voor de volgende sprint [84](#page=84).
* **Omgaan met verandering:** Goed leren omgaan met voortdurende veranderingen, voortkomend uit feedback en bijgestelde prioriteiten [84](#page=84).
* **Visie behouden:** Aandacht blijven hebben voor het "grotere plaatje" en de langetermijndoelen, zowel voor de klant als voor de herbruikbaarheid en uitbreidbaarheid van de oplossing [84](#page=84).
#### 5.3.2 Succesfactoren in scrum
* **Mensen:**
* De Product Owner moet nauw betrokken zijn bij de business [85](#page=85).
* Scrumteams mogen niet te groot zijn [85](#page=85).
* Samenwerken in één ruimte of via video-meetings is bevorderlijk [85](#page=85).
* **Organisatie:**
* Betrokkenen in de organisatie moeten de Scrum-gedachte omarmen [85](#page=85).
* Goede, open en proactieve communicatie is essentieel [85](#page=85).
* Succesvolle opleveringen moeten gevierd worden om de betrokkenheid te behouden [85](#page=85).
* **Proces:**
* Het project moet goed worden opgedeeld in kleine stukken per sprint [85](#page=85).
* Schattingen, demo's en retrospectives moeten effectief gebruikt worden om te leren en direct toe te passen [85](#page=85).
#### 5.3.3 Toepassingen van scrum
Scrum wordt niet alleen toegepast in IT-ontwikkeling, maar ook daarbuiten [86](#page=86).
* **IT-ontwikkeling:**
* Softwareontwikkeling [86](#page=86).
* Online toepassingen [86](#page=86).
* Ontwikkeling van apps [86](#page=86).
* Ontwikkeling in samenwerking met infrastructuurteams (DevOps) [86](#page=86).
* **Buiten IT:**
* Productontwikkeling (bv. Fitbit, Lego) [86](#page=86).
* Marketingcampagnes [86](#page=86).
* HR-afdelingen [86](#page=86).
##### 5.3.3.1 Toepassingen in infrastructuurprojecten
Scrum kan ook toegepast worden in infrastructuurprojecten, zoals grootschalige migraties van on-premise systemen naar de cloud. Hierbij kan de Product Backlog dienen als een lijst van te migreren systemen en de Sprint Backlog voor de taken binnen een sprint. Sprint Planning bepaalt wat er in een migratiefase gebeurt, Daily Stand-ups monitoren de voortgang en lossen blokkades op, en Sprint Retrospectives evalueren en verbeteren het proces voor de volgende fase. Hoewel niet iedereen het een goed idee vindt, wordt het potentieel ervan erkend [87](#page=87).
##### 5.3.3.2 Voorbeelden van scrum-implementatie
Er zijn diverse praktijkvoorbeelden van Scrum-implementaties:
* Implementatie bij Intracto voor klant Habufa [89](#page=89).
* Het DOTS platform van Attentia (HR bedrijf) [89](#page=89).
* Het opzetten van een benefit (marketing) [89](#page=89).
Bij deze voorbeelden kan men de herkenbare Scrum-terminologie identificeren en analyseren hoe iteratief gewerkt wordt en welke "waarde" een sprint levert [89](#page=89).
---
# Kanban als agile werkmethode
Kanban is een visueel werkmanagementsysteem dat helpt bij het organiseren en verbeteren van taken binnen een agile context, met een focus op continue flow en efficiëntie [97](#page=97).
### 4.1 Introductie tot Kanban
Kanban is oorspronkelijk afkomstig uit Japan en werd in de jaren '40 ontwikkeld bij Tokyo om productieprocessen te optimaliseren. Tegenwoordig wordt het veelvuldig toegepast in projectmanagement, softwareontwikkeling en agile werken als een methode voor visueel werkmanagement [97](#page=97).
### 4.2 Principes van Kanban
De kernprincipes van Kanban zijn ontworpen om werk efficiënter te maken door visualisatie, beperking van onderhanden werk, focus op flow en continue verbetering [98](#page=98).
#### 4.2.1 Visualiseer het werk met een Kanban bord
Een essentieel onderdeel van Kanban is het visualiseren van het werk op een Kanban-bord. Dit bord bestaat typisch uit kolommen zoals 'todo' (te doen), 'ongoing' (bezig) en 'done' (klaar), hoewel de kolommen aangepast kunnen worden aan de specifieke categorieën van werk. Taken worden van links naar rechts door de kolommen verplaatst naarmate ze vorderen [98](#page=98).
> **Voorbeeld:**
> Een IT development project kan kolommen hebben zoals 'TODO', 'ONGOING', 'DONE' met taken zoals 'Website design', 'Bug 404 onderzoeken', 'Alle koppelingen bouwen', 'Documentatie', 'Login pagina', 'Database opzetten' [99](#page=99).
>
> Een IT infrastructuur project kan bijvoorbeeld 'TODO', 'ONGOING', 'DONE' kolommen gebruiken, met taken zoals 'Documentatie', 'Overdracht naar beheer', 'Firewall rules instellen', 'Rack installatie'. Soms worden taken ook per categorie van werk opgehangen, zoals 'Ontwerp netwerkarchitectuur', 'Capaciteitsplanning', 'Implementatie', 'Aankoop servers, firewall en switches', 'Testen', 'Afronding', 'Netwerk-configuratie', 'Load tests uitvoeren', 'Failover testen' [100](#page=100).
>
> Een Helpdesk kan een Kanban-bord gebruiken met 'TODO', 'ONGOING', 'DONE', en ook een 'ON HOLD' kolom. Taken kunnen specifieke ticketnummers hebben zoals 'Ticket #1042 Printer werkt niet op 3de verdieping' in 'TODO'. Een taak kan toegewezen worden aan een persoon in de 'ONGOING' kolom, zoals 'Ticket #1039 E-mail synchronisatieprobleem' aan Kurt. De 'ON HOLD' kolom kan worden gebruikt voor taken zoals 'Ticket #1038 Gebruiker moet logbestanden aanleveren', wat aangeeft dat er gewacht wordt op de gebruiker .
#### 4.2.2 Beperk Work in Progress (WIP)
Een cruciaal principe is het beperken van het aantal taken dat tegelijkertijd in een kolom mag worden uitgevoerd (Work in Progress - WIP). Dit voorkomt dat teams overbelast raken met te veel taken tegelijk, wat de afrondingssnelheid ten goede komt [98](#page=98).
#### 4.2.3 Focus op de flow
Het primaire doel van Kanban is het waarborgen van een soepele doorstroming van werk, van de initiële 'todo' fase naar 'ongoing' en uiteindelijk naar 'done', met minimale vertragingen en obstakels [98](#page=98).
#### 4.2.4 Continu verbeteren
Kanban teams evalueren regelmatig hun processen om knelpunten te identificeren en te bespreken hoe zij zich verder kunnen verbeteren en beter kunnen organiseren [98](#page=98).
### 4.3 Kanban versus Scrum
Hoewel Kanban en Scrum beide agile werkmethode zijn, verschillen ze op verschillende punten, met name in hun focus op sprints en doorlopende levering .
| Kenmerken | Scrum | Kanban |
| :----------------- | :--------------------------------------- | :----------------------------------------- |
| **Opzet** | Werken in vaste sprints met periodieke oplevering; Sprint Backlog aanwezig. | Continue planning en oplevering; geen Sprint Backlog. |
| **Terminologie** | Scrum Master (verplicht), Daily Scrum, Sprint Review (einde sprint), Sprint Retrospective (einde sprint). | Agile coach (optioneel), Daily stand-up, Demo (wanneer het past), Retrospective (periodiek). |
| **Visueel management** | Scrumbord: linker kolom wordt opgevuld bij start sprint en is leeg bij einde sprint; bevat geplande items. | Kanban-bord: linker kolom wordt continu aangevuld; bevat WIP items en blijft altijd (aan)gevuld. |
Scrum focust op de levering aan het einde van een sprint, terwijl Kanban zich richt op de continue flow van werk. In Kanban kan op elk moment werk worden toegevoegd, en er zijn geen sprints, met de bedoeling om werk zo snel mogelijk af te ronden [98](#page=98).
> **Tip:** Het belangrijkste verschil ligt in de focus: Scrum is gericht op het cyclisch leveren van waarde binnen vaste tijdsblokken (sprints), terwijl Kanban zich concentreert op het optimaliseren van de doorstroming van werk en het minimaliseren van doorlooptijden [98](#page=98).
---
## Veelgemaakte fouten om te vermijden
- Bestudeer alle onderwerpen grondig voor examens
- Let op formules en belangrijke definities
- Oefen met de voorbeelden in elke sectie
- Memoriseer niet zonder de onderliggende concepten te begrijpen
Glossary
| Term | Definition |
|------|------------|
| Watervalmethode | Een lineaire projectmanagementmethode waarbij fasen opeenvolgend worden doorlopen, van analyse tot onderhoud, zonder terugkeer naar eerdere fasen tenzij er fouten worden ontdekt. |
| Agile | Een verzamelnaam voor flexibele en adaptieve werkwijzen, gericht op snelle reactie op veranderingen en continue verbetering, met de nadruk op samenwerking en klantwaarde. |
| Scrum | Een iteratief en incrementeel raamwerk voor projecten, gebaseerd op agile principes, dat teams helpt om complexe producten te ontwikkelen met behulp van korte sprints, duidelijke rollen, ceremonies en artefacten. |
| Kanban | Een agile werkmethode die zich richt op het visualiseren van werkstromen, het beperken van werk in uitvoering (WIP) en het continu verbeteren van de doorstroming van taken, zonder de vaste cycli van sprints. |
| Sprint | Een korte, afgebakende tijdsperiode (meestal 1 tot 4 weken) waarin een scrumteam werkt aan een deel van een product, met als doel een werkend en waardevol stuk software of product op te leveren. |
| Sprint Backlog | Een verzameling taken die zijn afgeleid van de product backlog en die door het scrumteam worden uitgevoerd binnen één specifieke sprint om het sprintdoel te realiseren. |
| Product Backlog | Een geprioritiseerde lijst van alle gewenste functionaliteiten, aanpassingen en verbeteringen voor een product, die in verschillende sprints worden opgeleverd. |
| Product Owner | De persoon binnen een scrumteam die verantwoordelijk is voor het maximaliseren van de waarde van het product door het beheren van de product backlog, het stellen van prioriteiten en het vertegenwoordigen van de klant. |
| Scrum Master | De persoon die het scrumteam begeleidt en faciliteert, ervoor zorgt dat de scrumregels worden gevolgd, obstakels wegneemt en het team helpt om efficiënter te werken. |
| Scrum Team | Een zelforganiserend, multidisciplinair team dat samen verantwoordelijk is voor het ontwikkelen van een werkend productdeel aan het einde van elke sprint. |
| User Story | Een korte, eenvoudige beschrijving van een behoefte of functionaliteit vanuit het perspectief van de eindgebruiker, inclusief het doel ("zodat") om de waarde ervan te duiden. |
| Epic | Een grote user story die een substantieel stuk werk beschrijft en die kan worden opgedeeld in meerdere kleinere user stories, vaak gebruikt om grotere thema's te structureren. |
| Daily Stand-up (Daily Scrum) | Een korte, dagelijkse bijeenkomst van het scrumteam om de voortgang te bespreken, het werk voor de dag te plannen en eventuele obstakels te identificeren. |
| Sprint Review | Een bijeenkomst aan het einde van een sprint waar het scrumteam het opgeleverde werk demonstreert aan de Product Owner en stakeholders om feedback te verzamelen. |
| Sprint Retrospective | Een bijeenkomst aan het einde van een sprint waar het team terugkijkt op het proces, leermomenten identificeert en concrete acties afspreekt om de samenwerking en effectiviteit te verbeteren. |
| Visueel Management | Het gebruik van visuele hulpmiddelen, zoals een kanban- of scrumbord, om de status van taken en de voortgang van het werk zichtbaar te maken voor het team en belanghebbenden. |
| Burndown Chart | Een grafiek die de voortgang van een project of sprint weergeeft door het resterende werk te plotten tegen de beschikbare tijd, wat helpt bij het volgen van de voortgang ten opzichte van het ideale pad. |
| Story Point | Een relatieve eenheid die gebruikt wordt om de omvang, complexiteit en inspanning van een taak of user story in te schatten, in plaats van absolute tijdseenheden zoals uren. |
| Work In Progress (WIP) Limiet | Een principe in Kanban waarbij het aantal taken dat tegelijkertijd in een specifieke kolom (bijvoorbeeld "ongoing") mag zijn, wordt beperkt om de doorstroming te bevorderen en teams te concentreren. |
Cover
16_Crypto_attacks_V4.pdf
Summary
# Soorten cryptografische aanvallen
Dit onderwerp behandelt verschillende categorieën van aanvallen op encryptiesystemen, gebaseerd op de beschikbare informatie van de aanvaller en de mogelijkheden die het systeem biedt [2](#page=2).
### 1.1 Categorieën van aanvallen op encryptiesystemen
Cryptografische aanvallen kunnen worden gecategoriseerd op basis van de hoeveelheid informatie die een aanvaller tot zijn beschikking heeft en de interactiemogelijkheden met het encryptiesysteem [2](#page=2).
#### 1.1.1 Op basis van beschikbare informatie
* **Ciphertext-only aanval:** De aanvaller heeft alleen de beschikking over de versleutelde tekst (ciphertext). Dit is de meest basale vorm van aanval [2](#page=2).
* **Known-plaintext aanval:** De aanvaller beschikt over één of enkele bekende klare teksten (plaintext) en hun bijbehorende versleutelde teksten. Dit biedt meer informatie dan een ciphertext-only aanval [2](#page=2).
* **Chosen-plaintext aanval:** De aanvaller heeft de mogelijkheid om één of enkele klare teksten naar keuze naar de encryptiemachine te sturen en de resulterende versleutelde teksten te verkrijgen. Dit kan eenmalig of adaptief zijn [2](#page=2).
* **Chosen-ciphertext aanval:** De aanvaller kan één of enkele versleutelde teksten naar keuze aanbieden en de bijbehorende gedecodeerde teksten opvragen. Dit kan ook adaptief zijn [2](#page=2).
#### 1.1.2 Op basis van interactiemogelijkheden
* **Adaptieve aanvallen:** Bij adaptieve aanvallen kan de aanvaller de selectie van plainteksten of cipherteksten aanpassen op basis van de resultaten die tussentijds zijn verkregen. Dit maakt de aanval dynamischer en potentieel krachtiger [2](#page=2).
* **Niet-adaptieve aanvallen:** De selectie van plainteksten of cipherteksten wordt vooraf bepaald zonder aanpassingen op basis van tussentijdse resultaten.
#### 1.1.3 Andere kwetsbaarheden
* **Ontwerpfouten of backdoors:** Kwetsbaarheden kunnen ook voortkomen uit fouten in het ontwerp van het encryptiealgoritme, de keuze van parameters (zoals modus van operatie, te beperkte sleutels, of verouderde paddingstandaarden), fouten in de implementatie, of zelfs opzettelijk ingebouwde backdoors in het protocol of de implementatie [2](#page=2) [3](#page=3).
### 1.2 Specifieke aanvalsvectoren op RSA
De documentatie besteedt specifieke aandacht aan aanvallen op het RSA-algoritme, waarbij verschillende kwetsbaarheden worden belicht.
#### 1.2.1 Kwetsbaarheid door te dichtbij gelegen priemgetallen $p$ en $q$
Een fundamenteel principe in RSA is dat de priemgetallen $p$ en $q$, waaruit de modulus $n=p \times q$ wordt gevormd, voldoende van elkaar gescheiden moeten zijn. Als $p$ en $q$ te dicht bij elkaar liggen, kunnen ze makkelijker worden gevonden [4](#page=4).
Een aanval kan gebaseerd zijn op de eigenschap dat als $p$ en $q$ dicht bij elkaar liggen, hun gemiddelde, $\frac{p+q}{2}$, dicht bij $\sqrt{n}$ ligt. Als men een getal zoekt waarvan het kwadraat groter is dan $n$ (de "close square root") en dit kwadraat gelijk is aan $(\frac{p+q}{2})^2$, dan kan men de waarden van $\frac{p+q}{2}$ en $\frac{p-q}{2}$ achterhalen. Door deze waarden op te tellen of af te trekken, kunnen $p$ en $q$ worden herleid [4](#page=4) [5](#page=5).
> **Tip:** Het is cruciaal dat $p$ en $q$ ruim voldoende van elkaar verschillen. Dit is een veelvoorkomende kwetsbaarheid die deel kan uitmaken van oefeningen en examens. Bestanden zoals `rsa_square_attack` kunnen worden gebruikt om deze aanvallen te simuleren [5](#page=5) [6](#page=6).
#### 1.2.2 Kwetsbaarheid door kleine waarden van $m$ en $e$
Als de exponent $e$ klein is en de berichtwaarde $M$ ook klein is, kan de versleuteling $C = M^e \pmod{n}$ eenvoudig worden gedecodeerd door de $e$-de wortel van $C$ te nemen. Dit is met name een risico wanneer RSA wordt gebruikt om sleutels van symmetrische algoritmen te versleutelen, omdat deze sleutels (zoals AES-256) aanzienlijk kleiner kunnen zijn dan de modulus $n$ [7](#page=7).
> **Oplossing:** Padding van het bericht voordat het wordt versleuteld, kan dit risico minimaliseren.
#### 1.2.3 ROCA-kwetsbaarheid (Return of the Coppersmith Attack)
De ROCA-kwetsbaarheid treft RSA-sleutelgeneratie in specifieke softwarebibliotheken, zoals die gebruikt werden in Infineon Trusted Platform Modules. Miljoenen smartcards bleken hierdoor getroffen te zijn. De kwetsbaarheid ontstaat doordat de gegenereerde priemgetallen een specifieke vorm hadden, wat aanvallers gemakkelijk konden uitbuiten. Met deze kwetsbaarheid kon zelfs een 2048-bit RSA-sleutel voor een relatief laag bedrag (bijvoorbeeld 1000 US dollars, via Amazon renting) gebroken worden [8](#page=8) [9](#page=9).
#### 1.2.4 Zwakke sleutels door onvoldoende random number generators
Wanneer willekeurige getallen (randomness) die gebruikt worden bij het genereren van $p$ en $q$ onvoldoende zijn, kunnen er zwakke sleutels ontstaan. Dit is herkenbaar aan gemeenschappelijke delers tussen verschillende moduli $n$ [10](#page=10).
De grootste gemene deler (GCD) tussen twee moduli $n_1 = p_1 \times q_1$ en $n_2 = p_2 \times q_2$ kan snel worden berekend met het Euclidische algoritme. Als $p_1 = p_2$ of $q_1 = q_2$, dan is de GCD direct de gemeenschappelijke priemfactor, waarna de andere factor eenvoudig kan worden berekend [10](#page=10).
Een efficiënte methode om dit te detecteren bij een grote set moduli is om de GCD van een modulus te berekenen met het product van alle andere moduli. Dit kan, dankzij het efficiënte Euclidische algoritme, relatief snel worden gedaan. De hoofdoorzaak van dit probleem ligt vaak bij apparaten met onvoldoende entropie of zwakke random number generators [10](#page=10) [11](#page=11).
#### 1.2.5 Problemen met Diffie-Hellman en Elgamal (veilige priemgetallen)
Hoewel de documentatie primair gericht is op RSA, wordt ook verwezen naar kwetsbaarheden in Diffie-Hellman en Elgamal, met name de "Logjam" aanval. Deze aanval maakt gebruik van hergebruikte priemgetallen en slecht geconfigureerde groepen [12](#page=12).
De oplossing hiervoor is het gebruik van "veilige priemgetallen" ($p$), waarbij $\frac{p-1}{2}$ ook een priemgetal is. Dit zorgt ervoor dat $p-1$, een cruciaal getal in berekeningen zoals die voor de discrete logaritme, minder gemeenschappelijke delers heeft (behalve 2). Veel gebruikte Diffie-Hellman groepen maken echter geen gebruik van veilige priemgetallen, waardoor kwetsbaarheden blijven bestaan [12](#page=12).
### 1.3 Side-channel aanvallen
Side-channel aanvallen maken gebruik van informatie die lekt uit de fysieke implementatie van cryptografische systemen, in plaats van directe wiskundige aanvallen op het algoritme zelf.
#### 1.3.1 Parity side-channel (of Least Significant Bit) aanval
Bij deze aanval wordt aangenomen dat er een "orakel" beschikbaar is dat kan bepalen wat de minst significante bit (parity) is van de plaintext achter een gegeven ciphertext. Als men $C = P^e \pmod{n}$ heeft, kan men door $C$ te vermenigvuldigen met $2^e \pmod{n}$ de plaintext $2P$ verkrijgen. Door het orakel opnieuw te gebruiken, kan men bepalen of $2P$ even of oneven is [13](#page=13).
De logica hierachter is als volgt:
* Als $P < n/2$, dan is $2P$ een even getal kleiner dan $n$. De parity van $2P \pmod{n}$ is even [13](#page=13).
* Als $P > n/2$, dan is $2P > n$ (maar kleiner dan $2n$). De berekening wordt $2P - n$. Aangezien $2P$ even is en $n$ oneven (omdat $n=p \times q$ met $p, q$ oneven priemgetallen), is $2P - n$ een oneven getal. De parity van $2P \pmod{n}$ is oneven [13](#page=13).
Door dit proces iteratief te herhalen met $4P$, $8P$, enzovoort (door $C$ te vermenigvuldigen met $4^e \pmod{n}$, $8^e \pmod{n}$, etc.), kan de aanvaller het bereik van $P$ steeds nauwkeuriger bepalen en uiteindelijk $P$ reconstrueren [13](#page=13) [14](#page=14).
> **Voorbeeld:** Een orakel kan bestaan als een website die controleert of men een loterij heeft gewonnen, en een foutmelding geeft als het gedecodeerde getal (dat de status van de loterij aangeeft) oneven is, terwijl dit onmogelijk zou mogen zijn. Een ander voorbeeld is een boerderij die alleen een even aantal eieren verkoopt; als een RSA-encryptie die het aantal eieren vertegenwoordigt, bij decodering een oneven getal oplevert, kan dit een foutindicatie zijn [14](#page=14).
---
# Differentiële en lineaire cryptanalyse
Dit gedeelte behandelt twee fundamentele cryptanalytische technieken: differentiële cryptanalyse en lineaire cryptanalyse, inclusief hun basisprincipes, toepassingen en de weerstand van algoritmen [22](#page=22).
### 2.1 Differentiële cryptanalyse
Differentiële cryptanalyse is een techniek die zich richt op het bestuderen van hoe verschillen (delta's) in invoerteksten zich voortplanten door een cryptografisch algoritme om informatie over de geheime sleutel te verkrijgen. Het belangrijkste idee is om paren van invoerteksten te kiezen die een bepaald verschil $\Delta X$ hebben, en vervolgens de overeenkomstige uitvoerteksten te observeren om te zien of deze ook een bepaald verschil $\Delta Y$ vertonen. Als er een consistente relatie is tussen $\Delta X$ en $\Delta Y$ voor specifieke stappen in het algoritme, kan dit worden uitgebuit om de sleutel te achterhalen [23](#page=23).
#### 2.1.1 Basisprincipes van differentiële cryptanalyse
* **Gedefinieerd verschil:** Het proces begint met het selecteren van een specifiek verschil $\Delta X$ tussen twee invoerteksten ($X_1$ en $X_2$, waarbij $X_1 \oplus X_2 = \Delta X$) [23](#page=23).
* **Observatie van uitvoerverschil:** Vervolgens worden de overeenkomstige uitvoerteksten ($Y_1$ en $Y_2$) geobserveerd, en het verschil $\Delta Y = Y_1 \oplus Y_2$ wordt berekend [23](#page=23).
* **Sleutel XOR-operatie:** Een belangrijke observatie is dat een XOR-operatie met een onbekende sleutel het verschil tussen twee teksten onveranderd laat; $\Delta Y = \Delta X$ als de sleutel gelijk is voor beide encrypties [23](#page=23).
* **Niet-lineaire componenten:** De uitdaging ligt in de niet-lineaire componenten van het algoritme (zoals S-boxen of niet-lineaire functies), waar de relatie tussen $\Delta X$ en $\Delta Y$ niet triviaal is en voorspeld moet worden [23](#page=23).
#### 2.1.2 Aanvalstype
Differentiële cryptanalyse is een *chosen-plaintext attack* (CPA). Dit betekent dat de aanvaller de mogelijkheid heeft om paren van invoerteksten te kiezen en de corresponderende uitvoerteksten te verkrijgen. De aanvaller selecteert een $\Delta X$ en kiest vervolgens twee willekeurige platte teksten $P_0$ en $P_1$ zodanig dat $P_1 = P_0 \oplus \Delta X$ [24](#page=24).
#### 2.1.3 Toepassing op FEAL-4
Het FEAL-4 algoritme wordt vaak gebruikt als een voorbeeld om differentiële cryptanalyse te illustreren vanwege de zwakheden die het vertoont [18](#page=18) [53](#page=53).
* **G-functie differentiële eigenschappen:** De G-functie in FEAL-4, die bestaat uit modulo-additie en een circulaire shift, vertoont specifieke differentiële eigenschappen. Bijvoorbeeld, een invoerverschil van $0 \times 80$ voor één byte in de G-functie kan leiden tot een uitvoerverschil van $0 \times 02$ na de circulaire shift. Een verschil van $0 \times 00$ leidt tot een verschil van $0 \times 00$ [21](#page=21) [25](#page=25).
* **Ronde-functie differentiële eigenschappen:** Door de differentiële eigenschappen van de G-functie te combineren, kan het differentiële gedrag van de gehele ronde-functie worden geanalyseerd. Met een invoerverschil van $0\times80800000$ voor de eerste vier bytes, en $0\times00000000$ voor de volgende vier bytes, wordt het uitvoerverschil $0\times02000000$ [26](#page=26).
* **Opbouw van het volledige pad van differentiëlen (Meet-in-the-Middle):** De aanval kan worden uitgebreid door de differentiële paden door meerdere rondes van het FEAL-4 algoritme te volgen. Hoewel de sleutel XOR-operaties de differentiëlen niet veranderen, kunnen de niet-lineaire rondes de voorspelling van het uitvoerverschil bemoeilijken. Een specifieke zwakte in FEAL-4 is dat een invoerverschil van $0\times80800000$ een uitvoerverschil van $0\times02000000$ genereert in de ronde-functie [27](#page=27).
* **Herstellen van de laatste ronde subkey:** Om de laatste ronde subkey te achterhalen, kan men gebruik maken van het berekende uitvoerverschil van de laatste ronde. Dit wordt verkregen door het linkergedeelte van de geëncrypteerde teksten van een paar af te trekken. Vervolgens kan elke mogelijke subkey worden getest door deze toe te passen op de invoer van de laatste ronde en te controleren of het resulterende uitvoerverschil overeenkomt met het berekende differentiële pad [28](#page=28) [29](#page=29).
* **Complexiteitsreductie:** Hoewel het brute-force zoeken naar alle subkeys extreem is ($2^{32}$ voor een 32-bit subkey), kan differentiële cryptanalyse de complexiteit drastisch reduceren. Voor FEAL-4 kan de zoekruimte voor de laatste subkey worden teruggebracht tot ongeveer $2^{16}$ combinaties door slim gebruik te maken van de structuur van de ronde-functie en het creëren van specifieke invoervariabelen die slechts afhankelijk zijn van twee bytes van de sleutel. De totale aanval op FEAL-4 kan worden uitgevoerd met een zoekruimte van $2^{17}$ voor alle subkeys [30](#page=30) [31](#page=31) [32](#page=32) [33](#page=33) [34](#page=34) [35](#page=35).
#### 2.1.4 Differentiële aanvallen met waarschijnlijkheden
In de praktijk zijn differentiële paden zelden met 100% zekerheid aanwezig. Als een specifiek verschil $\Delta X$ een hogere waarschijnlijkheid heeft om te resulteren in een bepaald $\Delta Y$, kan dit nog steeds worden uitgebuit. Het creëren van distributietafels voor mogelijke $\Delta X$ waarden helpt bij het identificeren van de meest interessante differentiëlen. De vereiste hoeveelheid plaintexts voor een aanval is omgekeerd evenredig met de waarschijnlijkheid van het differentiële pad [36](#page=36) [37](#page=37) [39](#page=39).
#### 2.1.5 Weerstand van algoritmen
* **FEAL-4:** Vertonen significante zwakheden tegen differentiële cryptanalyse. De zwakte ligt in de niet-lineaire componenten van de ronde-functie [18](#page=18) [21](#page=21) [53](#page=53).
* **AES:** De S-Box in AES is de primaire verdediging tegen differentiële cryptanalyse. Andere componenten van het algoritme dragen niet significant bij aan de differentiële waarschijnlijkheid. Met een 2-ronde limiet van $\pounds 2^{-24}$ en een 4-ronde limiet van $\pounds 2^{-96}$, wordt een differentiële aanval over 10 rondes onwaarschijnlijk [38](#page=38).
* **DES:** DES was ontworpen met aandacht voor differentiële weerstand, hoewel differentiële cryptanalyse pas later werd ontdekt [38](#page=38).
### 2.2 Lineaire cryptanalyse
Lineaire cryptanalyse is een techniek die tot doel heeft om probabilistische lineaire relaties te vinden tussen subsets van platte tekstbits en subsets van data-bits die voorafgaan aan de laatste ronde. Deze relaties gedragen zich op een niet-willekeurige manier en kunnen worden uitgebuit om informatie over de sleutel te verkrijgen [41](#page=41).
#### 2.2.1 Basisprincipes van lineaire cryptanalyse
* **Known-plaintext attack:** Lineaire cryptanalyse is typisch een *known-plaintext attack* (KPA). De aanvaller heeft een grote hoeveelheid platte tekst-cijfertekstparen tot zijn beschikking [41](#page=41).
* **Lineaire vergelijkingen:** Het doel is om lineaire vergelijkingen te vinden die de bitposities van platte teksten, cijferteksten en (een deel van) de sleutel met elkaar verbinden. Deze vergelijkingen zijn vaak van de vorm [40](#page=40) [42](#page=42):
$$ \sum_{i \in I} p_i \oplus \sum_{j \in J} c_j = \sum_{k \in K} k_k \pmod{2} $$
waarbij $p_i$, $c_j$, en $k_k$ specifieke bits van de platte tekst, cijfertekst, en sleutel zijn, en $I$, $J$, $K$ verzamelingen van bitindices [40](#page=40).
* **Partiële decryptie:** Voor elke kandidaat-sleutel wordt het algoritme gedeeltelijk gedecrypteerd, en wordt gecontroleerd of de gevonden lineaire relatie geldt [41](#page=41).
* **Sleutelherstel:** De kandidaat-sleutel die de relatie het vaakst en met de grootste afwijking van 0.5 benadert (d.w.z. het meest non-random gedrag vertoont), wordt beschouwd als de meest waarschijnlijke sleutel. De sleutel wordt vaak gevonden door het testen van specifieke bitposities van de sleutel, en niet de volledige sleutel, omdat niet alle bitposities in de vergelijking verschijnen [41](#page=41) [47](#page=47).
#### 2.2.2 Toepassing op FEAL-4
Lineaire cryptanalyse is zeer effectief tegen FEAL-4. Door de relatief simpele en lineaire aard van de ronde-functie, kunnen er lineaire vergelijkingen worden opgesteld die een hoge waarschijnlijkheid hebben om te gelden. Een voorbeeld van een dergelijke vergelijking is $X_3 \oplus X_4 \oplus Y_1 \oplus Y_4$ met een waarschijnlijkheid van 14 uit 16 om 1 te zijn. De analyse van FEAL-4 toonde aan dat met slechts 10 plaintexts en 2 seconden op een 1992 computer, de sleutel kon worden achterhaald [43](#page=43) [45](#page=45) [47](#page=47) [49](#page=49).
#### 2.2.3 Lineaire cryptanalyse in het algemeen
* **Probabilistische relaties:** Net als bij differentiële cryptanalyse, kan lineaire cryptanalyse ook werken met probabilistische relaties. Dit maakt het mogelijk om algoritmen met imperfecte S-boxen te analyseren [48](#page=48).
* **Robuustheid:** Het is moeilijk om lineaire cryptanalyse volledig te voorkomen wanneer het algoritme bekend is, maar de complexiteit kan aanzienlijk worden verhoogd [48](#page=48).
* **Niet-lineaire componenten:** De S-Box is de enige niet-lineaire component in AES en speelt een cruciale rol in de weerstand tegen lineaire cryptanalyse. Een typische aanpak is het vinden van een R-1 ronde lineaire benadering met een voldoende hoge waarschijnlijkheid om vervolgens de laatste subkey te herstellen [48](#page=48).
### 2.3 Confusion en Diffusion
Moderne blokcijfers gebruiken zowel *confusion* (verwarring) als *diffusion* (verspreiding) om hun veiligheid te waarborgen [52](#page=52).
* **Confusion:** Verbergt de relatie tussen de sleutel en de cijfertekst. In FEAL-4 wordt dit bereikt door de XOR van de sleutel ($K_i$) en de additie in de G-functie [52](#page=52).
* **Diffusion:** Verspreidt de invloed van één bit van de platte tekst of sleutel over zoveel mogelijk bits van de cijfertekst. In FEAL-4 gebeurt dit door het shiften van bytes in de F-functie en bits in G0, G1 [52](#page=52).
FEAL-4 wordt beschouwd als zwak in zowel diffusie als confusie, wat bijdraagt aan de kwetsbaarheid ervan voor cryptanalytische aanvallen [52](#page=52).
---
# Andere cryptanalytische technieken en aanvallen op implementaties
Dit onderwerp verkent diverse aanvalsvectoren buiten de standaard frequentie- of statistische analyses, waaronder side-channel attacks, invasieve aanvallen, black-bag cryptanalyse en dwangmatige decryptie, evenals de bijbehorende tegenmaatregelen.
### 3.1 Aanvallen die niet afhankelijk zijn van het aantal ronden
Sommige cryptanalytische technieken zijn effectief, ongeacht het aantal implementatieronden van een algoritme, wat ze bijzonder gevaarlijk maakt voor algoritmen die hier niet tegen beschermd zijn [58](#page=58).
#### 3.1.1 Boomerang attack
De boomerang attack is een uitbreiding van differentiële cryptanalyse. In plaats van één enkele, zeer waarschijnlijke differentiële patroon over het hele cijfer te proberen te dekken, zoekt de aanvaller naar twee waarschijnlijke patronen die niet noodzakelijk gerelateerd zijn, maar samen het hele cijfer bestrijken. Dit vermindert de complexiteit van de differentiële aanval aanzienlijk [58](#page=58).
* **Werking:** Een cijfer wordt gezien als een samenstelling van twee functies, $E_0$ en $E_1$, waarbij $E(P) = E_1(E_0(P))$. Er worden twee plaintexts $P$ en $P'$ gekozen, en hun corresponderende ciphertexts $C$ en $C'$ worden verkregen. Vervolgens worden varianten $C'$ en $D'$ gecreëerd uit $C$ en $D$ (bijvoorbeeld $C' = C \oplus \Delta$ en $D' = D \oplus \Delta$). Het doel is dat deze varianten, na decryptie, resulteren in $P'$ en $Q'$ [58](#page=58) [59](#page=59).
#### 3.1.2 Slide attack
De slide attack is voornamelijk van toepassing op cyclische key schedules. Als de key schedule cyclisch is, verhoogt het toevoegen van meer ronden de complexiteit van het algoritme niet significant, omdat er een relatie blijft bestaan tussen de ciphertexts die overeenkomen met gerelateerde plaintexts. Het is een techniek waarbij een relatie tussen twee plaintexts $P$ en $P'$ nog steeds zichtbaar is in de relatie tussen de bijbehorende ciphertexts $C$ en $C'$, wat een "slide pair" wordt genoemd [60](#page=60).
* **Tegenmaatregel:** Het gebruik van niet-cyclische key scheduling algoritmen en rondeconstanten kan weerstand bieden tegen slide attacks door voldoende variatie tussen de rondefuncties te creëren [60](#page=60).
#### 3.1.3 Related-key attack
Een related-key attack is elke vorm van cryptanalyse waarbij de aanvaller de werking van een cijfer onder verschillende, initieel onbekende sleutels kan observeren, waarbij er een bekende wiskundige relatie tussen deze sleutels bestaat. Deze aanvallen zijn vaak theoretisch, aangezien het onwaarschijnlijk is dat een aanvaller een cryptograaf kan overhalen om onder meerdere, op een bepaalde manier gerelateerde, geheime sleutels te versleutelen [61](#page=61).
### 3.2 Andere cryptanalytische aanvallen
Naast differentiële en lineaire cryptanalyse zijn er nog andere technieken die gebruikt kunnen worden.
* **Impossible Differential:** Een differentiële karakteristiek die optreedt met een kans van 0. Dit kan gebruikt worden om waarden voor sleutelbits te elimineren [62](#page=62).
* **Partial Differential:** Beschouwt differentiële patronen over minder dan het volledige blokformaat bits [62](#page=62).
* **Higher Order Differentials:** Verdergaande varianten van differentiële cryptanalyse [62](#page=62).
* **Davies' Attack:** Een statistische cryptanalytische methode, gebaseerd op een bekende-plaintext aanval, die de niet-uniforme distributie van outputs van aangrenzende S-boxes benut. Het werkt door de empirische distributie van bepaalde kenmerken te berekenen op basis van veel bekende plaintext/ciphertext-paren. Bits van de sleutel kunnen worden afgeleid, waarna de resterende bits met brute force worden gevonden. Deze aanval werd gebruikt tegen DES en andere Feistel-cijfers [63](#page=63).
* **Interpolation Attack:** Een aanval die de ciphertext uitdrukt als een polynoom van de plaintext. Als dit polynoom een relatief klein aantal onbekende coëfficiënten heeft, kan het worden gereconstrueerd met behulp van plaintext/ciphertext-paren. Dit geeft de aanvaller een representatie van de encryptie zonder exacte kennis van de geheime sleutel. Een probabilistische versie kan werken, zelfs als de algebraïsche relatie slechts voor een fractie van de waarden geldt. Nieuwe blokcijfers die ontworpen waren om resistent te zijn tegen differentiële en lineaire cryptanalyse, zoals KN-Cipher en SHARK, waren kwetsbaar voor deze aanval. Machine learning en deep learning worden in dit verband beschouwd als equivalente methoden om de beste benadering te vinden op basis van gewichten [64](#page=64).
* **Integral Cryptanalysis:** Een techniek die de gelijktijdige relatie tussen vele encrypties benut, in tegenstelling tot differentiële cryptanalyse die paren van encrypties beschouwt. Het maakt gebruik van sets of multisets van gekozen plaintexts waarbij een deel constant wordt gehouden en een ander deel alle mogelijkheden doorloopt. Bijvoorbeeld, een aanval kan 256 gekozen plaintexts gebruiken die op alle bits na 8 bits gelijk zijn, maar in die 8 bits verschillen. De XOR-som van deze set is 0, en de XOR-sommen van de corresponderende ciphertexts verschaffen informatie over de werking van het cijfer. Blokcijfers die resistent waren tegen differentiële en lineaire cryptanalyse bleken kwetsbaar voor deze aanval, zoals de SQUARE-aanval die leidde tot aanpassingen in AES. Deze aanval was oorspronkelijk bekend als de SQUARE attack, later omgedoopt tot saturation attack en integral cryptanalysis [65](#page=65).
### 3.3 Aanvallen op implementaties
Deze aanvallen richten zich niet op het cryptografische algoritme zelf, maar op de manier waarop het is geïmplementeerd. Het zijn eerder technische of engineeringproblemen dan puur wiskundige problemen [67](#page=67) [68](#page=68).
#### 3.3.1 Side-channel attacks
Side-channel attacks maken gebruik van informatie die lekt tijdens de fysieke uitvoering van cryptografische operaties. Deze aanvallen zijn niet-destructief [67](#page=67) [68](#page=68).
* **Typen:**
* **Timing attacks:** Analyseren van de tijd die nodig is voor cryptografische bewerkingen [68](#page=68).
* **Bandwidth attacks:** Meten van de bandbreedte die gebruikt wordt, bijvoorbeeld om woorden in een versleuteld VoIP-gesprek te detecteren op basis van de lengte van de gecodeerde berichten [70](#page=70).
* **Power analysis attacks:** Meten van het stroomverbruik tijdens de cryptografische operaties [68](#page=68).
* **Electromagnetic analysis attacks:** Analyseren van elektromagnetische straling die door het apparaat wordt uitgezonden [68](#page=68).
* **Acoustic attacks:** Gebruiken van geluidsgolven, bijvoorbeeld om RSA-decryptiesleutels te extraheren via akoestische analyse [71](#page=71).
* **Visible light attack:** Gebruiken van visueel licht, bijvoorbeeld door thermische beelden van een toetsenbord te maken om ingevoerde wachtwoorden te achterhalen [73](#page=73).
* **Error message attack:** Analyseren van foutmeldingen die door het systeem worden gegenereerd [68](#page=68).
* **Attack based on CPU cache misses:** Profiteren van cache-geheugen patronen [68](#page=68).
* **Memory attacks:** Lezen van geheugeninhoud zoals RAM, swap-bestanden of cache [77](#page=77).
* **Brain-computer interfaces (BCI):** Het extraheren van PIN-codes uit EEG-signalen [76](#page=76).
* **Voorbeelden van implementaties:**
* Detecteren van woorden in versleutelde VoIP-gesprekken door analyse van berichtlengtes [70](#page=70).
* Extraheren van RSA-decryptiesleutels via akoestische analyse of het meten van elektrische potentiaal [71](#page=71).
* Analyseren van elektromagnetische emissies van computers met behulp van kleine apparaten [72](#page=72).
* Gebruiken van thermische beelden van een toetsenbord om wachtwoorden te achterhalen [73](#page=73).
* Keyboard acoustic side channel attack om wachtwoorden te achterhalen door de unieke geluiden van toetsaanslagen te analyseren [74](#page=74).
* Meten van elektromagnetische of stroomvariaties van andere apparaten, zoals telefoons of smartcards, om geheime sleutels te stelen (bv. voor Bitcoin-wallets) [75](#page=75).
* PIN-extractie uit EEG-signalen via brain-computer interfaces [76](#page=76).
* Lezen van geheugen (RAM, swap, cache) na beëindiging van een programma, zelfs na overschrijving of in virtuele machines [77](#page=77).
* **Tegenmaatregelen tegen side-channel attacks:**
* **Preventie van ongeautoriseerde code en toegang:** Beperken van debug-toegang, beveiligen van bussen en geheugencomponenten, en verhogen van code-integriteit [75](#page=75).
* **Vermindering van lekkage:**
* **Randomisatie/blinding:** Verwerken van willekeurige waarden (bv. een basispunt gerandomiseerd met een willekeurig punt, vermenigvuldigen van ciphertext met een willekeurig getal voor exponentiatie) [75](#page=75).
* **Masking:** Toevoegen van een willekeurig masker aan input en sleutel, met mask-correctie aan het einde [75](#page=75).
* **Hiding:** Doorbreken van de relatie tussen verwerking en observatie, bijvoorbeeld door constante tijd te gebruiken voor exponentiatie [75](#page=75).
* **Shuffling:** Veranderen van de volgorde van berekeningen indien toegestaan [75](#page=75).
* **Verhogen van ruis:** Willekeurig invoegen van instructies die moeilijk te herkennen zijn in een trace, of toevoegen van willekeurige timingvariaties (hoewel met voldoende data er nog steeds een statistische relatie kan bestaan) [75](#page=75).
#### 3.3.2 Invasive attacks
Dit type aanval vereist fysieke toegang tot het apparaat en kan leiden tot permanente schade [78](#page=78).
* **Typen:**
* **Probing attacks:** Directe fysieke manipulatie of analyse van componenten [78](#page=78).
* **Fault induction attacks:** Induceren van fouten door middel van spanningsvariaties, kloksignalen, temperatuurveranderingen, straling of licht [78](#page=78).
#### 3.3.3 Black-bag cryptanalysis
Dit betreft het verkrijgen van cryptografische geheimen via inbraak. De aanvaller richt zich op het endpoint in plaats van op de wiskunde van het algoritme. Voorbeelden zijn het installeren van keyloggers of het onderscheppen van data voordat deze versleuteld wordt [80](#page=80).
#### 3.3.4 Compelled decryption
Dit is geen aanval op de cryptografie zelf, maar op de gebruiker of wetgeving. In sommige jurisdicties kan een verdachte gedwongen worden om inlogcodes van computersystemen of smartphones te verstrekken. Het recht om te zwijgen is niet absoluut en vereist medewerking van de verdachte onder bepaalde voorwaarden [81](#page=81).
#### 3.3.5 Rubber-hose cryptanalysis
Dit is een metafoor voor het met geweld verkrijgen van een cryptografische sleutel, bijvoorbeeld door marteling [82](#page=82).
* **Oplossing:** Plausibly deniable encryption, waarbij de bestaan van versleutelde data ontkend kan worden en er geen statistisch bewijs is van de aanwezigheid van echte data achter een reeks bytes. Een voorbeeld is een versleutelde map die met twee verschillende wachtwoorden geopend kan worden: één voor gevoelige foto's en één voor de echte geheimen [82](#page=82).
---
## Veelgemaakte fouten om te vermijden
- Bestudeer alle onderwerpen grondig voor examens
- Let op formules en belangrijke definities
- Oefen met de voorbeelden in elke sectie
- Memoriseer niet zonder de onderliggende concepten te begrijpen
Glossary
| Term | Definition |
|------|------------|
| Ciphertext-only aanval | Een type cryptografische aanval waarbij de aanvaller enkel toegang heeft tot de versleutelde tekst (ciphertext) en probeert om de oorspronkelijke platte tekst of de sleutel te achterhalen. |
| Bekende platte tekst aanval | Een cryptanalytische techniek waarbij de aanvaller zowel de versleutelde tekst (ciphertext) als de bijbehorende oorspronkelijke platte tekst (plaintext) kent. Dit helpt bij het afleiden van de cryptografische sleutel. |
| Gekozen platte tekst aanval | Een aanval waarbij de cryptanalist de mogelijkheid heeft om specifieke platte teksten te kiezen en deze te laten versleutelen door de cryptosysteem. De resulterende ciphertexts worden vervolgens geanalyseerd. |
| Adaptieve gekozen platte tekst aanval | Een geavanceerdere vorm van de gekozen platte tekst aanval, waarbij de aanvaller de keuze van de platte teksten kan aanpassen op basis van de tussentijdse resultaten die worden verkregen uit eerdere versleutelingen. |
| Gekozen ciphertext aanval | Een aanval waarbij de aanvaller de mogelijkheid heeft om specifieke ciphertexts te kiezen en deze te laten ontsleutelen door het cryptosysteem. De resultaten worden vervolgens gebruikt om de sleutel te achterhalen. |
| Adaptieve gekozen ciphertext aanval | Een variant van de gekozen ciphertext aanval waarbij de aanvaller de keuze van de ciphertexts kan aanpassen op basis van de tussentijdse resultaten van de ontsleutelingen. |
| Ontwerpfout encryptieschema of backdoor | Kwetsbaarheden die voortkomen uit fouten in het ontwerp van het encryptiealgoritme zelf of de implementatie ervan, of het bestaan van een "achterdeur" die door een aanvaller misbruikt kan worden. |
| RSA | Een van de eerste en meest gebruikte publieke-sleutel cryptosystemen, dat gebaseerd is op het wiskundige probleem van het ontbinden van grote getallen in priemfactoren. |
| Differentiële cryptanalyse | Een cryptanalytische techniek die zich richt op het analyseren van de verschillen (XOR) tussen de inputs en outputs van een cryptografisch algoritme. Het doel is om patronen te vinden die informatie over de geheime sleutel kunnen onthullen. |
| Lineaire cryptanalyse | Een cryptanalytische techniek die lineaire benaderingen gebruikt om de relatie tussen platte teksten, ciphertexts en sleutels te vinden. Het werkt door middel van statistische analyse van een groot aantal plaintext/ciphertext paren. |
| Feistelstructuur | Een symmetrische blokcijferarchitectuur die is opgebouwd uit meerdere rondes. Elke ronde splitst de data in twee helften, waarbij een functie wordt toegepast op één helft en het resultaat wordt gecombineerd met de andere helft. |
| Ronde functie | Het kernonderdeel van een blokcijfer dat in elke ronde wordt toegepast op de data. De complexiteit en veiligheid van het cijfer hangen sterk af van de eigenschappen van de ronde functie. |
| Subkey | Een deel van de hoofdsleutel dat in een specifieke ronde van een cryptografisch algoritme wordt gebruikt. Het afleiden van subkeys is vaak een doelwit van cryptanalisten. |
| Zijdeproblemen (Side-channel attacks) | Aanvallen die niet direct de wiskundige eigenschappen van het cryptografische algoritme exploiteren, maar in plaats daarvan informatie verkrijgen door het meten van fysieke eigenschappen van de implementatie, zoals stroomverbruik, timing of elektromagnetische straling. |
| Invasieve aanvallen | Een categorie van cryptanalytische aanvallen waarbij de aanvaller fysieke toegang verkrijgt tot de hardware van het cryptosysteem om deze te manipuleren of te analyseren, bijvoorbeeld door middel van het aanbrengen van fouten (fault induction) of directe probing. |
| Plausibel ontkenbare encryptie | Een encryptietechniek waarbij de aanwezigheid van versleutelde gegevens ontkend kan worden. Dit kan bijvoorbeeld door het gebruik van meerdere wachtwoorden, waarbij het ene wachtwoord gevoelige data onthult en het andere een valse of lege set data. |
| Gedoemde ontsleuteling | Een situatie waarin een verdachte wettelijk verplicht kan worden om toegang te verschaffen tot versleutelde gegevens, bijvoorbeeld door het verstrekken van wachtwoorden of pincodes. |
| Boemerang aanval | Een type cryptanalytische aanval dat een uitbreiding is van differentiële cryptanalyse. Het maakt gebruik van twee paren van plaintext/ciphertext om de kans op succes te vergroten, vooral bij algoritmen die weerstand bieden tegen standaard differentiële aanvallen. |
| Glijdende aanval (Slide attack) | Een aanval die voornamelijk gericht is op cryptografische algoritmen met cyclische sleutelgeneratie. De aanval maakt gebruik van de repetitieve aard van de sleutelplanning om de complexiteit te verminderen en de sleutel te achterhalen. |
| Gerelateerde sleutelaanval | Een aanval waarbij de aanvaller kennis heeft van een wiskundige relatie tussen verschillende geheime sleutels die voor encryptie worden gebruikt. Dit kan de analyse vergemakkelijken in vergelijking met aanvallen op individuele, onbekende sleutels. |
| Integrale cryptanalyse | Een cryptanalytische techniek die verschilt van differentiële cryptanalyse doordat het niet slechts paren van encrypties analyseert, maar sets of multisets van encrypties. Het onderzoekt de relaties tussen de sommen van vele waarden. |
| Verwarring (Confusion) | Een principe in cryptografie, geïntroduceerd door Claude Shannon, dat stelt dat de relatie tussen de sleutel en de ciphertext zo complex mogelijk moet zijn om het voor een aanvaller moeilijk te maken de sleutel te achterhalen. |
| Diffusie | Een ander principe van Shannon dat stelt dat de invloed van elke bit van de platte tekst en elke bit van de sleutel zich moet verspreiden over zoveel mogelijk bits van de ciphertext. Dit zorgt ervoor dat kleine veranderingen in de input grote veranderingen in de output veroorzaken. |
Cover
1-Web-Management-Kick-Off.pptx
Summary
# Introductie tot webmanagement en conversie
Dit deel introduceert het belang van webmanagement, de rol van websites in digitalisering en hoe aandacht trekken kan leiden tot conversie, met een onderscheid tussen conversie vroeger en nu.
### 1.1 Het belang van webmanagement en websites
Webmanagement is relevant omdat websites een cruciale rol spelen in de huidige digitaliseringsgolf. Het primaire doel van een succesvolle website is het genereren van conversie, wat gedefinieerd wordt als het omzetten van bezoekers naar een gewenste uitkomst.
### 1.2 Van aandacht trekken naar conversie
Aandacht trekken is een belangrijke eerste stap, maar de ware waarde van een website ligt in het vermogen om deze aandacht om te zetten in concrete resultaten. Digitalisering maakt dit proces steeds belangrijker, aangezien websites continue mogelijkheden bieden voor conversie.
#### 1.2.1 Wat is conversie?
Conversie is het proces waarbij een websitebezoeker een specifieke, gewenste actie onderneemt. Dit kan variëren van interacties zoals het volgen op social media of het aanmelden voor een nieuwsbrief (micro conversies), tot meer transactionele acties zoals het aanvragen van een offerte, het invullen van een contactformulier voor afspraken, direct bellen, of een aankoop doen (macro conversies).
#### 1.2.2 Conversie vroeger versus nu
* **Conversie vroeger:**
* Vaak one-on-one interacties.
* Beperkte openingsuren.
* Gelimiteerd door het aantal werknemers.
* Vaak locatie-afhankelijk.
* **Conversie nu:**
* 24/7/365 beschikbaarheid.
* Schaalbaarheid is niet beperkt door de beschikbaarheid van medewerkers.
* Locatie speelt een minder grote rol.
#### 1.2.3 De conversiefases
Het proces van bewustwording tot een uiteindelijke conversie is niet altijd lineair. Het omvat verschillende stadia waarin een potentiële klant interactie heeft met een website.
### 1.3 Doelstellingen van een website
De doelstellingen voor het opzetten van een website zijn divers, maar leiden uiteindelijk tot het verbeteren van marketingperspectief en het kunnen optimaliseren van de site:
* Richting geven aan de invulling van een website.
* Een basis fundament leggen omtrent het web en websites.
* De eigen visie of ideeën kunnen overmaken aan een technische partij.
* In staat zijn de website te optimaliseren vanuit een marketingperspectief.
* Elkaar (marketeer en technische partij) leren verstaan.
### 1.4 Essentiële vragen bij het starten van een website
Voordat er gestart wordt met de ontwikkeling van een website, is het cruciaal om een aantal kernvragen te beantwoorden:
* Wie zijn de klanten?
* Wat wil men bereiken met de website?
* Waar zijn de klanten naar op zoek?
* Wat zijn hun behoeften?
* Hoe wil men aan deze behoeften beantwoorden?
* Hoe pakt de concurrentie het aan?
* Welk budget is beschikbaar?
### 1.5 Verschillen tussen websites (B2B vs. B2C)
Niet elke website is hetzelfde, en de specifieke invulling dient afgestemd te worden op de doelstellingen en doelgroep.
* **B2B (Business-to-Business):**
* Vaak een lager bezoekersaantal, wat wijst op een andere afzetmarkt.
* Vaker desktop-georiënteerd.
* Vaak geen focus op directe verkoop, maar eerder op contactaanvragen of offertes.
### 1.6 De basisprincipes van webtechnologie
De basisbouwstenen van het web zijn:
* **HTML (HyperText Markup Language):** Zorgt voor de structuur van de website.
* **CSS (Cascading Style Sheets):** Bepaalt de visuele inkleding en voorstelling.
* **JavaScript:** Maakt interactie en gedrag op de website mogelijk.
Deze drie componenten vormen samen de kern van client-side webtechnologie.
### 1.7 Hoe het web werkt: Clients en Servers
Het surfen op het web is gebaseerd op de interactie tussen clients en servers:
* **Clients:** Dit zijn de apparaten van de gebruikers, zoals laptops, smartphones en tablets, waarmee diensten die door servers worden aangeboden, worden opgevraagd.
* **Servers:** Deze ‘serveren’ informatie, wat betekent dat ze de vragen van clients beantwoorden en de gevraagde diensten leveren.
#### 1.7.1 DNS (Domain Name System)
Het Domain Name System functioneert als een telefoonboek voor het internet. Het vertaalt een domeinnaam (URL) naar een numeriek IP-adres, wat nodig is om de juiste server te lokaliseren. DNS-instellingen zijn cruciaal voor de configuratie van diensten zoals Mailchimp, Google Search Console en social media pixels.
### 1.8 Domeinnaam en Hosting
* **Domeinnaam:** Dit is het unieke adres van een website op het internet dat verwijst naar een IP-adres. Domeinnamen kunnen gekocht worden bij een hostingprovider.
* **Best practices voor een domeinnaam:** Kort, gemakkelijk te spellen en te onthouden, uniek, eventueel met een belangrijk sleutelwoord (SEO), en gebruik makend van relevante extensies (bv. .be, .com, .eu).
* **Hosting:** Een hostingprovider biedt ruimte op het internet en zorgt ervoor dat een website gekoppeld is aan het internet en actief staat. Bij het selecteren van een provider zijn criteria zoals budget, benodigde webruimte (afhankelijk van afbeeldingen, animaties) en verwachte hoeveelheid dataverkeer belangrijk.
### 1.9 CMS (Content Management Systeem)
Een Content Management Systeem (CMS) is een systeem dat wordt gebruikt om de inhoud van een website te beheren zonder dat er directe kennis van HTML, CSS en JavaScript vereist is.
* **Voordelen van een CMS:**
* Eenvoudig aanpassen van de website structuur.
* Gemakkelijk aanpassen van content (tekst, afbeeldingen, video).
* Mogelijkheid tot het aanbrengen van lay-out wijzigingen.
* Toevoegen van functionaliteiten (bv. reviews, blog, foto-albums).
* Toevoegen van gebruikers.
* Vereist geen of beperkte code kennis.
#### 1.9.1 All-in-one CMS oplossingen
Sommige CMS-oplossingen bieden een geïntegreerde aanpak waarbij hosting niet apart geregeld hoeft te worden. Deze zijn vaak eenvoudig in beheer en kunnen gratis studentenlicenties aanbieden.
### 1.10 Praktisch gedeelte en evaluatie
Het praktische gedeelte van deze cursus omvat groepenwerk waarbij websites gebouwd worden. Er is een tussentijdse evaluatie van opdrachten en een eindevaluatie in de vorm van een videopresentatie. De website wordt als eindklant gepresenteerd, waarbij de opbouw en het conversiepotentieel worden toegelicht, inclusief een training over het aanpassen van de homepage, het creëren van blogartikelen, en het onderhouden van SEO. De puntenverdeling is gebaseerd op het behalen van deadlines, de werking van de website, en de videopresentatie.
---
# Doel en inhoud van webmanagement
Dit onderwerp introduceert de kernconcepten en doelstellingen van webmanagement, de basisprincipes van het web en de marketinggerichte optimalisatie van websites.
### 2.1 De relevantie van webmanagement
Webmanagement is relevant omdat het de mogelijkheid biedt om aandacht te trekken en deze vervolgens te converteren naar gewenste uitkomsten. Digitalisatie maakt dit proces efficiënter dan traditionele methoden.
#### 2.1.1 Conversie
Conversie is het proces waarbij websitebezoekers worden omgezet naar een specifieke uitkomst.
* **Vroegere conversie:** Vaak one-on-one, beperkt door openingsuren, personeel en locatie.
* **Huidige conversie:** 24/7 beschikbaar, schaalbaar onafhankelijk van personeel, en niet locatiegebonden.
#### 2.1.2 De reis van awareness tot review
De klantreis van bewustwording tot een eventuele review is niet altijd lineair. De manier waarop consumenten online aankopen doen kan variëren.
### 2.2 Het doel van webmanagement
De algemene doelen van webmanagement zijn:
* **Richting geven aan de invulling van een website:** Bepalen hoe de website eruitziet en functioneert.
* **Basis fundament omtrent het web & websites:** Begrijpen hoe het web en websites technisch in elkaar zitten.
* **Visie/idee overbrengen aan een technische partij:** Effectief kunnen communiceren met webontwikkelaars.
* **Website optimaliseren vanuit marketingperspectief:** De website beter laten renderen om marketingdoelstellingen te behalen.
* **Elkaar leren verstaan:** Zorgen voor een goede communicatie tussen marketeers en technische specialisten.
### 2.3 De inhoud van de cursus
De cursus is opgedeeld in theoretische en praktische onderdelen.
#### 2.3.1 Theoretische inhoud
* **The basics:** De fundamentele technologieën van het web.
* **SEO intro:** Hoe Google het web indexeert en interpreteert.
* **UX intro:** Hoe gebruikers het web ervaren.
* **Tracking & CRO:** Methoden om websiteprestaties te meten en te verbeteren voor meer conversie.
#### 2.3.2 Praktische inhoud
* Inspiratie, brainstormen en onderzoek.
* Wireframing en sitestructuur opzetten.
* Website uitwerken in een CMS (zoals Webflow).
* Overdracht van de website en training, inclusief videopresentaties.
#### 2.3.3 Evaluatie
* **Tussentijdse evaluatie:** Opdrachten die binnen bepaalde termijnen moeten worden voltooid.
* **Eindevaluatie:** Een videopresentatie per groep (maximaal 10 minuten) waarin de opbouw van de website en de strategie voor conversie worden toegelicht. Er wordt ook uitleg gegeven over het onderhoud van de website, zoals het aanpassen van de homepagina, het creëren van blogartikelen en het controleren en onderhouden van SEO.
### 2.4 Relevante vragen voor het starten van een website
Voordat met de bouw van een website wordt begonnen, zijn de volgende vragen essentieel:
* Wie zijn de klanten?
* Wat wil men bereiken met de website?
* Waar zijn de klanten naar op zoek?
* Wat zijn hun behoeften?
* Hoe wil men aan deze behoeften beantwoorden?
* Hoe pakt de concurrentie het aan?
* Welk budget is beschikbaar?
### 2.5 Het uiteindelijke doel: conversie
Een succesvolle website leidt tot conversie, wat betekent dat bezoekers worden omgezet naar een gewenste uitkomst.
#### 2.5.1 Micro- en macroconversies
* **Microconversies:** Kleine interacties of engagement-gebaseerde acties (bv. een websitepagina delen, aanmelden voor een nieuwsbrief, een bedrijf volgen op sociale media).
* **Macroconversies:** Grotere, vaak transactionele acties (bv. een offerteaanvraag, een aankoop doen, een account aanmaken, direct bellen via Google My Business).
### 2.6 Verschillen tussen websites
Websites kunnen sterk verschillen, met name tussen Business-to-Business (B2B) en Business-to-Consumer (B2C) contexten.
* **B2B Websites:**
* Vaak lager bezoekersaantal, gericht op een specifieke afzetmarkt.
* Vaker desktop-georiënteerd.
* Focus ligt minder op directe verkoop en meer op contactaanvragen of offertes.
Het is cruciaal om website-doelen hierop af te stemmen.
### 2.7 De technische basis van het web
De basistechnologieën die ten grondslag liggen aan het web zijn:
* **HTML (HyperText Markup Language):** Biedt de structuur van een webpagina.
* **CSS (Cascading Style Sheets):** Zorgt voor de visuele inkleding en presentatie.
* **JavaScript:** Maakt interactie en dynamisch gedrag mogelijk.
Deze drie elementen vormen samen de basis van client-side webtechnologie.
#### 2.7.1 Hoe surfen op het web werkt
Surfen op het web omvat de interactie tussen clients en servers, gefaciliteerd door het Domain Name System (DNS).
* **Clients:** Apparaten zoals laptops, smartphones en tablets die diensten opvragen.
* **Servers:** Systemen die de vragen van clients beantwoorden en diensten aanbieden.
* **DNS (Domain Name System):** Fungeert als een telefoonboek dat domeinnamen (URL's) vertaalt naar IP-adressen.
> **Tip:** DNS-instellingen zijn cruciaal voor het configureren van diensten zoals Mailchimp, Google Search Console en social media pixels.
### 2.8 Domeinnaam en hosting
#### 2.8.1 Domeinnaam
Een domeinnaam is het unieke adres van een website dat verwijst naar een IP-adres. Deze kan worden gekocht bij een hostingprovider.
* **Best practices voor domeinnamen:**
* Kort en makkelijk te spellen.
* Makkelijk te onthouden.
* Kan een belangrijk kernwoord (voor SEO) bevatten.
* Gebruik extensies die relevant zijn (bv. `.be`, `.com`, `.eu`).
#### 2.8.2 Hosting
Een hostingprovider biedt opslagruimte op het internet en zorgt voor de koppeling van de website met het internet, zodat deze actief is.
* **Selectiecriteria voor hosting:**
* Budget.
* Benodigde webruimte (afhankelijk van afbeeldingen, animaties, etc.).
* Verwachte hoeveelheid dataverkeer.
#### 2.8.3 Hostingproviders vs. all-in-one CMS
* **CMS (Content Management Systeem):** Een systeem om de inhoud van een website te beheren zonder directe HTML, CSS of JavaScript code te hoeven schrijven.
* **Voordelen van CMS:** Eenvoudig aanpassen van website structuur, content (tekst, afbeeldingen, video), lay-out wijzigingen, toevoegen van functionaliteiten (bv. reviews, blog), gebruikersbeheer. Vereist weinig tot geen codeerkennis.
> **Voorbeeld:** Een all-in-one CMS biedt vaak een geïntegreerde oplossing zonder aparte hosting, is eenvoudig in beheer en kan gratis zijn via studentenlicenties.
### 2.9 Praktisch onderdeel en evaluatie
Het praktische onderdeel van de cursus omvat het bouwen van een website in groepen. De evaluatie bestaat uit het behalen van tussentijdse deadlines, de werking van de website en een eindpresentatie. Hierin wordt de opbouw van de website toegelicht, de strategie voor conversie, en hoe de klant de website kan onderhouden en beheren.
---
# Technische basis van websites
Dit onderdeel legt de fundamentele bouwstenen van websites uit, waaronder HTML, CSS en JavaScript, en behandelt de concepten van clients, servers en het Domain Name System (DNS).
### 3.1 De basis bouwstenen
Websites worden opgebouwd uit drie kerntechnologieën die samenwerken om zowel structuur, visuele vormgeving als interactie te realiseren:
* **HTML (HyperText Markup Language):**
* Verantwoordelijk voor de **structuur** van de webpagina.
* Definieert de verschillende elementen op een pagina, zoals koppen, paragrafen, afbeeldingen en links.
* **CSS (Cascading Style Sheets):**
* Verantwoordelijk voor de **visuele inkleding en voorstelling** van de webpagina.
* Bepaalt hoe de HTML-elementen worden weergegeven, inclusief kleuren, lettertypen, lay-outs en afmetingen.
* **JavaScript:**
* Verantwoordelijk voor de **interactie en het gedrag** van de webpagina.
* Maakt dynamische inhoud mogelijk, zoals animaties, formuliervalidatie, en interactieve elementen die reageren op gebruikersinput.
Deze drie technologieën vormen de basis van vrijwel elke website die je vandaag de dag bezoekt. Er bestaat uiteraard meer dan deze drie, maar voor de basis van web development zijn ze essentieel.
> **Tip:** Denk aan HTML als het skelet van het menselijk lichaam, CSS als de huid en kleding, en JavaScript als de spieren en het zenuwstelsel die ervoor zorgen dat het lichaam kan bewegen en reageren.
### 3.2 Hoe het web werkt: Clients, Servers en DNS
Het surfen op het web is een proces dat afhankelijk is van de interactie tussen clients, servers en het Domain Name System (DNS).
#### 3.2.1 Clients
Clients zijn de apparaten die we gebruiken om toegang te krijgen tot internetdiensten. Dit omvat:
* Laptops
* Smartphones
* Tablets
Deze apparaten stellen verzoeken op voor diensten die worden aangeboden door servers.
#### 3.2.2 Servers
Servers zijn computers die ontworpen zijn om te "dienen" (to serve). Ze beantwoorden de verzoeken die door clients worden gesteld. Wanneer je een website bezoekt, vraag je via je client (bijvoorbeeld je browser) aan een server om de gegevens van die website naar jou toe te sturen.
#### 3.2.3 DNS (Domain Name System)
Het Domain Name System, vaak afgekort als DNS, fungeert als het telefoonboek van het internet. De belangrijkste functie van DNS is het vertalen van een domeinnaam (een leesbare URL, zoals `www.voorbeeld.be`) naar een numeriek IP-adres (bijvoorbeeld `$192.168.1.1$`), dat machines gebruiken om elkaar te identificeren.
* **Domeinnaam:** Het unieke adres van je website, wat je kunt kopen bij een hostingprovider. Best practices voor domeinnamen omvatten:
* Kort en gemakkelijk te spellen.
* Gemakkelijk te onthouden.
* Een belangrijk sleutelwoord bevatten voor SEO.
* Gebruik extensies die relevant zijn voor je doelgroep of regio (bv. `.be`, `.com`, `.eu`).
Het DNS is cruciaal voor de configuratie van diverse online diensten, waaronder e-mail (Mailchimp), zoekmachine-optimalisatie (Google Search Console) en trackingpixels voor sociale media.
### 3.3 Hosting en CMS
Om een website online toegankelijk te maken, heb je hosting nodig. Daarnaast wordt er vaak gebruik gemaakt van een Content Management Systeem (CMS).
#### 3.3.1 Hosting
Hosting providers bieden ruimte aan op het internet waar de bestanden van je website worden opgeslagen. Zij zorgen ervoor dat je website gekoppeld is aan het internet en actief staat. Bij het kiezen van een hostingprovider zijn de volgende criteria belangrijk:
* **Budget:** De kosten die verbonden zijn aan de hostingdienst.
* **Benodigde webruimte:** Afhankelijk van de hoeveelheid afbeeldingen, video's en andere media die je website zal bevatten.
* **Verwachte hoeveelheid dataverkeer:** Het aantal bezoekers en de omvang van de gegevens die worden uitgewisseld.
#### 3.3.2 CMS (Content Management Systeem)
Een CMS is een systeem dat wordt gebruikt om de inhoud (content) van een website te beheren zonder dat je zelf HTML, CSS of JavaScript hoeft te schrijven. Dit maakt het beheren van een website toegankelijker voor mensen zonder diepgaande technische kennis.
**Voordelen van een CMS:**
* Eenvoudig aanpassen van de website structuur.
* Makkelijk bewerken van teksten, afbeeldingen en video's.
* Mogelijkheid om lay-out wijzigingen door te voeren.
* Toevoegen van functionaliteiten (bv. reviews, blog, fotoalbum).
* Beheer van gebruikersaccounts.
Er zijn verschillende soorten CMS, waaronder "all-in-one" oplossingen die geen aparte hosting vereisen en vaak eenvoudig in beheer zijn.
> **Voorbeeld:** Een populaire all-in-one CMS kan je helpen met het bouwen van een website, het beheren van je blogartikelen, het instellen van SEO-instellingen, en het aanpassen van de homepagina, allemaal via een gebruiksvriendelijke interface.
---
# Praktische implementatie en evaluatie van websites
Dit deel behandelt de praktische aspecten van websiteontwikkeling, met de nadruk op groepswerk, tussentijdse deadlines en de uiteindelijke beoordeling via een videopresentatie, gericht op het creëren van een functionele website die conversie genereert.
### 4.1 Relevantie van web management
Web management is relevant omdat het de focus legt op het converteren van aandacht naar concrete resultaten, wat cruciaal is in de steeds belangrijker wordende digitale wereld. Terwijl deel 1 van het semester gericht was op het trekken van aandacht, gaat dit deel dieper in op hoe die aandacht omgezet kan worden in actie.
> **Tip:** Conversie is het uiteindelijke doel van een website: het omzetten van bezoekers naar een gewenste uitkomst.
### 4.2 Conversie in de digitale wereld
Conversie kan op verschillende manieren worden gemeten, zowel als micro- of macro-doelen:
* **Microconversies:** Dit zijn vaak interactie- of engagementgerichte acties, zoals:
* Een websitepagina delen.
* Aanmelden voor een nieuwsbrief.
* Volgen op social media.
* **Macroconversies:** Deze hebben doorgaans een meer transactionele aard, zoals:
* Een aankoop doen.
* Een offerteaanvraag indienen.
* Contact opnemen voor het regelen van afspraken.
* Bellen via een bedrijfsprofiel.
Vroeger was conversie vaak beperkt door openingstijden, personeel en locatie. Tegenwoordig kan digitale conversie 24/7 plaatsvinden, onafhankelijk van personeelsbeschikbaarheid en locatie.
### 4.3 Het belang van doelen stellen voor websites
Voordat men begint met de ontwikkeling van een website, is het essentieel om duidelijke doelen te stellen. Relevante vragen hierbij zijn:
* Wie zijn de klanten?
* Wat wil men bereiken met de website?
* Waar zijn de klanten naar op zoek?
* Wat zijn hun behoeften?
* Hoe gaat de website aan deze behoeften voldoen?
* Hoe pakken concurrenten het aan?
* Welk budget is beschikbaar?
Door deze vragen te beantwoorden, kan men richting geven aan de invulling van de website en zorgen voor een solide fundament vanuit marketingperspectief.
### 4.4 De technische basis van websites
De kerntechnologieën achter websites zijn:
* **HTML (HyperText Markup Language):** Zorgt voor de structuur van de webpagina.
* **CSS (Cascading Style Sheets):** Bepaalt de visuele inkleding en voorstelling van de content.
* **JavaScript:** Maakt interactie en dynamisch gedrag op de website mogelijk.
Deze drie technologieën vormen de basis van client-side webontwikkeling.
#### 4.4.1 Client-server model en DNS
Het surfen op het web is gebaseerd op een client-server model:
* **Clients:** Dit zijn de apparaten die we gebruiken (laptops, smartphones) om diensten op te vragen.
* **Servers:** Deze "bedienen" de clients door de gevraagde diensten te leveren.
* **DNS (Domain Name System):** Dit systeem fungeert als een telefoonboek dat domeinnamen (URL's) vertaalt naar IP-adressen. DNS-configuratie is belangrijk voor diverse tools zoals Mailchimp, Google Search Console en social media pixels.
#### 4.4.2 Domeinnaam en hosting
* **Domeinnaam:** Het unieke adres van een website dat verwijst naar een IP-adres. Bij het kiezen van een domeinnaam zijn best practices zoals kort, gemakkelijk te spellen en te onthouden, het opnemen van belangrijke keywords en het gebruiken van relevante extensies (.be, .com, .eu) aan te raden.
* **Hosting:** Een hostingprovider biedt ruimte op het internet, koppelt de website aan het internet en zorgt dat deze actief is. Selectiecriteria zijn onder andere budget, benodigde webruimte (afhankelijk van afbeeldingen, animaties) en verwachte hoeveelheid dataverkeer.
#### 4.4.3 Content Management Systemen (CMS)
Een CMS is een systeem waarmee de inhoud van een website beheerd kan worden zonder direct HTML, CSS of JavaScript te schrijven.
Voordelen van een CMS:
* Eenvoudig aanpassen van website structuur.
* Gemakkelijk aanpassen van content (tekst, afbeeldingen, video).
* Mogelijkheid tot het aanbrengen van lay-out wijzigingen.
* Toevoegen van functionaliteiten (bv. reviews, blog).
* Gebruikers toevoegen aan de website.
* Geen of beperkte code kennis vereist.
Een "all-in-one" CMS biedt vaak een geïntegreerde oplossing zonder aparte hosting en is eenvoudig in beheer.
### 4.5 Praktisch onderdeel: Websiteontwikkeling en evaluatie
Het praktische deel van de cursus omvat:
* **Groepswerk:** Deelnemers worden ingedeeld in groepen van vier personen.
* **Tussentijdse evaluatie:** Opdrachten moeten tegen specifieke data worden voltooid.
* **Eindevaluatie:** Een videopresentatie (max. 10 minuten) per groep via Loom, waarbij de gemaakte website wordt opgeleverd aan de "eindklant". De presentatie licht de opbouw van de website toe, hoe deze zal zorgen voor conversies, en geeft instructies over het aanpassen van de homepage, het creëren van blogartikelen en het controleren van SEO.
#### 4.5.1 Puntenverdeling
De puntenverdeling is gebaseerd op:
* Het behalen van tussentijdse deadlines.
* De werking van de website.
* De kwaliteit van de videopresentatie/Loom.
> **Tip:** Zorg ervoor dat de videopresentatie duidelijk uitlegt hoe de eindklant de website zelf kan onderhouden en optimaliseren, met specifieke aandacht voor SEO.
---
## Veelgemaakte fouten om te vermijden
- Bestudeer alle onderwerpen grondig voor examens
- Let op formules en belangrijke definities
- Oefen met de voorbeelden in elke sectie
- Memoriseer niet zonder de onderliggende concepten te begrijpen
Glossary
| Term | Definition |
|------|------------|
| Webmanagement | Het proces van het creëren, onderhouden en optimaliseren van websites om zakelijke doelstellingen te bereiken, zoals het aantrekken van bezoekers en het genereren van conversies. |
| Conversie | De omzetting van een websitebezoeker naar een gewenste uitkomst, zoals een aankoop, een offerteaanvraag of een inschrijving op een nieuwsbrief. |
| Digitalisatie | Het proces van het omzetten van informatie en processen naar een digitale vorm, waardoor ze via digitale kanalen toegankelijk en bewerkbaar worden. |
| Aandacht trekken | Het proces waarbij een website of online content de interesse van potentiële bezoekers wekt en hen naar de website leidt. |
| Awareness | Het stadium in het koopproces waarbij een consument zich bewust wordt van een product, dienst of merk. |
| Review | Een kritische beoordeling of mening over een product, dienst of ervaring, vaak gedeeld door gebruikers om anderen te informeren. |
| SEO (Search Engine Optimization) | Zoekmachineoptimalisatie; een reeks technieken gericht op het verbeteren van de zichtbaarheid van een website in de organische zoekresultaten van zoekmachines zoals Google. |
| UX (User Experience) | Gebruikerservaring; de totale ervaring die een persoon heeft bij het interacteren met een product, systeem of dienst, inclusief de perceptie van bruikbaarheid, toegankelijkheid en aantrekkelijkheid. |
| CRO (Conversion Rate Optimization) | Conversiepercentageoptimalisatie; het systematisch verbeteren van een website om meer bezoekers om te zetten in klanten of leads. |
| Wireframing | Het creëren van een schematische weergave van de structuur en lay-out van een website of webpagina, gericht op functionaliteit en plaatsing van elementen. |
| Sitestructuur | De hiërarchische organisatie van pagina's en content binnen een website, die de navigatie en vindbaarheid beïnvloedt. |
| Webflow | Een visuele development tool waarmee gebruikers interactieve, responsieve websites kunnen ontwerpen en bouwen zonder uitgebreide codekennis. |
| HTML (HyperText Markup Language) | De standaard opmaaktaal die wordt gebruikt om webpagina's te structureren en de inhoud ervan te definiëren. |
| CSS (Cascading Style Sheets) | Een stijlbladtaal die wordt gebruikt om de presentatie en lay-out van webpagina's te beschrijven, zoals kleuren, lettertypen en indeling. |
| JavaScript | Een programmeertaal die veel wordt gebruikt voor client-side scripting op websites om interactieve elementen en dynamische functionaliteit toe te voegen. |
| Client | Een computer of apparaat dat diensten opvraagt die worden aangeboden door een server, zoals een laptop, smartphone of tablet. |
| Server | Een computer die diensten verleent aan andere computers (clients) op een netwerk, vaak door informatie of functionaliteit te leveren. |
| DNS (Domain Name System) | Het Domain Name System vertaalt mensvriendelijke domeinnamen (URL's) naar numerieke IP-adressen die computers gebruiken om elkaar te identificeren op het internet. |
| Domeinnaam | Het unieke, herkenbare adres van een website op het internet, bijvoorbeeld "example.com". |
| Hostingprovider | Een bedrijf dat opslagruimte op servers aanbiedt en ervoor zorgt dat websites toegankelijk zijn op het internet. |
| CMS (Content Management Systeem) | Een softwaretoepassing waarmee gebruikers digitale content kunnen creëren, beheren en wijzigen op een website, vaak zonder diepgaande technische kennis. |
| Macro conversies | Belangrijke transactiegerichte acties die direct bijdragen aan de bedrijfsdoelstellingen, zoals een aankoop of een significante offerteaanvraag. |
| Micro conversies | Kleinere interacties die de betrokkenheid van de gebruiker met de website aangeven en vaak leiden tot een macro conversie, zoals het liken van een social media post of het downloaden van een brochure. |
Cover
1ZT-ICT-H2.pptx
Summary
# Informatie- en communicatietechnologie (ICT) basisconcepten
Dit onderwerp introduceert de fundamentele concepten binnen ICT, met een focus op talstelsels, signaaltypes en bemonstering.
### 1.1 Talstelsels
Talstelsels zijn methoden om getallen weer te geven. Binnen ICT zijn met name het binaire, decimale en hexadecimale talstelsel van belang.
#### 1.1.1 Decimaal talstelsel
Het decimale talstelsel is het talstelsel dat wij dagelijks gebruiken. Het is een positional getallensysteem met basis 10, wat betekent dat het tien unieke cijfers gebruikt: 0, 1, 2, 3, 4, 5, 6, 7, 8 en 9. De waarde van een cijfer wordt bepaald door zijn positie in het getal.
De algemene formule voor het omzetten van een decimaal getal naar zijn componenten is de som van de producten van elk cijfer met de overeenkomstige macht van de basis (10):
$$D = d_n \times 10^n + d_{n-1} \times 10^{n-1} + \dots + d_1 \times 10^1 + d_0 \times 10^0$$
Waarbij:
* $D$ het decimale getal is.
* $d_i$ de cijfers van het decimale getal zijn.
* $n$ de hoogste macht van 10 is.
#### 1.1.2 Binair talstelsel
Het binaire talstelsel, ook wel tweewaardig talstelsel genoemd, is de basis van digitale computers. Het maakt gebruik van slechts twee cijfers: 0 en 1. Deze cijfers worden bits genoemd (binary digits). Net als bij het decimale talstelsel, bepaalt de positie van een bit zijn waarde, maar dan met machten van 2.
De formule voor het omzetten van een binair getal naar een decimaal getal is:
$$B = b_n \times 2^n + b_{n-1} \times 2^{n-1} + \dots + b_1 \times 2^1 + b_0 \times 2^0$$
Waarbij:
* $B$ het binaire getal is.
* $b_i$ de bits van het binaire getal zijn (0 of 1).
* $n$ de hoogste macht van 2 is.
> **Tip:** Bedenk dat elke positie in een binair getal een dubbele waarde vertegenwoordigt ten opzichte van de positie rechts ervan, beginnend bij $2^0 = 1$.
**Voorbeeld:** Het binaire getal 10011100 omzetten naar decimaal:
$1 \times 2^7 + 0 \times 2^6 + 0 \times 2^5 + 1 \times 2^4 + 1 \times 2^3 + 1 \times 2^2 + 0 \times 2^1 + 0 \times 2^0$
$= 1 \times 128 + 0 \times 64 + 0 \times 32 + 1 \times 16 + 1 \times 8 + 1 \times 4 + 0 \times 2 + 0 \times 1$
$= 128 + 0 + 0 + 16 + 8 + 4 + 0 + 0 = 156$
#### 1.1.3 Hexadecimaal talstelsel
Het hexadecimale talstelsel, ook wel zestientallig talstelsel genoemd, wordt vaak gebruikt in computerwetenschappen omdat het een compactere manier biedt om binaire getallen weer te geven. Het heeft basis 16 en gebruikt 16 symbolen: de cijfers 0-9 en de letters A-F. De letters A tot en met F vertegenwoordigen de decimale waarden 10 tot en met 15.
* A = 10
* B = 11
* C = 12
* D = 13
* E = 14
* F = 15
De formule voor het omzetten van een hexadecimaal getal naar een decimaal getal is:
$$H = h_n \times 16^n + h_{n-1} \times 16^{n-1} + \dots + h_1 \times 16^1 + h_0 \times 16^0$$
Waarbij:
* $H$ het hexadecimale getal is.
* $h_i$ de hexadecimale cijfers (of hun decimale equivalenten) zijn.
* $n$ de hoogste macht van 16 is.
> **Tip:** Hexadecimale getallen zijn handig omdat elke hexadecimale digit (0-9, A-F) precies overeenkomt met 4 binaire digits (een nibble). Dit maakt conversie tussen binair en hexadecimaal erg eenvoudig.
**Voorbeeld:** Het hexadecimale getal 2D1 omzetten naar decimaal:
$2 \times 16^2 + D \times 16^1 + 1 \times 16^0$
$= 2 \times 256 + 13 \times 16 + 1 \times 1$
$= 512 + 208 + 1 = 721$
#### 1.1.4 Omzettingen tussen talstelsels
##### 1.1.4.1 Van binair naar hexadecimaal en omgekeerd
Om een binair getal om te zetten naar hexadecimaal, groepeer je de binaire digits in groepen van 4, beginnend vanaf de rechterkant. Vul aan met nullen indien nodig om de meest linkse groep compleet te maken. Converteer vervolgens elke groep van 4 bits naar zijn corresponderende hexadecimale cijfer.
Om een hexadecimaal getal om te zetten naar binair, zet je elk hexadecimaal cijfer om naar zijn 4-bit binaire equivalent.
**Voorbeeld:** Binaire 10011100 omzetten naar hexadecimaal:
Groeperen: 1001 1100
Omzetten: 1001 is 9, 1100 is C.
Resultaat: 9C (hexadecimaal).
**Voorbeeld:** Hexadecimale 2D1 omzetten naar binair:
2 = 0010
D = 1101
1 = 0001
Resultaat: 001011010001, wat meestal wordt geschreven als 1011010001 (de leidende nullen worden weggelaten).
##### 1.1.4.2 Van decimaal naar binair
Een veelgebruikte methode is recursieve deling door 2, waarbij de resten de binaire cijfers vormen, gelezen van onder naar boven.
**Voorbeeld:** Decimaal 156 omzetten naar binair:
$156 \div 2 = 78$ rest 0
$78 \div 2 = 39$ rest 0
$39 \div 2 = 19$ rest 1
$19 \div 2 = 9$ rest 1
$9 \div 2 = 4$ rest 1
$4 \div 2 = 2$ rest 0
$2 \div 2 = 1$ rest 0
$1 \div 2 = 0$ rest 1
De resten van onder naar boven lezen: 10011100.
##### 1.1.4.3 Van decimaal naar hexadecimaal
Dit gebeurt op een vergelijkbare manier als de omzetting naar binair, maar dan door recursief te delen door 16. De resten worden omgerekend naar hexadecimale cijfers.
**Voorbeeld:** Decimaal 721 omzetten naar hexadecimaal:
$721 \div 16 = 45$ rest 1
$45 \div 16 = 2$ rest 13 (D)
$2 \div 16 = 0$ rest 2
De resten van onder naar boven lezen: 2D1.
#### 1.1.5 Andere talstelsels
Naast binair, decimaal en hexadecimaal, kunnen er ook andere talstelsels voorkomen, afhankelijk van de toepassing. Het octale talstelsel (basis 8) wordt bijvoorbeeld soms gebruikt.
### 1.2 Analoog vs. Digitaal
Informatie kan op twee hoofdvormen worden weergegeven: analoog en digitaal.
#### 1.2.1 Analoge signalen
Analoge signalen zijn continu en kunnen elke waarde binnen een bepaald bereik aannemen. Ze variëren vloeiend in tijd en amplitude. Voorbeelden zijn de geluidsgolven die onze stem produceert, de temperatuur, of de intensiteit van licht.
#### 1.2.2 Digitale signalen
Digitale signalen zijn discreet en kunnen slechts een eindig aantal waarden aannemen, meestal twee (bijvoorbeeld 0 en 1, of laag en hoog voltage). Informatie wordt weergegeven als een reeks van discrete samples. Computers werken inherent met digitale signalen.
> **Tip:** Denk aan een dimmer voor een lamp (analoog, traploos regelbaar) versus een aan/uit schakelaar (digitaal, twee standen).
### 1.3 Bemonstering (Sampling)
Om analoge signalen te kunnen verwerken met digitale systemen, moeten ze worden omgezet naar een digitale vorm. Dit proces omvat bemonstering.
#### 1.3.1 Sampling rate
De sampling rate, ook wel bemonsteringsfrequentie genoemd, is het aantal samples dat per seconde van een analoog signaal wordt genomen. Het wordt uitgedrukt in Hertz (Hz). Een hogere sampling rate betekent dat er meer punten per seconde van het signaal worden gemeten, wat resulteert in een nauwkeurigere digitale representatie van het originele analoge signaal.
Volgens de Nyquist-Shannon bemonsteringstheorema, moet de sampling rate minstens tweemaal de hoogste frequentie van het signaal zijn om het signaal zonder informatieverlies te kunnen reconstrueren.
$$f_s \geq 2 \times f_{\text{max}}$$
Waarbij:
* $f_s$ de sampling rate is.
* $f_{\text{max}}$ de maximale frequentiecomponent in het analoge signaal is.
### 1.4 Toepassingen van ICT-basisconcepten
De hierboven besproken basisconcepten zijn essentieel voor diverse toepassingen binnen ICT:
* **Programmeren:** Fundamentele concepten zoals booleaanse logica (waarheidstabellen met WAAR/NIET WAAR, gerelateerd aan binaire 0 en 1) zijn cruciaal voor het schrijven van software.
* **Netwerken:** IP-adressen en MAC-adressen, die worden gebruikt om apparaten in netwerken te identificeren, zijn vaak gebaseerd op binaire of hexadecimale representaties.
* **Webdesign en andere gebieden:** De onderliggende principes van digitale datarepresentatie en signaalverwerking zijn overal aanwezig, van hoe afbeeldingen en geluid worden opgeslagen tot hoe communicatie plaatsvindt.
---
# ICT-toepassingen en programmeren
Dit deel bespreekt de praktische toepassingen van ICT, met een focus op programmeren, netwerken en webdesign.
## 2. ICT-toepassingen en programmeren
Deze sectie introduceert de concrete toepassingen van informatietechnologie, waaronder de basisprincipes van programmeren met Booleaanse waarden, de werking van netwerken middels IP- en MAC-adressen, en de fundamenten van webdesign.
### 2.1 Programmeren met Booleaanse waarden
Programmeren is het geven van instructies aan een computer om een specifieke taak uit te voeren. Een fundamenteel concept in programmeren is het gebruik van Booleaanse waarden, die de waarheidswaarde van een uitspraak representeren.
* **Booleaanse waarden**: Dit zijn de twee mogelijke waarden: waar (True) of onwaar (False).
* **Logische operatoren**: Deze operatoren worden gebruikt om Booleaanse waarden te combineren en te manipuleren. De belangrijkste zijn:
* **AND (EN)**: Het resultaat is waar als beide operanden waar zijn.
* Voorbeeld: `Waar EN Waar = Waar`
* Voorbeeld: `Waar EN Onwaar = Onwaar`
* **OR (OF)**: Het resultaat is waar als ten minste één van de operanden waar is.
* Voorbeeld: `Waar OF Onwaar = Waar`
* Voorbeeld: `Onwaar OF Onwaar = Onwaar`
* **NOT (NIET)**: Keert de waarheidswaarde van de operand om.
* Voorbeeld: `NIET Waar = Onwaar`
* Voorbeeld: `NIET Onwaar = Waar`
* **Toepassingen**: Booleaanse logica wordt gebruikt in beslissingsstructuren (if-statements), loops en om complexe voorwaarden in software te definiëren.
### 2.2 Netwerken met IP- en MAC-adressen
Netwerken stellen computers in staat om met elkaar te communiceren. Om dit mogelijk te maken, worden apparaten geïdentificeerd met unieke adressen.
* **IP-adres (Internet Protocol address)**: Dit is een logisch adres dat wordt toegewezen aan elk apparaat dat deel uitmaakt van een computernetwerk dat het Internet Protocol gebruikt voor communicatie. IP-adressen worden gebruikt om apparaten te routeren over netwerken, zodat gegevenspakketten hun bestemming kunnen bereiken.
* Ze kunnen statisch (vast) of dynamisch (tijdelijk, via DHCP) worden toegewezen.
* Voorbeeld: `192.168.1.1` (IPv4)
* **MAC-adres (Media Access Control address)**: Dit is een uniek, fysiek adres dat is ingebed in de netwerkinterfacecontroller (NIC) van een apparaat. Het MAC-adres wordt gebruikt voor communicatie binnen een lokaal netwerk (LAN).
* Het wordt ook wel het fysieke adres of hardwareadres genoemd.
* Het is meestal permanent en wordt door de fabrikant toegewezen.
* Het bestaat uit 12 hexadecimale cijfers, gegroepeerd in zes paren gescheiden door dubbele punten of streepjes.
* Voorbeeld: `00:1A:2B:3C:4D:5E`
> **Tip:** Het IP-adres is vergelijkbaar met het huisadres waar brieven naartoe worden gestuurd, terwijl het MAC-adres meer lijkt op de naam van de persoon aan wie de brief gericht is binnen dat huis.
### 2.3 Webdesign
Webdesign omvat het proces van het creëren van websites. Dit houdt in zowel de esthetische vormgeving als de technische functionaliteit.
* **Basistechnologieën**:
* **HTML (HyperText Markup Language)**: Definieert de structuur en inhoud van webpagina's.
* **CSS (Cascading Style Sheets)**: Bepaalt de presentatie en opmaak van HTML-elementen (kleuren, lettertypen, lay-out).
* **JavaScript**: Maakt interactieve elementen en dynamische functionaliteit op webpagina's mogelijk.
* **Belangrijke concepten**:
* **Gebruikerservaring (UX - User Experience)**: Hoe een gebruiker de website ervaart.
* **Gebruikersinterface (UI - User Interface)**: De visuele elementen waarmee een gebruiker interactie heeft.
* **Responsief design**: Websites die zich aanpassen aan verschillende schermformaten (desktop, tablet, mobiel).
### 2.4 Analoog vs. Digitaal
Informatie kan op twee fundamentele manieren worden gerepresenteerd: analoog en digitaal.
* **Analoog**: Een continue representatie van informatie, waarbij de waarde geleidelijk kan variëren. Voorbeelden zijn de golven van geluid of de temperatuur gemeten met een kwikthermometer.
* **Digitaal**: Een discrete representatie van informatie, waarbij de waarden worden uitgedrukt als afzonderlijke, telbare eenheden, meestal in de vorm van binaire getallen (0s en 1s).
* **Voordelen van digitaal**: Nauwkeurigheid, eenvoudigere opslag, bewerking en transmissie zonder kwaliteitsverlies.
* **Omzetting**: Analoge signalen moeten worden omgezet naar digitale signalen voor verwerking door computers.
#### 2.4.1 Sampling Rate
Bij de omzetting van een analoog signaal naar een digitaal signaal is de *sampling rate* cruciaal.
* **Sampling rate**: Dit is het aantal metingen (samples) per seconde dat wordt genomen van een analoog signaal om het om te zetten naar een digitaal formaat. De eenheid van sampling rate is Hertz (Hz) of samples per seconde.
* **Invloed**: Een hogere sampling rate resulteert in een nauwkeurigere digitale representatie van het originele analoge signaal, maar vereist ook meer opslagruimte en verwerkingskracht.
* Voor audio wordt bijvoorbeeld vaak een sampling rate van $44,100$ Hz gebruikt (CD-kwaliteit). Dit betekent dat het geluid $44,100$ keer per seconde wordt gemeten.
Deze principes vormen de basis voor veel ICT-toepassingen die we dagelijks gebruiken.
---
## Veelgemaakte fouten om te vermijden
- Bestudeer alle onderwerpen grondig voor examens
- Let op formules en belangrijke definities
- Oefen met de voorbeelden in elke sectie
- Memoriseer niet zonder de onderliggende concepten te begrijpen
Glossary
| Term | Definition |
|------|------------|
| ICT | Informatie- en communicatietechnologie, een breed veld dat zich bezighoudt met de opslag, ophalen, transmissie en manipulatie van data en informatie met behulp van computers en telecommunicatietechnologieën. |
| Talstelsel | Een systeem voor het representeren van getallen. Gangbare talstelsels zijn binair (basis 2), decimaal (basis 10) en hexadecimaal (basis 16). Elk talstelsel gebruikt een specifieke set symbolen en regels om waarden weer te geven. |
| Binair | Een talstelsel met basis 2, dat alleen de cijfers 0 en 1 gebruikt. Dit is de fundamentele manier waarop computers data opslaan en verwerken. |
| Decimaal | Het standaard talstelsel dat in het dagelijks leven wordt gebruikt, met basis 10 en de cijfers 0 tot en met 9. |
| Hexadecimaal | Een talstelsel met basis 16, dat de cijfers 0-9 en de letters A-F gebruikt om waarden weer te geven. Het wordt vaak gebruikt in de informatica om binaire getallen compacter weer te geven. |
| Omzetting (tussen talstelsels) | Het proces van het converteren van een getal van het ene talstelsel naar het andere, zoals van binair naar decimaal, of van decimaal naar hexadecimaal, en vice versa. |
| Recursieve deling | Een methode om een getal van een hogere basis naar een lagere basis om te zetten, waarbij herhaaldelijk wordt gedeeld en de resten worden verzameld. |
| Som van de producten | Een methode voor het omzetten van een binair getal naar decimaal, waarbij elk binair cijfer wordt vermenigvuldigd met de overeenkomstige macht van 2 en de resultaten worden opgeteld. |
| Boolean (programmeren) | Een datatype in de programmering dat slechts twee mogelijke waarden kan aannemen: waar (true) of onwaar (false). Dit is essentieel voor logische operaties en beslissingsstructuren. |
| IP-adres | Internet Protocol-adres, een uniek numeriek label dat is toegewezen aan elk apparaat dat is verbonden met een computernetwerk dat het Internet Protocol voor communicatie gebruikt. |
| MAC-adres | Media Access Control-adres, een unieke identificatie die is toegewezen aan een netwerkinterfacecontroller (NIC) om te worden gebruikt als netwerkadres in communicatieprotocollen op een data link layer. |
| Analoog signaal | Een continu signaal dat variabele waarden representeert, zoals een geluidsgolf of temperatuurmeting, in tegenstelling tot een digitaal signaal dat discrete waarden gebruikt. |
| Digitaal signaal | Een signaal dat discrete waarden representeert, meestal in de vorm van binaire getallen (0s en 1s). Digitale signalen worden gebruikt in computers en andere elektronische apparaten. |
| Sampling Rate | De frequentie waarmee samples van een analoog signaal worden genomen om een digitaal signaal te creëren. Een hogere sampling rate resulteert in een accuratere digitale representatie van het oorspronkelijke analoge signaal. |
Cover
1ZT-ICT-H5.pptx
Summary
# Interface types en hun toepassingen
Dit onderwerp behandelt de verschillende soorten computerinterfaces, hun fysieke kenmerken en hun toepassingen bij gegevensoverdracht tussen apparaten, waarbij zowel oudere als nieuwere technologieën aan bod komen.
## 1. Interface types en hun toepassingen
Een interface is de fysieke koppeling tussen twee of meer apparaten, zoals een kabel of een poort. Een protocol definieert hoe data over deze interface wordt verstuurd.
### 1.1 Grafische interfaces
Grafische kaarten maken gebruik van interfaces zoals Accelerated Graphics Port (AGP) en Peripheral Component Interface (PCI).
#### 1.1.1 PCI
PCI (Peripheral Component Interface) maakt gebruik van parallelle communicatie via 32 of 64 lijnen. Het bestaat uit een slot (poort) en een PCI-kaart die hierin wordt geplaatst.
#### 1.1.2 PCIe
PCIe (PCI Express) is sinds 2004 de opvolger van PCI. Het maakt gebruik van seriële communicatie en is niet compatibel met PCI-slots. PCIe maakt gebruik van "lanes", waarbij elke lane bestaat uit een zender- en een ontvangerverbinding voor full-duplex communicatie. Er zijn verschillende configuraties zoals 1x, 4x, 8x en 16x lanes. PCIe is beschikbaar in versies 1.0 tot en met 5.0 en is achterwaarts compatibel met eerdere versies.
### 1.2 Opslaginterfaces
#### 1.2.1 SATA
SATA (Serial AT Attachment) wordt gebruikt voor gegevensdragers en maakt verbinding met moederborden. Het is achterwaarts compatibel met oudere apparaten.
#### 1.2.2 mSATA
mSATA (mini-SATA) is een kleinere versie van SATA, ontworpen voor apparaten met beperkte ruimte. Het is niet hetzelfde als M.2, dat nieuwer is en zowel SATA als PCIe-gebaseerde NVMe ondersteunt.
#### 1.2.3 M.2
M.2 is een modernere interface die ondersteuning biedt voor zowel SATA als NVMe (PCIe-gebaseerde) protocollen. M.2 maakt gebruik van verschillende "keys" voor specifieke functionaliteiten.
### 1.3 Universal Serial Bus (USB)
USB is een populaire interface die bekend staat om zijn lage kosten, "dummy proof" ontwerp (eenvoudig in te pluggen) en schaalbaarheid.
#### 1.3.1 USB Connectoren
* **USB 2.0 Type A + B:** De meest voorkomende connectoren voor standaardtoestellen en printers.
* **USB 2.0 Mini-B en Micro-B:** Gebruikt voor camera's en smartphones vóór 2018.
* **USB 3.0 Type A:** Gebruikt voor nieuwere externe harde schijven en biedt aanzienlijk hogere snelheden dan USB 2.0.
* **USB 3.0 Type C:** Een "dummy proof" connector die vanaf 2018 op smartphones werd geïntroduceerd.
#### 1.3.2 USB Versies
* **USB 2.0:** Maakt gebruik van 4 connecties: +5V, GND, D+ en D-. De D+ en D- lijnen sturen signalen met tegengestelde tekens om storingen op te vangen. USB 2.0 werkt in half-duplex modus.
* **USB 3:** Heeft 9 connecties, inclusief extra datalijnen voor full-duplex communicatie. Het is achterwaarts compatibel met USB 2.0 connecties.
* **USB-C:** Maakt gebruik van 2x full-duplex verbindingen en is achterwaarts compatibel. USB-C kan ook andere protocollen ondersteunen, zoals DisplayPort.
> **Tip:** Let op bij USB-C, aangezien het verschillende functionaliteiten kan bieden afhankelijk van het apparaat en het gebruikte protocol.
### 1.4 Audio Interfaces
#### 1.4.1 3.5mm jack
De 3.5mm jack connector wordt gebruikt voor audio-uitvoer.
* **Stereo (2.0):** Standaard stereo geluid.
* **Surround (5.1, 7.1, 7.2, etc.):** Voor meerkanaals geluidssystemen.
#### 1.4.2 Andere Audio Interfaces
* **Tulpstekker (RCA):** Vaak gebruikt voor audio en video signalen.
* **DIN stekker:** Beschikbaar in verschillende varianten (3-polig, 4-polig, etc.).
### 1.5 Video Interfaces
#### 1.5.1 VGA
VGA (Video Graphics Array) is een analoge interface die geen audio ondersteunt. Het kan resoluties tot 2048x1538 (QXGA) aan.
#### 1.5.2 HDMI
HDMI (High Definition Multimedia Interface) is een digitale interface die zowel video als audio ondersteunt. Het kan zeer hoge resoluties aan, tot 7680x4320 (8K). HDMI kan ook een analoog signaal uitsturen voor achterwaartse compatibiliteit. Het wordt veel gebruikt voor schermen en televisies.
#### 1.5.3 DisplayPort (DP)
DisplayPort (DP) is een digitale interface die, net als HDMI, audio en hoge resoluties tot 7680x4320 (8K) ondersteunt. Sommige implementaties van DisplayPort kunnen ook via een USB-C connector worden geleverd.
#### 1.5.4 DVI
DVI (Digital Visual Interface) is een video-interface die in verschillende varianten bestaat:
* **DVI-D:** Digitale signalen.
* **DVI-A:** Analoge signalen.
* **DVI-I:** Geïntegreerd, ondersteunt zowel digitaal als analoog.
#### 1.5.5 Andere Video Interfaces
* **S-Video:** Een analoge video-interface.
* **Composite:** Een enkele signaallijn voor analoge video.
* **Component (YPrPb):** Scheidt kleurcomponenten voor betere beeldkwaliteit.
* **Scart:** Een oudere connector die audio en video kan transporteren.
### 1.6 Netwerk Interfaces
#### 1.6.1 RJ Connectoren
* **RJ11:** Wordt gebruikt voor telefonie en heeft 6 connecties.
* **RJ45:** Wordt gebruikt voor ethernetnetwerken en heeft 8 connecties.
#### 1.6.2 UTP Kabel
UTP staat voor Unshielded Twisted Pair. Er zijn ook varianten zoals Shielded (STP) en Foiled (FTP). Dit zijn kabels die de aders in paren verdraaien om interferentie te verminderen.
### 1.7 Andere Interfaces
#### 1.7.1 Seriële Poort (Serial Port)
Maakt gebruik van het UART protocol en wordt vaak geassocieerd met RS-232 (één-op-één communicatie) of RS-485 (één-op-meer communicatie). Vroeger gebruikt voor randapparatuur en serveradministratie.
#### 1.7.2 Parallelle Poort (Parallel Port)
Oorspronkelijk veel gebruikt voor printers.
#### 1.7.3 Thunderbolt
Ontwikkeld door Apple en Intel. Thunderbolt 3 biedt snelheden tot 40 Gb/s, wat vergelijkbaar is met USB 3.2 2x2 (20 Gb/s). Het is een veelzijdige interface die data, video en stroom kan transporteren.
---
# Specifieke interface standaarden
Dit onderwerp behandelt diverse specifieke interface standaarden die worden gebruikt voor de fysieke koppeling en dataoverdracht tussen hardwarecomponenten.
### 2.1 Interfaces voor uitbreidingskaarten
#### 2.1.1 PCI (Peripheral Component Interface)
PCI is een parallelle interface die gebruikmaakt van een 32- of 64-lijns bus. Het bestaat uit een slot op het moederbord en een bijbehorende kaart die hierin geplaatst wordt.
#### 2.1.2 PCIe (PCI Express)
PCIe, geïntroduceerd in 2004, is een seriële interface en is niet compatibel met de oudere PCI-standaard. Het maakt gebruik van "lanes", waarbij elke lane bestaat uit een zend- en ontvangstverbinding voor full-duplex communicatie. PCIe komt in verschillende configuraties: $1\text{x}$, $4\text{x}$, $8\text{x}$ en $16\text{x}$. De standaard heeft verschillende versies, van $1.0$ tot $5.0$, en is achterwaarts compatibel.
### 2.2 Interfaces voor dataopslag
#### 2.2.1 SATA (Serial AT Attachment)
SATA is een standaard voor seriële dataoverdracht naar opslagapparaten zoals harde schijven. Het is achterwaarts compatibel met eerdere versies.
#### 2.2.2 mSATA (Mini-SATA)
mSATA is een kleinere variant van SATA, ontworpen voor apparaten met beperkte ruimte. Het is niet hetzelfde als M.2, wat nieuwer is en zowel SATA als PCIe (NVMe) ondersteunt.
#### 2.2.3 M.2
M.2 is een veelzijdige interface die ondersteuning biedt voor zowel SATA als NVMe (gebaseerd op PCIe). Het kent verschillende "key" configuraties die de functionaliteit en compatibiliteit bepalen.
### 2.3 USB (Universal Serial Bus)
USB is een populaire standaard voor het aansluiten van randapparatuur vanwege de lage kosten, de gebruiksvriendelijkheid ("dummy proof") en schaalbaarheid.
#### 2.3.1 USB connectoren
* **USB 2.0 Type A + B**: Veelgebruikt voor standaardapparaten en printers.
* **USB 2.0 Mini-B en Micro-B**: Gebruikt voor camera's en smartphones vóór 2018.
* **USB 3.0 Type A**: Gebruikt voor nieuwere externe harde schijven en biedt aanzienlijk hogere snelheden dan USB 2.0.
* **USB 3.0 Type C**: Vanaf 2018 veelgebruikt in smartphones, is "dummy proof" en biedt verschillende voordelen.
#### 2.3.2 USB versies
* **USB 2.0**: Maakt gebruik van vier connectoren: $+5\text{V}$, $\text{GND}$, $D+$ en $D-$. De $D+$ en $D-$ signalen worden in tegengestelde tekens verzonden om storingen op te vangen, wat resulteert in half-duplex communicatie.
* **USB 3.0**: Gebruikt negen connectoren, inclusief extra datalijnen om full-duplex communicatie mogelijk te maken. Het is achterwaarts compatibel met USB 2.0 connecties.
* **USB-C**: Ondersteunt twee keer full-duplex communicatie en is achterwaarts compatibel. Het kan ook andere protocollen ondersteunen.
> **Tip:** Wees voorzichtig met USB-C, omdat de ondersteuning voor specifieke protocollen kan variëren.
### 2.4 Audio-interfaces
#### 2.4.1 3.5mm jack (AUX)
* **Stereo (2.0)**: Standaard voor stereogeluid.
* **Surround (5.1, 7.1, 7.2, etc.)**: Gebruikt voor meerkanaals audio.
#### 2.4.2 Andere audio-connectoren
* **Tulpstekker (RCA)**: Vaak gebruikt voor analoge audio- en video-signalen.
* **DIN stekker**: Verkrijgbaar in verschillende configuraties (3-polig, 4-polig, etc.).
### 2.5 Video-interfaces
#### 2.5.1 VGA (Video Graphics Array)
VGA is een analoge interface die geen audio ondersteunt en een maximale resolutie heeft van $2048 \times 1536$ (QXGA).
#### 2.5.2 HDMI (High Definition Multimedia Interface)
HDMI is een digitale interface die zowel video als audio ondersteunt. Het kan resoluties tot $7680 \times 4320$ (8K) aan. Het heeft ook analoge signaalondersteuning voor achterwaartse compatibiliteit. HDMI wordt gebruikt voor de meeste schermen en televisies.
#### 2.5.3 DisplayPort (DP)
DisplayPort is een digitale interface, met name voor monitoren, die ook audio ondersteunt en resoluties tot $7680 \times 4320$ (8K) aankan. DisplayPort kan ook via USB-C worden overgedragen.
#### 2.5.4 DVI (Digital Visual Interface)
DVI is er in verschillende varianten: DVI-D (digitaal), DVI-A (analoog) en DVI-I (geïntegreerd, digitaal en analoog).
#### 2.5.5 Andere video-interfaces
* **S-Video**: Scheidt kleur- en helderheidssignalen.
* **Composite**: Een enkele signaallijn voor zowel kleur als helderheid.
* **Component (YPrPb)**: Gebruikt drie signaallijnen voor een betere beeldkwaliteit.
* **Scart**: Een connector die vroeger veel werd gebruikt voor het aansluiten van AV-apparatuur (ook in een Mini Scart variant).
### 2.6 Netwerkconnectoren
#### 2.6.1 RJ connectoren
* **RJ11**: Gebruikt voor telefonie en heeft 6 connectoren.
* **RJ45**: Gebruikt voor ethernetnetwerken en heeft 8 connectoren.
#### 2.6.2 UTP kabel
UTP staat voor Unshielded Twisted Pair. Er bestaan ook varianten zoals Shielded (STP) en Foiled (FTP).
### 2.7 Seriële en parallelle poorten
#### 2.7.1 Seriële poort
Maakt gebruik van het UART-protocol en is vaak geconfigureerd als RS-232 (één-op-één communicatie) of RS-485 (één-op-meer communicatie). Vroeger veel gebruikt voor randapparatuur en serverbeheer.
#### 2.7.2 Parallelle poort
Werd voornamelijk gebruikt voor printers.
### 2.8 Overige interfaces
#### 2.8.1 Thunderbolt
Ontwikkeld door Apple en Intel, biedt Thunderbolt hoge snelheden. Thunderbolt 3 kan tot $40 \text{ Gb/s}$ bereiken, wat vergelijkbaar is met $20 \text{ Gb/s}$ voor USB $3.2$ $2\text{x}2$.
---
# Connectoren en hun eigenschappen
Dit onderwerp behandelt de diverse typen connectoren die gebruikt worden voor interfaces, hun fysieke kenmerken, compatibiliteit en specifieke toepassingen voor dataoverdracht, audio en video.
### 3.1 Algemene concepten van interfaces
Een interface definieert de fysieke koppeling tussen twee of meer apparaten, waaronder kabels en poorten. Een protocol beschrijft hoe data over deze interface wordt uitgewisseld.
### 3.2 Grafische kaarten interfaces
* **AGP (Accelerated Graphics Port):** Een eerdere interface voor grafische kaarten.
* **PCI (Peripheral Component Interface):** Een parallelle communicatiebus, beschikbaar in 32- of 64-lijns varianten, waarbij een PCI-kaart in een PCI-slot wordt geplaatst.
* **PCIe (PCI Express):** Een seriële interface die sinds 2004 is geïntroduceerd. Het maakt gebruik van 'lanes' (elk met een zend- en ontvangstverbinding voor full-duplex communicatie) en is verkrijgbaar in configuraties zoals 1x, 4x, 8x en 16x. PCIe is achterwaarts compatibel en kent verschillende versies (1.0 tot 5.0).
### 3.3 Opslagapparaten interfaces
* **SATA (Serial AT Attachment):** Een interface voor dataopslagapparaten, die voorheen op moederborden werd gebruikt en achterwaarts compatibel is.
* **mSATA (mini-SATA):** Een kleinere variant van SATA, bedoeld voor apparaten met beperkte ruimte. Dit is niet hetzelfde als M.2.
* **M.2:** Een modernere interface die zowel SATA als NVMe (PCIe-gebaseerde) protocollen ondersteunt. M.2 connectoren kunnen verschillende 'keys' hebben om compatibiliteit aan te geven.
### 3.4 Universal Serial Bus (USB)
USB is een populaire interface die gekenmerkt wordt door lage kosten, 'dummy proof' ontwerp, en schaalbaarheid.
#### 3.4.1 USB connectoren
* **USB 2.0 Type A + B:** Standaardconnectoren voor de meeste apparaten en printers.
* **USB 2.0 Mini-B en Micro-B:** Kleinere connectoren, voorheen veel gebruikt in camera's en smartphones (vóór circa 2018).
* **USB 3.0 Type A:** Een snellere variant voor bijvoorbeeld externe harde schijven.
* **USB 3.0 Type C:** De nieuwere, omkeerbare connector die vanaf circa 2018 op smartphones verscheen. Deze is 'dummy proof'.
#### 3.4.2 USB versies en eigenschappen
* **USB 2.0:** Maakt gebruik van vier connecties: $+5V$, GND, D+ en D-. D+ en D- verzenden signalen met tegengesteld teken om storingen op te vangen. USB 2.0 is half duplex.
* **USB 3.0:** Voegt negen connecties toe, inclusief extra datalijnen die full-duplex communicatie mogelijk maken. USB 3.0 is achterwaarts compatibel met USB 2.0-aansluitingen.
* **USB-C:** Biedt twee sets full-duplex verbindingen, is achterwaarts compatibel, en ondersteunt diverse protocollen naast USB zelf, zoals DisplayPort.
> **Tip:** Wees voorzichtig bij het combineren van verschillende USB-versies, de snelheid wordt bepaald door de traagste component.
### 3.5 Audio interfaces
* **3.5mm jack (AUX):**
* Stereo (2.0): Twee kanalen (links en rechts).
* Surround (5.1, 7.1, 7.2, etc.): Meerdere audiokanalen voor een meeslepende geluidservaring.
* **Andere audio connectoren:**
* Tulpstekker (RCA)
* DIN stekker (diverse configuraties zoals 3-polig, 4-polig)
### 3.6 Video interfaces
* **VGA (Visual Graphics Array):** Een analoge interface die geen audio ondersteunt en een maximale resolutie heeft van 2048x1538 (QXGA).
* **HDMI (High Definition Multimedia Interface):** Een digitale interface die audio ondersteunt en maximale resoluties tot 7680x4320 (8K) aankan. Het ondersteunt ook analoge signalen voor achterwaartse compatibiliteit en wordt veel gebruikt voor schermen en televisies.
* **DisplayPort (DP):** Een digitale interface, vergelijkbaar met HDMI, die audio ondersteunt en ook resoluties tot 7680x4320 (8K) aankan. Vaak geïntegreerd in USB-C connectoren (DP Alt Mode).
* **DVI (Digital Visual Interface):** Bestaat in varianten zoals DVI-D (digitaal), DVI-A (analoog) en DVI-I (geïntegreerd, digitaal en analoog).
* **Andere video connectoren:** S-Video, Composite, Component (YPrPb), Scart (inclusief Mini Scart).
### 3.7 Netwerk interfaces
* **RJ connectoren:**
* **RJ11:** Gebruikt voor telefonie en heeft zes mogelijke aansluitingen.
* **RJ45:** Gebruikt voor Ethernet-netwerken en heeft acht aansluitingen.
#### 3.7.1 UTP kabel
UTP staat voor Unshielded Twisted Pair. Andere varianten zijn Shielded Twisted Pair (STP) en Foiled Twisted Pair (FTP), die extra afscherming bieden tegen storingen.
### 3.8 Andere interfaces
* **Serial Port:** Gebruikt het UART-protocol en wordt voornamelijk geassocieerd met RS-232 (point-to-point) en RS-485 (one-to-many). Vroeger gebruikt voor randapparatuur en nog steeds voor serveradministratie.
* **Parallel Port:** Vroeger veel gebruikt voor printers.
* **Thunderbolt (Apple/Intel):** Een high-speed interface die snelheden tot 40 Gb/s (bij Thunderbolt 3) haalt, wat sneller is dan USB 3.2 Gen 2x2 (20 Gb/s).
> **Voorbeeld:** De overgang van een parallelle poort (voor printers) naar USB heeft geleid tot flexibelere en snellere aansluitingen voor randapparatuur.
> **Voorbeeld:** USB-C heeft de complexiteit verminderd door een universele, omkeerbare connector te bieden die meerdere protocollen ondersteunt, zoals data, video en stroom.
---
## Veelgemaakte fouten om te vermijden
- Bestudeer alle onderwerpen grondig voor examens
- Let op formules en belangrijke definities
- Oefen met de voorbeelden in elke sectie
- Memoriseer niet zonder de onderliggende concepten te begrijpen
Glossary
| Term | Definition |
|------|------------|
| Interface | De fysieke koppeling tussen twee of meer apparaten, zoals een kabel of poort, die de communicatie mogelijk maakt. |
| Protocol | De set regels die bepaalt hoe data wordt verstuurd over een interface tussen twee of meer apparaten. |
| PCI (Peripheral Component Interface) | Een interne computerbusstandaard die werd gebruikt om hardwarecomponenten, zoals grafische kaarten en geluidskaarten, aan het moederbord te verbinden. |
| PCI Express (PCIe) | Een seriële computeruitbreidingsbusspecificatie die snellere gegevensoverdracht mogelijk maakt dan PCI en wordt gebruikt voor grafische kaarten, netwerkkaarten en andere uitbreidingskaarten. |
| Lanes | Individuele datapaden binnen een PCIe-verbinding, die de bandbreedte en prestaties van de interface bepalen (bijv. 1x, 4x, 8x, 16x). |
| SATA (Serial AT Attachment) | Een interface die gebruikt wordt om opslagapparaten zoals harde schijven (HDD's) en solid-state drives (SSD's) aan te sluiten op het moederbord van een computer. |
| mSATA | Een kleinere vormfactor van de SATA-interface, ontworpen voor compacte apparaten waar ruimte beperkt is. |
| M.2 | Een interface die zowel SATA als NVMe (een snellere, PCIe-gebaseerde opslaginterface) ondersteunt en wordt gebruikt in compacte laptops en desktops. |
| NVMe (Non-Volatile Memory Express) | Een efficiënt communicatieprotocol dat speciaal is ontworpen voor toegang tot flashgeheugen via de PCIe-bus, wat resulteert in hogere snelheden voor SSD's. |
| USB (Universal Serial Bus) | Een industriestandaard die wordt gebruikt voor het aansluiten van randapparatuur op computers en andere apparaten, bekend om zijn veelzijdigheid en gebruiksgemak. |
| USB Type A | De meest voorkomende rechthoekige USB-connector die wordt gebruikt voor de meeste standaardapparaten zoals toetsenborden, muizen en USB-sticks. |
| USB Type B | Een USB-connector die vaak wordt gebruikt voor printers en scanners. |
| Mini-USB | Een kleinere USB-connector die vroeger veel werd gebruikt voor digitale camera's en MP3-spelers. |
| Micro-USB | Een nog kleinere USB-connector die wijdverbreid was in smartphones en andere mobiele apparaten vóór de opkomst van USB-C. |
| USB 3.0 | Een verbeterde versie van USB die hogere gegevensoverdrachtsnelheden biedt in vergelijking met USB 2.0 en extra pinnen heeft voor deze verbeterde prestaties. |
| USB-C | Een omkeerbare, compacte USB-connector die hogere snelheden, meer vermogen en ondersteuning voor diverse protocollen zoals DisplayPort biedt. |
| Full Duplex | Een communicatiemethode waarbij gegevens in beide richtingen tegelijkertijd kunnen worden verzonden. |
| Half Duplex | Een communicatiemethode waarbij gegevens in beide richtingen kunnen worden verzonden, maar slechts één richting tegelijkertijd. |
| AUDIO (3.5mm pin) | Een standaard connector die wordt gebruikt voor analoge audiostaten, zoals koptelefoons, luidsprekers en microfoons, in zowel stereo als surround sound configuraties. |
| VGA (Video Graphics Array) | Een analoge video-interface die wordt gebruikt om beeldschermen aan te sluiten, maar geen audio ondersteunt en beperkter is in resolutie dan moderne digitale interfaces. |
| HDMI (High Definition Multimedia Interface) | Een digitale interface die zowel video als audio van hoge kwaliteit kan overbrengen, veel gebruikt voor televisies, monitoren en projectoren. |
| DisplayPort (DP) | Een digitale display-interface die vergelijkbaar is met HDMI, vaak gebruikt voor monitoren en ondersteunt hoge resoluties en vernieuwingsfrequenties. |
| DVI (Digital Visual Interface) | Een video-interface die zowel analoge als digitale signalen kan overbrengen, en die verschillende varianten kent afhankelijk van de ondersteuning (DVI-D, DVI-A, DVI-I). |
| RJ11 | Een connector die voornamelijk wordt gebruikt voor telefonie en is voorzien van zes posities, maar meestal vier pinnen gebruikt. |
| RJ45 | Een connector met acht posities en acht pinnen, die wijdverbreid wordt gebruikt voor Ethernet-netwerken (netwerkkabels). |
| UTP (Unshielded Twisted Pair) | Een type netwerkkabel dat bestaat uit getwiste draadparen zonder extra afscherming, wat het gemeenschappelijk maakt voor Ethernet-verbindingen. |
| Serial Port | Een communicatie-interface die gegevens bit voor bit verzendt, historisch gebruikt voor randapparatuur zoals modems en oudere muizen, en vaak gebaseerd op UART en RS-232 protocollen. |
| Parallel Port | Een poort die gegevens parallel over meerdere lijnen tegelijkertijd verzendt, voornamelijk gebruikt voor printers in het verleden. |
| Thunderbolt | Een high-speed I/O-technologie ontwikkeld door Apple en Intel die hoge gegevensoverdrachtsnelheden biedt en veelzijdigheid door ondersteuning voor data, video en stroom. |
Cover
3_Lecture_3.pdf
Summary
# Basis statische analyse van uitvoerbare bestanden
Dit onderwerp introduceert de initiële fasen van het analyseren van uitvoerbare bestanden door middel van statische methoden, waarbij de nadruk ligt op taalherkenning, codebeheer en fundamentele bestandskenmerken [2](#page=2).
### 1.1 Programmeertalen en codebeheer
Het begrijpen van de context van een uitvoerbaar bestand vereist het onderscheiden van programmeertalen en het concept van beheerde versus onbeheerde code [3](#page=3).
#### 1.1.1 Programmeren versus Scripting talen
Een fundamenteel onderscheid ligt tussen programmeertalen en scripting talen, wat nauw verbonden is met het concept van interpreteren versus compileren [3](#page=3).
* **Gecompileerde talen**: Code wordt direct omgezet naar machinecode door een compiler voordat het programma wordt uitgevoerd.
* **Geïnterpreteerde talen**: Code wordt regel voor regel gelezen en uitgevoerd door een interpreter tijdens de runtime.
#### 1.1.2 Beheerde versus onbeheerde code
Een cruciaal concept in moderne softwareontwikkeling is het verschil tussen beheerde (managed) en onbeheerde (unmanaged) code [3](#page=3).
* **Onbeheerde code (Native Code)**: Deze code wordt rechtstreeks door het besturingssysteem uitgevoerd en biedt meer controle maar vereist handmatig geheugenbeheer en foutafhandeling. Voorbeelden zijn C en C++ [3](#page=3).
* **Beheerde code (Managed Code)**: Deze code draait binnen een runtime-omgeving, zoals de Common Language Runtime (CLR) voor.NET-applicaties. De CLR biedt diensten zoals automatisch geheugenbeheer (garbage collection), uitzonderingsafhandeling (exception handling), beveiligingsdiensten en Just-In-Time (JIT) compilatie [3](#page=3).
> **Tip:** Het onderscheid tussen beheerde en onbeheerde code is essentieel voor het begrijpen van hoe programma's geheugen beheren, fouten afhandelen en hoe ze interageren met het besturingssysteem.
### 1.2 Kenmerken van een uitvoerbaar bestand
Het uitvoeren van een statische analyse begint met het onderzoeken van de basiseigenschappen van een bestand [4](#page=4).
#### 1.2.1 Eigenschappen verkennen
Door met de rechtermuisknop op een uitvoerbaar bestand (.exe) te klikken en "Eigenschappen" te selecteren, kunnen verschillende basisinformatie worden verkregen. De locatie van deze informatie binnen het bestand is een belangrijk aspect van statische analyse [4](#page=4).
#### 1.2.2 Compileertijden
De compileertijden van software kunnen ook relevant zijn voor statische analyse, hoewel de directe details hierover op pagina 5 worden vermeld. Dit kan inzicht geven in de ontwikkelingsworkflow en gebruikte technologieën [5](#page=5).
> **Example:** Bij het analyseren van een onbekend.exe-bestand, kan het controleren van de bestandseigenschappen in het besturingssysteem (zoals bestandsgrootte, creatiedatum, en versie-informatie) een eerste indicatie geven van de aard van het programma [4](#page=4).
> **Tip:** Sta altijd stil bij de *bron* van de informatie. Bestandsmetagegevens kunnen door de gebruiker worden gewijzigd, dus ze moeten met voorzichtigheid worden geïnterpreteerd [4](#page=4).
---
# Hashing en string-extractie voor bestandsidentificatie
Hashing en het extraheren van strings uit binaire bestanden zijn cruciale technieken voor bestandsidentificatie, verificatie en het opsporen van malware [11](#page=11) [6](#page=6) [9](#page=9).
### 2.1 Hashing als digitale vingerafdruk
Hashing is een proces waarbij een cryptografische functie wordt toegepast op data om een unieke, vaste-lengte output te genereren, bekend als een hashwaarde of digest. Deze hashwaarde dient als een digitale vingerafdruk voor het bestand [8](#page=8) [9](#page=9).
#### 2.1.1 Eigenschappen van hashfuncties
Hashfuncties zijn "one-way" cryptografische functies, wat betekent dat het praktisch onmogelijk is om de originele data te reconstrueren vanuit de hashwaarde. Kenmerkend voor hashfuncties zijn [8](#page=8):
* **Input-onafhankelijke lengte**: De lengte van de hashwaarde is constant, ongeacht de grootte van het originele bestand [8](#page=8).
* **Determinisme**: Dezelfde input levert altijd dezelfde hashwaarde op [8](#page=8).
* **Gevoeligheid voor wijzigingen**: Zelfs een kleine wijziging van 1-bit in de input data leidt tot een significant andere hashwaarde [9](#page=9).
#### 2.1.2 Toepassingen van hashing
Hashing kent diverse toepassingen:
* **Bestandsverificatie**: Bij het downloaden van bestanden kan de hashwaarde worden vergeleken met een verwachte waarde om de integriteit van het bestand te waarborgen [9](#page=9).
* **Malware-identificatie en -tracking**: De anti-malware industrie gebruikt hashes om bekende malware-varianten te identificeren, te classificeren en bij te houden. Door hashes te genereren, te doorzoeken en te delen, kunnen beveiligingsonderzoekers snel bekende bedreigingen detecteren [9](#page=9).
* **Blacklisting en Whitelisting**: Hashwaarden kunnen worden gebruikt om lijsten van bekende kwaadaardige bestanden (blacklists) of vertrouwde bestanden (whitelists) te creëren [9](#page=9).
> **Tip:** Tools zoals VirusTotal bieden de mogelijkheid om bestanden te scannen met meerdere antivirus-engines via hun hashwaarden, wat de detectiekans van bekende malware vergroot. Voorzichtigheid is echter geboden met het uploaden van gevoelige data. Een alternatieve methode is om de hashwaarde van een bestand te genereren en deze vervolgens op te zoeken op het internet, eventueel in combinatie met unieke strings uit het bestand [6](#page=6).
#### 2.1.3 Populaire hashing-algoritmes
MD5 en SHA-1 zijn twee veelgebruikte hashing-algoritmes [9](#page=9).
#### 2.1.4 Beschikbare tools
Tools zoals 'WinMD5', NirSoft's 'HashMyFiles', en Sysinternals' 'Sigcheck' kunnen worden gebruikt voor het genereren en beheren van hashwaarden [9](#page=9).
### 2.2 Extractie van strings uit binaire bestanden
Het extraheren van leesbare strings uit binaire bestanden is een methode voor statische analyse om informatie te verkrijgen die in het bestand is ingebed [11](#page=11).
#### 2.2.1 Werkwijze en nut
Het direct openen van een binair bestand in een tekst-editor zoals Kladblok levert vaak weinig bruikbare informatie op. Een hex-editor is beter, maar het direct identificeren van betekenisvolle informatie kan nog steeds uitdagend zijn. Door echter de ASCII- of Unicode-strings binnen een bestand te extraheren, kunnen programmeurs en beveiligingsanalisten statische data, zoals configuratie-informatie, foutmeldingen, URL's of commando's, ontdekken [11](#page=11).
> **Tip:** Wees je ervan bewust dat strings in code misleidend kunnen zijn of pas laat in de uitvoering van het programma worden gebruikt. De interpretatie van geëxtraheerde strings vereist context en kennis van de code [11](#page=11).
#### 2.2.2 Beschikbare tools
* **Sysinternals Strings**: Een command-line tool voor het extraheren van strings uit binaire bestanden [11](#page=11).
* **McAfee BinText**: Een gratis grafische tool (GUI) voor string-extractie (oorspronkelijke downloadlink kan verouderd zijn) [11](#page=11).
* **Linux `strings` commando**: Een standaard command-line utility in Linux-systemen [11](#page=11).
#### 2.2.3 ASCII en Unicode strings
Strings in bestanden kunnen in verschillende coderingen voorkomen, met name ASCII en Unicode [12](#page=12).
* **ASCII**: Gebruikt één byte per karakter [12](#page=12).
* **Unicode**: Vaak gebruikt in Windows-systemen, gebruikt UTF-16 met twee bytes per karakter. Een "Wide Character String" duidt meestal op een Unicode string [12](#page=12).
* **Null Terminator**: Zowel ASCII- als Unicode-strings eindigen doorgaans met een null terminator ($ \text{'\0'} $ voor ASCII, $ \text{'\0\0'} $ voor UTF-16) [12](#page=12).
#### 2.2.4 Endianness en Byte Order Mark (BOM)
Bij het verwerken van multi-byte karakters, zoals in Unicode, is de byte-volgorde (endianness) van belang [13](#page=13).
* **UTF-16 big-endian**: Herkenbaar aan de Byte Order Mark (BOM) `0xfe 0xff` [13](#page=13).
* **UTF-16 little-endian**: Herkenbaar aan de BOM `0xff 0xfe` [13](#page=13).
---
# Omgaan met verpakte en geobfusceerde malware
Dit gedeelte behandelt technieken die malwaregebruikers inzetten om hun kwaadaardige software te verbergen, met name door middel van compressie en obfuscatie, en de uitdagingen die dit met zich meebrengt voor analyse [16](#page=16).
### 3.1 Compressie en obfuscatie als verhullingstechnieken
Obfuscatie is een breder concept dat als doel heeft de uitvoering van code te verbergen. Packing wordt hierin beschouwd als een subset van obfuscatie. Gepakte bestanden zijn gecomprimeerd en daardoor niet direct analyseerbaar met basale statische technieken. Het doel van packing kan tweeledig zijn: de malware kleiner maken, obfusceren, of beide. In essentie komt het erop neer dat twee uitvoerbare bestanden (EXEs) in één worden geplaatst [16](#page=16) [17](#page=17).
> **Tip:** Een belangrijke aanwijzing dat een bestand verpakt of geobfusceerd is, is het ontbreken van veel herkenbare strings, of dat de aanwezige strings overwegend onleesbaar zijn [17](#page=17).
### 3.2 Uitdagingen voor statische analyse
Het statisch analyseren van een verpakt bestand is mogelijk, maar aanzienlijk moeilijker. De compressie en obfuscatie verbergen de originele code, waardoor standaard analysehulpmiddelen moeite hebben om de functionaliteit van de malware te doorgronden [16](#page=16) [17](#page=17).
### 3.3 Hulpmiddelen voor packerdetectie
Er zijn specifieke tools beschikbaar om packers te detecteren, waaronder Exeinfo PE en PEiD. Deze tools beschikken over ingebouwde detectieplugins die kunnen helpen bij het identificeren van gebruikte packers of compilers [18](#page=18).
> **WARNING!** Een cruciaal punt bij het gebruik van deze tools is dat veel plugins, zoals die van Exeinfo, daadwerkelijk het binaire bestand zullen uitvoeren in een poging het type packer te bepalen. Het is daarom **essentieel** om dergelijke tools alleen te gebruiken binnen een veilige virtuele machine (VM) om potentiële besmetting te voorkomen [18](#page=18).
---
# De PE-bestandsstructuur en de analyse ervan
Dit onderwerp behandelt de Portable Executable (PE) bestandsstructuur die door Windows wordt gebruikt voor uitvoerbare bestanden, inclusief de headers, secties, imports, exports en de analysehulpmiddelen [20](#page=20) [22](#page=22).
### 4.1 De Portable Executable (PE) Formaat
De PE-formaat is het standaardformaat voor alle uitvoerbare bestanden op Windows. Bestanden met bruikbare code in dit formaat hebben extensies zoals EXE, DLL, SCR en SYS. De PE-structuur omvat altijd een DOS-header en een NT-header voor achterwaartse compatibiliteit. De PE-header bevat aanzienlijke informatie die nuttig is voor een analist, zoals de tijdstempel van compilatie, gekoppelde bibliotheken, API-aanroepen, imports en exports. De koppeling van bibliotheken kan statisch, dynamisch of op runtime gebeuren [20](#page=20) [22](#page=22).
> **Tip:** De extensie van een bestand is niet bepalend voor het bestandsformaat; het formaat wordt bepaald door de headers [22](#page=22).
Het PE-formaat is ontstaan uit het MS-DOS MZ-bestandsformaat, dat op zijn beurt gebaseerd was op COFF (Unix Common Object File Format) [22](#page=22).
#### 4.1.1 Belangrijke componenten van een PE-bestand
Een PE-bestand bestaat primair uit twee hoofdcomponenten [23](#page=23):
* **Headers:** Dit omvat zowel de DOS-header als de NT-header (PE-header) [23](#page=23).
* **Secties:** Deze bevatten de 'statische' stukken data die tijdens de uitvoering van het programma worden gebruikt. Typisch zijn er vier secties, maar dit aantal kan oplopen tot tien of meer [23](#page=23).
> **Tip:** De 'MZ' karakters aan het begin van EXE-bestanden zijn de initialen van Mark Zbikowski, de MS-DOS architect en de maker van het PE-formaat [34](#page=34).
#### 4.1.2 Informatie in de PE-headers
De PE-header bevat diverse nuttige gegevens voor analyse [20](#page=20):
* **Imports:** Functies die uit andere bibliotheken worden gebruikt. Deze kunnen veel zeggen over het doel van een bestand, maar zijn niet altijd definitief omdat ze op runtime kunnen worden aangemaakt of gewijzigd, of omdat de benodigde DLL's zich in de Resource Section bevinden [21](#page=21) [28](#page=28).
* **Exports:** Functies die bedoeld zijn om door andere programma's te worden gebruikt. Deze functionaliteit wordt voornamelijk 'gezien' in DLL-bestanden. DLL's zonder exports worden vaak als verdacht beschouwd [21](#page=21) [30](#page=30).
* **Timestamp:** Geeft aan wanneer het programma is gecompileerd [20](#page=20).
* **Sections:** De verschillende secties van het bestand. Veelvoorkomende secties zijn:
* `.text`: Bevat de uitvoerbare code [31](#page=31).
* `.rdata`: Read-only data, waaronder import- en exporttabellen [31](#page=31).
* `.data`: Globale data die door het hele programma wordt benaderd [31](#page=31).
* `.rsrc`: Resources zoals binaire data, iconen, logo's en menu's [21](#page=21) [31](#page=31).
* **Subsystem:** Specificeert of het een Command-Line Interface (CLI) of een Graphical User Interface (GUI) programma is [21](#page=21).
* **Resources:** Statisch gecodeerde data zoals iconen, menu's, strings en logo's [21](#page=21).
#### 4.1.3 Veelgebruikte DLL's
Sommige DLL's worden veelvuldig gebruikt in Windows-applicaties en kunnen indicatoren geven van de functionaliteit van een programma [27](#page=27):
* `kernel32.dll`: Algemene I/O en systeemaanroepen [27](#page=27).
* `advapi32.dll`: Typische registerbewerkingen [27](#page=27).
* `user32.dll`: Functies voor de gebruikersinterface [27](#page=27).
* `gdi32.dll`: Grafische functies [27](#page=27).
* `ntdll.dll`: Native API-functies [27](#page=27).
* `wsock32.dll`: Netwerk sockets [27](#page=27).
* `wininet` / `ws2_32.dll`: Netwerkactiviteit [27](#page=27).
### 4.2 Analysehulpmiddelen voor PE-bestanden
Er zijn diverse tools beschikbaar voor het analyseren van PE-bestanden, elk met hun eigen specialisaties [22](#page=22) [31](#page=31):
* **PEView:** Een veelgebruikte tool voor het bekijken van de PE-structuur [31](#page=31).
* **Dependency Walker:** Toont dynamisch gelinkte functies en de afhankelijkheden van een uitvoerbaar bestand [31](#page=31) [35](#page=35).
* **PE Explorer:** Een commerciële tool voor het inspecteren en bewerken van PE-bestanden [31](#page=31).
* **Resource Hacker:** Specifiek voor het bekijken en aanpassen van de `.rsrc` sectie, inclusief iconen en titels [31](#page=31) [36](#page=36).
* **PEStudio:** Een krachtige tool voor malware-analyse die informatie uit PE-bestanden extraheert en analyseert [31](#page=31).
* **CFF Explorer:** Een uitgebreide PE-editor en -analysator [31](#page=31).
* **PE Insider:** Een geavanceerde PE-bestandsanalysator [31](#page=31).
> **Example:** Een voorbeeld van het analyseren van de `.rdata` sectie in een Linux ELF-bestand met `objdump -s hello` [32](#page=32).
#### 4.2.1 Import- en exportanalyse als malware-indicatoren
Het analyseren van de imports en exports van een PE-bestand kan waardevolle inzichten geven in de aard van het programma, met name bij malware-analyse. Bijvoorbeeld, de exports van een bestand genaamd `KEYLOGGER.EXE` kunnen hints geven over de functionaliteit als een keylogger [28](#page=28) [29](#page=29).
> **Tip:** Als een DLL-bestand geen exports bevat, kan dit een indicatie zijn van kwaadaardige intenties [30](#page=30).
---
# Praktische overwegingen en beveiliging bij malwareanalyse
Dit onderwerp bespreekt essentiële praktische overwegingen en beveiligingsmaatregelen bij het uitvoeren van malwareanalyse, met een focus op het veilige gebruik van virtuele machines.
### 5.1 Het belang van virtuele machines
Virtuele machines (VM's) zijn een fundamenteel instrument bij malwareanalyse om de eigen systemen te beschermen tegen potentiële infectie of schade. Ze bieden een geïsoleerde omgeving waarin malware veilig kan worden uitgevoerd en onderzocht zonder invloed uit te oefenen op het hostbesturingssysteem [39](#page=39).
### 5.2 Strategisch gebruik van snapshots
Snapshots zijn cruciaal voor het efficiënt en veilig uitvoeren van analyse-taken op een VM [40](#page=40).
#### 5.2.1 Snapshot strategie
* **Initiële snapshot:** Neem direct na een schone installatie van het besturingssysteem een snapshot van de VM. Dit dient als een schoon startpunt [40](#page=40).
* **Software installatie en analyse:** Installeer vervolgens de benodigde software voor analyse en voer analyses uit met een malware sample [40](#page=40).
* **Tussentijdse snapshots:** Tijdens de analyse van een specifiek malware sample is het aan te raden om regelmatig snapshots te maken. Dit maakt het mogelijk om snel terug te keren naar een eerdere werkende staat als de analyse misgaat of de VM instabiel wordt [40](#page=40).
* **Snapshot opschoning:** Wanneer extra software noodzakelijk was voor de analyse, kan de VM worden teruggezet naar de initiële schone snapshot. De overtollige software wordt verwijderd en er wordt een nieuwe schone snapshot gemaakt. Dit zorgt ervoor dat de VM schoon blijft voor toekomstige analyses [40](#page=40).
> **Tip:** Maak snapshots vroeg en vaak tijdens het analyseproces om flexibiliteit te behouden.
### 5.3 Risico's van virtuele machines
Hoewel VM's isolatie bieden, zijn er inherente risico's waar men zich bewust van moet zijn [41](#page=41).
* **Auto USB Connect:** Zorg ervoor dat de automatische USB-verbinding is uitgeschakeld in de VM-instellingen. Anders kunnen externe opslagapparaten, zoals USB-sticks, onbedoeld geïnfecteerd raken wanneer ze worden aangesloten op de VM [41](#page=41).
* **Detectie en ontsnapping:** Malware kan detecteren dat het in een VM draait en soms technieken gebruiken om te proberen te ontsnappen aan de virtualisatie-omgeving. Het is daarom belangrijk om altijd de meest recente versie van de virtualisatiesoftware (zoals VMware) te gebruiken [41](#page=41).
* **Host-gast interactie:** Wees voorzichtig met kopiëren en plakken van data tussen het host- en gastbesturingssysteem. Gevoelige informatie of potentieel schadelijke code kan onbedoeld worden overgedragen [41](#page=41).
### 5.4 Netwerkconfiguratie voor malwareanalyse
De netwerkconfiguratie van een VM is een kritiek aspect voor veilige malwareanalyse [42](#page=42).
* **Host-Only Networking:** Dit netwerktype isoleert de VM volledig van externe netwerken, inclusief het internet. Dit is ideaal voor analyses waarbij de malware geen externe communicatie hoeft te simuleren [42](#page=42).
* **Meerdere VM's en interne LAN:** Een configuratie met meerdere VM's die via een lokaal netwerk (LAN) zijn verbonden, maar gescheiden van het internet, kan nuttig zijn. Dit vereist echter het installeren of simuleren van benodigde diensten [42](#page=42).
* **Simulatie van netwerkdiensten:** Voor analyses die externe communicatie vereisen, maar waarbij directe internettoegang ongewenst is, kunnen tools zoals FakeNet of INetSim worden gebruikt. Deze tools simuleren netwerkdiensten en maken het mogelijk om netwerkverkeer te observeren zonder blootstelling aan het internet. Meer gedetailleerde informatie hierover volgt later [42](#page=42).
* **Begrip van netwerkmodi:** Het is essentieel om het verschil te kennen tussen Bridged Mode en NAT Mode [42](#page=42).
* **Bridged Mode:** De VM krijgt een eigen IP-adres op hetzelfde fysieke netwerk als de host.
* **NAT Mode (Network Address Translation):** De VM deelt het IP-adres van de host en deelt een eigen netwerk achter de host.
* **Live analyse:** In sommige gevallen kan het noodzakelijk zijn om de VM direct aan te sluiten op het internet. Dit brengt aanzienlijke risico's met zich mee. **DENK GOED NA VOORDAT U DIT DOET!!** ] [42](#page=42).
> **Tip:** Een zorgvuldige netwerkconfiguratie minimaliseert de blootstelling aan risico's en maximaliseert de effectiviteit van de analyse.
---
## Veelgemaakte fouten om te vermijden
- Bestudeer alle onderwerpen grondig voor examens
- Let op formules en belangrijke definities
- Oefen met de voorbeelden in elke sectie
- Memoriseer niet zonder de onderliggende concepten te begrijpen
Glossary
| Term | Definition |
|------|------------|
| Programmeertalen | Een formele taal die instructies definieert voor een computer om taken uit te voeren, waarbij syntax en semantiek nauwkeurig worden gespecificeerd. |
| Scripttalen | Een programmeertaal die meestal wordt geïnterpreteerd in plaats van gecompileerd, en die vaak wordt gebruikt voor het automatiseren van taken of het ontwikkelen van webapplicaties. |
| Gecompileerde code | Code die direct door de processor van een computer kan worden uitgevoerd nadat deze door een compiler is vertaald van een hogere programmeertaal naar machinettaal. |
| Geïnterpreteerde code | Code die niet direct door de processor wordt uitgevoerd, maar die tijdens de uitvoering regel voor regel wordt verwerkt door een interpreter. |
| Managed code | Code die wordt uitgevoerd binnen een runtime-omgeving, zoals de Common Language Runtime (CLR) van .NET, die automatische geheugenbeheer en beveiligingsfuncties biedt. |
| Unmanaged code (Native code) | Code die rechtstreeks communiceert met het besturingssysteem en geheugenbeheer vereist, vaak geschreven in talen zoals C of C++. |
| Common Language Runtime (CLR) | De uitvoeringsengine van het .NET Framework die geheugenbeheer, beveiliging en het afhandelen van uitzonderingen biedt voor managed code. |
| Garbage collection | Een vorm van automatisch geheugenbeheer die achtergrondprocessen gebruikt om geheugen vrij te geven dat niet langer in gebruik is door een programma. |
| Reflectie | Het vermogen van een programma om zijn eigen structuur, metagegevens en gedrag te inspecteren en te manipuleren tijdens runtime. |
| PE-formaat (Portable Executable) | Een bestandsformaat dat door Microsoft Windows wordt gebruikt voor uitvoerbare bestanden, zoals .exe, .dll, .obj en .sys bestanden. |
| PE-headers | De structuur aan het begin van een PE-bestand die metadata bevat over het uitvoerbare bestand, zoals informatie over de secties, imports en exports. |
| Imports | Verwijzingen in een uitvoerbaar bestand naar functies die in externe dynamische-linkbibliotheken (DLL's) zijn opgeslagen en door het programma worden gebruikt. |
| Exports | Functies die een uitvoerbaar bestand of DLL beschikbaar stelt voor gebruik door andere programma's. |
| Hashing | Een cryptografisch proces waarbij een invoer van willekeurige grootte wordt omgezet in een uitvoer van vaste grootte (een hashwaarde), die uniek is voor de invoer. |
| MD5 (Message-Digest Algorithm 5) | Een cryptografische hashfunctie die een 128-bits hashwaarde genereert, vaak gebruikt voor het controleren van de integriteit van gegevens, hoewel het wordt beschouwd als onveilig voor cryptografische doeleinden. |
| SHA-1 (Secure Hash Algorithm 1) | Een cryptografische hashfunctie die een 160-bits hashwaarde genereert, die veel werd gebruikt voor het verifiëren van de integriteit van bestanden en digitale handtekeningen, maar nu als verouderd wordt beschouwd. |
| Strings | Reeksen leesbare tekens die binnen een binair bestand zijn ingebed, wat kan duiden op functionaliteit, URL's of andere informatie. |
| ASCII | Een tekencodering die 7 bits gebruikt om 128 verschillende tekens te representeren, voornamelijk voor Engelse letters en symbolen. |
| Unicode | Een tekencodering die de meeste tekens van alle schrijfsystemen ter wereld kan weergeven, waarbij typisch meer dan 1 byte per teken wordt gebruikt. |
| Endianness | De volgorde waarin bytes van een multi-byte gegevenseenheid (zoals een integer) worden opgeslagen in het geheugen of worden verzonden over een netwerk. |
| Byte Order Mark (BOM) | Een speciale Unicode-karakterreeks die aan het begin van een tekstbestand wordt geplaatst om de byte-volgorde (endianness) van de tekst aan te geven en om aan te geven dat het UTF-gecodeerd is. |
| Packers | Programma's die uitvoerbare bestanden comprimeren of obfusceren om hun grootte te verkleinen of om analyse te bemoeilijken, vaak gebruikt in malware om detectie te ontwijken. |
| Obfuscatie | Het proces van het maken van code moeilijker te begrijpen of te analyseren, vaak gebruikt om intellectueel eigendom te beschermen of om malware te verbergen. |
| Statische analyse | Het onderzoeken van een programma zonder het daadwerkelijk uit te voeren, waarbij de code, datastructuren en metadata worden geanalyseerd. |
| Dynamische analyse | Het observeren van het gedrag van een programma tijdens de uitvoering, inclusief systeemoproepen, geheugengebruik en netwerkactiviteit. |
| Virtuele machine (VM) | Een softwarematige simulatie van een computersysteem die het mogelijk maakt om besturingssystemen en applicaties te draaien in een geïsoleerde omgeving. |
| Snapshot | Een momentopname van de staat van een virtuele machine op een bepaald tijdstip, die kan worden gebruikt om terug te keren naar die staat indien nodig. |
Cover
5_Binair_Talst_Informatietheorie (1).pdf
Summary
# Het binaire talstelsel en bits
Dit onderwerp introduceert de fundamenten van het binaire talstelsel, de representatie van getallen en de relatie tussen bits en de hoeveelheid informatie, evenals de definitie van een byte.
### 1.1 Het decimale en binaire talstelsel
Het decimale talstelsel, dat we dagelijks gebruiken, is gebaseerd op tien cijfers (0-9). In tegenstelling hiermee werkt het binaire talstelsel met slechts twee cijfers: 0 en 1. Dit maakt het binair talstelsel bijzonder geschikt voor digitale systemen, waar elektronische schakelingen zich in één van twee toestanden kunnen bevinden (bijvoorbeeld aan of uit) [5](#page=5).
#### 1.1.1 Representatie van getallen in binair
Net als in het decimale stelsel, waarbij elke positie een macht van 10 vertegenwoordigt (eenheden, tientallen, honderdtallen, etc.), vertegenwoordigt elke positie in het binaire stelsel een macht van 2. Van rechts naar links zijn dit $2^0$ $2^1$ $2^2$ $2^3$ $2^4$ enzovoort [1](#page=1) [2](#page=2) [4](#page=4) [6](#page=6) [8](#page=8).
Om een decimaal getal om te zetten naar binair, zoek je de juiste combinatie van machten van 2 die optellen tot het decimale getal. Een '1' op een bepaalde positie betekent dat de bijbehorende macht van 2 wordt meegenomen in de som, terwijl een '0' betekent dat deze macht van 2 wordt genegeerd.
**Voorbeeld van binaire representatie:**
* Het decimale getal 1 wordt binair gerepresenteerd als 1 (de macht $2^0$ wordt gebruikt) [6](#page=6).
* Het decimale getal 3 wordt binair gerepresenteerd als 11 (de machten $2^1$ en $2^0$ worden gebruikt: $2 + 1 = 3$) [6](#page=6).
* Het decimale getal 7 wordt binair gerepresenteerd als 111 (de machten $2^2$, $2^1$ en $2^0$ worden gebruikt: $4 + 2 + 1 = 7$) [6](#page=6).
* Het decimale getal 15 wordt binair gerepresenteerd als 1111 (de machten $2^3$, $2^2$, $2^1$ en $2^0$ worden gebruikt: $8 + 4 + 2 + 1 = 15$) [6](#page=6).
* Het decimale getal 16 wordt binair gerepresenteerd als 10000 (de macht $2^4$ wordt gebruikt) [6](#page=6).
#### 1.1.2 Bits en de hoeveelheid informatie
Een enkel cijfer in het binaire talstelsel wordt een **bit** genoemd. Een bit is de fundamentele eenheid van informatie en kan de waarde 0 of 1 aannemen [6](#page=6).
Het aantal bits dat nodig is om een bepaald getal te representeren, hangt af van de grootte van dat getal. Algemeen geldt dat voor het representeren van getallen tot een maximumwaarde van $2^n - 1$, er $n$ bits nodig zijn [6](#page=6) [7](#page=7).
* Met 1 bit kunnen we getallen van 0 tot $2^1 - 1 = 1$ representeren (dus 0 en 1) [7](#page=7).
* Met 2 bits kunnen we getallen van 0 tot $2^2 - 1 = 3$ representeren (dus 0, 1, 2, 3) [7](#page=7).
* Met 3 bits kunnen we getallen van 0 tot $2^3 - 1 = 7$ representeren [7](#page=7).
* Met 4 bits kunnen we getallen van 0 tot $2^4 - 1 = 15$ representeren [7](#page=7).
* Met 5 bits kunnen we getallen van 0 tot $2^5 - 1 = 31$ representeren [7](#page=7).
* Met 16 bits kunnen we getallen tot $2^{16} - 1 = 65.535$ representeren [7](#page=7).
De grafiek op pagina 8 en 10 illustreert de relatie tussen het aantal bits en het maximale decimale getal dat hiermee geschreven kan worden. Hoe meer bits er beschikbaar zijn, hoe groter het bereik van de getallen dat kan worden weergegeven, wat direct correleert met de hoeveelheid informatie die kan worden opgeslagen of verwerkt [10](#page=10) [8](#page=8).
### 1.2 Bytes en grotere informatie-eenheden
Een **byte** is een standaardgroepering van bits. Traditioneel en meest gangbaar is dat **8 bits gelijk zijn aan 1 byte** [9](#page=9).
Met één byte kunnen we dus 8 bits gebruiken. Dit betekent dat we met 1 byte alle cijfers van 0 tot 9 kunnen weergeven, aangezien daarvoor slechts 4 bits nodig zijn. Een byte kan echter veel meer informatie bevatten. Het getal 255 kan bijvoorbeeld worden weergegeven met 8 bits ($2^8 - 1 = 255$) [9](#page=9).
* Met 10 bits kunnen we het getal 1023 weergeven [9](#page=9).
* Grotere eenheden van informatie worden gevormd door bytes te groeperen:
* Een kilobyte (kB) wordt in het SI-systeem gedefinieerd als 1000 bytes, hoewel het vroeger vaak 1024 bytes ($2^{10}$) betekende. Dit komt overeen met 8000 bits [9](#page=9).
Het aantal mogelijke combinaties, en dus de hoeveelheid informatie, groeit exponentieel met het aantal bits. Met een grote hoeveelheid bits, zoals die in 2 bytes (16 bits), kan een aanzienlijke hoeveelheid informatie worden opgeslagen. Dit principe is fundamenteel voor de opslag en verwerking van alle digitale data [10](#page=10).
---
# Shannon's informatietheorie en entropie
Shannon's informatietheorie, voorgesteld door Claude E. Shannon in 1948, definieert entropie als een maat voor de diversiteit en informatie binnen een systeem. Deze theorie heeft ook aanzienlijke implicaties voor het begrijpen van biologische systemen [12](#page=12).
### 2.1 Oorsprong en kernconcepten
Claude E. Shannon introduceerde zijn "Mathematical Theory of Communication" in 1948, gebaseerd op zijn werk bij Bell Laboratories. Zijn eerdere bijdragen omvatten het ontwerpen van digitale schakelingen, wat de basis legde voor het begrijpen van informatieoverdracht. Shannon definieerde informatië, ook wel entropie genoemd, als een kwantitatieve maat voor de hoeveelheid informatie die een signaal kan bevatten [12](#page=12).
### 2.2 Entropie als maat voor diversiteit
Entropie, en daarmee de hoeveelheid informatie, wordt beschouwd als een maat voor de diversiteit binnen een systeem. Een eenvoudig systeem met weinig variatie, zoals een enkele bit die slechts twee toestanden kan aannemen (0 of 1), bevat weinig informatie. Daarentegen kan een grotere hoeveelheid bits, zoals 8000 bits (ongeveer 1 kilobyte), al een aanzienlijke hoeveelheid informatie bevatten, bijvoorbeeld een halve pagina tekst [13](#page=13).
* Eenvoudige, uniforme systemen bevatten weinig informatie en kunnen met weinig bits worden beschreven [13](#page=13).
* Complexe, willekeurige systemen bevatten veel entropie en vereisen veel bits voor beschrijving [13](#page=13).
### 2.3 Illustratieve voorbeelden van entropie
De gradatie van complexiteit en entropie kan worden geïllustreerd aan de hand van kunst en biologische systemen.
#### 2.3.1 Kunst als illustratie
Jackson Pollock's werk uit 1948, zoals "No. 5", wordt geassocieerd met hoge entropie door de willekeurige en complexe aard van de penseelstreken. In contrast staat het werk van Yves Klein, zoals zijn monochrome blauwe schilderijen uit 1962, dat een lage entropie vertegenwoordigt door zijn eenvormigheid en minimalisme [14](#page=14).
#### 2.3.2 Biologische complexiteit en entropie
Ook in biologische systemen is er een duidelijke gradatie van complexiteit, die zich vertaalt naar verschillende niveaus van entropie:
* **Levende versus dode materie:** Levende materie vertoont een hogere complexiteit en dus meer entropie dan dode materie [15](#page=15).
* **Geslacht:** De mogelijkheid van drie geslachten (M/V/X) vertegenwoordigt een hogere entropie dan een binair systeem [15](#page=15).
* **Nucleotiden in DNA:** Er zijn vier verschillende nucleotiden (basen) in DNA, wat een bepaald niveau van entropie impliceert [15](#page=15).
* **Aminozuren in eiwitten:** De twintig verschillende soorten aminozuren die eiwitten vormen, vertegenwoordigen een nog hogere mate van entropie [15](#page=15).
Het aantal mogelijke opties of toestanden in een systeem wordt aangeduid als "staten" [15](#page=15).
### 2.4 Toepassing in biologische systemen
De variatie die ontstaat door biologische processen, zoals mutaties, wordt vaak uitgedrukt in termen van entropie. Bijvoorbeeld, snel muterende virusvarianten vertonen snelle evolutie in sommige sequentiedelen vergeleken met andere [12](#page=12).
### 2.5 Entropie en waarschijnlijkheid: het opgooien van een munt
Het concept van entropie wordt verder verduidelijkt door het voorbeeld van het opgooien van een munt [25](#page=25).
* **Echte munt (hoge entropie):** Bij het opgooien van een echte munt zijn er twee mogelijke uitkomsten (kop of munt), elk met een verwachte kans van 1/2. De waarschijnlijkheid van het resultaat van een enkele opgooi is willekeurig en onzeker, wat resulteert in maximale entropie, hier uitgedrukt als 1 bit. Er is bijkomende informatie nodig om het specifieke resultaat te kennen [25](#page=25).
* **Vervalsde munt (lage entropie):** Als een munt vervalst is en bijvoorbeeld altijd op kop landt, is de uitkomst voorspelbaar. Dit resulteert in een lage entropie, omdat er weinig tot geen onzekerheid is over het resultaat. De "verwachte kans" is niet meer 1/2 en het resultaat is niet langer willekeurig [25](#page=25).
Dit illustreert hoe entropie de mate van onzekerheid of willekeurigheid in een systeem meet [25](#page=25).
---
# Bits, staten en de berekening van entropie
Dit onderwerp introduceert de concepten van bits als eenheid van informatie om toestanden te representeren, en verklaart de berekening van zowel maximale als lokale entropie om de mate van willekeurigheid en informatie-inhoud in een systeem te kwantificeren.
### 3.1 Bits en het representeren van staten
Een bit is de fundamentele eenheid van informatie en kan één van twee waarden aannemen: 0 of 1. Bits worden gebruikt om verschillende "staten" of toestanden te representeren. Het aantal benodigde bits om een bepaald aantal staten te representeren, hangt af van het aantal mogelijke combinaties dat met die bits kan worden gevormd [16](#page=16).
#### 3.1.1 Voorbeelden van statenrepresentatie
* **DNA-basen:** Het DNA telt vier basen: Adenine (A), Cytosine (C), Guanine (G) en Thymine (T). Deze vier staten kunnen binair worden uitgedrukt met behulp van twee bits, waarbij elke bit het dubbele aantal mogelijke combinaties kan representeren (00, 01, 10, 11) [16](#page=16).
* A kan worden toegewezen aan 00.
* C kan worden toegewezen aan 01.
* G kan worden toegewezen aan 10.
* T kan worden toegewezen aan 11.
* **Plus- en minteken:** Dit zijn twee staten, waarvoor slechts één bit nodig is (0 voor min, 1 voor plus, of vice versa) [17](#page=17).
* **Ja of nee:** Eveneens twee staten, waarvoor één bit volstaat [17](#page=17).
* **Nederlands alfabet:** Het Nederlandse alfabet kent 26 letters (staten). Om deze 26 staten binair te coderen, zijn meer dan één bit nodig. De toekenning van binaire codes aan elke letter maakt tekstverwerking mogelijk [17](#page=17).
#### 3.1.2 Berekening van benodigde bits
Om te bepalen hoeveel bits er nodig zijn om een bepaald aantal staten te coderen, gebruikt men de logaritme met grondtal 2. De formule voor de maximale entropie, die aangeeft hoeveel bits nodig zijn om alle mogelijke staten van een systeem te coderen, is [18](#page=18):
$$ \text{Maximale entropie} = \log_2(\text{# staten}) $$
Hierbij staat `# staten` voor het totale aantal mogelijke staten die het systeem kan aannemen. Omdat computers geen "deelbits" gebruiken, wordt het aantal benodigde bits naar boven afgerond tot het dichtstbijzijnde gehele getal. Dit kan worden weergegeven als $n$ bits nodig voor $2^n$ staten, of omgekeerd, $n = \lceil \log_2(\text{# staten}) \rceil$ bits [18](#page=18) [19](#page=19).
#### 3.1.3 Toepassing van de berekening
* **Levend vs. niet-levend:** Er zijn twee staten: levend en niet-levend.
* Maximale entropie = $\log_2 = 1$ bit [19](#page=19) [2](#page=2).
* **Vier basen in DNA:** Er zijn vier staten (A, C, G, T).
* Maximale entropie = $\log_2 = 2$ bits [19](#page=19) [4](#page=4).
* **26 letters van het alfabet:** Er zijn 26 staten.
* Maximale entropie = $\log_2 \approx 4.7$ bits .
* Dit vereist 5 bits, omdat computers geen fractionele bits kunnen gebruiken ($2^4 = 16$ is te weinig, $2^5 = 32$ is voldoende) [19](#page=19).
### 3.2 Maximale versus lokale entropie
Maximale entropie gaat uit van de theoretisch mogelijke staten van een systeem, waarbij elke staat even waarschijnlijk is. Lokale entropie daarentegen, kijkt naar de feitelijk waargenomen frequenties van de staten in een systeem [22](#page=22) [23](#page=23).
#### 3.2.1 Combinaties van DNA-basen
Beschouwen we twee opeenvolgende basen in DNA, dan zijn er $4 \times 4 = 16$ mogelijke combinaties (staten). Als elke combinatie met dezelfde waarschijnlijkheid voorkomt (elk 1/16), dan is het systeem willekeurig en is de lokale entropie gelijk aan de maximale entropie [20](#page=20).
* Maximale entropie voor 16 staten = $\log_2 = 4$ bits [16](#page=16) [23](#page=23).
#### 3.2.2 De berekening van lokale entropie
Lokale entropie meet de informatie-inhoud gebaseerd op de waargenomen frequenties van staten. De formule hiervoor is:
$$ \text{Lokale entropie} = - \sum_{i=1}^{k} p_i \log_2(p_i) $$
Hierbij is $k$ het aantal unieke staten dat daadwerkelijk voorkomt, en $p_i$ is de frequentie (waarschijnlijkheid) waarmee de $i$-de staat voorkomt. De som wordt gemaakt over alle effectief voorkomende staten, en het minteken zorgt voor een positieve entropiewaarde [22](#page=22) [23](#page=23).
#### 3.2.3 Interpretatie van lokale entropie
* **Afwijking van willekeurigheid:** Een lagere lokale entropie geeft aan dat het systeem sterker afwijkt van een willekeurig patroon en meer georganiseerd of homogeen is [24](#page=24).
* **Surprise factor:** Lokale entropie wordt ook wel de "surprise factor" genoemd. Als er geen verrassing is (d.w.z. de waargenomen frequenties wijken niet af van de verwachte willekeurigheid), is er geen nieuwe informatie [24](#page=24).
* **Informatie-inhoud:** De informatie-inhoud van een "populatie" is omgekeerd evenredig met de willekeurigheid of heterogeniteit binnen die populatie [24](#page=24).
* Een systeem met één bevolkte staat is volledig homogeen en bevat geen informatie [24](#page=24).
* Als alle staten een frequentie van 1/16 hebben, is de lokale entropie 4, gelijk aan de maximale entropie, wat duidt op een willekeurig systeem [23](#page=23).
* In een voorbeeld met 32 observaties over 16 staten, waar de frequenties afweken van 1/16, werd een lokale entropie van 1.94 berekend. Dit is lager dan de maximale entropie van 4, wat aangeeft dat het systeem minder willekeurig is [22](#page=22) [23](#page=23).
> **Tip:** Lokale entropie is een krachtige maat om te beoordelen hoe verrassend of informatie-rijk een specifiek waargenomen patroon is, in vergelijking met wat je op basis van pure willekeurigheid zou verwachten.
> **Voorbeeld:** Stel je voor dat je een munt gooit. De maximale entropie is 1 bit (kop of munt). Als je 10 keer gooit en 5 keer kop en 5 keer munt krijgt, is de lokale entropie hoog en dicht bij de maximale entropie, omdat dit een willekeurig resultaat is. Als je echter 10 keer kop zou krijgen, is de lokale entropie laag (dicht bij 0), wat zeer onwaarschijnlijk is en dus een grote "surprise factor" of informatie-inhoud zou impliceren (ervan uitgaande dat de munt eerlijk is, zou dit wijzen op een probleem met de munt of het werpproces).
---
# Practica en examenvoorbereiding
Dit gedeelte bespreekt het belang van practica voor de examenvoorbereiding en de specifieke inhoud van de beschikbare practica.
### 4.1 Het belang van practica
Practica zijn essentieel voor het verwerven van praktische vaardigheden en het toepassen van de geleerde theorie. Hoewel er geen directe evaluatie plaatsvindt van de practica zelf, is de opgedane kennis cruciaal voor het examen in de januarizittijd. Het is daarom van groot belang om eerst de bijbehorende leerstof te bestuderen. Het zelfstandig maken van de oefeningen is de meest effectieve manier om vaardigheden te ontwikkelen, wat neerkomt op herhaaldelijk handelen. Het enkel bestuderen van oplossingen zal niet volstaan voor succes op het examen of in latere vakken [26](#page=26).
> **Tip:** Focus op het actief oefenen en zelfstandig oplossen van de practica om de stof echt te doorgronden en je examenvoorbereiding te optimaliseren.
Vragen die op de discussiefora voorkomen, gerelateerd aan practica, betreffen onder andere "binair tellen en informatica-entropie" en "publieke databanken" [26](#page=26).
### 4.2 Practicum binair tellen en informatie-entropie
Dit practicum omvat twee specifieke oefeningen:
* Binair tellen, inclusief het gebruik van Excel [27](#page=27).
* Informatie-entropie, eveneens met het gebruik van Excel [27](#page=27).
Voor dit practicum zijn er vier bestanden beschikbaar op Ufora na de les [27](#page=27):
* De opdrachten voor beide oefeningen [27](#page=27).
* Twee begeleidende films met instructies over het gebruik van Excel in deze oefening; deze films hebben geen geluid [27](#page=27).
* De oplossingen voor de oefeningen [27](#page=27).
> **Tip:** Maak gebruik van de instructievideo's voor Excel, zelfs zonder geluid, om de praktische toepassing van de theorie te vergemakkelijken.
De practica kunnen **zelfstandig** gevolgd worden op een moment naar keuze. Er is ook een mogelijkheid voor een **tijdslot** op 22/10/2024 van 14:30 tot 17:00, hoewel dit nog onder voorbehoud is [27](#page=27).
---
## Veelgemaakte fouten om te vermijden
- Bestudeer alle onderwerpen grondig voor examens
- Let op formules en belangrijke definities
- Oefen met de voorbeelden in elke sectie
- Memoriseer niet zonder de onderliggende concepten te begrijpen
Glossary
| Term | Definition |
|------|------------|
| Binair talstelsel | Een getalstelsel dat gebruikmaakt van slechts twee symbolen, meestal 0 en 1, om getallen weer te geven. Dit is de basis van digitale computertechnologie. |
| Bit | Een elementaire eenheid van informatie die slechts één van twee mogelijke waarden kan aannemen, traditioneel weergegeven als 0 of 1. Het is de kleinste eenheid van data in computers. |
| Byte | Een groep van 8 bits, die gezamenlijk worden gebruikt om bijvoorbeeld één karakter, cijfer of symbool te representeren. Een byte is een veelgebruikte eenheid voor digitale informatieopslag. |
| Informatie-entropie | Een concept uit de informatietheorie dat de mate van onzekerheid of willekeurigheid in een informatiesysteem kwantificeert. Een hoge entropie betekent veel onzekerheid en veel mogelijke toestanden. |
| Logische schakelingen (Logic Gates) | Basiseenheden van digitale circuits die logische bewerkingen uitvoeren op binaire inputsignalen om een binair outputsignaal te produceren. Voorbeelden zijn AND, OR en NOT poorten. |
| Decimaal talstelsel | Het gebruikelijke tiendelige getalstelsel dat we dagelijks gebruiken, met de cijfers 0 tot en met 9. |
| Mutaties | Veranderingen in de genetische code (DNA) van een organisme. Deze veranderingen kunnen leiden tot variatie binnen een populatie. |
| Nucleotiden | De bouwstenen van DNA en RNA, bestaande uit een suiker, een fosfaatgroep en een stikstofbase (zoals A, C, G, T in DNA). |
| Aminozuren | Organische moleculen die de bouwstenen vormen van eiwitten. Er zijn 20 verschillende veelvoorkomende aminozuren. |
| Staten | De mogelijke toestanden waarin een systeem zich kan bevinden. Bijvoorbeeld, een bit heeft twee staten (0 of 1), en een DNA-sequentie kan bestaan uit vier verschillende basen. |
| Maximale entropie | De theoretische bovengrens van de entropie van een systeem, die wordt bereikt wanneer alle mogelijke staten even waarschijnlijk zijn. Dit bepaalt het aantal bits dat nodig is om alle staten te coderen. |
| Lokale entropie | Een maat voor de entropie van een systeem gebaseerd op de daadwerkelijke frequentie van waargenomen toestanden, in plaats van de theoretisch maximale entropie. Het weerspiegelt de diversiteit en waarschijnlijkheid van voorkomende staten. |
| Surprise factor | Een term die verband houdt met lokale entropie, waarbij een lage lokale entropie aangeeft dat de waargenomen resultaten minder verrassend zijn dan verwacht bij een willekeurig systeem. |
| Heterogeniteit | De mate waarin een populatie of systeem divers en gevarieerd is. Een hoge heterogeniteit komt overeen met meer willekeurigheid en hogere entropie. |
Cover
ch1-Généralités-v1.0.pdf
Summary
# Introduction et rôle des systèmes d'exploitation
Le système d'exploitation (SE) est un logiciel fondamental qui agit comme un intermédiaire essentiel entre l'utilisateur, les programmes applicatifs et le matériel informatique.
### 1.1 Positionnement dans l'architecture informatique
Un système informatique peut être conceptualisé à travers plusieurs niveaux clés, où chaque niveau dépend des niveaux inférieurs. Ces niveaux sont [2](#page=2):
* **Matériel**: L'ensemble des composants physiques de l'ordinateur (ordinateur, imprimante, etc.) [2](#page=2).
* **Système d'exploitation (SE)**: Il se situe au-dessus du matériel et agit comme une couche d'abstraction indispensable. Il sert d'intermédiaire entre l'utilisateur, les programmes applicatifs et le matériel [2](#page=2).
* **Langage de haut niveau**: Permet d'écrire des programmes qui manipulent les données [2](#page=2).
La suppression d'un niveau inférieur entraîne l'effondrement des niveaux supérieurs [2](#page=2).
### 1.2 Rôle principal du système d'exploitation
Le système d'exploitation est un ensemble de composants de base et utilitaires qui interagissent pour gérer les ressources communes de l'infrastructure informatique. Il est intrinsèquement lié au matériel sous-jacent [3](#page=3).
#### 1.2.1 Fonctions et objectifs
Les systèmes d'exploitation ont pour rôle principal de :
* **Cacher la complexité du matériel**: Ils masquent les détails techniques et les complexités liées au matériel et aux communications, offrant ainsi une interface plus simple pour l'utilisateur et les développeurs d'applications [3](#page=3).
* **Fournir des services communs**: Ils offrent des services généraux de haut niveau d'abstraction, qui sont utilisés par les applications pour répondre à des problèmes spécifiques [3](#page=3).
> **Tip:** Il est important de distinguer un système d'exploitation d'une application. Une application répond à un besoin spécifique en utilisant les services généraux fournis par le système d'exploitation [3](#page=3).
#### 1.2.2 Aspects complémentaires du rôle
Le rôle du système d'exploitation peut être appréhendé sous deux angles principaux et complémentaires [4](#page=4):
1. **Adaptation d'interfaces** :
* **Haut niveau d'abstraction**: Le SE offre un niveau d'abstraction qui simplifie l'interaction avec la machine [4](#page=4).
* **Dissimulation des limitations physiques et gestion du partage**: Il masque les limitations physiques, comme la taille de la mémoire, et gère le partage des ressources entre plusieurs utilisateurs, évitant ainsi les interférences directes et complexes avec le matériel [4](#page=4).
2. **Gestion des ressources**: Le SE est responsable de la gestion des ressources matérielles et logicielles, en suivant des critères de bonne gestion [4](#page=4).
* **Critères de bonne gestion** :
* **Efficacité**: Il vise à optimiser l'utilisation des ressources pour éviter les pertes de temps, par exemple en assurant un taux d'utilisation élevé du processeur [4](#page=4).
* **Partage sécurisé** : Cela implique deux aspects essentiels :
* **Séparation stricte entre utilisateurs**: Le SE garantit que les actions d'un utilisateur n'affectent pas négativement les données ou processus des autres utilisateurs, empêchant la destruction mutuelle des données [4](#page=4).
* **Partage équitable des ressources**: Il assure une distribution juste des ressources telles que le processeur (CPU), la mémoire et le disque entre les différents utilisateurs et processus [4](#page=4).
---
# Fonctions et composants d'un système d'exploitation
Un système d'exploitation (SE) est une couche logicielle essentielle qui gère les ressources matérielles d'un ordinateur et fournit une plateforme pour l'exécution des applications. Il assure des fonctions clés telles que la gestion du processeur, de la mémoire, des entrées/sorties, des fichiers, ainsi que la protection des ressources. La structure d'un SE est généralement hiérarchique, comprenant le matériel, le noyau, les fonctions système et les utilitaires [10](#page=10) [11](#page=11) [5](#page=5) [6](#page=6) [7](#page=7) [8](#page=8) [9](#page=9).
### 2.1 Fonctions d'un système d'exploitation
Le système d'exploitation remplit plusieurs fonctions critiques pour le bon fonctionnement de l'ordinateur [7](#page=7) [8](#page=8) [9](#page=9).
#### 2.1.1 Gestion du processeur (CPU)
Cette fonction concerne l'allocation du processeur aux différents programmes en cours d'exécution. Le SE utilise des algorithmes d'ordonnancement pour planifier l'exécution des programmes de manière efficace [7](#page=7).
#### 2.1.2 Gestion de la mémoire
Le système gère l'allocation de la mémoire centrale (RAM) entre les différents programmes. Pour ce faire, il peut employer des techniques telles que la pagination ou la segmentation. Lorsque la mémoire physique est insuffisante pour contenir tous les programmes, le SE utilise le principe de la mémoire virtuelle pour étendre l'espace mémoire disponible [7](#page=7).
#### 2.1.3 Gestion de la concurrence
Étant donné que plusieurs programmes coexistent en mémoire centrale, ils peuvent avoir besoin de communiquer entre eux pour échanger des données. La gestion de la concurrence implique également la synchronisation de l'accès aux données partagées afin de garantir leur cohérence [8](#page=8).
#### 2.1.4 Gestion des Entrées/Sorties (E/S)
Le système d'exploitation gère l'accès aux périphériques. Il assure la liaison entre les appels de haut niveau des programmes utilisateurs (par exemple, `getchar()`) et les opérations de bas niveau nécessaires au fonctionnement des périphériques (par exemple, un clavier) [8](#page=8).
#### 2.1.5 Gestion des fichiers
La mémoire centrale étant volatile, toutes les données qui doivent être conservées après l'arrêt de la machine sont stockées sur des mémoires de masse (disques durs, SSD, etc.). Le système de gestion de fichiers (SGF) est responsable de cette organisation et utilise différents formats selon le SE, tels que NTFS, Ext, ou FAT [9](#page=9).
#### 2.1.6 Gestion de la protection (droits d’accès)
Le système d'exploitation met en place des mécanismes pour garantir que ses ressources (processeur, mémoire, fichiers) ne peuvent être utilisées que par les programmes auxquels les droits d'accès nécessaires ont été accordés [9](#page=9).
### 2.2 Composants d'un système d'exploitation
Un système d'exploitation est composé de plusieurs couches et éléments qui travaillent ensemble [10](#page=10) [11](#page=11).
#### 2.2.1 Le matériel (couche physique)
Il s'agit de la partie physique de l'ordinateur, incluant le processeur, la mémoire, les périphériques d'entrée/sortie, etc. [10](#page=10) [5](#page=5).
#### 2.2.2 Le noyau (kernel)
Le noyau est le cœur du système d'exploitation. Il gère l'accès aux processeurs, à la mémoire, au contenu des disques et contrôle les échanges avec les différents périphériques. Le noyau est chargé en mémoire centrale dès le démarrage de l'ordinateur (processus de boot) [10](#page=10) [11](#page=11).
#### 2.2.3 Fonctions système
Ces fonctions constituent une bibliothèque standard d'appels système que les applications peuvent utiliser pour interagir avec le noyau et le matériel [10](#page=10) [11](#page=11).
#### 2.2.4 Utilitaires
Cette partie comprend des programmes tels que les interpréteurs de commandes (shell), les éditeurs de liens, les compilateurs, et les gestionnaires de fenêtres. Ces services sont stockés sur la mémoire de masse et chargés en mémoire uniquement à la demande de l'utilisateur. Chaque service correspond généralement à une commande externe [10](#page=10) [11](#page=11).
> **Tip:** Comprendre la distinction entre les fonctions noyau (toujours en mémoire) et les utilitaires (chargés à la demande) est crucial pour appréhender le fonctionnement interne d'un SE [11](#page=11).
---
# Modes d'exécution et interaction avec le système
Ce chapitre explore les deux principaux modes d'exécution d'un ordinateur, le mode superviseur et le mode utilisateur, ainsi que les mécanismes de transition entre eux, essentiels au fonctionnement des systèmes d'exploitation [12](#page=12).
### 3.1 Modes d'exécution
Les systèmes d'exploitation gèrent deux modes d'exécution distincts pour les programmes :
#### 3.1.1 Mode utilisateur
C'est le mode par défaut dans lequel s'exécutent la majorité des programmes applicatifs. Il offre un accès limité aux ressources matérielles et aux instructions sensibles du processeur, garantissant ainsi la sécurité et la stabilité du système [12](#page=12).
#### 3.1.2 Mode superviseur
Également appelé mode noyau ou mode privilégié, ce mode est réservé au système d'exploitation. Il permet d'exécuter toutes les instructions du processeur, y compris celles qui sont interdites en mode utilisateur, telles que la manipulation directe de la mémoire ou le contrôle des périphériques matériels. Ce mode est crucial pour la protection du système d'exploitation contre les erreurs ou les comportements malveillants des programmes utilisateur [12](#page=12).
### 3.2 Passage entre les modes
La transition entre le mode utilisateur et le mode superviseur est un mécanisme fondamental pour permettre aux programmes d'accéder aux services du système d'exploitation. Deux événements principaux déclenchent ce passage [12](#page=12):
#### 3.2.1 Appels système
Lorsqu'un programme utilisateur a besoin d'effectuer une opération qui requiert des privilèges du système d'exploitation (par exemple, lire un fichier, afficher du texte à l'écran, ou accéder à un périphérique), il effectue un appel système. Cet appel système provoque une interruption logicielle qui transfère le contrôle au système d'exploitation en mode superviseur [12](#page=12).
#### 3.2.2 Interruptions matérielles
Les interruptions matérielles sont des signaux envoyés par les périphériques matériels au processeur pour indiquer qu'un événement s'est produit et nécessite une attention immédiate. Par exemple, lorsqu'une touche est pressée sur le clavier, le contrôleur du clavier génère une interruption matérielle. Cette interruption force le processeur à suspendre l'exécution du programme courant, à passer en mode superviseur, et à exécuter une routine de traitement d'interruption gérée par le système d'exploitation [12](#page=12) [15](#page=15).
#### 3.2.3 Commutation de contexte
Le passage entre les modes d'exécution, que ce soit par appel système ou par interruption, s'accompagne d'une commutation de contexte. Ce processus implique la sauvegarde de l'état actuel du programme utilisateur (registres du processeur, pointeur d'instruction, etc.) afin de pouvoir le reprendre ultérieurement, puis le chargement du contexte nécessaire à l'exécution du code du système d'exploitation. Une fois la tâche du système d'exploitation terminée, le contexte utilisateur est restauré, et l'exécution du programme utilisateur reprend là où elle s'était arrêtée [12](#page=12).
### 3.3 Exemple d'exécution d'un programme
Illustrons le fonctionnement des modes d'exécution et des interactions système avec l'exemple d'un programme C utilisant la fonction `getchar` pour lire un caractère saisi au clavier [14](#page=14).
> **Exemple:**
> Considérons le code C suivant :
> ```c
> #include
>
> int main() {
> char c;
> printf("Appuyez sur une touche : ");
> c = getchar();
> printf("Vous avez tapé : %c\n", c);
> return 0;
> }
> ```
> Les pages 14 et 15 détaillent le déroulement de l'exécution de ce programme [14](#page=14) [15](#page=15).
#### 3.3.1 Lecture d'un caractère au clavier
1. Le programme arrive à l'instruction `c = getchar();` [15](#page=15).
2. L'appel à `getchar()` requiert l'intervention du système d'exploitation pour lire l'entrée du clavier. Le programme passe donc du mode utilisateur au mode superviseur via un appel système [15](#page=15).
3. Le système d'exploitation, en mode superviseur, lance un programme spécifique pour gérer la lecture à partir de l'unité d'entrée/sortie du clavier [15](#page=15).
4. Lorsqu'une touche est frappée, le clavier envoie le code binaire du caractère à l'ordinateur [15](#page=15).
5. Le circuit électronique gérant la communication clavier-ordinateur capte ce code [15](#page=15).
6. Le programme de lecture du système d'exploitation est informé que la donnée est disponible. Il en fait une copie et la transmet au système d'exploitation [15](#page=15).
7. Le système d'exploitation réactive alors le programme utilisateur en lui fournissant le code ASCII du caractère tapé. Le contrôle est rendu au programme utilisateur [15](#page=15).
#### 3.3.2 Affichage du caractère
1. Le programme utilisateur reprend son exécution à l'instruction suivante: `printf("Vous avez tapé: %c\n", c);` [15](#page=15).
2. L'affichage d'un caractère à l'écran nécessite également l'intervention du système d'exploitation (pour interagir avec le périphérique d'affichage). Ceci déclenche un nouveau passage en mode superviseur, suivi d'un mécanisme similaire à celui de la lecture du clavier [15](#page=15).
#### 3.3.3 Chargement des programmes de lecture
Pour lancer le programme capable de lire depuis le clavier, le système d'exploitation suit plusieurs étapes [16](#page=16):
* Il détermine l'adresse du programme sur le disque dur en consultant une table appropriée [16](#page=16).
* Il initie la rotation du disque et positionne la tête de lecture à l'adresse spécifiée [16](#page=16).
* Il transfère le contenu du fichier programme (une séquence de 0 et de 1) en mémoire vive [16](#page=16).
* Après avoir chargé le contexte d'exécution nécessaire, le système d'exploitation donne la main au programme, lui permettant ainsi de s'exécuter [16](#page=16).
> **Tip:** La compréhension du passage entre le mode utilisateur et le mode superviseur est fondamentale pour appréhender comment le système d'exploitation protège ses ressources et fournit des services aux applications, tout en assurant une exécution ordonnée et sécurisée des programmes [12](#page=12).
---
# Classification des systèmes d'exploitation
Cette section détaille les différentes manières de catégoriser les systèmes d'exploitation (SE) en fonction de leur structure interne, des services qu'ils fournissent, de leur architecture logique et de l'architecture matérielle qu'ils exploitent [18](#page=18).
### 4.1 Classification selon la structure du SE
La structure d'un SE définit comment ses composants sont organisés et interagissent. Le noyau (kernel) du système est généralement exécuté dans un espace mémoire distinct de celui des applications, appelé l'espace noyau, par opposition à l'espace utilisateur. Les transitions entre ces deux espaces se font via des appels système. Cette séparation permet d'éviter que le crash d'une application n'affecte la stabilité du système [19](#page=19).
On distingue trois architectures principales: monolithique, micro-noyau et hybride [19](#page=19).
#### 4.1.1 Système monolithique
Dans un système monolithique, une grande partie des fonctions du système et des pilotes sont regroupés.
##### 4.1.1.1 Système monolithique non modulaire
Dans cette configuration, l'ensemble des fonctions du système et des pilotes sont regroupés dans un seul bloc de code fonctionnant en mode noyau [20](#page=20).
* **Avantages:** Facilité de conception et rapidité d'exécution [20](#page=20).
* **Inconvénients:** Code difficile à maintenir [20](#page=20).
* **Exemples:** MS-DOS, les premières versions d'UNIX [20](#page=20).
##### 4.1.1.2 Système monolithique modulaire
Ici, seules les parties fondamentales du système sont regroupées dans un bloc de code unique (monolithique). Les autres fonctions, comme les pilotes matériels, sont organisées en modules séparés du noyau [21](#page=21).
* **Avantages:** Économie de mémoire (seuls les pilotes nécessaires sont chargés), chargement des fonctionnalités à la demande, augmentation des possibilités de configuration [21](#page=21).
* **Inconvénients:** Instabilité relative due aux modules (une erreur dans un module peut compromettre la stabilité de tout le SE) [21](#page=21).
* **Exemples:** Linux, BSD, Sun/Oracle Solaris [21](#page=21).
#### 4.1.2 Système à micro-noyau
Un système à micro-noyau est basé sur un noyau minimal (le micro-noyau). La plupart des fonctions du SE sont déplacées vers des processus serveur s'exécutant en mode utilisateur [22](#page=22).
* **Avantages:** Code de petite taille avec des modules ou des librairies indépendantes du noyau, fiabilité accrue (un crash de processus serveur n'arrête pas le système et permet de relancer le service sans redémarrage), modèle facilement adaptable aux systèmes distribués [22](#page=22).
* **Inconvénients:** Nombre d'appels système nettement plus élevé qu'avec les noyaux monolithiques, entraînant des performances d'exécution plus faibles [22](#page=22).
* **Exemples:** GNU HURD, Minix, Windows NT [22](#page=22).
#### 4.1.3 Système hybride
Les noyaux hybrides combinent des concepts des noyaux monolithiques et des micro-noyaux afin de tirer parti des avantages des deux approches [23](#page=23).
* **Caractéristiques:** Seules les fonctions fondamentales résident dans l'espace noyau, mais certaines fonctions non critiques générant de nombreux appels système sont réintégrées dans l'espace noyau pour des raisons de performance [23](#page=23).
* **Exemples:** Mac OS X, Windows 10, Windows XP [23](#page=23).
### 4.2 Classification selon les services rendus
Cette classification se base sur le nombre de tâches et d'utilisateurs qu'un système peut gérer simultanément.
#### 4.2.1 Système mono-tâche vs. Système multi-tâches
* **Système mono-tâche:** N'autorise l'allocation du processeur qu'à une seule tâche à la fois. Le processeur n'est attribué à une nouvelle tâche qu'après l'achèvement de la précédente [24](#page=24).
* **Exemple:** DOS [24](#page=24).
* **Système multi-tâches:** Capacité du système à exécuter plusieurs tâches (processus) simultanément [24](#page=24).
* **Exemples:** UNIX, Linux, Windows 10 [24](#page=24).
#### 4.2.2 Système mono-utilisateur vs. Système multi-utilisateurs
* **Système mono-utilisateur:** Ne peut gérer qu'un seul utilisateur à la fois [25](#page=25).
* **Exemples:** DOS, Windows 95, Windows 98 [25](#page=25).
* **Système multi-utilisateurs:** Permet à plusieurs utilisateurs d'utiliser l'ordinateur simultanément, tout en gérant les droits d'accès pour garantir l'intégrité des données de chaque utilisateur [25](#page=25).
* **Exemples:** UNIX, Linux, Windows 10 [25](#page=25).
### 4.3 Classification selon leur architecture logique
Cette classification concerne la manière dont les ressources sont gérées et distribuées au sein d'un réseau.
#### 4.3.1 Systèmes centralisés
Dans un système centralisé, l'ensemble du système est entièrement présent sur une seule machine. Les machines connectées sont considérées comme des entités étrangères disposant de leur propre système centralisé. Le système ne gère que les ressources de la machine sur laquelle il est installé [26](#page=26).
* **Exemples:** La plupart des systèmes d'exploitation courants [26](#page=26).
#### 4.3.2 Systèmes répartis (ou distribués)
Un SE distribué gère l'ensemble des machines connectées et permet le partage des ressources entre elles. Un utilisateur peut accéder à des ressources coûteuses situées sur d'autres ordinateurs [27](#page=27).
* **Caractéristiques:** Le système apparaît à l'utilisateur comme une machine unique, l'utilisateur n'a pas à se soucier de la localisation des ressources, et le système exploite le parallélisme d'un ensemble de machines [27](#page=27).
* **Exemples:** Mach, Amoeba, Chorus OS, Erlang, Inferno [27](#page=27).
### 4.4 Classification selon l’architecture matérielle qui les supporte
Cette classification concerne le type de processeur utilisé par le système.
#### 4.4.1 Architecture monoprocesseur (multiprogrammation)
Un processeur avec un seul cœur (single-core) ne peut traiter qu'une seule instruction élémentaire à la fois. Pour offrir un parallélisme apparent à l'utilisateur, un mécanisme de gestion des processus, appelé multiprogrammation, a été développé. Avant l'avènement des processeurs multicœurs, la multiprogrammation donnait l'impression que les processeurs mono-cœur étaient multi-tâches grâce au passage rapide entre les instructions [28](#page=28).
* **Exemple de famille de processeurs mono-cœur:** Intel Pentium (années 1990 à 2006) [28](#page=28).
#### 4.4.2 Architecture avec processeur multicoeurs
Un processeur multicœur est composé de deux ou plusieurs cœurs indépendants, chaque cœur étant capable de traiter des instructions individuellement. Les cœurs fonctionnent en parallèle pour augmenter la puissance de calcul [29](#page=29).
* **Exemples de familles de processeurs multicœurs :**
* Intel Celeron Dual Core (2 cœurs) [29](#page=29).
* Intel Core i3, i5, i7 (4 à 8 cœurs selon la génération) [29](#page=29).
* AMD Ryzen 7 (8 cœurs) [29](#page=29).
---
# Classes spécifiques de systèmes d'exploitation
Cette section aborde les caractéristiques et domaines d'application de systèmes d'exploitation spécifiques tels que les systèmes temps réel et les systèmes embarqués.
### 5.1 Systèmes temps réel
Les systèmes temps réel (RTOS - Real Time Operating Systems) sont conçus pour exécuter des programmes en respectant des contraintes temporelles strictes ou souples. Les résultats d'une exécution ne sont valides que dans un intervalle de temps prédéterminé [30](#page=30).
> **Example:** Un exemple typique est le contrôle d'un processus de fabrication. Pour un robot soudeur dans une usine automobile, une soudure effectuée trop tôt ou trop tard peut compromettre la qualité du véhicule [30](#page=30).
Quelques exemples de systèmes d'exploitation temps réel incluent RTLinux, VxWorks, RTX, FreeRTOS et QNX [30](#page=30).
### 5.2 Systèmes embarqués
Les systèmes embarqués sont développés pour fonctionner sur des machines de petite taille, souvent des appareils électroniques autonomes. Ces appareils, tels que les sondes spatiales, les robots ou les ordinateurs de bord de véhicules, disposent de ressources limitées en termes de mémoire et d'énergie [31](#page=31).
Il est fréquent que les systèmes embarqués soient également des systèmes temps réel. Ils utilisent généralement des microprocesseurs à faible consommation d'énergie ou des microcontrôleurs. La partie logicielle est souvent partiellement ou entièrement intégrée au matériel, généralement stockée dans une mémoire morte (ROM), EPROM ou FLASH, formant ce que l'on appelle le firmware [31](#page=31).
> **Example:** Des exemples de systèmes embarqués comprennent Windows Mobile, Android (basé sur un noyau Linux), Symbian OS (utilisé sur d'anciens téléphones Nokia) et les consoles de jeux comme PlayStation et Xbox [31](#page=31).
---
## Erreurs courantes à éviter
- Révisez tous les sujets en profondeur avant les examens
- Portez attention aux formules et définitions clés
- Pratiquez avec les exemples fournis dans chaque section
- Ne mémorisez pas sans comprendre les concepts sous-jacents
Glossary
| Term | Definition |
|------|------------|
| Système d’exploitation (SE) | Ensemble de composants de base et utilitaires qui interagissent pour gérer les ressources communes d'une infrastructure informatique, servant d'intermédiaire indispensable entre l'utilisateur, les programmes et le matériel. |
| Matériel | Constitue la partie physique de l'ordinateur, incluant des éléments tels que le processeur, la mémoire, les périphériques comme l'imprimante ou le clavier. |
| Programme applicatif | Logiciel conçu pour répondre à un problème spécifique ou effectuer une tâche particulière, en utilisant les services généraux fournis par le système d'exploitation. |
| Interface | Représente la manière dont un utilisateur interagit avec un système ou un programme, ou la manière dont différents composants d'un système communiquent entre eux. Les SE fournissent des interfaces de haut niveau pour masquer la complexité du matériel. |
| Gestion des ressources | Fonction principale d'un SE consistant à allouer et à contrôler l'accès aux différentes ressources matérielles et logicielles de l'ordinateur, telles que le processeur, la mémoire, les périphériques et les fichiers, en assurant efficacité et partage sécurisé. |
| Tâche (ou Processus) | Représente une unité d'exécution au sein d'un système d'exploitation. La gestion des tâches permet au système d'exécuter plusieurs programmes simultanément ou de manière entrelacée. |
| Ordonnancement | Algorithme utilisé par le système d'exploitation pour décider de l'ordre dans lequel les différentes tâches ou processus doivent être exécutés sur le processeur, afin d'optimiser l'utilisation des ressources et de répondre aux besoins des utilisateurs. |
| Mémoire virtuelle | Technique de gestion de la mémoire où le système d'exploitation donne l'illusion d'une mémoire centrale plus grande que la mémoire physique disponible, en utilisant une partie du disque de stockage comme extension de la RAM. |
| Système de gestion de fichiers (SGF) | Composant du système d'exploitation responsable de l'organisation, du stockage, de la récupération et de la manipulation des fichiers sur les dispositifs de stockage de masse, tels que les disques durs. |
| Mode superviseur | Mode d'exécution privilégié d'un système d'exploitation, qui donne accès à toutes les instructions matérielles et garantit la protection du système contre les accès non autorisés ou les erreurs des programmes utilisateurs. |
| Mode utilisateur | Mode d'exécution standard pour les programmes applicatifs, où l'accès aux instructions critiques et aux ressources matérielles est limité pour assurer la stabilité et la sécurité du système. |
| Appel système | Interface programmatique par laquelle un programme utilisateur demande au système d'exploitation d'exécuter une opération privilégiée, comme l'accès à un fichier ou la gestion de la mémoire. |
| Interruption | Signal envoyé au processeur par un périphérique matériel ou un événement logiciel, qui interrompt l'exécution du programme courant pour exécuter une routine de gestion spécifique du système d'exploitation. |
| Noyau (Kernel) | Partie centrale du système d'exploitation qui gère les fonctions les plus critiques, telles que l'allocation du processeur, la gestion de la mémoire et l'accès aux périphériques. Il s'exécute généralement en mode superviseur. |
| Système monolithique | Type de système d'exploitation où toutes les fonctions principales du système, y compris les pilotes, sont intégrées dans un seul bloc de code exécuté dans l'espace noyau. |
| Micro-noyau | Architecture de système d'exploitation où le noyau est réduit à ses fonctions essentielles, tandis que la plupart des autres services sont déplacés vers des processus serveurs s'exécutant en mode utilisateur. |
| Système hybride | Architecture de système d'exploitation qui combine des éléments des systèmes monolithiques et des systèmes à micro-noyau, cherchant à bénéficier des avantages des deux approches. |
| Système temps réel (RTOS) | Système d'exploitation conçu pour exécuter des tâches dans des délais stricts, où la validité des résultats dépend de leur ponctualité, souvent utilisé dans le contrôle de processus industriels ou de systèmes critiques. |
| Système embarqué | Système informatique conçu pour fonctionner dans un appareil spécifique, souvent de petite taille et avec des ressources limitées (mémoire, énergie), comme dans les automobiles, les appareils électroniques portables ou les sondes spatiales. |
Cover
CHAP3_ Information representation.pdf
Summary
# تمثيل البيانات الثنائية
يستكشف هذا الموضوع كيفية تمثيل البيانات في أجهزة الكمبيوتر باستخدام تنسيقات ثنائية مختلفة، مع التركيز على الترميز الثنائي النقي، ورمز جراي، ورمز BCD، ورمز الفائض بثلاثة.
### 1.1 مقدمة في الترميز الثنائي
في الحاسوب، يتم تمثيل جميع البيانات بشكل عام في شكل ثنائي، وهو نظام يعتمد على حالتين: 1 (وجود تيار) و 0 (عدم وجود تيار). يتطلب هذا التحويل البيانات من شكلها المعتاد إلى الشكل الثنائي القابل للاستخدام بواسطة الكمبيوتر [2](#page=2).
### 1.2 أنواع الترميز الثنائي
#### 1.2.1 الترميز الثنائي النقي
الترميز الثنائي النقي هو التمثيل الثنائي الذي ينتج مباشرة عن مبدأ الترقيم العام، ويُستخدم بشكل طبيعي في الأنظمة الرقمية مثل أجهزة الكمبيوتر. يعرض الجدول التالي (جدول 3.1) الترميز الثنائي النقي لكلمة مكونة من 4 بتات (A3 A2 A1 A0) [2](#page=2):
| القيمة العشرية | A3 | A2 | A1 | A0 |
| :------------: | :-: | :-: | :-: | :-: |
| 0 | 0 | 0 | 0 | 0 |
| 1 | 0 | 0 | 0 | 1 |
| 2 | 0 | 0 | 1 | 0 |
| 3 | 0 | 0 | 1 | 1 |
| 4 | 0 | 1 | 0 | 0 |
| 5 | 0 | 1 | 0 | 1 |
| 6 | 0 | 1 | 1 | 0 |
| 7 | 0 | 1 | 1 | 1 |
| 8 | 1 | 0 | 0 | 0 |
| 9 | 1 | 0 | 0 | 1 |
| 10 | 1 | 0 | 1 | 0 |
| 11 | 1 | 0 | 1 | 1 |
| 12 | 1 | 1 | 0 | 0 |
| 13 | 1 | 1 | 0 | 1 |
| 14 | 1 | 1 | 1 | 0 |
| 15 | 1 | 1 | 1 | 1 |
**جدول 3.1: الترميز الثنائي النقي** [2](#page=2).
#### 1.2.2 رمز جراي (الترميز الثنائي المعكوس)
تم تطوير رمز جراي لتجنب مشاكل الانتقال بين الكلمات المتتالية في الترتيب التسلسلي، حيث يتغير بت واحد فقط بين كلمتين متتاليتين أو متجاورتين. هذا الرمز دوري أيضاً. يعرض الجدول التالي (جدول 3.2) مثالاً لرمز جراي المكون من 4 بتات [2](#page=2) [3](#page=3):
| القيمة العشرية | رمز جراي | القيمة العشرية | رمز جراي |
| :------------: | :-------: | :------------: | :-------: |
| 0 | 0000 | 8 | 1100 |
| 1 | 0001 | 9 | 1101 |
| 2 | 0011 | 10 | 1111 |
| 3 | 0010 | 11 | 1110 |
| 4 | 0110 | 12 | 1010 |
| 5 | 0111 | 13 | 1011 |
| 6 | 0101 | 14 | 1001 |
| 7 | 0100 | 15 | 1000 |
**جدول 3.2: مثال لرمز جراي** [3](#page=3).
> **Example:** للحصول على رمز جراي من الترميز الثنائي على 4 بتات:
>
> Binary: 0 0 1 0 0 1 1 1
> Gray: 0 0 1 1 0 1 0 0
>
> للحصول على رمز جراي من الترميز الثنائي:
> - يبقى البت الأول كما هو.
> - للحصول على البتات الأخرى، يتم جمع كل بت مع البت السابق له.
> - إذا كانت نتيجة الجمع '10'، يتم الاحتفاظ بالـ '0' وتجاهل الـ '1' [3](#page=3).
#### 1.2.3 رمز BCD (Binary Coded Decimal)
استُخدم رمز BCD بشكل أساسي في الآلات الحاسبة المبكرة، ولا يزال يُستخدم في بعض الأنظمة التي تعرض معلومات رقمية للمستخدم أو في الأنظمة البسيطة التي تتعامل مع الأموال. يقوم رمز BCD بتشفير الرقم المطلوب تمثيله بطريقة مباشرة، حيث يتم تشفير كل خانة عشرية على حدة باستخدام 4 بتات. لا تُستخدم الاحتمالات الثنائية من 10 إلى 15 في هذا الترميز. يعرض الجدول التالي (جدول 3.3) رمز BCD [3](#page=3):
| العشرية | BCD |
| :------: | :--: |
| 0 | 0000 |
| 1 | 0001 |
| 2 | 0010 |
| 3 | 0011 |
| 4 | 0100 |
| 5 | 0101 |
| 6 | 0110 |
| 7 | 0111 |
| 8 | 1000 |
| 9 | 1001 |
**جدول 3.3: رمز BCD** [3](#page=3).
> **Example:** تمثيل الرقم 10 باستخدام رمز BCD :
> 8 6 3
> 1000 0110 0011
> 10 = (1000 0110 0011)BCD [4](#page=4) .
#### 1.2.4 رمز الفائض بثلاثة (Excess-3 code)
في هذا الترميز، يتم تشفير كل خانة عشرية بشكل منفصل عن طريق إضافة ثلاثة إلى مكافئها الثنائي. يعرض الجدول التالي (جدول 3.4) رمز الفائض بثلاثة [3](#page=3) [4](#page=4).
**جدول 3.4: رمز الفائض بثلاثة** [4](#page=4).
(ملاحظة: الجدول المحدد لرمز الفائض بثلاثة غير موجود في المحتوى المقدم، ولكن تم ذكر آلية الترميز).
---
# تمثيل الأحرف
يناقش هذا القسم كيفية تمثيل الأحرف رقميًا داخل أجهزة الكمبيوتر، مع التركيز على أنظمة الترميز الشائعة مثل EBCDIC و ASCII و UTF [5](#page=5).
### 2.1 مبادئ تمثيل الأحرف
لكي تتمكن أجهزة الكمبيوتر من معالجة الأحرف، يجب تمثيلها رقميًا باستخدام وحدات تخزين البيانات (البتات). يتم تحقيق ذلك عن طريق تعيين رمز رقمي فريد لكل حرف [5](#page=5).
### 2.2 أنظمة ترميز الأحرف الشائعة
#### 2.2.1 كود EBCDIC (Extended Binary Coded Decimal Interchange Code)
* **التعريف:** هو نظام ترميز مكون من 8 بتات، ابتكرته شركة IBM ليكون امتدادًا لنظام BCD الثنائي المشفر عشريًا [5](#page=5).
* **الاستخدام:** تستخدمه جميع أجهزة وحواسيب IBM [5](#page=5).
* **السعة:** بفضل كونه مكونًا من 8 بتات، يمكنه استيعاب 256 حرفًا مختلفًا [5](#page=5).
#### 2.2.2 كود ASCII (American Standard Code for Information Interchange)
* **التعريف:** هو نظام ترميز تم تطويره في الستينيات بهدف تبادل البيانات بين الأجهزة الطرفية وأجهزة الكمبيوتر [6](#page=6).
* **الحجم:** يتطلب 7 بتات لتمثيل 128 تركيبة مختلفة [6](#page=6).
* **الترميز:** يتم ترميز كل حرف في بايت واحد (8 بتات) باستخدام رمزين سداسي عشريين. يمثل العمود الرمز السداسي العشري الأكثر أهمية (Most Significant)، بينما يمثل الصف الرمز السداسي العشري الأقل أهمية (Least Significant) [6](#page=6).
* **المحتوى:** يشمل الأرقام، وحروف الأبجدية اللاتينية (الكبيرة والصغيرة)، وبعض علامات الترقيم [6](#page=6).
> **Tip:** فهم كيفية تقسيم رموز ASCII إلى مكونات ذات أهمية عالية ومنخفضة يساعد في قراءة جداول الترميز بشكل فعال.
#### 2.2.3 UTF (Unicode Transformation Format)
* **التعريف:** هو نظام ترميز يستخدم أطوالًا متغيرة للتمثيل، حيث يمكن ترميز كل حرف على بايت واحد، أو بايتين، أو ثلاثة بايتات [7](#page=7).
* **التوافقية مع ASCII:**
* جميع الأحرف الموجودة في ترميز ASCII يتم ترميزها في UTF باستخدام بايت واحد وقيمة مطابقة لقيمتها في ASCII [7](#page=7).
* إذا احتوى بايت على قيمة أكبر من 127، فهذا يشير إلى أن الحرف يتكون من بايتين أو ثلاثة بايتات [7](#page=7).
* يتم تصميم UTF بطريقة تضمن أن جميع هذه البايتات الإضافية تحتوي على رموز قيمتها أكبر من 127 [7](#page=7).
* **الميزة:** تضمن هذه الآلية التوافقية مع ASCII للأمام والخلف، مما يسهل عملية الانتقال واستخدام الأنظمة المختلفة [7](#page=7).
> **Tip:** تم تصميم UTF لضمان التوافق مع ASCII، وهذا يجعله خيارًا قويًا لتمثيل مجموعة واسعة من الأحرف مع الحفاظ على إمكانية التشغيل البيني مع الأنظمة القديمة.
---
# تمثيل الأعداد الصحيحة
يتناول هذا الموضوع طرق تمثيل الأعداد الصحيحة، بما في ذلك الأعداد غير الموقعة، والأعداد الصحيحة ذات الإشارة (القيمة المطلقة، مكمل الواحد، ومكمل الاثنين)، مع شرح لكيفية عمل كل منها.
### 3.1 أنواع الأعداد الصحيحة
تنقسم الأعداد الصحيحة إلى نوعين رئيسيين:
* الأعداد الصحيحة غير الموقعة (موجبة فقط) [7](#page=7).
* الأعداد الصحيحة ذات الإشارة (موجبة أو سالبة) [7](#page=7).
### 3.2 تمثيل الأعداد الصحيحة غير الموقعة (Natural numbers)
الأعداد الطبيعية هي الأعداد الصحيحة الموجبة أو الصفر. يعتمد عدد البتات المستخدم لتمثيل عدد طبيعي على النطاق المطلوب للأرقام. على سبيل المثال، لترميز الأعداد الطبيعية بين 0 و 255، نحتاج إلى 8 بتات (بايت واحد) لأن $2^8 = 256$ [8](#page=8).
بشكل عام، يمكن استخدام ترميز $n$ بت لتمثيل الأعداد الطبيعية بين 0 و $(2^n - 1)$. لتمثيل عدد طبيعي، يتم وضع كل بت في الخانة الثنائية المقابلة لوزنه الثنائي من اليمين إلى اليسار، مع ملء البتات غير المستخدمة بالأصفار [8](#page=8).
> **Tip:** يعد فهم العلاقة بين عدد البتات ونطاق الأعداد غير الموقعة أمرًا أساسيًا لتخصيص الذاكرة بكفاءة.
### 3.3 تمثيل الأعداد الصحيحة ذات الإشارة
هناك ثلاث طرق شائعة لتمثيل الأعداد الصحيحة السالبة [7](#page=7):
1. القيمة المطلقة مع الإشارة (Sign/Absolute value) [8](#page=8).
2. مكمل الواحد (1's complement) [8](#page=8).
3. مكمل الاثنين (2's complement) [8](#page=8).
#### 3.3.1 تمثيل الإشارة والقيمة المطلقة (Sign and Absolute Value)
في هذا التمثيل، يتم تخصيص بت واحد، وهو الأكثر أهمية (Most Significant Bit - MSB)، لتمثيل الإشارة. القيمة 0 تمثل الإشارة الموجبة (+) والقيمة 1 تمثل الإشارة السالبة (-) [8](#page=8).
* **نطاق القيم:** بالنسبة لكلمة مكونة من $n$ بت، يتراوح نطاق القيم الممكنة من $-(2^{n-1}-1)$ إلى $+(2^{n-1}-1)$ [8](#page=8).
* **تمثيل الصفر:** يوجد تمثيلان محتملان للقيمة صفر (00000000 للإشارة الموجبة و 10000000 للإشارة السالبة في حالة 8 بت) [8](#page=8).
> **Example:**
> لتمثيل العدد 26 باستخدام 8 بتات:
> * $+26$: `0 0011010` (حيث 0 هو بت الإشارة الموجبة، و `0011010` هو تمثيل 26) [8](#page=8).
> * $-26$: `1 0011010` (حيث 1 هو بت الإشارة السالبة، و `0011010` هو تمثيل 26) [8](#page=8).
#### 3.3.2 تمثيل مكمل الواحد (1's Complement)
في ترميز مكمل الواحد، يتم الحصول على التمثيل السالب للعدد عن طريق عكس جميع بتات التمثيل الثنائي للعدد الموجب (تسمى عملية المكمل) [8](#page=8).
* **نطاق القيم:** باستخدام كلمة مكونة من $n$ بت، يمكن تمثيل القيم من $-(2^{n-1}-1)$ إلى $+(2^{n-1}-1)$ [8](#page=8).
* **تمثيل الصفر:** يوجد تمثيلان محتملان للقيمة صفر (00000000 و 11111111 في حالة 8 بت) [8](#page=8).
> **Example:**
> لتحويل العدد $(-26)_{10}$ إلى مكمل الواحد باستخدام 8 بتات:
> 1. التمثيل الموجب للعدد 26 هو: $(+26)_{10} = _{10}$ (مفترض أنه في صيغة مكمل الواحد) [8](#page=8).
> 2. عكس جميع البتات (المكمل): $ _{10}$ [8](#page=8).
> إذن، $(-26)_{10}$ بصيغة مكمل الواحد هو `11100101` [8](#page=8).
#### 3.3.3 تمثيل مكمل الاثنين (2's Complement)
في ترميز مكمل الاثنين، يتم الحصول على التمثيل السالب للعدد عن طريق أخذ مكمل الواحد للعدد ثم إضافة 1 إليه، دون الاحتفاظ بالترحيل (carry) الناتج عن عملية الإضافة [9](#page=9).
* **نطاق القيم:** باستخدام كلمة مكونة من $n$ بت، يمكن تمثيل القيم من $-(2^{n-1})$ إلى $+(2^{n-1}-1)$ [9](#page=9).
* **تمثيل الصفر:** يوجد تمثيل واحد فقط للقيمة صفر (00000000 في حالة 8 بت) [9](#page=9).
> **Tip:** يعتبر ترميز مكمل الاثنين هو الأكثر استخدامًا في الأنظمة الحاسوبية نظرًا لبساطة إجراء العمليات الحسابية عليه (خاصة الطرح) دون الحاجة إلى معالجة منفصلة للإشارات [9](#page=9).
> **Example:**
> لتحويل العدد $(-26)_{10}$ إلى مكمل الاثنين باستخدام 8 بتات:
> 1. التمثيل الموجب للعدد 26 هو: $+26 = 00011010$ [9](#page=9).
> 2. عكس جميع البتات (مكمل الواحد): $11100101$ [9](#page=9).
> 3. إضافة 1: $11100101 + 1 = 11100110$ [9](#page=9).
> إذن، $(-26)_{10}$ بصيغة مكمل الاثنين هو `11100110` [9](#page=9).
> **Example:**
> حساب $7-4$ باستخدام مكمل الاثنين:
> $7 - 4 = 7 + \text{TC} $، حيث $\text{TC}(x)$ هو مكمل الاثنين للعدد $x$ [4](#page=4) [9](#page=9).
> * $+7$ في 8 بت: `00000111`
> * $+4$ في 8 بت: `00000100`
> * مكمل الواحد للـ 4: `11111011`
> * مكمل الاثنين للـ 4: `11111011 + 1 = 11111100`
> الآن نقوم بالجمع:
> `00000111` ($+7$)
> + `11111100` ($-4$)
> --------
> `100000111`
>
> عند استخدام 8 بتات، نهمل البت الأكثر أهمية (الترحيل)، ليصبح الناتج: `00000111`. هذا يبدو خاطئًا، دعونا نراجع المثال المقدم في المستند.
>
> المثال المقدم في المستند هو: $7-4 = 7 + \text{TC} = 0111 + (\text{TC} ) = 0111 + (1011+1) = 10011 = 0011 = (+3)_{10}$ [4](#page=4) [9](#page=9).
> (يفترض هنا استخدام 4 بتات للتبسيط، مع ملاحظة أن TC في 4 بت هو $1100$) [4](#page=4).
>
> إعادة حساب $7-4$ باستخدام 8 بتات:
> * $+7$ هو `00000111`
> * $-4$ بصيغة مكمل الاثنين:
> * $+4$ هو `00000100`
> * مكمل الواحد: `11111011`
> * مكمل الاثنين: `11111011 + 1 = 11111100`
>
> نجمع:
> `00000111` ($+7$)
> + `11111100` ($-4$)
> --------
> `100000111`
>
> عند استخدام 8 بتات، فإن البت الأقصى يساراً (البت التاسع) هو ترحيل يتم تجاهله، ويبقى الناتج `00000111`، وهو يمثل $+7$. هذا يدل على أن هناك خطأ في فهم أو تطبيق المثال في المستند المقدم.
>
> **تحليل المثال الثاني من المستند:**
> $127 - 26 = 101$ [9](#page=9).
> * $+127$ (8 بت): `01111111` [9](#page=9).
> * $-26$ (8 بت بصيغة مكمل الاثنين): `11100110` (كما حسبنا سابقًا).
>
> نجمع:
> `01111111`
> + `11100110`
> --------
> `101000101`
>
> عند استخدام 8 بتات، يتم تجاهل البت التاسع (الترحيل)، ويبقى الناتج `01000101`.
> لتحويل `01000101` إلى عشري: $(0 \times 2^7) + (1 \times 2^6) + (0 \times 2^5) + (0 \times 2^4) + (0 \times 2^3) + (1 \times 2^2) + (0 \times 2^1) + (1 \times 2^0) = 64 + 4 + 1 = 69$.
>
> **المستند يقدم:**
> `127 - 26 = 101 = 01100101` [9](#page=9).
>
> هناك تناقض بين حسابنا والمثال المقدم في المستند. لنفترض أن طريقة الحساب في المستند مختلفة قليلاً.
>
> **الاستنتاج بناءً على طريقة المستند:**
> `127 = 01111111` [9](#page=9).
> `+ (-26)` (في مكمل الاثنين): `11100110` [9](#page=9).
> `01111111 + 11100110 = 101000101` [9](#page=9).
> `c-à-2` (مكمل الاثنين) ` 10` (النتيجة المحتجزة) .
>
> يبدو أن المستند يحاول تفسير النتيجة `101000101` بعد الترحيل.
>
> **مثال آخر من المستند:**
> `26 - 127 = -101` [10](#page=10).
> * `26`: `00011010` [10](#page=10).
> * `-127` (في مكمل الاثنين):
> * $+127$: `01111111` [10](#page=10).
> * مكمل الواحد: `10000000` [10](#page=10).
> * مكمل الاثنين: `10000000 + 1 = 10000001` [10](#page=10).
>
> نجمع:
> `00011010`
> + `10000001`
> --------
> `10011011` [10](#page=10).
>
> يشير البت الأكثر أهمية (MSB) إلى أن النتيجة سالبة [10](#page=10).
> لتحويل `10011011` إلى قيمة موجبة:
> 1. نطرح 1: `10011011 - 1 = 10011010` [10](#page=10).
> 2. نعكس البتات: `01100101` [10](#page=10).
> 3. نحول إلى عشري: $64 + 32 + 4 + 1 = 101$ [10](#page=10).
> لذا، النتيجة العشرية هي `(-101)10`. هذا الحساب متفق مع المستند [10](#page=10).
> **Tip:** يعد تمثيل مكمل الاثنين مهمًا جدًا لأنه يسمح بإجراء العمليات الحسابية بالإشارة دون الحاجة إلى معالجة خاصة للإشارات [9](#page=9).
> **Tip:** في ترميز مكمل الاثنين، يتم تمثيل الإشارة بواسطة البت الأكثر أهمية (MSB): 0 للإشارة الموجبة (+) و 1 للإشارة السالبة (-) [10](#page=10).
> **Tip:** ترميز مكمل الاثنين متوافق مع الترميز غير الموضح (unsigned) للأعداد الموجبة [10](#page=10).
### 3.4 جدول مقارنة لقيم مكمل الاثنين (8 بت)
| العدد العشري | تمثيل ثنائي | مكمل الاثنين |
| :----------- | :---------- | :----------- |
| +7 | 0111 | 0111 |
| +6 | 0110 | 0110 |
| +5 | 0101 | 0101 |
| +4 | 0100 | 0100 |
| -7 | N/A | 1001 |
| -6 | N/A | 1010 |
| -5 | N/A | 1011 |
| -4 | N/A | 1100 |
(ملاحظة: الجدول في الصفحة 10 يحتوي على تمثيلات ثنائية قصيرة، وتمت إضافتها لتوضيح المفاهيم. التمثيل الكامل لمكمل الاثنين باستخدام 8 بتات يكون كما هو موضح في الأمثلة السابقة).
---
# تمثيل الأعداد الكسرية
يغطي هذا الجزء تمثيل الأعداد الكسرية في أجهزة الكمبيوتر، مع شرح لمفهوم النقطة الثابتة والنقطة العائمة، والتركيز على معيار IEEE 754 للدقة الواحدة والمزدوجة.
### 4.1 الأعداد الكسرية
بشكل عام، يتكون العدد الكسري من جزأين: قيمة صحيحة وقيمة كسرية، ويفصل بينهما فاصلة عشرية [11](#page=11).
#### 4.1.1 الترميز بالنقطة الثابتة (Fixed Point Coding)
في مستوى الآلة، لا تمتلك أجهزة الكمبيوتر فواصل عشرية بالمعنى المادي؛ حيث تُعامل الأرقام كأعداد صحيحة، ويبقى على المبرمج تحديد موقع الفاصلة العشرية الافتراضية. تعتمد سعة تمثيل الأعداد على عدد البتات المتاحة. النظام الثنائي هو نظام وزني، حيث لكل بت وزن يعتمد على ترتيبه [11](#page=11).
> **Example:**
> لتمثيل العدد الثنائي $N = (1001.01001)_2$:
> الجزء الصحيح: $1 \times 2^3 + 0 \times 2^2 + 0 \times 2^1 + 1 \times 2^0 = 8 + 1 = 9$ [12](#page=12).
> الجزء الكسري: $0 \times 2^{-1} + 1 \times 2^{-2} + 0 \times 2^{-3} + 0 \times 2^{-4} + 1 \times 2^{-5} = 0.25 + 0.03125 = 0.28125$ [12](#page=12).
> إذن، $(1001.01001)_2 = (9.28125)_{10}$ [12](#page=12).
#### 4.1.2 الترميز بالنقطة العائمة (Floating Point Coding) - معيار IEEE 754
تسمح الأرقام ذات النقطة العائمة بتمثيل جزء من الأعداد الحقيقية بشكل تقريبي. لا يمكن للقيمة الحقيقية أن تكون كبيرة جدًا أو دقيقة جدًا، ويعتمد ذلك على عدد البتات المستخدمة (عادة 32 أو 64 بت) [12](#page=12).
معيار IEEE 754 للحساب ذي النقطة العائمة هو معيار فني للحساب ذي النقطة العائمة تم إنشاؤه في عام 1985 بواسطة معهد المهندسين الكهربائيين والإلكترونيين (IEEE). يكون الترميز الثنائي على الشكل التالي [12](#page=12):
$$
\text{Sign} \quad \text{Exponent} \quad \text{Mantissa}
$$
حيث:
* $S$: إشارة (Sign).
* $E$: الأس (Exponent) (إشارة).
* $M$: الجزء الكسري من المانتيسّا (Mantissa) (بدون إشارة) [12](#page=12).
نسمي "التدوين العلمي" كل رقم مكتوب على الشكل $1.M \times 2^E$ [12](#page=12).
* $M$ تسمى المانتيسّا للرقم.
* $E$ يسمى الأس.
نظرًا لأن المانتيسّا دائمًا تبدأ بجزء صحيح يساوي 1، فلا تتم كتابته، ويتم فقط تمثيل الجزء الكسري $M$، والذي يسمى "المانتيسّا الزائفة" (pseudo-mantissa) [12](#page=12).
يعرّف معيار IEEE 754 نوعين رئيسيين من الأرقام ذات النقطة العائمة: الدقة الواحدة (32 بت) والدقة المزدوجة (64 بت) [12](#page=12).
##### 4.1.2.1 الدقة الواحدة (Single Precision)
تتميز أرقام الدقة الواحدة بمانتيسّا زائفة تتكون من 23 بت (تقابل قوى سالبة للعدد 2)، وأس من 8 بت، وبت إشارة [12](#page=12).
| بت الإشارة (1 بت) | الأس (8 بت) | المانتيسّا الزائفة (23 بت) | $E_{\min}$ (-126) | $E_{\max}$ (+127) |
| :----------------: | :--------: | :----------------------: | :---------------: | :---------------: |
| Sign | Exponent | Pseudo Mantissa | $E_{min}$ | $E_{max}$ |
> **Example:**
> لتمثيل العدد 278 بالصيغة IEEE 754 للدقة الواحدة [13](#page=13):
> 1. نكتب 278 بالنظام الثنائي: $ _{10} = _2$ [13](#page=13) .
> 2. نضعه في الصيغة العلمية: $1.0001011 \times 2^8$ [13](#page=13).
> * $S = 0$ لأن 278 موجب [13](#page=13).
> * $E_b = E + 127 = 8 + 127 = 135$ بالنظام العشري، والذي يساوي $ _2$ على 8 بت [13](#page=13).
> * $M = 00010110000000000000000$ (23 بت) [13](#page=13).
> نحصل على التمثيل التالي:
>
> | بت الإشارة (1 بت) | الأس (8 بت) | المانتيسّا الزائفة (23 بت) |
> | :----------------: | :--------: | :--------------------------------------------------------: |
> | 0 | 10000111 | 00010110000000000000000 |
> **Example:**
> لتمثيل العدد $-6.53125$ بالصيغة IEEE 754 للدقة الواحدة [13](#page=13):
> 1. نكتب 6.53125 بالنظام الثنائي: $(6.53125)_{10} = (110.10001)_2$ [13](#page=13).
> 2. نضعه في الصيغة العلمية: $1.1010001 \times 2^2$ [13](#page=13).
> * $S = 1$ لأن $-6.53125$ سالب [13](#page=13).
> * $E_b = E + 127 = 2 + 127 = 129$ بالنظام العشري، والذي يساوي $ _2$ على 8 بت [13](#page=13).
> * $M = 10100010000000000000000$ (23 بت) [13](#page=13).
> نحصل على التمثيل التالي:
>
> | بت الإشارة (1 بت) | الأس (8 بت) | المانتيسّا الزائفة (23 بت) |
> | :----------------: | :--------: | :--------------------------------------------------------: |
> | 1 | 10000001 | 10100010000000000000000 |
##### 4.1.2.2 الدقة المزدوجة (Double Precision)
تتميز أرقام الدقة المزدوجة بمانتيسّا زائفة تتكون من 52 بت، وأس من 11 بت، وبت إشارة [14](#page=14).
| بت الإشارة (1 بت) | الأس (11 بت) | المانتيسّا الزائفة (52 بت) | $E_{\min}$ (-1022) | $E_{\max}$ (+1023) |
| :----------------: | :---------: | :----------------------: | :----------------: | :----------------: |
| Sign | Exponent | Pseudo Mantissa | $E_{min}$ | $E_{max}$ |
[ ] [ ] [ ] [ ] [11](#page=11) [12](#page=12) [13](#page=13) [14](#page=14).
---
## Common mistakes to avoid
- Review all topics thoroughly before exams
- Pay attention to formulas and key definitions
- Practice with examples provided in each section
- Don't memorize without understanding the underlying concepts
Glossary
| المصطلح | التعريف |
|---|---|
| الترميز الثنائي النقي (Pure Binary Coding) | هو التمثيل الطبيعي للأرقام في النظام الثنائي، حيث يتوافق كل بت مباشرة مع وزن مكانه. يُستخدم بشكل شائع في الأنظمة الرقمية. |
| رمز جراي (Gray Code) | نوع من الترميز الثنائي حيث يتغير بت واحد فقط بين أي قيمتين متتاليتين. يساعد هذا في تقليل أخطاء الانتقال في الأنظمة الرقمية. |
| رمز BCD (Binary Coded Decimal) | ترميز يقوم بتمثيل كل رقم عشري على حدة باستخدام 4 بتات ثنائية. لا تُستخدم الإمكانيات الثنائية من 10 إلى 15 في هذا الترميز. |
| رمز الفائض بثلاثة (Excess-3 Code) | ترميز ثنائي حيث يتم تشفير كل رقم عشري بمعادلته الثنائية مضافًا إليها ثلاثة (3). |
| EBCDIC (Extended Binary Coded Decimal Interchange Code) | نظام ترميز ذو 8 بتات طورته IBM، وهو امتداد لرمز BCD، ويستخدم لتمثيل الأحرف في أجهزة IBM. |
| ASCII (American Standard Code for Information Interchange) | معيار ترميز ذو 7 بتات يستخدم لتمثيل الأحرف النصية والأرقام وعلامات الترقيم في تبادل البيانات بين الأجهزة، ويمكن توسيعه لـ 8 بتات. |
| UTF (Unicode Transformation Format) | عائلة من تنسيقات الترميز ذات الطول المتغير المستخدمة لتمثيل حروف يونيكود، والتي يمكن أن تشغل بايت واحد أو اثنين أو ثلاثة بايتات، وتوفر توافقًا مع ASCII. |
| الأعداد الصحيحة غير الموقعة (Unsigned Integers) | الأعداد الصحيحة التي تكون دائمًا موجبة أو صفرًا. يعتمد نطاق القيم الممثلة على عدد البتات المستخدمة، حيث يمكن لـ n بت تمثيل الأعداد من 0 إلى $2^n - 1$. |
| تمثيل الإشارة والقيمة المطلقة (Sign/Absolute Value) | طريقة لتمثيل الأعداد الصحيحة ذات الإشارة، حيث يتم تخصيص بت واحد (عادةً الأكثر أهمية) للإشارة (+ أو -)، وتمثل البتات المتبقية القيمة المطلقة للعدد. |
| مكمل الواحد (1's Complement) | طريقة لتمثيل الأعداد السالبة عن طريق قلب (عكس) جميع البتات في التمثيل الثنائي للعدد الموجب المقابل. |
| مكمل الاثنين (2's Complement) | الطريقة الأكثر شيوعًا لتمثيل الأعداد السالبة في الحواسيب. يتم الحصول عليها عن طريق أخذ مكمل الواحد للعدد الموجب وإضافة 1 إليه. هذه الطريقة تسمح بإجراء العمليات الحسابية بسهولة. |
| النقطة الثابتة (Fixed Point) | تمثيل للأعداد الكسرية حيث يتم تحديد موقع الفاصلة العشرية (أو النقطة الثنائية) بشكل ثابت، إما قبل أو بعد عدد معين من البتات. |
| النقطة العائمة (Floating Point) | تمثيل للأعداد الكسرية أو الحقيقية، حيث يتم تمثيل العدد كناتج لثلاثة مكونات: الإشارة، الأس، والجزء الكسري من المانتيسا. يسمح بتمثيل نطاق واسع جدًا من القيم. |
| معيار IEEE 754 | المعيار القياسي الدولي لتمثيل الأعداد ذات النقطة العائمة، والذي يحدد تنسيقات مختلفة للدقة الواحدة (32 بت) والدقة المزدوجة (64 بت). |
| الجزء الكسري من المانتيسا (Pseudo-mantissa) | الجزء الكسري من التمثيل العشري للرقم في ترميز النقطة العائمة، بعد تطبيعه ليبدأ بـ 1 (علمًا بأن الـ 1 هذا لا يتم تخزينه صراحة في بعض الحالات). |
Cover
Chapter-3 Femke.docx
Summary
# Introductie tot informatiemanagement en enterprise architectuur
Dit document introduceert de basisprincipes van informatiemanagement en de plaats ervan binnen enterprise architectuur, met specifieke aandacht voor datamodelleringstechnieken zoals UML Class Diagrams.
## 1. Introductie tot informatiemanagement
### 1.1 Wat is informatiemanagement?
Informatiemanagement omvat het verzamelen, opslaan, verwerken en ontsluiten van gegevens en informatie binnen een organisatie. Het doel is om de juiste informatie op het juiste moment, bij de juiste persoon te krijgen om bedrijfsprocessen te ondersteunen en strategische doelen te bereiken.
#### 1.1.1 Dataopslag: gecentraliseerd versus gedecentraliseerd
* **Gecentraliseerde database:** Voorkomt datadubplicatie en zorgt voor consistentie.
* **Gedecentraliseerde database:** Elke functie of afdeling heeft een eigen systeem en gegevensopslag, wat kan leiden tot inconsistenties en duplicatie.
#### 1.1.2 Informatieverwerking in bedrijfsprocessen
Informatie moet stapsgewijs worden verwerkt gedurende een bedrijfsproces, van begin tot eind. Diverse informatiebronnen moeten worden samengebracht om processen, zoals budgetverdeling, te ondersteunen.
### 1.2 Datamodellering en enterprise architectuur
Datamodellering is een cruciaal onderdeel van enterprise architectuur. Het stelt organisaties in staat om hun informatiebehoeften te structureren en te visualiseren.
#### 1.2.1 Strategisch alignment framework
Een strategisch alignment framework integreert business, technologie en informatie. Bedrijfsprocessen en -doelen vallen onder de 'business'-peiler. Informatiedoelen en benodigde gegevens worden uitgewerkt in conceptuele en logische datamodellen, ondersteund door technologie.
#### 1.2.2 Het Zachman framework
Binnen het Zachman framework richt datamodellering zich op de "What"-kolom, met name op het niveau van conceptuele datamodellen (rij 2). Dit omvat het identificeren van relevante gegevens, hun onderlinge relaties en de eerste opzet van een database.
#### 1.2.3 Plaats in TOGAF
Hoewel niet gedetailleerd beschreven in de verstrekte tekst, wordt datamodellering binnen TOGAF (The Open Group Architecture Framework) ook beschouwd als een essentieel onderdeel om de informatiearchitectuur van een onderneming te definiëren.
### 1.3 Datamodellering: UML Class Diagrams
Datamodellering, met name met behulp van UML Class Diagrams, is een techniek om de structuur van een bedrijfsdomein in kaart te brengen.
#### 1.3.1 Wat is een datamodel?
Een model is een systematische en vereenvoudigde beschrijving van een object of fenomeen, die de belangrijkste kenmerken ervan weergeeft. Dit is een handig instrument voor studie en begrip.
#### 1.3.2 UML (Unified Modelling Language)
UML is een objectgeoriënteerde modelleringstaal die bestaat uit diverse modelleertechnieken. Het biedt een visuele, symbolische taal die software-engineers helpt bij het begrijpen van vereisten en het ontwerpen van softwaresystemen.
* **Modelleertaal:** Een verzameling van modelleertechnieken (bv. UML).
* **Modelleertechniek:** Een specifieke methode om een model te beschrijven met symbolen en regels (bv. UML Class Diagrams, BPMN procesdiagrammen).
#### 1.3.3 Voordelen van UML Class Diagrams
UML Class Diagrams bieden een middenweg tussen puur tekstuele en puur formele technieken:
* **Voordelen:** Gemakkelijk te begrijpen, voldoende formeel voor precisie en verificatie.
* **Representatie:** Klassen worden weergegeven als rechthoeken, associaties als pijlen.
#### 1.3.4 Waarom is datamodellering belangrijk?
Het creëren van een domeinmodel leidt tot een dieper begrip van het domein, wat essentieel is voor het bouwen van aanpasbare informatiesystemen die kunnen omgaan met veranderende vereisten. Het focussen op het kernconcept van het bedrijf in het model zorgt voor de levensvatbaarheid van het systeem.
### 1.4 Concepten binnen UML Class Diagrams
#### 1.4.1 Klassen en attributen
* **Klasse:** Een abstractie of concept dat objecten met vergelijkbare eigenschappen groepeert (bv. "Student", "Product", "Auto"). Het dient als een sjabloon voor reële objecten.
* **Intentie van een klasse:** De definitie die bepaalt wanneer een object tot de klasse behoort.
* **Uitbreiding van een klasse:** De verzameling objecten die voldoen aan de intentie.
* **Instantie:** Een individueel, werkelijk bestaand object van een klasse (bv. "Student Jan", "Product MilkyWay").
* **Attributen:** Eigenschappen waarover informatie wordt verzameld voor elk individueel object in een klasse (bv. voornaam, achternaam, studentnummer).
* **Gegevenstypes (Data Types):** Beperken de waarden die aan een attribuut kunnen worden toegekend (bv. tekst, getal, datum). Dit is cruciaal voor correcte bewerkingen.
> **Tip:** Een klasse kan zowel tastbare als ontastbare objecten vertegenwoordigen.
#### 1.4.2 Representatie van instanties in databases
Instanties van klassen kunnen worden weergegeven in tabellen, zoals in Microsoft Access (met expliciete datatypes voor velden) of Microsoft Excel (waar kolomtitels attributen zijn en cellen de waarden; datatype wordt bepaald door celformaat).
#### 1.4.3 De definitie van een klasse (klassendiagram)
Een klasse-definitie beschrijft duidelijk wanneer iets tot die klasse behoort. Een UML-klassendiagram wordt gemaakt voor een specifiek domein en definieert begrippen, eigenschappen en relaties binnen dat domein, vergelijkbaar met een ontologie.
#### 1.4.4 Associaties
Associaties vertegenwoordigen abstracties van relaties tussen instanties van klassen. Ze verbinden klassen en beschrijven de aard van de koppeling.
* **Multipliciteit:** Geeft aan hoeveel instanties van de ene klasse gekoppeld kunnen zijn aan instanties van de andere klasse. Dit wordt weergegeven als een interval: `(minimum, maximum)`.
* `0..1`: nul of één
* `1..1`: precies één
* `0..*`: nul of meer ("veel")
* `1..*`: één of meer
* **Rollen:** De namen die de richting van een associatie aangeven (bv. van student naar opleiding, is de rol "ingeschreven voor").
* **Meerdere associaties:** Tussen twee klassen kunnen meerdere verschillende associaties bestaan (bv. een persoon kan eigenaar én bestuurder van een auto zijn).
#### 1.4.5 Unary Associations
Associaties kunnen ook een klasse met zichzelf verbinden. Voorbeelden zijn hiërarchische structuren (afdelingen) of stuklijsten (bill of materials).
#### 1.4.6 Ternary Associations
Wanneer relaties tussen drie entiteiten complex zijn, volstaan binaire associaties niet. Een ternaire associatie koppelt drie klassen direct aan elkaar, waarbij de multipliciteit genuanceerder wordt bepaald door het fixeren van twee entiteiten en te kijken naar het aantal van de derde.
#### 1.4.7 Aggregatie (Deel-geheel relaties)
Drukt een deel-geheel-relatie uit.
* **Shared Aggregation (witte diamant):** Delen kunnen bij meerdere gehelen horen (bv. modules in verschillende cursussen).
* **Composite Aggregation (zwarte diamant):** Een deel hoort bij maximaal één geheel (exclusief eigendom, bv. orderlijnen bij een order). Dit impliceert vaak "cascading delete" (verwijderen van het geheel verwijdert ook de delen).
> **Advies:** Het gebruik van gewone associaties met duidelijke rolnamen wordt vaak aangeraden boven aggregatiesymbolen, omdat deze minder ambiguïteit veroorzaken.
#### 1.4.8 Derived/Implicit Associations
Indirecte relaties die ontstaan door navigatie via meerdere opeenvolgende associaties. De cardinaliteit hiervan volgt uit de cardinaliteiten van de originele relaties. Deze worden niet getekend maar moeten wel begrepen worden bij het lezen van een model.
#### 1.4.9 Superclass/Subclass/Inheritance (Generalisation)
* **Generalisation (generaliseren):** Creëert een algemeen concept (superclass) uit specifiekere concepten (subklassen). De subklassen erven eigenschappen van de superclass.
* Voorbeeld: Bankrekening (superclass) met Zichtrekening en Spaarrekening (subklassen).
* **Specialisation (specialiseren):** Het proces van het creëren van specifieke subklassen uit een algemene superclass.
* **Generalisation Sets:** Soms kan een supertype op meerdere manieren worden opgesplitst (bv. vervoermiddel op basis van motor of op basis van habitat). Dit kan op verschillende manieren worden genoteerd (naam bij lijnen, gedeelde pijl, gestreepte lijn).
* **Constraints:**
* **Complete vs. Incomplete specialisatie:** Bepaalt of er instanties van de superclass bestaan die niet tot een subklasse behoren.
* **Disjuncte vs. Overlappende subklassen:** Bepaalt of een instantie tot meerdere subklassen tegelijk kan behoren. Standaard zijn subklassen overlappend.
#### 1.4.10 Association Class
Een Association Class wordt gebruikt wanneer attributen werkelijk bij de relatie tussen twee klassen horen, en niet bij de klassen zelf. De objecten van de Association Class bestaan zolang de gekoppelde objecten bestaan.
#### 1.4.11 Multiple Inheritance Structures
Bij meerdere generalisatiehiërarchieën in een diagram is het belangrijk te modelleren of specifieke subklassen alleen met specifieke superklassen kunnen interageren. Dit wordt vaak bereikt door associaties op het niveau van de subtypes te modelleren en de associatie op het supertype te verwijderen.
---
# Conceptuele datamodellering met UML Class diagrammen
Dit onderwerp introduceert de principes en geavanceerde concepten van UML Class diagrammen voor conceptuele datamodellering, met de nadruk op het identificeren van klassen, attributen, datatypes en associaties.
### 2.1 Wat is datamodellering?
Datamodellering is een proces dat wordt gebruikt om de structuur van bedrijfsgegevens te beschrijven en hoe deze gegevens aan elkaar gerelateerd zijn. Het creëren van een domeinmodel, zoals een UML-klassendiagram, leidt tot een dieper begrip van het domein. Dit is cruciaal voor het bouwen van softwaresystemen die flexibel kunnen inspelen op veranderende gebruikersvereisten.
#### 2.1.1 Het belang van datamodellering
Een goed datamodel is de basis voor het bouwen van aanpasbare informatiesystemen. Als het ontwerp van een systeem het kernconcept van een bedrijf niet belichaamt, zal het systeem falen bij het toevoegen van nieuwe vereisten.
#### 2.1.2 Modelleertalen en technieken
Een modelleertaal is een verzameling van modelleertechnieken. UML (Unified Modelling Language) is een objectgeoriënteerde modelleertaal die een notatie van visuele, symbolische modellen biedt. Deze modellen helpen software-engineers bij het begrijpen van vereisten en het ontwerpen van softwaresystemen.
**Modelleertechnieken kunnen variëren van puur tekstueel tot puur formeel:**
* **Tekstuele diagrammen:** Makkelijk te begrijpen, maar vaak onnauwkeurig en dubbelzinnig. Bieden geen intelligente verificatie.
* **Puur formele technieken:** Bieden veel formele mogelijkheden, maar zijn moeilijker te begrijpen en te gebruiken.
* **UML-klassendiagrammen:** Bevinden zich ergens in het midden, zijn relatief makkelijk te begrijpen en voldoende formeel voor precisie en verificatie.
### 2.2 UML Class diagrammen - basisconcepten
UML-klassendiagrammen zijn een techniek om de structuur van een bedrijfsdomein in kaart te brengen. Ze visualiseren bedrijfsobjecten, geven de benodigde informatie over deze objecten weer en laten zien hoe objecten met elkaar verbonden zijn.
#### 2.2.1 Klassen
Een klasse is een abstractie, een soort of categorie van objecten. Een klasse definieert een verzameling objecten die vergelijkbare eigenschappen delen.
* **Intentie van een klasse:** De definitie van het concept dat bepaalt of een object tot de klasse behoort. Een klasse dient als sjabloon of model voor een groep reële objecten.
* **Uitbreiding van een klasse:** De verzameling objecten die voldoen aan de intentie van de klasse.
In UML wordt een klasse weergegeven als een rechthoek met de naam van de klasse erin. Klassen kunnen zowel tastbare als ontastbare objecten vertegenwoordigen.
> **Tip:** Modelleren is abstractie maken. We gaan van het instantie- of objectniveau (niveau 0, individuele objecten) naar het model-/diagramniveau (niveau 1, de definitie van klassen).
#### 2.2.2 Attributen en datatypes
* **Attributen:** De eigenschappen of kenmerken waarover informatie wordt bijgehouden voor elk individueel object binnen een klasse.
* **Datatypes:** Beperken de waarden die aan een attribuut kunnen worden toegekend. Een waarde moet voldoen aan de beperkingen van het datatype.
In een UML-klassendiagram worden attributen en hun datatypes geschreven in een rechthoek onder de naam van de klasse.
> **Tip:** Het correct instellen van datatypes is belangrijk. Als getallen als tekst worden opgeslagen, kunnen berekeningen mislukken.
#### 2.2.3 Class definities en ontologieën
Elke klasse heeft een **klasse-definitie**, een duidelijke beschrijving die aangeeft wanneer iets tot die klasse behoort. Een UML-klassendiagram wordt gemaakt voor één specifiek domein en definieert concepten, eigenschappen en relaties binnen dat domein. Dit vormt in feite een **ontologie**, een gemeenschappelijke woordenschat binnen een organisatie of vakgebied.
#### 2.2.4 Associaties
Een associatie is een abstractie van relaties of koppelingen tussen objecten van verschillende klassen. Het verbindt klassen en vertegenwoordigt een type koppeling met specifieke kenmerken.
* **Rollen:** De richtingen waarin een associatie gelezen kan worden (bijvoorbeeld van 'student' naar 'opleiding' of van 'opleiding' naar 'student').
* **Multipliciteit:** Geeft de minimale en maximale aantal objecten aan dat betrokken kan zijn bij een associatie. Dit wordt weergegeven als een interval, bijvoorbeeld (0,1), (1,1) of "veel" (*).
* `(0,1)`: Nul of één.
* `(1,1)`: Precies één.
* `(0,*)`: Nul of veel.
* `(1,*)`: Eén of veel.
UML-associaties worden weergegeven als lijnen tussen klassen. Er kunnen meerdere associaties tussen twee klassen bestaan, en ze kunnen verschillende rollen hebben.
> **Voorbeeld:** Een student kan voor nul of veel programma's ingeschreven zijn `(0,*)`. Een programma heeft nul of veel studenten `(0,*)`.
#### 2.2.5 Unary association
Een associatie kan ook één klasse met zichzelf verbinden. Dit wordt een unary association genoemd.
> **Voorbeeld:** Een persoon die een andere persoon superviseert ("superviseert" en "supervised by" zijn de rollen). Een afdeling kan subafdelingen hebben.
#### 2.2.6 Ternary association
Wanneer binaire of uniaire associaties niet volstaan om complexe relaties te beschrijven, wordt een **ternary association** gebruikt. Dit is één associatie die drie entiteiten koppelt. De multipliciteit bij een ternaire associatie is subtieler en wordt bepaald door combinaties van entiteiten.
> **Voorbeeld:** Het vastleggen welke leverancier welk product voor welk project heeft geleverd.
#### 2.2.7 Aggregatie
Aggregatie drukt een deel-geheel-relatie uit. In UML wordt dit aangeduid met een diamant aan de kant van het geheel.
* **Witte diamant (Shared Aggregation):** Delen kunnen bij meerdere gehelen tegelijk horen.
* **Zwarte diamant (Composite Aggregation):** Een deel hoort bij maximaal één geheel. Dit impliceert exclusief eigendom en vaak 'cascading delete' (wanneer het geheel wordt verwijderd, worden de onderdelen ook verwijderd).
> **Advies:** De diamant-symbolen voor aggregatie veroorzaken vaak onduidelijkheid en worden beter vermeden ten gunste van gewone associaties met duidelijke rolnamen.
#### 2.2.8 Derived/implicit association
Een **impliciete associatie** ontstaat wanneer je via meerdere opeenvolgende associaties kunt navigeren. Deze relaties worden niet expliciet in het diagram getekend, maar hun cardinaliteit volgt uit de oorspronkelijke relaties.
> **Voorbeeld:** Als een student zich inschrijft voor een programma en elk programma bij een faculteit hoort, ontstaat er een impliciete associatie tussen student en faculteit.
### 2.3 UML Class diagrammen - geavanceerde concepten
#### 2.3.1 Superclass/subclass/inheritance (Generalisatie)
Generalisatie is het principe waarbij een algemeen concept (superclass, supertype) wordt gedefinieerd, en daaronder meer specifieke soorten (subklassen, subtypes) vallen. De specifieke soorten erven de eigenschappen van het algemene begrip.
* **Generalisatie:** Lijn van de specifieke klasse naar de algemene klasse, met een driehoek aan de kant van de algemene klasse.
* **Specialisatie:** Het proces van het definiëren van specifieke subklassen.
#### 2.3.2 Generalisatiesets
Generalisatiesets helpen bij het organiseren van specialisaties wanneer er meerdere mogelijke indelingen van een supertype bestaan.
* **Notaties voor generalisatiesets:** Naam bij de generalisatie-lijnen, 'shared target'-stijl, of een gestreepte lijn over meerdere generalisaties.
#### 2.3.3 Constraints on generalisation/specialisation
* **Complete vs. Incomplete specialisatie:** Geeft aan of er objecten bestaan die tot de superklasse behoren maar niet tot één van de subklassen.
* **Disjuncte vs. Overlappende subklassen:** Geeft aan of een object tegelijk tot meerdere subklassen kan behoren. Standaard zijn subklassen overlappend.
Constraints worden genoteerd tussen haakjes naast de generalisatie-driehoek.
> **Voorbeeld:** Een bankrekening kan compleet en disjunct gespecialiseerd zijn in betaalrekeningen en spaarrekeningen (een rekening is óf betaal, óf spaar, en er zijn geen andere soorten rekeningen).
#### 2.3.4 Association Class
Een **association class** wordt gebruikt wanneer een eigenschap hoort bij de relatie tussen twee klassen, en niet bij één van die klassen afzonderlijk. Een object van een association class bestaat alleen zolang beide verbonden objecten bestaan.
> **Voorbeeld:** 'ProductOffer' met attributen zoals prijs en leveringsvoorwaarden, die specifiek zijn voor de relatie tussen een leverancier en een product.
#### 2.3.5 Multiple Inheritance Structures
Bij meerdere generalisatiehiërarchieën in een diagram moet extra aandacht worden besteed aan associaties. Associaties op het niveau van de superklassen gelden voor alle subklassen. Om specifieke regels af te dwingen (bijvoorbeeld dat alleen passagiersvliegtuigen passagiersvluchten gebruiken), moeten de associaties op het niveau van de subklassen worden gemodelleerd en de associatie op het supertype niveau verwijderd.
---
# Logische en fysieke datamodellen
Dit gedeelte beschrijft de transformatie van conceptuele modellen naar logische en vervolgens naar fysieke datamodellen, en behandelt de implementatie in systemen zoals MS Access en Excel.
### 3.1 Van conceptueel naar logisch en fysiek datamodel
De kern van datamodellering ligt in het abstraheren van de werkelijkheid naar een gestructureerd model. Dit proces doorloopt verschillende niveaus, van conceptueel naar logisch en uiteindelijk naar fysiek.
#### 3.1.1 Conceptuele datamodellering
Conceptuele datamodellen beschrijven op een hoog abstractieniveau de gegevens en hun relaties binnen een domein. Ze beantwoorden de vragen: welke gegevens zijn relevant, hoe zijn ze aan elkaar gerelateerd, en vormen ze de eerste opzet voor een database?
* **Doel:** Het vastleggen van de belangrijkste gegevens en hun onderlinge verbindingen, zonder in te gaan op technische details. Dit vormt de basis voor communicatie tussen belanghebbenden en het ontwerp van informatiesystemen.
* **UML Class Diagrams:** Een populaire techniek voor conceptuele modellering is het gebruik van UML (Unified Modelling Language) Class Diagrams. Deze objectgeoriënteerde taal richt zich op het beschrijven van objecten/concepten die relevant zijn voor een specifiek domein.
* **Klassen:** Een klasse is een abstractie die een soort of categorie van objecten vertegenwoordigt. Het definieert een verzameling objecten met vergelijkbare eigenschappen. In UML wordt een klasse weergegeven als een rechthoek.
* **Intentie van een klasse:** De definitie die bepaalt wanneer een object tot de klasse behoort.
* **Uitbreiding van een klasse:** De verzameling objecten die voldoen aan de intentie van de klasse.
* **Attributen:** Eigenschappen van een klasse waarover informatie wordt bijgehouden voor elk individueel object. Elk attribuut heeft een gegevenstype dat de toegestane waarden beperkt. In UML worden attributen en hun datatypes genoteerd in de rechthoek onder de klassenaam.
* **Relaties (Associaties):** De koppelingen tussen objecten van verschillende klassen. Associaties worden weergegeven door lijnen tussen klassen.
* **Rollen:** De richting waarin een associatie gelezen kan worden (bv. van student naar opleiding).
* **Multipliciteit:** Geeft aan hoeveel instanties van de ene klasse gekoppeld kunnen zijn aan instanties van de andere klasse. Dit wordt weergegeven als een interval (minimum, maximum), bijvoorbeeld $(0,1)$ of $(0,\ast)$ (veel).
* **Unary Associations:** Een associatie die een klasse met zichzelf verbindt (bv. een persoon die een andere persoon superviseert).
* **Ternary Associations:** Associaties die de relatie tussen drie klassen tegelijkertijd modelleren, wanneer binaire associaties onvoldoende zijn om de relatie correct te beschrijven.
* **Aggregation:** Drukken een deel-geheel-relatie uit.
* **Shared Aggregation (witte diamant):** Delen kunnen bij meerdere gehelen horen.
* **Composite Aggregation (zwarte diamant):** Een deel hoort bij maximaal één geheel en wordt vaak automatisch verwijderd als het geheel wordt verwijderd (cascading delete). Het gebruik van diamant-symbolen wordt vaak afgeraden ten gunste van duidelijke rolnamen.
* **Impliciete/Derived Associations:** Ontstaan door het navigeren via meerdere opeenvolgende associaties, waardoor indirecte relaties tussen klassen ontstaan. De cardinaliteit hiervan volgt uit de originele relaties.
* **Generalisation/Specialisation (Inheritance):** Modellen van een algemeen begrip (superclass) en meer specifieke soorten (subclasses) die de eigenschappen van de superclass erven en eventueel aanvullen.
* **Generalisation sets:** Mogelijkheden om specialisaties te groeperen.
* **Complete vs. Incomplete specialisatie:** Geeft aan of er objecten bestaan die tot de superclass behoren, maar niet tot een van de subclasses.
* **Disjuncte vs. Overlappende subklassen:** Geeft aan of een object tot meerdere subclasses tegelijk kan behoren.
* **Association Class:** Wordt gebruikt wanneer een eigenschap hoort bij de relatie tussen twee klassen, en niet bij één van de klassen afzonderlijk. Een object van een association class bestaat alleen zolang de verbonden objecten bestaan.
#### 3.1.2 Logische datamodellering
Een logisch datamodel beschrijft de structuur van de gegevens op een niveau dat nog steeds onafhankelijk is van een specifieke databasesoftware, maar wel meer gedetailleerd is dan een conceptueel model. Het vertaalt het conceptuele model naar een gestructureerde lay-out die klaar is voor implementatie.
* **Focus:** Het definiëren van entiteiten, attributen met specifieke datatypes en de relaties daartussen. Een voorbeeld hiervan is het concept van een uniek studentennummer, wat een attribuut kan zijn in de entiteit 'Student'.
* **Implementatie in MS Access en Excel:**
* **Microsoft Access:** Biedt de meeste databasefunctionaliteit. In het ontwerpvenster van een tabel worden attributen als velden weergegeven, elk met een specifiek datatype (bv. Number, Short Text, Date/Time).
* **Microsoft Excel:** Hoewel geen databasesoftware, biedt Excel database-achtige functionaliteit. Kolomtitels fungeren als attributen en cellen als attribuutwaarden. Elke rij is een object. Het datatype wordt deels bepaald door het celformaat. Een nadeel is dat niet elke cel in een kolom hetzelfde datatype hoeft te hebben, wat problemen kan geven bij consistente dataclassificatie.
#### 3.1.3 Fysieke datamodellering
Het fysieke datamodel is de meest gedetailleerde weergave en beschrijft hoe de gegevens daadwerkelijk in een specifieke database worden opgeslagen. Het houdt rekening met de beperkingen en mogelijkheden van de gekozen databasesoftware.
* **Detailniveau:** Dit niveau specificeert zaken als fysieke datatypen, indexen, constraints en partities, direct gericht op de implementatie in een DBMS (Database Management System).
> **Tip:** Het belang van datatypes kan niet genoeg benadrukt worden. Een correct ingesteld datatype (bv. naar 'getal' in plaats van 'tekst') is cruciaal voor de correcte werking van bewerkingen zoals sommaties en voorkomt fouten.
> **Tip:** Een UML-klassendiagram is een krachtig hulpmiddel om de unieke kenmerken van een bedrijf te modelleren. Het vormt een goede basis voor de ontwikkeling van een aanpasbaar informatiesysteem.
> **Tip:** Het maken van een domeinmodel zorgt voor een dieper begrip van het domein, wat essentieel is voor het bouwen van softwaresystemen die effectief kunnen omgaan met veranderende vereisten. Als het kernconcept van het bedrijf niet in het ontwerp is belichaamd, zal het systeem falen.
---
# Geavanceerde UML-concepten en modelleringstechnieken
Dit gedeelte behandelt geavanceerde UML-concepten en modelleringstechnieken die essentieel zijn voor het gedetailleerd in kaart brengen van complexe bedrijfsdomeinen.
### 4.1 Generalisatie, specialisatie en overerving
Generalisatie en specialisatie, ook wel bekend als overerving (inheritance), zijn fundamentele concepten in objectgeoriënteerd modelleren. Ze maken het mogelijk om hiërarchische relaties tussen klassen te definiëren, wat leidt tot herbruikbaarheid en structuur.
#### 4.1.1 Generalisatie en specialisatie
* **Generalisatie (Superklasse/Supertype):** Dit is het algemene concept of de categorie. Een superklasse definieert gedeelde eigenschappen die van toepassing zijn op meerdere specifieke subtypen.
* **Specialisatie (Subklasse/Subtype):** Dit zijn de meer specifieke soorten of categorieën die een algemeen concept (superklasse) specialiseren. Subklassen erven automatisch de eigenschappen van hun superklasse en kunnen bovendien eigen, specifieke eigenschappen toevoegen.
**Voorbeeld:**
Een algemene klasse "Bankrekening" kan eigenschappen hebben zoals `IBAN` en `Saldo`. Specifieke subklassen hiervan kunnen "Betaalrekening" en "Spaarrekening" zijn. Een "Betaalrekening" erft `IBAN` en `Saldo` en voegt mogelijk een `creditcardnummer` toe. Een "Spaarrekening" erft eveneens `IBAN` en `Saldo` en voegt mogelijk een `spaardoel` toe.
#### 4.1.2 Notatie in UML
* Een generalisatie wordt weergegeven door een lijn van de subklasse naar de superklasse.
* Aan de zijde van de superklasse staat een witte, gevulde driehoek.
* Meerdere subklassen kunnen naar dezelfde driehoek wijzen, wat aangeeft dat ze tot dezelfde generalisatieset behoren.
#### 4.1.3 Generalisatiesets
Soms kan een supertype op meerdere manieren worden gespecialiseerd. Generalisatiesets helpen om deze verschillende indelingen te organiseren.
* **Notaties voor generalisatiesets:**
1. **Naam bij de generalisatie-lijnen:** Elke generalisatielijn krijgt een naam die aangeeft tot welke generalisatieset de specialisatie behoort. Generalisaties met dezelfde naam horen bij dezelfde set.
2. **"Shared target"-stijl:** Meerdere lijnen wijzen naar dezelfde driehoek, en deze lijnen krijgen één gezamenlijke naam.
3. **Gestreepte lijn:** Een gestreepte lijn wordt over meerdere generalisatielijnen getrokken. De generalisatieset krijgt één naam.
#### 4.1.4 Constraints op generalisatie/specialisatie
Er zijn twee belangrijke soorten constraints die de relatie tussen super- en subklassen definiëren:
* **Complete vs. Incomplete specialisatie:**
* **Complete specialisatie:** Elk object dat tot de superklasse behoort, behoort *ook* tot ten minste één van de subklassen. Er zijn geen objecten in de superklasse die niet in een subklasse vallen.
* **Incomplete specialisatie:** Het is mogelijk dat een object tot de superklasse behoort, maar niet tot een van de gespecialiseerde subklassen.
* **Disjuncte vs. Overlappende subklassen:**
* **Disjuncte subklassen:** Een object kan slechts tot *één* subklasse tegelijk behoren.
* **Overlappende subklassen:** Een object kan tot *meerdere* subklassen tegelijk behoren. Indien niet gespecificeerd, worden subklassen als overlappend beschouwd.
**Voorbeeld van constraints:**
Een "Account" (superklasse) kan "Betaalrekening" en "Spaarrekening" (subklassen) hebben. Als elke rekening *verplicht* een betaal- of spaarrekening moet zijn, is de specialisatie **compleet**. Als een rekening *nooit* zowel een betaal- als spaarrekening tegelijk kan zijn, zijn de subklassen **disjunct**.
#### 4.1.5 Overerving en associaties
Subklassen erven niet alleen attributen en operaties van hun superklassen, maar ook de associaties.
* **Lezen van supertype naar subtype:** Een associatie die gedefinieerd is op de superklasse, geldt voor alle subklassen.
* **Lezen van subtype naar supertype:** Subtypen erven de relaties en cardinaliteiten van het supertype.
**Tip:** Als specifieke associaties tussen subtypes gewenst zijn (bijvoorbeeld dat "Vliegvluchten" alleen met "Vliegtuigen" kunnen worden geassocieerd en "Vrachtvluchten" met "Vrachtvliegtuigen"), moeten deze associaties expliciet op het niveau van de subklassen worden gemodelleerd, en de associatie op het niveau van de superklasse wordt dan verwijderd.
### 4.2 Aggregatie
Aggregatie is een speciale vorm van associatie die een deel-geheel-relatie uitdrukt.
#### 4.2.1 Basisconcept
* Het drukt een relatie uit waarbij één object (het geheel) is samengesteld uit andere objecten (de delen).
* Voorbeelden: een cursus bestaat uit modules, een order bestaat uit orderlijnen, een pakket bestaat uit items.
#### 4.2.2 Notatie in UML
* Een aggregatie wordt aangeduid met een diamantvorm aan de zijde van het "geheel".
* **Witte diamant (Shared Aggregation):** De delen kunnen deel uitmaken van meerdere gehelen tegelijk. De relatie is niet exclusief.
* **Voorbeeld:** Modules kunnen in verschillende cursussen gebruikt worden.
* **Zwarte diamant (Composite Aggregation/Compositie):** Een deel behoort tot maximaal één geheel. Dit impliceert exclusief eigendom.
* **Voorbeeld:** Een orderlijn hoort exclusief bij één specifieke order.
#### 4.2.3 Kenmerken van Compositie
* **Exclusief eigendom:** Een onderdeel kan maar bij één geheel horen.
* **Cascading delete:** Wanneer het "geheel" wordt verwijderd, worden de bijbehorende onderdelen automatisch ook verwijderd.
> **Tip:** De diamant-symbolen voor aggregatie kunnen vaak onduidelijkheid veroorzaken. Het wordt vaak aangeraden om gewone binaire associaties met duidelijke rolnamen te gebruiken, omdat deze de relatie duidelijker kunnen maken zonder de potentiële ambiguïteit van de diamant.
### 4.3 Ternaire associaties
Soms volstaan binaire associaties (associaties tussen twee klassen) niet om complexe relaties tussen drie of meer entiteiten te beschrijven.
#### 4.3.1 Noodzaak voor ternaire associaties
* Wanneer een relatie tussen drie entiteiten cruciaal is en deze relatie niet adequaat kan worden uitgedrukt met drie aparte binaire associaties.
* **Voorbeeld:** Het vastleggen welke leverancier welk product voor welk project heeft geleverd. Drie binaire many-to-many associaties tussen Leverancier, Product en Project zijn onvoldoende om te weten welke specifieke combinatie van leverancier, product en project daadwerkelijk heeft plaatsgevonden.
#### 4.3.2 Notatie en interpretatie
* Een ternaire associatie wordt weergegeven als een enkele lijn die drie klassen verbindt.
* De multipliciteiten aan de uiteinden van de associatie worden op een subtielere manier geïnterpreteerd. Om de multipliciteit aan één kant te bepalen, worden de andere twee klassen gefixeerd. Vervolgens wordt gekeken hoeveel instanties van de derde klasse bij deze combinatie passen.
**Voorbeeld:**
Voor de associatie tussen `Leverancier`, `Product` en `Project`: Om de multipliciteit voor `Leverancier` te bepalen, fixeren we een combinatie van `Project` en `Product`. Vervolgens tellen we hoeveel `Leveranciers` deze specifieke combinatie hebben geleverd. Dit kan nul, één of meerdere leveranciers zijn.
### 4.4 Association Classes
Een association class wordt gebruikt wanneer een attribuut of een operatie niet direct bij één van de twee geassocieerde klassen hoort, maar bij de relatie zelf.
#### 4.4.1 Toepassingsgebied
* Wanneer attributen expliciet bij de *relatie* tussen twee objecten horen, in plaats van bij de objecten zelf.
* Wanneer de relatie existentieel afhankelijk is van beide objecten.
**Voorbeeld:**
De relatie tussen `Leverancier` en `Product`. De prijs van een product kan verschillen per leverancier. In dit geval hoort "prijs" niet bij `Leverancier` of `Product` alleen, maar bij de combinatie van een specifieke leverancier en een specifiek product. Dit kan worden gemodelleerd met een `ProductOffer` als association class met attributen zoals `prijs`, `leveringsvoorwaarden` en `gemiddelde levertijd`.
#### 4.4.2 Verschil met gewone klassen
* **Association Class:** Een object van een association class bestaat alleen zolang beide verbonden objecten bestaan. Het wijzigen van de link impliceert vaak het verwijderen en opnieuw creëren van de association class instantie.
* **Gewone klasse:** Een object van een gewone klasse is niet strikt afhankelijk van de relatie. Relaties kunnen vaak onafhankelijk worden aangepast.
### 4.5 Afgeleide/Impliciete associaties
Impliciete associaties ontstaan door navigatie over meerdere opeenvolgende associaties. Ze worden niet expliciet in het diagram getekend, maar zijn wel afleidbaar.
#### 4.5.1 Ontstaan van impliciete associaties
* Door het volgen van een pad van associaties tussen klassen ontstaat er een indirecte relatie.
* **Voorbeeld:** Als een `Student` is geassocieerd met een `Programma`, en `Programma` is geassocieerd met een `Faculteit`, dan is er een impliciete associatie tussen `Student` en `Faculteit`.
#### 4.5.2 Cardinaliteit
De cardinaliteit (multipliciteit) van een impliciete associatie wordt afgeleid uit de cardinaliteiten van de oorspronkelijke relaties in het pad.
**Voorbeeld:**
Als elke `Student` minstens één `Programma` volgt (`1..*`) en elk `Programma` behoort tot minstens één `Faculteit` (`1..1`), dan behoort elke `Student` tot minstens één `Faculteit` (`1..1` minimum). Als een `Student` meerdere `Programma's` kan volgen, mogelijk aan verschillende `Faculteiten` (`*` maximum), dan kan een `Student` tot meerdere `Faculteiten` behoren (`*` maximum).
> **Tip:** Wees je bewust van impliciete associaties bij het lezen van UML-diagrammen, omdat ze belangrijke informatie bevatten over de relaties in het domein die niet altijd expliciet worden weergegeven.
### 4.6 Ternaire associaties
Soms volstaan binaire associaties (associaties tussen twee klassen) niet om complexe relaties tussen drie of meer entiteiten te beschrijven.
#### 4.6.1 Noodzaak voor ternaire associaties
* Wanneer een relatie tussen drie entiteiten cruciaal is en deze relatie niet adequaat kan worden uitgedrukt met drie aparte binaire associaties.
* **Voorbeeld:** Het vastleggen welke leverancier welk product voor welk project heeft geleverd. Drie binaire many-to-many associaties tussen Leverancier, Product en Project zijn onvoldoende om te weten welke specifieke combinatie van leverancier, product en project daadwerkelijk heeft plaatsgevonden.
#### 4.6.2 Notatie en interpretatie
* Een ternaire associatie wordt weergegeven als een enkele lijn die drie klassen verbindt.
* De multipliciteiten aan de uiteinden van de associatie worden op een subtielere manier geïnterpreteerd. Om de multipliciteit aan één kant te bepalen, worden de andere twee klassen gefixeerd. Vervolgens wordt gekeken hoeveel instanties van de derde klasse bij deze combinatie passen.
**Voorbeeld:**
Voor de associatie tussen `Leverancier`, `Product` en `Project`: Om de multipliciteit voor `Leverancier` te bepalen, fixeren we een combinatie van `Project` en `Product`. Vervolgens tellen we hoeveel `Leveranciers` deze specifieke combinatie hebben geleverd. Dit kan nul, één of meerdere leveranciers zijn.
### 4.7 Aggregatie
Aggregatie is een speciale vorm van associatie die een deel-geheel-relatie uitdrukt.
#### 4.7.1 Basisconcept
* Het drukt een relatie uit waarbij één object (het geheel) is samengesteld uit andere objecten (de delen).
* Voorbeelden: een cursus bestaat uit modules, een order bestaat uit orderlijnen, een pakket bestaat uit items.
#### 4.7.2 Notatie in UML
* Een aggregatie wordt aangeduid met een diamantvorm aan de zijde van het "geheel".
* **Witte diamant (Shared Aggregation):** De delen kunnen deel uitmaken van meerdere gehelen tegelijk. De relatie is niet exclusief.
* **Voorbeeld:** Modules kunnen in verschillende cursussen gebruikt worden.
* **Zwarte diamant (Composite Aggregation/Compositie):** Een deel behoort tot maximaal één geheel. Dit impliceert exclusief eigendom.
* **Voorbeeld:** Een orderlijn hoort exclusief bij één specifieke order.
#### 4.7.3 Kenmerken van Compositie
* **Exclusief eigendom:** Een onderdeel kan maar bij één geheel horen.
* **Cascading delete:** Wanneer het "geheel" wordt verwijderd, worden de bijbehorende onderdelen automatisch ook verwijderd.
> **Tip:** De diamant-symbolen voor aggregatie kunnen vaak onduidelijkheid veroorzaken. Het wordt vaak aangeraden om gewone binaire associaties met duidelijke rolnamen te gebruiken, omdat deze de relatie duidelijker kunnen maken zonder de potentiële ambiguïteit van de diamant.
### 4.8 Unary associaties
Een associatie kan ook een klasse met zichzelf verbinden.
#### 4.8.1 Basisconcept
* Een unary associatie beschrijft een relatie waarbij instanties van dezelfde klasse met elkaar verbonden zijn.
* **Voorbeelden:** Een persoon die een andere persoon superviseert, een hiërarchie van afdelingen, een stuklijst (bill of materials).
#### 4.8.2 Notatie en interpretatie
* Wordt getekend als een lijn die begint en eindigt bij dezelfde klasse.
* Rollen worden gebruikt om de richting en aard van de relatie aan te geven (bijv. "superviseert" en "supervised by").
* Multipliciteiten worden ook hier toegepast om het aantal verbindingen te specificeren.
> **Tip:** Zonder extra constraints (zoals OCL - Object Constraint Language) kan een unary associatie tot recursieve relaties leiden die mogelijk niet gewenst zijn (bijvoorbeeld een component die zichzelf gebruikt).
### 4.9 Ternaire associaties
Soms volstaan binaire associaties (associaties tussen twee klassen) niet om complexe relaties tussen drie of meer entiteiten te beschrijven.
#### 4.9.1 Noodzaak voor ternaire associaties
* Wanneer een relatie tussen drie entiteiten cruciaal is en deze relatie niet adequaat kan worden uitgedrukt met drie aparte binaire associaties.
* **Voorbeeld:** Het vastleggen welke leverancier welk product voor welk project heeft geleverd. Drie binaire many-to-many associaties tussen Leverancier, Product en Project zijn onvoldoende om te weten welke specifieke combinatie van leverancier, product en project daadwerkelijk heeft plaatsgevonden.
#### 4.9.2 Notatie en interpretatie
* Een ternaire associatie wordt weergegeven als een enkele lijn die drie klassen verbindt.
* De multipliciteiten aan de uiteinden van de associatie worden op een subtielere manier geïnterpreteerd. Om de multipliciteit aan één kant te bepalen, worden de andere twee klassen gefixeerd. Vervolgens wordt gekeken hoeveel instanties van de derde klasse bij deze combinatie passen.
**Voorbeeld:**
Voor de associatie tussen `Leverancier`, `Product` en `Project`: Om de multipliciteit voor `Leverancier` te bepalen, fixeren we een combinatie van `Project` en `Product`. Vervolgens tellen we hoeveel `Leveranciers` deze specifieke combinatie hebben geleverd. Dit kan nul, één of meerdere leveranciers zijn.
### 4.10 Association Classes
Een association class wordt gebruikt wanneer een attribuut of een operatie niet direct bij één van de twee geassocieerde klassen hoort, maar bij de relatie zelf.
#### 4.10.1 Toepassingsgebied
* Wanneer attributen expliciet bij de *relatie* tussen twee objecten horen, in plaats van bij de objecten zelf.
* Wanneer de relatie existentieel afhankelijk is van beide objecten.
**Voorbeeld:**
De relatie tussen `Leverancier` en `Product`. De prijs van een product kan verschillen per leverancier. In dit geval hoort "prijs" niet bij `Leverancier` of `Product` alleen, maar bij de combinatie van een specifieke leverancier en een specifiek product. Dit kan worden gemodelleerd met een `ProductOffer` als association class met attributen zoals `prijs`, `leveringsvoorwaarden` en `gemiddelde levertijd`.
#### 4.10.2 Verschil met gewone klassen
* **Association Class:** Een object van een association class bestaat alleen zolang beide verbonden objecten bestaan. Het wijzigen van de link impliceert vaak het verwijderen en opnieuw creëren van de association class instantie.
* **Gewone klasse:** Een object van een gewone klasse is niet strikt afhankelijk van de relatie. Relaties kunnen vaak onafhankelijk worden aangepast.
### 4.11 Afgeleide/Impliciete associaties
Impliciete associaties ontstaan door navigatie over meerdere opeenvolgende associaties. Ze worden niet expliciet in het diagram getekend, maar zijn wel afleidbaar.
#### 4.11.1 Ontstaan van impliciete associaties
* Door het volgen van een pad van associaties tussen klassen ontstaat er een indirecte relatie.
* **Voorbeeld:** Als een `Student` is geassocieerd met een `Programma`, en `Programma` is geassocieerd met een `Faculteit`, dan is er een impliciete associatie tussen `Student` en `Faculteit`.
#### 4.11.2 Cardinaliteit
De cardinaliteit (multipliciteit) van een impliciete associatie wordt afgeleid uit de cardinaliteiten van de oorspronkelijke relaties in het pad.
**Voorbeeld:**
Als elke `Student` minstens één `Programma` volgt (`1..*`) en elk `Programma` behoort tot minstens één `Faculteit` (`1..1`), dan behoort elke `Student` tot minstens één `Faculteit` (`1..1` minimum). Als een `Student` meerdere `Programma's` kan volgen, mogelijk aan verschillende `Faculteiten` (`*` maximum), dan kan een `Student` tot meerdere `Faculteiten` behoren (`*` maximum).
> **Tip:** Wees je bewust van impliciete associaties bij het lezen van UML-diagrammen, omdat ze belangrijke informatie bevatten over de relaties in het domein die niet altijd expliciet worden weergegeven.
---
## Veelgemaakte fouten om te vermijden
- Bestudeer alle onderwerpen grondig voor examens
- Let op formules en belangrijke definities
- Oefen met de voorbeelden in elke sectie
- Memoriseer niet zonder de onderliggende concepten te begrijpen
Glossary
| Term | Definition |
|------|------------|
| Informatiemanagement | Het systematisch plannen, organiseren, leiden en beheersen van alle activiteiten die verband houden met het verwerken en verspreiden van informatie binnen een organisatie, om strategische doelen te ondersteunen. |
| Enterprise Architectuur | Een blauwdruk die de structuur en de operaties van een organisatie beschrijft, en die de relatie tussen businessstrategie en IT-infrastructuur faciliteert om bedrijfsdoelstellingen te bereiken. |
| Conceptueel datamodel | Een abstracte weergave van data die de belangrijkste entiteiten, hun attributen en de relaties daartussen definieert, zonder specifieke technische implementatiedetails. |
| Logisch datamodel | Een gedetailleerdere representatie van data die de structuur van de data beschrijft, inclusief tabellen, kolommen en relaties, maar nog steeds onafhankelijk is van specifieke databasesystemen. |
| Fysiek datamodel | Een concrete implementatie van het logische datamodel, waarbij specifieke datatypes, indexen en andere databasedetails worden gedefinieerd die geschikt zijn voor een bepaald databasesysteem. |
| UML Class Diagram | Een diagram uit de Unified Modelling Language dat de structuur van een systeem visualiseert door klassen, hun attributen, operaties en de relaties tussen klassen weer te geven. |
| Klasse | Een blauwdruk voor objecten, die een concept of entiteit in een systeem vertegenwoordigt met gemeenschappelijke attributen en gedrag. |
| Attribuut | Een eigenschap of karakteristiek van een klasse die specifieke informatie over een object opslaat, zoals een naam, een ID of een waarde. |
| Datatype | Een classificatie die aangeeft welk soort waarde een attribuut kan bevatten en welke bewerkingen erop mogelijk zijn, zoals tekst, getal of datum. |
| Associatie | Een relatie tussen twee klassen die aangeeft hoe objecten van die klassen met elkaar verbonden zijn, vaak met specificaties over multipliciteit. |
| Multipliciteit | Een aanduiding in een UML-diagram die het aantal instanties van een klasse specificeert dat gerelateerd kan zijn aan één instantie van een andere klasse, uitgedrukt als reeksen zoals 0..1, 1..*, of *. |
| Generalisatie | Een "is-een"-relatie waarbij een meer algemene klasse (supertype) de eigenschappen van één of meerdere meer specifieke klassen (subtypes) erft. |
| Specialisatie | Het proces van het creëren van meer specifieke klassen (subtypes) die eigenschappen erven van een algemene klasse (supertype), waarbij unieke kenmerken kunnen worden toegevoegd. |
| Aggregatie | Een speciaal type associatie dat een deel-geheel-relatie uitdrukt, waarbij de delen onafhankelijk van het geheel kunnen bestaan (shared aggregation) of er exclusief aan gebonden zijn (composite aggregation). |
| Ternaire associatie | Een relatie die drie klassen tegelijkertijd verbindt, gebruikt wanneer een simpele binaire associatie niet voldoende is om de complexiteit van de interactie vast te leggen. |
| Association Class | Een klasse die geassocieerd wordt met een relatie tussen twee andere klassen, wanneer de attributen en operaties specifiek bij die relatie zelf horen en niet bij de individuele klassen. |
| Ontologie | Een formele specificatie van een gedeelde conceptionalisatie binnen een bepaald domein, die de begrippen, hun eigenschappen en de relaties daartussen definieert. |
| TOGAF | The Open Group Architecture Framework; een uitgebreid framework voor enterprise architectuur dat een methode en tools biedt voor het ontwerpen, plannen, implementeren en beheren van enterprise informatiesarchitectuur. |
| Zachman framework | Een ontologie voor Enterprise Architectuur, die een matrix biedt van zes fundamentele vragen (wat, hoe, waar, wie, wanneer, waarom) over een onderneming, onderverdeeld in zes perspectieven van architecten tot gebruikers. |
Cover
DDCArv_AppC.pdf
Summary
# C programming basics
This section introduces the C programming language, covering its history, core characteristics, and the fundamental workflow for developing C programs [3](#page=3).
### 1.1 Introduction to C programming
The C programming language was developed at Bell Labs around 1973. It is known for its ability to control a computer for nearly any task, including direct interaction with hardware. C is suitable for generating high-performance code, is relatively easy to use, and is available on a wide range of devices from supercomputers to microcontrollers. It is also closely related to other significant languages such as C++, C#, Objective C, Java, and Arduino [3](#page=3).
### 1.2 Characteristics of C
C is often described as "libertarian" because it allows programmers to perform almost any operation and interact directly with the hardware. However, this freedom means C does not protect programmers from errors and assumes the programmer understands variable and array sizes. Without specific safeguards, C programs can write to any location in memory [4](#page=4).
> **Tip:** Understanding C's "libertarian" nature is crucial for appreciating its power and potential pitfalls. You are responsible for managing memory and ensuring data integrity.
### 1.3 The C programming workflow
The process of creating and running a C program involves several key steps [6](#page=6):
1. **Write code**: This is where the programmer creates the source code for the program [6](#page=6).
2. **Compile code**: The source code is translated into machine code by a compiler [6](#page=6).
3. **Execute code**: The compiled machine code is run by the computer [6](#page=6).
4. **Debug code**: Errors and issues are identified and fixed [6](#page=6).
### 1.4 Comments in C
Comments are used to explain code and can be written in two ways [8](#page=8):
* **Single-line comments**: These begin with `//` and continue to the end of the line.
```c
x += 2; //This is a single-line comment.
```
* **Multi-line comments**: These start with `/*` and end with `*/`, allowing for comments that span multiple lines.
```c
/* You can hide or disable a section of code such as this block
with a multi-line comment
x = bob ? x : y;
y -= 5;
*/
```
It is good practice to start C code files with the filename, programmer's name, email, and date to establish copyright ownership and facilitate tracking [8](#page=8).
### 1.5 Constants, defines, and macros
Constants in C are typically defined using the `#define` directive, which is processed by the preprocessor before compilation. The preprocessor replaces all occurrences of the defined identifier with its corresponding value. By convention, these definitions are placed at the top of the file, and the identifiers are written in all capital letters [9](#page=9).
**Example:**
```c
#define MAXGUESSES 5
#define PI 3.14159
```
### 1.6 Variables in C
Variables in C can be declared as either global or local [10](#page=10).
* **Global variables**: These are declared outside of any function and are accessible from all functions within the program. However, their use can lead to code that is difficult to debug and should generally be avoided, especially in larger projects [10](#page=10).
* **Local variables**: These are declared inside a function and are only accessible within that specific function. Local variables are the preferred choice for most situations [10](#page=10).
### 1.7 Primitive data types
C supports various primitive data types, which define the type of data a variable can hold [11](#page=11).
### 1.8 Integer sizes
The size of integer data types in C can vary depending on the machine architecture. For example, `int` can be 16 or 32 bits, and `long` can be 32 or 64 bits. If precise integer sizes are critical, it is recommended to use sized integer types found in the `` header file. These include [12](#page=12):
* Signed types: `int16_t`, `int32_t`, `int64_t`
* Unsigned types: `uint16_t`, `uint32_t`, `uint64_t`
### 1.9 ASCII table
The ASCII (American Standard Code for Information Interchange) table is a character encoding standard that maps characters to numerical values. It is often referenced when dealing with character data in C [13](#page=13).
---
# Functions and includes in C
This section details the fundamental concepts of functions in C, including their structure, parameter passing, return values, the necessity of prototypes, and the use of the `#include` directive for library integration [14](#page=14) [15](#page=15).
### 2.1 Functions
Functions in C are reusable blocks of code that perform specific tasks. They can accept zero or more inputs (parameters) and can return at most one output value to the caller [15](#page=15).
#### 2.1.1 Function Declaration and Definition
A function definition includes the return type, function name, parameter list, and the function body enclosed in curly braces `{}`. The parameter types are declared in the function declaration [15](#page=15).
* **Return Type:** Specifies the data type of the value the function will return [15](#page=15).
* **Parameters:** Inputs to the function, with their types declared. Variables are passed *by value*, meaning the function receives a copy of the argument, and any modifications within the function do not affect the original variable in the caller [15](#page=15).
* **Function Body:** Contains the statements that execute when the function is called. It can have zero or more statements [15](#page=15).
* **Return Statement:** The `return` statement specifies the value to be returned to the caller [15](#page=15).
> **Example:** A function that calculates the sum of three integers.
>
> ```c
> // Return the sum of the three input variables
> int sum3(int a, int b, int c) {
> int result = a + b + c;
> return result;
> }
> ```
> [16](#page=16).
#### 2.1.2 Function Prototypes
A function prototype is a declaration of a function that specifies its name, return type, and parameter types, without including the function body. Prototypes are essential to inform the compiler about a function's signature before it is used, especially if the function is defined after its first call [15](#page=15) [17](#page=17).
* **Necessity:** A function must be either declared before its first use or have a prototype declared before its first use [15](#page=15).
* **Syntax:** `return_type function_name(type1, type2, ...);`
The parameter names can be omitted in the prototype.
> **Example:** Demonstrating the need for a function prototype when `sum3` is called before its definition.
>
> ```c
> // sum3example.c
> // David_Harris@hmc.edu 22 October 2019
> ////////////////////////////////
> // Prototypes
> ////////////////////////////////
> int sum3(int, int, int); // needed because sum3 is called before declared
> ////////////////////////////////
> // main
> ////////////////////////////////
> void main(void) {
> int answer;
> answer = sum3(6, 7, 8);
> }
>
> ////////////////////////////////
> // other functions
> // prototype not needed if these were moved before main
> ////////////////////////////////
> int sum3(int a, int b, int c) {
> int result = a + b + c;
> return result;
> }
> ```
> [17](#page=17).
> **Tip:** If all function definitions appear *before* they are called in your source file, you might not need explicit prototypes for those functions. However, prototypes are often crucial for organizing code into multiple files or when dealing with mutually recursive functions [17](#page=17).
#### 2.1.3 Prototypes for Mutually Recursive Functions
When functions call each other (e.g., in mutual recursion), prototypes are unavoidable because each function needs to be declared before it can be called by another function that might appear earlier in the source file [18](#page=18).
> **Example:** `f1` calls `f2`, and `f2` calls `f1`. Prototypes for both `f1` and `f2` are required.
>
> ```c
> // Prototypes needed for f1 and/or f2 because they
> // can’t both be declared before each other
> int f1(int);
> int f2(int);
>
> int f1(int n) {
> return f2(n-1) + 1;
> }
>
> int f2(int n) {
> return f1(n-1)*2;
> }
>
> void main(void) {
> int answer;
> answer = f1 [5](#page=5);
> }
> ```
> [18](#page=18).
### 2.2 Includes
The `#include` directive is a preprocessor command used to incorporate the content of other files into the current source file. This is primarily used to access function prototypes for standard library functions or for custom utility functions defined in separate header files [19](#page=19).
* **Standard Library Includes:** For functions provided by the C standard library (e.g., input/output, mathematical functions), header files are included using angle brackets `< >`. This tells the preprocessor to look for these files in the standard system directories.
* `#include ` for standard input/output functions [19](#page=19).
* `#include ` for mathematical functions [19](#page=19).
* **User-Defined Includes:** For your own function prototypes or custom code stored in header files, you use double quotes `" "` instead of angle brackets. This directs the preprocessor to search for the file first in the current directory, and then potentially in other specified include paths.
* `#include "other/myFuncs.h"` [19](#page=19).
---
# Operators and control flow
This section delves into C programming's operators and control flow statements, crucial for directing program execution and data manipulation.
## 3. Operators and control flow
### 3.1 Operators
C provides a rich set of operators for performing various operations on data. These include arithmetic, logical, bitwise, and relational operators, each with specific precedence rules that dictate the order of evaluation in complex expressions [20](#page=20) [22](#page=22).
#### 3.1.1 Boolean logic in C
In C, a value is considered FALSE if it is exactly 0. Any other value, including positive numbers, negative numbers, or non-zero integers like 1, 42, or -1, is treated as TRUE. Logical operators consistently interpret FALSE as 0 and TRUE as 1 [21](#page=21).
#### 3.1.2 Types of operators
* **Arithmetic Operators**: These perform mathematical calculations. Examples include `+` (addition), `-` (subtraction), `*` (multiplication), `/` (division), and `%` (modulo) [23](#page=23).
* **Logical Operators**: Used for Boolean operations, they evaluate conditions. The common ones are `&&` (logical AND), `||` (logical OR), and `!` (logical NOT) [23](#page=23).
* **Bitwise Operators**: These operate on individual bits of their operands. They include `&` (bitwise AND), `|` (bitwise OR), `^` (bitwise XOR), `~` (bitwise NOT), `<<` (left shift), and `>>` (right shift) [23](#page=23).
* **Relational Operators**: Used for comparisons, these operators determine the relationship between two operands. They are `<`, `>`, `<=`, `>=`, `==` (equal to), and `!=` (not equal to) [23](#page=23).
* **Assignment Operators**: Used to assign values to variables. The basic assignment operator is `=`. Compound assignment operators combine an arithmetic or bitwise operation with assignment, such as `+=`, `-=`, `*=`, `/=`, `%=`, `&=`, `|=`, `^=`, `<<=`, and `>>=` [23](#page=23).
* **Increment and Decrement Operators**: `++` (increment) and `--` (decrement) increase or decrease the value of a variable by one, respectively. These can be used in prefix or postfix form, affecting the order of operations [23](#page=23).
* **Conditional (Ternary) Operator**: The `?:` operator provides a concise way to write simple if-else statements. The syntax is `condition? value_if_true: value_if_false` [23](#page=23).
* **`sizeof` Operator**: This operator returns the size in bytes of a data type or a variable [23](#page=23).
#### 3.1.3 Operator precedence
Operator precedence determines the order in which operations are performed when multiple operators are present in an expression. Operators with higher precedence are evaluated before operators with lower precedence. Parentheses `()` can be used to override the default precedence [22](#page=22).
> **Tip:** Understanding operator precedence is crucial to avoid unexpected results in complex expressions. Always refer to precedence tables or use parentheses for clarity.
#### 3.1.4 Operator examples
Consider the following C code snippet for illustration [26](#page=26):
```c
int a = 42;
int b = 0x15; // hexadecimal; = 21 in decimal
char c = 0b00001010; // binary; = 10 in decimal
char d = !c; // 0, because c was nonzero
char e = ~c; // 0b11110101 bitwise NOT
char f = e | c; // 0b11111111 bitwise OR
char g = c << 2; // 0b00101000 shift left by 2
int h = (a > b); // 1 because a is greater than b
int i = (a > b) && (c != e); // 1 because both are TRUE
int j = (a > b) ? a : b; // 42 because a > b
int k = sizeof(a); // 4 on most computers
g &= c; // 0b00001000 bitwise AND
```
In this example:
* `d` becomes 0 because `!c` (logical NOT of a non-zero `c`) is FALSE [26](#page=26).
* `e` is the bitwise NOT of `c`, resulting in all bits being flipped [26](#page=26).
* `f` is the bitwise OR of `e` and `c` [26](#page=26).
* `g` is `c` shifted left by 2 positions [26](#page=26).
* `h` is 1 because the expression `a > b` (42 > 21) is TRUE [26](#page=26).
* `i` evaluates to 1 because both conditions `(a > b)` and `(c!= e)` are TRUE [26](#page=26).
* `j` assigns `a` to `j` because `a > b` is TRUE [26](#page=26).
* `k` stores the size of an integer in bytes on the specific system, typically 4 [26](#page=26).
* `g &= c` performs a bitwise AND operation between the current `g` and `c`, storing the result back into `g` [26](#page=26).
### 3.2 Control flow statements
Control flow statements alter the sequential execution of a program, allowing for decision-making and repetition [27](#page=27).
#### 3.2.1 `if` statement
The `if` statement executes a block of code only if a specified condition (expression) evaluates to TRUE [28](#page=28).
**Syntax:**
```c
if (expression)
statement;
```
**Example:**
```c
if (n <= 1) return 1;
```
This code returns 1 if the value of `n` is less than or equal to 1 [29](#page=29).
#### 3.2.2 `if/else` statement
The `if/else` statement provides two alternative execution paths. If the condition is TRUE, the code in the `if` block is executed; otherwise, the code in the `else` block is executed [28](#page=28).
**Syntax:**
```c
if (expression)
statement1;
else
statement2;
```
**Example:**
```c
if (n <= 1) return 1;
else return fact(n-1);
```
This example returns 1 if `n` is less than or equal to 1, otherwise it calls a function `fact` with `n-1` [31](#page=31).
#### 3.2.3 Compound statements
When a control flow statement needs to execute multiple statements, these statements must be enclosed within curly braces `{}`. This forms a compound statement or a block of code [30](#page=30).
**Example:**
```c
if (answer == 42) {
ultimateQuestion = 1;
hitchhikersGuide = 1;
}
```
In this case, if `answer` is 42, both `ultimateQuestion` and `hitchhikersGuide` are set to 1 [30](#page=30).
#### 3.2.4 `switch/case` statement
The `switch/case` statement is used for multi-way branching based on the value of a single variable or expression. It compares the value of the `switch` expression against multiple `case` labels. If a match is found, the code following that `case` is executed. The `break` statement is typically used to exit the `switch` block after a match. A `default` case can be included to handle values that do not match any of the specified `case` labels [28](#page=28).
**Syntax:**
```c
switch (variable) {
case (expression1): statement1; break;
case (expression2): statement2; break;
case (expression3): statement3; break;
default: statement4;
}
```
> **Tip:** Always remember to use `break` statements within `case` blocks to prevent "fall-through" to the next case, which can lead to unintended execution of code. The `default` case is optional but good practice for handling unexpected values.
**Example:**
```c
switch (state) {
case: if (ta) state = 0; else state = 1; break ;
case: state = 2; break [1](#page=1);
case: if (tb) state = 2; else state = 3; break [2](#page=2);
case: state = 0; break [3](#page=3);
default: state = 0;
}
```
This example demonstrates a state machine where the `state` variable is updated based on its current value and potentially other conditions like `ta` or `tb` [32](#page=32).
---
# Loops, arrays, strings, and structures
This section covers fundamental C programming constructs for iteration, data aggregation, and organization, including various loop types, arrays, strings, and structures [33](#page=33) [38](#page=38) [44](#page=44).
### 4.1 Loops
Loops are used to repeatedly execute a block of code until a specified condition is met [34](#page=34).
#### 4.1.1 While loop
The `while` loop checks a condition *before* each iteration. If the condition is true, the loop body executes; otherwise, the loop terminates [34](#page=34).
**Syntax:**
```c
while (condition)
statement;
```
**Example:** Calculating factorial.
> **Example:**
> ```c
> int fact(int n) {
> int result = 1;
> while (n > 1) {
> result = result * n; // or result *= n;
> n = n – 1; // or n--
> }
> return result;
> }
> ```
> [35](#page=35).
A more compact, though less readable, version of the `while` loop is also possible [35](#page=35).
#### 4.1.2 Do/while loop
The `do/while` loop executes the loop body *at least once* before checking the condition. If the condition is true after the execution, the loop continues; otherwise, it terminates [34](#page=34) [36](#page=36).
**Syntax:**
```c
do {
statement;
} while (condition);
```
**Example:**
> **Example:**
> ```c
> int fact(int n) {
> int result = 1;
> do {
> result *= n;
> } while (n-- > 1);
> return result;
> }
> ```
> [36](#page=36).
>
> The `do/while` loop is generally not preferred for this specific factorial example due to its slightly longer and less intuitive structure compared to other loop types [36](#page=36).
#### 4.1.3 For loop
The `for` loop is ideal for situations where the number of iterations is known or can be determined beforehand. It combines initialization, condition checking, and loop operation into a single line [34](#page=34) [37](#page=37).
**Syntax:**
```c
for (initialization; condition; loop operation)
statement;
```
**Execution flow:**
1. **Initialization:** Executed once before the loop begins [37](#page=37).
2. **Condition Check:** Evaluated before each iteration. If true, the loop body executes [37](#page=37).
3. **Loop Body:** The statements within the loop are executed [37](#page=37).
4. **Loop Operation:** Executed after each iteration of the loop body [37](#page=37).
5. The process repeats from step 2.
**Example:**
> **Example:**
> ```c
> int fact(int n) {
> int result = 1;
> int i;
> for (i=1; i <= n; i++)
> result *= i;
> return result;
> }
> ```
> [37](#page=37).
### 4.2 Arrays and strings
Arrays are used to store collections of data of the same type, while strings are a specific type of array used to store text [38](#page=38) [39](#page=39) [41](#page=41).
#### 4.2.1 Arrays
An array is a data structure that holds multiple elements of the same data type. Elements are accessed using an index, starting from 0 up to N-1, where N is the total number of elements in the array [39](#page=39).
* **Initialization:** It is crucial to initialize arrays before use, as uninitialized arrays can contain unpredictable data [39](#page=39).
* **Multidimensional Arrays:** Arrays can have multiple dimensions, allowing for the representation of grids or tables of data [39](#page=39).
**Example:** A 3-element array of floats to store acceleration values.
> **Example:**
> ```c
> float accel [3](#page=3);
> ```
> [39](#page=39).
**Example:** A 2D array to store grades for students across multiple labs.
> **Example:**
> ```c
> #define NUMSTUDENTS 120
> #define NUMLABS 11
> int grades[NUMSTUDENTS][NUMLABS;
> ```
> [39](#page=39).
**Example:** Calculating the magnitude of a 3D vector represented by an array.
> **Example:**
> ```c
> #include
> double mag(double v ) { [3](#page=3).
> return sqrt(v *v + v *v + v *v ) [1](#page=1) [2](#page=2);
> }
> ```
> [40](#page=40).
#### 4.2.2 Strings
A string in C is fundamentally an array of characters terminated by a null character (`\0`). This null terminator signifies the end of the string [41](#page=41).
**Representation:**
If `char name = "BOB";`, it is stored in memory as [20](#page=20):
* `name ` = ASCII value for 'B' .
* `name ` = ASCII value for 'O' [1](#page=1) .
* `name ` = ASCII value for 'B' [2](#page=2) .
* `name ` = 0 (NULL termination) [3](#page=3).
Any subsequent elements in the array (up to `name `) are ignored by string functions [19](#page=19) [41](#page=41).
**String Handling Functions:**
Common string operations include calculating length and copying strings [42](#page=42).
* **`strlen`:** Calculates the length of a string by counting characters until the null terminator is encountered, with a safeguard against exceeding a maximum length [42](#page=42).
* **`strcpy`:** Copies characters from a source string to a destination string, including the null terminator, and also includes a maximum length check [42](#page=42).
**Example:** Using string functions.
> **Example:**
> ```c
> #include
> #define MAXLEN 80
> void main(void) {
> char name ;
> int len;
> char c;
> strcpy(name, "BOB"); // Copies "BOB" into the name array
> len = strlen(name); // len will be 3
> c = name; // c will hold the character 'O' (ASCII 79) [1](#page=1).
> }
> ```
> [43](#page=43).
### 4.3 Structures
Structures allow you to group together related variables of different data types under a single name, creating a user-defined type [45](#page=45).
**Definition:**
The general format for defining a structure is:
```c
struct structure_name {
type1 element1;
type2 element2;
// ... more elements
};
```
**Usage:**
To use a structure, you first declare a variable of that structure type. Individual elements within the structure are accessed using the dot operator (`.`) [46](#page=46).
**Example:** Defining and using a `contact` structure.
> **Example:**
> ```c
> struct contact {
> char name [30](#page=30);
> int age;
> float height; // in meters
> };
>
> struct contact c1;
> strcpy(c1.name, "Ben Bitdiddle");
> c1.age = 20;
> c1.height = 1.82;
> ```
> [46](#page=46).
#### 4.3.1 Typedef for structures
The `typedef` keyword can be used to create an alias for a structure type, simplifying variable declaration [47](#page=47).
**Syntax:**
```c
typedef existing_type new_type_name;
```
**Example:** Using `typedef` to shorten the `contact` structure declaration.
> **Example:**
> ```c
> typedef struct contact {
> char name [30](#page=30);
> int age;
> float height; // in meters
> } contact; // 'contact' is now an alias for 'struct contact'
>
> contact c1; // Variable 'c1' is of type 'contact'
> ```
> [47](#page=47).
**Example:** Structures for geometric points and rectangles.
> **Example:**
> ```c
> typedef struct point {
> int x;
> int y;
> } point;
>
> point p1;
> p1.x = 42;
> p1.y = 9;
>
> typedef struct rect {
> point ll; // lower-left corner
> point ur; // upper-right corner
> int color;
> } rect;
>
> rect r1;
> r1.color = 1;
> r1.ll = p1; // Assigning one structure to another
> r1.ur.x = r1.ll.x + width; // Accessing nested structure members
> r1.ur.y = r1.ll.y + height;
> ```
> [48](#page=48).
---
# Memory management and pointers
This section details how data is stored in memory, the role of the `sizeof` operator, and the fundamental concepts of pointers in C programming.
### 5.1 Memory organization
Variables and data structures are stored in distinct locations within computer memory. Each fundamental data type occupies a specific amount of memory, measured in bytes [50](#page=50).
* **`char`**: Occupies 1 byte [50](#page=50).
* **`short`**: Occupies at least 2 bytes [50](#page=50).
* **`long`**: Occupies at least 4 bytes, and potentially 8 bytes on 64-bit systems [50](#page=50).
* **`int`**: Occupies at least 2 bytes, commonly 4 bytes on both 32-bit and 64-bit systems [50](#page=50).
* **`float`**: Occupies 4 bytes [50](#page=50).
* **`double`**: Occupies 8 bytes [50](#page=50).
Arrays and structures are stored in contiguous blocks of memory, with their total size determined by the sum of the sizes of their constituent elements [50](#page=50).
> **Tip:** Understanding the size of data types is crucial for efficient memory allocation and avoiding overflow issues.
### 5.2 The `sizeof` operator
The `sizeof` operator is a compile-time operator in C that returns the size, in bytes, of a variable or a data type. It can be used with a variable name or with a type name enclosed in parentheses [51](#page=51).
**Syntax:**
* `sizeof(expression)`
* `sizeof expression`
**Examples:**
* `int s1 = sizeof c;` where `c` is a `char`, `s1` will be 1 [51](#page=51).
* `int s2 = sizeof(d);` where `d` is a `double`, `s2` will be 8 [51](#page=51).
* For a `point` structure (e.g., two integers), `sizeof(p)` would be the sum of the sizes of its members, e.g., 4 bytes + 4 bytes = 8 bytes [51](#page=51).
* For a `rect` structure (e.g., two `point` structures and a color integer), `sizeof(r)` could be calculated as (8 bytes + 8 bytes + 4 bytes) = 20 bytes [51](#page=51).
> **Tip:** The `sizeof` operator is invaluable for determining memory requirements, especially when dealing with arrays and complex data structures.
### 5.3 Memory layout examples
**Array Memory Example:**
An array, such as `int ary;`, will allocate four consecutive memory locations, each capable of holding an integer. If the array starts at address `0x101C`, the elements would be at `0x101C` (index 0), `0x1020` (index 1), `0x1024` (index 2), and `0x1028` (index 3), assuming integers are 4 bytes each [4](#page=4) [52](#page=52) [57](#page=57) [58](#page=58).
**Structure Memory Example:**
A structure can contain various data types. For instance, a `rect` structure might have members like `ll` (lower-left coordinate), `ur` (upper-right coordinate), and `color`. If `ll` and `ur` are themselves structures with `x` and `y` coordinates (integers), and `color` is an integer, the memory layout would be sequential. For example, `r1.ll.x` might be at `0x1008`, `r1.ll.y` at `0x100C`, `r1.ur.x` at `0x1010`, `r1.ur.y` at `0x1014`, and `r1.color` at `0x1018` [53](#page=53) [57](#page=57).
### 5.4 Pointers
A pointer is a variable that stores a memory address. It essentially "points" to another location in memory where data is stored [55](#page=55).
#### 5.4.1 Pointer declaration
Pointer variables are declared using an asterisk (`*`) between the data type and the variable name. This signifies that the variable will hold the memory address of a variable of that specific data type [55](#page=55).
**Example:**
`int *ptr;` declares `ptr` as a pointer to an integer [55](#page=55).
#### 5.4.2 The address-of operator (`&`)
The address-of operator (`&`) is used to get the memory address of a variable. When placed before a variable name, it returns the address where that variable is stored [55](#page=55).
**Example:**
If `salary1` is stored at memory address `100`, then `ptr = &salary1;` will assign the value `100` (the address of `salary1`) to the pointer variable `ptr` [55](#page=55).
#### 5.4.3 Dereferencing a pointer (`*`)
The dereference operator (`*`), when used with a pointer variable, retrieves the value stored at the memory address that the pointer holds. It effectively "follows" the pointer to access the data it points to [55](#page=55).
**Example:**
If `ptr` holds the address `100`, and `salary1` at address `100` has the value `98500`, then `salary2 = *ptr + 1000;` will first get the value `98500` from `*ptr`, add `1000`, and assign the result `99500` to `salary2` [55](#page=55).
> **Tip:** It is crucial to initialize pointers before dereferencing them to avoid accessing invalid memory locations, which can lead to program crashes or unpredictable behavior.
### 5.5 Arrays and pointers
In C, an array name is often treated as a pointer to its first element (the element at index 0). This means that pointer arithmetic can be used to access array elements [56](#page=56).
**Example:**
If `ary` is an array, `ary` itself refers to the address of `ary `. Therefore, `*(ary + i)` is equivalent to `ary[i]`, accessing the element at index `i` [69](#page=69).
> **Tip:** Understanding the relationship between arrays and pointers is fundamental for efficient array manipulation and dynamic memory allocation in C.
### 5.6 Pointer arithmetic
Pointer arithmetic involves adding or subtracting integers from a pointer. When an integer `n` is added to a pointer of type `T*`, the resulting address is advanced by `n * sizeof(T)` bytes. This means that pointer arithmetic operates in terms of the number of elements of the data type the pointer points to, not in raw bytes [69](#page=69).
**Example:**
If `ptr` points to the beginning of an integer array (`0x101C`) and we use `*(ptr + 2)`, this accesses the third element of the array (at index 2). If integers are 4 bytes, `ptr + 2` would result in an address `0x101C + 2 * 4` bytes = `0x101C + 8` bytes = `0x1024`, which is the correct address for `ary ` [2](#page=2) [69](#page=69).
### 5.7 Pointer examples with arrays and assignment
The following example illustrates various pointer operations with an integer array `ary` and variables `a` and `b` [62-71](#page=62-71).
**Initialization:**
* `int ary;` declares an array of 4 integers [4](#page=4).
* `int a = 37, b;` declares two integer variables.
* `int *ptr;` declares a pointer to an integer.
**Execution Trace:**
1. `for (i=0; i<3; i++) ary[i = i*i;`: Initializes the first three elements of `ary` to `0`, `1`, and `4` respectively. `ary ` remains uninitialized in this loop [3](#page=3) [63](#page=63).
2. `ptr = &a;`: The pointer `ptr` now holds the address of `a` (e.g., `0x102C`) [64](#page=64).
3. `b = *ptr;`: The value pointed to by `ptr` (which is `a`'s value, `37`) is assigned to `b`. `b` becomes `37` [65](#page=65).
4. `*ptr = 3;`: The value at the address pointed to by `ptr` (i.e., `a`) is changed to `3`. So, `a` becomes `3` [66](#page=66).
5. `ptr = ary;`: The pointer `ptr` is reassigned to point to the beginning of the array `ary` (e.g., `0x101C`) [67](#page=67).
6. `ptr = b;`: This is equivalent to `*(ptr + 1) = b;`. It assigns the value of `b` (`37`) to `ary ` [1](#page=1) [68](#page=68).
7. `*(ptr+2) = 7;`: This assigns the value `7` to the element at `ptr + 2`, which is `ary ` [2](#page=2) [69](#page=69).
8. `ary = 1;`: **This is an out-of-bounds write.** It attempts to write to memory beyond the allocated size of `ary`. In this specific memory layout, it overwrites the variable `a` with the value `1` [4](#page=4) [70](#page=70).
9. `*(ptr+5) = 2;`: This is also an out-of-bounds write. `ptr + 5` would be `0x101C + 5 * 4` bytes = `0x101C + 20` bytes = `0x1030`. This memory location happens to be where `b` is stored, so `b` is overwritten with the value `2` [71](#page=71).
> **Caution:** Accessing memory outside the bounds of an array (buffer overflow) is a serious programming error that can lead to data corruption, crashes, and security vulnerabilities.
#### 5.7.1 `char` pointer example
An example with a `char` variable `age` and a `char` pointer `p` demonstrates fundamental pointer usage [72-73](#page=72-73).
* `char age = 30;`: A character variable `age` is initialized to 30.
* `char *p;`: A pointer `p` to a character is declared.
* `p = &age;`: `p` stores the memory address of `age`.
* `printf("*p = %d\n", *p);`: Dereferencing `p` prints the value of `age` [30](#page=30).
* `printf("sizeof(age) = %ld\n", sizeof(age));`: Prints the size of `age` (1 byte).
* `printf("sizeof(p) = %ld\n", sizeof(p));`: Prints the size of the pointer `p` (typically 8 bytes on a 64-bit system).
* `*p = 40;`: The value at the address `p` points to (i.e., `age`) is updated to 40.
* The program output shows that both `*p` and `age` reflect the updated value of 40.
### 5.8 Pointers and structures
Pointers can be used to point to structures, allowing indirect access and modification of structure members [74](#page=74).
* **Declaration:** `rect *rptr;` declares `rptr` as a pointer to a `rect` structure.
* **Assignment:** `rptr = &r1;` makes `rptr` point to the structure variable `r1`.
* **Accessing members:**
* Using the dot operator with the structure name: `(*rptr).color = 3;` This first dereferences `rptr` to get the structure, then accesses its `color` member. The parentheses around `*rptr` are necessary due to operator precedence.
* Using the arrow operator (member access operator): `rptr->color = 4;` This is the preferred and more concise way to access structure members via a pointer. The arrow `->` combines dereferencing and member access.
> **Tip:** The arrow operator `->` is specifically designed for convenience when working with pointers to structures, making code cleaner and more readable.
---
# Dynamic memory allocation and advanced topics
This section explores dynamic memory allocation in C using `malloc` and `free`, and delves into managing complex memory layouts for multidimensional arrays and structures, including passing structures to functions by address [75](#page=75) [79](#page=79).
### 6.1 Dynamic memory allocation
Dynamic memory allocation allows for memory to be requested and released during program execution, rather than being fixed at compile time [79](#page=79) [80](#page=80).
#### 6.1.1 `malloc` and `free`
* `malloc` is a function that allocates a specified number of bytes of memory and returns a pointer to the beginning of this allocated block [80](#page=80).
* `free` is used to deallocate memory that was previously allocated by `malloc`, making it available for reuse [80](#page=80).
* Both `malloc` and `free` are declared in the `stdlib.h` header file [80](#page=80).
**Example of `malloc` usage:**
To allocate memory for an array of 10 integers, you would use:
`int *ary = (int*)malloc(10*sizeof(int));` [80](#page=80).
> **Tip:** When allocating memory with `malloc`, it's good practice to cast the returned `void` pointer to the appropriate data type for clarity and type safety.
### 6.2 Variable-sized arrays
In standard C, the dimensions of multidimensional arrays must be known at compile time. For arrays whose dimensions are not known until runtime (variable-sized arrays), a common approach is to treat them as one-dimensional arrays and manage the indexing manually [81](#page=81).
#### 6.2.1 Matrix implementation with dynamic allocation
A variable-sized matrix can be implemented by allocating a contiguous block of memory for all its elements and then using a formula to access individual elements.
**Function to create a new matrix:**
The `newMatrix` function allocates memory for an `m` row by `n` column matrix of doubles. It treats the matrix as a single-dimensional array of `m*n` elements [82](#page=82).
```c
double* newMatrix(int m, int n) {
double *mat;
mat = (double*)malloc(m*n*sizeof(double));
return mat;
}
```
**Function to create an identity matrix:**
The `newIdentityMatrix` function creates an `n x n` identity matrix using `newMatrix` and then populates it. The element at row `i` and column `j` is set to 1 if `i == j`, and 0 otherwise. The indexing formula `mat[j+i*n]` is used to map the 2D coordinates to the 1D memory layout [82](#page=82).
```c
double* newIdentityMatrix(int n) {
double *mat = newMatrix(n, n);
int i, j;
for (i=0; i` operator is used to access members of the structure through a pointer [76](#page=76).
```c
void createRect(int xl, int yl, int width, int height, int color, rect *r) {
r->ll.x = xl; r->ll.y = yl;
r->ur.x = xl + width; r->ur.y = yl + height;
r->color = color;
}
```
**Example `main` function call:**
In `main`, a `rect` variable `r1` is declared, and its address (`&r1`) is passed to `createRect`, allowing the function to modify `r1` directly [76](#page=76).
```c
int main(void) {
rect r1;
createRect(3, 5, 10, 20, 1, &r1);
}
```
---
## Common mistakes to avoid
- Review all topics thoroughly before exams
- Pay attention to formulas and key definitions
- Practice with examples provided in each section
- Don't memorize without understanding the underlying concepts
Glossary
| Term | Definition |
|------|------------|
| C programming language | A general-purpose, procedural computer programming language developed in the early 1970s that is known for its efficiency and ability to interact directly with hardware. |
| Preprocessor | A program that processes input text for another program; in C, it handles directives like #define and #include before compilation. |
| #define directive | A preprocessor directive used to create symbolic constants or macros, where an identifier is replaced with a specific value or code snippet. |
| Global variable | A variable declared outside of any function, making it accessible from any part of the program. It is generally advisable to avoid excessive use of global variables. |
| Local variable | A variable declared inside a function, with its scope limited to that function. Local variables are the preferred choice for modular programming. |
| Primitive data types | Fundamental data types in C, such as int, char, float, and double, that represent basic values. |
| Integer sizes | The number of bits used to store an integer, which can vary depending on the architecture (e.g., int can be 16 or 32 bits). `stdint.h` provides fixed-size integer types like `int16_t`. |
| ASCII Table | A character encoding standard where each character is assigned a unique numerical value, used for representing text in computers. |
| Function | A self-contained block of code that performs a specific task. A function can take inputs (arguments) and return at most one output value. |
| Function prototype | A declaration of a function that specifies its name, return type, and the types of its parameters. It allows the compiler to know about a function before its full definition. |
| Pass by value | A mechanism where a function receives a copy of the argument's value, so modifications within the function do not affect the original variable. |
| #include directive | A preprocessor directive used to incorporate the contents of another file, typically header files containing function prototypes and macro definitions, into the current file. |
| Operator | A symbol that performs an operation on one or more operands. C has various operators including arithmetic, relational, logical, and bitwise operators. |
| Precedence | The set of rules that determines the order in which operators are evaluated in an expression. |
| Boolean (True/False) in C | In C, a value is considered FALSE if it is 0, and TRUE if it is any non-zero value. Logical operators often return 0 for FALSE and 1 for TRUE. |
| Control flow statements | Statements that alter the order in which instructions are executed, such as `if`, `else`, and `switch`, allowing for conditional execution and decision-making. |
| Loops | Constructs that allow a block of code to be executed repeatedly based on a condition. Common loop types include `while`, `do-while`, and `for`. |
| Arrays | Data structures that store a collection of elements of the same data type in contiguous memory locations. Elements are accessed using an index starting from 0. |
| Strings | In C, strings are arrays of characters terminated by a null character (`\0`) to signify the end of the string. |
| Structures | User-defined data types that group together variables of different data types under a single name, allowing for the organization of related data. |
| Typedef | A keyword used to create an alias or a shorthand name for an existing data type, simplifying the declaration of complex types like structures. |
| Memory | The physical or virtual storage space where data and program instructions are held. Variables and data structures occupy specific locations in memory. |
| Sizeof operator | An operator that returns the size, in bytes, of a data type or a variable. |
| Pointers | Variables that store memory addresses. They are used to indirectly access and manipulate data stored at those addresses. |
| Address-of operator (&) | An operator that returns the memory address of a variable. |
| Dereference operator (*) | An operator used with pointers to access the value stored at the memory address the pointer points to. |
| Member access operator (.) | Used to access members of a structure when you have the structure variable itself. |
| Arrow operator (->) | Used to access members of a structure when you have a pointer to the structure. |
| Dynamic memory allocation | The process of assigning memory to variables or data structures during program execution, rather than at compile time. |
| `malloc()` function | A standard library function that allocates a block of memory of a specified size and returns a pointer to the beginning of that block. |
| `free()` function | A standard library function used to deallocate memory that was previously allocated by `malloc()`, returning it to the system for reuse. |
Cover
Excel cursus.docx
Summary
# Basisbewerkingen in Excel
*Summary generation failed for this topic.*
---
# Opmaak van cellen en gegevens
Dit onderdeel van de studiehandleiding behandelt de diverse opmaakopties in Excel om de leesbaarheid en presentatie van gegevens te verbeteren.
### 2.1 Celopmaak
Celopmaak stelt u in staat om het uiterlijk van cellen aan te passen voor betere leesbaarheid en visuele presentatie.
#### 2.1.1 Opmaak wissen
U kunt specifieke onderdelen van de celopmaak wissen zonder de inhoud te verwijderen.
* **Alles wissen:** Verwijdert inhoud, opmaak, opmerkingen en hyperlinks.
* **Opmaak wissen:** Behoudt de celinhoud, maar verwijdert alle toegepaste opmaak.
* **Inhoud wissen:** Behoudt de opmaak, maar verwijdert de celinhoud.
* **Opmerkingen en notities wissen:** Verwijdert alleen de toegevoegde opmerkingen of notities.
* **Hyperlinks wissen:** Verwijdert enkel de hyperlinks uit de cel.
Met de toetsen `DELETE` of `BACKSPACE` wordt enkel de celinhoud verwijderd.
#### 2.1.2 Tekenstijl
Het aanpassen van de tekenstijl helpt om tekst en waarden in cellen te accentueren.
* **Vet (B):** Maakt de tekst vetgedrukt.
* **Cursief (I):** Maakt de tekst schuin.
* **Onderstrepen (U):**
* **Enkel of Dubbel:** Onderstreept de tekst enkel over de lengte ervan.
* **Enkel financieel of Dubbel financieel:** Onderstreept de tekst over de volledige celbreedte, maar enkel over de lengte van de numerieke waarde.
U kunt de tekenstijl instellen via het lint, het dialoogvenster "Cellen opmaken", via rechtsklikken, de miniwerkbalk of sneltoetsen.
#### 2.1.3 Opvulkleur
Met een opvulkleur kunt u gegevens in cellen markeren door de achtergrondkleur aan te passen.
* **Themakleuren:** Kleuren die meeveranderen met het gekozen thema. De eerste kleuren zijn standaard achtergrond- en tekstkleuren, gevolgd door accentkleuren.
* **Standaardkleuren:** Kleuren die niet veranderen bij het wisselen van thema.
* **Meer kleuren:** Biedt de mogelijkheid om een aangepaste kleur te kiezen of te mengen via RGB-waarden, handig voor specifieke bedrijfskleuren.
Opvulkleuren kunnen worden ingesteld via het lint, het dialoogvenster "Cellen opmaken", rechtsklikken, of de miniwerkbalk.
#### 2.1.4 Tekengrootte
De tekengrootte bepaalt hoe groot de tekst in een cel wordt weergegeven.
* De standaard tekengrootte in een nieuwe Excel-map is 11 punten.
* U kunt een waarde kiezen uit de keuzelijst of zelf een waarde typen (tussen 1 en 409, in veelvouden van 0,5).
* Eén typografische punt is gelijk aan 1/72 inch, wat ongeveer 0,03528 cm is.
Tekengrootte kan worden aangepast via het lint, het dialoogvenster "Cellen opmaken", rechtsklikken, of de miniwerkbalk.
#### 2.1.5 Opvulpatroon
Naast een effen opvulkleur kunt u ook patronen toevoegen aan de achtergrond van cellen voor extra visuele distinctie.
U kunt opvulpatronen instellen via het lint, rechtsklikken of het dialoogvenster "Cellen opmaken".
#### 2.1.6 Opvulkleur en -patroon wissen
Om toegepaste opvulkleuren en patronen te verwijderen, kunt u de optie "Geen opvulling" kiezen.
Dit kan gedaan worden via het lint, het dialoogvenster "Cellen opmaken" of via rechtsklikken.
#### 2.1.7 Rasterlijnen
Rasterlijnen zijn de dunne lijnen rond cellen die standaard zichtbaar zijn in Excel-werkbladen.
* De kleur van de rasterlijnen kan worden aangepast in de geavanceerde opties van Excel.
* Rasterlijnen zijn anders dan randen: ze kunnen niet selectief op bepaalde cellen worden toegepast en kunnen niet worden aangepast in dikte.
* Wanneer u een opvulkleur toepast, kunnen de rasterlijnen zichtbaar of afdrukbaar zijn, afhankelijk van de instellingen.
U kunt rasterlijnen verbergen of weergeven via de weergaveopties op het tabblad "Beeld".
#### 2.1.8 Randen
Het toevoegen van randen aan cellen verbetert de leesbaarheid en structuur van tabellen.
* U kunt kiezen uit vooraf gedefinieerde randstijlen om snel randen toe te voegen.
* Voor aangepaste randen kunt u gebruikmaken van "Meer randen" in het dialoogvenster "Cellen opmaken".
Randen kunnen worden toegevoegd via het lint, het dialoogvenster "Cellen opmaken", rechtsklikken, sneltoetsen of de miniwerkbalk.
#### 2.1.9 Samenvoegen en centreren
Met deze functie kunt u meerdere cellen combineren tot één grotere cel.
* De inhoud van de linkerbovenste cel wordt behouden, terwijl de inhoud van de andere samengevoegde cellen wordt verwijderd.
* Samengevoegde cellen kunnen ook weer worden opgesplitst in hun oorspronkelijke afzonderlijke cellen.
Dit kan worden uitgevoerd via het lint, het dialoogvenster "Cellen opmaken", rechtsklikken of de miniwerkbalk.
#### 2.1.10 Uitlijning
De uitlijning bepaalt hoe gegevens in een cel worden geplaatst, zowel horizontaal als verticaal.
* **Horizontale uitlijning:** Standaard worden tekstgegevens links en numerieke waarden rechts uitgelijnd.
* **Verticale uitlijning:** Standaard worden gegevens tegen de onderkant van de cel uitgelijnd.
* **Inspringing:** Hiermee kunt u de marge tussen de celrand en de gegevens vergroten of verkleinen.
Uitlijning kan worden ingesteld via het lint, het dialoogvenster "Cellen opmaken", of via rechtsklikken.
#### 2.1.11 Opmaak kopiëren
Met de functie "Opmaak kopiëren" (verfkwast) kunt u de opmaak van een cel naar andere cellen toepassen.
* Dubbelklikken op de verfkwast maakt het mogelijk om de opmaak naar meerdere, niet-aangrenzende cellen te kopiëren.
* Om de opmaak-kopieerfunctie uit te schakelen, klikt u nogmaals op de verfkwast of drukt u op `ESC`.
#### 2.1.12 Afdrukstand tekst in cellen
U kunt de oriëntatie van de tekst binnen een cel aanpassen.
Opties zijn onder andere: omhoog, omlaag, rechtsom/linksom draaien, tekst naar een hoek van 45 graden draaien, of tekst verticaal uitlijnen. Dit kan worden ingesteld via het lint, het dialoogvenster "Cellen opmaken" of via rechtsklikken.
### 2.2 Getalopmaak
Getalopmaak bepaalt hoe numerieke waarden en datums worden weergegeven zonder de onderliggende waarde te veranderen.
#### 2.2.1 Getalopmaak
Standaard worden getallen weergegeven zoals ze worden ingevoerd. Met getalopmaak kunt u dit aanpassen, bijvoorbeeld door decimalen in te stellen, duizendtalscheidingstekens toe te voegen, of valutasymbolen te gebruiken.
U kunt de getalopmaak aanpassen via het lint, rechtsklikken, of het dialoogvenster "Cellen opmaken".
#### 2.2.2 Decimalen instellen
U kunt het aantal zichtbare decimalen voor numerieke waarden aanpassen.
* Via de knoppen op het lint kunt u eenvoudig het aantal decimalen verhogen of verlagen.
* Meer gedetailleerde instellingen, zoals het aantal decimalen, kunt u vinden in het dialoogvenster "Cellen opmaken" onder de tab "Getal".
#### 2.2.3 Getalnotatie Kommastijl
De "Kommastijl" (ook wel scheidingsteken voor duizendtallen genoemd) voegt een scheidingsteken toe om grotere getallengroepen van drie cijfers te onderscheiden. Standaard worden ook twee decimalen toegevoegd.
* Volgens de NBN-normen wordt een spatie gebruikt als scheidingsteken voor duizendtallen.
* Dit kan worden ingesteld via de knoppen op het lint, het dialoogvenster "Cellen opmaken", rechtsklikken, of de miniwerkbalk.
#### 2.2.4 Procentnotatie
De procentnotatie wordt gebruikt om waarden als percentages weer te geven.
* **Cellen met bestaande getallen:** Als u procentnotatie toepast op reeds bestaande getallen, worden deze met 100 vermenigvuldigd en krijgt u het procentteken met 2 decimalen. Zo wordt het getal 10 omgezet naar 1000,00%.
* **Lege cellen:** Als u procentnotatie toepast op lege cellen en daarna getallen invoert, worden deze getallen direct geconverteerd naar percentages. Bijvoorbeeld, het getal 10 wordt 10,00%.
Procentnotatie kan worden toegepast via de knoppen op het lint, het dialoogvenster "Cellen opmaken", rechtsklikken, de miniwerkbalk, of de sneltoets `CTRL`+`SHIFT`+`%`.
#### 2.2.5 Getalnotatie Financieel en Valuta
Deze notaties worden gebruikt om geldbedragen weer te geven, met subtiele verschillen:
* **Valuta:** Decimaaltekens staan onder elkaar, het valutasymbool staat links van het getal. De symbolen staan niet noodzakelijk onder elkaar uitgelijnd.
* **Financieel:** Valutasymbolen en decimaaltekens staan strikt onder elkaar uitgelijnd. Cellen met alleen nullen worden weergegeven met een afbreekstreepje, en negatieve getallen worden tussen haakjes geplaatst.
Deze notaties kunnen worden ingesteld via het lint, het dialoogvenster "Cellen opmaken", rechtsklikken, of de miniwerkbalk.
#### 2.2.6 Datum- en tijdnotatie
Excel slaat datums en tijden op als seriële getallen, maar de weergave kan worden aangepast.
* **NBN-normen:**
* Korte notatie: `dd-mm-jjjj` (bijv. `12-08-2020`)
* Lange notatie: `dddd dd mmmm jjjj` (bijv. `woensdag 12 augustus 2020`)
* Tijdnotatie: `uu:mm:ss` (bijv. `09:06:05`)
* Excel herkent datums met '-' of '/' als scheidingstekens. Datums met punten worden als tekst behandeld.
* De standaardnotatie is gebaseerd op de Windows landinstellingen.
Aangepaste datums en tijden kunnen worden ingesteld via het lint, rechtsklikken, of het dialoogvenster "Cellen opmaken".
#### 2.2.7 Voorloopnullen tonen
Wanneer getallen die met een nul beginnen worden ingevoerd (zoals telefoonnummers of productcodes), verwijdert Excel standaard de voorloopnullen.
* Om voorloopnullen te behouden en toch met numerieke waarden te kunnen werken, kunt u een aangepaste getalnotatie gebruiken.
* De notatie "Tekst" kan ook worden toegepast, maar dit voorkomt verdere berekeningen met de waarde.
Dit kan worden ingesteld via het lint, rechtsklikken, of het dialoogvenster "Cellen opmaken".
#### 2.2.8 Vaste tekst in getalopmaak
Met aangepaste getalopmaak kunt u vaste tekst combineren met numerieke waarden in een cel. De ingevoerde gegevens blijven numeriek en bruikbaar voor berekeningen.
* De gewenste tekst moet tussen dubbele aanhalingstekens `"` staan.
* Voorbeelden: `"Uren aan "0% 0" km"`, `"BE "0### ### ### 0” dagen te laat"`.
Dit kan worden ingesteld via het lint, rechtsklikken, of het dialoogvenster "Cellen opmaken".
#### 2.2.9 Optellen tot meer dan 24 uur
Wanneer de som van tijden meer dan 24 uur bedraagt, kan Excel dit standaard verkeerd weergeven door de 24-uurs weergave.
* Om de juiste totalen te zien, moet u via "Aangepaste getalnotatie" een specifieke notatie instellen.
* Gebruik notaties zoals `[uu]:mm` om het aantal uren correct weer te geven, ongeacht of dit boven de 24 uitkomt.
Dit kan worden ingesteld via het lint, rechtsklikken, of het dialoogvenster "Cellen opmaken".
***
**Tip:** Het correct toepassen van celopmaak en getalopmaak is cruciaal voor het creëren van overzichtelijke en professioneel ogende spreadsheets. Experimenteer met de verschillende opties om de beste presentatie voor uw gegevens te vinden.
---
# Functies en berekeningen in Excel
Functies en berekeningen in Excel introduceert de kernconcepten van het werken met formules, functies en celadressering om gegevens te analyseren en te manipuleren.
## 3. Functies en berekeningen in Excel
### 3.1 Formules invoeren en wijzigen
Een formule is een vergelijking die een berekening uitvoert in Excel. Alle formules beginnen met een gelijkteken ($=$). Excel gebruikt standaard wiskundige operators voor berekeningen:
* Optellen: $+$
* Aftrekken: $-$
* Vermenigvuldigen: $*$ (vervang door `\ast` in LaTeX)
* Delen: $/$
* Machten: $^$
De volgorde van bewerkingen in Excel is: haakjes, machten, vermenigvuldigen en delen (van links naar rechts), en tot slot optellen en aftrekken (van links naar rechts). Haakjes kunnen worden gebruikt om de standaardvolgorde te wijzigen. Wanneer een formule een celadres bevat, wordt dit een celverwijzing genoemd. Het gebruik van celverwijzingen is voordelig omdat gegevensupdates in het werkblad automatisch worden doorgevoerd in de formule, zonder dat de formule zelf aangepast hoeft te worden.
### 3.2 Functies invoeren
Een functie is een vooraf gedefinieerde formule in Excel. Functies beginnen, net als formules, met een gelijkteken ($=$), gevolgd door de functienaam en de argumenten tussen haakjes.
* **SOM**: Telt waarden op. Kan individuele waarden, celverwijzingen, celbereiken of combinaties daarvan optellen.
* Syntaxis: `SOM(getal1; [getal2]; ...)`
* Argumenten: `getal1` (vereist) is het eerste getal, celverwijzing of bereik. `getal2` tot `getal255` (optioneel) zijn maximaal 255 extra getallen, celverwijzingen of bereiken.
* **MIN**: Geeft de kleinste waarde uit een lijst met waarden.
* Syntaxis: `MIN(getal1; [getal2]; ...)`
* Argumenten: `getal1` (vereist) is het eerste getal, celverwijzing of bereik. `getal2` tot `getal255` (optioneel) zijn maximaal 255 extra getallen, celverwijzingen of bereiken.
* **MAX**: Geeft de grootste waarde uit een lijst met waarden.
* Syntaxis: `MAX(getal1; [getal2]; ...)`
* Argumenten: `getal1` (vereist) is het eerste getal, celverwijzing of bereik. `getal2` tot `getal255` (optioneel) zijn maximaal 255 extra getallen, celverwijzingen of bereiken.
* **GEMIDDELDE**: Berekent het rekenkundig gemiddelde van de argumenten.
* Syntaxis: `GEMIDDELDE(getal1; [getal2]; ...)`
* Argumenten: `getal1` (vereist) is het eerste getal, celverwijzing of bereik. `getal2` tot `getal255` (optioneel) zijn maximaal 255 extra getallen, celverwijzingen of bereiken.
* **AANTAL**: Telt het aantal cellen dat numerieke waarden (getallen, formules, functies, datums) bevat. Cellen met tekst worden niet geteld.
* Syntaxis: `AANTAL(waarde1; [waarde2]; ...)`
* Argumenten: `waarde1` (vereist) is de eerste celverwijzing of bereik. `waarde2` tot `waarde255` (optioneel) zijn maximaal 255 extra items, celverwijzingen of bereiken.
* **AANTALARG**: Telt het aantal niet-lege cellen in een bereik.
* Syntaxis: `AANTALARG(waarde1; [waarde2]; ...)`
* Argumenten: `waarde1` (vereist) is het eerste argument met de waarden die geteld moeten worden. `waarde2` tot `waarde255` (optioneel) zijn maximaal 255 extra argumenten met waarden.
* **AANTAL.LEGE.CELLEN**: Telt het aantal lege cellen in een bereik.
* Syntaxis: `AANTAL.LEGE.CELLEN(bereik)`
* Argument: `bereik` (vereist) is het bereik waarin lege cellen geteld moeten worden.
* **VANDAAG**: Geeft de huidige datum weer. Formule: `=VANDAAG()`.
* **NU**: Geeft de huidige datum en tijd weer. Formule: `=NU()`.
* De functies `VANDAAG()` en `NU()` vereisen geen argumenten, maar de haakjes moeten wel aanwezig zijn. Ze zorgen voor een variabele datum/tijd die wordt bijgewerkt wanneer het bestand wordt geopend. Voor een vaste datum/tijd kan men de sneltoetsen CTRL+; (datum) of CTRL+: (tijd) gebruiken.
### 3.3 Absolute en relatieve celadressen
Excel kent drie soorten celadressen:
* **Relatieve celadressen**: Bij het kopiëren van een formule met relatieve celverwijzingen, worden deze automatisch aangepast aan de doelcel. Een typisch relatief adres is `A1`. Als `=B3*D3+B3` naar beneden wordt gekopieerd, wordt het `=B4*D4+B4`.
* **Absolute celadressen**: Bij het kopiëren van een formule met absolute celverwijzingen, blijven deze ongewijzigd. Een absoluut adres wordt weergegeven met dollartekens, bijvoorbeeld `$A$1`.
* **Gemengde celadressen**: Dit zijn combinaties waarbij één deel van het adres absoluut is en het andere relatief. Er zijn twee vormen:
* `$A1`: De kolom (`A`) is absoluut, de rij (`1`) is relatief.
* `A$1`: De kolom (`A`) is relatief, de rij (`1`) is absoluut.
Gemengde celadressen zijn nuttig bij het kopiëren van formules zowel horizontaal als verticaal in een tabel.
### 3.4 Celnamen
Een celnaam is een beschrijvende naam die wordt toegewezen aan een cel of een bereik van cellen, wat de leesbaarheid van formules verbetert. Celnamen moeten aan bepaalde criteria voldoen: ze mogen alleen letters, cijfers en underscores bevatten, niet beginnen met een cijfer of de woorden 'waar'/'onwaar', minder dan 250 tekens lang zijn, geen spaties of interpunctie bevatten, en geen celadressen zijn. Bestaande rij- en kolomlabels kunnen worden geconverteerd naar celnamen. Celnamen maken formules zoals `=SOM(A1:B2)` leesbaarder, bijvoorbeeld als `=SOM(Totaal_Budget)`. Navigatie naar benoemde bereiken kan via het naamvak op de formulebalk of met functietoets F5.
### 3.5 Procenten berekenen
#### 3.5.1 Verhoudingen
Verhoudingen drukken de relatie tussen twee waarden uit en worden vaak berekend als een deling, wat resulteert in een kommagetal of een percentage. Ze worden gebruikt om aan te geven hoe de ene waarde zich verhoudt tot de andere. Bijvoorbeeld, om de verhouding van prijs A ten opzichte van prijs B te berekenen, gebruikt men de formule $\text{prijs A} / \text{prijs B}$.
#### 3.5.2 Evoluties
Evoluties berekenen de procentuele stijging of daling van een waarde ten opzichte van een eerdere waarde. Dit gebeurt door de absolute stijging of daling te delen door de oorspronkelijke waarde.
* Formule: $\text{Procentuele stijging/daling} = (\text{Nieuwe waarde} - \text{Oude waarde}) / \text{Oude waarde}$. Dit kan ook geschreven worden als $(\text{Nieuwe waarde} / \text{Oude waarde}) - 1$.
Woorden als 'boven', 'onder', 'hoger', 'lager', 'toename', 'afname', 'beter', 'slechter', 'stijging', 'daling', of 'evolutie' duiden vaak op een berekening van evolutie.
#### 3.5.3 Rekenen met percentages
Bij het rekenen met percentages is het belangrijk om rekening te houden met de 'weging' van de gegevens. Een eenvoudig gemiddelde van percentages kan misleidend zijn als de onderliggende aantallen (noemers) sterk verschillen. In dergelijke gevallen is een gewogen gemiddelde nodig, waarbij de som van de waarden wordt gedeeld door de som van de noemers. Bij het berekenen van een toename met een percentage, bijvoorbeeld een loonsverhoging, wordt de berekening gedaan als: $\text{Nieuw loon} = \text{Huidig loon} \times (1 + \text{Stijgingspercentage})$.
#### 3.5.4 Vergelijkingen
Vergelijkingen omvatten het oplossen van vergelijkingen, vaak met behulp van percentages, om onbekende waarden te bepalen. Bijvoorbeeld, als 50 euro een bepaald percentage van een inkomen is, kan men het inkomen berekenen. Dit kan worden uitgeschreven als een formule in Excel, waarbij celverwijzingen essentieel zijn. Als bekend is dat 98% van de studenten niet ziek is en dit aantal gelijk is aan 300, kan het totale aantal studenten ($x$) worden berekend: $0.98 \times x = 300$, dus $x = 300 / 0.98$.
### 3.6 Zoeken en vervangen
* **Zoeken**: De opdracht 'Zoeken' op het tabblad 'Start' (groep 'Bewerken') maakt het mogelijk om te zoeken naar tekst, getallen of opmaakelementen binnen een werkblad.
* **Vervangen**: Met de opdracht 'Vervangen' (tabblad 'Start', groep 'Bewerken') kan gezocht worden naar specifieke inhoud en deze vervolgens worden vervangen door andere inhoud.
### 3.7 De vulgreep
De vulgreep is een klein zwart kruisje in de rechterbenedenhoek van de actieve cel. Het wordt gebruikt om inhoud (gegevens, formules) van een cel naar aangrenzende cellen te kopiëren. Als Excel een voorgedefinieerde reeks herkent (bv. maanden, dagen), vult het de aangrenzende cellen met de volgende items in de reeks. Het kan ook gebruikt worden om formules te kopiëren.
### 3.8 Aangepaste lijsten
Aangepaste lijsten stellen gebruikers in staat om specifieke lijsten met items efficiënt te hergebruiken. Excel heeft ingebouwde lijsten (bv. dagen van de week, maanden), maar gebruikers kunnen ook hun eigen aangepaste lijsten maken, die beschikbaar worden in andere werkmappen.
### 3.9 Doorvoeren Reeks
Met de opdracht 'Doorvoeren Reeks' kan de inhoud van een cel snel worden gekopieerd naar een aangrenzend bereik. Hierbij kan men de richting van de vulling (rijen of kolommen) en het type (Lineair of Groei) instellen, evenals een interval- en eindwaarde. Voor datums zijn opties zoals 'per dag', 'per weekdag', 'per maand', en 'per jaar' beschikbaar.
### 3.10 Tekstfuncties
* **TEKST.SAMENVOEGEN**: Voegt twee of meer tekenreeksen samen tot één. Argumenten kunnen tekstwaarden, getallen, celverwijzingen of formules zijn. Om delen te scheiden, kan een spatie (" ") als argument worden toegevoegd.
* Syntaxis: `TEKST.SAMENVOEGEN(tekst1; [tekst2]; …)`
* **HOOFDLETTERS**: Converteert alle letters in een tekenreeks naar hoofdletters.
* Syntaxis: `HOOFDLETTERS(tekst)`
* **KLEINE.LETTERS**: Converteert alle hoofdletters in een tekenreeks naar kleine letters.
* Syntaxis: `KLEINE.LETTERS(tekst)`
* **BEGINLETTERS**: Zet de eerste letter van een tekenreeks (en na elk ander teken dan een letter) om in een hoofdletter, en de rest in kleine letters. Handig voor naamopmaak.
* Syntaxis: `BEGINLETTERS(tekst)`
* **RECHTS**: Geeft een bepaald aantal tekens vanaf het einde van een tekenreeks terug.
* Syntaxis: `RECHTS(tekst; [aantal-tekens])`
* **LINKS**: Geeft een bepaald aantal tekens vanaf het begin van een tekenreeks terug.
* Syntaxis: `LINKS(tekst; [aantal-tekens])`
* **DEEL**: Geeft een specifiek aantal tekens uit een tekenreeks terug, beginnend vanaf een opgegeven positie. De flexibiliteit kan vergroot worden met functies als `VIND.ALLES` of `VIND.SPEC`.
* Syntaxis: `DEEL(tekst; begin_getal; aantal_tekens)`
* **VIND.ALLES**: Zoekt de eerste positie van een specifieke tekst binnen een andere tekst. Deze functie is hoofdlettergevoelig.
* Syntaxis: `VIND.ALLES(zoeken_tekst; in_tekst; [begin_getal])`
* **VIND.SPEC**: Vergelijkbaar met `VIND.ALLES`, maar is niet hoofdlettergevoelig.
* Syntaxis: `VIND.SPEC(zoeken_tekst; in_tekst; [begin_getal])`
* **SPATIES.WISSEN**: Verwijdert overbodige (dubbele) spaties uit een tekenreeks, met behoud van enkele spaties tussen woorden.
* Syntaxis: `SPATIES.WISSEN(tekst)`
* **SUBSTITUEREN**: Vervangt een oude tekst door een nieuwe tekst in een tekenreeks. De functie is hoofdlettergevoelig en ondersteunt geen jokertekens.
* Syntaxis: `SUBSTITUEREN(tekst; oud_tekst; nieuw_tekst; [rang_getal])`
### 3.11 Tijd- en datumfuncties
Datums en tijden worden in Excel opgeslagen als seriële getallen, wat berekeningen mogelijk maakt. 1 januari 1900 is het seriële getal 1.
* **JAAR**: Geeft het jaartal van een datum terug.
* Syntaxis: `JAAR(serieel-getal)`
* **MAAND**: Geeft de maand van een datum terug als een getal van 1 tot 12.
* Syntaxis: `MAAND(serieel-getal)`
* **DAG**: Geeft de dag van de maand terug als een getal tussen 1 en 31.
* Syntaxis: `DAG(serieel-getal)`
* **WEEKDAG**: Geeft de dag van de week terug als een getal (standaard 1 voor zondag, 7 voor zaterdag). Een optioneel argument bepaalt welke dag als eerste van de week geldt (bv. 2 voor maandag).
* Syntaxis: `WEEKDAG(serieel-getal; [type_getal])`
* **DATUM**: Combineert drie waarden (jaar, maand, dag) tot een datum. Kan ook gebruikt worden om de eerste, laatste, huidige, vorige of volgende maand/dag te bepalen door buiten de normale bereiken te gaan voor maand of dag.
* Syntaxis: `DATUM(jaar; maand; dag)`
* **ZELFDE.DAG**: Berekent een datum die een opgegeven aantal maanden voor of na een begindatum ligt.
* Syntaxis: `ZELFDE.DAG(begindatum; aantal_maanden)`
* **NETTO.WERKDAGEN**: Berekent het aantal volledige werkdagen tussen een begindatum en einddatum, exclusief weekenden en optioneel vakantiedagen.
* Syntaxis: `NETTO.WERKDAGEN(begindatum; einddatum; [vakantiedagen])`
* **TIJD**: Converteert uren, minuten en seconden naar een decimale tijdwaarde.
* Syntaxis: `TIJD(uur; minuut; seconde)`
* **UUR**: Geeft het uur (0-23) van een tijdwaarde terug.
* Syntaxis: `UUR(serieel-getal)`
* **MINUUT**: Geeft de minuut (0-59) van een tijdwaarde terug.
* Syntaxis: `MINUUT(serieel-getal)`
* **SECONDE**: Geeft de seconde (0-59) van een tijdwaarde terug.
* Syntaxis: `SECONDE(serieel-getal)`
Voor het invoeren van de huidige datum en tijd zijn sneltoetsen (CTRL+; en CTRL+:) en de functies `VANDAAG()` en `NU()` beschikbaar.
### 3.12 Logische functies
* **ALS**: Voert een logische test uit en retourneert een waarde als de test WAAR is en een andere waarde als de test ONWAAR is.
* Syntaxis: `ALS(logische_test; [waarde_als_waar]; [waarde_als_onwaar])`
### 3.13 Zoekfuncties
* **VERT.ZOEKEN**: Zoekt naar een waarde in de eerste kolom van een tabel en geeft een waarde terug uit dezelfde rij in een opgegeven kolom. De functie kan exact of benaderend zoeken.
* Syntaxis: `VERT.ZOEKEN(zoekwaarde;tabelmatrix;kolomindex_getal;benaderen)`
* **INDEX**: Geeft een waarde terug uit een tabel of bereik, gebaseerd op rij- en kolomnummers.
* Syntaxis: `INDEX(verw; rij_getal; [kolom_getal])`
### 3.14 Wiskundige functies
* **AFRONDEN.N.VEELVOUD**: Rondt een getal af op het dichtstbijzijnde opgegeven veelvoud. Zowel het getal als het veelvoud moeten van hetzelfde teken zijn (beide positief of beide negatief).
* Syntaxis: `AFRONDEN.N.VEELVOUD(getal;veelvoud)`
* **AFRONDEN.BENEDEN.WISK**: Rondt een getal naar beneden af op het dichtstbijzijnde veelvoud.
* Syntaxis: `AFRONDEN.BENEDEN.WISK(getal; [significantie]; [modus])`
* **AFRONDEN.BOVEN.WISK**: Rondt een getal naar boven af op het dichtstbijzijnde veelvoud.
* Syntaxis: `AFRONDEN.BOVEN.WISK(getal; [significantie]; [modus])`
### 3.15 Statistische functies
* **GEMIDDELDE**: Berekent het gemiddelde van getallen, waarbij alle getallen even zwaar worden gewogen.
* Syntaxis: `GEMIDDELDE(getal1; [getal2])`
* **GEMIDDELDE.ALS**: Berekent het gemiddelde van cellen in een bereik die voldoen aan één specifiek criterium.
* Syntaxis: `GEMIDDELDE.ALS(bereik; criteria; [gemiddelde_bereik])`
* **GEMIDDELDEN.ALS**: Berekent het gemiddelde van cellen die voldoen aan meerdere criteria.
* Syntaxis: `GEMIDDELDEN.ALS(gemiddelde_bereik; criteriumbereik1; criterium1; [criteriumbereik2; criterium2]; …)`
* **AANTAL.ALS**: Telt het aantal cellen in een bereik dat voldoet aan één specifiek criterium.
* Syntaxis: `AANTAL.ALS(bereik; criterium)`
* **AANTALLEN.ALS**: Telt het aantal cellen dat voldoet aan meerdere criteria.
* Syntaxis: `AANTALLEN.ALS(criteriabereik1; criterium1; [criteriabereik2; criterium2]; …)`
### 3.16 Gegevensvalidatie
Gegevensvalidatie stelt regels in om te bepalen welk type gegevens of welke waarden gebruikers in een cel mogen invoeren. Dit helpt gegevensfouten te voorkomen.
* **Gegevensvalidatie voor datums**: Beperkt invoer tot datums binnen een bepaald tijdsbestek, gelijk aan, niet gelijk aan, groter dan, kleiner dan, groter dan of gelijk aan, of kleiner dan of gelijk aan een bepaalde datum.
* **Gegevensvalidatie voor tekst**: Beperkt invoer tot waarden in een keuzelijst, tekst van een bepaalde lengte, of vereist dat alleen tekst wordt ingevoerd (`ISTEKST`).
* **Invoerbericht**: Een bericht dat verschijnt wanneer een cel met gegevensvalidatie wordt geselecteerd, om de gebruiker te informeren over de verwachte invoer.
* **Foutmelding**: Een bericht dat verschijnt als de ingevoerde gegevens niet voldoen aan de validatieregels.
* **Geen dubbele waarden toelaten**: Kan ingesteld worden om te voorkomen dat identieke waarden meerdere keren in een bereik worden ingevoerd.
* **Input beperken tot gegevens uit een lijst**: Met gegevensvalidatie en de functie `INDIRECT` kan de invoer beperkt worden tot waarden uit een benoemd bereik.
### 3.17 Celadressering
* **Relatieve celadressen**: Verwijzen naar cellen ten opzichte van de cel waarin de formule staat. Bij kopiëren passen ze zich aan. (bv. `A1`).
* **Absolute celadressen**: Verwijzen altijd naar dezelfde specifieke cel, ongeacht waar de formule wordt gekopieerd. (bv. `$A$1`).
* **Gemengde celadressen**: Combineren relatieve en absolute adressering, waarbij de kolom of rij vaststaat (bv. `$A1` of `A$1`).
### 3.18 Cellen plakken speciaal
'Plakken speciaal' biedt geavanceerde opties bij het plakken van gekopieerde of geknipte gegevens:
* **Formules kopiëren als waarden**: Plakt alleen de berekende resultaten van formules, zonder de formules zelf.
* **Transponeren**: Wisselt rijen en kolommen om bij het plakken.
* **Berekeningen**: Maakt het mogelijk om tijdens het plakken optellingen, aftrekkingen, vermenigvuldigingen of delingen uit te voeren op de doelcellen.
* **Enkel inhoud kopiëren**: Plakt alleen de inhoud, waarbij de opmaak van het doelbereik wordt toegepast.
### 3.19 Aangepaste getalopmaak
Met aangepaste getalopmaak kan de weergave van getallen, datums en tijden worden aangepast, zonder de onderliggende waarde te wijzigen. Dit omvat:
* **Voorloopnullen tonen**: Door specifieke notaties te gebruiken, kunnen voorloopnullen worden weergegeven (bv. `000000000000` voor 12 cijfers).
* **Vaste tekst in getalopmaak**: Mogelijkheid om tekst toe te voegen aan numerieke waarden (bv. `"Uren aan "0` of `"BE "0### ### ### 0`).
* **Optellen tot meer dan 24 uur**: Door aangepaste notaties zoals `[uu]:mm` te gebruiken, kunnen tijden correct worden opgeteld boven 24 uur.
### 3.20 Wiskundige en statistische functies
De uitgebreide wiskundige en statistische functies in Excel maken complexe berekeningen mogelijk, zoals afrondingen (`AFRONDEN.N.VEELVOUD`, `AFRONDEN.BENEDEN.WISK`, `AFRONDEN.BOVEN.WISK`) en berekeningen met voorwaarden (`GEMIDDELDE.ALS`, `GEMIDDELDE.ALS`, `AANTAL.ALS`, `AANTALLEN.ALS`). Deze functies verhogen de efficiëntie en nauwkeurigheid van data-analyse.
---
# Gegevensbeheer en visualisatie
Dit onderwerp behandelt geavanceerdere technieken voor gegevensbeheer, zoals sorteren, filteren, gegevensvalidatie, en het creëren van grafieken en draaitabellen.
## 6 Gegevens sorteren, filteren en opschonen
Het sorteren en filteren van gegevens is essentieel om informatie overzichtelijk te presenteren en te analyseren.
### 6.1 Sorteren
Sorteren ordent gegevens op basis van specifieke criteria, zoals numerieke volgorde, alfabetische volgorde, oplopend of aflopend, en op datum. Aangepaste sortering maakt het mogelijk om op meerdere velden tegelijk te sorteren en ook te sorteren op tekstkleur of celkleur.
### 6.2 Sorteren op één veld
Dit is de meest basale vorm van sorteren, waarbij de gegevens in één kolom worden geordend.
### 6.3 Sorteren op meerdere velden
Wanneer er meerdere criteria zijn, kan gesorteerd worden op meerdere velden. Hierbij wordt eerst gesorteerd op het primaire veld, en vervolgens op het secundaire veld binnen de resultaten van het primaire veld, enzovoort.
### 6.4 Sorteren op tekstkleur
Gegevens kunnen ook gesorteerd worden op basis van de kleur van de tekst.
### 6.5 Sorteren op celkleur
Net als bij tekstkleur, kunnen cellen ook gesorteerd worden op basis van hun achtergrondkleur.
### 6.6 AutoFilter
AutoFilter is een snelle en efficiënte methode om een subset van gegevens weer te geven die voldoen aan specifieke criteria. Alleen de rijen die aan de criteria voldoen worden getoond, terwijl andere rijen verborgen worden. Dit maakt het mogelijk om de gefilterde gegevens te bewerken, kopiëren, of in een grafiek te zetten zonder de oorspronkelijke ordening te verstoren.
#### 6.6.1 AutoFilter activeren
Dit gebeurt door de knop "Filter" op het tabblad "Start" in de groep "Bewerken" te selecteren. Excel voegt dan kleine driehoekjes toe naast de kolomkoppen.
#### 6.6.2 AutoFilter toepassen
Na activering verschijnen er driehoekjes naast de kolomkoppen. Door op een driehoekje te klikken, kan men filteren op tekst, getallen, of datums. Door waarden uit te vinken, worden deze niet langer getoond. Het driehoekje verandert in een filterpictogram wanneer een filter actief is.
#### 6.6.3 Ingestelde filters verwijderen
Individuele filters kunnen worden verwijderd door op het filtericoon te klikken en "Filter uit [veldnaam] wissen" te selecteren. Om alle filters tegelijk te verwijderen, gebruikt men de knop "Wissen" op het tabblad "Start" in de groep "Bewerken".
#### 6.6.4 AutoFilter deactiveren
Om de filterfunctionaliteit volledig uit te schakelen, klikt men opnieuw op de knop "Filter" op het tabblad "Start" in de groep "Bewerken".
### 6.7 Hulpmiddelen voor gegevens
Dit gedeelte behandelt verdere functionaliteiten voor gegevensmanipulatie.
#### 6.7.1 Duplicaten verwijderen
Met de opdracht "Duplicaten verwijderen" op het tabblad "Gegevens" kunnen dubbele waarden uit een geselecteerd bereik of tabel worden verwijderd. Het is raadzaam om eerst een back-up te maken van de gegevens.
#### 6.7.2 Tekst naar kolommen
Deze functie maakt het mogelijk om de inhoud van een cel, op basis van een scheidingsteken of een vaste breedte, te splitsen over meerdere kolommen. Dit is nuttig voor het scheiden van bijvoorbeeld namen in voor- en achternamen.
### 6.8 Gegevenstabellen en filters
Het omzetten van gegevens naar een tabelformaat biedt voordelen voor filtering, berekeningen en analyse.
#### 6.8.1 Totaalrij
Een totaalrij kan aan een tabel worden toegevoegd, die samenvattingsfuncties zoals GEMIDDELDE, AANTAL, MIN, MAX en SOM biedt. De functie SUBTOTAAL wordt hierbij gebruikt, die rekening houdt met de gefilterde gegevens.
#### 6.8.2 Totaalrij combineren met filter
De totaalrij werkt dynamisch mee met filters, waardoor de totalen steeds worden aangepast aan de weergegeven gegevens.
#### 6.8.3 Tabelstijlen
Voorgedefinieerde tabelstijlen kunnen snel worden toegepast om de leesbaarheid en het uiterlijk van tabellen te verbeteren.
#### 6.8.4 Tabel converteren naar bereik
Een tabel kan worden teruggezet naar een gewoon gegevensbereik, waarbij de toegepaste tabelstijl behouden blijft, maar de tabelfunctionaliteit verloren gaat.
## 7 Opmaak voor lijsten
Dit gedeelte behandelt visuele elementen om lijsten en gegevens aantrekkelijker en inzichtelijker te maken.
### 7.1 Voorwaardelijke opmaak
Voorwaardelijke opmaak stelt gebruikers in staat om cellen te formatteren op basis van hun waarde. Wanneer de waarde verandert, past de opmaak zich automatisch aan.
#### 7.1.1 Pictogramseries
Pictogramseries (zoals pijlen, vlaggen, vinkjes) kunnen worden toegepast om gegevens visueel te markeren op basis van hun waarde.
#### 7.1.2 Regels voor voorwaardelijke opmaak
Met het dialoogvenster "Regels voor voorwaardelijke opmaak beheren" kunnen bestaande regels worden bekeken en bewerkt. De volgorde van de regels is belangrijk, aangezien regels hoger in de lijst prioriteit hebben.
#### 7.1.3 Voorwaardelijke opmaak verwijderen
Regels voor voorwaardelijke opmaak kunnen worden verwijderd, zowel voor geselecteerde cellen als voor het gehele werkblad. Individuele regels kunnen ook worden verwijderd via "Regels beheren".
#### 7.1.4 Voorwaardelijke opmaak met formule
Het gebruik van een eigen formule in voorwaardelijke opmaak vergroot de mogelijkheden om gegevens te markeren op een meer gespecialiseerde manier.
## 15 Gegevensvalidatie
Gegevensvalidatie bepaalt welk type gegevens of welke waarden gebruikers in een cel mogen invoeren, waardoor foutieve invoer wordt voorkomen.
### 15.1 Gegevensvalidatie voor datums
Dit stelt beperkingen in voor datum-invoer, zoals datums binnen een specifiek tijdsbestek, een specifieke datum, of datums groter of kleiner dan een bepaalde datum.
### 15.2 Gegevensvalidatie voor tekst
Dit omvat beperkingen zoals de lengte van de tekst, de invoer van uitsluitend tekst, of het beperken van de invoer tot een selectie uit een lijst.
### 15.3 Invoerbericht
Een invoerbericht kan worden weergegeven wanneer een cel met gegevensvalidatie wordt geselecteerd. Dit bericht geeft instructies over de verwachte invoer.
### 15.4 Foutmelding
Wanneer ongeldige gegevens worden ingevoerd, verschijnt een foutmelding. Er zijn verschillende soorten foutmeldingen beschikbaar.
### 15.5 Geen dubbele waarden toelaten
Hoewel niet expliciet beschreven onder 'Gegevensvalidatie', impliceert de mogelijkheid om te voorkomen dat gebruikers ongeldige gegevens invoeren, ook het detecteren en vermijden van duplicaten via aangepaste validatieregels. Echter, de tool "Duplicaten verwijderen" is een specifiekere functie hiervoor.
### 15.6 Input beperken tot gegevens uit een lijst
Gegevensvalidatie kan worden geconfigureerd om de invoer te beperken tot een lijst met toegestane waarden, vaak in combinatie met de functie INDIRECT en benoemde bereiken.
## 16 Grafieken
Grafieken bieden een visuele weergave van gegevens, waardoor trends en patronen gemakkelijker te herkennen zijn.
### 16.1 Grafiektypen
Excel biedt diverse grafiektypen voor verschillende toepassingen:
* **Cirkeldiagram:** Toont de proportionele verhouding van delen tot een geheel.
* **Kolomdiagram:** Geschikt voor het vergelijken van items of het weergeven van veranderingen over tijd.
* **Staafdiagram:** Illustreert vergelijkingen tussen afzonderlijke items.
* **Lijndiagram:** Ideaal voor het weergeven van trends in continue gegevens over gelijke intervallen.
### 16.2 Grafiekindeling
De lay-out en stijl van een grafiek kunnen worden aangepast om de weergave te verbeteren.
### 16.3 Grafiek verplaatsen
Grafieken kunnen als objecten in bestaande werkbladen worden geplaatst of als aparte grafiekbladen worden gegenereerd.
### 16.4 Gegevenslabels
Gegevenslabels kunnen worden toegevoegd aan grafiekelementen zoals titels, assen, en individuele datapunten om de interpretatie te vergemakkelijken.
### 16.5 Grafiek formatteren
Vrijwel elk aspect van een grafiek kan worden gepersonaliseerd, inclusief achtergrondkleuren, rasterlijnen, lettertypen en specifieke datapunten.
### 16.6 Labels categorie-as aanpassen
De weergave van de categorie-as, inclusief schaal, gegevensmarkeringen en tekst, kan worden aangepast voor een betere leesbaarheid.
### 16.7 Trendlijn
Een trendlijn kan aan een gegevensreeks worden toegevoegd om trends in bestaande of voorspelde gegevens te visualiseren. Dit is mogelijk voor diverse 2D-grafiektypen.
### 16.8 Secundaire As instellen
Wanneer gegevensreeksen sterk variëren in omvang of van verschillende typen zijn, kan een secundaire as worden gebruikt om deze weer te geven, wat met name handig is bij gecombineerde kolom- en lijndiagrammen.
### 16.9 Voorwaardelijke grafiek
Door een standaardgrafiek te maken en vervolgens de ALS-functie te gebruiken om waarden boven of onder een bepaald punt te berekenen en de reeksen hierop aan te passen, kan een voorwaardelijke grafiek worden gecreëerd.
### 16.10 Gespiegelde grafiek
Om twee grafieken met verschillende waarden te spiegelen, wordt de basisgrafiek gekopieerd en worden de waarde-assen omgedraaid geplaatst, wat de illusie van één grafiek kan wekken.
### 16.11 Sparklines
Sparklines zijn kleine grafieken binnen een cel die een visuele weergave geven van gegevens in een rij of kolom. Ze zijn compact en helpen bij het snel identificeren van trends.
#### 16.11.1 Sparkline typen
Er zijn drie typen Sparklines: Lijn, Kolom en Winst/verlies.
#### 16.11.2 Sparkline type wijzigen
De lay-out en stijl van Sparklines kunnen worden aangepast, en er kunnen gegevensmarkeringen zoals hoogste, laagste, of negatieve waarden worden weergegeven.
#### 16.11.3 Sparklines degroeperen
Sparklines worden opgeslagen als groepen. Om een individuele Sparkline te bewerken, moet de groep eerst worden opgeheven.
#### 16.11.4 Sparklines verwijderen
Sparklines kunnen niet met de DELETE-toets worden verwijderd; dit vereist het gebruik van het tabblad "Sparkline" onder "Hulpmiddelen voor sparklines".
## 17 Draaitabellen en –grafieken
Draaitabellen en draaigrafieken zijn krachtige tools voor het samenvatten, analyseren, verkennen en visualiseren van grote hoeveelheden gegevens.
### 17.1 Gegevensbron draaitabel
De gegevens die gebruikt worden voor een draaitabel moeten eerst georganiseerd worden, idealiter als een tabel, om efficiënte analyse mogelijk te maken.
### 17.2 Draaitabel opmaken
De indeling en opmaak van een draaitabel kunnen worden aangepast voor betere leesbaarheid. Dit omvat het wijzigen van velden, kolommen, rijen, subtotalen en het toepassen van vooraf gedefinieerde stijlen. Numerieke waarden kunnen ook worden geformatteerd als percentages, valuta, etc.
### 17.3 Draaitabellen filteren en sorteren
Sorteren en filteren in draaitabellen helpt bij het organiseren van gegevens en het focussen op specifieke subsets voor diepgaandere analyse. Gegevens kunnen worden gegroepeerd, bijvoorbeeld datums in kwartalen en maanden.
### 17.4 Draaitabellen filteren met Slicers
Slicers bieden een dynamische en visuele manier om één of meerdere draaitabellen en -grafieken te filteren, en geven een duidelijk beeld van de huidige filterstatus.
### 17.5 Tijdlijn
Een tijdlijn is een dynamische filteroptie die specifiek voor datums en tijden is, en waarmee men eenvoudig kan filteren en inzoomen op specifieke periodes met een schuifregelaar.
### 17.6 Waarden samenvatten per
Samenvattingsfuncties zoals Som, Aantal en Gemiddelde kunnen worden gebruikt om waarden in een draaitabel te aggregeren. De standaardfunctie voor numerieke velden is SOM.
### 17.7 Waarden weergeven als
Met opties zoals "% van bovenliggend totaal" of "% van eindtotaal" kunnen percentages worden weergegeven in een draaitabel. Om dit te doen, moet het waardeveld mogelijk nogmaals worden toegevoegd aan het Waarden-gebied.
### 17.8 Berekende velden
Wanneer samenvattingsfuncties niet volstaan, kunnen berekende velden en items worden gecreëerd met aangepaste formules, die vervolgens automatisch worden meegenomen in de subtotalen en totalen van de draaitabel.
### 17.9 Draaitabellen en -grafieken
Draaitabellen bieden de mogelijkheid om gegevens samen te vatten en te analyseren, terwijl draaigrafieken deze gegevens visualiseren. Samen vormen ze een krachtige basis voor het nemen van weloverwogen beslissingen.
---
## Veelgemaakte fouten om te vermijden
- Bestudeer alle onderwerpen grondig voor examens
- Let op formules en belangrijke definities
- Oefen met de voorbeelden in elke sectie
- Memoriseer niet zonder de onderliggende concepten te begrijpen
Glossary
| Term | Definition |
|------|------------|
| Lint | Het lint is een band onder de titelbalk in Microsoft Excel die tabbladen bevat met groepen knoppen. Elke groep bevat commando's gerelateerd aan een specifieke taak, waardoor gebruikers snel toegang hebben tot de functionaliteiten van het programma. |
| Formulebalk | De formulebalk, gelegen onder het lint, toont de inhoud van de actieve cel. Hierin kunnen gegevens worden ingevoerd of gewijzigd, en formules worden weergegeven. Links hiervan bevindt zich het naamvak dat het adres van de actieve cel aangeeft. |
| Werkblad | Een werkblad is een individueel blad binnen een Excel-werkmap, waarin gegevens worden ingevoerd, bewerkt en geanalyseerd in cellen, rijen en kolommen. Een werkmap kan meerdere werkbladen bevatten. |
| Cel | Een cel is de kruising van een rij en een kolom in een Excel-werkblad, aangeduid met een uniek adres (bv. A1). Cellen kunnen gegevens bevatten zoals tekst, getallen, datums of formules. |
| Bereik | Een celbereik is een selectie van één of meer aaneengesloten cellen in een Excel-werkblad die samen een rechthoek vormen, aangeduid met de coördinaten van de linkerboven- en rechterbenedenhoek (bv. B2:D8). |
| Vulgreep | De vulgreep is een klein vierkantje in de rechterbenedenhoek van de actieve cel, waarmee gegevens, formules of reeksen naar aangrenzende cellen kunnen worden gekopieerd of doorgevoerd. |
| Absolute celadressen | Een absolute celadres, aangeduid met dollartekens (bv. $A$1), verwijst altijd naar dezelfde specifieke cel, ongeacht waar de formule wordt gekopieerd. |
| Relatieve celadressen | Een relatieve celadres (bv. A1) past zich automatisch aan wanneer een formule wordt gekopieerd naar een andere cel, waarbij de verwijzing wordt aangepast ten opzichte van de nieuwe locatie. |
| Gemengde celadressen | Een gemengd celadres combineert een absolute verwijzing (bv. $A) met een relatieve verwijzing (bv. 1), of vice versa (bv. A$1), waardoor slechts één deel van het adres vast blijft staan bij het kopiëren van formules. |
| Functie | Een functie in Excel is een ingebouwde, voorgedefinieerde formule die specifieke berekeningen uitvoert op basis van argumenten, zoals SOM() voor het optellen van getallen of GEMIDDELDE() voor het berekenen van een gemiddelde. |
| Tabel | In Excel kan een bereik van gegevens worden omgezet in een tabel. Dit biedt voordelen zoals automatische opmaak, gemakkelijke filtering en sortering, en de mogelijkheid om totaalrijen toe te voegen. |
| Voorwaardelijke opmaak | Voorwaardelijke opmaak past automatisch opmaak toe op cellen (bv. kleur, vetgedrukt) op basis van specifieke criteria of regels die zijn ingesteld, waardoor trends en patronen visueel duidelijker worden. |
| Grafiek | Een grafiek is een visuele representatie van gegevens in een werkblad, zoals een staaf-, lijn- of cirkeldiagram, die helpt bij het analyseren en presenteren van trends en vergelijkingen. |
| Draaitabel | Een draaitabel is een krachtig analysehulpmiddel dat grote datasets samenvat en presenteert in een interactieve en flexibele tabel, waarmee u gegevens kunt filteren, sorteren en groeperen om inzichten te verkrijgen. |
| Slicer | Een slicer is een interactief bedieningselement dat wordt gebruikt om draaitabellen en draaigrafieken te filteren. Het biedt een visuele weergave van de huidige filterstatus en maakt het gemakkelijk om gegevens subsets te selecteren. |
| Tekstfuncties | Tekstfuncties in Excel zijn ontworpen om tekstmanipulatie uit te voeren, zoals het samenvoegen van tekst (TEKST.SAMENVOEGEN), het wijzigen van hoofdletters (HOOFDLETTERS, KLEINE.LETTERS) of het extraheren van delen van een tekstreeks (LINKS, RECHTS, DEEL). |
| Datumfuncties | Datumfuncties in Excel maken het mogelijk om met datums en tijden te werken, zoals het extraheren van het jaar, de maand of de dag (JAAR, MAAND, DAG), het berekenen van werkdagen (NETTO.WERKDAGEN) of het manipuleren van tijdwaarden (UUR, MINUUT, SECONDE). |
| Logische functies | Logische functies, zoals de ALS-functie, voeren een logische test uit en retourneren een waarde op basis van het resultaat (WAAR of ONWAAR), waardoor beslissingen en voorwaardelijke berekeningen mogelijk worden. |
| Zoekfuncties | Zoekfuncties, zoals VERT.ZOEKEN en INDEX, worden gebruikt om specifieke waarden of informatie op te zoeken binnen tabellen of bereiken op basis van criteria, wat essentieel is voor het koppelen van gegevens. |
| Wiskundige functies | Wiskundige functies in Excel voeren diverse berekeningen uit, van basale rekenkunde tot complexere operaties, zoals afronden (AFRONDEN.N.VEELVOUD, AFRONDEN.BENEDEN.WISK, AFRONDEN.BOVEN.WISK). |
| Statistische functies | Statistische functies worden gebruikt om gegevens te analyseren en samenvattingen te produceren, zoals het berekenen van het gemiddelde (GEMIDDELDE, GEMIDDELDE.ALS), het tellen van cellen (AANTAL, AANTALARG, AANTAL.LEGE.CELLEN) of het toepassen van criteria op tellingen en gemiddelden (AANTALLEN.ALS, GEMIDDELDEN.ALS). |
| Gegevensvalidatie | Gegevensvalidatie stelt regels in om het type gegevens dat in een cel kan worden ingevoerd, te beperken, wat helpt bij het voorkomen van fouten en het waarborgen van de consistentie van de gegevensinvoer. |
Cover
Introduction To Programming-Goodnotes.pdf
Summary
# Introduction to computer science and programming concepts
This section introduces the foundational concepts of computer science, differentiating between coding and programming, tracing historical computing milestones, and exploring theoretical underpinnings like Turing machines and complexity theory.
## 1. Introduction to computer science and programming concepts
### 1.1 Coding vs. programming
Understanding the distinction between coding and programming is crucial for grasping the broader scope of computer science [2](#page=2).
* **Coding:** This refers to the practical ability to utilize a programming language to construct software programs, such as applications, games, or websites [2](#page=2).
* **Programming:** This encompasses coding as a foundational skill, but extends beyond it. Programming involves defining requirements, writing pseudocode, conceptualizing algorithms, optimizing code, testing, creating executables, and maintaining software [2](#page=2).
### 1.2 Historical milestones in computing
The evolution of computing can be traced through several key historical developments.
#### 1.2.1 Charles Babbage and the Analytical Engine
Charles Babbage (1791-1871) is credited with creating the first mechanical computers [2](#page=2).
* **The Analytical Engine:** This conceptual machine was designed to be programmable using punched cards. Although it never physically materialized, its design principles were remarkably similar to modern computers [2](#page=2).
#### 1.2.2 The ENIAC
The ENIAC (Electronic Numerical Integrator & Computer), completed in 1946, was the first electronic digital programmable computer [2](#page=2).
* **Architecture:** It was modular, composed of individual panels designed for different functions [2](#page=2).
* **Programming Method:** Initial programming involved physically switching cables, a complex task that could take weeks to map a problem onto the machine [2](#page=2).
* **Purpose:** ENIAC was developed for the U.S. Navy to compute trajectory tables, which required numerical solutions to differential equations for tasks like estimating missile trajectories based on wind, initial speed, and weather conditions [2](#page=2).
* **Human Computers:** Before ENIAC, these computations were performed by humans known as "computers," a role in which women's contributions were significant [3](#page=3).
### 1.3 Theoretical foundations of computer science
The theoretical underpinnings of computer science were significantly shaped by mathematicians and logicians in the early 20th century.
#### 1.3.1 The decision problem and undecidability
In the late 1800s, mathematicians began exploring the foundations of mathematics itself. David Hilbert proposed 23 foundational mathematical problems to be solved during the 20th century [3](#page=3).
* **Hilbert's Decision Problem:** This problem asked whether there exists a method to definitively determine if a given statement logically follows from other statements [3](#page=3).
* **Turing and Church's Contribution:** Around 1936, Alan Turing and Alonzo Church demonstrated that such a universal deciding procedure does not exist, proving that some statements are "undecidable" [3](#page=3).
#### 1.3.2 Algorithms and the Turing Machine
In their work on decidability, Turing and Church introduced the concept of an algorithm [3](#page=3).
* **Algorithm Definition:** An algorithm is defined as a finite sequence of mathematically rigorous instructions, typically used to solve a class of specific problems or perform a computation [3](#page=3) [5](#page=5).
* **The Turing Machine:** This is a theoretical model of computation [3](#page=3).
* **Components:** It consists of a tape, a read/write head, and a control unit that manages states and transitions [3](#page=3).
* **Functionality:** A Turing machine operates by reading symbols on the tape, changing its internal state, and writing new symbols or moving the tape [3](#page=3).
* **Universality:** It is considered a universal machine capable of computing any computable function. A computable function is one for which an algorithm exists to produce an output given an input [3](#page=3) [4](#page=4) [5](#page=5).
#### 1.3.3 Complexity theory
Turing and Church are also credited with establishing complexity theory [4](#page=4).
* **Core Concept:** Complexity theory categorizes algorithms into different complexity classes based on the time required to compute them [4](#page=4).
* **Practical Implications:** This means some algorithms, while theoretically computable, may require an impractical amount of time to execute in practice, potentially billions of years [4](#page=4).
### 1.4 Core concepts in computer science
Computer science is fundamentally concerned with the study of computation and computational systems [4](#page=4).
#### 1.4.1 What is a computer?
A computer is a versatile tool with several key functions [4](#page=4).
* **Data Storage:** It can store data, including numbers, words, images, and sounds [4](#page=4).
* **Device Interaction:** It interacts with various devices such as monitors, keyboards, and mice [4](#page=4).
* **Program Execution:** It runs programs, each designed to perform a specific function, from editing text to playing games or editing video [4](#page=4).
* **Versatility:** This ability to run diverse programs makes computers extremely versatile and flexible [4](#page=4).
#### 1.4.2 What is a program?
A program is a set of instructions executed by a computer to perform a specific activity or achieve a particular outcome [5](#page=5).
* **Execution:** Programs are sequences of instructions that are executed by a computer, involving decisions made by the machine [5](#page=5).
* **Complexity:** While programs can be highly sophisticated and perform complex functions, their primitive instructions are very basic [5](#page=5).
#### 1.4.3 What is programming?
Programming is the activity of designing, realizing, testing, and maintaining programs [5](#page=5).
* **Program Description:** A program describes the precise sequence of steps a computer must follow to accomplish a given task or solve a problem [5](#page=5).
#### 1.4.4 What is an algorithm?
As previously defined, an algorithm is a finite sequence of mathematically rigorous instructions used to solve a specific problem or perform a computation. A problem can only be solved algorithmically if an algorithm exists for it [3](#page=3) [5](#page=5).
> **Tip:** Remember that while "coding" is about writing instructions in a specific language, "programming" involves the entire lifecycle of problem-solving and software development, from conception to maintenance.
> **Tip:** The Turing machine, though theoretical, serves as a fundamental model for understanding the limits and capabilities of computation.
> **Tip:** Complexity theory helps us understand not just if a problem *can* be solved, but *how efficiently* it can be solved.
---
# Computer hardware and software components
A computer system is composed of interconnected hardware and software components, each playing a critical role in its functionality [6](#page=6).
### 2.1 Hardware components
Hardware refers to the physical, tangible parts of a computer system. These include essential elements such as the Central Processing Unit (CPU), main memory, secondary storage devices, and input/output (I/O) devices [6](#page=6) [7](#page=7).
#### 2.1.1 Central Processing Unit (CPU)
The CPU, also known as the processor or microprocessor, is the chip that executes program commands. It operates through a continuous fetch-decode-execute cycle [14](#page=14) [6](#page=6):
1. **Fetch:** Retrieve an instruction from main memory [14](#page=14).
2. **Decode:** Determine what the instruction is [14](#page=14).
3. **Execute:** Carry out the instruction [14](#page=14).
The CPU is comprised of several key units:
* **Arithmetic/Logic Unit (ALU):** Performs calculations and makes decisions [15](#page=15).
* **Control Unit:** Coordinates processing steps [15](#page=15).
* **Registers:** Small storage areas within the CPU [15](#page=15).
The speed of a CPU is governed by the system clock, which generates regular electronic pulses to coordinate CPU activities. CPU speed is typically measured in gigahertz (GHz) [15](#page=15).
#### 2.1.2 Main Memory (RAM)
Main memory, also known as Random Access Memory (RAM), serves as the primary storage area for programs and data that are in active use. It is a volatile form of storage, meaning its contents are lost when electric power is removed. Each cell in RAM stores a bit (0 or 1) and is composed of transistors and capacitors. RAM is a direct access device, allowing information to be reached directly. The terms RAM and main memory are often used interchangeably [13](#page=13) [14](#page=14) [6](#page=6) [7](#page=7).
> **Tip:** RAM is essentially a Read-Write Memory, contrasting with ROM.
#### 2.1.3 Secondary Storage Devices
Secondary storage devices provide long-term, non-volatile storage for data and programs. Unlike main memory, the information stored here is retained even when power is off. Examples include Hard Disk Drives (HDD) and Solid State Drives (SSD) . Information is moved between main memory and secondary storage as needed [13](#page=13) [7](#page=7).
Both main memory and disks are classified as direct access devices. This means data can be accessed directly, and the terms "direct access" and "random access" are often used interchangeably. In contrast, a magnetic tape is a sequential access device, requiring access to intervening data to reach specific information [13](#page=13).
##### 2.1.3.1 Storage Capacity
Storage capacity quantifies the number of bytes a memory device can hold and is expressed in various units [13](#page=13):
* **Kilobyte (KB):** $2^{10}$ = 1024 bytes.
* **Megabyte (MB):** $2^{20}$ (over 1 million) bytes.
* **Gigabyte (GB):** $2^{30}$ (over 1 billion) bytes.
* **Terabyte (TB):** $2^{40}$ (over 1 trillion) bytes.
* **Petabyte (PB):** $2^{50}$ (a very large amount) bytes.
#### 2.1.4 Input/Output (I/O) Devices
Input/Output (I/O) devices facilitate user interaction with the computer. They allow data to enter the system (input) and allow the system to present information to the user (output) [7](#page=7).
Common I/O devices include:
* **Input:** Keyboard, Mouse, Touch Screen.
* **Output:** Monitor Screen.
The size of a monitor is measured diagonally (e.g., 17 inches) . Monitors also have a maximum resolution, which indicates the number of picture elements (pixels) they can display, such as 1280 by 1024. A higher resolution results in sharper images [15](#page=15).
#### 2.1.5 Analog vs. Digital Data Storage
Computers primarily store and manage data in digital form, but understanding analog data is also important [8](#page=8).
* **Analog:** Data is continuous and directly proportional to the information it represents, like the grooves on a record album directly corresponding to voltage signals sent to a speaker [8](#page=8).
* **Digital:** Information is broken down into discrete pieces, with each piece represented separately. This often involves sampling the analog representation to record specific voltage levels at particular times, as seen in Compact Discs storing numbers representing these sampled levels [8](#page=8).
### 2.2 Software Components
Software is a set of instructions or programs that tell hardware what to do. It is essential for hardware to function and is categorized into operating systems and application programs [6](#page=6).
#### 2.2.1 Operating Systems (OS)
Operating systems are fundamental software that control all machine activities. They provide the user interface and manage system resources like the CPU and memory. Examples of operating systems include Windows, Mac OS, Unix, and Linux [8](#page=8).
#### 2.2.2 Application Programs
Application programs are a generic term for any other type of software that is not an operating system. These programs perform specific tasks for the user and can range from word processors and games to complex systems like missile control systems [8](#page=8).
> **Tip:** Many operating systems and application programs feature a Graphical User Interface (GUI), which provides a visual way for users to interact with the computer [8](#page=8).
---
# Data representation and binary systems
This section explains how computers store and process information using the binary number system [8](#page=8).
### 3.1 Analog vs. Digital Data Storage
There are two fundamental methods for storing and managing data: analog and digital [8](#page=8).
* **Analog:** This method stores information that is continuous and directly proportional to the data being represented. An example is music on a record album, where the needle's movement across grooves directly corresponds to the voltage sent to the speaker [8](#page=8).
* **Digital:** This method breaks information down into discrete pieces, with each piece represented separately. Digital music on a Compact Disc, for instance, stores numbers that represent specific voltage levels sampled at particular times [8](#page=8).
### 3.2 Digital Information Representation
Computers store all types of information digitally, including numbers, text, graphics, images, audio, video, and program instructions. Essentially, all information is digitized by being broken into pieces and represented numerically [9](#page=9).
#### 3.2.1 Representing text digitally
Every character, including spaces, digits, and punctuation, is stored as a specific number. Uppercase and lowercase letters are treated as distinct characters [9](#page=9).
### 3.3 Binary Numbers
Once information is digitized, it is represented and stored in memory using the binary number system [9](#page=9).
* **Bit:** A single binary digit (0 or 1) is called a bit. Its unit symbol is 'b' [9](#page=9).
* **Byte:** A byte consists of 8 bits. Its unit symbol is 'B' [9](#page=9).
A single bit can represent two possible states, akin to a light bulb being either on or off [1](#page=1) [9](#page=9).
#### 3.3.1 Bit permutations
The different permutations or combinations of bits are used to store values. The number of items that can be represented by a certain number of bits follows the formula $2^n$, where $n$ is the number of bits [10](#page=10).
* 1 bit can represent $2^1 = 2$ items [10](#page=10).
* 2 bits can represent $2^2 = 4$ items [10](#page=10).
* 3 bits can represent $2^3 = 8$ items [10](#page=10).
* 4 bits can represent $2^4 = 16$ items [10](#page=10).
* 5 bits can represent $2^5 = 32$ items [10](#page=10).
Each additional bit doubles the number of possible permutations [10](#page=10).
#### 3.3.2 Place value
* **Decimal numbers:** These are base-10 numbers and use ten digits (0-9). For example, the decimal number 8427 can be expressed as $8 \times 10^3 + 4 \times 10^2 + 2 \times 10^1 + 7 \times 10^0$ [10](#page=10).
* **Binary numbers:** These are base-2 numbers and use two digits (0-1). The binary number 1101 can be converted to decimal as $1 \times 2^3 + 1 \times 2^2 + 0 \times 2^1 + 1 \times 2^0 = 8 + 4 + 0 + 1 = 13$ [10](#page=10).
### 3.4 Converting Decimal to Binary
The process of converting a decimal number to its binary equivalent involves repeatedly dividing the decimal number by 2 and recording the remainders. The binary number is formed by reading these remainders from bottom to top [11](#page=11).
> **Example:** Converting the decimal number 180 to binary:
>
> * 180 ÷ 2 = 90 remainder 0
> * 90 ÷ 2 = 45 remainder 0
> * 45 ÷ 2 = 22 remainder 1
> * 22 ÷ 2 = 11 remainder 0
> * 11 ÷ 2 = 5 remainder 1
> * 5 ÷ 2 = 2 remainder 1
> * 2 ÷ 2 = 1 remainder 0
> * 1 ÷ 2 = 0 remainder 1
>
> Reading the remainders from bottom to top gives the binary representation: 10110100 [11](#page=11).
### 3.5 Storage Capacity
Every memory device has a storage capacity, which indicates the number of bytes it can hold. These capacities are expressed in various units [13](#page=13):
* **Kilobyte (KB):** $2^{10} = 1024$ bytes [13](#page=13).
* **Megabyte (MB):** $2^{20}$ (over 1 million) bytes [13](#page=13).
* **Gigabyte (GB):** $2^{30}$ (over 1 billion) bytes [13](#page=13).
* **Terabyte (TB):** $2^{40}$ (over 1 trillion) bytes [13](#page=13).
* **Petabyte (PB):** $2^{50}$ (a whole bunch) bytes. One Petabyte (1 PB) is one billion Megabytes [11](#page=11) [13](#page=13).
* **Exabyte (EB):** 1000 Petabytes [11](#page=11).
#### 3.5.1 Types of Memory and Access
* **Main memory:** This is volatile, meaning stored information is lost when electric power is removed. Main memory and disks are direct access devices, allowing information to be reached immediately. The terms "direct access" and "random access" are often used interchangeably [13](#page=13).
* **Second memory devices:** These are non-volatile [13](#page=13).
* **Magnetic tape:** This is a sequential access device, as data is arranged linearly, requiring access to intervening data to reach specific information [13](#page=13).
Common storage devices include Hard Disk Drives (HDD) and Solid State Drives (SSD) [13](#page=13).
---
# Java programming language fundamentals
This section introduces the fundamental concepts of the Java programming language, covering its creation, syntax, compilation and execution process, standard libraries, and basic program structure, including classes, methods, and comments.
### 4.1 Introduction to Java
Java is a programming language created by Sun Microsystems and introduced in 1995. A programming language uses a set of rules to define how words and symbols can be combined to form valid program statements. Java offers the advantage of writing code once and executing it on any computer that has a Java interpreter. It also provides a wide, operating system-independent standard library with numerous functionalities [16](#page=16).
The general process of programming involves three steps:
1. Writing the code (source code) [16](#page=16).
2. Compiling the source code to create executable code [16](#page=16).
3. Executing the code [16](#page=16).
Tools like the Java Development Kit (JDK) and Integrated Development Environments (IDEs) such as IntelliJ are used for Java development [16](#page=16).
### 4.2 Compilation and Execution
#### 4.2.1 Bytecode and the Java Virtual Machine (JVM)
Compiling Java source code produces executable code known as **bytecode**. Bytecode is the code intended for the Java Virtual Machine (JVM) [17](#page=17).
The process can be visualized as follows:
* **Source File:** `javac HelloTester.java` [17](#page=17).
* **Compiler:** Generates `HelloTester.class` (Java Class File) [17](#page=17).
To execute a program, a Java interpreter is used, which acts as a virtual CPU (JVM) on the user's machine. The JVM translates bytecode into machine code that the real CPU can understand [17](#page=17).
> **Tip:** The JVM is crucial for Java's platform independence, allowing the same bytecode to run on different hardware and operating systems.
#### 4.2.2 Interpreter vs. Compiler
Most high-level programming languages use either an interpreter or a compiler exclusively. Java, however, uses both a compiler and an interpreter [18](#page=18).
The process of programming involves taking source code and libraries, passing them through a compiler, and then an interpreter to run the program. This combination influences portability and execution speed [19](#page=19).
* **Interpreted Languages:** Programs are very portable but generally less efficient because translation to machine code happens each time the program runs [20](#page=20).
* **Compiled Languages:** Programs are highly efficient as translation occurs only once before execution, but executable files are not portable across different CPUs and require a specific compiler for each architecture [20](#page=20).
* **Java:** Offers a good compromise between portability and efficiency. Source files are compiled into bytecode, which is then interpreted on different CPUs [20](#page=20).
> **Tip:** If portability is the primary goal, interpreted languages are preferred. If efficiency is paramount, compiled languages are the choice. Java aims for a balance between the two.
### 4.3 Standard Libraries
Java's standard libraries are collections of classes that provide readily available functionalities. These libraries allow Java to interact with the operating system for tasks like writing to the standard output without requiring low-level, OS-specific knowledge [18](#page=18).
Some key packages and classes include:
* `java.lang`: Contains fundamental classes like `System` and `Math` [18](#page=18).
* `java.util`: Provides utility classes such as `Scanner` [18](#page=18).
* `java.net`: Includes classes for networking like `URL` and `Socket` [18](#page=18).
The `System` class from the standard library contains objects and methods for using system resources. The `out` object within `System` represents the standard output stream [22](#page=22).
### 4.4 Basic Java Program Structure
#### 4.4.1 Classes and Objects
A Java program is made up of one or more classes. Classes are fundamental to Java as they act as "producers of objects". For now, objects can be considered as manipulable elements within a Java program [21](#page=21) [24](#page=24).
* **Class Definition:** Starts with the reserved word `class` [21](#page=21).
* **Access Modifier:** The keyword `public` indicates that a class can be used by anyone [21](#page=21).
* **File Naming:** Each source file can contain only one public class, and its name must match the file name [21](#page=21).
#### 4.4.2 Methods
A method defines a sequence of instructions to perform a specific task. Methods must be defined within a class [21](#page=21).
* **`main` Method:** Every Java application must have exactly one `main` method, declared as `public static void main(String[] args)` [21](#page=21).
* `static`: Indicates that the `main` method does not interact with or modify objects of the class it belongs to [21](#page=21).
* `void`: Means the method does not return any value [21](#page=21).
* **Method Body:** Enclosed in curly braces `{}` and contains program statements that are executed sequentially [22](#page=22).
#### 4.4.3 Statements and Instructions
Program statements are the instructions within a method's body. Each instruction typically terminates with a semicolon `;` [22](#page=22) [24](#page=24).
An example of a single instruction is `System.out.println("Hello World!");`, which visualizes or writes a line of text to the standard output [22](#page=22).
> **Example:**
> `System.out.println;` prints the number 7 [7](#page=7).
> `System.out.println(3+4);` prints the result of the sum, which is 7.
> `System.out.println("3+4");` prints the literal string "3+4" [23](#page=23).
#### 4.4.4 Comments
Comments are used to explain code and are ignored by the compiler [22](#page=22).
* **Single-line comments:** Start with `//` [22](#page=22).
* **Multi-line comments:** Start with `/*` and end with `*/` [22](#page=22).
Comments can be placed almost anywhere in the code [24](#page=24).
### 4.5 Identifiers and Reserved Words
#### 4.5.1 Identifiers
Identifiers are the "words" used in a program [24](#page=24).
* **Composition:** Java identifiers can consist of letters, digits, and the underscore `_` or dollar sign `USD` characters [24](#page=24).
* **Restrictions:** Identifiers cannot begin with a digit [24](#page=24).
* **Case Sensitivity:** Java is case-sensitive, meaning `Total`, `total`, and `TOTAL` are distinct identifiers [24](#page=24).
Programmers often use different casing styles for various types of identifiers:
* Title case (e.g., `Lincoln`) for class names [24](#page=24).
* Uppercase (e.g., `MAXIMUM`) for constants [24](#page=24).
#### 4.5.2 Reserved Words
Reserved words, also known as keywords, have predefined meanings in Java and cannot be used for other purposes [24](#page=24).
Some common reserved words include: `abstract`, `boolean`, `break`, `byte`, `case`, `catch`, `char`, `class`, `continue`, `default`, `do`, `double`, `else`, `extends`, `final`, `finally`, `float`, `for`, `if`, `implements`, `import`, `instanceof`, `int`, `interface`, `long`, `native`, `new`, `null`, `package`, `private`, `protected`, `public`, `return`, `short`, `static`, `strictfp`, `super`, `switch`, `synchronized`, `this`, `throw`, `throws`, `transient`, `true`, `try`, `void`, `volatile`, `while`. Words marked with an asterisk (*) are reserved but not currently used [25](#page=25).
### 4.6 White Space
Spaces, blank lines, and tabs are collectively referred to as white space. White space is used to separate words and symbols in a program, and extra white space is ignored by the compiler [25](#page=25).
### 4.7 Programming Errors
Programming errors can be broadly categorized into:
* **Syntax Errors:** Violations of the language's grammatical rules, such as a missing semicolon or incorrect keyword usage [23](#page=23).
* **Logical Errors:** Errors in the program's logic that cause it to produce incorrect results, even if the syntax is valid [23](#page=23).
---
# Problem solving and algorithm design in Java
This topic explores the systematic approach to problem-solving through algorithm design, their translation into Java code, and the fundamental Java constructs of variables, data types, expressions, and data conversions.
### 5.1 The process of problem solving and algorithm design
An algorithm is a precise, executable, and terminating sequence of steps designed to solve a specific problem. This involves understanding the problem, developing and describing an algorithm, testing it with simple inputs, translating it into a programming language, and finally compiling and testing the resulting program [26](#page=26) [27](#page=27).
#### 5.1.1 Developing an algorithm
Algorithms can be described using pseudocode, which is an informal description of steps that is more detailed than natural language but less formal than a programming language. Pseudocode uses indentation to indicate control structures like selections and repetitions and clearly indicates how results are reported [27](#page=27).
**Example:** An algorithm to determine how many years it takes for an investment to double at a 5 percent annual interest rate:
1. Start with a year value of 0, an initial balance of USD 10,000, and a column for interest.
2. Repeat the following steps while the balance is less than USD 20,000:
* Increment the year value by 1.
* Calculate the interest as `balance * 0.05`.
* Add the calculated interest to the balance.
3. Report the final year value as the answer [26](#page=26).
#### 5.1.2 Testing algorithms
Algorithms should be tested with simple inputs to verify their correctness. For instance, if the interest rate changes to 20 percent, one can trace the algorithm's steps to find the new doubling time [28](#page=28).
#### 5.1.3 Example: Cell phone carrier charges
An algorithm can be designed for more complex scenarios, such as calculating monthly cell phone charges. This involves a base fee for a certain number of minutes and an additional charge for minutes exceeding that limit, plus taxes and fees [28](#page=28).
### 5.2 Fundamental Java programming constructs
#### 5.2.1 Character strings
A string literal in Java is represented by enclosing text within double quotes. Examples include `"This is a string literal!"` and `"123 Main Street"`. Every string literal is an object defined by the `String` class [29](#page=29).
##### 5.2.1.1 String concatenation
The `+` operator is used for string concatenation, appending one string to another. When used with strings, it performs concatenation; if both operands are numbers, it performs addition; if one operand is a string and the other is a number, it performs string concatenation [29](#page=29).
> **Tip:** A string literal cannot span multiple lines directly in code; this will result in a compiler error [29](#page=29).
##### 5.2.1.2 Escape sequences
Escape sequences are used to represent special characters within strings, beginning with a backslash (`\`). Common escape sequences include `\t` for tab, `\n` for newline, `\"` for a double quote, and `\\` for a backslash [30](#page=30).
**Example:** To print `"Thank you all for coming to my home tonight," he said mysteriously.`, the following `println` statement can be used:
`System.out.println ("\"Thank you all for " + "coming to my home\ntonight, \" he said " + "mysteriously. ");` [30](#page=30).
#### 5.2.2 Variables and assignment
A variable is a named memory location that stores a value. A variable declaration specifies its name and data type. After declaration, a variable's type cannot be changed, and it must be declared only once [30](#page=30) [31](#page=31).
##### 5.2.2.1 Variable initialization
Variables can be given an initial value during declaration. For example, `int sum = 0;`. When a variable is referenced, its current value is used [31](#page=31).
**Example:** The `PianoKeys.java` program demonstrates declaring and initializing an integer variable to store the number of piano keys:
```java
public class PianoKeys {
public static void main(String[] args) {
int keys = 88;
System.out.println("A piano has " + keys + " keys.");
}
}
```
This program outputs: `A piano has 88 keys.` [31](#page=31).
##### 5.2.2.2 Assignment
An assignment statement uses the `=` operator to change the value of a variable. The assigned value must be consistent with the variable's declared type [31](#page=31).
**Example:** The `Geometry.java` program illustrates how assignment statements can change the value stored in a variable:
```java
public class Geometry {
public static void main(String[] args) {
int sides = 7; // declaration with initialization
System.out.println("A heptagon has " + sides + " sides.");
sides = 10; // assignment statement
System.out.println("A decagon has " + sides + " sides.");
sides = 12;
System.out.println("A dodecagon has " + sides + " sides.");
}
}
```
This program outputs:
```
A heptagon has 7 sides.
A decagon has 10 sides.
A dodecagon has 12 sides.
```
[32](#page=32).
> **Tip:** The right and left sides of an assignment statement can contain the same variable, as in `count = count + 1;`, which increments the variable's value [36](#page=36).
#### 5.2.3 Constants
A constant is an identifier similar to a variable but holds a fixed value throughout its existence. In Java, constants are declared using the `final` modifier [32](#page=32).
**Example:** `final int MIN_HEIGHT = 69;` [32](#page=32).
Constants are beneficial for:
1. Giving meaning to literal values (e.g., `MAX_LOAD` is more descriptive than `250`) [32](#page=32).
2. Facilitating program maintenance, as a constant's value only needs to be updated in one place [32](#page=32).
3. Formally establishing that a value should not change, preventing inadvertent errors [32](#page=32).
#### 5.2.4 Primitive data types
Java has eight primitive data types:
* **Integers:** `byte`, `short`, `int`, `long` [32](#page=32).
* **Floating-point numbers:** `float`, `double` [32](#page=32).
* **Characters:** `char` [32](#page=32).
* **Boolean values:** `boolean` [32](#page=32).
##### 5.2.4.1 Numeric primitive data
The difference between numeric primitive types lies in their storage size and the range of values they can hold [33](#page=33).
| Type | Storage | Min Value | Max Value |
| :------ | :------ | :-------------------- | :------------------ |
| `byte` | 8 bits | -128 | 127 |
| `short` | 16 bits | -32,768 | 32,767 |
| `int` | 32 bits | -2,147,483,648 | 2,147,483,647 |
| `long` | 64 bits | \~ -9 x 1018 | \~ 9 x 1018 |
| `float` | 32 bits | +/- 3.4 x 1038 | +/- 3.4 x 1038 |
| `double`| 64 bits | +/- 1.7 x 10308| +/- 1.7 x 10308|
*Note: `float` has approximately 7 significant digits, while `double` has approximately 15 significant digits.* [33](#page=33).
##### 5.2.4.2 Characters
A `char` variable stores a single character, delimited by single quotes (e.g., `'a'`, `'X'`, `'7'`). Character literals are distinct from string literals [33](#page=33).
* **Character sets:** Character sets are ordered lists where each character corresponds to a unique number. Java's `char` type uses the Unicode character set, which uses 16 bits per character and supports 65,536 unique characters, accommodating international symbols and characters from various languages [33](#page=33).
* **ASCII:** The older ASCII character set is a subset of Unicode and includes uppercase and lowercase letters, digits, punctuation, special symbols, and control characters [34](#page=34).
* **Character literals:** Characters can be represented using Unicode escape sequences (e.g., `\u005B`) or directly as character literals (e.g., `'9'`) [34](#page=34).
**Example:**
`char c = '\u005B';`
`System.out.println(c);` // Prints the character corresponding to the Unicode value.
`char d = '9';`
`System.out.println(d);` // Prints the character '9'. [34](#page=34).
##### 5.2.4.3 Boolean
A `boolean` value represents a true or false condition. The reserved words `true` and `false` are the only valid values for this type. Boolean variables can also represent states like a light bulb being on or off [34](#page=34).
**Example:** `boolean clone = false;` [34](#page=34).
#### 5.2.5 Expressions
An expression is a combination of operators and operands that produces a result [35](#page=35).
##### 5.2.5.1 Arithmetic expressions
Arithmetic expressions compute numeric results using operators like addition (`+`), subtraction (`-`), multiplication (`*`), division (`/`), and remainder (`%`). If any operand is a floating-point value, the result will be a floating-point value [35](#page=35).
##### 5.2.5.2 Division and remainder
* When both operands of the division operator (`/`) are integers, the result is an integer, with the fractional part discarded. For example, `14 / 3` equals `4`, and `8 / 12` equals `0` [35](#page=35).
* The remainder operator (`%`) returns the remainder after division. For example, `14 % 3` equals `2` (since 14 = 3 * 4 + 2), and `8 % 12` equals `8` [35](#page=35).
##### 5.2.5.3 Operator precedence
Operators have a defined precedence that determines the order of evaluation in complex expressions. Multiplication, division, and remainder are evaluated before addition, subtraction, and string concatenation. Parentheses (`()`) have higher precedence than other operators and can be used to enforce a specific evaluation order [36](#page=36).
**Example:** In `result = total + count / max - offset;`, the division `count / max` is performed first, followed by addition and subtraction based on their left-to-right evaluation [36](#page=36).
##### 5.2.5.4 Expression trees
Expression trees can visually represent the evaluation order of expressions, where operators lower in the tree have higher precedence within that expression [36](#page=36).
##### 5.2.5.5 Increment and decrement operators
The increment (`++`) and decrement (`--`) operators are unary operators that add or subtract 1 from their operand [37](#page=37).
* **Postfix form (`count++`):** The expression evaluates to the original value of `count` before the increment [37](#page=37).
* **Prefix form (`++count`):** The expression evaluates to the value of `count` after the increment [37](#page=37).
**Example:**
`int count = 3;`
`int value = count++;`
`System.out.println(value);` // Prints 3 (original value of count)
`System.out.println(count);` // Prints 4 (incremented value)
`int count = 3;`
`int value = ++count;`
`System.out.println(value);` // Prints 4 (incremented value)
`System.out.println(count);` // Prints 4 (incremented value)
[37](#page=37).
#### 5.2.6 Assignment operators
Assignment operators provide a shorthand for common assignment operations [38](#page=38).
| Operator | Example | Equivalent to |
| :------- | :----------- | :---------------- |
| `+=` | `x += y` | `x = x + y` |
| `-=` | `x -= y` | `x = x - y` |
| `*=` | `x *= y` | `x = x * y` |
| `/=` | `x /= y` | `x = x / y` |
| `%=` | `x %= y` | `x = x % y` |
If the operands are strings, `+=` performs string concatenation [38](#page=38).
#### 5.2.7 Data conversion
Data conversion, or casting, allows converting a value from one data type to another. These conversions do not change the variable's type but convert a value for a specific computation [38](#page=38).
##### 5.2.7.1 Widening and narrowing conversions
* **Widening conversions:** These are generally safer as they convert from a smaller data type to a larger one (e.g., `short` to `int`). Information is typically not lost [39](#page=39).
* **Narrowing conversions:** These can lose information as they convert from a larger data type to a smaller one (e.g., `int` to `short`) [39](#page=39).
| From | To | Type of Conversion |
| :------ | :---------------------------------------- | :----------------- |
| `byte` | `short`, `int`, `long`, `float`, `double` | Widening |
| `short` | `int`, `long`, `float`, `double` | Widening |
| `char` | `int`, `long`, `float`, `double` | Widening |
| `int` | `long`, `float`, `double` | Widening |
| `long` | `float`, `double` | Widening |
| `float` | `double` | Widening |
| `byte` | `char` | Narrowing |
| `short` | `byte`, `char` | Narrowing |
| `char` | `byte`, `short` | Narrowing |
| `int` | `byte`, `short`, `char` | Narrowing |
| `long` | `byte`, `short`, `char`, `int` | Narrowing |
| `float` | `byte`, `short`, `char`, `int`, `long` | Narrowing |
| `double`| `byte`, `short`, `char`, `int`, `long`, `float` | Narrowing |
*Note: `char` uses 16 bits and ranges from 0 to 65,535.* [39](#page=39).
##### 5.2.7.2 Types of data conversions in Java
1. **Assignment conversion:** Occurs when a value of one type is assigned to a variable of another type. Only widening conversions can happen via assignment. If a narrowing conversion is attempted, the compiler will issue an error, requiring an explicit cast [40](#page=40).
* **Example (Widening):**
```java
int dollars = 20;
double money = dollars; // Widening conversion: int to double
```
* **Example (Narrowing - requires cast):**
```java
double money = 20.7;
int dollars = (int) money; // Narrowing conversion: double to int
```
2. **Promotion:** Happens automatically when operators in expressions convert their operands. This is also only widening [40](#page=40).
* **Example:**
```java
int count = 12;
double sum = 490.27;
double result = sum / count; // count is promoted to double for division
```
The value of `count` is converted to a `double` to perform the division calculation [40](#page=40).
3. **Casting:** The most powerful, and potentially dangerous, technique for conversion, allowing both widening and narrowing conversions. The type to convert to is placed in parentheses before the value [41](#page=41).
* **Example:**
```java
int total = 50;
float result = (float) total / 6; // Explicit cast to float
```
Without the cast, the fractional part of the answer would be lost due to integer division [41](#page=41).
**Quiz:**
`double d = 5.0;`
`int i = d / 3;`
`System.out.println(i);`
**Answer:** This code has a syntax error. Automatic narrowing is not performed. You must cast: `int i = (int) d / 3;` [41](#page=41).
**Quiz:**
`char c = 65;`
`System.out.println(c);`
`int i = (char) -65;`
`System.out.println(i);`
**Answer:** The ASCII/Unicode decimal number for 'A' is 65, so the first `println` prints `A`. For the second part, `(char) -65` results in the character with decimal value 65471 (due to 16-bit representation wrapping around), so the second `println` prints `65471` [41](#page=41).
---
# Interactive programming and object-oriented concepts
This section covers how to create interactive programs by reading user input and introduces fundamental object-oriented programming (OOP) concepts in Java.
### 6.1 Interactive programming with the Scanner class
Interactive programs require input from the user to operate. The `Scanner` class, found in the `java.util` library, provides convenient methods for reading input values of various data types [42](#page=42).
#### 6.1.1 Reading user input
To read input from the keyboard, a `Scanner` object must be created, associated with the `System.in` object [42](#page=42).
**Creating a Scanner object:**
```java
Scanner scan = new Scanner(System.in);
```
The `new` operator instantiates the `Scanner` object. This object can then be used to invoke various input methods [42](#page=42).
**Input methods:**
* `nextLine()`: Reads all input until the end of the line is found and returns it as a `String` [42](#page=42).
* `next()`: Reads the next input token, separated by whitespace, and returns it as a `String`. Whitespace includes spaces, tabs, and new line characters [43](#page=43).
* `nextInt()`: Reads an integer value from the input [43](#page=43).
* `nextDouble()`: Reads a double-precision floating-point value from the input [43](#page=43).
> **Tip:** The `Scanner` class must be imported into a program using `import java.util.Scanner;` before it can be used [42](#page=42) [43](#page=43).
> **Example:** The `Echo.java` program demonstrates reading a line of text from the user using `nextLine()` and printing it back. The `GasMileage.java` program shows how to use `nextInt()` and `nextDouble()` to calculate fuel efficiency [43](#page=43).
### 6.2 Object-oriented concepts
Object-oriented programming (OOP) builds programs around "objects," which are entities manipulated by calling their methods [45](#page=45).
#### 6.2.1 Objects and methods
An **object** is an entity in a program that has behaviors and data. A **method** is a sequence of instructions that can access an object's data and define its behaviors. You interact with objects by calling their methods [45](#page=45) [49](#page=49).
> **Example:** `System.out` is an object of the `PrintStream` class that has methods like `println()` and `print()`. `String` objects, such as `"Hello World"`, also have associated methods like `toUpperCase()` [45](#page=45) [46](#page=46) [49](#page=49).
#### 6.2.2 Classes
A **class** describes a set of objects that share the same behavior. It acts as a blueprint for creating objects. All objects of a given class share a common set of methods [46](#page=46) [49](#page=49).
* The `PrintStream` class defines methods for its objects, like `println()` and `print()`, to write to different destinations [46](#page=46).
* The `String` class provides methods applicable to all `String` objects [46](#page=46).
The collection of methods available for an object forms its **public interface**, specifying what actions can be performed with it. The internal implementation details of how these actions are carried out are hidden [49](#page=49).
> **Example:** A `String` object knows about its letters, but it doesn't know how to send itself to a console window or a file. This functionality is provided by methods defined in other classes, like `PrintStream` [46](#page=46).
#### 6.2.3 Variables
Variables are used to store values that can be used later in a program [46](#page=46).
* **Declaration:** A variable is declared with its type and name, optionally followed by an initial value [46](#page=46) [47](#page=47).
* Syntax: `typeName variableName = value;` or `typeName variableName;` [46](#page=46).
* **Types:**
* `int`: Used for whole numbers without fractional parts [47](#page=47).
* `double`: Used for floating-point numbers [47](#page=47).
* `String`: Used for sequences of characters [47](#page=47).
* **Naming Rules:**
* Must start with a letter or underscore (`_`).
* Remaining characters can be letters, numbers, or underscores.
* Cannot use symbols like `USD%` or spaces.
* Use uppercase letters to denote word boundaries (e.g., `milesPerGallon`), a convention called camel case [48](#page=48).
* Cannot use reserved Java keywords (e.g., `double`, `class`) [48](#page=48).
* Java convention: variable names start with a lowercase letter, and class names start with an uppercase letter [48](#page=48).
* **Assignment:** The assignment operator (`=`) is used to change the value of a variable. The right-hand side of the assignment can be a mathematical expression [48](#page=48).
* Syntax: `variableName = value;` [49](#page=49).
* A variable can appear on both sides of the assignment operator, allowing its value to be updated based on its current value [48](#page=48) [49](#page=49).
> **Tip:** Always use descriptive variable names that indicate their purpose. Supplying an initial value when declaring a variable is generally good practice [46](#page=46) [48](#page=48).
> **Common Error:** It is an error to use a variable that has not been assigned a value [47](#page=47) [48](#page=48).
#### 6.2.4 Method arguments and return values
* **Arguments (Parameters):** Most methods require values to provide details about the task they need to perform. These input values are called arguments or parameters [50](#page=50).
* `System.out.println("greeting");` - Here, the string `"greeting"` is an argument passed to the `println` method [50](#page=50).
* **Return Values:** Methods can return a computed value back to the caller.
* The `toUpperCase()` method, when called on a `String` object, returns a new `String` object with all characters converted to uppercase [50](#page=50).
> **Example:**
> ```java
> String river = "Mississippi";
> String bigRiver = river.toUpperCase(); // bigRiver will be "MISSISSIPPI"
> ```
> In this example, `toUpperCase()` is a method called on the `river` object, and it returns a new `String` object which is then assigned to `bigRiver` [50](#page=50).
### 6.3 Mathematical operations
Java's `Math` class provides methods for mathematical computations [45](#page=45).
* `Math.sqrt(x)`: Computes the square root of a number `x` [45](#page=45).
* `Math.pow(x, n)`: Computes `x` raised to the power of `n` ($x^n$) [45](#page=45).
* Compound interest calculation often uses `Math.pow`:
$$ \text{Amount} = P \times (1 + r/100)^n $$
This can be represented in Java as `principal * Math.pow(1 + rate / 100, numberOfYears)` [45](#page=45).
### 6.4 Project example: Tic Tac Toe Runner
The Tic Tac Toe Runner game project utilizes the `Scanner` class to read user commands and input for playing the game. This includes reading game mode choices (P, Q, I), row numbers (1-3), and column numbers (1-3). The program is designed to run, allow a full game, display the board, detect wins/draws, and accept specific commands. A welcome message is also an output of the program [51](#page=51) [52](#page=52).
---
## Common mistakes to avoid
- Review all topics thoroughly before exams
- Pay attention to formulas and key definitions
- Practice with examples provided in each section
- Don't memorize without understanding the underlying concepts
Glossary
| Term | Definition |
|------|------------|
| Coding | The act of using a programming language to create a software program, such as an application, game, or website. |
| Programming | The broader discipline that encompasses coding, along with defining requirements, writing pseudocode, thinking of algorithms, optimizing code, testing code, creating executables, and maintaining code. |
| Babbage Analytical Engine | A mechanical computer designed by Charles Babbage in the 19th century, featuring programmability via punched cards and a structure similar to modern computers, though it was never fully built. |
| ENIAC | The first electronic digital programmable computer, completed in 1946. It was modular, composed of individual panels, and programming involved switching cables, a complex and time-consuming task. |
| Algorithm | A finite sequence of mathematically rigorous instructions designed to solve a specific class of problems or perform a computation. |
| Turing Machine | A theoretical model of computation proposed by Alan Turing, representing a universal machine capable of computing any computable function. It consists of a tape, a head, and a set of states and instructions. |
| Complexity Theory | A field within computer science that studies the resources (such as time and memory) required to solve computational problems, categorizing algorithms into different complexity classes. |
| Computer | A tool that stores data, interacts with devices, and runs programs to perform specific functions, characterized by its versatility and flexibility due to the many programs it can execute. |
| Program | A sequence of instructions that are executed by a computer to perform a specific activity or function, often very sophisticated yet built from basic primitive instructions. |
| Hardware | The physical, tangible parts of a computer system, including components like the keyboard, monitor, wires, and chips. |
| Software | A program or set of programs that instructs a computer on what to do and how to do it. |
| CPU (Central Processing Unit) | The primary chip in a computer responsible for executing program commands and performing calculations. |
| Main Memory (RAM) | The primary storage area within a computer where programs and data in active use are held for quick access by the CPU. It is volatile, meaning its contents are lost when power is removed. |
| RAM (Random Access Memory) | A synonym for main memory, characterized by its ability to directly access any memory location. |
| ROM (Read-Only Memory) | A type of memory that can be read from but not written to, often containing essential system instructions or firmware. |
| Volatile Memory | Memory that loses its stored information when the power supply is interrupted. RAM is a prime example. |
| Non-volatile Memory | Memory that retains its stored information even when the power supply is interrupted. Secondary storage devices like hard drives are non-volatile. |
| Direct Access | A method of accessing data where any piece of information can be reached directly, without having to go through intermediate data. RAM and disk drives are direct access devices. |
| Sequential Access | A method of accessing data where information is arranged in a linear order, and access to a particular piece of data requires passing through all preceding data. Magnetic tapes are sequential access devices. |
| Microprocessor | A small chip that contains the CPU and its associated circuitry. |
| Fetch-Decode-Execute Cycle | The fundamental cycle performed by the CPU: fetching an instruction from memory, decoding it to understand its purpose, and executing the instruction. |
| System Clock | A component that generates electronic pulses at regular intervals, coordinating the activities of the CPU and controlling its speed. |
| Pixel | A single picture element, representing the smallest controllable element of a picture represented on a screen. Resolution is often measured by the number of pixels. |
| Java | A high-level, object-oriented programming language introduced in 1995, known for its "write once, run anywhere" capability and extensive standard libraries. |
| Source Code | The human-readable code written by programmers in a programming language before it is compiled or interpreted. |
| Bytecode | An intermediate code generated by a Java compiler that is platform-independent. It is executed by the Java Virtual Machine (JVM). |
| JVM (Java Virtual Machine) | A virtual CPU that interprets Java bytecode, allowing Java programs to run on any platform that has a compatible JVM installed. |
| Compiler | A program that translates source code written in a high-level programming language into machine code or an intermediate code (like bytecode) that a computer can execute. |
| Interpreter | A program that directly executes instructions written in a programming language, typically line by line or statement by statement, without a separate compilation step. |
| Portability | The ability of a program to be executed on different types of computer systems or hardware without modification. Interpreted languages are generally more portable than compiled languages. |
| Efficiency | The measure of how effectively a program uses resources, particularly execution speed and memory usage. Compiled languages are typically more efficient than interpreted languages. |
| Class | In object-oriented programming, a blueprint or template for creating objects. It defines the properties (attributes) and behaviors (methods) that objects of that class will have. |
| Object | An instance of a class, representing a specific entity in a program with its own data and behaviors. |
| Method | A sequence of instructions within a class that performs a specific task or behavior. Methods are invoked on objects to make them perform actions. |
| `main` method | The entry point of a Java application. A Java program must have exactly one `main` method, which is the first method to be executed when the program runs. |
| `public static void main(String[] args)` | The standard signature for the main method in Java. `public` means it's accessible from anywhere, `static` means it can be called without creating an object of the class, `void` means it doesn't return a value, and `String[] args` represents command-line arguments. |
| Comments | Text within a program that is ignored by the compiler or interpreter but provides explanations for human readers. In Java, comments can be single-line (`//`) or multi-line (`/* ... */`). |
| Reserved Words | Words that have a predefined meaning in a programming language and cannot be used as identifiers (e.g., `class`, `public`, `int`). |
| White Space | Spaces, tabs, and blank lines used in a program to improve readability by separating words and symbols. Extra white space is typically ignored by the compiler. |
| Pseudocode | An informal, high-level description of the steps of an algorithm or program, using natural language mixed with programming-like constructs. It is used for planning before writing actual code. |
| String Literal | A sequence of characters enclosed in double quotes (`"`) that represents a text value in a program. |
| `System.out.println()` | A Java method used to print output to the console, followed by a newline character. |
| `System.out.print()` | A Java method used to print output to the console without advancing to the next line. |
| String Concatenation | The process of joining two or more strings together to form a single string, typically using the `+` operator. |
| Escape Sequence | A sequence of characters starting with a backslash (`\`) that represents a special character, such as a newline (`\n`) or a tab (`\t`). |
| Variable | A named storage location in memory that holds a value of a specific data type. The value stored in a variable can be changed during program execution. |
| Variable Declaration | The process of specifying a variable's name and the type of data it will hold. |
| Variable Initialization | The process of assigning an initial value to a variable when it is declared. |
| Assignment Statement | A statement that changes the value of a variable by assigning a new value to it using the assignment operator (`=`). |
| Constant | An identifier whose value cannot be changed after it has been assigned. In Java, constants are declared using the `final` modifier. |
| Primitive Data Types | Basic data types in Java that directly store values, such as integers (`byte`, `short`, `int`, `long`), floating-point numbers (`float`, `double`), characters (`char`), and boolean values (`boolean`). |
| `char` | A primitive data type in Java used to store a single character. Character literals are enclosed in single quotes (e.g., `'A'`). |
| Unicode | A character encoding standard that supports a vast number of characters from various languages and symbols, using 16 bits per character. |
| ASCII | An older and smaller character encoding standard that is a subset of Unicode, commonly used for English characters, numbers, and symbols. |
| `boolean` | A primitive data type in Java that can hold one of two values: `true` or `false`. |
| Expression | A combination of operators, operands, and values that produces a result when evaluated. |
| Operator Precedence | A set of rules that determines the order in which operators are evaluated in an expression. Parentheses have the highest precedence. |
| Increment Operator (`++`) | An operator that increases the value of a variable by 1. It can be used in postfix (`variable++`) or prefix (`++variable`) form. |
| Decrement Operator (`--`) | An operator that decreases the value of a variable by 1. It can be used in postfix (`variable--`) or prefix (`--variable`) form. |
| Assignment Operators | A set of operators that combine an arithmetic or bitwise operation with assignment (e.g., `+=`, `-=`, `*=`, `/=`, `%=`). |
| Data Conversion | The process of changing a value from one data type to another. This can be widening (safe, e.g., `int` to `double`) or narrowing (can lose information, e.g., `double` to `int`). |
| Widening Conversion | A data conversion where a value is converted from a smaller data type to a larger one, typically without loss of information. |
| Narrowing Conversion | A data conversion where a value is converted from a larger data type to a smaller one, which may result in a loss of information. |
| Casting | An explicit technique used to perform data conversions, especially narrowing conversions, by placing the target data type in parentheses before the value. |
| `Scanner` Class | A Java utility class used for reading input from various sources, including user input from the keyboard via `System.in`. |
| Token | An element of input separated by whitespace. The `Scanner` class can read input as individual tokens. |
| `Math.sqrt()` | A Java method in the `Math` class that calculates the square root of a number. |
| `Math.pow()` | A Java method in the `Math` class that calculates a number raised to a specified power. |
| Arguments (Parameters) | Values passed to a method when it is called, providing the method with the necessary information to perform its task. |
| Public Interface | The set of methods and behaviors that a class makes available for external use, defining how other parts of a program can interact with its objects. |
| Implementation | The internal details of how a class's methods perform their tasks. This is hidden from external users and can be changed without affecting the public interface. |
Cover
ITIL_SNE_2526.pdf
Summary
# Introductie tot ITIL
Dit hoofdstuk introduceert ITIL als een raamwerk van richtlijnen voor IT-dienstverlening, de noodzaak ervan, de voordelen en de mogelijke valkuilen, en definieert kernbegrippen [6](#page=6) [7](#page=7).
### 1.1 Wat is ITIL?
ITIL staat voor Information Technology Infrastructure Library. Het is een verzameling van richtlijnen, best practices en procesbeschrijvingen voor het leveren van IT-diensten aan klanten. Deze richtlijnen zijn gedocumenteerd in een reeks boeken. ITIL kan worden vergeleken met een set minimumvereisten voor het openen van een restaurant of een bakkerij, waarbij naast de kernactiviteit (koken of bakken) ook aspecten als personeel, logistiek, inkoop en locatie essentieel zijn. Hoewel de basis in IT ligt, kunnen de principes van ITIL ook worden toegepast in andere afdelingen, zoals HR. Door ITIL toe te passen, kan een organisatie maximale waarde creëren voor klanten door processen en diensten optimaal af te stemmen op hun behoeften [7](#page=7) [8](#page=8) [9](#page=9).
### 1.2 Waarom ITIL?
Het beheer van ICT wordt steeds complexer door verschillende factoren. Hiertoe behoren de versnelde invoering van ICT in bedrijfsprocessen, globalisering, de combinatie van on-premise en cloudapplicaties, de snelheid van software-implementaties, decentralisatie van bevoegdheden en kostenbeperkingen. ITIL brengt structuur in deze complexe ICT-omgeving [11](#page=11) [12](#page=12).
> **Tip:** De toenemende complexiteit van ICT-beheer maakt een gestructureerde aanpak zoals ITIL essentieel voor effectieve dienstverlening.
### 1.3 Voordelen van ITIL
Het gebruik van ITIL biedt diverse voordelen voor organisaties:
#### 1.3.1 Beter zicht op de totale kost (TCO)
Door alle processen duidelijk in kaart te brengen, krijg je een beter inzicht in de totale kosten (Total Cost of Ownership - TCO) van een product of dienst over de gehele levensduur. De TCO omvat zowel directe kosten (rechtstreeks toe te wijzen aan een product/dienst, zoals aankoop-, materiaal- en arbeidskosten) als indirecte kosten (noodzakelijk voor het functioneren, zoals administratiekosten, salaris van supportmedewerkers, kantoorruimte) [14](#page=14) [15](#page=15).
ITIL helpt ook bij het identificeren van verborgen kosten, dit zijn onverwachte kosten die pas optreden tijdens gebruik, beheer of onderhoud. Voorbeelden hiervan zijn downtime, overuren en fouten. Jaarlijks gaat wereldwijd 3,2 miljard dollars mis aan inkomsten door IT-infrastructuuruitval. Gemiddeld kan een personeelslid twee werkweken per jaar niet productief zijn door IT-problemen. Ook onderhoud en training van gebruikers zijn significante kostenposten; 80% van de kostprijs van een computer in een bedrijf ontstaat na de initiële aankoop van hardware en software [16](#page=16) [17](#page=17).
#### 1.3.2 Productiviteitverhoging
ITIL zorgt ervoor dat aanwezige personeelsleden zo efficiënt mogelijk worden ingezet door duidelijke rollen en verantwoordelijkheden te definiëren. Implementatie van ITIL op een helpdesk heeft geleid tot een toename van 19% in het aantal behandelde incidenten en een daling van 40% in de behandeltijd per incident [19](#page=19).
#### 1.3.3 Implementatie van standaard aanpak
ITIL wordt succesvol toegepast in veel bedrijven, wat heeft geleid tot een gedeelde woordenschat binnen de sector. De populariteit van ITIL komt voort uit het feit dat het niet product-gebonden is, flexibel kan worden aangepast aan de specifieke behoeften van een bedrijf, en dat organisaties zelf kunnen kiezen welke onderdelen zij implementeren [20](#page=20).
### 1.4 Valkuilen van ITIL
Bij de implementatie van ITIL kunnen verschillende valkuilen optreden:
* Gebrek aan motivatie en betrokkenheid van het management [22](#page=22).
* Te grote focus op theoretische modellen en diagrammen [22](#page=22).
* Instructies die niet worden neergeschreven of up-to-date gehouden [22](#page=22).
* Een te ambitieuze aanpak van het bedrijf [22](#page=22).
> **Tip:** Het is cruciaal om een realistische implementatieplanning te hanteren en draagvlak te creëren bij het management om de valkuilen van ITIL te vermijden.
### 1.5 Begrippen
#### Service/dienst
Een service is een manier om waarde te leveren aan klanten door ervoor te zorgen dat zij de gewenste resultaten behalen, zonder dat zij de specifieke kosten en risico's hoeven te dragen die voortkomen uit het verlenen van de dienst. Klanten zijn primair geïnteresseerd in het resultaat, niet in het proces dat daartoe leidt [24](#page=24).
---
# ITIL 4 en de service waardeketen
ITIL 4 introduceert het service waardesysteem (SVS) als de kern van het creëren van waarde voor de klant. Het SVS beschrijft hoe verschillende componenten en activiteiten binnen een organisatie samenwerken om deze waarde te realiseren [31](#page=31).
### 2.1 Het ITIL service waardesysteem (SVS)
Het SVS is gericht op het creëren van waarde, waarbij de concepten 'Opportunity' (opportuniteit of vraag) en 'Value' (waarde) centraal staan [31](#page=31).
* **Opportunity / Demand (opportuniteit / vraag):** Dit vertegenwoordigt een kans om waarde te creëren voor eindgebruikers, of wanneer er nieuwe behoeften voor producten of diensten ontstaan bij interne of externe klanten [32](#page=32).
* **Value (waarde):** Dit is het uiteindelijke resultaat van het SVS, bestaande uit de producten of diensten die worden geleverd en waarmee het bedrijf waarde genereert [32](#page=32).
### 2.2 Continual improvement (continue verbetering)
Continue verbetering binnen ITIL 4 vereist het uitvoeren van metingen om verbetermogelijkheden te identificeren. Dit gebeurt met behulp van Key Performance Indicators (KPI's) [35](#page=35).
* **Key Performance Indicator (KPI):** Een meetbare waarde die aangeeft in hoeverre een organisatie, team of proces zijn doelen bereikt [35](#page=35).
**Voorbeelden van KPI's:**
* **Service desk:**
* Aantal oplossingen via de eerste lijn [36](#page=36).
* Gemiddelde duur voor het oplossen van incidenten [36](#page=36).
* Aantal incidenten met prioriteit 1 [36](#page=36).
* Percentage van prioriteit 1 incidenten opgelost binnen de afgesproken tijd (SLA) [36](#page=36).
* **Technische metingen:**
* Beschikbaarheid van een systeem [36](#page=36).
* Capaciteit (bv. percentage van capaciteit tijdens normale en piekbelasting) [36](#page=36).
* **Dienstmetingen (end-to-end):**
* Beschikbaarheid conform afspraken in een SLA of OLA [36](#page=36).
* Aantal dienstonderbrekingen in een bepaalde periode [36](#page=36).
* Klanttevredenheid [36](#page=36).
**Soorten overeenkomsten:**
* **Service Level Agreements (SLA):** Afspraken tussen klant en dienstverlener, onderhandeld door de Service Level Manager (SLM) [37](#page=37).
* **Operational Level Agreements (OLA):** Afspraken tussen verschillende diensten of afdelingen van de dienstverlener, onderhandeld door de SLM [37](#page=37).
* **Contracten:** Afspraken tussen de dienstverlener en een leverancier, onderhandeld door de Supplier Manager [37](#page=37).
> **Tip:** Een SLA garandeert een bepaalde serviceniveau aan de eindklant, terwijl een OLA afspraken binnen de eigen organisatie vastlegt om die SLA te kunnen waarmaken [37](#page=37).
### 2.3 RACI model
Het RACI-model is een methode om de verantwoordelijkheden binnen een proces of project duidelijk te definiëren en verwarring te voorkomen, vooral in projecten waar diverse profielen samenwerken. De afkorting RACI staat voor [43](#page=43):
* **R - Responsible (Verantwoordelijk):** Degene die verantwoordelijk is voor het uitvoeren van de taak [45](#page=45).
* **A - Accountable (Eindverantwoordelijk):** Degene die de eindverantwoordelijkheid draagt voor het resultaat van de taak. Er mag slechts één persoon 'A' zijn per taak [45](#page=45) [49](#page=49).
* **C - Consulted (Geraadpleegd):** Degene die geraadpleegd moet worden (tweerichtingsverkeer). Te veel 'C' kan leiden tot traagheid in besluitvorming [45](#page=45) [49](#page=49).
* **I - Informed (Geïnformeerd):** Degene die geïnformeerd moet worden (éénrichtingsverkeer). Te weinig 'I' kan wijzen op onvoldoende communicatie binnen een team [45](#page=45) [49](#page=49).
**Belangrijke opmerkingen over het RACI-model:**
* 'A' en 'R' zijn niet per se dezelfde persoon [48](#page=48) [49](#page=49).
* Elke taak zou idealiter één 'A' moeten hebben [49](#page=49).
* Als er slechts één 'R' is, wordt die persoon ook geacht eindverantwoordelijk te zijn, hoewel het beter is om dan ook een 'A' toe te kennen [48](#page=48).
* Te veel 'R's is ongewenst, en het ontbreken van enige 'R' betekent dat niemand de taak zal uitvoeren [49](#page=49).
### 2.4 Practices (praktijken)
ITIL 4 categoriseert zijn praktijken in drie groepen: General management practices, Service management practices en Technical management practices. Hieronder volgt een overzicht van enkele belangrijke praktijken [53](#page=53):
**General Management Practices:**
* **Continual Improvement:** Het faciliteren van verbeteringen van producten en diensten [53](#page=53).
* **Information Security Management:** Het beschermen van informatie, data en IT-services door vertrouwelijkheid, integriteit en beschikbaarheid te waarborgen. Dit omvat preventie, detectie en correctie van incidenten [54](#page=54) [55](#page=55).
* **Supplier Management:** Het beheren van relaties met leveranciers, inclusief contracten, prestatieopvolging en onderhandelingen [56](#page=56).
* **Portfolio Management:** Het beheren van alle investeringen van een organisatie in haar portfolio van producten en diensten [53](#page=53).
* **Risk Management:** Het minimaliseren van de kans op en impact van risico's [53](#page=53).
* **Service Financial Management:** Het beheren van de financiële aspecten van het leveren van diensten [53](#page=53).
* **Strategy Management:** Het definiëren van de visie, strategie en tactiek van de organisatie [53](#page=53).
**Service Management Practices:**
* **Availability Management:** Zorgt ervoor dat diensten een overeengekomen niveau van beschikbaarheid hebben (uptime). Uptime is de periode waarin een systeem naar behoren functioneert, terwijl downtime de periode is waarin dit niet het geval is [57](#page=57) [58](#page=58).
* **Capacity Management:** Zorgt ervoor dat de capaciteit van diensten en hulpbronnen tijdig en kosteneffectief voldoet aan de vraag, zowel nu als in de toekomst [59](#page=59).
* **Change Control:** Beheert alle veranderingen die van invloed zijn op een dienst, om risico's te minimaliseren en succesvolle implementaties te waarborgen. Er zijn drie soorten changes [60](#page=60):
* **Normal Change:** Volgt de standaardprocedure, vereist beoordeling, goedkeuring en planning [62](#page=62).
* **Standard Change:** Vooraf goedgekeurde routinehandelingen met laag risico en beperkte impact [62](#page=62).
* **Emergency Change:** Noodzakelijke wijzigingen die zo snel mogelijk moeten worden uitgevoerd, maar nog steeds goedkeuring vereisen [62](#page=62).
* **Incident Management:** Het minimaliseren van de negatieve impact van incidenten door de normale dienstverlening zo snel mogelijk te herstellen. Een incident is een ongeplande onderbreking of kwaliteitsvermindering van een dienst. Incidenten worden geprioriteerd op basis van hun impact op de business [65](#page=65) [66](#page=66).
* **Problem Management:** Zoekt naar de onderliggende oorzaak van incidenten om structurele oplossingen te implementeren en herhaling te voorkomen. Dit onderscheidt zich van incident management, dat zich richt op snelle herstel via (eventuele) workarounds [69](#page=69) [70](#page=70).
* **Service Catalogue Management:** Beheert de informatie over alle diensten en service-opties die beschikbaar zijn voor klanten [53](#page=53).
* **Service Level Management:** Zorgt ervoor dat de IT-dienstverlening voldoet aan de huidige en toekomstige businessbehoeften via continue verbetering van servicelevels [53](#page=53).
**Technical Management Practices:**
* **Deployment Management:** Brengt de nieuwe of gewijzigde software, hardware of documentatie naar de live omgeving [53](#page=53).
* **Infrastructure and Platform Management:** Houdt toezicht op de infrastructuur en platforms die nodig zijn om diensten te leveren [53](#page=53).
* **Software Development and Management:** Zorgt ervoor dat applicaties voldoen aan de eisen van de stakeholders met betrekking tot functionaliteit, kwaliteit, prijs en tijdlijn [53](#page=53).
> **Voorbeeld:** Een server die uitvalt is een **incident**. Het snel herstellen van de service, bijvoorbeeld door de server te herstarten, is **incident management**. Het onderzoeken waarom de server uitviel om herhaling te voorkomen, is **problem management**. Het plannen en uitvoeren van een serverupgrade om de stabiliteit te verbeteren, is een **normal change** die voortkomt uit problem management [74](#page=74).
---
# ITIL-praktijken en hun toepassing
Dit gedeelte beschrijft de praktische toepassing van diverse ITIL-praktijken, waaronder Asset & Configuration Management, Monitoring & Event Management, Release Management, Service Request Management en Deployment Management.
### 3.1 Asset & configuration management
Asset & Configuration Management zorgt voor actuele informatie over de middelen die een proces gebruikt, en garandeert dat alle benodigde informatie over de configuratie van diensten en hun componenten (Configuration Items - CI's) beschikbaar is. Een CI is een eenheid binnen een configuratiebeheersysteem en kan bestaan uit hardware, software of netwerkcomponenten. De beheerde informatie omvat welke CI's er zijn, hoe ze geconfigureerd zijn, en de relaties tussen deze CI's [75](#page=75).
Het hoofddoel van Asset & Configuration Management is het waarborgen van traceerbaarheid, zodat bij een incident nagegaan kan worden welke CI's betrokken zijn, waar ze gebruikt worden, wie ze gebruikt en wat hun kenmerken zijn. Tevens maakt het een impactanalyse mogelijk om te bepalen welke andere componenten mogelijk geïmpacteerd zijn door een incident [76](#page=76).
> **Tip:** De concepten van Asset & Configuration Management kunnen worden geïllustreerd aan de hand van een thuisomgeving. Een huis kan gezien worden als een asset, bestaande uit materialen, aantallen, ramen, dak, etc. De inventarisatie van ramen en hun maten voor het project "nieuwe gordijnen" is vergelijkbaar met het opmaken van een inventaris in ICT [78](#page=78) [79](#page=79).
Voorbeelden van CI's in een IT-context zijn componenten van een e-maildienst, zoals de mailserver, firewall, clients, databases, en de Acceptable Use Policy (AUP) [80](#page=80).
Configuration items worden opgeslagen in een Configuration Management Database (CMDB), waarin ook eigenschappen, statussen en relaties tot andere componenten worden bijgehouden. Voorbeelden van relaties zijn "is een onderdeel van", "is samengesteld door", en "is geïnstalleerd op". Eigenschappen van een computerscherm kunnen bijvoorbeeld "Merk HP" en "24 inch" zijn. Statussen kunnen variëren, zoals "Development", "Test" of "Geïnstalleerd" voor software, en "Nieuw", "Actief" of "Inactief" voor een laptop [81](#page=81).
### 3.2 Monitoring & event management
Monitoring & Event Management heeft als doel om diensten en hun componenten (CI's) systematisch te volgen, events (gebeurtenissen) te rapporteren en erop te reageren. Een event wordt gedefinieerd als een significante verandering in de status van een CI of IT-dienst, herkend door notificaties van een monitoringstool. Het monitoringgedeelte observeert diensten en CI's en detecteert events, terwijl het event managementgedeelte zich richt op het registreren en beheren van deze events [82](#page=82).
Event Management kan worden toegepast op alles wat gemeten en eventueel geautomatiseerd kan worden, zoals Configuration Items (bv. het pingen van een server), omgevingsvoorwaarden (bv. temperatuur in een serverlokaal), softwarelicenties, en netwerkbeveiliging (bv. detectie van indringers) [83](#page=83).
Events kunnen worden geclassificeerd in drie categorieën [84](#page=84):
* **Informational events:** Geven aan dat er iets ongewoons is gebeurd, maar de dienst functioneert nog. Ze vereisen geen onmiddellijke actie, maar wel opvolging [84](#page=84).
* **Warning events:** Duiken op wanneer iets gebeurt dat mogelijk een negatief effect kan hebben op de dienst. Ze treden op als een bepaalde drempel wordt overschreden (bv. rookalarm in serverruimte). Directe actie kan incidenten voorkomen [84](#page=84).
* **Exception events:** Een waarschuwing die aangeeft dat er iets abnormaals is gebeurd met een directe impact op de dienst. Dit leidt vaak tot een incident of een change en vereist onmiddellijke actie [84](#page=84).
Een voorbeeld van een monitoringstool is de Windows Event Logger [85](#page=85).
### 3.3 Release management
Release Management richt zich op het creëren, testen en uitrollen van releases in een productieomgeving volgens een vooraf overeengekomen plan en planning, in akkoord met klanten en stakeholders. Een release omvat het beschikbaar maken van nieuwe en gewijzigde diensten of functionaliteiten voor gebruik [86](#page=86).
Belangrijke aspecten van Release Management zijn:
* Zorgen dat alle release packages traceerbaar zijn en geïnstalleerd, getest, geverifieerd of ongeïnstalleerd kunnen worden [86](#page=86).
* De mogelijkheid tot een rollback indien nodig [86](#page=86).
* Kennisoverdracht naar klanten en gebruikers zodat zij de dienst kunnen gebruiken, en naar operations teams zodat zij de oplossing kunnen beheren en ondersteunen [86](#page=86).
### 3.4 Service request management
Service Request Management gaat over het afhandelen van verzoeken en vragen van gebruikers met betrekking tot dienstverlening, conform gemaakte afspraken over de kwaliteit en het niveau van de dienstverlening [87](#page=87).
Voorbeelden van service requests zijn het opvragen van een rapport, het vervangen van een toner cartridge, vragen over de openingstijden van de servicedesk, aanvragen voor de levering van hardware zoals smartphones of laptops, toegang tot bestanden of mappen, en feedback of klachten over softwareversies [87](#page=87).
Het onderscheid tussen een service request en een incident is belangrijk: een incident is iets wat eerst wel werkte maar nu niet meer [87](#page=87).
#### 3.4.1 Service Desk
Een Service Desk behandelt incidenten en service requests met als doel deze zelf succesvol op te lossen of door te geven aan een ander team. Het fungeert als een single-point-of-contact voor klanten met problemen over de dienstverlening. De werking van een Service Desk kan variëren van een lokaal team tot een virtueel, geconnecteerd team met of zonder automatisering. Een Service Desk is gericht op dienstverlening aan de klant en kan ook ondersteuning bieden aan business en klanten, zoals bij de bestelling van nieuwe hardware of het geven van trainingen. Samenwerking met support- en developmentteams is essentieel [88](#page=88).
De taken van een Service Desk omvatten:
* Het loggen van relevante incidenten of aanvragen [89](#page=89).
* Eerstelijnsonderzoek en diagnose van problemen [89](#page=89).
* Het oplossen van problemen en beantwoorden van aanvragen, en het escaleren naar andere diensten indien nodig [89](#page=89).
* Gebruikers informeren over de status van hun probleem of aanvraag [89](#page=89).
* Het afsluiten van opgeloste problemen en aanvragen [89](#page=89).
* Het meten van de gebruikerstevredenheid [89](#page=89).
Er zijn verschillende soorten Service Desks:
* **Lokale Service Desk:** Fysiek aanwezig op de locatie van de gebruiker [90](#page=90).
* **Gecentraliseerde Service Desk:** Biedt ondersteuning vanuit één centrale locatie waar alle supporttickets worden beheerd [90](#page=90).
* **Virtuele Service Desk:** Personeel kan zich op verschillende locaties bevinden en via een gedeeld systeem en gelijke procedures werken [90](#page=90).
* **Follow the Sun:** Medewerkers zijn wereldwijd verspreid, waardoor 24x7 ondersteuning mogelijk is zonder nachtwerk [90](#page=90).
### 3.5 Deployment management
Deployment Management heeft als doel om nieuwe of aangepaste hardware, software, documentatie, processen of andere componenten in live omgevingen te introduceren. Dit proces hangt nauw samen met release management en change control. Deployment kan betrekking hebben op infrastructuur (soms "provisioning" genoemd) of software [91](#page=91).
Deployment kan op verschillende manieren plaatsvinden, vaak in combinatie [92](#page=92):
* **Phased deployment (gefaseerde uitrol):** Uitrol per soort gebruikers, per gebouw, per land, of per departement [92](#page=92).
* **Continuous delivery:** Componenten worden continu getest, gedeployed en geleverd, met frequente feedbackloops van gebruikers. Een voorbeeld hiervan zijn nieuwe versies van Microsoft 365 [92](#page=92).
* **Big bang:** Nieuwe of aangepaste componenten worden in één keer naar alle doelgroepen uitgerold [92](#page=92).
* **Pull deployment:** Nieuwe of aangepaste software wordt beschikbaar gesteld in een repository, waarna gebruikers de software kunnen downloaden naar hun apparaten wanneer zij dat wensen, waardoor zij de timing van updates zelf kunnen bepalen [92](#page=92).
---
# Toepassingen van ITIL in de praktijk
Dit hoofdstuk verkent de praktische toepassingen van ITIL binnen diverse organisaties en belicht het belang van ITIL-certificering voor IT-professionals [95](#page=95).
### 3.1 Voorbeelden van ITIL-toepassingen in de praktijk
ITIL wordt door een breed scala aan organisaties geïmplementeerd om hun IT-dienstverlening te verbeteren.
#### 3.1.1 Telecom en streamingdiensten
* **Vodafone**: een leverancier van mobiele en vaste telecom- en internetdiensten voor consumenten en bedrijven, maakt gebruik van ITIL-principes om zijn dienstverlening te structureren en te optimaliseren [96](#page=96).
* **Spotify**: als leverancier van muziek- en streamingdiensten, kan ITIL ingezet worden om de continuïteit en kwaliteit van de dienstverlening te waarborgen [97](#page=97).
#### 3.1.2 Diversen sectoren
Naast telecom en streaming, wordt ITIL ook toegepast in andere sectoren:
* **Disney**: zet ITIL in om te garanderen dat gasten een optimale ervaring hebben in de themaparken [98](#page=98).
* **Financiële sector**: vele Belgische en internationale banken en verzekeringsmaatschappijen gebruiken ITIL [98](#page=98).
* **IT Support bedrijven**: zoals Cegeka, maken eveneens gebruik van ITIL voor hun dienstverlening [98](#page=98).
### 3.2 Het belang van ITIL-certificering
ITIL-certificering is van waarde voor professionals die werkzaam zijn in de IT-ondersteuning en IT Service Management [99](#page=99).
#### 3.2.1 Voordelen van ITIL-certificering
Een ITIL-certificering biedt diverse voordelen:
* **Verbeterde voorbereiding en beheersing**: Kennis van ITIL stelt professionals in staat hun werk beter te beheersen, wat leidt tot verhoogde productiviteit en efficiëntie [99](#page=99).
* **Professionele vooruitgang**: Certificering kan bijdragen aan professionele groei en mogelijk leiden tot een beter salaris, naast het fungeren als officiële erkenning van kennis [99](#page=99).
* **Standaardisatie in communicatie**: Door het hanteren van de ITIL-terminologie spreken IT-professionals een breed geaccepteerde en erkende taal, wat de communicatie over de industrieën en gebieden heen vergemakkelijkt [99](#page=99).
* **Holistisch perspectief**: ITIL biedt een holistisch beeld van de integratie tussen IT en de bedrijfsdoelstellingen. Dit geeft professionals een beter perspectief op IT-initiatieven en helpt ervoor te zorgen dat beslissingen aansluiten bij hogere bedrijfsdoelen [99](#page=99).
> **Tip:** Hoewel ervaring belangrijk is, is een ITIL-certificering een officiële erkenning die de kennis van een professional aantoont en hun waarde op de arbeidsmarkt vergroot [99](#page=99).
---
## Veelgemaakte fouten om te vermijden
- Bestudeer alle onderwerpen grondig voor examens
- Let op formules en belangrijke definities
- Oefen met de voorbeelden in elke sectie
- Memoriseer niet zonder de onderliggende concepten te begrijpen
Glossary
| Term | Definition |
|------|------------|
| ITIL | Een verzameling van richtlijnen, best practices en procesbeschrijvingen voor het leveren van IT-diensten aan klanten. Het helpt organisaties om maximale waarde te creëren voor hun klanten door processen en diensten af te stemmen op de behoeften. |
| TCO (Total Cost of Ownership) | De totale kostprijs van een product of dienst over de gehele levensduur, inclusief directe en indirecte kosten. Dit helpt bedrijven bij het nemen van strategische beslissingen. |
| Directe kosten | Kosten die rechtstreeks toe te wijzen zijn aan een specifiek product of dienst, zoals aankoopkosten, materiaalkosten en directe arbeidskosten. |
| Indirecte kosten | Kosten die niet direct aan een product of dienst toe te wijzen zijn, maar wel essentieel zijn voor de productie of het functioneren ervan, zoals administratiekosten en huurkosten. |
| Verborgen kosten | Onverwachte kosten die pas tijdens het gebruik, beheer of onderhoud van IT-middelen optreden, zoals downtime of overuren. Deze kosten worden vaak vergeten omdat ze niet onmiddellijk zichtbaar zijn. |
| Kerndienst | De fundamentele functionaliteit die een klant specifiek vraagt of nodig heeft om een bepaald resultaat te behalen. |
| Enabling service | Een ondersteunende dienst die essentieel is om de levering van een kerndienst mogelijk te maken, zoals beveiligingsmaatregelen of de software voor e-mailtoepassingen. |
| Enhancing service | Een aanvullende dienst die wordt aangeboden om een organisatie te onderscheiden van concurrenten en extra waarde te bieden aan klanten, zoals extra functies of verbeterde prestaties. |
| Klant | De entiteit die betaalt voor de IT-diensten en het resultaat ervan verwacht. |
| Eindgebruiker | De persoon die het IT-product of de dienst daadwerkelijk gebruikt, maar niet noodzakelijk degene is die beslist over de aankoop of contracten. |
| Leverancier (Supplier) | Een externe partij die goederen of diensten levert die een organisatie nodig heeft om haar eigen diensten te kunnen leveren. |
| KPI (Key Performance Indicator) | Een meetbare waarde die aangeeft in welke mate een organisatie, team of proces zijn gestelde doelen bereikt. Dit helpt bij het monitoren van prestaties. |
| SLA (Service Level Agreement) | Een formele overeenkomst die de kwaliteit, beschikbaarheid en andere servicevoorwaarden definieert tussen een klant en een dienstverlener. |
| OLA (Operational Level Agreement) | Een overeenkomst die de serviceverplichtingen vastlegt tussen verschillende interne diensten of afdelingen binnen een organisatie, ter ondersteuning van een SLA. |
| Contract | Een formele afspraak tussen een dienstverlener en een externe leverancier, waarin wederzijdse verplichtingen en voorwaarden worden vastgelegd. |
| RACI model | Een tool om de verantwoordelijkheden binnen een proces of project duidelijk te maken: Responsible (uitvoerend), Accountable (eindverantwoordelijk), Consulted (geraadpleegd), Informed (ingelicht). |
| Uptime | De periode waarin een systeem, applicatie of dienst naar behoren functioneert en beschikbaar is voor gebruik. |
| Downtime | De periode waarin een systeem, applicatie of dienst niet functioneert en niet beschikbaar is, wat kan leiden tot productiviteitsverlies en financiële schade. |
| Change | Elke toevoeging, aanpassing of verwijdering van een component dat invloed heeft op een IT-dienst. Dit vereist een gestructureerd beheerproces. |
| RFC (Request For Change) | Een formele aanvraag voor een wijziging aan een IT-dienst of infrastructuur, die beoordeeld en goedgekeurd moet worden voordat deze wordt geïmplementeerd. |
| Incident | Een ongeplande onderbreking of vermindering in de kwaliteit van een IT-dienst, die de normale bedrijfsvoering beïnvloedt en zo snel mogelijk hersteld moet worden. |
| Workaround | Een tijdelijke oplossing voor een incident die de dienstverlening herstelt zonder de onderliggende oorzaak van het probleem aan te pakken. |
| CI (Configuration Item) | Een component van een IT-infrastructuur of dienst (hardware, software, documentatie) waarvan de configuratiegegevens worden beheerd, zoals servers, applicaties en netwerkapparatuur. |
| CMDB (Configuration Management Database) | Een database waarin alle Configuration Items (CI's) en hun onderlinge relaties, eigenschappen en statussen worden opgeslagen en beheerd. |
| Event | Een belangrijke verandering in de status van een Configuration Item (CI) of IT-dienst, die wordt gedetecteerd door monitoringtools en kan leiden tot actie. |
| Release | Het beschikbaar maken van nieuwe en gewijzigde diensten, functionaliteiten of softwareversies voor gebruik in de productieomgeving, volgens een gepland proces. |
Cover
lecture_02_architecture_large.pdf
Summary
# Web architecture and the HTTP protocol
This section outlines the fundamental client-server model of web architectures, detailing the process of fetching a webpage and the structure and methods of HTTP requests and responses [2](#page=2).
### 1.1 Client-server web architecture
The web operates on a client-server model, where clients (typically web browsers) request resources from servers. When a user types a URL like `http://www.vub.be` into their browser, a series of steps is initiated [2](#page=2):
1. **DNS lookup:** The Domain Name Service (DNS) is queried to translate the human-readable domain name (`www.vub.be`) into its corresponding IP address (e.g., `134.184.255.9`) [2](#page=2).
2. **TCP connection:** A Transmission Control Protocol (TCP) connection is established to the server's IP address [2](#page=2).
3. **HTTP request:** An HTTP request message is sent over the established TCP connection to the server [2](#page=2).
4. **HTTP response and visualization:** The server processes the request, fetches the requested resource, and sends back an HTTP response message, which the browser then renders [2](#page=2) [3](#page=3).
### 1.2 Web server tasks
A web server is responsible for handling incoming HTTP requests and delivering resources. Its core tasks include [3](#page=3):
* Establishing a connection with the client [3](#page=3).
* Receiving and processing HTTP requests [3](#page=3).
* Fetching the requested resource (e.g., an HTML file, image) [3](#page=3).
* Creating and sending an HTTP response message back to the client [3](#page=3).
* Logging requests and responses for auditing and analysis [3](#page=3).
Prominent web servers include nginx, IIS, and the Apache HTTP Server. Many devices, such as printers, WLAN routers, and TVs, also feature embedded web servers [3](#page=3).
### 1.3 The HTTP protocol
HTTP (Hypertext Transfer Protocol) is the foundation of data communication for the World Wide Web [6](#page=6).
* **Request/response model:** It operates on a request/response communication model, where clients initiate all communication [6](#page=6).
* **Stateless nature:** HTTP is a stateless protocol, meaning it does not inherently maintain session information between requests [6](#page=6).
* **Transport layer:** HTTP can run over various reliable transport protocols, with TCP being the most common. It typically uses TCP port 80 by default [6](#page=6).
* **HTTPS:** The HTTPS scheme signifies encrypted connections, providing security through protocols like SSL/TLS [6](#page=6).
### 1.4 HTTP message format
HTTP messages, both requests and responses, share a common format consisting of a start line, header fields, a blank line, and an optional message body [8](#page=8).
The general structure can be represented as:
`HTTP_message = start_line, {header}, "CRLF", {body};` [8](#page=8).
* **Start line:** The first line of an HTTP message, which is specific to either a request or a response [10](#page=10) [9](#page=9).
* **Header fields:** A collection of key-value pairs providing metadata about the message [8](#page=8).
* **Blank line:** A Carriage Return Line Feed (CRLF) separates the headers from the message body [8](#page=8).
* **Message body:** Contains the actual data being transferred (e.g., HTML content, form data), and is optional [8](#page=8).
> **Tip:** The `CRLF` is crucial as it signifies the end of the header section and the beginning of the body, or the end of the message if there is no body [8](#page=8).
### 1.5 HTTP request messages
An HTTP request message is sent by the client to the server [9](#page=9).
* **Start line:** The request-specific start line includes the method, the requested resource, and the HTTP version. The general format is [9](#page=9):
`start_line = method, " ", resource, " ", version;` [9](#page=9).
* **Methods:** These indicate the action the client wants to perform on the server's resource. Common methods include [9](#page=9):
* `GET`: Retrieve a resource [9](#page=9).
* `HEAD`: Retrieve only the headers of a resource [9](#page=9).
* `POST`: Send data to the server, typically for creating or updating a resource [9](#page=9).
* `PUT`: Upload a resource to the server [9](#page=9).
* `TRACE`: Perform a message loop-back test [9](#page=9).
* `OPTIONS`: Query the server about the communication options it supports [9](#page=9).
* `DELETE`: Request the deletion of a resource [9](#page=9).
* **Resource:** This can be a complete URL or a path to the resource on the server [9](#page=9).
* **Version:** Specifies the HTTP protocol version, such as `HTTP/1.1` [9](#page=9).
> **Example:** A `GET` request for the root of a website might look like:
> ```
> GET / HTTP/1.1
> Host: www.example.com
> ```
> [4](#page=4) [9](#page=9).
### 1.6 HTTP response messages
An HTTP response message is sent by the server back to the client [10](#page=10).
* **Start line:** The response-specific start line includes the HTTP version, a status code, and a reason phrase. The general format is [10](#page=10):
`start_line = version, status_code, reason;` [10](#page=10).
* **Status codes:** These codes indicate the outcome of the request. They are categorized as follows [10](#page=10):
* `1xx` (Informational): The request was received and is continuing the process [10](#page=10).
* `2xx` (Success): The action was successfully received, understood, and accepted (e.g., `200 OK`) [10](#page=10).
* `3xx` (Redirection): Further action needs to be taken by the client to complete the request [10](#page=10).
* `4xx` (Client Error): The request contains bad syntax or cannot be fulfilled (e.g., `404 Not Found`) [10](#page=10).
* `5xx` (Server Error): The server failed to fulfill a valid request (e.g., `503 Service Unavailable`) [10](#page=10).
* **Version:** The HTTP protocol version used by the server [10](#page=10).
* **Reason:** A short text phrase describing the status code (e.g., "OK", "Not Found") [10](#page=10).
> **Example:** A successful response might start with:
> ```
> HTTP/1.1 200 OK
> ```
> [10](#page=10) [5](#page=5).
### 1.7 HTTP header fields
Header fields provide additional information about the request or response. They can be categorized into general headers, request headers, response headers, entity headers, and extension headers [11](#page=11) [8](#page=8).
Key header fields include:
* **`Accept` (Request Header):** Specifies the media types (MIME types) the client can understand [11](#page=11).
* **`User-Agent` (Request Header):** Identifies the client software (e.g., browser) making the request [11](#page=11).
* **`Keep-Alive` / `Persistent` (General Header):** Used in HTTP/1.0 and HTTP/1.1 respectively to enable persistent connections, reducing the overhead of establishing a new connection for each element on a webpage [11](#page=11).
* **`Content-Type` (Entity Header):** Indicates the MIME type of the message body [11](#page=11).
* **`If-Modified-Since` (Request Header):** Used with `GET` requests (conditional GET) to fetch a resource only if it has been modified since a specified date [12](#page=12).
* **`Expires` (Response Header):** Specifies an expiration date after which a cached resource is considered stale [17](#page=17).
* **`Cache-Control` (Response Header):** Provides directives for caching mechanisms, such as `max-age` (maximum age in seconds) or `no-cache` (requiring revalidation before serving from cache) [17](#page=17).
> **Tip:** Understanding common HTTP headers is crucial for debugging network requests and optimizing web performance [11](#page=11) [12](#page=12) [17](#page=17).
### 1.8 Developers tools and testing HTTP
Various developer tools can be used to inspect HTTP messages, such as the developer console in web browsers (e.g., Chrome's F12 or Ctrl+Shift+I). Simple telnet connections can also be used to manually send HTTP requests and observe responses [14](#page=14).
> **Example:** Using telnet to send an HTTP request:
> ```bash
> telnet wise.vub.ac.be 80
> GET /beat-signer HTTP/1.1
> Host: wise.vub.ac.be
> ```
> [14](#page=14).
HTTP/2.0, introduced in May 2015 and inspired by Google's SPDY development, offers performance enhancements over HTTP/1.1 [14](#page=14).
### 1.9 Proxies
A web proxy server acts as an intermediary between a client and a server, serving as a server to the client and a client to the server. Proxies are used for [15](#page=15):
* **Firewalls and content filtering:** To control access to websites [15](#page=15).
* **Transcoding:** On-the-fly transformation of HTTP message bodies, for example, to adapt content for different devices [15](#page=15).
* **Content routing:** To select the optimal server in content distribution networks [15](#page=15).
* **Anonymous browsing:** To mask the client's IP address [15](#page=15).
### 1.10 Caches
A proxy cache is a specialized proxy server that stores frequently accessed resources to reduce server load and latency [16](#page=16).
* **Caching hierarchies:** Caches are often organized in multi-level hierarchies (e.g., continental, national, regional) [16](#page=16).
* **Cache types:** Caches can be passive (storing responses) or active (prefetching resources) [16](#page=16).
* **HTTP cache control:** Special HTTP header fields like `Expires`, `Cache-Control`, and validators (`Last-modified`, `ETag`) manage caching behavior [17](#page=17).
* **Advantages:** Caching reduces latency, network bandwidth usage, and server load. It is often transparent to the client and server [18](#page=18).
* **Disadvantages:** Caching requires additional hardware resources. It can lead to serving stale data if not managed properly. Servers may lose control over access statistics as not all requests reach them directly [18](#page=18).
### 1.11 Tunnelling
Tunnelling involves encapsulating one protocol within another to transmit it. A common use case is transmitting SSL/TLS connections (HTTPS) inside HTTP requests, which can help bypass firewalls that might otherwise block direct SSL connections [19](#page=19).
> **Example:** Tunneling an SSL connection through an open HTTP port:
> `HTTP[SSL]` [19](#page=19).
### 1.12 Gateways
A gateway acts as an intermediary to translate or connect different applications and protocols [20](#page=20).
* **Protocol translation:** Gateways can translate between protocols, such as from HTTP to FTP [20](#page=20).
* **Security acceleration:** They can provide security functions, like handling SSL/TLS encryption on the server side (HTTPS to HTTP translation) [20](#page=20).
* **Application integration:** Often, a gateway and the destination server are combined into a single application server that translates HTTP requests to server application commands [20](#page=20).
> **Example:** An HTTP/FTP Gateway allowing an HTTP client to access an FTP server [20](#page=20).
---
# Resource identification and management
This topic explores how resources are identified using Uniform Resource Identifiers (URIs) and how web content is managed through mechanisms like caching and session management.
### 2.1 Uniform Resource Identifier (URI)
A Uniform Resource Identifier (URI) is a string that uniquely identifies a resource. URIs are broadly categorized into two types: Uniform Resource Locators (URLs) and Uniform Resource Names (URNs) [7](#page=7).
#### 2.1.1 Uniform Resource Locator (URL)
A URL provides information about the exact location of a resource. It typically consists of a scheme, a host, and a path (the resource name). For example, `https://vub.academia.edu/BeatSigner` is a URL. A significant drawback of URLs is that they change if the resource is moved. Persistent Uniform Resource Locators (PURLs) are a variation designed to address this issue [7](#page=7).
#### 2.1.2 Uniform Resource Name (URN)
A URN serves as a unique and location-independent name for a resource. A URN is structured with a scheme name, a namespace identifier, and a namespace-specific string, all separated by colons. An example of a URN is `urn:ISBN:978-3837027136` [7](#page=7).
### 2.2 Web content management mechanisms
Effective management of web content involves techniques to optimize retrieval and maintain state across stateless connections.
#### 2.2.1 Caching
Caching is a crucial mechanism for improving web performance by storing copies of resources closer to the user. HTTP provides several header fields to control caching behavior [17](#page=17).
* **Expires**: Specifies an expiration date after which a cached resource must be refetched [17](#page=17).
* **Cache-Control: max-age**: Defines the maximum age of a document in seconds from the time it was added to the cache [17](#page=17).
* **Cache-Control: no-cache**: Indicates that a response cannot be served directly from the cache and must be revalidated with the origin server first [17](#page=17).
Mechanisms known as validators are used to determine if cached content is still valid:
* **Last-modified time**: When a cache holds a resource last modified at time `t`, it can use an `If-Modified-Since t` request to check for updates [17](#page=17).
* **Entity tags (ETag)**: Publishers change the ETag if the content has been altered. Clients can then use an `If-None-Match etag` request to check for changes [17](#page=17).
> **Tip:** Proper use of cache control headers can significantly reduce server load and improve user experience by delivering content faster.
#### 2.2.2 Session management
HTTP is inherently a stateless protocol, meaning each request is independent and carries no knowledge of previous requests. To overcome this, various solutions exist for tracking user sessions (state) [21](#page=21):
* **Use of IP address**: While simple, this method is unreliable as IP addresses are often not uniquely assigned to a single user [21](#page=21).
* **Browser login**: This approach uses special HTTP authentication headers. After a successful login, the browser automatically sends user information with each subsequent request [21](#page=21).
* **URL rewriting**: This technique involves appending session information directly to the URL in each request [21](#page=21).
* **Hidden form fields**: Similar to URL rewriting, session information can be embedded within form data, either in the URL (for GET requests) or in the body (for POST requests) [21](#page=21).
* **Cookies**: Cookies are a widely used method where the server stores a small piece of information on the client. This information is then sent back to the server with every request to the same server [21](#page=21).
##### 2.2.2.1 Cookies
Cookies were introduced by Netscape in June 1994. A cookie is a piece of information assigned to a client upon their first visit to a website. They are typically structured as a list of `` pairs, often containing a unique identifier [22](#page=22).
Cookies are sent from the server to the browser via `Set-Cookie` HTTP response headers. The browser then stores this information in a "cookie database" and sends it back to the same server with every subsequent access [22](#page=22).
> **Example:** When you log into a website, the server might send a cookie with a unique session ID to your browser. On your next request, your browser includes this cookie, allowing the server to recognize you and maintain your logged-in state.
However, cookies can raise potential privacy concerns. Persistent cookies with long lifetimes can track users over extended periods, and third-party cookies can be used for tracking users across different websites. Users have the ability to disable cookies in their browser settings [22](#page=22).
---
# Dynamic web content generation
Dynamic web content generation involves technologies that allow web pages to change or adapt based on user interaction, server-side logic, or other factors, moving beyond static HTML delivery. This is achieved through both server-side and client-side processing [25](#page=25).
### 3.1 Server-side processing technologies
Server-side processing allows for content to be generated or modified on the web server before being sent to the client's browser [25](#page=25).
#### 3.1.1 Common Gateway Interface (CGI)
CGI was one of the earliest solutions for server-side processing, operating transparently to the user. When a request arrives for a specific CGI script (e.g., `/account.pl`), the web server forwards it to a program written in languages like Perl, Tcl, C, C++, or Java. This program processes the request and generates an answer, potentially including HTTP response headers [26](#page=26).
> **Tip:** The core idea of CGI is that the web server starts a new process for each incoming request to execute the CGI program.
##### 3.1.1.1 CGI problems
A significant drawback of CGI is that a new process must be started for every request. This leads to poor performance, especially if the CGI program needs to establish a new database connection for each request [27](#page=27).
FastCGI was developed to address some of these issues by introducing persistent processes and process pools, improving performance by reusing processes and connections. Despite these improvements, CGI and FastCGI have largely been superseded by newer technologies like Java Servlets [27](#page=27).
#### 3.1.2 Java Servlets
Java Servlets are Java classes that extend the abstract `HTTPServlet` class. A servlet container (like Apache Tomcat) loads these servlets and forwards relevant HTTP requests to them for processing [28](#page=28).
> **Tip:** Servlet containers can be integrated with web servers or function as standalone components [29](#page=29).
##### 3.1.2.1 Servlet life cycle and methods
The life cycle of a servlet involves:
* **Initialization:** The servlet is initialized once via the `init()` method [29](#page=29).
* **Request Handling:** The `doGet()` and `doPost()` methods can be executed multiple times, each handling a different HTTP request [29](#page=29).
* **Destruction:** Before a servlet is unloaded, the servlet container calls the `destroy()` method [29](#page=29).
The main methods involved are `init(ServletConfig config)`, `destroy()`, `doGet(HttpServletRequest req, HttpServletResponse resp)`, and `doPost(HttpServletRequest req, HttpServletResponse resp)` [29](#page=29).
##### 3.1.2.2 Java Servlet Example
```java
package org.vub.wise;
import java.io.*;
import java.util.Date;
import javax.servlet.http.*;
import javax.servlet.*;
public class HelloWorldServlet extends HttpServlet {
public void doGet (HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException {
PrintWriter out = res.getWriter();
out.println("");
out.println("Hello World ");
out.println("The time is " + new Date().toString() + "");
out.println("");
out.close();
}
}
```
#### 3.1.3 Jakarta Server Pages (JSP)
A perceived drawback of Java Servlets is that the entire HTML page must be defined within the Java code, making collaboration between web designers and programmers difficult. Jakarta Server Pages (JSP) addresses this by allowing program code to be embedded within HTML pages using scriptlets and markup. These JSP documents are then either interpreted on-the-fly or compiled into Java Servlets by a container like Apache Tomcat. The JSP approach is comparable to technologies like PHP and Active Server Pages (ASP). It's important to note that Java Servlets often serve as an enabling technology for frameworks like JSP [31](#page=31).
#### 3.1.4 Node.js
Node.js enables server-side JavaScript, offering functionality similar to Java Servlets for handling requests, databases, and sessions. A key advantage is the ability to write an entire application in a single language, JavaScript. Although server-side and client-side code remain separate, Node.js includes a built-in web server, negating the need for external servers like Apache or Tomcat. It boasts high modularity, allowing the addition of packages via npm for extended functionality. Numerous frameworks (e.g., Express, Passport, Sequelize) and template engines (e.g., Jade, EJS) are available, along with HTTP utility methods for sessions and routing [34](#page=34).
### 3.2 Client-side processing technologies
Client-side processing occurs within the user's web browser, allowing for interactive and dynamic user experiences without constant server communication [25](#page=25).
#### 3.2.1 JavaScript
JavaScript is an interpreted scripting language primarily used for client-side processing. Its functionality can be embedded directly within HTML documents or provided in separate files. JavaScript is commonly employed for [32](#page=32):
* Validating user input, such as form data [32](#page=32).
* Dynamically adding content to existing webpages [32](#page=32).
* Handling browser events like `onLoad` and `onFocus` [32](#page=32).
* Modifying parts of the original HTML document [32](#page=32).
* Creating and managing cookies [32](#page=32).
> **Important Note:** Java and JavaScript are entirely distinct programming languages with no relation other than their name [32](#page=32).
##### 3.2.1.1 JavaScript Example
```html
```
#### 3.2.2 Java Applets
Java Applets are programs delivered as Java bytecode to the client side, running within a secure sandbox environment in the browser via a Java Virtual Machine (JVM). An applet must extend either the `Applet` or `JApplet` class [35](#page=35).
##### 3.2.2.1 Advantages of Java Applets
* Users always have the most up-to-date version of the applet [35](#page=35).
* Provides a high level of security for untrusted applets [35](#page=35).
* Trusted, signed applets have access to the full Java API [35](#page=35).
##### 3.2.2.2 Disadvantages of Java Applets
* Requires a browser Java plug-in to run [35](#page=35).
* Advanced functionality, such as network connections to machines other than the source machine, is restricted to signed applets [35](#page=35).
##### 3.2.2.3 Evolution beyond Java Applets
OpenWebStart has emerged as a replacement for Java Applets, running programs outside the browser. This approach mitigates security restrictions and browser compatibility issues. Examples of Physics and Math Applets can be found at http://www.falstad.com/mathphysics.html [36](#page=36).
---
# Web technologies and frameworks
This section introduces foundational web technologies like HTML and explores the purpose and benefits of web application frameworks.
### 4.1 Hypertext Markup Language (HTML)
Hypertext Markup Language (HTML) is the dominant markup language used for creating webpages. It forms the fundamental structure of content displayed in a web browser [24](#page=24).
A basic HTML document structure typically includes:
* A `` declaration to define the document type.
* An `` element that serves as the root of the HTML page.
* A `` section containing meta-information about the document, such as the title that appears in the browser tab [24](#page=24).
* A `` section that encloses the visible content of the webpage, such as text, images, and links [24](#page=24).
> **Tip:** For a deeper understanding of HTML, further resources are available, including dedicated lectures and exercise sessions [24](#page=24).
### 4.2 Web application frameworks
A web application framework is a specialized software framework designed to streamline and support the development of dynamic websites, web applications, web services, and web resources [37](#page=37).
The primary goal of these frameworks is to reduce the development overhead associated with common tasks in web development. Many frameworks achieve this by providing pre-built libraries and tools for essential functionalities, such as [37](#page=37):
* Database access [37](#page=37).
* Templating systems [37](#page=37).
* Session management [37](#page=37).
Furthermore, web application frameworks often promote code reuse, leading to more efficient and maintainable development practices. There are numerous web application frameworks available, with various options being presented in subsequent learning materials [37](#page=37).
---
## Common mistakes to avoid
- Review all topics thoroughly before exams
- Pay attention to formulas and key definitions
- Practice with examples provided in each section
- Don't memorize without understanding the underlying concepts
Glossary
| Term | Definition |
|------|------------|
| HTTP Request | A message sent from a client to a server to request a resource or to send data to the server. It includes a start line, header fields, a blank line, and an optional message body. |
| HTTP Response | A message sent from a server to a client in reply to an HTTP request. It contains a start line indicating the protocol version and status code, header fields providing metadata, a blank line, and an optional message body. |
| Client-Server Model | A distributed application structure that partitions tasks or workloads between providers of a resource or service, called servers, and service requesters, called clients. In web technologies, the browser is the client and the web server is the server. |
| Domain Name Service (DNS) | A hierarchical and decentralized naming system for computers, services, or other resources connected to the Internet or a private network. It translates human-readable domain names (like www.vub.be) into machine-readable IP addresses. |
| TCP Connection | A Transmission Control Protocol (TCP) connection is a reliable, ordered, and error-checked byte stream established between two devices on a network. It is used to ensure data is delivered correctly between the client and server. |
| Uniform Resource Identifier (URI) | A string of characters that unambiguously identifies a particular resource. URIs are used to locate and interact with resources on the web. |
| Uniform Resource Locator (URL) | A specific type of URI that not only identifies a resource but also specifies how to locate it, typically including the scheme (e.g., http, https), host, and path to the resource. |
| Uniform Resource Name (URN) | A type of URI that provides a persistent, location-independent identifier for a resource. It aims to uniquely name a resource regardless of where it is located. |
| Web Server | A server program that accepts requests from web clients (browsers) and responds by serving web pages and other content. Prominent examples include nginx, IIS, and Apache HTTP Server. |
| Stateless Protocol | A protocol that does not store any information about past interactions. Each request from a client to a server is treated as an independent transaction, without relying on previous requests. HTTP is an example of a stateless protocol. |
| MIME Type (Media Type) | A standard way to indicate the nature and format of a document, file, or assortment of bytes. It consists of a type and a subtype (e.g., text/html, image/jpeg) and is used by clients and servers to process content appropriately. |
| Proxy Server | An intermediary server that acts as a gateway between a client and other servers. Proxies can provide services like caching, filtering, security, and anonymous browsing. |
| Cache | A temporary storage area used to hold frequently accessed data to speed up future requests. Web caches can reduce server load and improve response times by storing copies of web resources. |
| Session Management | Techniques used to maintain state information across multiple requests from a client in a stateless protocol like HTTP. Common methods include cookies, URL rewriting, and hidden form fields. |
| Cookies | Small pieces of data sent from a website and stored on the user's computer by the user's web browser while the user is browsing. They are used to remember stateful information for the user, such as items in a shopping cart or login credentials. |
| HTML | HyperText Markup Language, the standard markup language for documents designed to be displayed in a web browser. It defines the structure and content of web pages. |
| Dynamic Web Content | Web content that is generated or modified in real-time, either on the server-side or client-side, in response to user interactions or other factors, rather than being fixed static content. |
| Server-Side Processing | Code that is executed on the web server to generate web content. This can involve database interactions, business logic, and dynamic page creation before the content is sent to the client. |
| Client-Side Processing | Code that is executed by the user's web browser on the client machine. JavaScript is a common language used for client-side processing, enabling interactive features and dynamic content updates without requiring a full page reload. |
| Common Gateway Interface (CGI) | An early standard for running external programs in a web server environment. It defines how a web server communicates with an external application to process requests and generate responses. |
| Java Servlets | Server-side Java programs that extend the capabilities of a server. They are typically used to handle requests, process data, and generate dynamic web content. |
| Jakarta Server Pages (JSP) | A server-side technology that allows developers to create dynamic web pages by embedding Java code within HTML. JSP pages are compiled into Java Servlets for execution. |
| JavaScript | A scripting language commonly used for client-side web development to add interactivity, dynamic content, and asynchronous behavior to web pages. It can also be used for server-side development with environments like Node.js. |
| Node.js | A JavaScript runtime environment that allows developers to run JavaScript code on the server-side. It is used for building scalable network applications, web servers, and APIs. |
| Java Applets | Small Java programs that can be embedded into a web page and executed within a web browser's Java Virtual Machine (JVM). They were historically used for adding rich functionality to web pages but have largely been superseded by other technologies. |
| Web Application Framework | A software framework designed to support the development of dynamic websites, web applications, web services, and web resources. Frameworks aim to streamline common web development tasks by providing libraries and tools. |
Cover
Lesson 10 - Overview.pptx
Summary
# Cyberdreigingsinlichtingen (CTI) levenscyclus en analysekaders
Dit onderwerp behandelt de zes fasen van de CTI-levenscyclus, van richting tot feedback, en introduceert kernanalysekaders zoals het Diamond Model, de Cyber Kill Chain en MITRE ATT&CK.
## 1. De CTI-levenscyclus
De CTI-levenscyclus is een continu proces dat cyberdreigingsinformatie operationaliseert en bestaat uit de volgende zes fasen:
### 1.1 Richting (Direction)
* **Doel:** Het definiëren van doelen en inlichtingenvereisten (PIR's - Priority Intelligence Requirements) op basis van de behoeften van stakeholders. Dit kan variëren van strategische zorgen op C-level tot tactische behoeften van een Security Operations Center (SOC).
* **Methoden:** Frameworks zoals het Diamond Model en MITRE ATT&CK worden gebruikt om kennisgaten te identificeren.
### 1.2 Collectie (Collection)
* **Doel:** Het verzamelen van ruwe data uit diverse bronnen.
* **Bronnen:**
* HUMINT (Human Intelligence)
* OSINT (Open-Source Intelligence)
* SIGINT (Signals Intelligence)
* TECHINT (Technical Intelligence uit logs en netwerkdata)
### 1.3 Verwerking (Processing)
* **Doel:** Het transformeren van ruwe data naar een bruikbaar formaat.
* **Technieken:** Normalisatie, verrijking, deduplicatie en correlatie van data.
### 1.4 Analyse (Analysis)
* **Doel:** Het mensgeleide proces van het omzetten van informatie naar bruikbare inlichtingen. Deze fase richt zich op het toepassen van gestructureerde technieken om tot beoordelingen te komen.
* **Diepe duik: Analyse van concurrerende hypothesen (Analysis of Competing Hypotheses - ACH):**
* Een methode met zeven stappen om meerdere hypothesen te evalueren tegenover beschikbare bewijzen.
* Dwingt analisten om hun eigen aannames uit te dagen.
> **Tip:** Het is cruciaal om analytische valkuilen te herkennen en te mitigeren, zoals bevestigingsbias, ankerbias en survivorship bias, door gestructureerde methoden zoals ACH toe te passen.
### 1.5 Disseminatie (Dissemination)
* **Doel:** Het effectief delen van de verkregen inlichtingen met de juiste stakeholders.
* **Aspecten:** Dit omvat ook het effectief delen van informatie met collega-organisaties, waarbij protocollen zoals Chatham House Rules, het Traffic Light Protocol (TLP) en het Permissible Actions Protocol (PAP) worden gebruikt.
### 1.6 Feedback
* **Doel:** Het incorporeren van feedback op de gedeelde inlichtingen om de kwaliteit en relevantie van toekomstige inlichtingen te verbeteren.
## 2. Kernanalysekaders
CTI-analisten maken gebruik van diverse modellen en kaders om dreigingen te begrijpen, te analyseren en erop te reageren.
### 2.1 Het Diamond Model van Intrusion Analysis
* **Doel:** Een framework voor het beschrijven van elke indringingsgebeurtenis aan de hand van vier kernpunten (vertices).
* **Vertices:**
* **Adversary (Vijand/Aanvaller):** Motivatie, intentie van de aanvaller.
* **Infrastructure (Infrastructuur):** De technische middelen gebruikt door de aanvaller.
* **Capability (Capabiliteit):** De gebruikte tactieken, technieken en procedures (TTP's) van de aanvaller.
* **Victim (Slachtoffer):** De doelwitten en hun kwetsbaarheden.
* **Assen:** Het model houdt ook rekening met de sociaal-politieke en technische assen van een gebeurtenis.
* **Sociaal-politieke as:** Motivatie, intentie, precisiedoelwitten.
* **Technische as:** TTP's, communicatiemethoden.
> **Example:** Het Diamond Model helpt om de relatie tussen een specifieke dreigingsactor, hun gebruikte tools, de infrastructuur die ze opzetten en de bedrijven die ze targeten, te visualiseren.
### 2.2 De Cyber Kill Chain
* **Doel:** Een zevenstapsmodel dat de typische levenscyclus van een cyberinbraak schetst.
* **Fasen:**
1. **Reconnaissance (Verkenning):** De aanvaller verzamelt informatie over het doelwit.
2. **Weaponization (Bewapening):** De aanvaller creëert een exploit en een payload (bijvoorbeeld een malafide e-mail met een bijlage).
3. **Delivery (Levering):** De aanvaller stuurt de bewapende payload naar het doelwit.
4. **Exploitation (Exploitatie):** De payload wordt uitgevoerd en de kwetsbaarheid wordt uitgebuit.
5. **Installation (Installatie):** De aanvaller installeert malware of een backdoor op het systeem van het doelwit.
6. **Command & Control (C2):** De aanvaller vestigt communicatie met de geïnstalleerde malware om deze te besturen.
7. **Actions on Objectives (Acties op Doelstellingen):** De aanvaller voert zijn uiteindelijke doel uit (bijvoorbeeld data diefstal, systeemverstoring).
> **Tip:** Door de Cyber Kill Chain te begrijpen, kunnen verdedigers effectievere detectie- en preventiestrategieën ontwikkelen door te focussen op het verstoren van de aanvaller in elke fase.
### 2.3 MITRE ATT&CK Framework
* **Doel:** Een wereldwijd toegankelijke kennisbank van tactieken en technieken van aanvallers, gebaseerd op real-world observaties.
* **Structuur:**
* **Tactics (Tactieken):** De 'waarom' - de tactische doelen van de aanvaller (bijvoorbeeld 'Command and Control').
* **Techniques (Technieken):** De 'hoe' - de specifieke methoden die worden gebruikt om een doel te bereiken (bijvoorbeeld 'Encrypted Channel').
* **Sub-techniques:** Meer gedetailleerde beschrijvingen van een techniek.
* **Procedures:** De specifieke, real-world implementaties door dreigingsgroepen met behulp van bepaalde software.
* **Praktische Toepassingen:**
* **Threat Intelligence:** Het in kaart brengen van TTP's van dreigingsactoren om hun modus operandi te begrijpen.
* **Detection Engineering:** Het identificeren van verdedigingslacunes en het prioriteren van regelcreatie.
* **Red & Blue Teaming:** Het simuleren van real-world gedrag van aanvallers.
> **Example:** Het MITRE ATT&CK framework stelt een organisatie in staat om te bepalen welke technieken van een bekende dreigingsgroep (bijvoorbeeld APT29) ze het meest waarschijnlijk zullen tegenkomen, en vervolgens detectieregels te ontwikkelen om deze specifieke technieken te detecteren.
### 2.4 De Pyramid of Pain
* **Doel:** Een strategisch model dat de toenemende 'pijn' illustreert die een aanvaller wordt toegebracht door het detecteren van verschillende soorten indicatoren.
* **Niveaus van 'Pijn' (van triviaal tot uitdagend):**
1. **Hash Values (Hasjwaarden):** Eenvoudige, atomische indicatoren. Gemakkelijk te omzeilen door kleine wijzigingen.
2. **IP Addresses (IP-adressen):** Eenvoudige indicatoren.
3. **Domain Names (Domeinnamen):** Annoyance voor de aanvaller.
4. **Network/Host Artifacts (Netwerk/Host Artifacts):** Patronen of afdrukken die een systeem of netwerkactiviteit achterlaat.
5. **TTPs (Tactics, Techniques, and Procedures):** Gedragspatronen en methoden van de aanvaller. Dit is het meest effectieve niveau om op te focussen voor langdurige weerstand, omdat het omzeilen van TTP's complexer is.
> **Tip:** Het focussen op het detecteren van TTP's in plaats van op enkelvoudige indicatoren (zoals IP's of hashes) biedt een meer veerkrachtige verdediging tegen aanvallers die hun tactieken voortdurend aanpassen.
### 2.5 Analyse van concurrerende hypothesen (ACH)
* Zie sectie 1.4 voor een gedetailleerde uitleg. ACH is een cruciale analysemethode om analytische bias te bestrijden en de nauwkeurigheid van conclusies te verhogen.
## 3. Hulpmiddelen voor CTI-analyse
Naast de analysekaders zijn er diverse tools die CTI-analisten gebruiken:
### 3.1 MISP (Malware Information Sharing Platform & Threat Sharing)
* **Functie:** Een open-source tool voor het verzamelen, analyseren en distribueren van CTI.
* **Kern datamodel:**
* **Events:** Containers voor specifieke dreigingscontexten (bijvoorbeeld een hele campagne).
* **Objects:** Gestructureerde sjablonen voor gerelateerde attributen (bijvoorbeeld een `file` object met meerdere hashes).
* **Attributes:** Individuele, atomaire indicators of compromise (IOC's) zoals IP-adressen, domeinen, hashes.
* **Samenwerking en Kwaliteitscontrole:**
* **Distributieniveaus:** Begrijpen hoe informatie wordt gedeeld (bijvoorbeeld 'alleen deze community', 'alle communities').
* **Warning Lists:** Gebruiken om veelvoorkomende false positives te filteren (bijvoorbeeld openbare DNS-resolvers).
* **Context en Verrijking:**
* **Galaxies:** Koppelen van events aan kennisbases zoals dreigingsactoren, malwarefamilies en MITRE ATT&CK TTP's.
* **Taxonomies:** Toepassen van gestandaardiseerde tags voor consistente classificatie (bijvoorbeeld `tlp:amber`).
* **Admiralty Scale:** Een formeel systeem voor het beoordelen van bronbetrouwbaarheid (A-F) en informatiegeloofwaardigheid (1-6).
### 3.2 OSINT & Analyse Platforms
* **Infrastructure & Attack Surface Analysis:** URLscan, Censys, Shodan, VirusTotal, Passive DNS.
* **Malware Analysis Sandboxes:** Tria.ge voor dynamische analyse.
* **Threat Data Repositories:** Abuse.ch platforms (ThreatFox, URLhaus, MalwareBazaar) en Ransomware.live.
* **Domain & Certificate Analysis:** DNSTwister voor typosquatting, crt.sh voor historische certificaatgegevens, CertStream voor realtime monitoring.
### 3.3 CyberChef
* **Functie:** Een "Zwitsers zakmes" voor data-manipulatie, waaronder decoderen, coderen, extraheren en parsen van data.
### 3.4 Pattern Matching (YARA)
* **Functie:** Een krachtig hulpmiddel voor het identificeren van bestanden op basis van tekst- of binaire patronen ("grep on steroids").
* **Regelstructuur:** Bevat `meta` (auteur, datum, beschrijving), `strings` (patronen om te zoeken) en `condition` (logische expressies om de detectie te bepalen).
> **Example:** Een YARA-regel kan specifiek ontworpen zijn om malwarevarianten te detecteren op basis van unieke mutex-namen, PDB-paden of specifieke strings in de binaire code.
---
# Essentiële CTI-tools en platforms voor analyse
Dit onderwerp verkent de praktische hulpmiddelen en platforms die CTI-analisten gebruiken om effectief dreigingsinformatie te verzamelen, analyseren en distribueren.
### 2.1 CTI-platforms voor dreigingsdeling: MISP
De Malware Information Sharing Platform & Threat Sharing (MISP) is een open-source tool die essentieel is voor het verzamelen, analyseren en distribueren van Cyber Threat Intelligence (CTI).
#### 2.1.1 Kerncomponenten van MISP
MISP is opgebouwd rond een gestructureerd datamodel:
* **Events**: Deze fungeren als containers voor specifieke dreigingscontexten, zoals een complete aanvalscampagne.
* **Objects**: Gestructureerde templates die gerelateerde attributen bevatten. Voorbeelden zijn een `file`-object met verschillende hashes, of een `vulnerability`-object.
* **Attributes**: Individuele, atomische indicatoren van compromittering (IoC's), zoals IP-adressen, domeinen of hashes.
#### 2.1.2 Samenwerking en kwaliteitscontrole in MISP
MISP faciliteert samenwerking en waarborgt de kwaliteit van gedeelde informatie via:
* **Distributieniveaus**: Bepalen wie de informatie kan zien en gebruiken, variërend van "alleen deze community" tot "alle communities".
* **Warning Lists**: Deze lijsten helpen bij het filteren van veelvoorkomende false positives, zoals publieke DNS-resolvers.
#### 2.1.3 Context en verrijking van data in MISP
MISP biedt mechanismen om data te verrijken en context te bieden:
* **Galaxies**: Koppel events aan hoogwaardige kennisbanken, zoals dreigingsactoren, malwarefamilies en MITRE ATT&CK tactieken, technieken en procedures (TTP's).
* **Taxonomies**: Gebruik gestandaardiseerde tags voor consistente classificatie, bijvoorbeeld `tlp:amber` of `kill-chain:C2`.
* **Admiralty Scale**: Een formeel systeem voor het beoordelen van de betrouwbaarheid van bronnen (A-F) en de geloofwaardigheid van informatie (1-6):
* A: Volledig betrouwbaar, 1: Bevestigd door andere bronnen
* B: Meestal betrouwbaar, 2: Waarschijnlijk waar
* C: Redelijk betrouwbaar, 3: Mogelijk waar
* D: Niet gewoonlijk betrouwbaar, 4: Twijfelachtig
* E: Onbetrouwbaar, 5: Onwaarschijnlijk
* F: Betrouwbaarheid kan niet worden beoordeeld, 6: Waarheid kan niet worden beoordeeld
> **Tip:** Het effectief gebruiken van MISP vereist een goed begrip van de datastructuur, distributieniveaus en de mogelijkheid om externe kennisbanken te integreren voor een rijkere context.
### 2.2 Patronenherkenning: YARA
YARA wordt vaak omschreven als "grep on steroids" en is een krachtig hulpmiddel voor het identificeren van bestanden op basis van tekstuele of binaire patronen. Het is cruciaal voor het jagen op malware.
#### 2.2.1 Structuur van YARA-regels
Een YARA-regel is typisch opgebouwd uit drie secties:
* **meta**: Bevat metadata over de regel, zoals de auteur, datum en een beschrijving.
* **strings**: Definieert de patronen (tekst of hexadecimaal) waarnaar gezocht moet worden.
* **condition**: Specificeert de logische voorwaarden waaronder een regel wordt geactiveerd. Dit kan variëren van het vinden van alle gedefinieerde strings tot het vinden van een bepaald aantal van de strings.
#### 2.2.2 Best practices voor YARA-regels
Effectieve YARA-regels volgen specifieke best practices:
* **Regelnaamgeving**: Gebruik conventies die duidelijkheid bieden, bijvoorbeeld door de malwarefamilie of een uniek kenmerk te benoemen.
* **Stringselectie**: Kies strings die uniek zijn voor de te detecteren malware. Denk hierbij aan unieke mutexen, PDB-paden, of specifieke API-aanroepen.
> **Voorbeeld:**
> ```yara
> rule best_party
> meta:
> author = "sandro manzo"
> date = "2822-83-11"
> description = "Essential party ingredients"
> strings:
> $string1 = "Friends"
> $string2 = "Fastly"
> $string3 = "Hustc"
> $string4 = "Drinks"
> condition:
> // ($string1 or $string2) and ($string3 or $string4)
> /* 3 of them */
> 4 of ($string4) /* dit zou niet werken, moet 3 zijn voor "4 of them" te activeren */
> ```
> In dit voorbeeld zou de regel geactiveerd worden als er minimaal 4 van de gedefinieerde strings ($string1 tot en met $string4) aanwezig zijn. De commentaren tonen alternatieve conditionele logica.
### 2.3 Essentiële OSINT- en analysepraktijken
Een breed scala aan tools en platforms ondersteunt CTI-analisten bij diverse taken, van infrastructuuranalyse tot data-manipulatie.
#### 2.3.1 Infrastructuur- en aanvalsoppervlakteanalyse
Tools zoals URLscan, Censys, Shodan, VirusTotal en Passive DNS zijn van onschatbare waarde voor het identificeren en analyseren van kwaadaardige infrastructuur en het in kaart brengen van aanvalsoppervlakken.
#### 2.3.2 Malwareanalyse
Sandboxes zoals Tria.ge bieden mogelijkheden voor dynamische analyse, waardoor het gedrag van malware in een gecontroleerde omgeving kan worden bestudeerd.
#### 2.3.3 Repositories voor dreigingsdata
Platforms zoals Abuse.ch (met ThreatFox, URLhaus, MalwareBazaar) en Ransomware.live centrale verzamelingen van informatie over malware en ransomware.
#### 2.3.4 Domein- en certificaatanalyse
* **DNSTwister**: Helpt bij het identificeren van typosquatting-domeinen, waarbij aanvallers domeinnamen creëren die sterk lijken op legitieme domeinen.
* **crt.sh**: Levert historische certificaatgegevens, nuttig voor het traceren van infrastructuur en het identificeren van verdachte certificaatuitgiften.
* **CertStream**: Biedt realtime monitoring van nieuwe certificaten, wat kan helpen bij het detecteren van verdachte activiteiten zodra deze plaatsvinden.
#### 2.3.5 De "Zwitsers zakmes" voor data-analyse: CyberChef
CyberChef is een webgebaseerde, krachtige tool die functioneert als een "culinaire machine" voor data. Het biedt een breed scala aan operaties voor data-manipulatie, waaronder:
* **Decoding en encoding**: Transformatie van dataformaten (bijvoorbeeld Base64, Hex).
* **Extractie**: Het selecteren van specifieke delen uit grotere datasets.
* **Parsing**: Het structureren van ruwe data in een begrijpelijker formaat.
> **Tip:** Het integreren van deze diverse tools in een workflow maakt het mogelijk om vanuit een enkele indicator van compromittering een uitgebreid, open-source onderzoek uit te voeren.
### 2.4 Geavanceerde netwerk- en certificaatfingerprinting
Naast basisindicatoren, bieden geavanceerde fingerprinting-technieken diepere inzichten in infrastructuur en aanwezige diensten.
#### 2.4.1 JA4S: TLS Server Response Fingerprinting
JA4S (Transport Layer Security Server Response Fingerprinting) analyseert specifieke kenmerken van een TLS-serverrespons om deze te classificeren. De componenten omvatten:
* **TLS-versie**: De gebruikte TLS-versie (bijvoorbeeld 1.2, 1.3).
* **Aantal extensies**: Het aantal extensies in de TLS-handshake (exclusief waarden).
* **Protocol**: Het gebruikte protocol (bijvoorbeeld TCP, QUIC).
* **ALPN Chosen**: De Application-Layer Protocol Negotiation (ALPN) string die is gekozen, of `00` indien geen ALPN is onderhandeld.
* **Cipher Suite Chosen**: De geselecteerde cipher suite.
* **Hash van extensies**: Een gehasht representatie van de extensies in de volgorde waarin ze verschijnen.
De output is een string die deze kenmerken samenvat, bijvoorbeeld `$t120400_c030_4e8089b08790$`.
#### 2.4.2 JA4X: X.509 Certificate Fingerprinting
JA4X (X.509 Certificate Fingerprinting) focust op de structuur en inhoud van een X.509-certificaat om een unieke "vingerafdruk" te creëren. De analyse omvat:
* **Protocol**: Het gebruikte protocol.
* **Hash van Issuer RDNs**: Een gehasht representatie van de Relative Distinguished Names (RDNs) in de issuer-naam, in volgorde.
* **Hash van Subject RDNs**: Een gehasht representatie van de RDNs in de subject-naam, in volgorde.
* **Hash van Extensions**: Een gehasht representatie van de extensies in het certificaat, in volgorde.
De output is ook een samenvattende string, bijvoorbeeld `$96a6439c8f5c_96a6439c8f5c_aae71e8db6d7$`.
> **Voorbeeld:** JA4S en JA4X hashes kunnen worden gebruikt om geavanceerde Censys-queries uit te voeren. Dit stelt analisten in staat om nieuwe kwaadaardige domeinen te ontdekken die gerelateerd zijn aan een specifieke campagnestijl, zelfs als de IP-adressen of domeinnamen zelf nieuw zijn.
### 2.5 CTI-tools voor onderzoek en analyse
Naast MISP en YARA, omvat de toolkit van een CTI-analist een breed scala aan platforms voor verschillende doeleinden.
#### 2.5.1 Infrastructuur- en attack surface hunting
* **URLscan**: Analyseert HTTP-transacties en identificeert unieke artefacten.
* **Censys**: Een zoekmachine voor geïnventariseerd internet, nuttig voor het mappen van onderliggende IP-infrastructuren en het identificeren van gedeelde kenmerken.
* **Shodan**: Vergelijkbaar met Censys, focust op het indexeren van apparaten die verbonden zijn met het internet.
* **VirusTotal**: Biedt een platform voor het analyseren van bestanden en URL's, met resultaten van meerdere beveiligingsscanners.
* **Passive DNS**: Geeft een historisch overzicht van DNS-recordresoluties.
#### 2.5.2 Malware analyse sandboxes
* **Tria.ge**: Een platform voor dynamische malware-analyse.
#### 2.5.3 Threat Data Repositories
* **Abuse.ch platforms**:
* **ThreatFox**: Een database van malware-indicatoren.
* **URLhaus**: Een project dat kwaadaardige URL's verzamelt.
* **MalwareBazaar**: Een repository van malware-samples.
* **Ransomware.live**: Biedt informatie over actieve ransomware-groepen en hun slachtoffers.
#### 2.5.4 Domein- en certificaatanalyse
* **DNSTwister**: Detecteert typosquatting-domeinen.
* **crt.sh**: Zoekt naar SSL/TLS-certificaten.
* **CertStream**: Biedt realtime updates over nieuwe certificaten.
#### 2.5.5 OSINT en data-manipulatie
* **CyberChef**: De "culinaire machine" voor data-manipulatie, waaronder decoding, encoding, extractie en parsing.
> **Voorbeeld:** Een typische open-source onderzoeksworkflow kan beginnen met een enkele Indicator of Compromise (IoC) zoals een domeinnaam. Door dit in te voeren in tools zoals URLscan, kunnen analisten HTTP-transacties en unieke artefacten identificeren. Vervolgens kunnen ze pivoteren op artefacten zoals resource-hashes en bestandsnamen om gerelateerde kwaadaardige websites te vinden. Tools zoals Censys kunnen vervolgens worden gebruikt om de onderliggende IP-infrastructuur te mappen en gedeelde kenmerken te ontdekken, wat leidt tot een dieper begrip van de aanval.
---
# Kwetsbaarheden, Advanced Persistent Threats (APT's) en verspreiding
Dit onderwerp behandelt de kritieke rol van kwetsbaarheidsintelligentie, prioriteringsmethoden, en biedt diepgaande profielen van staatsgesteunde actoren (APT's) inclusief hun tactieken, technieken en procedures (TTP's).
## 3. Kwetsbaarheden, geavanceerde persistente dreigingen (APT's) en verspreiding
### 3.1 Kwetsbaarheidsintelligentie en prioritering
Effectieve kwetsbaarheidsintelligentie is cruciaal voor het begrijpen en mitigeren van risico's. Dit omvat het identificeren van kwetsbaarheden, het beoordelen van hun potentiële impact en het prioriteren van de aanpak.
#### 3.1.1 Prioriteringsframeworks voor kwetsbaarheden
Diverse frameworks helpen bij het prioriteren van kwetsbaarheden, gebaseerd op verschillende factoren. Deze frameworks bieden een gestructureerde manier om te bepalen welke kwetsbaarheden de meeste aandacht vereisen.
* **CVSS (Common Vulnerability Scoring System):** Een open standaard voor het beoordelen van de ernst van computerbeveiligingskwetsbaarheden. Het berekent een score op basis van kenmerken zoals de aanvalsvector, complexiteit, benodigde privileges, gebruikersinteractie, impact op vertrouwelijkheid, integriteit en beschikbaarheid.
* **EPSS (Exploit Prediction Scoring System):** Dit systeem probeert de waarschijnlijkheid te voorspellen dat een kwetsbaarheid binnen de komende 72 uur actief zal worden uitgebuit. Het is ontworpen om te helpen bij het prioriteren van patches door zich te richten op kwetsbaarheden die waarschijnlijk in het wild worden misbruikt.
* **CISA KEV (Known Exploited Vulnerabilities Catalog):** De Cybersecurity and Infrastructure Security Agency (CISA) onderhoudt een lijst van kwetsbaarheden waarvan bekend is dat ze actief worden uitgebuit. Organisaties worden aangemoedigd om kwetsbaarheden op deze lijst met prioriteit aan te pakken.
* **SSVC (Stakeholder-Specific Vulnerability Categorization):** Een framework dat wordt gebruikt om kwetsbaarheden te categoriseren op basis van de specifieke behoeften en context van verschillende stakeholders. Het helpt bij het nemen van beslissingen over hoe om te gaan met kwetsbaarheden.
#### 3.1.2 Verrijking van CVE's met CTI-context
Het is van essentieel belang om Common Vulnerabilities and Exposures (CVE's) te verrijken met Cyber Threat Intelligence (CTI)-context. Dit betekent dat men verder kijkt dan alleen de technische beschrijving van een kwetsbaarheid en informatie toevoegt over:
* Wie de kwetsbaarheid misbruikt (APT-groepen, criminele organisaties).
* Hoe de kwetsbaarheid wordt misbruikt (specifieke TTP's, malware).
* Wat het doelwit is (specifieke sectoren, organisaties).
* De waarschijnlijkheid van misbruik in de huidige dreigingsomgeving.
Deze context helpt analisten om te focussen op de kwetsbaarheden die het meest relevant zijn voor hun organisatie, in plaats van te proberen alles te patchen.
### 3.2 Geavanceerde Persistente Dreigingen (APT's)
Geavanceerde Persistente Dreigingen (APT's) zijn geavanceerde, langdurige en doelgerichte cyberaanvallen, vaak uitgevoerd door staatsgesteunde actoren of georganiseerde groepen met aanzienlijke middelen. Hun doel is meestal spionage, sabotage of diefstal van gevoelige informatie over een langere periode, waarbij ze proberen onopgemerkt te blijven.
#### 3.2.1 Profielen van staatsgesteunde actoren
De documentatie vermeldt specifieke staatsgesteunde actoren en hun oorsprong, met nadruk op hun link met overheidsinstanties of groeperingen:
* **Rusland:**
* **APT29 (Cozy Bear / Nobelium):** Vaak geassocieerd met de Russische Foreign Intelligence Service (SVR). Bekend om het richten op overheden, diplomatieke missies en organisaties die betrokken zijn bij politieke of strategische belangen.
* **APT28 (Fancy Bear / Pawn Storm / Strontium):** Vaak geassocieerd met de Russische Main Intelligence Directorate (GRU). Bekend om hacktivisme, desinformatiecampagnes en het richten op politieke organisaties, militaire instellingen en denktanks.
* **Sandworm:** Een groepering die wordt geassocieerd met de GRU, bekend om destructieve aanvallen op kritieke infrastructuur en politieke doelen.
* **Dragonfly (ook bekend als Energetic Bear of Crouching Dragon):** Een groep die wordt geassocieerd met Russische staatsbelangen, gericht op de energiesector.
* **China:**
* **APT's geassocieerd met China:** De documentatie suggereert dat Chinese staatsgesteunde groepen (vaak benoemd door vendors) zich richten op spionage, intellectuele eigendomsdiefstal en het verzamelen van strategische informatie.
* **Noord-Korea:**
* **Chollima:** Een door Noord-Korea gesteunde groepering die wordt geassocieerd met financiële cybercriminaliteit en spionageactiviteiten.
* **Andere Noord-Koreaanse actoren:** De documentatie vermeldt 'DPRK' (Democratic People's Republic of Korea) als oorsprong voor bepaalde groepen.
* **Iran:**
* **Kitten:** Een Iraanse groepering die wordt geassocieerd met spionage en het richten op organisaties in het Midden-Oosten en daarbuiten.
* **Andere Iraanse actoren:** De documentatie vermeldt 'Iran' als oorsprong voor bepaalde groepen.
* **Verenigde Staten:**
* De documentatie vermeldt 'US' als oorsprong voor bepaalde groeperingen, wat kan verwijzen naar staatsgesteunde actoren die zich richten op nationale veiligheidsbelangen of cyberoperaties.
#### 3.2.2 Tactieken, Technieken en Procedures (TTP's)
APT's maken gebruik van geavanceerde en vaak aangepaste TTP's om hun doelen te bereiken en detectie te vermijden. Het begrijpen van deze TTP's is essentieel voor defensieve maatregelen en threat hunting. De TTP's worden vaak in kaart gebracht met frameworks zoals MITRE ATT&CK. Enkele algemene fasen en technieken die door APT's worden gebruikt, omvatten:
* **Initiële Toegang:** Phishing, spear-phishing, uitbuiting van zero-day kwetsbaarheden, supply chain aanvallen.
* **Verkenning (Reconnaissance):** Het verzamelen van informatie over het doelwit, netwerkstructuur, systemen en gebruikers.
* **Wapenisering (Weaponization):** Het creëren van malware, exploitkits of kwaadaardige documenten.
* **Levering (Delivery):** Het distribueren van de wapenisering, vaak via e-mail of geïnfecteerde websites.
* **Uitbuiting (Exploitation):** Het misbruiken van kwetsbaarheden om toegang te krijgen tot systemen.
* **Installatie (Installation):** Het installeren van malware of backdoors om persistentie te verkrijgen.
* **Command & Control (C2):** Het opzetten van communicatiekanalen om het gecompromitteerde systeem op afstand te besturen.
* **Acties op Doelstellingen (Actions on Objectives):** Het uitvoeren van de uiteindelijke doelen, zoals gegevensdiefstal, sabotage of verstoring.
* **Persistentie:** Technieken om ervoor te zorgen dat toegang behouden blijft, zelfs na herstarts van systemen of detectiepogingen (bijv. het aanpassen van registerinstellingen, het creëren van scheduled tasks).
* **Gegevensdiefstal (Data Exfiltration):** Het heimelijk overdragen van verzamelde gegevens van het doelwitnetwerk naar een locatie die onder controle staat van de aanvaller.
* **Ontwijking van Detectie:** Technieken zoals het aanpassen van bestandsnamen, het versleutelen van communicatie, het gebruik van legitieme tools (Living-off-the-Land), het uitschakelen van beveiligingssoftware.
#### 3.2.3 Naamgevingsconventies voor actoren
Verschillende beveiligingsonderzoekers en bedrijven gebruiken hun eigen naamgevingsconventies voor het identificeren van APT-groepen. Dit kan leiden tot verwarring, aangezien dezelfde groep onder verschillende namen bekend kan zijn bij verschillende vendors. Voorbeelden van deze vendors zijn Microsoft, CrowdStrike en Mandiant, die elk hun eigen schema's hanteren voor het benoemen van actoren. Het is belangrijk om deze verschillende namen te kunnen koppelen aan dezelfde dreigingsgroep om een volledig beeld te krijgen van hun activiteiten.
> **Tip:** Het bijhouden van een interne lijst met aliasnamen van bekende APT's en de bijbehorende vendors kan helpen bij het effectief interpreteren van threat intelligence rapporten.
### 3.3 Verspreiding van dreigingen
De verspreiding van dreigingen verwijst naar hoe kwaadaardige software, aanvallen of informatie zich verspreiden binnen een netwerk of over netwerken heen. Dit kan op verschillende manieren gebeuren, variërend van geautomatiseerde wormen tot handmatige infiltratie door APT-groepen.
#### 3.3.1 Tactieken voor verspreiding
* **Wormen en zelfreplicerende malware:** Programma's die zich automatisch verspreiden naar andere systemen via netwerkkwetsbaarheden of gedeelde mappen.
* **Gecompromitteerde supply chains:** Wanneer een legitiem softwareproduct wordt geïnfecteerd met malware voordat het bij de eindgebruiker terechtkomt.
* **Interne laterale beweging (Lateral Movement):** Technieken die APT's gebruiken om zich vanuit een initiëel gecompromitteerd systeem verder binnen het netwerk te verspreiden, bijvoorbeeld door het stelen van inloggegevens of het misbruiken van netwerkprotocollen.
* **Fysieke toegang:** In zeldzame gevallen kan fysieke toegang tot systemen worden gebruikt voor de verspreiding.
Het begrijpen van de verspreidingstactieken van bedreigingen is cruciaal voor het ontwerpen van effectieve beveiligingscontroles die de impact van een inbreuk kunnen beperken en de verspreiding kunnen stoppen.
---
# Modelleren van de tegenstander en dreigingslandschap
Hieronder volgt een gedetailleerd overzicht van het onderwerp "Modelleren van de tegenstander en dreigingslandschap", ontworpen als een studiehandleiding voor examens.
## 4. Modelleren van de tegenstander en dreigingslandschap
Dit onderwerp verkent modellen zoals de Cyber Kill Chain en de Pyramid of Pain om de tactieken van tegenstanders te begrijpen en hoe dreigingen zich ontwikkelen in een dynamische en complexe cyberomgeving.
### 4.1 Het Diamond Model van Intrusieanalyse
Het Diamond Model is een raamwerk voor het beschrijven van elke intrusiegebeurtenis op basis van zijn vier kernhoeken: de Tegenstander (Adversary), Infrastructuur (Infrastructure), Mogelijkheden (Capability) en Slachtoffer (Victim). Daarnaast houdt het rekening met de sociaal-politieke en technische assen van de gebeurtenis.
* **Tegenstander (Adversary):** Beschrijft de persoon of groep achter de aanval, inclusief hun motieven en intenties.
* **Infrastructuur (Infrastructure):** Omvat de middelen die door de tegenstander worden gebruikt, zoals servers, domeinen en netwerkapparatuur.
* **Mogelijkheden (Capability):** Verwijst naar de tools, technieken en procedures (TTPs) die de tegenstander bezit en inzet, inclusief de precisie en controle die zij uitoefenen.
* **Slachtoffer (Victim):** Geeft aan wie of wat het doelwit is, met de nadruk op de specifieke targeting en de kwetsbaarheden die worden uitgebuit.
Deze elementen worden geplaatst binnen twee assen:
* **Sociaal-politieke as:** Houdt rekening met de bredere politieke, economische en sociale context die de aanval kan beïnvloeden.
* **Technische as:** Richt zich op de specifieke technische aspecten van de aanval, zoals de gebruikte protocollen, versleuteling en communicatiemethoden.
> **Tip:** Het Diamond Model helpt bij het structureren van informatie over een specifieke aanval en biedt een kader om de relatie tussen de verschillende componenten te begrijpen.
### 4.2 De Cyber Kill Chain
De Cyber Kill Chain is een zevenfasenmodel dat de typische levenscyclus van een cyberinbreuk beschrijft. Het model helpt bij het identificeren van de stappen die een tegenstander neemt om een doel te bereiken en biedt aanknopingspunten voor detectie en verdediging.
1. **Reconnaissance (Verkenning):** De tegenstander verzamelt informatie over het doelwit, zoals IP-adressen, netwerkstructuren en kwetsbaarheden.
2. **Weaponization (Bewapening):** De tegenstander combineert een exploit met een backdoor tot een wapen, bijvoorbeeld een gemodificeerd document of uitvoerbaar bestand.
3. **Delivery (Levering):** Het wapen wordt naar het doelwit gestuurd via verschillende methoden, zoals e-mail, verwijderbare media of een kwetsbare webserver.
4. **Exploitation (Exploitatie):** De kwetsbaarheid wordt uitgebuit om code uit te voeren op het systeem van het slachtoffer.
5. **Installation (Installatie):** De tegenstander installeert een backdoor of ander malware op het systeem om blijvende toegang te verkrijgen.
6. **Command & Control (C2):** De geïnstalleerde malware maakt verbinding met een externe server om commando's te ontvangen en gegevens te exfiltreren.
7. **Actions on Objectives (Acties op Doelstellingen):** De tegenstander voert de uiteindelijke doelen uit, zoals gegevensdiefstal, sabotage of het uitvoeren van verdere aanvallen.
> **Voorbeeld:** Een aanvaller die zich richt op een bedrijf, kan eerst openbare informatie verzamelen over hun netwerk (verkenning), vervolgens een gecompromitteerd document maken met een exploit (bewapening), dit versturen via een phishing-e-mail (levering), het document openen waardoor de exploit wordt geactiveerd (exploitatie), een backdoor installeren (installatie), deze verbinden met hun C2-server (C2) en vervolgens gevoelige financiële gegevens stelen (acties op doelstellingen).
### 4.3 De Pyramid of Pain
De Pyramid of Pain is een strategisch model dat de toenemende 'pijn' illustreert die wordt veroorzaakt bij een tegenstander door het detecteren van verschillende soorten indicatoren. Het richten op TTPs (Tactics, Techniques, en Procedures) bovenaan de piramide is effectiever dan het blokkeren van wegwerpbare hashes en IP-adressen onderaan.
* **Hash Values (Hasjwaarden):** Eenvoudige, atomaire indicatoren die relatief makkelijk te omzeilen zijn door kleine wijzigingen in de malware.
* **IP Addresses (IP-adressen):** Enkele datapunten die ook gemakkelijk kunnen veranderen of worden vervangen door proxy's.
* **Domain Names (Domeinnamen):** Iets complexer dan IP-adressen, maar nog steeds relatief eenvoudig te omzeilen door nieuwe domeinen te registreren.
* **Network/Host Artifacts (Netwerk/Host Artefacten):** Meer specifieke patronen die worden achtergelaten op het netwerk of host, zoals configuratiebestanden, register sleutels, of specifieke netwerkverkeer patronen. Deze zijn vervelender voor een tegenstander.
* **Behavioral (Gedragsindicatoren):** Een reeks of patroon van acties (TTPs). Dit vereist het begrijpen van de modus operandi van de tegenstander en is uitdagend voor hen om te veranderen zonder hun hele strategie aan te passen.
* **TTPs (Tactics, Techniques, and Procedures):** De meest effectieve indicatoren om op te richten, omdat het de algemene strategie en werkwijze van de tegenstander blootlegt. Het detecteren en blokkeren van TTPs veroorzaakt de meeste "pijn" voor een tegenstander, omdat het hen dwingt hun fundamentele aanpak te herzien.
**Typen Indicatoren van Compromis (IOCs):**
* **Atomic:** Simpele, enkele datapunten (IPs, hashes).
* **Computed:** Afgeleide patronen (regex, fuzzy hashes).
* **Behavioral:** Een sequentie of patroon van acties (TTPs).
> **Tip:** Concentreer uw detectie-inspanningen op gedragsindicatoren en TTPs voor een duurzamere en effectievere verdediging tegen tegenstanders.
### 4.4 Fuzzy Hashing
Fuzzy hashing, zoals ssdeep en TLSH, is een techniek die wordt gebruikt om vergelijkbare bestanden te identificeren, zelfs na kleine wijzigingen. Dit stelt analisten in staat om malwarevarianten te vinden die zijn aangepast om traditionele hash-signaturen te ontwijken. Het genereert een "fuzzy hash" die niet exact overeenkomt, maar wel een hoge mate van gelijkenis aangeeft. Dit is een vorm van "computed" IOC.
### 4.5 Modellen in het Dreigingslandschap
Het begrijpen van de modellen zoals de Cyber Kill Chain en de Pyramid of Pain is cruciaal voor het modelleren van de tegenstander. Ze bieden gestructureerde manieren om:
* **De tactieken van tegenstanders te ontleden:** Door de fasen van de Cyber Kill Chain te analyseren, kunnen verdedigers de intenties en acties van aanvallers voorspellen.
* **De effectiviteit van verdedigingsmaatregelen te beoordelen:** De Pyramid of Pain helpt bij het prioriteren van detectie- en preventiemethoden door te focussen op indicatoren die de meeste "pijn" veroorzaken voor de tegenstander.
* **Een dynamisch dreigingslandschap te navigeren:** Deze modellen bieden een raamwerk om de voortdurend veranderende tactieken, technieken en procedures van bedreigingsactoren te begrijpen en hierop te anticiperen.
Door deze modellen te combineren met real-world data, kunnen CTI-analisten een dieper inzicht krijgen in de motieven, capaciteiten en methoden van tegenstanders, wat leidt tot effectievere beveiligingsstrategieën.
---
## Veelgemaakte fouten om te vermijden
- Bestudeer alle onderwerpen grondig voor examens
- Let op formules en belangrijke definities
- Oefen met de voorbeelden in elke sectie
- Memoriseer niet zonder de onderliggende concepten te begrijpen
Glossary
| Term | Definition |
|------|------------|
| Cyberdreigingsinlichtingen (CTI) | Het verzamelen, verwerken en analyseren van informatie over cyberdreigingen om bedreigingen voor organisaties te begrijpen, te voorspellen en te bestrijden. |
| CTI-levenscyclus | Een continu proces dat bestaat uit zes fasen: richting, verzameling, verwerking, analyse, verspreiding en feedback, om dreigingsinlichtingen te operationaliseren. |
| Diamond Model | Een analysekader dat de interactie tussen de tegenstander, infrastructuur, capaciteiten en het slachtoffer gebruikt om een inbreukgebeurtenis te beschrijven. |
| Cyber Kill Chain | Een zevenfasenmodel dat de typische levenscyclus van een cyberinbraak schetst, van verkenning tot acties op doelstellingen. |
| MITRE ATT&CK | Een wereldwijd toegankelijke kennisbank van tegenstandertactieken en -technieken, gebaseerd op echte observaties van cyberaanvallen. |
| Pyramid of Pain | Een strategisch model dat de toenemende "pijn" illustreert die aan een tegenstander wordt toegebracht door verschillende soorten indicatoren te detecteren, waarbij TTP's bovenaan het meest effectief zijn. |
| MISP (Malware Information Sharing Platform) | Een open-source tool voor het verzamelen, analyseren en distribueren van CTI, met een kerngegevensmodel bestaande uit gebeurtenissen, objecten en attributen. |
| YARA | Een hulpmiddel voor patroonherkenning dat wordt gebruikt om bestanden te identificeren op basis van tekst- of binaire patronen, vaak aangeduid als "grep on steroids". |
| Kwetsbaarheidsintelligentie | Inlichtingen die gericht zijn op het begrijpen en prioriteren van kwetsbaarheden in systemen en software, vaak met behulp van frameworks zoals CVSS en EPSS. |
| CVSS (Common Vulnerability Scoring System) | Een open industriestandaard voor het beoordelen van de ernst van beveiligingskwetsbaarheden. |
| EPSS (Exploit Prediction Scoring System) | Een systeem dat een waarschijnlijkheidsscore toekent aan het waargenomen actieve misbruik van een specifieke kwetsbaarheid. |
| KEV (Known Exploited Vulnerabilities) | Een catalogus van kwetsbaarheden waarvan bekend is dat ze actief worden misbruikt, onderhouden door CISA. |
| JA4+ & JARM | Geavanceerde technieken voor netwerkvingerafdrukken die worden gebruikt om infrastructuur te identificeren op basis van TLS-serverreacties en X.509-certificaatkenmerken. |
| OSINT (Open-Source Intelligence) | Informatie die is verzameld uit openbaar beschikbare bronnen, zoals websites, sociale media en publieke databases. |
| CyberChef | Een webgebaseerde tool die dient als een 'Zwitsers zakmes' voor gegevensmanipulatie, inclusief decoderen, coderen, extraheren en parsen. |
| Advanced Persistent Threats (APTs) | Langdurige en gerichte cyberaanvallen, vaak uitgevoerd door staatsgesteunde groeperingen, met als doel het stelen van gevoelige informatie of het verstoren van operaties. |
| TTP's (Tactics, Techniques, and Procedures) | De methoden die tegenstanders gebruiken om hun doelen te bereiken, inclusief hun tactieken, specifieke technieken en de procedures die ze volgen. |
| Analyse van Concurrerende Hypothesen (ACH) | Een gestructureerde methode om meerdere hypothesen te evalueren tegenover beschikbaar bewijs, om analytische vooroordelen te verminderen en de nauwkeurigheid van beoordelingen te verbeteren. |
| Data | Ruwe, onbewerkte feiten en cijfers die nog geen specifieke context of betekenis hebben. |
| Informatie | Gegevens die zijn georganiseerd en verwerkt om een zekere mate van context en betekenis te hebben. |
| Intelligentie | Informatie die is geanalyseerd en geïnterpreteerd om bruikbaar te zijn voor besluitvorming, in dit geval met betrekking tot cyberdreigingen. |
| CIA Triad | De drie kernprincipes van informatiebeveiliging: Vertrouwelijkheid, Integriteit en Beschikbaarheid. |
| Risico | De kans dat een bedreiging gebruik maakt van een kwetsbaarheid en schade toebrengt aan een organisatie, vaak uitgedrukt als 'risico = waarschijnlijkheid x impact'. |
Cover
LSS - Lecture II - shells.pdf
Summary
# Terminal en shell
Dit onderwerp legt het onderscheid uit tussen een terminalemulator en een shell, beschrijft verschillende typen terminals zoals virtuele en pseudo-terminals, en introduceert tools voor multiplexing zoals tmux en zellij.
### 1.1 Het onderscheid tussen terminal en shell
De terminal (emulator) dient als de grafische interface of het venster waarmee een gebruiker communiceert met de computer door middel van tekstinvoer en -uitvoer. Het emuleert de functionaliteit van fysieke terminals uit het verleden die direct waren aangesloten op mainframe computers. De shell daarentegen is een programma dat fungeert als tussenpersoon tussen de gebruiker en de kernel van het besturingssysteem, waarbij commando's worden vertaald naar acties die het systeem kan uitvoeren. Kortom, de terminal is het venster waarin commando's worden getypt en resultaten worden gelezen, terwijl de shell het programma is dat deze commando's daadwerkelijk uitvoert. Dit interactieve programma wordt ook wel de command-line interface (CLI) genoemd [3](#page=3).
> **Tip:** De illustraties op pagina's 4, 5 en 6 tonen hoe dezelfde shell (bash in Ubuntu via WSL2) kan worden gebruikt binnen verschillende terminalemulatoren, zoals de Windows Terminal, xterm, en cool-retro-term. Dit benadrukt het concept dat de shell onafhankelijk is van de terminalemulator die ervoor wordt gebruikt.
### 1.2 Soorten terminals
Er worden twee hoofdcategorieën van terminals onderscheiden: virtuele terminals en pseudo-terminals [7](#page=7).
#### 1.2.1 Virtuele terminals
Virtuele terminals worden gebruikt om meerdere tekstgebaseerde sessies te beheren zonder dat er een grafische interface (GUI) nodig is. Deze zijn altijd beschikbaar op het systeem. Ze worden doorgaans aangeduid als `tty1`, `tty2`, enzovoort, en kunnen worden benaderd via toetscombinaties zoals `ALT+F1`, `ALT+F2`, enzovoort [7](#page=7).
#### 1.2.2 Pseudo-terminals
Pseudo-terminals (ook wel PTY's genoemd) worden dynamisch gecreëerd wanneer een nieuwe terminalemulator wordt geopend binnen een GUI of wanneer er via een netwerkverbinding wordt ingelogd, bijvoorbeeld met SSH [7](#page=7).
### 1.3 Tools voor multiplexing
Tools voor multiplexing stellen gebruikers in staat om meerdere vensters en/of gesplitste weergaven binnen één enkele terminalvenster te beheren. Enkele prominente voorbeelden van dergelijke tools zijn `screen`, `tmux`, `zellij`, `tmate`, `terminator` en `tilix` [8](#page=8).
#### 1.3.1 Tmux
`tmux` (terminal multiplexer) is een populaire tool waarmee gebruikers meerdere vensters en gesplitste weergaven ("panes") kunnen openen binnen één terminalvenster. Een belangrijk kenmerk van `tmux` is dat het deze vensters en panes in een sessie houdt. Dit betekent dat gebruikers een sessie kunnen afsluiten (detachen) en op een later moment weer kunnen hervatten (re-attachen) [9](#page=9).
> **Voorbeeld:** De tabel op pagina 11 geeft een overzicht van veelgebruikte `tmux` commando's:
> * `tmux new -s myname` : Creëert een nieuwe `tmux` sessie genaamd `myname`.
> * `ctrl-b d` : Ontkoppelt (detach) de huidige sessie.
> * `tmux ls` : Toont een lijst van beschikbare sessies.
> * `tmux attach -t myname` : Herstart/koppelt aan een specifieke sessie.
> * `ctrl-b %` : Splitst het huidige venster verticaal.
> * `ctrl-b "` : Splitst het huidige venster horizontaal.
> * `ctrl-b c` : Creëert een nieuw venster.
> * `ctrl-b p` : Gaat naar het vorige venster.
> * `ctrl-b n` : Gaat naar het volgende venster.
#### 1.3.2 Zellij
`zellij` wordt beschreven als vergelijkbaar met `nano` (een eenvoudige teksteditor), in tegenstelling tot `tmux` of `screen` die meer vergelijkbaar zijn met `vim` (een krachtigere teksteditor). `zellij` biedt ook de functionaliteit van een terminal multiplexer. Het is mogelijk om `zellij` direct uit te proberen zonder installatie door de instructies op de officiële website te volgen [12](#page=12).
---
# Begrip van de shell en commando-uitvoering
Deze sectie legt uit hoe de shell commando's verwerkt, inclusief verschillende expansiemechanismen, en hoe input, output en fouten worden beheerd [15](#page=15).
### 2.1 Hoe de shell commando's verwerkt
De shell is de interface waarmee gebruikers met het besturingssysteem communiceren. Voordat een commando daadwerkelijk wordt uitgevoerd, ondergaat het een reeks verwerkingsstappen door de shell. Dit proces begint met het opsplitsen van de invoerregel in afzonderlijke "tokens" of woorden, gebaseerd op speciale tekens zoals spatie, tab, newline, puntkomma en verschillende haakjes. Vervolgens vindt "word splitting" plaats, waarbij deze tokens verder worden onderverdeeld op basis van de `USDIFS` (Internal Field Separator) variabele. Daarna worden parameters uitgebreid, wat verwijst naar het vervangen van variabelen door hun waarden. Tot slot worden er diverse expansiemechanismen toegepast voordat het uiteindelijke commando wordt uitgevoerd [15](#page=15) [16](#page=16) [17](#page=17) [18](#page=18) [19](#page=19) [20](#page=20) [21](#page=21).
### 2.2 Expansiemechanismen
De shell biedt krachtige mechanismen om de commando's die u invoert dynamisch uit te breiden.
#### 2.2.1 Filename expansion
Filename expansion, ook wel globbing genoemd, breidt patronen uit naar bestaande bestanden en mappen die aan het patroon voldoen. Als er geen overeenkomst wordt gevonden, wordt het patroon behandeld als een gewone string [16](#page=16).
De volgende symbolen worden gebruikt:
* `*`: Komt overeen met nul of meer tekens [16](#page=16).
* `?`: Komt overeen met exact één teken [16](#page=16).
* `[abcd]`: Komt overeen met exact één teken dat één van de opgegeven karakters is (bijvoorbeeld `a`, `b`, `c` of `d`) [16](#page=16).
* `[a-d]`: Komt overeen met exact één teken dat binnen het opgegeven bereik valt (bijvoorbeeld `a` tot `d`) [16](#page=16).
* `[^ab]` of `[!ab]`: Komt overeen met exact één teken dat *niet* één van de opgegeven karakters is (bijvoorbeeld niet `a` en niet `b`) [16](#page=16).
> **Tip:** Dit mechanisme is erg nuttig om snel te verwijzen naar groepen bestanden zonder ze allemaal handmatig te hoeven typen. Onthoud dat het patroon alleen wordt uitgebreid als er daadwerkelijk bestanden zijn die ermee overeenkomen [16](#page=16).
#### 2.2.2 Brace expansion
Brace expansion genereert reeksen van tekens of getallen, onafhankelijk van het bestaan van bestanden [17](#page=17).
De volgende constructies worden ondersteund:
* `{a,b,c}`: Genereert de opgegeven items gescheiden door komma's (bijvoorbeeld `a`, `b`, `c`) [17](#page=17).
* `{0..6}`: Genereert een reeks getallen binnen het opgegeven bereik (bijvoorbeeld `0`, `1`, `2`, `3`, `4`, `5`, `6`) [17](#page=17).
* `{0..6..2}`: Genereert een reeks getallen binnen het bereik met een opgegeven stapgrootte (bijvoorbeeld `0`, `2`, `4`, `6`) [17](#page=17).
> **Voorbeeld:** Het commando `echo {a,b}{1..2}` zou `a1 a2 b1 b2` produceren [17](#page=17).
#### 2.2.3 Command substitution
Command substitution laat u het resultaat van een commando gebruiken als onderdeel van een ander commando. De shell voert eerst het commando tussen de haakjes uit en vervangt vervolgens de hele constructie door de standaard output van dat commando. De moderne en aanbevolen manier om dit te doen is met `USD(...)`. Het gebruik van backticks `` `...` `` is verouderd [19](#page=19).
> **Voorbeeld:** `du /usr/bin > USD(date +%Y-%m-%d)-bin-usage.log` zou de uitvoer van `date` gebruiken om een logbestand te creëren met de huidige datum in de naam [19](#page=19).
#### 2.2.4 Arithmetic expansion
Arithmetic expansion maakt het mogelijk om rekenkundige bewerkingen direct in de shell uit te voeren. Dit wordt gedaan met de constructie `USD((...))`. Variabelen binnen de dubbele haakjes worden automatisch als getallen behandeld [20](#page=20).
> **Voorbeeld:** Als `$a=5` en `$b=4`, dan zal `echo USD((a+b))` het getal `9` afdrukken [20](#page=20).
### 2.3 Input, output en fouten
Shells beheren de input, output en foutenstromen van commando's op gestandaardiseerde wijze.
#### 2.3.1 Standaard streams
Elk commando heeft drie standaard streams:
* **Standaard input (stdin)**: De invoer die aan een commando wordt gegeven. Wordt typisch verwacht vanuit de toetsenbordinvoer [22](#page=22).
* **Standaard output (stdout)**: De normale uitvoer van een commando. Wordt typisch getoond op de terminal [22](#page=22).
* **Standaard error (stderr)**: De foutmeldingen van een commando. Wordt typisch ook getoond op de terminal [22](#page=22).
#### 2.3.2 Piping
Piping, aangegeven met het symbool `|`, stuurt de standaard output van het ene commando als standaard input naar het volgende commando. Het is belangrijk te weten dat *alleen* de standaard output wordt doorgegeven, niet de standaard error [23](#page=23) [24](#page=24).
> **Voorbeeld:** `ls /usr/bin/a* | wc -l` toont hoeveel bestanden in `/usr/bin` beginnen met `a`. De uitvoer van `ls` wordt de invoer van `wc -l` [23](#page=23).
#### 2.3.3 Redirection
Redirection maakt het mogelijk om de standaard streams (input, output, errors) om te leiden naar bestanden of andere streams [25](#page=25).
| Symbool | Betekenis |
| :------- | :------------------------------------------------------- |
| `>` | Schrijft output naar een bestand (overschrijft bestaand). | [25](#page=25).
| `>>` | Voegt output toe aan een bestand. | [25](#page=25).
| `<` | Gebruikt een bestand als input voor een commando. | [25](#page=25).
| `2>` | Stuurt fouten (stderr) naar een bestand. | [25](#page=25).
| `2>&1` | Stuurt standaard error ook naar standaard output. | [25](#page=25).
| `2>&1 >/dev/null` | Stuurt output naar de prullenmand en errors naar standaard output. Hiermee worden enkel de errors behouden voor verdere verwerking. | [25](#page=25).
> **Tip:** Als u zowel de standaard output als de standaard error van een commando naar hetzelfde bestand wilt schrijven, kunt u eerst de standaard error naar de standaard output leiden met `2>&1`, en vervolgens de standaard output (die nu ook de errors bevat) naar het gewenste bestand sturen [25](#page=25).
### 2.4 Hulpmiddelen voor begrip
Er zijn externe hulpmiddelen beschikbaar om de werking van shellcommando's te begrijpen. De website [explainshell.com](https://explainshell.com/) is een waardevolle bron om de verschillende onderdelen van een shellcommando te ontleden. Daarnaast kan de `info` pagina van `bash` diepgaande documentatie bieden na installatie via `apt install info bash-doc` [18](#page=18) [26](#page=26).
---
# Verschillende shells en hun gebruik
Dit onderwerp biedt een overzicht van diverse command-line shells, hun functies, en hoe ze worden geconfigureerd en gebruikt in een besturingssysteemomgeving.
### 3.1 Overzicht van populaire shells
Verschillende shells zijn beschikbaar met elk hun eigen kenmerken en ontwikkelingsgeschiedenis [28](#page=28).
* **sh (Bourne Shell)**: Ontwikkeld door Stephen Bourne in de jaren '70 bij AT&T Bell Labs [28](#page=28).
* **bash (Bourne-Again Shell)**: Uitgebracht in 1989, breidt de functionaliteit van `sh` uit met features zoals command completion en geschiedenisbeheer [28](#page=28).
* **tcsh**: Een variant van de C shell (`csh`) van Berkeley Unix, met een syntax die meer lijkt op de C-programmeertaal [28](#page=28).
* **dash (Debian Almquist Shell)**: Ontworpen om zo klein en snel mogelijk te zijn. Het is de standaard non-interactieve shell in Ubuntu/Debian [28](#page=28).
* **zsh (Z Shell)**: Een uitgebreide Bourne shell, en de standaard shell in macOS Catalina en Kali 2020.4 [28](#page=28).
Andere vermeldde shells zijn onder andere `ksh` (Korn Shell) en `fish` (Friendly Interactive Shell) [28](#page=28).
### 3.2 Interactieve en non-interactieve shells
#### 3.2.1 Non-interactieve shells
Wanneer shells non-interactief worden uitgevoerd, verwerken ze commando's die uit een bestand worden gelezen. De zogenaamde "shebang" (`#!`) aan het begin van scripts verwijst vaak naar `'/bin/sh'` of `'/usr/bin/sh'` als de non-interactieve shell. In veel huidige Debian-releases is `'/bin/sh'` een symbolische link naar `dash'` [29](#page=29) [30](#page=30).
> **Voorbeeld:**
> ```bash
> ~USD cat helloworld.sh
> #!/bin/sh
> echo "hello world"
> ```
> Wanneer dit script wordt uitgevoerd, wordt `echo "hello world"` verwerkt door de shell die wordt gespecificeerd door de shebang [29](#page=29).
#### 3.2.2 Interactieve login shells
Een interactieve login shell is de shell waarmee een gebruiker zich aanmeldt bij het systeem. De lijst met beschikbare geïnstalleerde shells kan worden gevonden in het bestand `'/etc/shells'` [31](#page=31).
> **Voorbeeld van `'/etc/shells'`:**
> ```
> # /etc/shells: valid login shells
> /bin/sh
> /bin/bash
> /usr/bin/bash
> /bin/rbash
> /usr/bin/rbash
> /bin/dash
> /usr/bin/dash
> ```
> [31](#page=31).
De standaard login shell voor nieuwe gebruikers wordt geconfigureerd via het `adduser` commando in `'/etc/adduser.conf'` (Debian) of `useradd` in `'/etc/default/useradd'` (Debian/RHEL). De login shell voor elke gebruiker is vastgelegd in `'/etc/passwd'`. De login shell van een gebruiker kan worden gewijzigd met het commando `chsh` of `usermod --shell ` [32](#page=32).
#### 3.2.3 Bepalen van de huidige shell
Om te achterhalen welke shell momenteel actief is, kan men gebruik maken van de PID van het draaiende proces. De variabele `$$` bevat de PID van de huidige shell. Met `ps -p $$` kan de commando-naam van dit proces worden getoond. Alternatief ondersteunen de meeste shells de variabele `$0`. Merk op dat `$SHELL` verwijst naar de *standaard* shell, niet noodzakelijkerwijs de shell die momenteel draait [33](#page=33).
> **Tip:** De variabele `USDSHELL` is een omgevingsvariabele die de padnaam van de standaardlogin shell van de gebruiker bevat [33](#page=33).
> **Voorbeeld:**
> ```bash
> ~USD ps -p USDUSD
> PID TTY TIME CMD
> 1262 pts/0 00:00:00 bash
>
> ~$ echo $0
> -bash
>
> ~$ echo $SHELL
> /bin/bash
> ```
> [33](#page=33).
### 3.3 Restricted shells
Restricted shells zijn ontworpen om de mogelijkheden van een gebruiker te beperken [35](#page=35).
#### 3.3.1 rbash (Restricted Bash)
`rbash` is in feite `bash` met de `-r` optie geactiveerd, wat resulteert in beperkte functionaliteit. Informatie hierover is te vinden via `man rbash` of door de `-r` optie in `man bash` te bekijken. `rbash` is ook terug te vinden in `'/etc/shells'`, wat aangeeft dat het een geldige login shell kan zijn [35](#page=35).
> **Let op:** `rbash` kan relatief eenvoudig worden omzeild. Er bestaan diverse technieken en gidsen voor het omzeilen van restricted shells [37](#page=37).
#### 3.3.2 /usr/sbin/nologin
De `nologin` shell, vaak te vinden in `'/usr/sbin/nologin'`, wordt gebruikt om gebruikers te verhinderen zich interactief aan te melden op het systeem. Als `nologin` wordt toegewezen als standaard login shell, kan de gebruiker geen interactieve sessie starten. Dit is nuttig voor gebruikers die alleen diensten zoals FTP of SFTP moeten kunnen gebruiken, maar geen toegang tot de shell nodig hebben. Het bestand `nologin` wordt niet vermeld in `'/etc/shells'` [38](#page=38).
> **Belangrijk onderscheid:** `/usr/sbin/nologin` is een programma dat wordt uitgevoerd wanneer een gebruiker probeert in te loggen met `nologin` als shell. Dit verschilt van het bestand `'/etc/nologin'`. Als het bestand `'/etc/nologin'` (of `'/var/run/nologin'`) bestaat en leesbaar is, wordt alleen root toegelaten tot het systeem. Andere gebruikers zien de inhoud van dit bestand en hun loginpogingen worden geweigerd. Dit biedt een manier om tijdelijk alle onbevoegde logins te blokkeren [39](#page=39).
### 3.4 Shell geschiedenis en timestamping
De omgevingsvariabele `USDHISTTIMEFORMAT` kan worden ingesteld om timestamps toe te voegen aan de shell geschiedenis. Dit maakt het gemakkelijker om de tijdstippen van commando-uitvoering te traceren [40](#page=40).
---
# Superuser-toegang en handige tools
Dit onderdeel behandelt methoden om root-rechten te verkrijgen via `su` en `sudo`, en introduceert diverse nuttige shell-commando's, sneltoetsen en documentatie-tools zoals `man` en `info`.
### 4.1 Superuser-toegang verkrijgen
Het verkrijgen van superuser-rechten is essentieel voor het uitvoeren van beheer taken op een Linux-systeem. Er zijn verschillende commando's om dit te bewerkstelligen, elk met subtiele verschillen in hoe ze de omgeving en de gebruiker die het commando uitvoert beheren [42](#page=42).
#### 4.1.1 `su` commando
Het `su` (substitute user) commando stelt een gebruiker in staat om een andere gebruiker te worden. Standaard wordt de gebruiker root [42](#page=42).
* **`su`**: Hiermee wordt de gebruiker root, maar de omgeving blijft deels behouden van de oorspronkelijke gebruiker. Er is een wachtwoord van de root-gebruiker voor nodig [42](#page=42).
* **`su -`** of **`su --login`**: Hiermee wordt de gebruiker root en wordt de shell gestart met de omgevingsvariabelen van de root-gebruiker alsof er direct als root is ingelogd. Ook hiervoor is het root-wachtwoord vereist [42](#page=42).
#### 4.1.2 `sudo` commando
Het `sudo` (superuser do) commando is een alternatieve en vaak veiligere manier om commando's uit te voeren met verhoogde privileges. `sudo` werkt op basis van configuratiebestanden (`/etc/sudoers`) die bepalen wie welke commando's mag uitvoeren. Het vereist niet het root-wachtwoord, maar het wachtwoord van de gebruiker die het commando uitvoert [42](#page=42).
* **`sudo -s`** of **`sudo --shell`**: Start een shell als de huidige gebruiker, maar met de mogelijkheid om commando's als root uit te voeren. De omgeving van de gebruiker wordt behouden [42](#page=42).
* **`sudo su -`** of **`sudo su --login`**: Start een shell als root met de omgevingsvariabelen van root [42](#page=42).
* **`sudo -i`** of **`sudo --login`**: Dit commando is gelijk aan `sudo su -` en start een interactieve shell als root met de volledige root-omgeving [42](#page=42).
> **Tip:** `sudo!!` is een handige sneltoets die het laatst uitgevoerde commando opnieuw uitvoert, maar dan met `sudo` ervoor. Dit is handig als je bijvoorbeeld `apt update` uitvoert en een "permission denied" foutmelding krijgt [46](#page=46).
### 4.2 Nuttige shell commando's en sneltoetsen
De command-line interface (shell) biedt een breed scala aan commando's en sneltoetsen die de productiviteit aanzienlijk kunnen verhogen [43](#page=43) [44](#page=44).
#### 4.2.1 Sneltoetsen
Er zijn diverse sneltoetsen die standaard werken in de meeste shells en terminal-emulators [44](#page=44):
* `CTRL + A`: Ga naar het begin van de regel [44](#page=44).
* `CTRL + E`: Ga naar het einde van de regel [44](#page=44).
* `CTRL + L`: Maakt het scherm leeg, vergelijkbaar met het `clear` commando maar zonder de huidige regel te verwijderen [44](#page=44).
* `CTRL + W`: Verwijdert het woord direct voor de cursor [44](#page=44).
* `CTRL + left/right`: Springt een woord per keer vooruit of achteruit [44](#page=44).
* `CTRL + R`: Start een omgekeerde zoekactie in de commando-geschiedenis (in sommige terminals, zoals cmd, is dit F7) [44](#page=44).
#### 4.2.2 Belangrijke commando's
Een selectie van veelgebruikte en krachtige commando's omvat [45](#page=45):
* **Bestandsbeheer en navigatie**:
* `pwd`: Toont de huidige werkdirectory [45](#page=45).
* `cd`: Wijzigt de huidige directory [45](#page=45).
* `ls`: Geeft een lijst van bestanden en mappen in de huidige of een gespecificeerde directory [45](#page=45).
* `rm`: Verwijdert bestanden of mappen [45](#page=45).
* `cp`: Kopieert bestanden of mappen [45](#page=45).
* `mv`: Verplaatst of hernoemt bestanden of mappen [45](#page=45).
* **Bestandsinhoud en manipulatie**:
* `cat`: Toont de inhoud van een of meerdere bestanden [45](#page=45).
* `less`, `more`: Pagineren door lange bestanden, waarbij `less` meer functionaliteit biedt [45](#page=45).
* `head`: Toont de eerste regels van een bestand [45](#page=45).
* `tail`: Toont de laatste regels van een bestand [45](#page=45).
* `wc`: Telt het aantal regels, woorden en karakters in een bestand [45](#page=45).
* `cut`: Verwijdert secties uit elke regel van bestanden [45](#page=45).
* `sort`: Sorteert regels in tekstbestanden [45](#page=45).
* **Zoeken en filteren**:
* `grep`: Zoekt naar patronen in bestanden [45](#page=45).
* `find`: Zoekt naar bestanden en mappen in een directoryhiërarchie, met krachtige filteropties zoals op naam, tijdstempel, permissies en grootte [45](#page=45) [49](#page=49).
* `locate`: Een snellere zoekopdracht die een geïndexeerde database gebruikt; vereist `updatedb` om de index bij te werken [45](#page=45) [49](#page=49).
* **Procesbeheer**:
* `ps`: Geeft informatie over actieve processen [45](#page=45).
* `kill`: Verstuurt signalen naar processen, vaak om ze te beëindigen [45](#page=45).
* `bg`: Zet een gestopt proces voort op de achtergrond [45](#page=45).
* `fg`: Brengt een achtergrondproces naar de voorgrond [45](#page=45).
* `jobs`: Toont de actieve jobs in de huidige shell [45](#page=45).
* **Netwerk en schijfgebruik**:
* `wget`: Downloadt bestanden van het web [45](#page=45).
* `netstat` / `ss`: Toont netwerkverbindingen en statistieken [45](#page=45).
* `df`: Rapporteert schijfgebruik van bestandssystemen [45](#page=45).
* `du`: Schat schijfgebruik van bestanden [45](#page=45).
* **Bestandspermissies**:
* `chmod`: Wijzigt toegangsrechten van bestanden [45](#page=45).
* `chown`: Wijzigt de eigenaar en groep van bestanden [45](#page=45).
#### 4.2.3 Documentatie tools
Wanneer je een commando niet kent of de opties ervan wilt opzoeken, zijn `man` en `info` de standaard documentatie-hulpmiddelen [45](#page=45) [48](#page=48).
* **`man` pages**: Het `man` (manual) commando toont de handleidingpagina's voor commando's, systeemoproepen, configuratiebestanden, etc. [46](#page=46).
* `man `: Toont de handleiding van een commando.
* `man -k ` of `apropos `: Zoekt naar commando's op basis van trefwoorden in hun beschrijving [46](#page=46).
* `man -f ` of `whatis `: Geeft een korte beschrijving van een commando [46](#page=46).
* `man `: Soms zijn er meerdere handleidingen voor hetzelfde commando in verschillende secties (bijvoorbeeld `man 1 passwd` voor het commando en `man 5 passwd` voor het configuratiebestand) [47](#page=47).
* **`info` pages**: Het `info` commando is een ander documentatiesysteem, vaak met meer uitgebreide en gestructureerde informatie dan de `man` pages [45](#page=45).
> **Tip:** Maak er een gewoonte van om bij twijfel de `man` of `info` pagina's te raadplegen. Dit is een cruciale vaardigheid voor effectief command-line gebruik [46](#page=46).
### 4.3 Shell fun
Naast de serieuze tools zijn er ook commando's die voor amusement zorgen [50](#page=50).
* `sl`: Een animatie van een stoomtrein die door de terminal rijdt [50](#page=50).
* `lolcat`: Kleurt de output van commando's in regenboogkleuren [50](#page=50).
* `cowsay`: Laat een koe (of andere figuren) een tekstballon uitspreken [50](#page=50).
* `hollywood`: Start een "hackermodus" met vallende karakters [50](#page=50).
* `curl wttr.in/Bruges`: Toont het weerbericht voor een specifieke locatie [50](#page=50).
* `telnet mapscii.me`: Toont een ASCII-kaart [50](#page=50).
---
# Secure Shell (SSH) en tunneling
Dit hoofdstuk behandelt het Secure Shell (SSH) protocol, de implementatie ervan, het gebruik van SSH-sleutels voor authenticatie en serveridentificatie, en introduceert SSH-tunnelingtechnieken zoals lokale en reverse port forwarding.
### 5.1 Het SSH-protocol
SSH is primair een applicatie- en transportprotocol dat is gedefinieerd in RFC 4251. Het hoofddoel van SSH is het beveiligen van netwerkservices over een onbeveiligd netwerk, wat essentiële functionaliteiten biedt zoals veilige remote logins, veilige bestandsoverdrachten met protocollen zoals Secure Copy Protocol (SCP) en SSH File Transfer Protocol (SFTP) [53](#page=53).
Er zijn twee belangrijke versies van het protocol:
* **SSH-1**: Dit is de oudere versie die sinds 1995 bestaat, maar wordt niet meer ondersteund door veel moderne implementaties [53](#page=53).
* **SSH-2**: Deze versie is sinds 2006 de huidige standaard en wordt in de meeste gevallen gebruikt. Het is belangrijk te weten dat SSH-1 en SSH-2 niet compatibel zijn met elkaar [53](#page=53).
### 5.2 OpenSSH implementatie
OpenSSH is een veelgebruikte implementatie van het SSH-protocol. Hoewel SSH de naam van het protocol is, verwijst `ssh` ook naar het clientprogramma van OpenSSH [54](#page=54).
Op Linux-systemen worden de benodigde pakketten voor OpenSSH doorgaans geleverd als `openssh-client` en `openssh-server`. De configuratiebestanden bevinden zich op de volgende locaties [54](#page=54):
* Voor de SSH-client: `/etc/ssh/ssh_config` [54](#page=54).
* Voor de SSH-server (daemon): `/etc/ssh/sshd_config` [54](#page=54).
Op Windows-systemen zijn de uitvoerbare bestanden van OpenSSH (inclusief `sshd` indien geïnstalleerd) te vinden in `C:\Windows\System32\OpenSSH`. Hier bevindt zich ook het `sshd_config` bestand als de OpenSSH server is geïnstalleerd [55](#page=55).
### 5.3 SSH-sleutels voor authenticatie en serveridentificatie
SSH maakt gebruik van cryptografische sleutelparen voor zowel authenticatie als het verifiëren van de identiteit van servers en clients [56](#page=56).
#### 5.3.1 Serveridentificatie
Om de identiteit van een server te verifiëren, gebruikt de client de **server host key**. Deze sleutels zijn te vinden op de server in het bestand `/etc/ssh/ssh_host_*_key` en komen in verschillende formaten voor (RSA, ECDSA, ED25519) [56](#page=56).
De client bewaart informatie over servers die het vertrouwt in een bestand genaamd `known_hosts`. Op Linux-systemen bevindt dit bestand zich in de `.ssh` directory van de gebruiker. Op Windows-systemen is dit `%UserProfile%\.ssh\known_hosts` [56](#page=56) [57](#page=57).
Wanneer een client voor het eerst verbinding maakt met een server, stuurt de server zijn publieke host key naar de client. De client controleert of deze sleutel overeenkomt met een reeds bekende sleutel in het `known_hosts` bestand. Deze controle gebeurt op basis van de **fingerprint** van de publieke sleutel van de server, wat een unieke checksum is [57](#page=57).
Als de fingerprint van de server die de client probeert te bereiken niet overeenkomt met de opgeslagen fingerprint, wordt de verbinding geweigerd omdat er een risico is dat het niet de bedoelde host betreft [58](#page=58).
#### 5.3.2 Clientauthenticatie
Voor het verifiëren van de identiteit van clients worden ook SSH-sleutels gebruikt. De publieke sleutels van clients die geautoriseerd zijn om in te loggen, worden op de server opgeslagen in het bestand `.ssh/authorized_keys` [56](#page=56).
Er zijn twee hoofdmethoden voor clientlogin:
* **Password login**: Hierbij worden wachtwoorden gebruikt. Deze methode is automatisch, maar kan gevoeliger zijn voor Man-in-the-Middle (MITM) aanvallen als de server fingerprint waarschuwingen worden genegeerd [59](#page=59).
* **SSH key login**: Hierbij worden SSH-sleutelparen gebruikt. Deze sleutels worden handmatig gegenereerd en maken automatische login mogelijk, wat als veiliger wordt beschouwd dan wachtwoordauthenticatie [59](#page=59).
### 5.4 SSH-tunneling
SSH-tunneling, ook wel bekend als port forwarding, stelt gebruikers in staat om netwerkverkeer van de ene poort naar de andere te leiden, veilig versleuteld door de SSH-verbinding. Er zijn twee primaire vormen van SSH-tunneling: lokaal en reverse port forwarding [60](#page=60).
#### 5.4.1 Lokaal port forwarding (`-L`)
Lokaal port forwarding wordt gebruikt om een lokale poort op uw machine te koppelen aan een poort op een externe host, via de SSH-server. Dit is nuttig om toegang te krijgen tot services die normaal gesproken niet extern bereikbaar zijn [61](#page=61).
De syntax is:
`ssh -L :: @` [61](#page=61).
**Voorbeeld**:
`ssh -L 8080:reddit.com:80 sshuser@172.21.18.53` [61](#page=61).
In dit voorbeeld wordt verkeer dat binnenkomt op poort `8080` van de lokale machine, via de SSH-verbinding gestuurd naar `reddit.com` op poort `80`. `remote_host` en `IP` kunnen extern zijn en zelfs dezelfde host zijn [61](#page=61).
#### 5.4.2 Reverse port forwarding (`-R`)
Reverse port forwarding wordt gebruikt om een poort op de SSH-server te koppelen aan een poort op uw lokale machine of een machine in uw lokale netwerk. Dit is nuttig wanneer u een service op uw lokale machine beschikbaar wilt maken voor een externe partij, zelfs als u zich achter een NAT bevindt [62](#page=62).
Om reverse port forwarding te gebruiken, moet de SSH-serverconfiguratie mogelijk worden aangepast [62](#page=62):
1. Bewerk het bestand `/etc/ssh/sshd_config`.
2. Stel de optie `GatewayPorts yes` in [62](#page=62).
3. Herstart de SSH-daemon: `systemctl restart sshd` [62](#page=62).
De syntax is:
`ssh -R :: @` [62](#page=62).
**Voorbeeld**:
`ssh -R 8888:localhost:8000 sshuser@172.21.18.53` [62](#page=62).
Dit betekent dat verkeer dat binnenkomt op poort `8888` van de SSH-server (die zich op `172.21.18.53` bevindt), via de SSH-verbinding wordt doorgestuurd naar poort `8000` van de lokale machine (`localhost` relatief aan de SSH-client) [62](#page=62).
#### 5.4.3 Onthouden van tunnelopties
Een handige manier om de opties voor lokaal en reverse port forwarding te onthouden is door te denken aan de richting van de dataflow [63](#page=63):
* `ssh -L`: Staat voor "local to remote" [63](#page=63).
* `ssh -R`: Staat voor "remote to local" [63](#page=63).
Meer details kunnen gevonden worden in de man-pagina van `ssh` door te zoeken naar "-L" en "-R" [63](#page=63).
#### 5.4.4 Use cases voor tunneling
* **Database server toegankelijk maken**: Stel dat een database server PostgreSQL draait op poort 5432, maar alleen lokale verbindingen toestaat. Als u toegang wilt vanaf een externe machine en u heeft een externe IP met een SSH-server, kunt u een lokale tunnel opzetten [64](#page=64):
`ssh -L 9000:localhost:5432 user@IP`
Vervolgens verbindt u met `localhost:9000` om de database te bereiken [64](#page=64).
* **Lokale applicatie extern beschikbaar maken**: Als u een applicatie op poort 8000 lokaal draait achter NAT, en collega's deze willen testen, kunt u een reverse tunnel gebruiken via een externe SSH-server [65](#page=65):
`ssh -R 8888:localhost:8000 user@IP`
Uw collega's kunnen dan verbinden met `IP:8888` om uw lokale applicatie te benaderen [65](#page=65).
#### 5.5 Andere SSH features
Naast de kernfunctionaliteiten en tunneling biedt SSH nog diverse andere nuttige functies [67](#page=67) [68](#page=68):
* **Commando's uitvoeren zonder in te loggen**: U kunt direct commando's uitvoeren op een remote machine [67](#page=67):
`ssh student@172.21.19.1 cat /home/student/file.txt`
`ssh root@192.168.32.136 tcpdump -i ens33` (vereist `PermitRootLogin yes` op de server)
* **GUI programma's remote uitvoeren**: Met de optie `X11Forwarding` kunt u grafische applicaties remote draaien [67](#page=67):
`ssh -fX @ `
* **Remote directory's mounten**: Met `sshfs` kunt u remote bestandssystemen lokaal mounten [67](#page=67):
`sshfs user@IP:/media/data ~/server/` (op Linux)
* **Springen via jump hosts**: U kunt meerdere SSH-servers doorlopen om een eindbestemming te bereiken, waarbij de verbinding van begin tot eind versleuteld blijft [68](#page=68):
`ssh -J host1,host2,host3 user@host4`
* **Port forwarding aanpassen binnen een sessie**: Door binnen een SSH-sessie de controle-escape sequentie `~C` te gebruiken (druk op Enter en type dan `~C`), kunt u de huidige verbinding bewerken en bijvoorbeeld een nieuwe port forwarding toevoegen [68](#page=68).
> **Tip:** Een lab-oefening kan onder andere het opzetten van een SSH-tunnel naar een VM op een Howest server omvatten [69](#page=69).
---
## Veelgemaakte fouten om te vermijden
- Bestudeer alle onderwerpen grondig voor examens
- Let op formules en belangrijke definities
- Oefen met de voorbeelden in elke sectie
- Memoriseer niet zonder de onderliggende concepten te begrijpen
Glossary
| Term | Definition |
|------|------------|
| Terminal (emulator) | Een interface voor tekstinvoer en -uitvoer, die communiceert met de computer. Het emuleert vroegere fysieke terminals die direct verbonden waren met een centrale mainframecomputer. |
| Shell | Een programma dat fungeert als tussenpersoon tussen de gebruiker en de kernel, en commando's vertaalt naar acties die het systeem kan uitvoeren. |
| Terminal Multiplexer | Een programma dat het mogelijk maakt om binnen één terminalvenster meerdere vensters en gesplitste weergaven (panes) te openen en deze sessies te bewaren, zodat men kan uitloggen en later kan verdergaan. Voorbeelden zijn tmux en zellij. |
| Bestandsnaamexpansie | Een functie van de shell die patronen gebruikt om overeenkomende bestandsnamen uit te breiden. Als er geen overeenkomst is, wordt het patroon behandeld als een gewone tekenreeks. Symbolen zoals `*` (nul of meer tekens) en `?` (exact één teken) worden gebruikt. |
| Brace Expansion (Kolfuitbreiding) | Een shellfunctie die reeksen van tekens of getallen genereert op basis van de opgegeven patronen binnen accolades, zoals `{a,b,c}` of `{0..6}`. Dit hoeft niet overeen te komen met bestaande bestandsnamen. |
| Command Substitution (Commando Substitutie) | Een functie die de uitvoer van een commando vervangt door de werkelijke uitvoer ervan. Dit wordt gedaan met behulp van `$( )` of de verouderde backticks ` ` . |
| Arithmetic Expansion (Rekenkundige Expansie) | Een shellfunctie die rekenkundige expressies evalueert. Dit wordt gedaan met behulp van `(( ))` en stelt gebruikers in staat om berekeningen direct in de shell uit te voeren. |
| Piping (Pijplijn) | Een mechanisme dat de standaarduitvoer van het ene commando doorstuurt als standaardinvoer naar een ander commando. Alleen de standaarduitvoer wordt standaard doorgegeven, geen foutmeldingen. |
| Redirection (Herleiding) | Het proces waarbij de standaardinvoer, -uitvoer of -foutstroom van een commando wordt gewijzigd naar een bestand of een andere stream. Symbolen zoals `>` (overschrijven), `>>` (toevoegen), `<` (invoer) en `2>` (fouten) worden gebruikt. |
| Virtual Terminal (Virtuele Terminal) | Een tekstgebaseerde interface die wordt gebruikt om meerdere sessies te beheren zonder grafische interface. Deze zijn altijd beschikbaar en worden aangeduid met namen als 'tty1', 'tty2'. |
| Pseudo Terminal | Een terminal die dynamisch wordt aangemaakt bij het openen van een nieuwe terminalemulator in een grafische omgeving of via een netwerkverbinding, zoals SSH. |
| SSH (Secure Shell) | Een netwerkprotocol dat wordt gebruikt voor veilige netwerkservices over een onbeveiligd netwerk, met name voor veilige externe logins, bestandsoverdrachten (SCP, SFTP) en andere toepassingen. |
| SSH Tunneling (SSH Tunneling) | Een techniek waarbij netwerkverkeer via een beveiligde SSH-verbinding wordt geleid. Dit omvat Local Port Forwarding (lokale poort doorsturen naar een externe host) en Reverse Port Forwarding (externe poort doorsturen naar een lokale host). |
| SSH Keys | Cryptografische sleutelparen (publiek en privé) die worden gebruikt voor authenticatie en autorisatie in SSH. SSH-sleutels kunnen wachtwoordloze logins mogelijk maken en verhogen de beveiliging door het gebruik van sterke encryptie. |
| Restricted Shell (Beperkte Shell) | Een shellconfiguratie die de mogelijkheden van een gebruiker beperkt. `rbash` is een voorbeeld dat de toegang tot bepaalde commando's of functionaliteiten beperkt om de veiligheid te verhogen. |
| `/usr/sbin/nologin` | Een speciaal programma dat wordt gebruikt als login-shell voor gebruikers die geen interactieve toegang tot het systeem nodig hebben. Het weigert login-pogingen en toont eventueel een bericht. |
Cover
MODULE 1.docx
Summary
# Computer hardware components
This section details the fundamental physical parts of a computer, including the motherboard, central processing unit (CPU), and input/storage devices.
## 1. Computer hardware components
Hardware refers to the physical components of a computer that you can touch or interact with tangibly.
### 1.1 Motherboard
The motherboard is the main circuit board of a computer, serving as the central hub where most of the other components and peripherals are connected.
### 1.2 Central processing unit (CPU)
The CPU is the central component and often referred to as the "brain" of the computer. It is responsible for executing all functions and processes performed on the computer.
#### 1.2.1 Processor speed
Processor speed is a key factor determining a computer's performance. It is measured by the number of cycles the CPU can perform per second.
#### 1.2.2 How a processor works
The operation of a processor involves a four-step cycle:
1. **Fetching:** Retrieving an instruction or data from memory.
2. **Decoding:** Translating the fetched instruction into signals that the computer can execute.
3. **Executing:** Carrying out the command specified by the instruction.
4. **Storing:** Writing the result of the execution back to memory.
### 1.3 Input devices
Input devices are used to provide data and send instructions to the computer.
#### 1.3.1 Keyboard
A keyboard is a device used for inputting text and characters by pressing buttons, similar to a typewriter.
#### 1.3.2 Pointing devices
Pointing devices are used to interact with graphical user interfaces. Examples include:
* **Optical Mouse:** Utilizes lasers or LEDs to track movement on a surface, translating it into cursor movements on the screen.
* **Trackball:** A pointing device with an exposed ball that detects rotation to control cursor movement.
* **Touchscreen:** A computer screen that can be operated by touch with a finger or stylus.
#### 1.3.3 Game controller
An input device used with video games and entertainment systems. This category can include gamepads, joysticks, steering wheels, and paddle controllers, in addition to keyboards and mice.
### 1.4 Storage devices (secondary memory)
Storage devices are non-volatile, meaning they retain data even when the power is turned off. They allow for long-term storage of data and information.
#### 1.4.1 Hard disk drive (HDD)
The main, large data storage area within a computer. HDDs are used to store the operating system, application programs, and user data.
#### 1.4.2 Solid state drive (SSD)
SSDs are non-volatile storage devices that offer several advantages over HDDs, including:
* Noiseless operation.
* More energy efficiency.
* Producing less heat.
#### 1.4.3 Tape drive
Used for long-term storage and backups, tape drives can store significant amounts of data, potentially up to 100 terabytes.
#### 1.4.4 Optical media
* **Compact Disc (CD):** A common type of removable media suitable for music and data, with a storage capacity of around 700 megabytes.
* **Digital Versatile Disc (DVD):** Similar in size to a CD but with a larger storage capacity. Commonly used for transferring digital video and data storage.
* **Blu-ray Disc (BD):** Available in single-layered (25 gigabytes) and dual-layered (50 gigabytes) formats.
#### 1.4.5 Universal Serial Bus (USB) flash drive
These drives are typically small, lightweight, removable, and rewritable, with capacities ranging from hundreds of megabytes to tens of gigabytes.
#### 1.4.6 External hard disk
External hard drives offer large storage capacities, ranging from 500 gigabytes to 10 terabytes.
#### 1.4.7 Units of memory capacity
* **Bit:** The smallest unit of data in a computer, capable of holding a single binary value (0 or 1).
### 1.5 Software
Software consists of the instructions (programs) that make a computer function. It is typically stored on a hard disk, CD, DVD, or USB flash drive and loaded into RAM when needed.
#### 1.5.1 Utilities software
Utilities software adds functionality to a computer and helps it perform better. This category includes applications for antivirus protection, backup, disk repair, file management, and file compression. Some utilities are integrated into the operating system, while others are installed separately (e.g., WinZip, WinRAR, McAfee).
#### 1.5.2 Device driver
A device driver is a type of system software designed to enable interaction between a hardware device and the operating system or programs that use it. Examples include drivers for printers, graphics cards, sound cards, network cards, and modems.
#### 1.5.3 Installing and uninstalling software
Software can be installed from physical media like discs or USB flash drives, or downloaded from the web. Uninstalling software applications is also a standard procedure.
#### 1.5.4 Software copyright
Software copyright is used by proprietary software companies to prevent the unauthorized copying of their products.
##### 1.5.4.1 End-User License Agreement (EULA)
A EULA is a legal contract between the software manufacturer and the end user, outlining the terms of use for an application.
##### 1.5.4.2 Shareware
Shareware is proprietary software provided to users on a trial basis without initial payment. The software may cease to function after the trial period ends unless a license is purchased. Examples include Microsoft Office and Adobe Photoshop.
##### 1.5.4.3 Freeware
Freeware is software that is fully functional for an unlimited time and can be used at no cost. Examples include Mozilla Firefox and Google Chrome.
##### 1.5.4.4 Proprietary software
Proprietary software is copyrighted and has restrictions imposed by its publisher, vendor, or developer regarding its use, distribution, and modification.
##### 1.5.4.5 Open source software
Open source software is developed collaboratively by many individuals and distributed with rights granted to use, modify, and share the software in both its original and modified forms. Open Office is an example.
### 1.6 Choosing the right computer
Selecting the optimal computer depends on several factors, including the operating system, computer size, hard drive capacity, processor speed, and the availability of hardware and software.
#### 1.6.1 Factors considered when buying a computer
When purchasing a computer, it is important to consider:
* **Usability:** Ease of use.
* **Price:** The cost of the device.
* **Operating System:** The platform it runs on.
* **Processor:** The speed and capability of the CPU.
* **Random Access Memory (RAM):** The amount of primary memory available.
* **Storage:** The capacity and type of storage devices.
* **Brand:** The reputation and reliability of the manufacturer.
### 1.7 Ergonomics
Ergonomics is the science of designing jobs, equipment, and workplaces to fit the worker. It is crucial for preventing Repetitive Strain Injuries (RSI), which can lead to long-term disability. Proper ergonomic practices include:
* Ensuring adequate lighting and ventilation.
* Using a comfortable and adjustable chair.
* Selecting a monitor with suitable size, brightness, and contrast.
* Taking regular short breaks.
Failure to implement ergonomic principles can result in issues such as repetitive strain injury, back and neck pain, joint pain, muscle stiffness, computer vision syndrome, and headaches.
---
# Computer software and its types
Computer software refers to the non-physical instructions and programs that enable a computer to perform tasks and function.
### 2.1 System software
System software is a class of computer programs designed to operate and control the computer hardware and to provide a platform for running application software.
#### 2.1.1 Operating system
The operating system (OS) is the core system software that manages computer hardware and software resources. It acts as an intermediary between the user and the computer hardware, providing essential services such as process management, memory management, file management, and device management.
#### 2.1.2 Utility software
Utility software enhances the functionality of a computer and helps it perform better. These programs are designed to assist in the maintenance, management, and optimization of computer systems. Common types of utility software include:
* **Antivirus software:** Detects and removes malicious software (malware).
* **Backup software:** Creates copies of data to protect against loss.
* **Disk repair utilities:** Help to identify and fix errors on storage devices.
* **File management tools:** Organize, locate, and manage files and folders.
* **File compression utilities:** Reduce the size of files for easier storage and transmission.
> **Tip:** Some utility software is built into the operating system, while others need to be installed separately. Examples of third-party utility software include WinZip, WinRAR, and McAfee.
#### 2.1.3 Device drivers
A device driver is a special type of system software that enables the interaction between a hardware device and the operating system or other software that uses it. Drivers translate general commands from the OS into specific instructions that the hardware can understand.
> **Example:** Drivers are essential for hardware components such as printers, graphics cards, sound cards, and network cards to function correctly with the computer.
### 2.2 Installing and uninstalling software
Software can be installed onto a computer from various sources, including physical media like discs or USB flash drives, and downloaded from the internet. Uninstalling software removes it from the system, often reverting changes made during installation.
### 2.3 Software copyright and licensing
Software copyright is used by proprietary software companies to protect their intellectual property and prevent unauthorized copying.
#### 2.3.1 End-user license agreement (EULA)
An EULA is a legal contract between the software developer/publisher and the end user, outlining the terms of use, distribution, and modification of the software.
#### 2.3.2 Shareware
Shareware is proprietary software that is distributed to users for a trial period without payment. After the trial period expires, the user is typically required to purchase a license to continue using the software.
> **Example:** Microsoft Office and Adobe Photoshop are often distributed as shareware.
#### 2.3.3 Freeware
Freeware is software that is fully functional and can be used for an unlimited time without any cost.
> **Example:** Mozilla Firefox and Google Chrome are examples of freeware.
#### 2.3.4 Proprietary software
Proprietary software is copyrighted and has restrictions on its use, distribution, and modification imposed by its publisher, vendor, or developer.
#### 2.3.5 Open source software
Open source software is developed collaboratively by many individuals and is distributed with rights that allow users to use, modify, and share the software in its original or modified forms.
> **Example:** OpenOffice is an example of open source software.
---
# Choosing and using a computer
This section provides guidance on selecting the appropriate computer based on various factors and introduces the principles of ergonomics for safe and comfortable computer use.
### 3.1 Choosing the right computer
Selecting the optimal computer depends on several key factors that align with your needs and preferences.
#### 3.1.1 Factors to consider when buying a computer
When purchasing a computer, several crucial elements must be taken into account to ensure it meets your requirements effectively.
* **Usability:** The ease with which a user can operate and interact with the computer.
* **Price:** The cost of the computer, which can vary significantly based on specifications and brand.
* **Operating System (OS):** The fundamental software that manages the computer's hardware and software resources, providing a user interface.
* **Processor:** The central processing unit (CPU), often referred to as the "brain" of the computer, responsible for executing instructions. Its speed and capabilities significantly impact performance.
* **Random Access Memory (RAM):** A type of computer memory that can be read from and written to while in use. It's crucial for multitasking and running applications smoothly.
* **Storage:** The capacity to store data and programs, which can be achieved through various devices like hard drives and solid-state drives.
* **Brand:** The manufacturer of the computer, which can influence reliability, customer support, and perceived quality.
### 3.2 Ergonomics
Ergonomics is the scientific discipline focused on designing jobs, equipment, and workplaces to fit the worker. This is essential for preventing Repetitive Strain Injuries (RSI), which can develop over time and lead to long-term disability.
#### 3.2.1 Principles for safe and comfortable computer use
To ensure a safe and comfortable computing experience and to mitigate potential health issues, several ergonomic principles should be observed.
* **Adequate lighting and ventilation:** The workspace should be well-lit to reduce eye strain and have proper ventilation for comfort.
* **Comfortable and adjustable chair:** A chair that provides good lumbar support and can be adjusted to the user's height and posture is vital.
* **Suitable monitor:** The monitor should be of an appropriate size, with adjustable brightness and contrast to minimize eye fatigue.
* **Regular short breaks:** Taking frequent, short breaks during extended computer use is crucial to prevent muscle stiffness and fatigue.
#### 3.2.2 Common ergonomic-related issues
Neglecting proper posture and workstation setup can lead to several physical ailments.
* **Repetitive strain injury (RSI):** Injuries caused by repetitive movements and overuse of muscles and tendons.
* **Back and neck pain:** Often a consequence of poor posture and prolonged sitting without adequate support.
* **Joint pain and muscle stiffness:** Can result from static postures and repetitive motions.
* **Computer vision syndrome:** A group of eye and vision related problems resulting from prolonged computer use.
* **Headaches:** Can be triggered by eye strain, poor lighting, or stress associated with computer work.
---
## Common mistakes to avoid
- Review all topics thoroughly before exams
- Pay attention to formulas and key definitions
- Practice with examples provided in each section
- Don't memorize without understanding the underlying concepts
Glossary
| Term | Definition |
|------|------------|
| Computer | An electronic machine that accepts data, stores and processes it according to instructions (programs) to produce results (information). |
| Personal Computer (or Microcomputer) | A personal computer designed for individual use, which can be a desktop, laptop, tablet, or smartphone. |
| Desktop Computer | A personal computer designed to be placed on a desk. |
| Laptop Computer | A portable computer with an integrated screen and keyboard, designed for mobility. |
| Tablet Computer | A handheld computer that is more portable than a laptop, typically featuring a touchscreen interface. |
| Smartphone | A mobile phone with significantly enhanced computing capabilities, featuring a touch-sensitive screen and advanced functionalities. |
| Server | A software or hardware device that accepts and responds to requests made over a network, responsible for network functions. |
| Mainframe Computer | A very large and expensive computer capable of supporting hundreds or thousands of users simultaneously. |
| Supercomputer | The fastest and most powerful type of computer available. |
| Hardware | The physical component of a computer that can be touched or interacted with in a tangible way. |
| Motherboard | The main circuit board of a computer, where most of the other parts and peripherals are connected. |
| Central Processing Unit (CPU) | The central component of the computer system, often referred to as the brain of the computer, responsible for executing all functions and processes. |
| Processor Speed | A factor that determines computer performance, measured by the number of cycles the CPU can execute per second. |
| Fetching | The process of retrieving an instruction or data from the computer's memory. |
| Decoding | The process of translating a fetched instruction into signals that the computer can execute. |
| Executing | The process of carrying out the command represented by a decoded instruction. |
| Storing | The process of writing the result of an operation back to the computer's memory. |
| Input Devices | Devices used to provide data and send instructions to the computer. |
| Keyboard | A device used to input text and characters by pressing buttons, similar to a typewriter. |
| Optical Mouse | A pointing device that uses lasers or LEDs to track movement on a surface, translating it into cursor movements on the screen. |
| Trackball | A pointing device consisting of an exposed ball housed in a socket that detects rotation about two axes to control the cursor. |
| Touchscreen | A computer screen that allows interaction by touching it with a finger or stylus instead of a mouse and keyboard. |
| Game Controller | An input device used with video games or entertainment systems, which can include gamepads, joysticks, and steering wheels. |
| Storage Devices (secondary memory) | Devices used for long-term storage of data that are non-volatile, meaning they are not affected by power interruptions. |
| Hard Disk Drive (HDD) | The main, large data storage area within a computer, used to store the operating system, application programs, and user data. |
| Solid State Drive (SSD) | A non-volatile storage device that offers advantages such as no noise, greater energy efficiency, and less heat production compared to HDDs. |
| Tape Drive | A storage device primarily used for long-term storage and backups, capable of storing very large amounts of data. |
| Compact Disc (CD) | A common type of removable media suitable for music and data, typically with a memory size of 700 MB. |
| Digital Versatile Disc (DVD) | A popular type of removable media with the same dimensions as a CD but storing more information, commonly used for transferring digital video and data storage. |
| Blu-ray Disc (BD) Drive | A drive for reading Blu-ray discs, which can have single or dual layers and store 25 GB or 50 GB of data respectively. |
| Universal Serial Bus (USB) Flash Drive | A typically small, lightweight, removable, and rewritable storage device with capacities ranging from hundreds of megabytes to tens of gigabytes. |
| External Hard Disk | A portable hard disk drive with capacities ranging from 500 GB to 10 TB, used for additional storage. |
| Bit | The smallest unit of data in a computer, which can hold a single binary value of either 0 or 1. |
| Software | The instructions (programs) that make a computer work. |
| Utilities Software | Software designed to add functionality to a computer, help it perform better, and includes applications like antivirus, backup, and disk repair tools. |
| Antivirus | A type of utility software designed to detect, prevent, and remove malicious software from a computer. |
| Backup | A process of creating copies of data or files to protect against loss or corruption. |
| Disk Repair | Utility software designed to scan for and fix errors on a computer's storage drives. |
| File Management | The process of organizing, storing, retrieving, and managing computer files and directories. |
| Files Compression | The process of reducing the size of a file to save storage space or facilitate faster transfer. |
| Device Driver | A type of system software designed to enable interaction between a hardware device and the operating system or programs that use it. |
| Software Copyright | Legal protection granted to software developers to prevent unauthorized copying, distribution, and modification of their software. |
| End-User License Agreement (EULA) | A legal contract between the software manufacturer or author and the end user, outlining the terms of software use. |
| Shareware | Proprietary software provided to users without payment on a trial basis, requiring a license purchase for continued use after the trial period. |
| Freeware | Software that is fully functional for an unlimited time without any cost to the user. |
| Proprietary Software | Software that is copyrighted and has restrictions on its use, distribution, and modification imposed by its publisher or developer. |
| Open Source Software | Software made collaboratively and distributed in a way that grants users the rights to use, modify, and share it in its original or modified form. |
| Operating System | The primary software that manages a computer's hardware and software resources and provides common services for computer programs. |
| Random Access Memory (RAM) | A type of computer memory that can be read from and written to, used for temporary storage of data and programs that are actively in use. |
| Ergonomics | The science of designing jobs, equipment, and workplaces to fit the worker, aimed at preventing injuries and promoting well-being. |
| Repetitive Strain Injury (RSI) | An injury caused by repetitive movements or prolonged static postures, often associated with computer use. |
| Computer Vision Syndrome | A group of eye and vision-related problems that result from prolonged computer use. |
Cover
MODULE 4.docx
Summary
# Information security principles and goals
Information security aims to protect information and information systems from unauthorized access, use, disclosure, disruption, modification, and damage.
### 1.1 Core information security principles
The fundamental principles of information security are often referred to as the "CIA triad":
#### 1.1.1 Confidentiality
Confidentiality ensures that only authorized users have the right to access specific information. This principle is concerned with preventing the unauthorized disclosure of sensitive data.
#### 1.1.2 Integrity
Integrity means that information or data remains unaltered and accurate. It prevents unauthorized changes or tampering with information, ensuring its reliability.
#### 1.1.3 Availability
Availability ensures that information and systems are accessible and usable when needed by authorized users. This means systems and data should be available during operational hours and resilient to disruptions.
### 1.2 Computer security risks
Computer security risks are actions or events that could lead to a loss of or damage to computer hardware, software, information, data, or processing capabilities. Organizations must consider these risks when designing and implementing information security measures.
#### 1.2.1 Risks to personal and organizational data
Personal and organizational data must be protected. Organizations need to account for these risks when designing and implementing information security.
#### 1.2.2 Computer malware
Malware refers to malicious software that can damage computers without the user's consent. Common types include:
##### 1.2.2.1 Virus
A virus is designed to take control of system operations and can destroy files or even the entire computer. Viruses can enter a computer through downloaded files or programs, email attachments, CDs, and flash drives.
##### 1.2.2.2 Worm
A worm is a self-replicating program that consumes system and network resources by repeatedly copying itself. This can lead to system slowdowns and potential compromises.
##### 1.2.2.3 Trojan horse
A Trojan horse program does not replicate or copy itself to other computers. Instead, it causes damage or compromises the security of the computer it infects by targeting sensitive areas.
##### 1.2.2.4 Spyware
Spyware is software placed on a computer without the user's consent or knowledge. It can capture information such as web browsing habits, email messages, usernames and passwords, and credit card information.
### 1.3 Safeguards against computer malware
While no method can guarantee a computer or network is entirely safe from all malicious software, several safeguards can significantly enhance security.
#### 1.3.1 Strong password protection
Strong passwords are a crucial defense for accounts. Key characteristics include:
* **Adequate length:** Passwords should be at least eight characters long, and preferably longer, to resist brute-force attacks.
* **Adequate character mix:** A good password uses a meaningless combination of letters (both uppercase and lowercase) and numbers.
* **Avoid directly identifiable information:** Passwords should not be easily guessable, such as names of family members, pets, or other personal details.
> **Example:**
> * Weak passwords: "orange", "97435333", "alabri"
> * Strong passwords: "OraNge@3241", "Al#Abri@442"
#### 1.3.2 Backup and recovery
Regularly backing up data and having a recovery plan in place is essential to restore information in case of loss or damage.
#### 1.3.3 Regular software updating
Software is not perfect and often requires updates to address vulnerabilities.
* **Security updates:** These are designed to protect software and computers from harmful programs, viruses, and exploits.
* **Application updates:** These can fix problems or enhance how a computer works.
* **Operating system updates:** Keeping operating systems updated often improves overall performance and security.
#### 1.3.4 Digital certificates
A digital certificate is a notice that guarantees a user or a website is legitimate, providing a level of assurance about their identity and security.
#### 1.3.5 Encryption and decryption
* **Encryption:** This security technique converts readable data (plaintext) into unreadable characters (ciphertext) to prevent unauthorized access.
* **Decryption:** This is the inverse process of encryption, allowing authorized parties with the necessary decryption information to read the encrypted files.
#### 1.3.6 Firewall
A firewall is hardware or software that protects a network's resources from intrusion by users on another network. It controls incoming and outgoing network traffic, acting as a barrier to protect network resources.
#### 1.3.7 Antivirus software
Antivirus software is a utility program used to protect a computer against viruses and other malware. It works by scanning for malicious software, removing any detected viruses, and protecting against threats found in storage devices or incoming files. This includes protection against worms, Trojans, and spyware.
### 1.4 Security features in Windows 10
Windows 10 includes several tools to help protect computers from threats. The main security tools are:
#### 1.4.1 User Account Control (UAC)
UAC is a tool that warns users when a program or user attempts to make changes to computer system settings. This helps prevent accidental changes or malicious software from altering settings. UAC can be configured at different notification levels:
* **Low:** Never notify the user.
* **Moderate:** Notify only when an application tries to make changes.
* **High:** Notify when programs or the user tries to make changes.
#### 1.4.2 Windows Defender
Windows Defender is an antivirus and malware protection component included in the Windows operating system. It allows users to scan their computers for malicious software and checks files and programs as they are opened.
#### 1.4.3 Windows Firewall
The Windows Firewall prevents unauthorized external access to a computer by controlling network traffic.
---
# Computer network security risks and data protection
This section details the various security risks to computers and networks, focusing on threats to personal and organizational data and the concept of computer security risks leading to loss or damage.
### 2.1 Computer security risks
A computer security risk is defined as any action or event that could result in a loss or damage to computer hardware, software, information, data, or processing capabilities.
#### 2.1.1 Risks to personal and organizational data
Protecting personal and organizational data is paramount. Organizations must account for these risks when designing and implementing information security measures.
#### 2.1.2 Computer malware
Malware refers to malicious software that can damage computers without the user's consent.
##### 2.1.2.1 Virus
A virus is designed to take control of system operations, destroy files stored on a computer, or even disable the computer itself. Viruses can enter a computer through downloaded files or programs, email attachments, CDs, and flash drives.
##### 2.1.2.2 Worm
A worm is a self-replicating program that typically consumes system and network resources by repeatedly creating copies of itself. This excessive resource usage can overload a computer and expose it to danger.
##### 2.1.2.3 Trojan horse
A Trojan horse is a program that does not replicate or copy itself to other computers but instead causes damage or compromises the security of the computer it infects, often targeting sensitive areas.
##### 2.1.2.4 Spyware
Spyware is a program installed on a computer without the user's consent or knowledge. It can covertly capture various types of information, including web browsing habits, email messages, usernames and passwords, and credit card information.
### 2.2 Safeguards against computer malware
While there are no absolute guarantees for computer or network safety from malicious software, several methods can significantly enhance protection.
#### 2.2.1 Strong password protection
Strong passwords are crucial for protecting accounts. They should be at least eight characters long, preferably longer, and use an adequate mix of letters and numbers in a meaningless combination. Directly identifiable information, such as family member or pet names, should be avoided.
> **Example:** Weak passwords include "orange", "97435333", or "alabri". Stronger passwords are "OraNge@3241" or "Al#Abri@442".
#### 2.2.2 Backup and recovery
Regularly backing up data and having a recovery plan is essential to restore information in case of loss or damage.
#### 2.2.3 Regular software updating
Software updates are designed to protect systems from harmful programs, viruses, and exploits. Updating applications adds features, fixes problems, and enhances overall performance. Keeping operating system applications updated also improves the overall performance of the software and the computer.
#### 2.2.4 Digital certificates
A digital certificate is a form of authentication that assures a user or website is legitimate, indicating a level of protection and trustworthiness.
#### 2.2.5 Encryption and decryption
* **Encryption:** This security technique converts readable data (plaintext) into unreadable characters (ciphertext) to prevent unauthorized access.
* **Decryption:** This is the inverse process of encryption, allowing only authorized parties with the necessary decryption information to read the encrypted files.
#### 2.2.6 Firewall
A firewall is hardware or software that protects a network's resources from intrusion by users on other networks. It manages incoming and outgoing network traffic and is a fundamental component for network security.
#### 2.2.7 Antivirus software
Antivirus software is a utility program designed to protect a computer against viruses. It works by scanning memory and storage devices for malicious software, removing any computer viruses found, and protecting against worms, Trojans, and spyware from incoming files.
### 2.3 Security features in Windows 10
Windows 10 includes several tools to protect computers from threats like viruses and other malware. The primary security tools are User Account Control, Windows Defender, and Windows Firewall.
#### 2.3.1 User Account Control (UAC)
User Account Control is a tool that warns users when an attempt is made to change computer system settings. This helps prevent accidental changes or malicious software from altering settings. UAC can be configured to low, moderate, or high notification levels, depending on the user's preference for security alerts.
#### 2.3.2 Windows Defender
Windows Defender provides built-in antivirus and malware protection within the Windows operating system. It allows users to scan their computers for malicious software and checks each file or program as it is opened.
#### 2.3.3 Windows Firewall
The Windows Firewall prevents unauthorized external access to a computer, acting as a barrier against intrusions from outside the network.
---
# Computer malware types and their impact
This section details various forms of malicious software designed to infiltrate and compromise computer systems without explicit user authorization.
### 3.1 Defining computer malware
Computer malware refers to any malicious software designed to damage or disrupt computer systems and networks without the user's consent. These threats can lead to data loss, unauthorized access, and system instability.
### 3.2 Types of computer malware
Malware encompasses a range of threats, each with distinct characteristics and methods of operation.
#### 3.2.1 Viruses
A virus is a type of malware engineered to take over system operations. It can destroy files stored on a computer or even damage the entire system. Viruses typically infect computers through downloaded files or programs, email attachments, CDs, and flash drives.
#### 3.2.2 Worms
Worms are self-replicating programs that spread autonomously across networks. Their primary characteristic is their ability to create multiple copies of themselves repeatedly, which can consume significant system and network resources. This excessive resource consumption can lead to a slowdown or complete failure of the computer and network.
#### 3.2.3 Trojan horses
A Trojan horse is a program that, unlike viruses and worms, does not replicate itself or copy itself to other computers. Instead, it causes damage or compromises the security of the computer by disguising itself as legitimate software. It can target sensitive areas of the computer's security, leaving it vulnerable.
#### 3.2.4 Spyware
Spyware is a type of malware that is installed on a computer without the user's consent or knowledge. Its primary function is to secretly capture information about the user's activities. This captured information can include web browsing habits, email messages, usernames and passwords, and credit card information.
> **Tip:** Spyware is particularly insidious because it operates in the background, making it difficult for users to detect its presence and actions.
### 3.3 Impact of malware on computer systems
Malware can have severe consequences for both individual users and organizations. The impact ranges from minor inconveniences to catastrophic data breaches and system failures.
* **Data loss and corruption:** Viruses and Trojan horses can delete, modify, or corrupt critical data, leading to irreversible loss.
* **System disruption and downtime:** Worms and viruses can consume system resources to the point of crashing the computer, leading to significant downtime for individuals and businesses.
* **Security compromise:** Spyware can steal sensitive information like login credentials and financial details, enabling identity theft and financial fraud. Trojan horses can create backdoors for attackers to gain unauthorized access.
* **Unauthorized access:** Malware can create vulnerabilities that allow attackers to remotely control infected systems or access confidential information.
* **Resource depletion:** Worms, in particular, can consume network bandwidth and processing power, degrading performance for all users on the network.
---
# Safeguards and security features against computer malware
This topic outlines essential protective measures and built-in security features designed to defend against various forms of malicious software.
### 4.1 Understanding computer malware
Computer malware refers to actions or events that could cause a loss of or damage to computer hardware, software, information, data, or processing. These threats can significantly impact both personal and organizational data, necessitating robust security measures during the design and implementation of information security systems.
#### 4.1.1 Types of computer malware
* **Virus:** A virus is designed to take control of system operations and can destroy files, or even the computer itself. Viruses can infiltrate a computer through downloaded files, email attachments, CDs, and flash drives.
* **Worm:** Unlike viruses, worms are self-replicating programs that consume system and network resources by repeatedly creating copies of themselves. This resource consumption can overload a computer and lead to system instability or failure.
* **Trojan horse:** This type of program does not replicate or copy itself to other computers. Instead, it causes damage or compromises the computer's security by targeting sensitive areas.
* **Spyware:** Installed on a computer without the user's consent or knowledge, spyware can covertly capture information such as web browsing habits, email messages, usernames and passwords, and credit card details.
### 4.2 Safeguards against computer malware
While no single method can guarantee complete safety from all malicious software, a combination of protective strategies significantly enhances security.
#### 4.2.1 Strong passwords
A strong password is the first line of defense for an account. Key characteristics of a strong password include:
* **Adequate length:** Passwords should be at least eight characters long, and preferably longer, to prevent easy determination through brute-force attacks.
* **Character mix:** A meaningless combination of letters, numbers, and special characters enhances security. A mix that is seven or eight characters long is recommended.
* **Avoidance of identifiable information:** Passwords should not include names of family members, pets, or other easily guessable personal details.
> **Tip:** A weak password might be "orange" or "97435333," while a strong password could be "OraNge@3241" or "Al#Abri@442."
#### 4.2.2 Backup and recovery
Regularly backing up data is crucial for recovery in the event of data loss or corruption due to malware. This involves creating copies of important files and having a plan to restore them.
#### 4.2.3 Regular software updating
Software imperfections can leave systems vulnerable. Regular updates are designed to address these vulnerabilities:
* **Security updates:** These are specifically created to protect software and computers from harmful programs, viruses, and exploits.
* **Application updates:** These can include additions that help prevent or fix problems, or enhance and improve software functionality.
* **Operating system updates:** Keeping the operating system updated often leads to enhanced overall performance and can patch security weaknesses.
#### 4.2.4 Digital certificates
A digital certificate acts as a verifiable notice that confirms the legitimacy of a user or a website, providing a layer of trust and assurance regarding their identity.
#### 4.2.5 Encryption and decryption
* **Encryption:** This security technique converts readable data (plaintext) into unreadable characters (ciphertext) to prevent unauthorized access.
* **Decryption:** This is the inverse process of encryption, allowing only authorized parties with the necessary decryption information to convert ciphertext back into readable plaintext.
#### 4.2.6 Firewalls
Firewalls are hardware and/or software components that protect a network's resources from intrusion by users on other networks. They control and monitor incoming and outgoing network traffic, acting as a barrier between a trusted internal network and untrusted external networks.
#### 4.2.7 Antivirus software
Antivirus software is a utility program designed to protect a computer against viruses and other malware. Its functions include:
* Scanning memory and storage devices for malicious software.
* Removing detected computer viruses.
* Protecting against threats from incoming files, including worms, Trojans, and spyware.
### 4.3 Security features in Windows 10
Windows 10 incorporates several built-in tools to help protect computers from threats like viruses and malware. The primary security features include:
#### 4.3.1 User Account Control (UAC)
User Account Control is a tool that alerts the user when an application or process attempts to make changes to the computer's system settings. This helps prevent accidental changes or malicious software from altering configurations. UAC settings can be adjusted to different notification levels:
* **Low:** Never notifies the user.
* **Moderate:** Notifies only when an application attempts to make changes.
* **High:** Notifies when programs or the user tries to make changes.
#### 4.3.2 Windows Defender
Windows Defender is an integrated antivirus and malware protection component within the Windows operating system. It enables users to scan their computer for malicious software and checks each file or program as it is opened.
#### 4.3.3 Windows Firewall
The Windows Firewall is designed to prevent unauthorized access from outside the computer. It acts as a barrier, controlling network traffic to block malicious attempts to infiltrate the system.
---
## Common mistakes to avoid
- Review all topics thoroughly before exams
- Pay attention to formulas and key definitions
- Practice with examples provided in each section
- Don't memorize without understanding the underlying concepts
Glossary
| Term | Definition |
|------|------------|
| Confidentiality | The principle that ensures only authorized users have the right to access specific information, preventing unauthorized disclosure. |
| Integrity | The principle that ensures information or data remains unaltered and free from any unauthorized changes or tampering. |
| Availability | The principle that ensures information must be accessible and available to authorized users when needed, within the scope of the system. |
| Computer security risk | An action or event that has the potential to cause a loss of or damage to computer hardware, software, information, data, or processing capabilities. |
| Malware | Malicious software designed to damage computers without the user's consent, compromising system operations and security. |
| Virus | A type of malware designed to take control of system operations, destroy files, or damage the computer itself, often spread through downloaded files or email attachments. |
| Worm | A self-replicating program that consumes system and network resources by repeatedly copying itself, potentially causing significant strain and risk to the computer. |
| Trojan horse | A program that causes damage or compromises computer security without replicating itself to other computers, often targeting sensitive security areas. |
| Spyware | A program installed on a computer without the user's consent or knowledge, capable of capturing sensitive information such as browsing habits, emails, usernames, passwords, and credit card details. |
| Brute force password cracker | A method used to gain unauthorized access to accounts by systematically trying all possible combinations of characters until the correct password is found. |
| Digital certificate | A notice that authenticates the legitimacy of a user or a Web site, providing a level of assurance for security and trust. |
| Encryption | A security technique that converts readable data (plaintext) into unreadable characters (ciphertext) to prevent unauthorized access and protect information confidentiality. |
| Decryption | The inverse process of encryption, allowing authorized parties with the necessary decryption information to convert encrypted files back into readable format. |
| Firewall | Hardware and/or software designed to protect a network's resources from intrusion by users on other networks, managing and controlling incoming and outgoing network traffic. |
| Antivirus Software | A utility program used to protect computers against viruses and other malicious software by scanning memory, storage devices, and incoming files for threats. |
| User Account Control (UAC) | A security feature in operating systems that warns users when an application or user attempts to make changes to computer system settings, helping to prevent accidental or malicious alterations. |
| Windows Defender | An antivirus and malware protection component included in the Windows operating system that scans computers for malicious software and checks files and programs. |
| Windows Firewall | A security feature in Windows that prevents unauthorized external access to a computer by controlling network traffic. |
Cover
Objects [Autosaved].pptx
Summary
# Objectgeoriënteerd programmeren: concepten en objecten
Dit deel introduceert de fundamentele concepten van objectgeoriënteerd programmeren (OOP), waarbij de nadruk ligt op objecten, hun eigenschappen (staat) en hun mogelijkheden (gedrag), en de relatie tussen objecten en klassen.
### 1.1 Introductie tot objectgeoriënteerd programmeren
Objectgeoriënteerd programmeren (OOP) is een programmeerparadigma dat draait om het gebruik van objecten. Een object wordt beschouwd als een entiteit uit de werkelijkheid die uniek identificeerbaar is. Voorbeelden van objecten zijn een student, een bureau, een cirkel, een knop of zelfs een lening. Elk object bezit een unieke identiteit, een bepaalde staat en gedragingen.
* **Identiteit:** Elk object is uniek, zelfs als het dezelfde staat heeft als een ander object.
* **Staat (State):** De staat van een object wordt bepaald door een verzameling datavelden (ook wel eigenschappen genoemd) en hun huidige waarden.
* **Gedrag (Behavior):** Het gedrag van een object wordt gedefinieerd door een set methoden die acties uitvoeren.
> **Tip:** Gedrag van een object kan worden gezien als 'dingen die het object kan doen' of 'hoe het object dingen kan veranderen'. In OOP wordt dit gedrag vastgelegd binnen een klasse.
### 1.2 Klassen
Een klasse fungeert als een blauwdruk of sjabloon voor het creëren van objecten. Het definieert de structuur en het gedrag dat alle objecten van die klasse zullen delen.
Een Python-klasse gebruikt variabelen om datavelden op te slaan en definieert methoden om acties uit te voeren. Daarnaast bevat een klasse een speciale methode, de "initializer" (of constructor), die wordt aangeroepen wanneer een nieuw object wordt gecreëerd. De initializer is primair bedoeld voor het initialiseren van de datavelden van het object.
De basisstructuur van een klasse in Python ziet er als volgt uit:
```python
class ClassName:
# Initializer methode (construeert het object)
def __init__(self, parameters):
# Initialiseer datavelden
pass
# Andere methoden (gedrag)
def method_name(self, parameters):
# Voer acties uit
pass
```
#### 1.2.1 Objecten als instanties van een klasse
Wanneer een klasse is gedefinieerd, kunnen er objecten (instanties) van die klasse worden aangemaakt. Dit proces wordt objectconstructie genoemd.
**Syntaxis voor objectconstructie:**
```python
object_naam = ClassName(argumenten)
```
Het construeren van een object omvat doorgaans twee stappen:
1. Het creëren van een object in het geheugen dat behoort tot de klasse.
2. Het aanroepen van de `__init__` methode van de klasse om het object te initialiseren met de meegegeven argumenten.
Tijdens dit proces wordt de speciale parameter `self` in de `__init__` methode automatisch ingesteld om te verwijzen naar het zojuist gecreëerde object.
#### 1.2.2 De `self` parameter
Alle methoden binnen een klasse, inclusief de initializer (`__init__`), nemen de parameter `self` als eerste argument. Deze parameter is cruciaal; het verwijst naar het object zelf dat de methode aanroept of wordt geconstrueerd.
* `self` wordt gebruikt om toegang te krijgen tot de datavelden (instance variables) van het specifieke object.
* Hoewel de naam `self` door conventie wordt gebruikt, kan er technisch gezien een andere naam gekozen worden. Echter, het aanhouden van `self` is sterk aanbevolen voor de leesbaarheid en conformiteit met Python-standaarden.
* Bij het aanroepen van een methode via een object, hoeft `self` niet expliciet meegegeven te worden; Python regelt dit automatisch.
**Voorbeeld:**
```python
class Circle:
def __init__(self, radius):
self.radius = radius # self.radius is een datafield van het object
def get_area(self):
return 3.14159 * self.radius \ast\ast 2 # self.radius wordt hier ook gebruikt
c = Circle(5) # Bij het aanroepen van Circle(5) wordt __init__(self, 5) aangeroepen
area = c.get_area() # Bij het aanroepen van c.get_area() wordt get_area(self) aangeroepen
```
### 1.3 Toegang tot leden van objecten
Nadat een object is gecreëerd, kunnen de datavelden en methoden (ook wel leden genoemd) ervan worden benaderd met behulp van de puntoperator (`.`). Dit staat ook bekend als de "object member access operator".
**Syntaxis:**
* Voor datavelden: `object_naam.data_veld`
* Voor methoden: `object_naam.methode_naam(argumenten)`
**Voorbeeld:**
Stel we hebben een klasse `Circle` met een dataveld `radius` en een methode `getArea()`:
```python
# Stel dat Circle is geïmporteerd
# from Circle import Circle
c = Circle(5) # Creëert een Circle object met radius 5
# Toegang tot een dataveld (indien publiek)
print(c.radius) # Output: 5
# Aanpassen van een dataveld (indien toegestaan)
c.radius = 10
# Aanroepen van een methode
print(c.getArea()) # Roept de getArea methode aan op het object c
```
> **Tip:** Het direct aanpassen van datavelden van buitenaf is niet altijd wenselijk en kan worden beperkt door middel van inkapseling.
### 1.4 UML voor klassen en objecten
Unified Modeling Language (UML) biedt een gestandaardiseerde grafische notatie voor het modelleren van software. Voor klassen en objecten wordt UML als volgt gebruikt:
* **Klasse-diagrammen:** Een klasse wordt weergegeven in een rechthoek die is opgedeeld in drie secties:
1. Klassenaam (bovenaan)
2. Datavelden (in het midden)
3. Methoden (onderaan)
Datavelden worden vaak voorafgegaan door een `-` teken om aan te geven dat ze privé zijn, en methoden door een `+` teken voor publieke methoden.
* **Object-diagrammen:** Een object wordt weergegeven als een rechthoek met de naam van het object gevolgd door een dubbele punt en de naam van de klasse (bijvoorbeeld `cirkel1: Circle`). Onder deze naam worden de specifieke waarden van de datavelden van dat object vermeld.
**Voorbeeld van UML:**
```
+-------------------+
| Circle |
+-------------------+
| - radius: float |
+-------------------+
| + __init__(radius: float)|
| + getArea() |
+-------------------+
```
En voor objecten:
```
+-------------------+
| cirkel1: Circle |
+-------------------+
| radius = 5 |
+-------------------+
```
### 1.5 Immutable versus mutable objecten
Een belangrijk onderscheid in OOP is tussen onveranderlijke (immutable) en veranderlijke (mutable) objecten:
* **Immutable objecten:** De staat van een immutable object kan na creatie niet meer worden gewijzigd. Elke poging om de staat te wijzigen, resulteert in de creatie van een nieuw object. Goede voorbeelden hiervan zijn integers, floats en strings in Python.
* **Mutable objecten:** De staat van een mutable object kan na creatie wel worden gewijzigd. Wijzigingen worden direct op het bestaande object toegepast. Voorbeelden hiervan zijn lijsten en dictionaries in Python.
> **Tip:** Het begrijpen van dit onderscheid is cruciaal voor het correct omgaan met objecten en het voorkomen van onverwachte bijwerkingen in uw code.
### 1.6 Dataveld-inkapseling
Dataveld-inkapseling (data field encapsulation) is een kernprincipe van OOP dat gericht is op het beschermen van de data van een object en het vereenvoudigen van onderhoud. Dit wordt bereikt door directe toegang tot datavelden te beperken en deze te beschermen tegen corruptie.
In Python wordt inkapseling vaak geïmplementeerd door "private" datavelden te definiëren. Dit wordt aangegeven door de naam van het dataveld te laten voorafgaan door twee underscores (`__`).
**Voorbeeld:**
```python
class CircleWithPrivateRadius:
def __init__(self, radius):
self.__radius = radius # Private data field
def getRadius(self):
return self.__radius
# Poging tot directe toegang faalt:
# c = CircleWithPrivateRadius(5)
# print(c.__radius) # Dit zal een AttributeError geven
# Toegang via een publieke methode:
c = CircleWithPrivateRadius(5)
print(c.getRadius()) # Output: 5
```
**Design Guide:**
* Als een klasse bedoeld is voor gebruik door andere programma's, is het raadzaam om datavelden privé te maken om de integriteit van de data te waarborgen en het onderhoud te vergemakkelijken.
* Als een klasse uitsluitend intern door uw eigen programma wordt gebruikt, is het inkapselen van datavelden mogelijk minder kritisch.
### 1.7 Klasse-abstractie en inkapseling
* **Klasse-abstractie (Class Abstraction):** Dit principe houdt in dat de implementatiedetails van een klasse worden gescheiden van het gebruik ervan. De ontwikkelaar van de klasse verstrekt een beschrijving van hoe de klasse kan worden gebruikt (het "contract"), zonder de interne werking bloot te geven. De gebruiker van de klasse hoeft niet te weten hoe de klasse is geïmplementeerd; de details zijn "verpakt" en verborgen.
* **Inkapseling (Encapsulation):** Dit verwijst naar het bundelen van data (datavelden) en de methoden die op die data opereren binnen één eenheid (de klasse). Het zorgt ervoor dat de interne staat van een object beschermd is en dat het object alleen via zijn publieke interface (methoden) kan worden gemanipuleerd.
Samen zorgen abstractie en inkapseling ervoor dat klassen worden gebruikt als "black boxes" waarvoor gebruikers alleen de publieke interface hoeven te kennen, wat leidt tot beter onderhoudbare en herbruikbare software.
### 1.8 Procedureel versus objectgeoriënteerd programmeren
Het fundamentele verschil tussen procedureel en objectgeoriënteerd programmeren ligt in de organisatie van code en data:
* **Procedureel programmeren:** Data en operaties op data zijn gescheiden. Data wordt naar methoden gestuurd om bewerkingen uit te voeren. Dit kan leiden tot problemen bij de ontwikkeling en het onderhoud van grotere systemen.
* **Objectgeoriënteerd programmeren (OOP):** Data en de operaties die daarop betrekking hebben, worden samengebundeld in objecten. OOP-programma's weerspiegelen de echte wereld waarin objecten zowel attributen als activiteiten hebben. Dit leidt tot:
* Verbeterde software-herbruikbaarheid.
* Eenvoudigere ontwikkeling en onderhoud.
* Een betere afspiegeling van complexe problemen.
Een Python-programma kan worden gezien als een verzameling van samenwerkende objecten. Het denken in termen van objecten is een kernvaardigheid bij het programmeren in Python.
---
# Definiëren en construeren van klassen en objecten
Dit onderwerp introduceert de fundamentele concepten van objectgeoriënteerd programmeren: klassen en objecten, inclusief het definiëren van klassen met datavelden en methoden, het construeren van objecten met constructors en initializers, en het benaderen van objectleden.
### 2.1 Objecten en klassen
Objectgeoriënteerd programmeren (OOP) is een programmeerparadigma dat gebruikmaakt van objecten. Een object vertegenwoordigt een tastbare entiteit in de echte wereld die uniek identificeerbaar is, zoals een student, een computer of een lening.
Elk object bezit twee kerncomponenten:
* **Identiteit:** Elk object is uniek, zelfs als de staat ervan identiek is aan die van een ander object.
* **Staat:** De staat van een object wordt bepaald door een verzameling datavelden (ook wel properties genoemd) en hun huidige waarden.
* **Gedrag:** Het gedrag van een object wordt gedefinieerd door een set methoden die acties op het object kunnen uitvoeren of het kunnen wijzigen.
Een **klasse** fungeert als een blauwdruk of sjabloon voor het creëren van objecten. De klasse definieert de datavelden en methoden die alle objecten van die klasse zullen hebben.
#### 2.1.1 Klassen definiëren met datavelden en methoden
Een klasse wordt in Python gedefinieerd met behulp van het `class` sleutelwoord, gevolgd door de klassenaam. Binnen de klasse worden variabelen gebruikt om de datavelden op te slaan en worden functies gedefinieerd als methoden om acties uit te voeren.
* **Datavelden:** Dit zijn variabelen die de toestand van een object opslaan.
* **Methoden:** Dit zijn functies die binnen een klasse zijn gedefinieerd en operaties uitvoeren op de data van het object. Methoden die bij een specifiek object horen, worden ook wel **instance methods** genoemd.
Een speciale methode binnen een klasse is de **initializer**. Deze methode, die conventioneel `__init__` heet, wordt automatisch aangeroepen wanneer een nieuw object van de klasse wordt gecreëerd. De initializer is verantwoordelijk voor het initialiseren van de datavelden van het object.
Een typische klassedefinitie ziet er als volgt uit:
```python
class ClassName:
# Initializer (constructor)
def __init__(self, parameters):
# Initialiseren van datavelden
self.data_field1 = value1
self.data_field2 = value2
# ...
# Andere methoden
def method1(self, parameters):
# Code voor methode 1
pass
def method2(self, parameters):
# Code voor methode 2
pass
```
#### 2.1.2 Objecten construeren met constructors en initializers
Nadat een klasse is gedefinieerd, kunnen er objecten (instanties) van die klasse worden aangemaakt met behulp van de **constructor**. De syntaxis voor het construeren van een object is `ClassName(arguments)`.
Het proces van het construeren van een object omvat doorgaans twee stappen:
1. Er wordt geheugenruimte toegewezen voor het nieuwe object.
2. De **initializer** (`__init__` methode) van de klasse wordt aangeroepen om het object te initialiseren en zijn datavelden in te stellen.
De `__init__` methode heeft altijd een eerste parameter die conventioneel `self` wordt genoemd. Deze `self` parameter verwijst naar het object dat zojuist is aangemaakt en geeft toegang tot de datavelden en andere methoden van dat specifieke object.
**Voorbeeld van objectconstructie:**
Stel we hebben een `Circle` klasse gedefinieerd:
```python
class Circle:
def __init__(self, radius):
self.radius = radius # Initialiseren van het dataveld 'radius'
def getArea(self):
return 3.14159 * self.radius \* self.radius # Berekening van het oppervlak
```
Om een `Circle` object te construeren, doen we het volgende:
```python
# Creëert een Circle object met radius 5
c1 = Circle(5)
```
Hierbij gebeurt het volgende:
1. Er wordt een `Circle` object aangemaakt in het geheugen.
2. De `__init__` methode wordt aangeroepen met `self` verwijzend naar het nieuwe object en `radius` met de waarde `5`.
3. Binnen `__init__` wordt het dataveld `self.radius` van het object ingesteld op `5`.
#### 2.1.3 Objectleden benaderen met de puntoperator
Nadat een object is gecreëerd, kunnen de datavelden en methoden van het object worden benaderd met behulp van de **puntoperator** (`.`). Dit staat ook bekend als de "object member access operator".
De syntaxis is `object_naam.lid_naam`, waarbij `lid_naam` een dataveld of een methode van het object is.
**Voorbeeld:**
Stel we hebben het `Circle` object `c1` met `radius = 5`:
* Om de waarde van het dataveld `radius` te benaderen:
`c1.radius` zal de waarde `5` opleveren.
* Om de methode `getArea` aan te roepen:
`c1.getArea()` zal het oppervlak van de cirkel berekenen en retourneren.
Het is ook mogelijk om datavelden direct aan te passen na creatie van het object:
```python
c1.radius = 10 # De radius van de cirkel wordt aangepast naar 10
```
#### 2.1.4 Het `self` parameter
De `self` parameter in methoden van een klasse is cruciaal. Het vertegenwoordigt het object zelf dat de methode aanroept. Binnen een methode kan `self` gebruikt worden om toegang te krijgen tot de datavelden en andere methoden die specifiek zijn voor dat object. Hoewel de naam `self` een conventie is, is het gebruik ervan sterk aanbevolen voor leesbaarheid.
> **Tip:** De `self` parameter wordt automatisch door Python ingevuld wanneer een methode wordt aangeroepen via een object. Je hoeft `self` dus niet expliciet mee te geven bij het aanroepen van een methode.
### 2.2 UML grafische notatie voor klassen en objecten
Unified Modeling Language (UML) biedt een gestandaardiseerde manier om objectgeoriënteerde systemen te modelleren.
* **Klassen:** Een klasse wordt in UML weergegeven als een rechthoek, verdeeld in drie secties:
1. **Klassenaam:** Bovenaan, in het midden.
2. **Datavelden (Attributen):** In de middelste sectie, met hun namen en (optioneel) gegevenstypen. Een minteken (`-`) voor een dataveld geeft aan dat het privé is.
3. **Methoden (Operaties):** In de onderste sectie, met hun namen en (optioneel) parameters en retourtypen.
* **Objecten:** Een object wordt weergegeven als een rechthoek met twee secties. Bovenaan staat de objectnaam gevolgd door de klassenaam (bijvoorbeeld `objectnaam: Klassenaam`). De onderste sectie toont de waarden van de datavelden van dat specifieke object.
**Voorbeeld UML notatie:**
Voor de `Circle` klasse:
```
+-----------------+
| Circle |
+-----------------+
| - radius: float |
+-----------------+
| + getArea() |
| + getPerimeter()|
+-----------------+
```
En een object `c1` van de `Circle` klasse met `radius = 5`:
```
+-----------+
| c1: Circle|
+-----------+
| radius = 5|
+-----------+
```
### 2.3 Immuutable en mutable objecten
Objecten kunnen worden ingedeeld in twee categorieën op basis van hun veranderlijkheid:
* **Immutable objecten:** Objecten waarvan de staat niet kan worden gewijzigd nadat ze zijn gecreëerd. Als je een "wijziging" wilt aanbrengen, wordt er in feite een nieuw object met de gewijzigde staat gecreëerd. Voorbeelden van immutable typen in Python zijn integers, floats, strings en tuples.
* Bijvoorbeeld, het toekennen van een nieuwe waarde aan een string variabele creëert een nieuw string object in plaats van het originele object te wijzigen.
* **Mutable objecten:** Objecten waarvan de staat wel kan worden gewijzigd nadat ze zijn gecreëerd. Wijzigingen worden direct op het bestaande object toegepast. Voorbeelden van mutable typen in Python zijn lijsten, dictionaries en sets.
* Bijvoorbeeld, het toevoegen van een element aan een lijst wijzigt de lijst direct.
### 2.4 Data field encapsulatie
Encapsulatie is een kernprincipe van OOP dat het bundelen van data (datavelden) en de methoden die op die data werken, binnen één eenheid (de klasse) impliceert. **Data field encapsulatie** gaat een stap verder door de directe toegang tot datavelden van buitenaf te beperken of te verbergen.
Dit wordt gedaan om:
* **Data corruptie te voorkomen:** Door directe toegang te ontzeggen, worden onbedoelde of ongeldige wijzigingen van de data voorkomen.
* **Onderhoudbaarheid van de klasse te verbeteren:** De interne implementatie van de klasse kan worden gewijzigd zonder dat dit impact heeft op de code die de klasse gebruikt, zolang de publieke interface (methoden) gelijk blijft.
In Python kan data field encapsulatie worden geïmplementeerd door datavelden een naam te geven die begint met twee underscores (`__`). Dit markeert ze als "privé", wat aangeeft dat ze bedoeld zijn voor intern gebruik binnen de klasse. Python voert echter "naam-mangling" uit, waarbij `__private_field` intern wordt omgezet naar `_ClassName__private_field`. Dit maakt het nog steeds mogelijk om de velden te benaderen, zij het op een minder directe manier, wat bedoeld is om accidentele toegang te ontmoedigen.
Publieke methoden, vaak getters en setters genoemd, worden gebruikt om gecontroleerde toegang tot deze privé datavelden te bieden.
**Voorbeeld:**
```python
class CircleWithPrivateRadius:
def __init__(self, radius):
self.__radius = radius # Privé dataveld
def getRadius(self):
return self.__radius # Publieke getter methode
# Setters kunnen ook worden toegevoegd voor gecontroleerde wijzigingen
# def setRadius(self, new_radius):
# if new_radius > 0:
# self.__radius = new_radius
# else:
# print("Radius moet positief zijn.")
```
Als je probeert `c.__radius` direct te benaderen, krijg je een `AttributeError`. Je moet de `getRadius()` methode gebruiken.
> **Tip:** Encapsulatie is vooral belangrijk wanneer je klassen ontwerpt die door andere programmeurs of programma's zullen worden gebruikt. Voor interne klassen in je eigen project is het minder cruciaal.
### 2.5 Klasse abstractie en encapsulatie
* **Klasse abstractie:** Dit principe richt zich op het scheiden van de implementatiedetails van een klasse van het gebruik ervan. De ontwikkelaar van de klasse biedt een heldere beschrijving van wat de klasse doet en hoe deze kan worden gebruikt (de publieke interface). De gebruiker van de klasse hoeft de interne werking niet te kennen, alleen hoe de interface te gebruiken.
* **Encapsulatie:** Zoals eerder besproken, is dit het bundelen van data en methoden en het verbergen van implementatiedetails.
Samen zorgen klasse abstractie en encapsulatie ervoor dat klassen worden gebruikt als "black boxes". Clients (andere delen van het programma) interageren met de klasse via een gedefinieerd contract (de publieke methoden), zonder zich zorgen te hoeven maken over de interne complexiteit. Dit verhoogt de herbruikbaarheid en onderhoudbaarheid van de code aanzienlijk.
### 2.6 Het verschil tussen procedureel en objectgeoriënteerd programmeren
Het fundamentele verschil ligt in hoe data en functionaliteit worden georganiseerd:
* **Procedureel programmeren:** Data en de operaties (functies) die op die data worden uitgevoerd, zijn gescheiden. Data wordt aan functies doorgegeven om te worden verwerkt. Dit kan leiden tot uitdagingen bij het beheren van complexe systemen, omdat de data verspreid kan zijn en functies mogelijk onbedoelde wijzigingen aan data kunnen aanbrengen.
* **Objectgeoriënteerd programmeren (OOP):** Data (datavelden) en de operaties die op die data werken (methoden) worden samengebundeld in objecten. Dit model weerspiegelt de echte wereld, waarin entiteiten zowel attributen (data) als activiteiten (gedrag) hebben. OOP bevordert:
* **Herbruikbaarheid van code:** Klassen kunnen eenvoudig worden hergebruikt in verschillende delen van een applicatie of in andere projecten.
* **Onderhoudbaarheid:** Wijzigingen in de implementatie van een klasse hebben minder kans om andere delen van het programma te beïnvloeden, dankzij encapsulatie.
* **Schaalbaarheid:** Het organiseren van code in samenwerkende objecten maakt het eenvoudiger om grotere en complexere software systemen te ontwikkelen.
### 2.7 Gebruik van de `datetime` klasse
De Python `datetime` module biedt krachtige functionaliteit voor het werken met datums en tijden. De `datetime` klasse binnen deze module vertegenwoordigt een specifieke datum en tijd.
**Belangrijke aspecten van de `datetime` klasse:**
* **Datavelden:** Een `datetime` object bevat datavelden zoals `year`, `month`, `day`, `hour`, `minute`, `second`, en `microsecond`.
* **Constructie:**
* `datetime.now()`: Creëert een `datetime` object voor de huidige datum en tijd.
* `datetime(year, month, day, hour, minute, second, microsecond)`: Creëert een `datetime` object met gespecificeerde waarden.
* **Toegang tot informatie:** De individuele datavelden kunnen worden benaderd met de puntoperator, bijvoorbeeld `d.year`.
**Voorbeeld:**
```python
from datetime import datetime
# Huidige datum en tijd
now = datetime.now()
print(f"Huidige jaar: {now.year}")
print(f"Huidige maand: {now.month}")
print(f"Huidige dag: {now.day}")
print(f"Huidig uur: {now.hour}")
print(f"Huidige minuut: {now.minute}")
print(f"Huidige seconde: {now.second}")
# Specifiek datum en tijd object
specific_dt = datetime(2023, 10, 27, 10, 30, 0)
print(f"Specifiek datum en tijd: {specific_dt}")
```
---
# Gegevensbescherming en abstractie in objectgeoriënteerd programmeren
Dit gedeelte behandelt de principes van data field encapsulation en class abstraction, inclusief het gebruik van private data fields en UML-diagrammen om klassen te beschrijven.
### 3.1 Objecten en klassen in objectgeoriënteerd programmeren
Objectgeoriënteerd programmeren (OOP) is een programmeerparadigma dat gebruikmaakt van "objecten". Een object representeert een entiteit uit de echte wereld die uniek geïdentificeerd kan worden, zoals een student, een cirkel of een knop. Elk object heeft een unieke identiteit, een staat en gedrag.
* **Staat (State):** De staat van een object bestaat uit een set van data fields (ook wel eigenschappen genoemd) met hun huidige waarden.
* **Gedrag (Behavior):** Het gedrag van een object wordt gedefinieerd door een set van methoden.
Een **klasse** fungeert als een blauwdruk of sjabloon voor objecten. In Python gebruikt een klasse variabelen om data fields op te slaan en definieert methoden om acties uit te voeren. Een klasse bevat ook een speciale methode, de _initializer_ (vaak `__init__`), die wordt aangeroepen om een nieuw object te creëren en te initialiseren.
#### 3.1.1 Klassen definiëren met data fields en methoden
Een klasse wordt gedefinieerd met het `class` sleutelwoord, gevolgd door de klassenaam. Binnen de klasse worden data fields (variabelen) en methoden (functies) gedefinieerd.
```python
class ClassName:
# Initializer method
def __init__(self, ...):
# Initialize data fields
# Other methods
def method1(self, ...):
# Actions
pass
def method2(self, ...):
# Actions
pass
```
#### 3.1.2 Objecten construeren met een constructor
Nadat een klasse is gedefinieerd, kunnen objecten van die klasse worden gecreëerd met behulp van een constructor.
1. Er wordt een object in het geheugen gecreëerd voor de klasse.
2. De `__init__` methode van de klasse wordt aangeroepen om het object te initialiseren. De `self` parameter in de `__init__` methode verwijst automatisch naar het zojuist gecreëerde object.
De syntax voor het construeren van een object is: `ClassName(argumenten)`.
**Voorbeeld:**
Stel, we hebben een klasse `Circle`. Het construeren van een object kan er als volgt uitzien:
`c = Circle(5)`
Hierbij wordt een `Circle` object gecreëerd en de `__init__` methode wordt aangeroepen met `self` verwijzend naar het nieuwe object en `5` als argument voor de radius.
#### 3.1.3 Toegang tot leden van objecten met de puntoperator (.)
Nadat een object is gecreëerd, kunnen de data fields en methoden van het object worden benaderd met behulp van de puntoperator (`.`), ook wel de object member access operator genoemd.
**Voorbeeld:**
```python
from Circle import Circle # Aangenomen dat Circle in een apart bestand staat
c = Circle(5)
print(c.getPerimeter()) # Roept de getPerimeter methode aan
c.radius = 10 # Wijzigt de radius data field (indien toegankelijk)
print(c.getArea()) # Roept de getArea methode aan
```
#### 3.1.4 Het object zelf refereren met de `self` parameter
Alle methoden binnen een klasse hebben standaard de eerste parameter `self`. Deze parameter verwijst naar het object dat de methode aanroept. Hoewel de naam `self` conventioneel is, kan elke naam gebruikt worden. `self` wordt gebruikt om toegang te krijgen tot de instance variables (data fields) van het specifieke object.
> **Tip:** De `self` parameter wordt gebruikt binnen de implementatie van een methode, maar wordt niet expliciet meegegeven bij het aanroepen van de methode vanuit buiten de klasse.
### 3.2 UML-diagrammen voor klassenbeschrijving
UML (Unified Modeling Language) is een gestandaardiseerde grafische notatie om software te modelleren. Voor klassen wordt UML gebruikt om hun structuur te beschrijven, inclusief klassenamen, data fields, constructors en methoden.
Een UML-klassendiagram bestaat typisch uit drie secties:
1. **Klassenaam:** Bovenaan de doos.
2. **Data fields:** Met een minteken (`-`) voor private leden en een plusteken (`+`) voor publieke leden.
3. **Methoden:** Met een minteken (`-`) voor private leden en een plusteken (`+`) voor publieke leden. Constructors worden vaak apart of binnen de methoden-sectie vermeld.
**UML Notatie voor objecten:** Een object wordt in UML weergegeven met de objectnaam gevolgd door een dubbele punt en de klassenaam, bijvoorbeeld `cirkel1: Circle`. De specifieke waarden van de data fields van het object worden eronder vermeld.
### 3.3 Immuutable vs. Mutable objecten
Objecten kunnen worden onderverdeeld in twee categorieën op basis van hun aanpasbaarheid na creatie:
* **Immuutable (onveranderlijke) objecten:** Deze objecten kunnen niet worden gewijzigd nadat ze zijn gecreëerd. Elke poging om een immuut object te "wijzigen" resulteert in de creatie van een nieuw object met de gewenste wijzigingen. Voorbeelden in Python zijn integers, floats, strings en tuples.
* **Mutable (veranderlijke) objecten:** Deze objecten kunnen worden aangepast nadat ze zijn gecreëerd. Wijzigingen worden direct op het bestaande object doorgevoerd. Voorbeelden zijn lijsten, dictionaries en sets.
### 3.4 Data field encapsulatie voor gegevensbescherming
**Data field encapsulatie** is een principe waarbij de interne staat (data fields) van een object wordt verborgen voor directe toegang van buitenaf. Dit dient twee belangrijke doelen:
1. **Gegevensbescherming (Prevent data corruption):** Voorkomt dat de client (code die de klasse gebruikt) de data fields direct manipuleert op manieren die inconsistenties of fouten kunnen veroorzaken.
2. **Onderhoudbaarheid (Make class easy to maintain):** Door data fields te beschermen, kan de interne implementatie van de klasse worden gewijzigd zonder dat de code die de klasse gebruikt (de client) noodzakelijkerwijs aangepast hoeft te worden, zolang de publieke interface (methoden) hetzelfde blijft.
In Python worden private data fields conventioneel aangeduid met twee leidende underscores (bijvoorbeeld `__variabele`). Methoden om deze private data fields te benaderen of te wijzigen worden publieke "getter" en "setter" methoden genoemd.
**Voorbeeld (met private radius):**
```python
class CircleWithPrivateRadius:
def __init__(self, radius):
self.__radius = radius # Private data field
def getRadius(self):
return self.__radius # Publieke getter methode
def setRadius(self, radius):
if radius > 0: # Validatie
self.__radius = radius
else:
print("Radius moet positief zijn.")
# Poging tot directe toegang (zou een AttributeError geven):
# c = CircleWithPrivateRadius(5)
# print(c.__radius) # Dit werkt niet
# Gebruik van getter en setter:
c = CircleWithPrivateRadius(5)
print(c.getRadius()) # Output: 5
c.setRadius(10)
print(c.getRadius()) # Output: 10
c.setRadius(-2) # Output: Radius moet positief zijn.
```
> **Tip:** Als een klasse primair bedoeld is voor intern gebruik binnen een eigen programma, is het minder cruciaal om data fields te encapsuleren. Echter, voor klassen die bedoeld zijn voor gebruik door andere ontwikkelaars of programma's, is encapsulatie sterk aanbevolen.
### 3.5 Class abstraction en encapsulation
**Class abstraction** (klasse-abstractie) houdt in dat de implementatiedetails van een klasse worden gescheiden van het gebruik ervan. De ontwikkelaar van de klasse biedt een "contract" (de publieke interface: publieke methoden en constanten) dat beschrijft hoe de klasse gebruikt kan worden, zonder dat de gebruiker hoeft te weten hoe de klasse intern is geïmplementeerd.
**Encapsulation** (inkapseling) is het mechanisme waarmee deze implementatiedetails (data fields en interne methoden) worden verborgen en beschermd binnen de klasse. Dit creëert een "black box" voor de gebruiker van de klasse.
Samen maken abstractie en encapsulatie softwareontwikkeling makkelijker:
* **Herbruikbaarheid:** Klassen kunnen eenvoudig worden hergebruikt in verschillende projecten.
* **Onderhoudbaarheid:** Wijzigingen in de interne werking van een klasse hebben minder impact op de rest van het systeem.
* **Ontwikkelingssnelheid:** Ontwikkelaars kunnen klassen gebruiken op basis van hun publieke interface, zonder te verdwalen in complexe implementatiedetails.
**Voorbeeld (Loan klasse):**
Een `Loan` klasse kan abstractie en encapsulatie demonstreren. De gebruiker hoeft niet te weten hoe de renteberekening exact plaatsvindt, maar kan wel via publieke methoden (`getInterestRate()`, `getLoanAmount()`) de relevante informatie opvragen of via een constructor een lening object aanmaken. De data fields zoals `annualInterestRate`, `numberOfYears` en `loanAmount` zouden intern als private kunnen worden gemarkeerd (`-` in UML).
### 3.6 Verschillen tussen procedureel en objectgeoriënteerd programmeren
* **Procedureel programmeren:** Data en operaties op die data zijn vaak gescheiden. Programma's worden opgebouwd als een reeks instructies en functies. Data wordt naar functies gestuurd om verwerkt te worden.
* **Objectgeoriënteerd programmeren:** Data (fields) en operaties (methods) die op die data betrekking hebben, worden samengebracht in objecten. Dit model weerspiegelt vaak de echte wereld beter, waar entiteiten zowel attributen als activiteiten hebben.
De voordelen van OOP ten opzichte van procedureel programmeren omvatten:
* **Verbeterde softwareherbruikbaarheid.**
* **Gemakkelijker te ontwikkelen en te onderhouden programma's.**
* **Programma's worden georganiseerd als een verzameling samenwerkende objecten.**
### 3.7 De `datetime` klasse in Python
De `datetime` module in Python biedt functionaliteit voor het werken met datums en tijden.
* **`datetime.now()`:** Geeft een `datetime` object terug dat de huidige datum en tijd vertegenwoordigt.
* **Attributes:** Een `datetime` object heeft attributes zoals `year`, `month`, `day`, `hour`, `minute`, `second` en `microsecond`.
**Voorbeeld:**
```python
from datetime import datetime
d = datetime.now()
print("Huidig jaar:", d.year)
print("Huidige maand:", d.month)
print("Huidige dag van de maand:", d.day)
print("Huidig uur:", d.hour)
print("Huidige minuut:", d.minute)
print("Huidige seconde:", d.second)
```
---
# Vergelijking tussen procedureel en objectgeoriënteerd programmeren
Dit deel verkent de fundamentele verschillen tussen procedurele en objectgeoriënteerde programmeerparadigma's en belicht de voordelen van OOP voor softwareontwikkeling.
### 4.1 Inleiding tot programmeerparadigma's
Objectgeoriënteerd programmeren (OOP) is een programmeerparadigma dat werkt met objecten, entiteiten uit de echte wereld die uniek identificeerbaar zijn. Elk object bezit een unieke identiteit, een toestand en gedrag. De toestand wordt bepaald door een verzameling gegevensvelden (ook wel eigenschappen genoemd) en hun huidige waarden, terwijl het gedrag wordt gedefinieerd door een set methoden.
### 4.2 Concepten van objectgeoriënteerd programmeren
#### 4.2.1 Objecten
Een object combineert zowel toestand als gedrag. De toestand bepaalt het object, terwijl het gedrag definieert wat het object doet.
* **Toestand:** Verzameling van gegevensvelden met hun huidige waarden.
* **Gedrag:** Verzameling van methoden die acties uitvoeren.
**Voorbeeld:**
Een `Cirkel` object kan een `radius` als gegevensveld hebben en `getArea()` als methode. Er kunnen meerdere instanties van de `Cirkel` klasse bestaan, elk met een eigen `radius` waarde.
#### 4.2.2 Klassen
Een klasse is een blauwdruk of sjabloon voor het creëren van objecten. Het definieert de gegevensvelden en methoden die objecten van die klasse zullen hebben.
* **Klasse Naam:** De naam van de klasse.
* **Gegevensvelden:** Variabelen die de informatie van een object opslaan.
* **Methoden:** Functies die binnen een klasse zijn gedefinieerd en acties uitvoeren op de objecten van die klasse.
* **Initializer:** Een speciale methode (vaak `__init__` in Python) die wordt aangeroepen bij het creëren van een nieuw object om de gegevensvelden te initialiseren.
#### 4.2.3 Constructor en het creëren van objecten
Nadat een klasse is gedefinieerd, kunnen objecten ervan worden gemaakt met behulp van de constructor.
1. De constructor creëert een object in het geheugen voor de klasse.
2. Vervolgens roept de constructor de initializer-methode van de klasse aan om het object te initialiseren en de gegevensvelden in te stellen.
De syntax voor het creëren van een object is `ClassName(argumenten)`.
#### 4.2.4 De `self` parameter
Alle methoden binnen een klasse, inclusief de initializer, hebben een eerste parameter genaamd `self`. Deze parameter verwijst naar het object zelf dat de methode aanroept. Hoewel een andere naam gebruikt kan worden, is `self` de conventie. Via `self` kunnen de gegevensvelden (instance variables) van het object worden benaderd.
> **Tip:** De `self` parameter wordt intern gebruikt door de methode, maar hoeft niet expliciet meegegeven te worden bij het aanroepen van de methode.
#### 4.2.5 Toegang tot leden van objecten
Nadat een object is aangemaakt, kunnen de gegevensvelden en methoden worden benaderd met behulp van de puntoperator (`.`), ook wel de object-lidtoegang-operator genoemd.
**Voorbeeld:**
`c.radius = 10` om een gegevensveld aan te passen, of `c.getArea()` om een methode aan te roepen.
#### 4.2.6 UML-notatie voor klassen en objecten
Unified Modeling Language (UML) biedt een grafische manier om klassen en objecten te beschrijven. Een klasse wordt weergegeven met de klassenaam bovenaan, gevolgd door de gegevensvelden en vervolgens de methoden. Objecten worden weergegeven met de notatie `objectnaam: Klassennaam` en kunnen ook hun specifieke waarden voor de gegevensvelden tonen.
#### 4.2.7 Immuutable en mutable objecten
* **Immuutable objecten:** Objecten waarvan de toestand niet kan worden gewijzigd nadat ze zijn aangemaakt. Bij elke aanpassing wordt er een nieuw object gecreëerd. Voorbeelden zijn integers en strings.
* **Mutable objecten:** Objecten waarvan de toestand wel kan worden gewijzigd nadat ze zijn aangemaakt. Voorbeelden zijn lijsten en dictionaries.
#### 4.2.8 Gegevensveldencapsulatie
Encapsulatie is het principe van het verbergen van de interne implementatiedetails van een klasse en het beschermen van de gegevensvelden tegen directe externe wijzigingen. Dit wordt bereikt door gegevensvelden "privé" te maken (in Python aangeduid met twee leidende underscores, bijv. `__radius`). Dit maakt de klasse gemakkelijker te onderhouden en voorkomt dat de gegevens worden gecorrumpeerd.
> **Tip:** Definieer gegevensvelden als privé als de klasse bedoeld is voor gebruik door andere programma's. Als de klasse alleen intern wordt gebruikt, is directe toegang vaak acceptabel.
#### 4.2.9 Klasse abstractie en encapsulatie
* **Klasse abstractie:** Scheidt de implementatie van een klasse van het gebruik ervan. De gebruiker van de klasse hoeft alleen de publieke interface (de contract, d.w.z. de handtekeningen van publieke methoden en constanten) te kennen en niet hoe de klasse intern is geïmplementeerd.
* **Encapsulatie:** Zorgt ervoor dat de interne implementatiedetails verborgen blijven voor de gebruiker.
Een klasse-implementatie gedraagt zich als een "black box" die door de client wordt gebruikt via zijn contract.
### 4.3 Procedureel programmeren versus objectgeoriënteerd programmeren
#### 4.3.1 Procedureel programmeren
In procedureel programmeren zijn gegevens en de operaties op die gegevens gescheiden. Deze methodologie vereist dat gegevens naar methoden worden verzonden. De focus ligt op sequenties van instructies en procedures.
#### 4.3.2 Objectgeoriënteerd programmeren
Objectgeoriënteerd programmeren plaatst gegevens en de bijbehorende operaties samen binnen een object. Deze aanpak lost veel problemen op die inherent zijn aan procedureel programmeren.
* **Organisatie:** OOP organiseert programma's op een manier die de echte wereld weerspiegelt, waarin objecten zowel attributen (toestand) als activiteiten (gedrag) hebben.
* **Herbruikbaarheid:** Het gebruik van objecten verbetert de herbruikbaarheid van software.
* **Onderhoudbaarheid:** Programma's worden gemakkelijker te ontwikkelen en te onderhouden.
* **Denkpatroon:** Programmeren in Python omvat denken in termen van objecten; een Python-programma kan worden gezien als een verzameling samenwerkende objecten.
**Kernverschil:** In procedureel programmeren staan functies centraal en worden gegevens apart verwerkt. In OOP staan objecten centraal, die zowel gegevens als de functies die op die gegevens werken, bevatten. Dit leidt tot een meer modulaire en onderhoudbare code, vooral bij grootschalige projecten.
---
## Veelgemaakte fouten om te vermijden
- Bestudeer alle onderwerpen grondig voor examens
- Let op formules en belangrijke definities
- Oefen met de voorbeelden in elke sectie
- Memoriseer niet zonder de onderliggende concepten te begrijpen
Glossary
| Term | Definition |
|------|------------|
| Objectgeoriënteerd programmeren (OOP) | Een programmeerparadigma dat programmeert met behulp van objecten, waarbij een object een entiteit in de echte wereld vertegenwoordigt met een unieke identiteit, staat en gedrag. |
| Object | Een entiteit in de echte wereld die distinctief geïdentificeerd kan worden, en die zowel een staat (datavelden met waarden) als gedrag (methoden) heeft. |
| Staat (van een object) | Bestaat uit een verzameling datavelden, ook wel eigenschappen genoemd, met hun huidige waarden, die de kenmerken van een object beschrijven. |
| Gedrag (van een object) | Gedefinieerd door een verzameling methoden die aangeven wat een object kan doen of welke acties het kan uitvoeren. |
| Dataveld (eigenschap) | Een variabele binnen een klasse die de staat van een object opslaat. |
| Methode | Een functie die gedefinieerd is binnen een klasse en die door objecten wordt aangeroepen om acties uit te voeren. |
| Klasse | Een blauwdruk of sjabloon voor het creëren van objecten, die datavelden (variabelen) en methoden definieert. |
| Initializer | Een speciale methode binnen een klasse die wordt aangeroepen bij het creëren van een nieuw object om de datavelden te initialiseren. In Python wordt dit vaak aangeduid met `__init__`. |
| Constructor | De syntax die wordt gebruikt om een nieuw object te creëren vanuit een klasse. Het proces omvat het creëren van het object in het geheugen en het initialiseren ervan via de initializer. |
| Instance methode | Een methode die is gedefinieerd binnen een klasse en die wordt aangeroepen door een specifiek object om acties uit te voeren die betrekking hebben op dat object. |
| `self` parameter | Een parameter die in methoden van een klasse wordt gebruikt om te verwijzen naar het object zelf waarop de methode wordt aangeroepen. Het wordt automatisch ingesteld en is essentieel voor het benaderen van instance variabelen. |
| Dot operator (.) | Wordt gebruikt om toegang te krijgen tot de datavelden en methoden van een object na creatie. |
| UML (Unified Modeling Language) | Een gestandaardiseerde grafische notatietaal die wordt gebruikt voor het visualiseren, specificeren, construeren en documenteren van software-intensieve systemen, inclusief klassen en objecten. |
| Immutable object | Een object waarvan de interne staat niet gewijzigd kan worden nadat het is aangemaakt. Elke wijziging resulteert in de creatie van een nieuw object. |
| Mutable object | Een object waarvan de interne staat wel gewijzigd kan worden nadat het is aangemaakt, zonder dat er een nieuw object wordt gecreëerd. |
| Data field encapsulation | Een principe waarbij de interne data van een object wordt beschermd tegen directe externe wijziging, meestal door private data fields te gebruiken en toegang te bieden via publieke methoden (getters en setters). |
| Class abstraction | Het proces waarbij de complexe implementatiedetails van een klasse worden verborgen voor de gebruiker, die alleen interactie heeft met de klasse via een gedefinieerd publiek interface (de 'class contract'). |
| Procedureel programmeren | Een programmeerparadigma waarbij de nadruk ligt op procedures of routines die instructies uitvoeren die op data worden toegepast. Data en operaties zijn vaak gescheiden. |
Cover
pattpatel-chapter-1CSA.pdf
Summary
# Introduction to computing and the book's structure
This section introduces the fundamental concept that computers are deterministic systems and outlines the book's layered approach to understanding computing, starting from information representation and progressing to hardware architecture.
### 1.1 The nature of computers
* Computers are deterministic systems, meaning they produce the same output for the same input and internal state [1](#page=1).
* They are not "electronic geniuses" but rather execute instructions precisely as given, devoid of independent thought [1](#page=1).
* A complex computer is built from a systematically interconnected collection of very simple parts [1](#page=1).
### 1.2 Book's approach and structure
The book employs a layered approach, starting from foundational concepts and building up to more complex ones, similar to constructing a house from its foundation. The goal is to enable readers to write programs in languages like C and understand the underlying operations of the computer [1](#page=1) [2](#page=2) [3](#page=3).
#### 1.2.1 Layer 1: Information representation
* All information processed by a computer is represented by sequences of 0s and 1s [1](#page=1).
* Examples include the encoding of the letter 'a' as `01100001` and the decimal number 35 as `00100011` [1](#page=1).
* Operations, such as addition, are performed on these encoded representations [1](#page=1) [2](#page=2).
#### 1.2.2 Layer 2: Electronic components and basic operations
* Computers are electronic devices operated by voltages [2](#page=2).
* A high voltage represents a 1, and a low voltage (relative to 0 volts) represents a 0 [2](#page=2).
* Transistors are the fundamental building blocks that perform operations and store information [2](#page=2).
#### 1.2.3 Layer 3: The von Neumann machine and the LC-3
* Larger structures are combined to form the von Neumann machine, a basic model of computer operation [2](#page=2).
* The book will study a simple computer called the LC-3 (Little Computer 3), which possesses key characteristics of modern microprocessors like Intel Core and ARM processors, but in a simplified form for educational purposes [2](#page=2).
#### 1.2.4 Layer 4: Programming languages
* The book progresses to programming the LC-3, first in its native language, then in assembly language [2](#page=2).
* Subsequently, it introduces high-level programming concepts using C and C++ [2](#page=2) [3](#page=3).
* High-level languages abstract away hardware details, enabling more effective development of complex software [2](#page=2).
* The goal is to connect high-level constructs to their underlying LC-3 implementation [3](#page=3).
#### 1.2.5 Second half of the book: Advanced programming
* Chapters 11-20 delve into advanced programming concepts in C and C++ [2](#page=2).
* Topics include variables, operators, control structures, functions, testing, debugging, pointers, arrays, recursion, input/output, and data structures [3](#page=3).
* C++ is presented as an evolution of C [3](#page=3).
### 1.3 Two Recurring Themes
Two fundamental ideas permeate the book:
#### 1.3.1 The notion of abstraction
* Abstraction involves simplifying complex systems by hiding underlying details, allowing users to interact with them at a higher level [3](#page=3).
* An analogy is telling a taxi driver to go to the airport, rather than providing turn-by-turn directions [3](#page=3).
* Abstraction is crucial in various fields, including mathematics, engineering, and business [3](#page=3).
* Understanding when abstractions are reliable and when deeper knowledge is needed is essential [20](#page=20).
#### 1.3.2 The importance of not separating hardware and software
* Hardware and software are deeply interwoven and should not be viewed as entirely separate entities [3](#page=3) [7](#page=7).
* Understanding hardware concepts clarifies software concepts, such as how finite word length affects data types in C [7](#page=7).
* Conversely, understanding software concepts can illuminate hardware implementations, for instance, the rules for function calls [7](#page=7).
* Mastering both hardware and software enhances problem-solving capabilities [7](#page=7).
### 1.4 A computer system
A computer system is defined as a combination of software (programs that direct processing) and hardware (which performs the actual processing) [7](#page=7).
#### 1.4.1 A brief history of computing
* The first electronic computers emerged in the 1940s [8](#page=8).
* The ENIAC (Electronic Numerical Integrator and Computer), built in the 1940s, was a large, vacuum-tube-based machine [8](#page=8).
* Significant advancements in size, weight, power consumption, and processing speed have occurred since then [10](#page=10) [8](#page=8) [9](#page=9).
* Modern smartphones possess computing power millions of times greater than the ENIAC [9](#page=9).
* Microprocessors have seen phenomenal improvements in transistor count and operating frequency [10](#page=10).
* Much of what appears magical in modern computing, such as natural language understanding, is due to the speed and parallelism of simple operations [10](#page=10).
#### 1.4.2 Components of a computer system
A computer system typically includes the processor (CPU), keyboard, mouse, monitor, memory, long-term storage (disks, USB drives), input/output devices (printers), and the software [11](#page=11).
### 1.5 Two Very Important Ideas
#### 1.5.1 Universality of computational devices
* All computers, regardless of speed or cost, are capable of computing the same things if given sufficient time and memory [11](#page=11).
* A faster computer performs computations more quickly, but a slower one can achieve the same results eventually [11](#page=11).
* More expensive computers do not possess greater computational power than cheaper ones, provided the latter have enough memory [11](#page=11).
* Computers are universal computational devices, meaning they can perform any computation that can be described [12](#page=12) [14](#page=14).
#### 1.5.2 Transformation of human language to electron behavior
* Problems are described in human languages, but solved by electrons moving within the computer [11](#page=11).
* A sequence of systematic transformations is necessary to translate human-understandable problems into electrical signals that control electron flow [11](#page=11) [19](#page=19).
### 1.6 Computers as universal computational devices
* Unlike specialized machines, modern computers are universal in their computational capabilities [12](#page=12).
* Analog machines, which measure physical quantities, have limitations in accuracy [12](#page=12).
* Digital machines, which manipulate discrete digits, allow for increased accuracy by adding more digits [12](#page=12).
* Early digital machines, like adding machines or abaci, were limited to specific computations [12](#page=12).
* The concept of a universal Turing machine, which can simulate any other Turing machine, demonstrates this universality [14](#page=14).
* A computer with sufficient memory is equivalent to a universal Turing machine in terms of what it can compute [14](#page=14).
### 1.7 How do we get the electrons to do the work?
This section outlines the "Levels of Transformation" required to translate a problem description into actions performed by electrons. Choices at each level impact cost and performance [14](#page=14) [19](#page=19).
#### 1.7.1 Natural language statement of the problem
* Problems are initially described in natural languages (e.g., English, French) [14](#page=14).
* Natural languages are ambiguous and not suitable for precise instruction [14](#page=14).
#### 1.7.2 High-level programming language
* Natural language descriptions are translated into high-level programming languages (e.g., C, C++) [14](#page=14).
* These languages offer a more structured way to express algorithms but still abstract from hardware specifics [14](#page=14) [2](#page=2).
#### 1.7.3 Assembly language
* High-level languages are compiled into assembly language, which is a more machine-specific symbolic representation [14](#page=14).
#### 1.7.4 Instruction Set Architecture (ISA)
* Assembly language is translated into the machine code defined by the Instruction Set Architecture (ISA) [14](#page=14).
* The ISA specifies the set of commands the processor understands [14](#page=14).
* The book uses the LC-3 ISA [19](#page=19).
#### 1.7.5 Microarchitecture
* The microarchitecture implements the ISA, detailing how the processor's components are organized and interact [14](#page=14) [19](#page=19).
* Different microarchitectures can implement the same ISA, with trade-offs in cost, performance, and energy consumption [19](#page=19).
#### 1.7.6 Logic circuit
* Each element of the microarchitecture is implemented using basic logic circuits [19](#page=19).
* There are choices in logic circuit design to balance cost and performance [19](#page=19).
#### 1.7.7 Devices
* Logic circuits are realized using specific electronic device technologies (e.g., CMOS, NMOS) [19](#page=19).
> **Tip:** Understanding these layers of transformation is crucial for comprehending how a high-level program ultimately instructs the electrons within a computer to perform a task [19](#page=19).
---
# Key concepts: Abstraction and hardware-software integration
This section explores the fundamental concepts of abstraction as a productivity enhancer and the crucial interplay between hardware and software in computer science and engineering.
### 2.1 The notion of abstraction
Abstraction is a technique that simplifies interaction with a system by hiding unnecessary details, allowing users to focus on essential aspects and enhancing productivity. It enables dealing with situations at a higher level, making processes more efficient in terms of time and cognitive load. The effectiveness of abstraction relies on the ability to "un-abstract" or deconstruct back to component parts when necessary [3](#page=3) [4](#page=4).
**Examples of abstraction:**
* Telling a taxi driver to go to the airport, rather than providing step-by-step directions [3](#page=3).
* Thinking of transistors as logic gates that operate with 0s and 1s, rather than dealing with varying voltages [5](#page=5).
* Designing a computer application using components as abstractions, without getting bogged down in the internal details of each component unless a problem arises [5](#page=5).
**Key principles of abstraction:**
* It is a critical skill in various fields, including mathematics, physics, engineering, and business [3](#page=3).
* It allows for greater efficiency and prevents users from being overloaded with unnecessary details [4](#page=4).
* The ability to un-abstract is crucial for troubleshooting and deeper understanding when problems arise [4](#page=4).
* The goal is to maintain the highest possible level of abstraction that still allows for effective operation [5](#page=5).
**The Bottom Line on Abstraction:** Abstractions significantly improve efficiency and are perfectly adequate when components function correctly and do not need to be integrated into larger systems. However, understanding the components below the abstraction level is vital for debugging and ensuring systems work together harmoniously [5](#page=5).
### 2.2 Hardware vs. software
The distinction between hardware and software, with individuals often identifying as either "hardware people" or "software people," can be misleading and is actively discouraged. Hardware refers to the physical computer and its specifications, while software encompasses operating systems and application programs. This separation implies that expertise in one domain comes at the cost of knowledge in the other, creating a metaphorical "wall" between them [5](#page=5) [6](#page=6).
The power of abstraction allows for operation at higher levels without constant consideration of underlying layers, boosting productivity. However, being unaware of these underlying layers limits the ability to leverage their nuances when critical [6](#page=6).
The recommended approach is to work at the highest available level of abstraction while simultaneously keeping the underlying layers in mind for improved performance. This holistic view, where hardware and software are seen as integrated components, leads to better design and functionality [6](#page=6).
**Examples of hardware-software integration:**
* **Microprocessor designers** incorporating specialized hardware capabilities (e.g., Intel's MMX instruction set, Motorola's AltiVec) to efficiently process video clips, recognizing the growing demand in software applications [6](#page=6).
* **Software designers** understanding hardware capabilities and limitations to create more efficient programs. For instance, the choice of sorting algorithms can significantly depend on the underlying hardware characteristics [6](#page=6).
**The Bottom Line on Hardware-Software Integration:** Mastery of both hardware and software makes individuals more capable and effective. This book aims to guide students toward understanding both domains, as each sheds light on the other [7](#page=7).
### 2.3 Interwoven concepts
Numerous software concepts are deeply intertwined with hardware concepts, enhancing understanding when studied together:
* **Data types** (software) are influenced by the finite word length of the computer (hardware) [7](#page=7).
* **Functions** (software) can be tied to their hardware implementation, explaining the rules of function calling [7](#page=7).
* **Recursion** (software) can be related to hardware, helping to determine when recursive execution is beneficial [7](#page=7).
* **Pointer variables** (software) are better understood when knowledge of computer memory (hardware) is applied, clarifying their use and avoidance [7](#page=7).
* **Data structures** (software) are more efficiently manipulated in memory (hardware) with a deeper understanding of computer memory [7](#page=7).
> **Tip:** While many terms might be unfamiliar initially, re-reading this section later in the semester can solidify the understanding of how software and hardware topics are deeply interconnected.
Most computing problems benefit from solutions developed by individuals capable of understanding and utilizing both hardware and software aspects. A computer system is fundamentally composed of both software that directs information processing and hardware that executes these instructions [7](#page=7).
---
# The levels of transformation in computing
This section details the systematic transformations required to translate a problem stated in natural language into actions performed by electrons within a computer, progressing through distinct levels of abstraction.
### 3.1 The statement of the problem
The initial stage of defining a problem involves using a "natural language," such as English, French, or Japanese. These languages have evolved organically through human communication over centuries. However, natural languages are inherently ambiguous, which makes them unsuitable for direct instruction to a computer. Ambiguity in natural language can arise from context, tone of voice, or multiple possible interpretations of a sentence, as illustrated by the example "Time flies like an arrow". Computers, lacking the ability to infer meaning from context, require precise instructions [15](#page=15).
> **Tip:** Understanding the inherent ambiguity of natural language is crucial for appreciating why a more formalized approach is necessary in computing.
### 3.2 The algorithm
The first transformation converts a natural language problem description into an algorithm. An algorithm is a step-by-step procedure that is guaranteed to terminate and where each step is precisely stated and executable by a computer. Key properties of an algorithm include [16](#page=16):
* **Definiteness:** Each step must be precisely stated, leaving no room for interpretation. A recipe instruction like "stir until lumpy" lacks definiteness [16](#page=16).
* **Effective Computability:** Each step must be executable by a computer. An instruction like "take the largest prime number" lacks effective computability, as there is no largest prime number [16](#page=16).
* **Finiteness:** The procedure must terminate.
For any given problem, multiple algorithms can exist, varying in the number of steps required or the potential for concurrent execution. While more steps might increase total work, concurrency can reduce execution time on parallel processing systems [16](#page=16).
> **Example:** An algorithm to sort a list of numbers could be selection sort, insertion sort, or quicksort, each with different step counts and performance characteristics.
### 3.3 The program
An algorithm is further transformed into a computer program written in a "mechanical language," known as a programming language. Unlike natural languages, programming languages are invented specifically for instructing computers and are therefore free from ambiguity. Over a thousand programming languages exist, designed for various purposes, such as Fortran for scientific calculations, COBOL for business data processing, Prolog for expert systems, LISP for artificial intelligence, and Pascal for teaching [16](#page=16).
Programming languages are categorized into two types:
* **High-level languages:** These are further removed from the underlying computer hardware and are often machine-independent, meaning programs written in them can run on different types of computers without modification. Languages like C, C++, Fortran, COBOL, Prolog, LISP, and Pascal are examples of high-level languages [16](#page=16).
* **Low-level languages:** These are closely tied to the specific computer hardware. The primary low-level language for a computer is its assembly language [16](#page=16).
### 3.4 The ISA
The next transformation involves translating the program into the instruction set of the target computer, known as the Instruction Set Architecture (ISA). The ISA defines the interface between software and hardware, specifying what operations the computer can perform and how to access data [17](#page=17).
An analogy for ISA is the interface of an automobile: the pedals, steering wheel, and ignition key are part of the car's "ISA," dictating how a human driver interacts with the car and what the car interprets those actions to mean. Similarly, a computer's ISA defines [17](#page=17):
* **Opcodes:** The operations the computer can perform [17](#page=17).
* **Operands:** Individual data values used by operations [17](#page=17).
* **Data Types:** The representation of operands that the computer can operate on [17](#page=17).
* **Addressing Modes:** Mechanisms for locating operands in memory [17](#page=17).
The number of opcodes, data types, and addressing modes varies significantly among different ISAs. The x86 ISA, common in PCs, features over 200 opcodes, more than a dozen data types, and over two dozen addressing modes. The ISA also specifies memory organization, including the number of memory locations and the number of bits per location. Prominent ISAs include x86 (Intel, AMD), ARM and THUMB (ARM), POWER and z/Architecture (IBM), and SPARC (Oracle) [17](#page=17) [18](#page=18).
Translation from high-level languages to ISA is typically done by a **compiler**, while translation from assembly language to ISA is done by an **assembler** [18](#page=18).
> **Tip:** The ISA is a critical abstraction layer that allows for hardware independence at the software level. Different microarchitectures can implement the same ISA.
### 3.5 The microarchitecture
The microarchitecture is the implementation of a specific ISA. Continuing the automobile analogy, while all cars share a common ISA (e.g., the brake pedal is always the middle pedal), their microarchitectures (engine type, brake system, fuel efficiency) can differ significantly. Different microarchitectures offer trade-offs in cost, performance, and energy consumption. For instance, the x86 ISA has been implemented by numerous microarchitectures, from the early 8086 to modern processors like Skylake. Computer designers make deliberate choices at this level to balance these factors [18](#page=18) [19](#page=19).
> **Example:** Two different processors might implement the same x86 ISA but have vastly different internal designs, leading to different speeds and power usages.
### 3.6 The logic circuit
Each component of the microarchitecture is realized using simple logic circuits. At this level, logic designers again make trade-offs between cost and performance. For example, even a basic operation like addition can be implemented using different logic circuit designs, each with varying speeds and costs [19](#page=19).
### 3.7 The devices
Finally, each basic logic circuit is implemented based on the requirements of the specific device technology being used. Different technologies, such as CMOS, NMOS, and gallium arsenide circuits, lead to different circuit implementations [19](#page=19).
The overall process from a natural language problem statement to the execution by electrons involves these systematic transformations. Each level presents choices that influence the cost and performance of the final computing system. The book aims to describe these transformations, from transistors forming logic circuits, to logic circuits forming microarchitectures, and microarchitectures implementing ISAs, culminating in the translation of a problem description into a program that is then compiled to a target ISA [19](#page=19).
---
# Computers as universal computational devices
Computers are universal computational devices, meaning they can perform any computable task given sufficient resources, a concept rooted in the theoretical framework of Turing machines.
## 4. Computers as universal computational devices
Computers are understood as universal computational devices because they possess the capability to perform any task that is computable, provided they have access to sufficient time and memory. This fundamental characteristic implies that all computers, regardless of their speed, size, or cost, can compute the same set of problems. A faster or more expensive computer might complete computations more quickly or offer enhanced user interfaces, but it cannot solve problems that a slower, cheaper computer is incapable of solving, assuming adequate memory is available for the latter [11](#page=11) [13](#page=13) [14](#page=14).
### 4.1 Digital vs. Analog Machines
Historically, calculating machines have existed in two primary forms: analog and digital [12](#page=12).
* **Analog machines** perform computations by measuring physical quantities like distance or voltage. An example is a slide rule, which uses logarithmic scales to multiply numbers. A significant limitation of analog machines is the difficulty in increasing their accuracy [12](#page=12).
* **Digital machines** perform computations by manipulating a fixed set of digits or letters. This distinction is analogous to analog and digital watches; digital watches offer greater accuracy by displaying time in digits, which can be extended to higher precision (e.g., hundredths of a second) by adding more digits. The document specifies that "computers" in this context refer exclusively to digital machines [12](#page=12).
Before modern digital computers, prevalent digital machines included adding machines and the abacus, which were designed for specific tasks like adding integers or sorting data. The key limitation of these specialized machines was their inability to perform computations beyond their designed function; for instance, an adding machine user would need to resort to pencil and paper for multiplication [12](#page=12).
### 4.2 The concept of the Turing machine
The foundational idea of a universal computational device is attributed to Alan Turing. In 1937, Turing proposed that all computations could be performed by a theoretical machine now known as a Turing machine [13](#page=13).
#### 4.2.1 Definition and purpose of the Turing machine
Turing's contribution was a mathematical description of a machine capable of executing any computation. He was motivated by the philosophical problem of defining computation itself. Turing abstracted the actions people perform during computation, such as marking paper or writing symbols based on rules, and specified a mechanism that could replicate these actions. He demonstrated that individual Turing machines could perform specific tasks, like adding or multiplying integers [13](#page=13).
* **Black box models of Turing machines:** These models represent Turing machines conceptually, showing inputs and outputs without detailing the internal operations. Figure 1.7 illustrates black box models for machines that add (TADD) and multiply (TMUL) [13](#page=13).
* **Turing's thesis:** This thesis posits that every computation can be performed by some Turing machine. While not formally proven, extensive evidence supports its validity. Enhancements to Turing machines have not demonstrated the ability to compute more than the original model [13](#page=13).
#### 4.2.2 The universal Turing machine
Turing also conceived of a "universal" Turing machine (U) capable of simulating any other Turing machine. This means that by providing U with a description of a specific Turing machine and the necessary input data, U could execute that computation [13](#page=13) [14](#page=14).
> **Tip:** The concept of a universal Turing machine is a theoretical precursor to modern programmable computers. It establishes that a single machine, given the right instructions, can perform any task another specialized machine can.
For example, to compute $g \cdot (e + f)$, a universal Turing machine U would be provided with descriptions of the Turing machines for addition (TADD) and multiplication (TMUL), along with the inputs e, f, and g. U would then perform the calculation [14](#page=14).
Figure 1.8 illustrates this with a black box model of a universal Turing machine (U) that can perform the computation $g \cdot (e + f)$ given TADD, TMUL, and the inputs e, f, and g [14](#page=14).
> **Key Insight:** Turing's universal machine provided the first conceptual model of what computers fundamentally do: accept a description of a computation and its data, and then execute it. Both universal Turing machines and modern computers (with unlimited memory) can compute the same set of problems because they are programmable [14](#page=14).
### 4.3 Programmability and universality
The programmability of computers is the reason why a large or expensive machine offers no computational advantage over a smaller, cheaper one; the latter is already a universal computational device. Any computation that can be performed by any machine can be performed by a computer, given sufficient time and memory. This universality is a cornerstone of computer science, leading to the study of what computation is and what is fundamentally computable [13](#page=13) [14](#page=14).
### 4.4 Transformation of problems
A crucial aspect of computing is the transformation of human-understandable problems, often described in natural language, into the electrical signals that control electron flow within the computer. This transformation involves a sequence of systematic steps developed over decades, enabling computers to execute seemingly complex tasks through simple, underlying operations. The process of "getting the electrons to do the work" is organized into "Levels of Transformation" [11](#page=11) [14](#page=14).
---
## Common mistakes to avoid
- Review all topics thoroughly before exams
- Pay attention to formulas and key definitions
- Practice with examples provided in each section
- Don't memorize without understanding the underlying concepts
Glossary
| Term | Definition |
|------|------------|
| Abstraction | A technique for simplifying interaction with a system by hiding unnecessary details, allowing focus on essential aspects and enhancing productivity. |
| Algorithm | A precise, step-by-step procedure that is guaranteed to terminate, with each step being clearly stated and executable by a computer. |
| Assembly Language | A low-level programming language that is closely tied to the specific computer's instruction set architecture, serving as a human-readable representation of machine code. |
| Compiler | A translating program that converts code written in a high-level programming language into the instruction set architecture of a specific computer. |
| Computer System | A collection of components, including a processor, memory, input/output devices, and software, that work together to perform computations. |
| Definiteness | A characteristic of an algorithm ensuring that each step is precisely stated and unambiguous, leaving no room for multiple interpretations. |
| Digital Machine | A machine that performs computations by manipulating a fixed, finite set of digits or letters, allowing for increased accuracy by adding more digits. |
| Effective Computability | The property of an algorithm where each step can actually be carried out by a computer, without requiring impossible or undefined operations. |
| Finiteness | The characteristic of an algorithm that guarantees the procedure will eventually terminate after a finite number of steps. |
| High-Level Language | A programming language that is at a considerable distance from the underlying computer hardware, often being machine-independent and designed for programmer convenience. |
| Instruction Set Architecture (ISA) | The complete specification of the interface between programs and the underlying computer hardware, defining operations, data types, and addressing modes. |
| Logic Circuit | A combination of logic gates used to implement a specific function within a microarchitecture, representing an abstraction for designing computer components. |
| Low-Level Language | A programming language that is closely tied to the specific computer's architecture, such as assembly language. |
| Mechanical Language | A programming language that was invented for specifying computer instructions and does not suffer from the ambiguity found in natural languages. |
| Microarchitecture | The implementation of an Instruction Set Architecture (ISA), detailing the specific design choices and trade-offs made by computer designers regarding cost, performance, and energy consumption. |
| Natural Language | A language spoken by humans, such as English, which is often ambiguous and unsuitable for providing precise instructions to a computer. |
| Opcode | The part of a computer instruction that specifies the operation to be performed. |
| Operand | An individual data value that an operation acts upon. |
| Program | A sequence of instructions written in a programming language that a computer can execute to perform a specific task. |
| Transistor | A fundamental electronic component that can act as a switch or amplifier, forming the building blocks for logic gates and integrated circuits. |
| Turing Machine | A mathematical model of computation proposed by Alan Turing, consisting of an infinite tape, a head that can read and write symbols, and a set of states and transition rules. |
| Universal Computational Device | A machine, like a computer or a universal Turing machine, capable of computing anything that can be computed, given sufficient time and memory. |
Cover
pattpatel-chapter-2CSA.pdf
Summary
# Bits and data types
This section introduces the fundamental concept of the bit as the basic unit of information in computers, explaining how bits represent values and exploring various data types for integers [1](#page=1).
### 1.1 The bit as the unit of information
Computers operate by controlling the movement of electrons, which are detected through the presence or absence of voltages in electronic circuits. This presence or absence of voltage is symbolically represented as "1" and "0" respectively, with each "0" or "1" being called a "bit" (binary digit). While not an absolute absence or presence, computer circuits differentiate voltages close to 0 from voltages far from 0, with a threshold determining if a voltage signifies a "1" or a "0" [1](#page=1).
#### 1.1.1 Representing values with bits
A single bit can represent only two distinct values. To represent a larger number of distinct values, multiple bits are combined. With $k$ bits, at most $2^k$ distinct items can be distinguished, with each unique pattern of $k$ bits forming a code for a particular value. For example, eight bits can represent $2^8 = 256$ different things [2](#page=2).
### 1.2 Data types
A representation of information is considered a **data type** if there are operations in the computer that can manipulate information encoded in that representation. Each instruction set architecture (ISA) defines its own set of data types and corresponding operations. Common data types include 2's complement integers for arithmetic operations and ASCII codes for character representation. Other data types, such as floating-point numbers used in scientific notation, are also supported by specific computer architectures [2](#page=2).
### 1.3 Integer data types
#### 1.3.1 Unsigned integers
Unsigned integers represent magnitudes without any associated sign (plus or minus). They are used for tasks like counting occurrences or identifying memory locations. Unsigned integers are represented using a positional notation similar to the decimal system, but with a base of 2. For example, with five bits, the number 5 is represented as $00101$, which translates to $0 \cdot 2^4 + 0 \cdot 2^3 + 1 \cdot 2^2 + 0 \cdot 2^1 + 1 \cdot 2^0$. With $k$ bits, $2^k$ unsigned integers can be represented, ranging from 0 to $2^k - 1$ [2](#page=2) [3](#page=3).
#### 1.3.2 Signed integers
To perform arithmetic involving negative numbers, signed integer representations are necessary. With $k$ bits, half of the $2^k$ bit patterns can be allocated for positive integers and half for negative integers. A common convention is that positive integers (and zero) have a leading '0' in their binary representation. Several methods exist for representing negative integers, including signed magnitude, 1's complement, and 2's complement [3](#page=3).
##### 1.3.2.1 Signed magnitude
In the signed-magnitude representation, a leading '1' signifies a negative integer, while a leading '0' signifies a positive integer or zero. The remaining bits represent the magnitude of the number [4](#page=4).
##### 1.3.2.2 One's complement
The 1's complement representation for a negative number is obtained by taking the bitwise complement (flipping all the bits) of the representation of its corresponding positive number. For example, if the representation of +5 is $00101$, the representation of -5 in 1's complement would be $11010$ [4](#page=4).
##### 1.3.2.3 Two's complement integers
The 2's complement data type is the most widely used representation for signed integers in modern computers due to its efficiency in hardware implementation for addition. This representation simplifies the design of arithmetic logic units (ALUs) [5](#page=5).
**Key properties of 2's complement:**
* **Positive Integers:** Positive integers are represented using the standard positional binary scheme, with a leading '0'. For a $k$-bit system, this covers integers from 0 to $2^{k-1} - 1$ [5](#page=5).
* **Negative Integers:** The representation for a negative integer $-A$ is designed such that when added to the representation of its positive counterpart $A$, the result is the representation of 0. The representation of $value+1$ is equivalent to the representation of $value$ plus the representation of $1$ [5](#page=5) [6](#page=6).
* **Shortcut for Negation:** A quick way to find the 2's complement representation of a non-zero integer $-A$ is to:
1. Flip all the bits of the representation of $A$ (this is called the bitwise complement).
2. Add 1 to the complemented value [6](#page=6).
> **Example:** To find the 2's complement representation for $-13$ (using 5 bits):
> 1. The representation for $+13$ is $01101$ ($8+4+1$) [6](#page=6).
> 2. The complement of $01101$ is $10010$ [6](#page=6).
> 3. Adding 1 to $10010$ gives $10011$, which is the 2's complement representation for $-13$ [6](#page=6).
> We can verify this by adding $01101$ and $10011$, which results in $00000$ with a carry-out, the carry is ignored in 2's complement arithmetic [6](#page=6).
* **Range:** For a $k$-bit system, 2's complement can represent integers from $-2^{k-1}$ to $2^{k-1} - 1$. For example, with 5 bits ($k=5$), the range is from $-2^{5-1} = -16$ to $2^{5-1} - 1 = +15$. The pattern $10000$ in a 5-bit system is assigned the value $-16$ [5](#page=5) [7](#page=7).
### 1.4 Conversion between binary and decimal
Converting between 2's complement binary representations and familiar decimal numbers is a common operation [7](#page=7).
#### 1.4.1 Binary to decimal conversion
To convert a 2's complement binary number (e.g., an 8-bit number $b_7 b_6 b_5 b_4 b_3 b_2 b_1 b_0$) to decimal [7](#page=7):
1. **Check the leading bit ($b_7$):**
* If $b_7$ is '0', the integer is positive.
* If $b_7$ is '1', the integer is negative. In this case, first find the 2's complement of the positive number with the same magnitude by flipping all bits and adding 1 [7](#page=7).
2. **Calculate the magnitude:** The magnitude is calculated by summing the powers of 2 for each bit that is '1', starting from $b_0$ up to $b_{k-2}$ (where $k$ is the total number of bits). For an 8-bit system ($k=8$), this is $b_6 \cdot 2^6 + b_5 \cdot 2^5 + b_4 \cdot 2^4 + b_3 \cdot 2^3 + b_2 \cdot 2^2 + b_1 \cdot 2^1 + b_0 \cdot 2^0$ [7](#page=7).
3. **Apply the sign:** If the original number was determined to be negative (leading bit was '1'), affix a minus sign to the calculated decimal magnitude [7](#page=7).
---
# Operations on bits
This section details the arithmetic and logical operations that can be performed on bits and binary patterns, covering addition, subtraction, sign extension, overflow detection, and fundamental logical operations [10](#page=10).
### 2.1 Arithmetic operations
Arithmetic operations on binary patterns, particularly those represented in two's complement, mirror decimal arithmetic in their step-by-step, right-to-left processing [11](#page=11).
#### 2.1.1 Addition and subtraction
Binary addition proceeds digit by digit, generating a sum and a carry. A carry is generated when the sum of bits exceeds 1, analogous to generating a carry after 9 in decimal arithmetic [11](#page=11).
Subtraction is performed by adding the two's complement of the subtrahend to the minuend [11](#page=11).
> **Example:** Adding 11 and 3 in five-bit notation [00011](#page=00011) :
> ```
> 01011 [11](#page=11).
> + 00011 [3](#page=3).
> -------
> 01110 [14](#page=14).
> ```
> [11](#page=11).
> **Example:** Subtracting 9 from 14 (14 - 9):
> ```
> 01110 [14](#page=14).
> + 10111 (-9 in 2's complement)
> -------
> 00101 [5](#page=5).
> ```
> The carry-out is ignored [11](#page=11).
Adding a number to itself ($x + x$) is equivalent to a left bit shift of the number's representation, provided the result fits within the available bits [11](#page=11).
#### 2.1.2 Sign extension
Sign extension is the process of replicating the most significant bit (the sign bit) of a binary representation to the left to increase the number of bits without changing the value. This is crucial for performing arithmetic operations on numbers represented with different bit lengths. Leading zeros do not affect the value of positive numbers, and leading ones do not affect the value of negative numbers in two's complement representation [12](#page=12).
> **Example:** Adding 13 and -5, where 13 is 0000000000001101 and -5 is represented with fewer bits as 111011.
> To add these, -5 must be sign-extended to match the bit length of 13:
> ```
> 0000000000001101 [13](#page=13).
> + 1111111111111011 (-5 extended to 16 bits)
> ------------------
> 0000000000001000 [8](#page=8).
> ```
> [12](#page=12).
#### 2.1.3 Overflow
Overflow occurs when the result of an arithmetic operation exceeds the range of values that can be represented by the available bits [13](#page=13).
* **Unsigned arithmetic:** Overflow is a carry-out of the most significant bit, similar to an odometer rolling over [13](#page=13).
* **Signed (two's complement) arithmetic:** Overflow is more subtle.
* Adding two positive numbers that result in a value larger than the maximum representable positive number leads to overflow, often manifesting as a negative result (due to the sign bit flipping) [13](#page=13).
* Adding two negative numbers that result in a value more negative than the minimum representable negative number also leads to overflow, often manifesting as a positive result [13](#page=13).
* The sum of a negative number and a positive number does not typically cause overflow issues [14](#page=14).
### 2.2 Logical operations
Logical operations work on logical variables, which can take one of two values: 0 or 1, often representing false and true, respectively. These operations are performed bit-wise on binary patterns [14](#page=14).
#### 2.2.1 The AND function
The AND function is a binary logical function where the output is 1 only if both input bits are 1. Otherwise, the output is 0. It can be thought of as an "ALL" operation [14](#page=14).
Truth table for AND:
| A | B | A AND B |
|---|---|---------|
| 0 | 0 | 0 |
| 0 | 1 | 0 |
| 1 | 0 | 0 |
| 1 | 1 | 1 |
The bit-wise AND operation is applied to corresponding bits of two operands. A **bit mask** is a binary pattern used with the AND operation to isolate specific bits of another pattern, effectively clearing (setting to 0) bits that do not match the mask's 0s [15](#page=15).
> **Example:** Isolating the rightmost two bits of an eight-bit pattern `A` using the bit mask `00000011`:
> If `A = 01010110`, then `A AND 00000011 = 00000010`.
> The bit mask highlights the bits of interest by zeroing out the others [15](#page=15).
#### 2.2.2 The OR function
The OR function is a binary logical function where the output is 1 if at least one of the input bits is 1. The output is 0 only if both input bits are 0. It can be thought of as an "ANY" operation. This is also known as the **inclusive-OR** [15](#page=15).
Truth table for OR:
| A | B | A OR B |
|---|---|--------|
| 0 | 0 | 0 |
| 0 | 1 | 1 |
| 1 | 0 | 1 |
| 1 | 1 | 1 |
The bit-wise OR operation can be used to set bits in a pattern.
> **Example:** Making unit 5 available in a BUSYNESS bit vector using the bit mask `00100000`:
> If the current BUSYNESS is `01000010`, then `01000010 OR 00100000 = 01100010`.
> This sets the bit corresponding to unit 5 to 1, indicating availability [19](#page=19).
#### 2.2.3 The NOT function
The NOT function (also called complement or inversion) is a unary logical function that operates on a single input bit. It outputs the opposite of the input: 1 becomes 0, and 0 becomes 1 [16](#page=16).
Truth table for NOT:
| A | NOT A |
|---|-------|
| 0 | 1 |
| 1 | 0 |
#### 2.2.4 The Exclusive-OR function
The Exclusive-OR (XOR) function is a binary logical function where the output is 1 only if the two input bits are different. If both input bits are the same (both 0 or both 1), the output is 0 [16](#page=16).
Truth table for XOR:
| A | B | A XOR B |
|---|---|---------|
| 0 | 0 | 0 |
| 0 | 1 | 1 |
| 1 | 0 | 1 |
| 1 | 1 | 0 |
The XOR operation can be used to check if two bit patterns are identical: if their XOR is all zeros, they are identical [17](#page=17).
#### 2.2.5 DeMorgan’s Laws
DeMorgan's Laws describe relationships between AND, OR, and NOT operations. One law states that the complement of an AND operation is equivalent to the OR of the complements of the operands: $\overline{A \text{ AND } B} = \overline{A} \text{ OR } \overline{B}$. This can be expressed as: "It is not the case that both A and B are false" is equivalent to "At least one of A and B is true" [17](#page=17) [18](#page=18).
#### 2.2.6 The bit vector
A bit vector is an m-bit pattern where each bit has a logical value (0 or 1) and can be operated on independently [18](#page=18).
* **Bit masks:** As discussed, bit vectors are commonly used as bit masks to selectively isolate or modify parts of another bit vector using AND or OR operations [15](#page=15) [18](#page=18).
* **System management:** Bit vectors can represent the status of multiple independent units (e.g., machines in a plant, taxicabs) where a bit indicates availability or busy status [18](#page=18) [19](#page=19) [1](#page=1).
* **Updating status:**
* To mark a unit as busy, an AND operation with a bit mask that has a 0 at the unit's bit position and 1s elsewhere can be used to clear that bit [19](#page=19).
* To mark a unit as available (free), an OR operation with a bit mask that has a 1 at the unit's bit position and 0s elsewhere can be used to set that bit [19](#page=19).
> **Example:** A BUSYNESS bit vector `11000010` indicates units 7, 6, and 1 are free.
> To assign work to unit 7, we AND with `01111111` (clearing bit 7): `11000010 AND 01111111 = 01000010`. Unit 7 is now busy [19](#page=19).
> If unit 5 becomes idle, we OR with `00100000` (setting bit 5): `01000010 OR 00100000 = 01100010`. Unit 5 is now available [19](#page=19).
---
# Other data representations
This section delves into alternative methods for encoding information within computers, moving beyond simple integers to include floating-point numbers, character representations, and a human-friendly shorthand for binary.
### 2.7.1 Floating point data type (greater range, less precision)
The floating-point data type is crucial for representing numbers that have a much wider range than standard integers, albeit with a sacrifice in precision. This is analogous to scientific notation used in fields like chemistry, where extremely large or small numbers (like Avogadro's number, $6.022 \times 10^{23}$ ) need to be expressed. Standard 16-bit two's complement integers are limited to a range of -32,768 to +32,767 and offer 15 bits of precision. Floating-point types address this by allocating bits to both the range (exponent field) and precision (fraction field), in addition to a sign bit [19](#page=19).
The most common floating-point format is the 32-bit single-precision type, which allocates bits as follows:
* 1 bit for the sign (positive or negative) [20](#page=20).
* 8 bits for the exponent (range) [20](#page=20).
* 23 bits for the fraction (precision) [20](#page=20).
This format is often visualized as:
$$ \underbrace{S}_{\text{1 bit (sign)}} \quad \underbrace{\text{exponent}}_{\text{8 bits}} \quad \underbrace{\text{fraction}}_{\text{23 bits}} $$ #### 2.7.1.1 Normalized form Floating-point numbers are typically represented in a normalized form, similar to scientific notation, where the value is expressed as: $$N = (-1)^S \times 1.\text{fraction} \times 2^{\text{exponent} - 127}, \quad 1 \le \text{exponent} \le 254$$ * **Sign bit (S):** A single bit where 0 indicates a positive number and 1 indicates a negative number [21](#page=21). * **Exponent field:** The 8 bits representing the exponent are encoded using an "excess" or "bias" code. For the IEEE standard 32-bit format, the bias is 127. To get the actual exponent, the unsigned integer value of the exponent field is treated, and 127 is subtracted. For example, an exponent field of `10000110` (decimal 134) corresponds to an actual exponent of $134 - 127 = +7$. An exponent field of `00000111` (decimal 7) corresponds to $7 - 127 = -120$. The range of representable exponents is from $2^{-126}$ to $2^{127}$ [21](#page=21). * **Fraction field:** The 23 bits store the fractional part of the number. In normalized form, there is always a '1' to the left of the binary point. This leading '1' is implicitly assumed and not stored, contributing to an effective 24 bits of precision. The complete significand is thus `1.fraction` [21](#page=21). > **Tip:** The "normalized form" means there is exactly one non-zero binary digit to the left of the binary point. For floating-point numbers, this non-zero digit is always '1'. **Example 2.12:** The floating-point representation `00111101100000000000000000000000` [21](#page=21): * Sign bit (S): 0 (positive) [21](#page=21). * Exponent field: `01111011` (decimal 123). Actual exponent = $123 - 127 = -4$ [21](#page=21). * Fraction field: All zeros. * Result: $+1.00000000000000000000000 \times 2^{-4}$, which is $\frac{1}{16}$ [21](#page=21). **Example 2.13:** Representing the number $-6 \frac{5}{8}$ in floating-point format [21](#page=21): 1. Convert to binary: $-110.101_2$. 2. Normalize: $-1.10101 \times 2^2$. 3. Sign bit: 1 (negative). 4. Exponent field: The actual exponent is +2. To get the exponent field value, we add the bias: $2 + 127 = 129$. In binary, this is `10000001` [21](#page=21). 5. Fraction field: Take the digits after the binary point from the normalized form: `10101`. Pad with zeros to 23 bits: `10101000000000000000000`. 6. Result: `11000000110101000000000000000000` [21](#page=21). **Example 2.14:** Further illustrations of floating-point interpretation [22](#page=22): * `0 10000011 00101000000000000000000` is $1.00101 \times 2^4 = 18.5$. (Exponent 131, $131-127=4$) [22](#page=22). * `1 10000010 00101000000000000000000` is $-1 \times 1.00101 \times 2^3 = -9.25$. (Sign 1, Exponent 130, $130-127=3$) [22](#page=22). * `0 11111110 11111111111111111111111` is approximately $2^{128}$. (Sign 0, Exponent 254, $254-127=127$. Fraction is all 1s, approximating 2) [22](#page=22). #### 2.7.1.2 Infinities When the exponent field is all 1s (`11111111`), and the fraction field is all 0s, the floating-point representation denotes infinity [22](#page=22). * Positive infinity: Sign bit is 0. * Negative infinity: Sign bit is 1. #### 2.7.1.3 Subnormal numbers Numbers smaller than the smallest representable normalized number (which is $2^{-126}$) but larger than zero are called subnormal numbers. These numbers cannot be represented in the standard normalized form [22](#page=22). * The largest subnormal number is $0.11111111111111111111111 \times 2^{-126}$ [22](#page=22). * The smallest subnormal number is $2^{-149}$ [22](#page=22). Subnormal numbers are represented with an exponent field of all 0s (`00000000`). In this case, the exponent is considered to be $-126$, and the significand is formed by a leading 0 followed by the fraction field (i.e., $0.\text{fraction}$) [23](#page=23). **Example 2.15:** The floating-point representation `0 00000000 00001000000000000000000` [23](#page=23): * Sign bit: 0 (positive) [23](#page=23). * Exponent field: `00000000` (zero exponent) indicates the actual exponent is -126, and the leading bit of the significand is 0 [23](#page=23). * Fraction field: `00001000000000000000000`, which represents $2^{-5}$. * Result: $0.00001 \times 2^{-126} = 2^{-5} \times 2^{-126} = 2^{-131}$ [23](#page=23). > **Tip:** While a deep dive into IEEE floating-point arithmetic is advanced, understanding its existence is key. It allows for a vast range of numbers (both very large and very small) at the cost of reduced precision compared to integers. ### 2.7.2 ASCII codes ASCII (American Standard Code for Information Interchange) is a standardized 8-bit code used for representing characters in computers and for transferring character information between input/output devices and the CPU. This standard simplifies compatibility between hardware from different manufacturers [23](#page=23). Each character, including letters, digits, and control keys, has a unique ASCII code. For example: * The digit '3' is `00110011` [23](#page=23). * The digit '2' is `00110010` [23](#page=23). * The lowercase 'e' is `01100101` [23](#page=23). * The ENTER key is `00001101` [23](#page=23). Most keys have multiple codes, for instance, differentiating between uppercase and lowercase letters (e.g., 'E' is `01000101`, while 'e' is `01100101`) [23](#page=23). > **Tip:** When you type a character on a keyboard, its corresponding 8-bit ASCII code is generated and sent to the computer. When the computer needs to display a character, it sends the ASCII code to the monitor. ### 2.7.3 Hexadecimal notation Hexadecimal notation, or base 16, is a human-friendly shorthand for representing long binary strings. It's particularly useful for dealing with 16-bit binary strings, common in systems like the LC-3 [24](#page=24). The system assigns a unique symbol to each possible 4-bit binary combination (0 to 15): * `0000` = 0 * `0001` = 1 * ... * `1001` = 9 * `1010` = A * `1011` = B * `1100` = C * `1101` = D * `1110` = E * `1111` = F This allows a 16-bit binary string to be represented by just four hexadecimal digits, reducing the number of characters needed by a factor of four [25](#page=25). **Example:** The binary string `0011110101101110` can be broken into 4-bit chunks: `0011 1101 0110 1110`. Converting each chunk to its hexadecimal equivalent gives `3D6E` [24](#page=24) [25](#page=25). > **Tip:** Hexadecimal notation significantly reduces the likelihood of copying errors when transcribing or working with long binary sequences. It can represent integers, floating-point numbers, ASCII codes, or bit vectors, serving primarily as a convenience for humans rather than a data type for computer operations [25](#page=25). --- # Conversion between binary and decimal This section details the methods for converting numbers between their binary (2's complement) and decimal representations, including handling fractional parts [7](#page=7). ### 4.1 Binary to decimal conversion To convert a 2's complement binary integer to its decimal representation, follow these steps, assuming an eight-bit representation for illustration (which covers decimal integers from -128 to +127) [7](#page=7): 1. **Examine the leading bit (b7)**: * If the leading bit is a `0`, the integer is positive. * If the leading bit is a `1`, the integer is negative. In this case, you must first find the 2's complement representation of the positive number with the same magnitude by flipping all the bits and adding 1 [7](#page=7). 2. **Calculate the magnitude**: The magnitude is calculated by summing the powers of 2 for which the corresponding bit is `1`. For an eight-bit number $b_7 b_6 b_5 b_4 b_3 b_2 b_1 b_0$, the magnitude is given by: $$ \text{Magnitude} = b_6 \cdot 2^6 + b_5 \cdot 2^5 + b_4 \cdot 2^4 + b_3 \cdot 2^3 + b_2 \cdot 2^2 + b_1 \cdot 2^1 + b_0 \cdot 2^0 $$ 3. **Apply the sign**: If the original binary number was determined to be negative in step 1, append a minus sign to the calculated magnitude [7](#page=7). > **Example:** Convert the 2's complement integer `11000111` to a decimal integer value [8](#page=8). > > 1. The leading bit is `1`, so the number is negative. To find the magnitude, we flip the bits (`00111000`) and add 1 (`00111001`). > 2. The magnitude is calculated as: > $0 \cdot 2^6 + 1 \cdot 2^5 + 1 \cdot 2^4 + 1 \cdot 2^3 + 0 \cdot 2^2 + 0 \cdot 2^1 + 1 \cdot 2^0$ > $= 0 + 32 + 16 + 8 + 0 + 0 + 1 = 57$ [8](#page=8). > 3. Since the original number was negative, the decimal value is $-57$ [8](#page=8). #### 4.1.1 Conversion of fractional parts For numbers with fractional parts, the binary to decimal conversion is straightforward. Bits to the right of the binary point represent negative powers of 2. For a fractional part $0.b_{-1}b_{-2}b_{-3}b_{-4}...$, the decimal value is calculated by summing the values where the corresponding bit $b_i$ is 1 [9](#page=9): $$ \text{Fractional Value} = b_{-1} \cdot 2^{-1} + b_{-2} \cdot 2^{-2} + b_{-3} \cdot 2^{-3} + b_{-4} \cdot 2^{-4} + \dots $$ > **Example:** Convert the binary fractional part `.1011` to decimal. > > The value is $1 \cdot 2^{-1} + 0 \cdot 2^{-2} + 1 \cdot 2^{-3} + 1 \cdot 2^{-4}$ > $= 0.5 + 0 + 0.125 + 0.0625 = 0.6875$ [9](#page=9). ### 4.2 Decimal to binary conversion Converting from decimal to 2's complement binary is more involved. The method relies on the parity of the number (whether it's odd or even) to determine the bits [8](#page=8). For a generic eight-bit representation $b_7 b_6 b_5 b_4 b_3 b_2 b_1 b_0$, the value is represented as: $$ b_7 \cdot 2^7 + b_6 \cdot 2^6 + b_5 \cdot 2^5 + b_4 \cdot 2^4 + b_3 \cdot 2^3 + b_2 \cdot 2^2 + b_1 \cdot 2^1 + b_0 \cdot 2^0 $$ The process to determine the bits ($b_i$) for a decimal integer $N$ is as follows [9](#page=9): 1. **Form the equation for the magnitude**: Start by forming the equation $N = b_k \cdot 2^k + \dots + b_1 \cdot 2^1 + b_0 \cdot 2^0$, where $k$ is the highest power of 2 less than or equal to $N$. 2. **Determine bits iteratively**: Repeat the following steps until the left side of the equation becomes 0: * If $N$ is odd, the rightmost bit ($b_0$ in the current context) is `1`. If $N$ is even, the rightmost bit is `0` [8](#page=8). * Subtract the determined bit (0 or 1) from $N$. * Remove the least significant term (e.g., $b_0 \cdot 2^0$) from the right side of the equation. * Divide both sides of the equation by 2. This effectively shifts the powers of 2, and the next iteration determines the next bit to the left [9](#page=9). 3. **Handle positive numbers**: If the original decimal number was positive, append a leading `0` as the sign bit to complete the 2's complement representation [9](#page=9). 4. **Handle negative numbers**: If the original decimal number was negative, append a leading `0` to the binary representation of its magnitude, and then form the 2's complement of this result to obtain the final representation [9](#page=9). > **Example:** Convert the decimal value +105 to a 2's complement binary code (using 8 bits) [8](#page=8). > > We want to find $b_i$ such that $105 = b_6 \cdot 2^6 + b_5 \cdot 2^5 + b_4 \cdot 2^4 + b_3 \cdot 2^3 + b_2 \cdot 2^2 + b_1 \cdot 2^1 + b_0 \cdot 2^0$ [8](#page=8). > > * 105 is odd, so $b_0 = 1$. Subtract 1: $104 = b_6 \cdot 2^6 + \dots + b_1 \cdot 2^1$. Divide by 2: $52 = b_6 \cdot 2^5 + \dots + b_1 \cdot 2^0$ [8](#page=8). > * 52 is even, so $b_1 = 0$. Subtract 0: $52 = b_6 \cdot 2^5 + \dots + b_2 \cdot 2^1$. Divide by 2: $26 = b_6 \cdot 2^4 + \dots + b_2 \cdot 2^0$ [8](#page=8). > * 26 is even, so $b_2 = 0$. Subtract 0: $26 = b_6 \cdot 2^4 + \dots + b_3 \cdot 2^1$. Divide by 2: $13 = b_6 \cdot 2^3 + \dots + b_3 \cdot 2^0$ [9](#page=9). > * 13 is odd, so $b_3 = 1$. Subtract 1: $12 = b_6 \cdot 2^3 + b_5 \cdot 2^2 + b_4 \cdot 2^1$. Divide by 2: $6 = b_6 \cdot 2^2 + b_5 \cdot 2^1 + b_4 \cdot 2^0$ [9](#page=9). > * 6 is even, so $b_4 = 0$. Subtract 0: $6 = b_6 \cdot 2^2 + b_5 \cdot 2^1$. Divide by 2: $3 = b_6 \cdot 2^1 + b_5 \cdot 2^0$ [9](#page=9). > * 3 is odd, so $b_5 = 1$. Subtract 1: $2 = b_6 \cdot 2^1$. Divide by 2: $1 = b_6 \cdot 2^0$ [9](#page=9). > * 1 is odd, so $b_6 = 1$. The equation is now 0 [9](#page=9). > > The binary representation of the magnitude is `1101001`. Since the original number was positive, we append a leading `0` for the sign bit: `01101001` [9](#page=9). #### 4.2.1 Conversion of fractional parts To convert a decimal fraction to binary, a different iterative process is used [9](#page=9). Suppose we want to convert a decimal fraction $F$ to binary. We form the equation: $$ F = b_{-1} \cdot 2^{-1} + b_{-2} \cdot 2^{-2} + b_{-3} \cdot 2^{-3} + \dots $$ The process is as follows: 1. **Multiply by 2**: Multiply both sides of the equation by 2. 2. **Determine the bit**: * If the left side of the equation is greater than or equal to 1, the next bit to the right of the binary point ($b_{-i}$ in the current step) is `1`. * If the left side of the equation is less than 1, the bit is `0` [9](#page=9). 3. **Adjust the equation**: If a `1` was assigned, subtract 1 from the left side of the equation to isolate the remaining fractional part. 4. **Continue**: Repeat steps 1-3 until the left side becomes 0, or until the desired precision is reached [10](#page=10). > **Example:** Convert the decimal fraction 0.421 to binary [10](#page=10). > > We start with the equation $0.421 = b_{-1} \cdot 2^{-1} + b_{-2} \cdot 2^{-2} + \dots$ [10](#page=10). > > * Multiply by 2: $0.842 = b_{-1} \cdot 2^0 + b_{-2} \cdot 2^{-1} + \dots$. Since $0.842 < 1$, $b_{-1} = 0$. The remaining equation is $0.842 = b_{-2} \cdot 2^{-1} + b_{-3} \cdot 2^{-2} + \dots$ [10](#page=10). > * Multiply by 2: $1.684 = b_{-2} \cdot 2^0 + b_{-3} \cdot 2^{-1} + \dots$. Since $1.684 \geq 1$, $b_{-2} = 1$. Subtract 1: $0.684 = b_{-3} \cdot 2^{-1} + b_{-4} \cdot 2^{-2} + \dots$ [10](#page=10). > * Multiply by 2: $1.368 = b_{-3} \cdot 2^0 + b_{-4} \cdot 2^{-1} + \dots$. Since $1.368 \geq 1$, $b_{-3} = 1$. Subtract 1: $0.368 = b_{-4} \cdot 2^0 + \dots$ [10](#page=10). > * Multiply by 2: $0.736 = b_{-4} \cdot 2^0 + \dots$. Since $0.736 < 1$, $b_{-4} = 0$ [10](#page=10). > > Stopping at four bits, the binary representation of 0.421 decimal is 0.0110 [10](#page=10). --- ## Common mistakes to avoid - Review all topics thoroughly before exams - Pay attention to formulas and key definitions - Practice with examples provided in each section - Don't memorize without understanding the underlying concepts
$$ \underbrace{S}_{\text{1 bit (sign)}} \quad \underbrace{\text{exponent}}_{\text{8 bits}} \quad \underbrace{\text{fraction}}_{\text{23 bits}} $$ #### 2.7.1.1 Normalized form Floating-point numbers are typically represented in a normalized form, similar to scientific notation, where the value is expressed as: $$N = (-1)^S \times 1.\text{fraction} \times 2^{\text{exponent} - 127}, \quad 1 \le \text{exponent} \le 254$$ * **Sign bit (S):** A single bit where 0 indicates a positive number and 1 indicates a negative number [21](#page=21). * **Exponent field:** The 8 bits representing the exponent are encoded using an "excess" or "bias" code. For the IEEE standard 32-bit format, the bias is 127. To get the actual exponent, the unsigned integer value of the exponent field is treated, and 127 is subtracted. For example, an exponent field of `10000110` (decimal 134) corresponds to an actual exponent of $134 - 127 = +7$. An exponent field of `00000111` (decimal 7) corresponds to $7 - 127 = -120$. The range of representable exponents is from $2^{-126}$ to $2^{127}$ [21](#page=21). * **Fraction field:** The 23 bits store the fractional part of the number. In normalized form, there is always a '1' to the left of the binary point. This leading '1' is implicitly assumed and not stored, contributing to an effective 24 bits of precision. The complete significand is thus `1.fraction` [21](#page=21). > **Tip:** The "normalized form" means there is exactly one non-zero binary digit to the left of the binary point. For floating-point numbers, this non-zero digit is always '1'. **Example 2.12:** The floating-point representation `00111101100000000000000000000000` [21](#page=21): * Sign bit (S): 0 (positive) [21](#page=21). * Exponent field: `01111011` (decimal 123). Actual exponent = $123 - 127 = -4$ [21](#page=21). * Fraction field: All zeros. * Result: $+1.00000000000000000000000 \times 2^{-4}$, which is $\frac{1}{16}$ [21](#page=21). **Example 2.13:** Representing the number $-6 \frac{5}{8}$ in floating-point format [21](#page=21): 1. Convert to binary: $-110.101_2$. 2. Normalize: $-1.10101 \times 2^2$. 3. Sign bit: 1 (negative). 4. Exponent field: The actual exponent is +2. To get the exponent field value, we add the bias: $2 + 127 = 129$. In binary, this is `10000001` [21](#page=21). 5. Fraction field: Take the digits after the binary point from the normalized form: `10101`. Pad with zeros to 23 bits: `10101000000000000000000`. 6. Result: `11000000110101000000000000000000` [21](#page=21). **Example 2.14:** Further illustrations of floating-point interpretation [22](#page=22): * `0 10000011 00101000000000000000000` is $1.00101 \times 2^4 = 18.5$. (Exponent 131, $131-127=4$) [22](#page=22). * `1 10000010 00101000000000000000000` is $-1 \times 1.00101 \times 2^3 = -9.25$. (Sign 1, Exponent 130, $130-127=3$) [22](#page=22). * `0 11111110 11111111111111111111111` is approximately $2^{128}$. (Sign 0, Exponent 254, $254-127=127$. Fraction is all 1s, approximating 2) [22](#page=22). #### 2.7.1.2 Infinities When the exponent field is all 1s (`11111111`), and the fraction field is all 0s, the floating-point representation denotes infinity [22](#page=22). * Positive infinity: Sign bit is 0. * Negative infinity: Sign bit is 1. #### 2.7.1.3 Subnormal numbers Numbers smaller than the smallest representable normalized number (which is $2^{-126}$) but larger than zero are called subnormal numbers. These numbers cannot be represented in the standard normalized form [22](#page=22). * The largest subnormal number is $0.11111111111111111111111 \times 2^{-126}$ [22](#page=22). * The smallest subnormal number is $2^{-149}$ [22](#page=22). Subnormal numbers are represented with an exponent field of all 0s (`00000000`). In this case, the exponent is considered to be $-126$, and the significand is formed by a leading 0 followed by the fraction field (i.e., $0.\text{fraction}$) [23](#page=23). **Example 2.15:** The floating-point representation `0 00000000 00001000000000000000000` [23](#page=23): * Sign bit: 0 (positive) [23](#page=23). * Exponent field: `00000000` (zero exponent) indicates the actual exponent is -126, and the leading bit of the significand is 0 [23](#page=23). * Fraction field: `00001000000000000000000`, which represents $2^{-5}$. * Result: $0.00001 \times 2^{-126} = 2^{-5} \times 2^{-126} = 2^{-131}$ [23](#page=23). > **Tip:** While a deep dive into IEEE floating-point arithmetic is advanced, understanding its existence is key. It allows for a vast range of numbers (both very large and very small) at the cost of reduced precision compared to integers. ### 2.7.2 ASCII codes ASCII (American Standard Code for Information Interchange) is a standardized 8-bit code used for representing characters in computers and for transferring character information between input/output devices and the CPU. This standard simplifies compatibility between hardware from different manufacturers [23](#page=23). Each character, including letters, digits, and control keys, has a unique ASCII code. For example: * The digit '3' is `00110011` [23](#page=23). * The digit '2' is `00110010` [23](#page=23). * The lowercase 'e' is `01100101` [23](#page=23). * The ENTER key is `00001101` [23](#page=23). Most keys have multiple codes, for instance, differentiating between uppercase and lowercase letters (e.g., 'E' is `01000101`, while 'e' is `01100101`) [23](#page=23). > **Tip:** When you type a character on a keyboard, its corresponding 8-bit ASCII code is generated and sent to the computer. When the computer needs to display a character, it sends the ASCII code to the monitor. ### 2.7.3 Hexadecimal notation Hexadecimal notation, or base 16, is a human-friendly shorthand for representing long binary strings. It's particularly useful for dealing with 16-bit binary strings, common in systems like the LC-3 [24](#page=24). The system assigns a unique symbol to each possible 4-bit binary combination (0 to 15): * `0000` = 0 * `0001` = 1 * ... * `1001` = 9 * `1010` = A * `1011` = B * `1100` = C * `1101` = D * `1110` = E * `1111` = F This allows a 16-bit binary string to be represented by just four hexadecimal digits, reducing the number of characters needed by a factor of four [25](#page=25). **Example:** The binary string `0011110101101110` can be broken into 4-bit chunks: `0011 1101 0110 1110`. Converting each chunk to its hexadecimal equivalent gives `3D6E` [24](#page=24) [25](#page=25). > **Tip:** Hexadecimal notation significantly reduces the likelihood of copying errors when transcribing or working with long binary sequences. It can represent integers, floating-point numbers, ASCII codes, or bit vectors, serving primarily as a convenience for humans rather than a data type for computer operations [25](#page=25). --- # Conversion between binary and decimal This section details the methods for converting numbers between their binary (2's complement) and decimal representations, including handling fractional parts [7](#page=7). ### 4.1 Binary to decimal conversion To convert a 2's complement binary integer to its decimal representation, follow these steps, assuming an eight-bit representation for illustration (which covers decimal integers from -128 to +127) [7](#page=7): 1. **Examine the leading bit (b7)**: * If the leading bit is a `0`, the integer is positive. * If the leading bit is a `1`, the integer is negative. In this case, you must first find the 2's complement representation of the positive number with the same magnitude by flipping all the bits and adding 1 [7](#page=7). 2. **Calculate the magnitude**: The magnitude is calculated by summing the powers of 2 for which the corresponding bit is `1`. For an eight-bit number $b_7 b_6 b_5 b_4 b_3 b_2 b_1 b_0$, the magnitude is given by: $$ \text{Magnitude} = b_6 \cdot 2^6 + b_5 \cdot 2^5 + b_4 \cdot 2^4 + b_3 \cdot 2^3 + b_2 \cdot 2^2 + b_1 \cdot 2^1 + b_0 \cdot 2^0 $$ 3. **Apply the sign**: If the original binary number was determined to be negative in step 1, append a minus sign to the calculated magnitude [7](#page=7). > **Example:** Convert the 2's complement integer `11000111` to a decimal integer value [8](#page=8). > > 1. The leading bit is `1`, so the number is negative. To find the magnitude, we flip the bits (`00111000`) and add 1 (`00111001`). > 2. The magnitude is calculated as: > $0 \cdot 2^6 + 1 \cdot 2^5 + 1 \cdot 2^4 + 1 \cdot 2^3 + 0 \cdot 2^2 + 0 \cdot 2^1 + 1 \cdot 2^0$ > $= 0 + 32 + 16 + 8 + 0 + 0 + 1 = 57$ [8](#page=8). > 3. Since the original number was negative, the decimal value is $-57$ [8](#page=8). #### 4.1.1 Conversion of fractional parts For numbers with fractional parts, the binary to decimal conversion is straightforward. Bits to the right of the binary point represent negative powers of 2. For a fractional part $0.b_{-1}b_{-2}b_{-3}b_{-4}...$, the decimal value is calculated by summing the values where the corresponding bit $b_i$ is 1 [9](#page=9): $$ \text{Fractional Value} = b_{-1} \cdot 2^{-1} + b_{-2} \cdot 2^{-2} + b_{-3} \cdot 2^{-3} + b_{-4} \cdot 2^{-4} + \dots $$ > **Example:** Convert the binary fractional part `.1011` to decimal. > > The value is $1 \cdot 2^{-1} + 0 \cdot 2^{-2} + 1 \cdot 2^{-3} + 1 \cdot 2^{-4}$ > $= 0.5 + 0 + 0.125 + 0.0625 = 0.6875$ [9](#page=9). ### 4.2 Decimal to binary conversion Converting from decimal to 2's complement binary is more involved. The method relies on the parity of the number (whether it's odd or even) to determine the bits [8](#page=8). For a generic eight-bit representation $b_7 b_6 b_5 b_4 b_3 b_2 b_1 b_0$, the value is represented as: $$ b_7 \cdot 2^7 + b_6 \cdot 2^6 + b_5 \cdot 2^5 + b_4 \cdot 2^4 + b_3 \cdot 2^3 + b_2 \cdot 2^2 + b_1 \cdot 2^1 + b_0 \cdot 2^0 $$ The process to determine the bits ($b_i$) for a decimal integer $N$ is as follows [9](#page=9): 1. **Form the equation for the magnitude**: Start by forming the equation $N = b_k \cdot 2^k + \dots + b_1 \cdot 2^1 + b_0 \cdot 2^0$, where $k$ is the highest power of 2 less than or equal to $N$. 2. **Determine bits iteratively**: Repeat the following steps until the left side of the equation becomes 0: * If $N$ is odd, the rightmost bit ($b_0$ in the current context) is `1`. If $N$ is even, the rightmost bit is `0` [8](#page=8). * Subtract the determined bit (0 or 1) from $N$. * Remove the least significant term (e.g., $b_0 \cdot 2^0$) from the right side of the equation. * Divide both sides of the equation by 2. This effectively shifts the powers of 2, and the next iteration determines the next bit to the left [9](#page=9). 3. **Handle positive numbers**: If the original decimal number was positive, append a leading `0` as the sign bit to complete the 2's complement representation [9](#page=9). 4. **Handle negative numbers**: If the original decimal number was negative, append a leading `0` to the binary representation of its magnitude, and then form the 2's complement of this result to obtain the final representation [9](#page=9). > **Example:** Convert the decimal value +105 to a 2's complement binary code (using 8 bits) [8](#page=8). > > We want to find $b_i$ such that $105 = b_6 \cdot 2^6 + b_5 \cdot 2^5 + b_4 \cdot 2^4 + b_3 \cdot 2^3 + b_2 \cdot 2^2 + b_1 \cdot 2^1 + b_0 \cdot 2^0$ [8](#page=8). > > * 105 is odd, so $b_0 = 1$. Subtract 1: $104 = b_6 \cdot 2^6 + \dots + b_1 \cdot 2^1$. Divide by 2: $52 = b_6 \cdot 2^5 + \dots + b_1 \cdot 2^0$ [8](#page=8). > * 52 is even, so $b_1 = 0$. Subtract 0: $52 = b_6 \cdot 2^5 + \dots + b_2 \cdot 2^1$. Divide by 2: $26 = b_6 \cdot 2^4 + \dots + b_2 \cdot 2^0$ [8](#page=8). > * 26 is even, so $b_2 = 0$. Subtract 0: $26 = b_6 \cdot 2^4 + \dots + b_3 \cdot 2^1$. Divide by 2: $13 = b_6 \cdot 2^3 + \dots + b_3 \cdot 2^0$ [9](#page=9). > * 13 is odd, so $b_3 = 1$. Subtract 1: $12 = b_6 \cdot 2^3 + b_5 \cdot 2^2 + b_4 \cdot 2^1$. Divide by 2: $6 = b_6 \cdot 2^2 + b_5 \cdot 2^1 + b_4 \cdot 2^0$ [9](#page=9). > * 6 is even, so $b_4 = 0$. Subtract 0: $6 = b_6 \cdot 2^2 + b_5 \cdot 2^1$. Divide by 2: $3 = b_6 \cdot 2^1 + b_5 \cdot 2^0$ [9](#page=9). > * 3 is odd, so $b_5 = 1$. Subtract 1: $2 = b_6 \cdot 2^1$. Divide by 2: $1 = b_6 \cdot 2^0$ [9](#page=9). > * 1 is odd, so $b_6 = 1$. The equation is now 0 [9](#page=9). > > The binary representation of the magnitude is `1101001`. Since the original number was positive, we append a leading `0` for the sign bit: `01101001` [9](#page=9). #### 4.2.1 Conversion of fractional parts To convert a decimal fraction to binary, a different iterative process is used [9](#page=9). Suppose we want to convert a decimal fraction $F$ to binary. We form the equation: $$ F = b_{-1} \cdot 2^{-1} + b_{-2} \cdot 2^{-2} + b_{-3} \cdot 2^{-3} + \dots $$ The process is as follows: 1. **Multiply by 2**: Multiply both sides of the equation by 2. 2. **Determine the bit**: * If the left side of the equation is greater than or equal to 1, the next bit to the right of the binary point ($b_{-i}$ in the current step) is `1`. * If the left side of the equation is less than 1, the bit is `0` [9](#page=9). 3. **Adjust the equation**: If a `1` was assigned, subtract 1 from the left side of the equation to isolate the remaining fractional part. 4. **Continue**: Repeat steps 1-3 until the left side becomes 0, or until the desired precision is reached [10](#page=10). > **Example:** Convert the decimal fraction 0.421 to binary [10](#page=10). > > We start with the equation $0.421 = b_{-1} \cdot 2^{-1} + b_{-2} \cdot 2^{-2} + \dots$ [10](#page=10). > > * Multiply by 2: $0.842 = b_{-1} \cdot 2^0 + b_{-2} \cdot 2^{-1} + \dots$. Since $0.842 < 1$, $b_{-1} = 0$. The remaining equation is $0.842 = b_{-2} \cdot 2^{-1} + b_{-3} \cdot 2^{-2} + \dots$ [10](#page=10). > * Multiply by 2: $1.684 = b_{-2} \cdot 2^0 + b_{-3} \cdot 2^{-1} + \dots$. Since $1.684 \geq 1$, $b_{-2} = 1$. Subtract 1: $0.684 = b_{-3} \cdot 2^{-1} + b_{-4} \cdot 2^{-2} + \dots$ [10](#page=10). > * Multiply by 2: $1.368 = b_{-3} \cdot 2^0 + b_{-4} \cdot 2^{-1} + \dots$. Since $1.368 \geq 1$, $b_{-3} = 1$. Subtract 1: $0.368 = b_{-4} \cdot 2^0 + \dots$ [10](#page=10). > * Multiply by 2: $0.736 = b_{-4} \cdot 2^0 + \dots$. Since $0.736 < 1$, $b_{-4} = 0$ [10](#page=10). > > Stopping at four bits, the binary representation of 0.421 decimal is 0.0110 [10](#page=10). --- ## Common mistakes to avoid - Review all topics thoroughly before exams - Pay attention to formulas and key definitions - Practice with examples provided in each section - Don't memorize without understanding the underlying concepts
Glossary
| Term | Definition |
|------|------------|
| Bit | The fundamental unit of information in computing, representing a binary digit which can have one of two values: 0 or 1. |
| Data Type | A classification of data that tells the compiler or interpreter how the programmer intends to use the data. It defines the set of values that an object can hold and the set of operations that can be performed on it. |
| Unsigned Integer | A numerical data type that can only represent non-negative integers. It does not have a sign bit, allowing for a larger range of positive values compared to signed integers of the same bit length. |
| Signed Magnitude | A representation for signed integers where one bit (typically the most significant bit) indicates the sign (0 for positive, 1 for negative), and the remaining bits represent the magnitude of the number. |
| 1's Complement | A representation for signed integers where negative numbers are formed by inverting (complementing) all the bits of their positive counterpart. This method has two representations for zero. |
| 2's Complement | The most common representation for signed integers in computers. Negative numbers are formed by inverting all bits of the positive number and adding 1. This method has a unique representation for zero and simplifies arithmetic operations. |
| Positional Notation | A system of representing numbers where the value of a digit depends on its position within the number. Examples include decimal (base-10) and binary (base-2) systems. |
| Floating Point Data Type | A data type used to represent real numbers that can have a fractional part. It is typically composed of a sign bit, an exponent field, and a fraction field, allowing for a wide range of values but with limited precision. |
| ASCII Codes | A character encoding standard where characters (letters, numbers, symbols) are mapped to unique 8-bit binary codes. It facilitates the exchange of information between different computer systems and devices. |
| Hexadecimal Notation | A base-16 number system that uses digits 0-9 and letters A-F to represent values. It is often used as a more human-readable shorthand for binary numbers, as each hexadecimal digit corresponds to exactly four binary digits. |
| Arithmetic and Logic Unit (ALU) | A fundamental digital circuit within a computer processor that performs arithmetic and bitwise logical operations on integer binary numbers. |
| Sign Extension | The process of increasing the number of bits used to represent a signed number without changing its value. For positive numbers, leading zeros are added, while for negative numbers (in 2's complement), leading ones are replicated. |
| Overflow | An error condition that occurs in arithmetic operations when the result of a calculation exceeds the maximum value that can be represented by the available number of bits for that data type. |
| Bit Mask | A binary pattern used in logical operations (like AND) to select or isolate specific bits within another binary pattern, effectively masking out or ignoring certain bits. |
| Bit Vector | A sequence of bits where each bit represents a distinct property or state. It is often used for efficient representation and manipulation of sets of flags or status indicators. |
| Logical Operations | Operations that manipulate binary values (bits) based on Boolean logic. Common examples include AND, OR, NOT, and XOR. |
| Normalized Form | A standard way of representing floating-point numbers where the most significant digit before the decimal point is always non-zero (in binary, this is always 1). This ensures a unique representation for each number and maximizes precision. |
| Subnormal Numbers | Floating-point numbers that are too small to be represented in normalized form. They are represented with a leading zero before the binary point and a special exponent value, allowing for representation of values closer to zero at the cost of reduced precision. |
Cover
PETS III.pdf
Summary
# Herhaling van privacy-verbeterende technologieën (PETs)
Dit deel vat voorgaande discussies over privacy-verbeterende technologieën (PETs) samen, inclusief hun toepassingen en de specifieke privacydreigingen die ze aanpakken.
### 1.1 Overzicht van herhaalde concepten
De herhaling richt zich op een samenvatting van de eerste en tweede delen van de cursus over PETs. Belangrijke aspecten die aan bod kwamen, zijn onder meer de gebruiksgevallen in softwareontwikkeling en inzichten uit een expertgesprek [2](#page=2).
#### 1.1.1 Kernconcepten: Linking, Identifying, Non-repudiation
Een centraal concept in de context van PETs is het opbouwen van een vocabulaire door middel van LIN (Linking, Identifying, Non-repudiation). Dit helpt bij het begrijpen van de mechanismen achter privacybescherming [3](#page=3).
* **Linking:** Het vermogen om verschillende stukjes informatie aan elkaar te koppelen [3](#page=3).
* **Identifying:** Het proces van het vaststellen van de identiteit van een entiteit [3](#page=3).
* **Non-repudiation:** Het bieden van bewijs dat een bepaalde actie is uitgevoerd door een specifieke entiteit, zodat deze de actie later niet kan ontkennen [3](#page=3).
#### 1.1.2 Besproken gebruiksgevallen
Gedurende de cursus zijn verschillende gebruiksgevallen voor PETs besproken. Deze illustreren de praktische toepassing van de technologieën [4](#page=4).
#### 1.1.3 Specifieke PETs en de aangepakte privacydreigingen
De herhaling benadrukt de specifieke privacydreigingen die met diverse PETs worden aangepakt.
* **Tor:** De privacydreiging die met Tor werd gemitigeerd, was gericht op het verbergen van de oorsprong van internetverkeer [5](#page=5).
* **PGP (Pretty Good Privacy):** PGP werd gebruikt om een beveiligingsdreiging aan te pakken, waarschijnlijk met betrekking tot de vertrouwelijkheid en integriteit van communicatie [6](#page=6).
#### 1.1.4 E-mail tracking met gepersonaliseerde URL-parameters
Een specifiek voorbeeld van een privacydreiging is e-mail tracking door middel van gepersonaliseerde URL-parameters. Dit gebeurt wanneer een URL wordt aangepast met unieke identifiers, vaak om het gedrag van de ontvanger te volgen [7](#page=7) [8](#page=8).
* **Mechanisme:** Dergelijke URL's bevatten vaak parameters die de gebruiker identificeren of hun interactie kunnen koppelen aan hun identiteit. Een voorbeeld van zo'n URL is `https://strom.com/awards/192.html` [7](#page=7) [8](#page=8).
* **Relevantie:** De meest relevante privacydreiging bij dit type tracking is **deliberate personalization**. Dit betekent dat de tracking actief wordt ingezet om gebruikersprofielen op te bouwen en gedrag te analyseren voor specifieke doeleinden [7](#page=7) [8](#page=8).
* **Mitigatie:** Er zijn momenteel geen effectieve tegenmaatregelen om dit type tracking te stoppen, behalve het volledig blokkeren van alle externe inhoud in e-mails [7](#page=7).
> **Tip:** Het begrijpen van de verschillende trackingmechanismen, zoals gepersonaliseerde URL-parameters, is cruciaal om je eigen digitale privacy beter te kunnen beschermen.
> **Tip:** De herhaling van deze concepten is essentieel om een solide basis te leggen voor verdere studies in privacy-verbeterende technologieën. Zorg ervoor dat je de koppeling tussen de technologieën, de gebruiksgevallen en de specifieke privacydreigingen die ze oplossen, goed begrijpt.
---
# Privacy-engineering tijdens het softwareontwikkelingsproces
Dit onderwerp onderzoekt hoe privacy kan worden geïntegreerd in software die wordt ontwikkeld, waarbij het concept van "no code" als ultieme oplossing voor veilige applicaties wordt besproken en de betekenis van privacy in de niet-digitale wereld wordt belicht [10](#page=10) [11](#page=11).
### 2.1 De integratie van privacy in softwareontwikkeling
De kernvraag binnen privacy-engineering is hoe men veilige, privacy-beschermende software kan bouwen. Dit omvat het proces van het integreren van privacyprincipes gedurende de gehele softwareontwikkelingscyclus [10](#page=10) [11](#page=11).
### 2.2 Het "no code" principe als ultieme oplossing
De meest veilige en privacy-beschermende code die in de menselijke geschiedenis is gebouwd, wordt geassocieerd met het "no code" principe. Dit concept, zoals gepresenteerd door Kelsey Hightower, stelt dat de beste manier om veilige en betrouwbare applicaties te schrijven is door "niets te schrijven en nergens te deployen". Dit impliceert dat het minimaliseren van zelfgeschreven code de meest effectieve strategie is om beveiligings- en privacyrisico's te vermijden [12](#page=12) [13](#page=13).
> **Tip:** Hoewel "no code" een theoretisch ideaal is voor maximale veiligheid, vereist de praktijk vaak een balans tussen functionaliteit en beveiliging. Het principe benadrukt echter het belang van het vermijden van onnodige complexiteit en potentiële kwetsbaarheden in code.
### 2.3 Privacy in de niet-digitale wereld
Het concept van privacy is niet beperkt tot de digitale wereld; het is ook prominent aanwezig in de niet-digitale omgeving. De informatie die we prijsgeven bij het gebruik van systemen staat vaak in verhouding tot de dienst die we ervoor terugkrijgen [14](#page=14) [15](#page=15) [16](#page=16).
> **Example:** In de fysieke wereld kunnen we privacy waarborgen door bijvoorbeeld gordijnen te sluiten (privacy van de woonruimte) betaalterminals te gebruiken voor transacties (privacy van financiële gegevens) of door simpelweg niet op alle vragen van een vreemde te antwoorden (privacy van persoonlijke informatie) [15](#page=15).
### 2.4 Definitie van privacy-beschermende software
Privacy-beschermende software verwijst naar software die zodanig is ontworpen en geïmplementeerd dat de privacy van gebruikers wordt gerespecteerd en beschermd. De mate waarin informatie wordt onthuld, is afhankelijk van de waarde van de dienst die de software levert [16](#page=16).
---
# Privacy by Design (PbD) benaderingen
Privacy by Design (PbD) is een benadering die streeft naar het integreren van privacybescherming vanaf het begin in het ontwerp van systemen en technologieën [17](#page=17).
### 3.1 Kernprincipes van Privacy by Design
De kern van PbD wordt gevormd door de volgende principes [18](#page=18):
1. **Doelbinding (Purpose limitation)**: Duidelijk definiëren waarvoor gegevens verzameld worden.
2. **Gegevensminimalisatie (Data minimization)**: Alleen de strikt noodzakelijke gegevens verzamelen en verwerken voor het vastgestelde doel [18](#page=18).
3. **Privacy-verhogende technologieën (Privacy-enhancing technologies - PETs)**: Na het bepalen van het doel en de benodigde data, kunnen PETs worden toegepast om de gegevens te beschermen [18](#page=18).
4. **Documentatie**: Essentieel voor het vastleggen van ontwerpbeslissingen en privacymaatregelen.
5. **Iteratie**: Het continu evalueren en verbeteren van de privacyaspecten van een systeem.
### 3.2 Informele categorisering van PbD-benaderingen
Er is een informele categorisering van benaderingen die binnen Privacy by Design worden gehanteerd [19](#page=19) [20](#page=20) [21](#page=21) [22](#page=22):
#### 3.2.1 Academische benadering
De academische benadering kenmerkt zich door een rigoureuze, formele en vaak wiskundige methode om privacy-eigenschappen in systemen te modelleren en te garanderen. Dit houdt in dat er gestart wordt met het opstellen van formele modellen voor de benodigde privacykenmerken. Voorbeelden van documenten die deze benadering illustreren zijn de ontwerpdocumenten van Bitcoin en Tor. Een concreet voorbeeld is het Covid Decentralized Contact Tracing Protocol, dat zwaar leunt op formele modellen en wiskundige onderbouwing. Deze benadering vereist vaak intensieve samenwerking binnen teams en gedetailleerde documentatie [19](#page=19) [23](#page=23) [24](#page=24) [25](#page=25) [26](#page=26) [27](#page=27) [29](#page=29).
#### 3.2.2 Tegen-culturele benadering
Deze benadering, vaak samengevat als "Ik ga dit kapotte ding repareren", wordt toegepast door gemeenschappen en projecten die zich richten op het verbeteren van bestaande, gebrekkige systemen. Het is een benadering die veel wordt gezien in open-source en civic tech projecten. Een voorbeeld hiervan is de initiële ontwikkeling van PGP (Pretty Good Privacy), dat als doel had om de privacy van communicatie te verbeteren [30](#page=30) [31](#page=31).
#### 3.2.3 Communicatief-intensieve benadering
Deze benadering legt de nadruk op communicatie en interactie. Hoewel minder gedetailleerd uitgewerkt in het verstrekte materiaal, impliceert deze benadering dat het betrekken van verschillende stakeholders en het voeren van open communicatie over privacyaspecten cruciaal is voor succesvolle PbD-implementatie. Deze benadering is sterk verweven met het belang van teamcollaboreatie en documentatie [21](#page=21) [22](#page=22) [27](#page=27) [28](#page=28) [29](#page=29).
---
## Veelgemaakte fouten om te vermijden
- Bestudeer alle onderwerpen grondig voor examens
- Let op formules en belangrijke definities
- Oefen met de voorbeelden in elke sectie
- Memoriseer niet zonder de onderliggende concepten te begrijpen
Glossary
| Term | Definition |
|------|------------|
| Privacy-verbeterende technologieën (PETs) | Een verzameling technologieën en technieken die ontworpen zijn om de privacy van individuen te beschermen bij het verwerken of delen van hun gegevens. Deze technologieën helpen bij het mitigeren van diverse privacydreigingen. |
| LIN in LIDDUN | Een acroniem dat waarschijnlijk staat voor Linking, Identifying, en Non-Repudiation, en wordt gebruikt in de context van het opbouwen van een vocabulaire voor het begrijpen van privacyconcepten. |
| Software-ontwikkeling en privacy | Het proces van het ontwerpen, bouwen, testen en onderhouden van software met inachtneming van privacyprincipes en -vereisten, om te zorgen dat gebruikersgegevens beschermd zijn. |
| Email tracking met gepersonaliseerde URL-parameters | Een methode waarbij unieke URL-parameters aan e-mailkoppelingen worden toegevoegd om het gedrag van de ontvanger te volgen, zoals het klikken op links, wat een privacydreiging vormt voor de gebruiker. |
| Privacydreiging | Een potentieel gevaar dat de persoonlijke privacy van een individu kan schenden, bijvoorbeeld door ongeautoriseerde toegang tot gegevens, tracking of identificatie. |
| Tor | Een netwerk en software die anonimiteit biedt door internetverkeer te routeren via een gedistribueerd netwerk van servers, waardoor het traceren van de oorsprong van het verkeer wordt bemoeilijkt. |
| PGP (Pretty Good Privacy) | Een encryptieprogramma dat cryptografische privacy en authenticatie biedt voor gegevencommunicatie, voornamelijk gebruikt voor het versleutelen en digitaal ondertekenen van e-mail. |
| Doelbinding | Een privacyprincipe dat stelt dat persoonsgegevens alleen mogen worden verzameld voor specifieke, expliciet gedefinieerde en legitieme doeleinden, en niet verder mogen worden verwerkt op een wijze die onverenigbaar is met die doeleinden. |
| Gegevensminimalisatie | Het principe dat persoonsgegevens adequaat, ter zake dienend en beperkt moeten zijn tot wat noodzakelijk is in verhouding tot de doeleinden waarvoor zij worden verwerkt. |
| Privacy by Design (PbD) | Een benadering waarbij privacy en gegevensbescherming vanaf het begin in het ontwerp van technologie, processen en systemen worden ingebouwd, in plaats van als een bijkomend element te worden beschouwd. |
| Academische aanpak (PbD) | Een methode voor Privacy by Design die zich richt op rigoureuze, formele en vaak wiskundige modellen om de gewenste privacy-eigenschappen van een systeem te specificeren en te bewijzen. |
| Tegen-culturele aanpak (PbD) | Een benadering van Privacy by Design die gericht is op het identificeren en corrigeren van bestaande foutieve benaderingen of systemen die privacyproblemen veroorzaken, vaak met een focus op praktische oplossingen. |
| Communicatief-intensieve aanpak (PbD) | Een methode voor Privacy by Design die sterk leunt op teamcollaboratie, communicatie en documentatie om privacykwesties te adresseren en oplossingen te implementeren. |
| Gedecentraliseerd Contactonderzoek Protocol | Een protocol voor contactonderzoek, mogelijk gebruikt in de context van COVID-19, dat werkt op een gedecentraliseerde manier, wat kan helpen bij het beschermen van de privacy van individuen door minder centrale gegevensopslag. |
Cover
Protocols Design Principles.pdf
Summary
# Basisprincipes van cryptografische algoritmen en protocollen
Dit onderwerp behandelt de fundamentele definities van cryptografische algoritmen, protocollen en schema's, samen met een uitleg van actieve en passieve aanvallen, en het belang van beveiliging tegen een dreigingsmodel. Het raakt ook het ontwerpproces van protocollen aan [1](#page=1).
### 1.1 Definities
Een cryptografisch algoritme is een welomschreven transformatie die op een gegeven invoerwaarde een uitvoerwaarde produceert, met als doel bepaalde beveiligingsdoelstellingen te bereiken. Een cryptografisch protocol is een gedistribueerd algoritme dat de interacties tussen twee of meer entiteiten nauwkeurig beschrijft en eveneens tot doel heeft beveiligingsdoelstellingen te realiseren. Een cryptografisch schema is een reeks onderling gerelateerde cryptografische algoritmen en protocollen, ontworpen om specifieke beveiligingsdoelstellingen te vervullen [1](#page=1).
### 1.2 Aanvallen op cryptografische systemen
Er zijn twee hoofdtypen aanvallen mogelijk:
* **Passieve aanval:** Hierbij bemoeit de aanvaller zich niet met de uitvoering van de algoritmen en protocollen [1](#page=1).
* **Actieve aanval:** In dit geval kan de aanvaller de uitvoering beïnvloeden door berichten te verwijderen, te injecteren of te wijzigen. Bovendien kan de aanvaller corrupte entiteiten ertoe aanzetten af te wijken van hun voorgeschreven gedrag [1](#page=1).
Aanvallen kunnen worden uitgevoerd door zowel externe partijen als door interne gebruikers van het systeem [1](#page=1).
### 1.3 Beveiliging tegen een dreigingsmodel
Het doel van een protocol of schema is om veilig te zijn tegen een gespecificeerd dreigingsmodel, dat de capaciteiten, rekenkracht en het type aanvaller (actief of passief) definieert [1](#page=1).
> **Tip:** Het is cruciaal om het dreigingsmodel nauwkeurig te definiëren, aangezien beveiliging relatief is ten opzichte van de veronderstelde dreigingen.
Een voorbeeld hiervan is het Diffie-Hellman-protocol. De eenvoudige versie hiervan is niet veilig tegen een "man-in-the-middle" aanval, omdat authenticatie ontbreekt. Authenticatie vereist een of meer aanvullende stappen binnen het protocol [1](#page=1).
> **Tip:** Het identificeren van kwetsbaarheden in protocollen is een complexe taak.
### 1.4 Ontwerpproces van protocollen
Om het ontwerpproces van protocollen wetenschappelijker te maken, zijn er diverse formele benaderingen voorgesteld [1](#page=1).
> **Gedachte van Lars Knudsen:** "Als het aantoonbaar veilig is, dan is het waarschijnlijk niet veilig." [1](#page=1).
> **Gedachte van Christopher Strachey:** "Het is onmogelijk de gevolgen van slim te zijn te voorzien." [1](#page=1).
---
# Ontwerpprincipes en valkuilen van cryptografische protocollen
Protocollen zijn gestructureerde dialogen die bedoeld zijn om communicatiedoelen te bereiken, maar hun ontwerp is complex en bevat vele valkuilen, wat benadrukt waarom men zelf geen cryptografische protocollen moet ontwerpen [2](#page=2) [3](#page=3).
### 2.1 Voorbeelden van protocolontwerp
#### 2.1.1 Sleuteluitwisselingsprotocol zonder commutativiteit
Een praktisch voorbeeld dat de noodzaak van commutativiteit in een sleuteluitwisselingsprotocol illustreert, is het verzenden van een waardevol object naar Ivan, die in een repressief land woont [2](#page=2).
* **Protocolbeschrijving:**
1. Het object wordt in een doos geplaatst, een eigen slot wordt bevestigd en de doos wordt naar Ivan gestuurd [2](#page=2).
2. Ivan voegt zijn eigen slot toe en stuurt de doos terug [2](#page=2).
3. De oorspronkelijke afzender verwijdert zijn slot en stuurt de doos terug naar Ivan [2](#page=2).
4. Ivan verwijdert zijn slot en opent de doos [2](#page=2).
* **Commutativiteit:** Dit protocol werkt alleen als de gebruikte encryptieprocedures commutatief zijn, wat betekent dat de volgorde van het toepassen van de sleutels er niet toe doet. Wiskundig wordt dit uitgedrukt als $ \{ \{M\}_{k_1} \}_{k_2} = \{ \{M\}_{k_2} \}_{k_1} $ [2](#page=2).
* **Voorbeeld met XOR:** Als XOR wordt gebruikt als encryptieprocedure met sleutels van gelijke lengte als het bericht, commutatief is. Echter, de veiligheid hiervan hangt af van het sleutelgebruik. Als sleutels meer dan eens worden gebruikt, kan het bericht onveilig worden, zelfs als de lengte van bericht en sleutel gelijk is. Door drie opeenvolgende XOR-berichten te onderscheppen en met elkaar te XOR-en, kan het originele bericht worden verkregen zonder kennis van de sleutels. De berekening is als volgt:
$(M \oplus K_a) \oplus (M \oplus K_a \oplus K_b) \oplus (M \oplus K_b) = M \oplus K_a \oplus K_a \oplus K_b \oplus M \oplus M \oplus K_b = M \oplus (K_a \oplus K_a) \oplus (K_b \oplus K_b) \oplus M = M \oplus 0 \oplus 0 \oplus M = M \oplus M = 0$ (Dit is een vereenvoudiging en er is een fout in de oorspronkelijke tekst bij de analyse van de XOR-operatie, maar de kernboodschap is dat herhaald sleutelgebruik onveilig is.)
Een correctere analyse van de XOR-methode met meerdere ontvangers zou meer detail vereisen, maar het principe blijft: herhaald gebruik van sleutels in XOR-gebaseerde protocollen, zelfs met commutativiteit, kan leiden tot kwetsbaarheden [2](#page=2).
#### 2.1.2 Coin-flipping protocol
Een coin-flipping protocol over de telefoon is een klassiek voorbeeld dat de moeilijkheden in protocolontwerp illustreert, vooral tegen een oneerlijke partij [4](#page=4).
* **Basis scenario:** Alice heeft een keuze bit $b$ (0 of 1) en Bob raadt deze bit met zijn gok $c$ (0 of 1). Alice verifieert vervolgens of de gok correct was en geeft Bob de benodigde informatie om dit te verifiëren [4](#page=4).
* **Protocolbeschrijving (met éénrichtingsfuncties):**
1. **Alice:** Definieert een éénrichtingsfunctie $f$ en informeert Bob over het domein van $f$, genoteerd als $dom(f)$ [4](#page=4).
2. **Bob:** Kiest willekeurig twee waarden $r_1, r_2$ uit $dom(f)$ en stuurt deze naar Alice [4](#page=4).
3. **Alice:** Kiest willekeurig tussen $r_1$ en $r_2$ en stuurt $f(r_x)$ (één van de waarden $f(r_1)$ of $f(r_2)$) naar Bob [4](#page=4).
4. **Bob:** Raadt welke van de twee waarden hij heeft ontvangen ($r_1$ of $r_2$) [4](#page=4).
5. **Alice:** Kondigt aan of Bob's gok correct was. Ze stuurt ook de specificatie van $f$ (of een deel daarvan indien nodig) en de gekozen waarde $r_x$ [4](#page=4).
6. **Bob:** Verifieert dat de ontvangen $f(r_x)$ correct is en overeenkomt met een van de door Alice verwerkte waarden [4](#page=4).
* **Veiligheidsaspecten en risico's:**
* **Cheating door Alice:** Om te kunnen valsspelen, zou Alice een manier moeten vinden om voor willekeurig gekozen $r_1, r_2$ twee varianten van een éénrichtingsfunctie, $f_1$ en $f_2$, te construeren zodanig dat $f_1(r_1) = f_2(r_2)$. Afhankelijk van Bob's gok, kan Alice dan de juiste functie ($f_1$ of $f_2$) kiezen om een "bewijs" te leveren dat Bob's gok onjuist was [5](#page=5).
* **Gebruik van Keyed Hash Functies:** Een mogelijke keuze voor $f$ is een "keyed hash function" met een geheim dat alleen door Alice bekend is [5](#page=5).
### 2.2 Commitment schemes
Commitment schemes zijn een fundamenteel concept dat wordt gebruikt in protocollen zoals coin-flipping. Een commitment scheme bestaat uit twee protocollen: een commit-fase en een reveal-fase [5](#page=5).
* **Commit-fase:** De zender committeert zich aan een waarde $x$ door $C = \text{commit}(u, x)$ te berekenen en $C$ naar de ontvanger te sturen. De ontvanger bewaart $C$ voor later gebruik [5](#page=5).
* **Reveal-fase:** De zender opent de commitment $C = \text{commit}(u, x)$ door $u$ en $x$ naar de ontvanger te sturen. De ontvanger berekent $\text{commit}(u, x)$ en verifieert dat dit overeenkomt met de eerder ontvangen commitment [5](#page=5).
* **Beveiligingseisen voor Commitment Schemes:**
* **Binding (Binding):** Een aanvaller kan niet een andere waarde $u'$ genereren zodanig dat $C = \text{commit}(u, x) = \text{commit}(u', x')$ voor verschillende waarden van $x$ en $x'$. Dit garandeert dat de zender niet na de commitment van mening kan veranderen [5](#page=5).
* **Hiding (Verbergen):** De distributies geïnduceerd door $\text{commit}(u, 0)$ en $\text{commit}(u, 1)$ zijn ononderscheidbaar. Dit betekent dat de ontvanger geen informatie over de gecommitteerde waarde $x$ kan afleiden uit de commitment $C$ voordat de reveal-fase plaatsvindt [5](#page=5).
* **Aanvallen en Kanalen:** De bovenstaande beveiligingseisen dekken aanvallen door de zender of de ontvanger. Voor bescherming tegen een tussenpersoon is een geauthenticeerd kanaal vereist [5](#page=5).
* **Soorten Beveiliging:**
* **Information-theoretic security:** Zelfs een onbeperkte aanvaller kan het systeem niet verslaan. Een voorbeeld is de one-time pad [5](#page=5).
* **Computational security:** Een beperkte aanvaller (met rekenkracht) kan het systeem niet verslaan. De meeste realistische systemen bieden computationele beveiliging, vaak gebaseerd op de praktische onhaalbaarheid van brute-force aanvallen [5](#page=5).
* **Beperkingen van Commitment Schemes:** Een commitment protocol kan niet tegelijkertijd informatie-theoretische beveiliging bieden voor zowel hiding als binding. Als één van de eigenschappen informatie-theoretisch veilig is, moet de andere maximaal computationeel veilig zijn [5](#page=5).
> **Tip:** Het is cruciaal om te onthouden dat het ontwerpen van cryptografische protocollen extreem moeilijk is en vaak leidt tot subtiele kwetsbaarheden. Vertrouw op gevestigde en bewezen protocollen in plaats van zelf nieuwe te ontwikkelen [3](#page=3).
---
# Authenticatie- en sleuteluitwisselingsprotocollen
Dit onderwerp behandelt diverse methoden voor authenticatie en veilige sleuteluitwisseling tussen partijen, met speciale aandacht voor protocollen die gebruikmaken van wachtwoorden en hun beveiliging tegen aanvallen.
### 3.1 Authenticatiemethoden
Authenticatie is het proces waarbij een partij bewijst dat hij is wie hij beweert te zijn. Traditionele authenticatie steunt vaak op een authenticatietoken verkregen na een fysieke identificatie door een vertrouwde partij. Er zijn echter verschillende methoden om authenticatie te realiseren, elk met eigen voor- en nadelen [8](#page=8):
#### 3.1.1 Wachtwoordgebaseerde authenticatie
Bij wachtwoordgebaseerde systemen stuurt de gebruiker zijn wachtwoord rechtstreeks naar een authenticatieserver. Dit brengt het risico van "sniffing" met zich mee, waarbij een aanvaller het wachtwoord kan onderscheppen [8](#page=8).
#### 3.1.2 Hash-gebaseerde authenticatie
Een verbetering is het versturen van de hash van het wachtwoord in plaats van het wachtwoord zelf. Hoewel een sniffer het wachtwoord niet direct kan achterhalen, kan hij wel de hash onderscheppen en deze gebruiken in een "pass-the-hash" aanval [8](#page=8).
#### 3.1.3 One-way hash-ketens
Deze methode gebruikt een reeks van gehashte wachtwoorden. Gebruiker A genereert een geheim wachtwoord en spreekt af dit slechts een bepaald aantal keren te gebruiken (bijvoorbeeld 100 keer). Vervolgens genereert A de 100e hash van zijn wachtwoord en stuurt deze naar B, samen met het aantal keren (n=100). Tijdens een loginsessie houdt B bij hoe ver men is in de keten (bv. 70). A moet dan de 70e hash van zijn wachtwoord leveren, die B kan verifiëren door deze nog 100-70 = 30 keer te hashen en te controleren of het resultaat overeenkomt met de oorspronkelijke 100e hash. Een variant is waarbij B altijd de laatste hash bewaart, zodat de verificatie door B eenmalig hashen van de input is. Bij correcte implementatie en een voldoende veilige hash-functie, kan een aanvaller het wachtwoord niet achterhalen [8](#page=8).
#### 3.1.4 Andere authenticatiemethoden
Naast de hierboven genoemde methoden bestaan er ook:
* **Challenge-response protocollen**: Hierbij worden willekeurige uitdagingen gebruikt, wat sniffing en opname van communicatie bemoeilijkt. Voorbeelden hiervan zijn passkeys en protocollen die banken gebruiken [8](#page=8).
* **Zero-knowledge authenticatie**: Dit type authenticatie is complexer en wordt elders in het curriculum behandeld [9](#page=9).
### 3.2 Sleuteluitwisselingsprotocollen
Het uitwisselen van geheime sleutels over een onveilig netwerk is cruciaal voor het beveiligen van communicatie. Klassieke protocollen die gebruikerswachtwoorden gebruiken, zijn kwetsbaar voor wachtwoordgok-aanvallen [6](#page=6).
#### 3.2.1 Password-based Authenticated Key Exchange (PAKE)
PAKE-protocollen combineren asymmetrische (publiek sleutel) en symmetrische (geheim sleutel) cryptografie. Ze stellen twee partijen die een gemeenschappelijk wachtwoord delen in staat om vertrouwelijke en geauthenticeerde informatie uit te wisselen over een onzeker netwerk. Deze protocollen zijn beveiligd tegen actieve aanvallen en beschermen het wachtwoord tegen offline dictionary attacks [6](#page=6).
##### 3.2.1.1 Encrypted Key Exchange (EKE)
EKE is een specifieke vorm van PAKE. Het is in essentie een variant van Diffie-Hellman waarbij de publieke sleutelinformatie wordt uitgewisseld via symmetrische encryptie, gebaseerd op een gemeenschappelijk wachtwoord $\pi$ [6](#page=6).
> **Tip:** EKE combineert het gemak van een gedeeld wachtwoord met de beveiligingsmechanismen van Diffie-Hellman, waardoor een veilige sleuteluitwisseling mogelijk wordt.
##### 3.2.1.2 Alternatieven met een vertrouwde derde partij
Andere benaderingen, zoals Kerberos, maken gebruik van een continu online beschikbare vertrouwde derde partij. In dergelijke systemen authenticeren de partijen elkaar met behulp van deze server. Een voordeel ten opzichte van EKE is dat er geen noodzaak is om per sessie nieuwe publieke/private sleutelparen te genereren, maar wel dat de publieke sleutel van de vertrouwde server bekend moet zijn bij alle partijen [7](#page=7).
#### 3.2.2 Sleuteluitwisseling met een gedeelde symmetrische sleutel
Een eenvoudig sleuteluitwisselingsprotocol kan plaatsvinden wanneer twee partijen (A en B) een gedeelde symmetrische sleutel $K$ hebben. Ze kunnen willekeurige uitdagingen (challenges) naar elkaar sturen. Partij A stuurt een willekeurige uitdaging $R_A$ naar B, en B stuurt de versleutelde versie van $R_A$ samen met zijn eigen uitdaging $R_B$ terug naar A, verpakt als $E_K(R_A, R_B)$. Zodra ze deze informatie hebben ontvangen, kunnen ze aannemen dat de communicatie veilig is en de uitdagingen van de andere partij gebruiken voor verdere communicatie [10](#page=10).
> **Example:** Stel dat E (een aanvaller) A misleidt door te doen alsof hij B is en $K$ kent. E kan dan een nieuwe communicatie starten met A door de informatie die hij van A heeft ontvangen te herhalen, waardoor A denkt dat hij met B communiceert.
---
# Protocolaanvallen en analyse
Het analyseren van protocollen brengt aanzienlijke uitdagingen met zich mee, voornamelijk door de gedistribueerde en asynchrone aard van de systemen. Een cruciaal aspect bij protocolanalyse is het begrijpen van mogelijke aanvallen die een aanvaller kan uitvoeren [12](#page=12).
### 4.1 Uitdagingen bij protocolanalyse
Gedistribueerde systemen leiden ertoe dat protocollen inherent asynchroon zijn. Dit betekent dat, tenzij men de initiator is, men pas weet dat een protocol actief is wanneer het eerste bericht wordt ontvangen [12](#page=12).
### 4.2 Soorten protocolaanvallen
Er zijn verschillende veelvoorkomende soorten aanvallen die kunnen worden uitgevoerd op protocollen:
#### 4.2.1 Bekende sleutelaanval (Known-key attack)
Bij een bekende sleutelaanval verkrijgt een aanvaller kennis van eerder gebruikte cryptografische sleutels en gebruikt deze informatie op een kwaadaardige manier [12](#page=12).
#### 4.2.2 Replay-aanval
Een aanvaller neemt berichten op en speelt deze later opnieuw af om het protocol te misleiden of te ontwrichten [12](#page=12).
#### 4.2.3 Impersonatie-aanval
Hierbij neemt een aanvaller de identiteit aan van een van de legitieme partijen in een netwerk [12](#page=12).
#### 4.2.4 Man-in-the-Middle (MitM) aanval
Een aanvaller plaatst zichzelf tussen twee communicerende partijen en doet zich voor aan elke partij als de ander [12](#page=12).
> **Voorbeeld:** Een aanvaller onderschept communicatie tussen partij A en partij B. De aanvaller communiceert met A en doet zich voor als B, en communiceert tegelijkertijd met B en doet zich voor als A. Hierdoor kan de aanvaller alle berichten lezen, wijzigen of injecteren.
#### 4.2.5 Interleaving-aanval
Een aanvaller injecteert valse berichten in een protocoluitvoering om deze te ontwrichten of te ondermijnen [12](#page=12).
#### 4.2.6 Downgrade-aanval
Bij een downgrade-aanval wordt een hoogwaardige werkingsmodus, zoals een versleutelde verbinding met een sterker algoritme of grotere sleutellengte, verlaten ten gunste van een oudere, minder veilige modus. Dit gebeurt vaak omwille van achterwaartse compatibiliteit met oudere systemen [12](#page=12).
> **Tip:** Ontwerp nooit uw eigen protocol; protocolontwerp en -verificatie zijn significant complexer dan algoritmeontwerp. Indien u een probleem heeft, zoek dan naar een bestaand protocol dat dit probleem oplost in plaats van een eigen protocol te creëren of protocollen te combineren [11](#page=11).
#### 4.2.7 Reflectie-aanval (Reflection attack)
In een reflectie-aanval kan een aanvaller (E, die een geheime sleutel K niet kent) een andere partij (A) misleiden, waardoor A denkt dat E partij B is en K kent. Dit wordt bereikt doordat E een nieuwe communicatie start met A door informatie te herhalen die E van A heeft ontvangen [11](#page=11).
---
## Veelgemaakte fouten om te vermijden
- Bestudeer alle onderwerpen grondig voor examens
- Let op formules en belangrijke definities
- Oefen met de voorbeelden in elke sectie
- Memoriseer niet zonder de onderliggende concepten te begrijpen
Glossary
| Term | Definition |
|------|------------|
| Cryptografisch algoritme | Een goed gedefinieerde transformatie die, op basis van een invoerwaarde, een uitvoerwaarde produceert om bepaalde beveiligingsdoelstellingen te bereiken. |
| Cryptografisch protocol | Een gedistribueerd algoritme dat nauwkeurig de interacties tussen twee of meer entiteiten beschrijft, met als doel bepaalde beveiligingsdoelstellingen te bereiken. |
| Cryptografisch schema | Een reeks gerelateerde cryptografische algoritmen en cryptografische protocollen, ontworpen om specifieke beveiligingsdoelstellingen te realiseren. |
| Passieve aanval | Een aanvalsscenario waarbij een tegenstander niet interfereert met de uitvoering van de algoritmen en protocollen, maar louter observeert. |
| Actieve aanval | Een aanvalsscenario waarbij een tegenstander actief kan ingrijpen door berichten te verwijderen, in te voegen of te wijzigen, en zelfs corrupte entiteiten kan veroorzaken tot afwijking van hun voorgeschreven gedrag. |
| Dreigingsmodel | Een beschrijving van de capaciteiten, rekenkracht en mogelijke acties (actief/passief) van een aanvaller, waartegen een protocol of schema ontworpen wordt om veilig te zijn. |
| Man-in-the-middle aanval | Een type aanval waarbij een aanvaller zich tussen twee communicerende partijen plaatst en zich voordoet als de ene partij tegenover de andere, en vice versa, om de communicatie af te luisteren of te manipuleren. |
| Authenticatie | Het proces van het verifiëren van de identiteit van een gebruiker, apparaat of systeem, vaak door middel van wachtwoorden, biometrische gegevens of cryptografische tokens. |
| Commutativiteit | Een eigenschap van een bewerking (zoals encryptie) waarbij de volgorde van de operanden de uitkomst niet verandert. Bijvoorbeeld, $E_{k1}(E_{k2}(M)) = E_{k2}(E_{k1}(M))$. |
| One-way functie | Een functie die gemakkelijk te berekenen is in één richting, maar extreem moeilijk om om te keren (de inverse te vinden). |
| Commitment scheme (toezeggingsschema) | Een cryptografisch protocol dat bestaat uit een commit-fase, waarbij een partij zich bindt aan een waarde zonder deze prijs te geven, en een reveal-fase, waarbij de waarde wordt onthuld en geverifieerd. |
| Binding (in toezeggingsschema) | Een beveiligingseis van een toezeggingsschema die garandeert dat een aanvaller niet in staat is om twee verschillende waarden te committen met dezelfde toezegging. |
| Hiding (in toezeggingsschema) | Een beveiligingseis van een toezeggingsschema die garandeert dat de toezegging geen informatie prijsgeeft over de onderliggende waarde voordat deze wordt onthuld. |
| Computationele beveiliging | Een beveiligingsniveau waarbij een aanvaller met beperkte rekenkracht het systeem niet kan doorbreken binnen een redelijke tijdspanne. |
| Information-theoretic beveiliging | Een beveiligingsniveau waarbij zelfs een aanvaller met onbeperkte rekenkracht het systeem niet kan doorbreken. |
| PAKE (Password-based Authenticated Key Exchange) | Een klasse van cryptografische protocollen waarmee twee partijen die een gemeen wachtwoord delen, een veilige en geauthenticeerde sessiesleutel kunnen uitwisselen. |
| EKE (Encrypted Key Exchange) | Een specifiek type PAKE-protocol dat symmetrische encryptie gebruikt om publieke sle informations uit te wisselen, gebaseerd op een gedeeld wachtwoord. |
| Offline dictionary attack | Een aanvalsmethode waarbij een aanvaller een verzameling mogelijke wachtwoorden probeert tegenover een gehasht wachtwoord offline, buiten de directe interactie met de server. |
| Hash-functie | Een wiskundige functie die een invoer van willekeurige lengte omzet naar een uitvoer van vaste lengte, vaak gebruikt voor het creëren van digitale vingerafdrukken. |
| One-way hash chain | Een reeks opeenvolgende hashes van een initiële waarde, waarbij elke volgende hash gebaseerd is op de vorige, gebruikt voor authenticatie met beperkt gebruik. |
| Challenge-response authenticatie | Een authenticatiemechanisme waarbij de ene partij een willekeurige "challenge" stuurt en de andere partij hierop reageert met een correcte "response", wat de identiteit bewijst. |
| Replay attack | Een aanval waarbij een aanvaller onderschepte communicatieberichten op een later tijdstip opnieuw verzendt om zich voor te doen als een legitieme gebruiker of om een actie te herhalen. |
| Known-key attack | Een aanval waarbij een aanvaller kennis van eerder gebruikte cryptografische sleutels misbruikt om verdere beveiligingsmaatregelen te omzeilen. |
| Interleaving attack | Een aanval waarbij een aanvaller valse berichten in een protocoluitvoering injecteert om de normale werking te verstoren of te ondermijnen. |
| Downgrade attack | Een aanval waarbij een aanvaller een partij dwingt om een minder veilige communicatiemodus (bijvoorbeeld met een zwakkere encryptie of kortere sleutel) te gebruiken dan de hoogste beschikbare modus. |
Cover
public key crypto.pdf
Summary
# Misvattingen over encryptie met publieke sleutels
Dit gedeelte ontkracht veelvoorkomende onjuiste aannames over de beveiliging, toepasbaarheid en sleuteldistributie van publieke sleutel encryptie [1](#page=1).
### 1.1 Veiligheid van publieke sleutel encryptie versus symmetrische encryptie
Een wijdverbreide misvatting is dat publieke sleutel encryptie inherent veiliger is tegen cryptanalyse dan symmetrische encryptie. De werkelijkheid is dat de veiligheid van elk encryptieschema hoofdzakelijk afhangt van twee factoren: de lengte van de sleutel en de rekenkundige inspanning die nodig is om de cipher te breken. Er is fundamenteel geen principe dat één type encryptie (symmetrisch of publieke sleutel) superieur maakt aan het ander wat betreft weerstand tegen cryptanalyse [1](#page=1).
> **Tip:** De effectiviteit van encryptie is direct gerelateerd aan sleutellengte en rekenkracht, niet aan het type sleutel (symmetrisch of asymmetrisch).
### 1.2 Publieke sleutel encryptie als vervanging voor symmetrische encryptie
Een tweede misvatting is dat publieke sleutel encryptie een universeel toepasbare technologie is die symmetrische encryptie overbodig heeft gemaakt. In tegendeel, de huidige publieke sleutel encryptieschema's brengen aanzienlijke rekenkundige overhead met zich mee. Hierdoor is er geen vooruitzicht dat symmetrische encryptie op korte termijn zal verdwijnen. Een van de grondleggers van publieke sleutel encryptie heeft aangegeven dat het gebruik van publieke sleutel cryptografie beperkt blijft tot sleutelbeheer en digitale handtekeningen, wat breed geaccepteerd is [1](#page=1).
> **Voorbeeld:** Symmetrische encryptie wordt nog steeds veelvuldig gebruikt voor het versleutelen van grote hoeveelheden data (bv. bestanden, databases) vanwege de snelheid, terwijl publieke sleutel encryptie efficiënter is voor het veilig uitwisselen van de symmetrische sleutel die hiervoor nodig is.
### 1.3 Eenvoud van sleuteldistributie bij publieke sleutel encryptie
Een derde misvatting betreft de vermeende eenvoud van sleuteldistributie bij het gebruik van publieke sleutel encryptie, in vergelijking met de omslachtige procedures van sleuteluitwisselingscentra (Key Distribution Centers - KDC) die nodig zijn voor symmetrische encryptie. De realiteit is dat ook bij publieke sleutel encryptie een vorm van protocol nodig is, vaak met de betrokkenheid van een centrale agent. De procedures die hierbij komen kijken, zijn niet eenvoudiger of efficiënter dan de methoden voor symmetrische encryptie [1](#page=1).
> **Tip:** Zowel symmetrische als publieke sleutel cryptografie vereisen zorgvuldige protocollen voor sleutelbeheer en -distributie om effectief te zijn.
---
# Ontwikkeling en kernconcepten van publieke sleutel cryptografie
Publieke sleutel cryptografie is ontstaan uit de noodzaak om de fundamentele problemen van sleuteldistributie en digitale handtekeningen op te lossen binnen traditionele (symmetrische) encryptiesystemen [3](#page=3).
### 2.1 Problemen met symmetrische encryptie
Symmetrische encryptie, waarbij dezelfde sleutel wordt gebruikt voor zowel encryptie als decryptie, kampt met twee grote uitdagingen:
* **Sleuteldistributie:** Het veilig distribueren van de geheime sleutel tussen communicerende partijen is een significant probleem. Dit vereist ofwel dat partijen al een gedeelde sleutel hebben die op een veilige manier is overgedragen, ofwel het gebruik van een Key Distribution Center (KDC). Het laatste ondermijnt echter het principe van totale geheimhouding, omdat de KDC een potentieel zwakke schakel is die gecompromitteerd kan worden [3](#page=3).
* **Digitale handtekeningen:** De behoefte aan een methode om de authenticiteit en integriteit van digitale berichten te waarborgen, vergelijkbaar met handtekeningen op papieren documenten. Dit omvat het bewijzen dat een bericht afkomstig is van de geclaimde afzender en dat het niet tussentijds is gewijzigd [3](#page=3).
### 2.2 De doorbraak van publieke sleutel cryptografie
In 1976 ontwikkelden Whitfield Diffie en Martin Hellman een revolutionaire methode die zowel sleuteldistributie als digitale handtekeningen adresseerde, en radicaal verschilde van eerdere cryptografische benaderingen [4](#page=4).
#### 2.2.1 Kenmerken van asymmetrische algoritmen
Asymmetrische algoritmen, ook wel publieke sleutel cryptografie genoemd, maken gebruik van twee gerelateerde sleutels: een publieke sleutel voor encryptie en een private sleutel voor decryptie (of andersom). De belangrijkste kenmerken zijn [4](#page=4):
* **Computationele onhaalbaarheid voor de aanvaller:**
* Het is computationeel zeer moeilijk om de private sleutel te achterhalen wanneer men de publieke sleutel kent [4](#page=4).
* Het is computationeel zeer moeilijk om het originele bericht te reconstrueren uit de cijfertekst, zelfs met kennis van de publieke sleutel [4](#page=4).
* **Eenvoudige sleutelgeneratie:** Het is computationeel eenvoudig voor een partij om een paar van publieke en private sleutels te genereren [4](#page=4).
* **Wisselwerking tussen sleutels (sommige algoritmen):** Bij bepaalde algoritmen, zoals RSA, kan een van de sleutels worden gebruikt voor encryptie en de andere voor decryptie [4](#page=4).
#### 2.2.2 Ingrediënten van een publieke sleutel encryptiesysteem
Een publieke sleutel encryptiesysteem bestaat uit de volgende zes elementen [4](#page=4):
1. **Plaintext:** De leesbare oorspronkelijke boodschap of data.
2. **Encryptiealgoritme:** Het algoritme dat transformaties toepast op de plaintext.
3. **Publieke en private sleutels:** Een paar sleutels dat zodanig is geselecteerd dat de ene voor encryptie en de andere voor decryptie wordt gebruikt. De precieze transformaties zijn afhankelijk van welke sleutel als input wordt gebruikt [4](#page=4).
4. **Ciphertext:** De versleutelde, onleesbare output die afhankelijk is van de plaintext en de gebruikte sleutel. Verschillende sleutels produceren verschillende ciphertexts voor dezelfde plaintext [4](#page=4).
5. **Decryptiealgoritme:** Het algoritme dat de ciphertext en de bijpassende sleutel accepteert om de oorspronkelijke plaintext te reconstrueren [4](#page=4).
### 2.3 De werking van publieke sleutel cryptografie
De fundamentele stappen in een publieke sleutel cryptosysteem zijn [5](#page=5):
1. **Sleutelgeneratie:** Elke gebruiker genereert een paar van sleutels (publiek en privé).
2. **Sleutelpublicatie:** Elke gebruiker plaatst zijn publieke sleutel in een publiek register of toegankelijk bestand. De bijbehorende private sleutel wordt geheim gehouden. Gebruikers verzamelen de publieke sleutels van anderen [5](#page=5).
3. **Vertrouwelijke communicatie (geheimhouding):**
* Om een vertrouwelijke boodschap naar Alice te sturen, versleutelt Bob de boodschap met Alice's publieke sleutel [5](#page=5).
* Alice decrypt de boodschap met haar eigen private sleutel. Alleen Alice kan de boodschap ontcijferen, aangezien zij de enige is die haar private sleutel bezit [5](#page=5).
4. **Authenticatie (digitale handtekening):**
* Om te bewijzen dat hij de afzender is, versleutelt Bob de boodschap met zijn *eigen* private sleutel [5](#page=5).
* Iedereen, inclusief Alice, kan vervolgens de boodschap ontsleutelen met Bob's publieke sleutel. Als de ontsleuteling slaagt, is bewezen dat Bob de afzender is [5](#page=5).
Met deze methode zijn private sleutels nooit nodig om te distribueren, wat de veiligheid vergroot, zolang de private sleutel geheim blijft [5](#page=5).
> **Tip:** Publieke sleutel cryptografie dient twee hoofddoelen: geheimhouding (confidentialiteit) en authenticatie [5](#page=5).
#### 2.3.1 Geheimhouding (confidentialiteit)
Wanneer bron A een bericht X naar bestemming B wil sturen en geheimhouding wenst, genereert B een sleutelpaar (PUb, PRb), waarbij PRb geheim is en PUb publiek. A versleutelt het bericht X met Alice's publieke sleutel PUb, resulterend in ciphertext Y: $Y = E(PU_b, X)$. Alleen B kan Y ontcijferen met zijn private sleutel PRb, omdat hij de enige is die deze bezit: $X = D(PR_b, Y)$ [5](#page=5).
#### 2.3.2 Authenticatie (digitale handtekening)
Voor authenticatie bereidt A een bericht X voor en versleutelt dit met zijn *eigen* private sleutel PRa, wat resulteert in ciphertext Y: $Y = E(PR_a, X)$. B kan deze ciphertext vervolgens ontsleutelen met A's publieke sleutel PUa: $X = D(PU_a, Y)$. Omdat alleen A zijn private sleutel bezit, garandeert deze bewerking dat het bericht van A afkomstig is. Bovendien is het onmogelijk om het bericht te wijzigen zonder toegang tot A's private sleutel, wat zorgt voor data-integriteit [6](#page=6).
> **Belangrijk:** De authenticatiemethode via versleuteling met de private sleutel biedt *geen* geheimhouding. Het bericht is weliswaar authentiek, maar kan door iedereen met de publieke sleutel van de afzender worden gelezen [6](#page=6).
#### 2.3.3 Combinatie van geheimhouding en authenticatie
Beide functies (geheimhouding en authenticatie) kunnen gecombineerd worden door een dubbele encryptie [6](#page=6):
1. Versleutel het bericht eerst met de private sleutel van de afzender (voor authenticatie) [6](#page=6).
2. Versleutel het resultaat vervolgens met de publieke sleutel van de ontvanger (voor geheimhouding) [6](#page=6).
Alleen de beoogde ontvanger, die beschikt over de bijbehorende private sleutel, kan het uiteindelijke ciphertext ontcijferen. Het nadeel is dat het publieke sleutelalgoritme hierdoor vier keer moet worden uitgevoerd in plaats van twee [6](#page=6).
> **Tip:** De ontwikkeling van praktische publieke sleutel cryptosystemen is gebaseerd op de ontdekking van geschikte "trap-door one-way functions" – functies die gemakkelijk in één richting te berekenen zijn, maar computationeel onhaalbaar om om te keren zonder aanvullende geheime informatie [6](#page=6).
---
# Toepassingen en algoritmen van publieke sleutel cryptografie
Publieke sleutel cryptosystemen maken gebruik van twee sleutels (een publieke en een private) en kunnen worden ingedeeld in drie hoofdcategorieën: encryptie/decryptie, digitale handtekeningen en sleuteluitwisseling [7](#page=7).
### 3.1 Hoofdcategorieën van publieke sleutel cryptosystemen
#### 3.1.1 Encryptie/decryptie
Bij deze toepassing versleutelt de zender een bericht met de publieke sleutel van de ontvanger [7](#page=7).
#### 3.1.2 Digitale handtekeningen
De zender "ondertekent" een bericht door een cryptografisch algoritme toe te passen op het bericht of een functie daarvan, met behulp van zijn eigen private sleutel [7](#page=7).
#### 3.1.3 Sleuteluitwisseling
Twee partijen werken samen om een sessiesleutel uit te wisselen, waarbij de private sleutel(s) van een of beide partijen betrokken kunnen zijn [7](#page=7).
### 3.2 Algoritmen en hun toepassingen
Verschillende algoritmen zijn geschikt voor één, twee of alle drie de bovengenoemde toepassingen. De volgende tabel geeft een overzicht (status per oktober 2025) [7](#page=7) [8](#page=8):
| Categorie | Algoritme (Klassiek) | Algoritme (Post-kwantum) |
|---|---|---|
| **Encryptie/decryptie** | RSA-OAEP, Elgamal, ECIES, (Elliptische) Elgamal | CrystalS-Kyber (ML-KEM) | [8](#page=8).
| **Digitale handtekening** | RSA-PSS, RSA, Elgamal, DSA | CrystalS-Dilithium (ML-DSA), Falcon (FN-DSA), Sphincs+ (SLH-DSA) | [8](#page=8).
| **Sleuteluitwisseling** | Diffie-Hellman, Elliptische Diffie-Hellman, DLIES | CrystalS-Kyber (ML-KEM), HQC | [8](#page=8).
> **Tip:** Hoewel pure asymmetrische encryptie van standaardberichten zelden wordt gebruikt, is het asymmetrisch versleutelen van een kort bericht of sleutel als onderdeel van een protocol een veelvoorkomende praktijk [8](#page=8).
#### 3.2.1 Algoritmen gebaseerd op factorisatie en discrete logaritmen
* **RSA:** Geschikt voor encryptie/decryptie en digitale handtekeningen [7](#page=7).
* **Elgamal:** Kan worden gebruikt voor encryptie/decryptie, digitale handtekeningen en sleuteluitwisseling [7](#page=7).
* **Diffie-Hellman:** Specifiek ontworpen voor sleuteluitwisseling [7](#page=7).
#### 3.2.2 Algoritmen gebaseerd op elliptische krommen
* **Elliptische curve cryptografie (ECC):**
* **ECIES** (Elliptic Curve Integrated Encryption Scheme): Voor encryptie/decryptie [7](#page=7).
* **ECDSA** (Elliptic Curve Digital Signature Algorithm) en **EdDSA** (Edwards-curve Digital Signature Algorithm): Voor digitale handtekeningen [7](#page=7).
* **Elliptische Diffie-Hellman:** Voor sleuteluitwisseling [7](#page=7).
#### 3.2.3 Post-kwantum cryptografie (PQC)
De standaardisatie van PQC-algoritmen is nog gaande, waarbij de volgende zijn geselecteerd voor standaardisatie [8](#page=8):
* **Sleuteluitwisseling:**
* CrystalS-Kyber (ML-KEM) is een sleuteluitwisseling algoritme dat ook gebruikt kan worden om encryptie/decryptie te realiseren [8](#page=8).
* HQC (met verwachte standaardisatie in 2027) [8](#page=8).
* **Digitale handtekening:**
* CrystalS-Dilithium (ML-DSA) [8](#page=8).
* Sphincs+ (SLH-DSA) [7](#page=7).
* Falcon (FN-DSA) (verwachte standaardisatie laat 2026) [8](#page=8).
> **Opmerking:** Post-kwantum cryptografie-competities hebben er doorgaans voor gekozen om encryptie/decryptie niet expliciet op te nemen als een aparte categorie voor PQC, omdat de geselecteerde sleuteluitwisselingsalgoritmen dit effect kunnen bereiken [8](#page=8).
> **Tip:** Algoritmen die op het moment van de opname van de cursus (oktober 2025) nog in de race waren maar niet geselecteerd zijn, zijn onder andere BIKE en Classic McEliece. HQC is uiteindelijk wel geselecteerd [8](#page=8).
---
## Veelgemaakte fouten om te vermijden
- Bestudeer alle onderwerpen grondig voor examens
- Let op formules en belangrijke definities
- Oefen met de voorbeelden in elke sectie
- Memoriseer niet zonder de onderliggende concepten te begrijpen
Glossary
| Term | Definition |
|------|------------|
| Publieke sleutel encryptie | Een cryptografisch systeem waarbij twee verschillende, maar wiskundig gerelateerde sleutels worden gebruikt: een publieke sleutel voor encryptie en een private sleutel voor decryptie. Dit maakt veilige communicatie mogelijk zonder vooraf gedeelde geheimen. |
| Symmetrische encryptie | Een cryptografisch systeem dat dezelfde geheime sleutel gebruikt voor zowel encryptie als decryptie. Dit vereist een veilige methode om de sleutel vooraf te distribueren tussen communicerende partijen. |
| Cryptanalyse | Het proces van het analyseren van een cryptografisch systeem met als doel het kraken van de encryptie zonder kennis van de geheime sleutel. De veiligheid van een encryptieschema hangt af van de sleutellengte en de rekenkracht die nodig is om de cipher te breken. |
| Sleuteldistributie | Het proces waarbij cryptografische sleutels veilig worden uitgewisseld tussen partijen die willen communiceren. Bij symmetrische encryptie is dit vaak een complex proces, terwijl publieke sleutel encryptie hier oplossingen voor biedt. |
| KDC (Key Distribution Center) | Een sleuteldistributiecentrum is een beveiligde server die wordt gebruikt om cryptografische sleutels te genereren en te distribueren naar gebruikers binnen een netwerk, met name voor symmetrische encryptie. |
| Digitale handtekening | Een cryptografische methode om de authenticiteit en integriteit van een digitale boodschap te waarborgen. De zender versleutelt een deel of de gehele boodschap met zijn private sleutel, wat door anderen geverifieerd kan worden met de publieke sleutel van de zender. |
| Asymmetrische algoritmen | Algoritmen die gebaseerd zijn op het gebruik van een paar van wiskundig gerelateerde sleutels: een publieke sleutel voor encryptie en een private sleutel voor decryptie. De veiligheid berust op de computationele onhaalbaarheid om de private sleutel af te leiden uit de publieke sleutel. |
| Plaintext | De oorspronkelijke, leesbare boodschap of data die wordt ingevoerd in een encryptiealgoritme. Dit is de informatie die beveiligd moet worden. |
| Ciphertext | De versleutelde, onleesbare output van een encryptiealgoritme. Deze data kan alleen weer worden omgezet naar plaintext met de juiste decryptiesleutel. |
| Trap-door one-way function | Een wiskundige functie die gemakkelijk in één richting te berekenen is, maar computationeel zeer moeilijk omkeerbaar is, tenzij bepaalde extra informatie (de "trap-door") bekend is. Dit concept is essentieel voor het creëren van publieke sleutel cryptosystemen. |
| Post-kwantum cryptografie | Een verzameling cryptografische algoritmen die ontworpen zijn om bestand te zijn tegen aanvallen van zowel klassieke als kwantumcomputers. Dit is een actief onderzoeksgebied vanwege de potentiële dreiging van kwantumcomputers voor bestaande cryptografische systemen. |
Cover
RA3-DIGI GM.pdf
Summary
# Introducción a los sistemas basados en Cloud/Nube
La computación en la nube es un modelo que permite acceder a recursos tecnológicos a través de Internet, eliminando la necesidad de infraestructura física propia y permitiendo el pago por uso [2](#page=2).
### 1.1 Definición de computación en la nube
La computación en la nube, o Cloud Computing, se define como un modelo para acceder a recursos tecnológicos, tales como almacenamiento, servidores, bases de datos o software, mediante Internet, sin requerir la posesión de una infraestructura física propia. Se asemeja a una "biblioteca tecnológica" a la que se puede acceder desde cualquier lugar y momento, pagando únicamente por lo consumido [2](#page=2).
#### 1.1.1 Características fundamentales
Los sistemas en la nube se caracterizan por ofrecer recursos bajo demanda generalmente operando bajo un modelo de pago por suscripción o pago por uso. La infraestructura subyacente suele estar virtualizada y compartida entre múltiples clientes, aunque lógicamente segmentada [4](#page=4).
### 1.2 Evolución de la nube
La idea de la computación en la nube se remonta a la década de 1960, pero su materialización efectiva ocurrió a finales de los años 90 y principios de los 2000. Empresas pioneras como Salesforce allanaron el camino, siendo posteriormente Amazon con AWS un impulsoador clave del modelo. Actualmente, la nube constituye una infraestructura global que soporta desde redes sociales hasta sistemas de inteligencia artificial [3](#page=3).
### 1.3 Importancia en la era digital
En la era digital, la nube es crucial para la adaptabilidad rápida de las empresas. Ofrece [5](#page=5):
* **Escalabilidad:** Permite aumentar o disminuir recursos de manera ágil [5](#page=5).
* **Flexibilidad:** Facilita el trabajo desde cualquier dispositivo conectado [5](#page=5).
* **Ahorro de costes:** Elimina la necesidad de adquirir y mantener servidores propios [5](#page=5).
* **Innovación:** Proporciona acceso a tecnologías avanzadas como Big Data, IA o IoT [5](#page=5).
> **Tip:** La nube ha democratizado la tecnología, permitiendo que pequeñas empresas compitan con grandes corporaciones al igualar el acceso a herramientas tecnológicas avanzadas [5](#page=5).
### 1.4 Ejemplos prácticos
#### 1.4.1 Ejemplo cotidiano
Un ejemplo sencillo es el uso de servicios como Google Drive o OneDrive para almacenar y acceder a documentos desde diferentes dispositivos (móvil, PC) sin necesidad de un dispositivo de almacenamiento físico como un USB [6](#page=6).
#### 1.4.2 Ejemplo empresarial
Un caso típico en el ámbito empresarial es el uso de un CRM (Customer Relationship Management) en la nube. Esto permite que los equipos de ventas y atención al cliente trabajen sobre la misma base de datos, asegurando que esté actualizada y sea accesible desde cualquier sede de la empresa [6](#page=6).
---
# Desafíos y riesgos de la nube
El uso de la nube, a pesar de sus beneficios, presenta una serie de desafíos y riesgos inherentes que las organizaciones deben considerar cuidadosamente antes y durante su adopción. Estos inconvenientes abarcan desde limitaciones técnicas y económicas hasta cuestiones de seguridad y control [7](#page=7) [8](#page=8).
### 2.1 Desafíos de escalabilidad y dependencia
Una de las desventajas significativas de la nube es la **escalabilidad limitada por políticas y capacidad del proveedor**. Aunque la nube se promociona por su elasticidad, en la práctica, un proveedor puede no ser capaz de ampliar recursos tan rápido como la demanda requiere, o puede imponer sobrecostes elevados por picos de uso inesperados. Por ejemplo, durante una campaña de rebajas, una empresa podría necesitar más servidores de repente, pero el proveedor podría tardar en aprovisionarlos o cobrar precios excesivos [7](#page=7).
La **dependencia de la conectividad a internet** es otro riesgo crítico. Si la conexión se interrumpe, los servicios y datos almacenados en la nube se vuelven inaccesibles, lo que puede paralizar operaciones. Una asesoría, por ejemplo, no podría acceder a facturas, nóminas o datos de clientes si su conexión a internet falla [7](#page=7).
### 2.2 Seguridad y privacidad
Las **cuestiones de seguridad y privacidad** son preocupaciones primordiales. Los accesos no autorizados pueden comprometer datos personales de clientes, exponiendo a las empresas a sanciones legales significativas. La gestión y el tratamiento de datos en entornos de nube requieren una atención rigurosa para prevenir brechas de seguridad y asegurar el cumplimiento normativo [7](#page=7).
### 2.3 Costes y dependencia del proveedor
Los **costes variables y "ocultos"** pueden hacer que el servicio en la nube sea más caro de lo esperado. Más allá de la tarifa base, los costes pueden incrementarse por transferencias de datos, copias de seguridad, o la necesidad de soporte técnico especializado. El servicio puede parecer económico inicialmente, pero las tarifas adicionales pueden sumar un coste considerable [8](#page=8).
La **dependencia del proveedor**, conocida como "lock-in", es un riesgo a largo plazo. Las aplicaciones suelen diseñarse utilizando herramientas y servicios específicos de un proveedor de nube particular, lo que dificulta enormemente las migraciones a otros proveedores. Cambiar de plataforma puede ser un proceso complejo y costoso [8](#page=8).
### 2.4 Limitaciones de personalización y control
Existen **limitaciones de personalización y control** inherentes a muchos servicios de nube. El software proporcionado puede no adaptarse completamente a los procesos internos específicos de una empresa, obligándola a modificar sus flujos de trabajo en lugar de que la tecnología se ajuste a sus necesidades [8](#page=8).
### 2.5 Impactos ambientales y éticos
Finalmente, los **impactos ambientales y éticos** asociados a la centralización y la demanda creciente de servicios en la nube son cada vez más relevantes. El uso intensivo de la nube impulsa un aumento considerable en el consumo energético y, consecuentemente, incrementa la huella de carbono de los centros de datos [8](#page=8).
> **Tip:** Es fundamental realizar una evaluación exhaustiva de estos riesgos antes de migrar a la nube, comparando las ofertas de diferentes proveedores y considerando la necesidad de soluciones híbridas o multicloud para mitigar la dependencia.
> **Example:** Una empresa que maneja datos altamente sensibles de clientes podría optar por mantener parte de su infraestructura on-premise mientras utiliza la nube para cargas de trabajo menos críticas, combinando así seguridad y escalabilidad.
---
# Tipos de nube y modelos de servicio
Este tema explora las distintas clasificaciones de la nube según su arquitectura y propiedad, así como los modelos de servicio que definen la forma en que se consumen los recursos y la funcionalidad.
### 3.1 Tipos de nube
La nube se clasifica principalmente en cuatro tipos, cada uno con características, ventajas y desventajas específicas [9](#page=9).
#### 3.1.1 Nube pública
Una nube pública es ofrecida por un proveedor externo y permite acceder a recursos compartidos a través de Internet. La principal ventaja es la rapidez en su puesta en marcha y su alta escalabilidad. Sin embargo, un inconveniente típico es el menor control directo que el usuario tiene sobre la infraestructura subyacente [10](#page=10) [9](#page=9).
> **Ejemplo:** Una pequeña o mediana empresa (pyme) que utiliza los servidores de un proveedor cloud para alojar su página web y su sistema de correo corporativo [10](#page=10).
#### 3.1.2 Nube privada
En una nube privada, la infraestructura es utilizada exclusivamente por una sola organización. Esta infraestructura puede estar ubicada en el centro de datos (CPD) de la organización o ser gestionada de forma privada por un tercero. Las ventajas principales son un mayor control, seguridad y gobernanza de los datos. El inconveniente más común es su mayor coste y una gestión más compleja en comparación con la nube pública [10](#page=10) [9](#page=9).
> **Ejemplo:** Un hospital que opta por mantener sus sistemas críticos en una nube privada para cumplir con estrictas normativas de privacidad y control de datos [10](#page=10).
#### 3.1.3 Nube híbrida
Una nube híbrida combina el uso de dos tipos de nube simultáneamente: una nube privada y una nube pública. Generalmente, se emplea la nube privada para alojar los datos y aplicaciones más sensibles, mientras que la nube pública se utiliza para aquellas cargas de trabajo que requieren mayor flexibilidad y escalabilidad. La principal ventaja de este modelo es que permite lograr un equilibrio entre la flexibilidad y el cumplimiento normativo/seguridad [11](#page=11).
> **Ejemplo:** Una empresa podría mantener datos confidenciales de clientes y nóminas en su nube privada, y al mismo tiempo, utilizar la nube pública para alojar su sitio web y lanzar campañas de marketing [11](#page=11).
#### 3.1.4 Multinube
El modelo multinube implica que una organización utiliza varios proveedores de nube distintos al mismo tiempo, ya sean públicos, privados o una combinación de ambos, dentro de una misma arquitectura. El objetivo habitual de adoptar una estrategia multinube es evitar la dependencia de un único proveedor, optimizar los costes de servicio y mejorar la resiliencia del sistema [11](#page=11).
> **Ejemplo:** Una empresa podría usar un proveedor de nube para sus servicios de correo electrónico, otro distinto para sus servidores de aplicaciones y un tercer proveedor para gestionar sus copias de seguridad [11](#page=11).
### 3.2 Niveles o modelos de servicio en la nube
La nube se organiza en diferentes niveles o modelos de servicio, definidos por el grado de control que el usuario final mantiene sobre la infraestructura y el software. Los modelos principales son IaaS, PaaS, SaaS y FaaS [12](#page=12).
#### 3.2.1 IaaS — Infraestructura como Servicio
El modelo IaaS proporciona recursos de infraestructura virtualizados, como servidores, almacenamiento, redes y máquinas virtuales. Con IaaS, el usuario tiene control sobre el sistema operativo y las aplicaciones que instala, mientras que el proveedor se encarga de la gestión del hardware subyacente [13](#page=13).
> **Ejemplo sencillo:** Se compara a IaaS con alquilar un "ordenador grande" en Internet, sobre el cual el usuario puede instalar todo el software que necesite [13](#page=13).
**Ventajas:**
* Alta flexibilidad y escalabilidad [13](#page=13).
* Coste reducido en comparación con la adquisición de hardware propio [13](#page=13).
* Ideal para alojar sitios web, entornos de pruebas, desarrollo o sistemas a medida [13](#page=13).
> **Ejemplos cotidianos:**
> * Montar un servidor de juegos como Minecraft alquilando una máquina virtual en la nube en lugar de tenerlo en casa. El usuario instala y configura el juego a su gusto [14](#page=14).
> * Almacenar grandes volúmenes de archivos (documentos, videos) alquilando espacio en la nube, que se puede ampliar fácilmente, pagando solo por el uso [14](#page=14).
#### 3.2.2 PaaS — Plataforma como Servicio
El modelo PaaS ofrece un entorno de desarrollo completo y preconfigurado, que incluye sistemas operativos, bases de datos y herramientas listas para usar. El proveedor gestiona la infraestructura subyacente, permitiendo al usuario centrarse exclusivamente en la creación y el despliegue de aplicaciones [15](#page=15).
> **Ejemplo sencillo:** Se asemeja a trabajar en un taller completamente equipado donde el único foco es construir el proyecto sin preocuparse por la instalación o mantenimiento de las herramientas [15](#page=15).
**Ventajas:**
* Acelera significativamente el ciclo de desarrollo de software [15](#page=15).
* Mejora la colaboración entre equipos de desarrollo [15](#page=15).
* Automatiza procesos de despliegue y pruebas [15](#page=15).
> **Ejemplos cotidianos:**
> * Crear una aplicación web sencilla utilizando un servicio PaaS donde el entorno de programación y las bases de datos ya están preparados, evitando la necesidad de instalaciones manuales. El proveedor ofrece el entorno listo, y el desarrollador se dedica a crear la aplicación [16](#page=16).
#### 3.2.3 SaaS — Software como Servicio
El modelo SaaS proporciona aplicaciones completas y listas para usar, accesibles directamente a través de un navegador web. Estas aplicaciones no requieren instalación por parte del usuario, y el proveedor se encarga de su actualización, mantenimiento y seguridad [17](#page=17).
**Ejemplos:** Google Workspace, Office 365, Zoom [17](#page=17).
**Ventajas:**
* Extremadamente fácil de usar e implementar [17](#page=17).
* Accesible desde cualquier dispositivo con conexión a Internet [17](#page=17).
* Ofrece costes predecibles, generalmente mediante modelos de suscripción [17](#page=17).
> **Ejemplos cotidianos:**
> * Utilizar Google Docs para redactar documentos sin necesidad de instalar Microsoft Word [18](#page=18).
> * Emplear Canva para diseñar presentaciones gráficas sin descargar ni instalar software de diseño [18](#page=18).
> * Jugar a videojuegos en la nube (por ejemplo, GeForce Now) sin poseer un equipo de juego de alta gama [18](#page=18).
> * Acceder a servicios como Gmail, Microsoft Teams o Google Classroom directamente desde el navegador, sin instalaciones [18](#page=18).
#### 3.2.4 FaaS — Funciones como Servicio
FaaS, también conocido como computación sin servidor (serverless), permite ejecutar pequeños fragmentos de código (funciones) que se activan automáticamente ante la ocurrencia de un evento específico [19](#page=19).
> **Ejemplo:** Al subir una imagen a un sistema, una función FaaS se ejecuta automáticamente para redimensionarla [19](#page=19).
**Ventajas:**
* Se paga únicamente por el tiempo de ejecución de las funciones [19](#page=19).
* No se requiere la gestión de servidores [19](#page=19).
* Ofrece escalabilidad automática [19](#page=19).
> **Ejemplos cotidianos:**
> * **Enviar un correo automáticamente:** Cuando un nuevo usuario se registra en una página web, se puede activar una función en la nube para enviar un correo de bienvenida. No hay un servidor permanentemente activo, la función se ejecuta solo en el momento necesario [20](#page=20).
> * **Reducir el tamaño de una foto:** Cada vez que un estudiante sube una fotografía a una aplicación escolar, una función FaaS se encarga de comprimirla o redimensionarla automáticamente. El usuario escribe pequeñas funciones que la nube ejecuta únicamente cuando son requeridas [20](#page=20).
---
# Funciones principales y tecnologías emergentes de la nube
La nube ofrece una amplia gama de servicios que van más allá del simple almacenamiento, facilitando la digitalización y habilitando nuevas formas de procesamiento y colaboración, mientras que tecnologías emergentes como Edge, Fog y Mist Computing acercan la computación a la fuente de los datos.
### 4.1 Funciones principales de la nube
La nube no solo aloja datos, sino que proporciona multitud de servicios que facilitan la digitalización de procesos y la gestión de la información [21](#page=21).
#### 4.1.1 Almacenamiento y gestión de datos
Permite guardar grandes volúmenes de información de forma segura y accesible desde cualquier lugar. Incluye herramientas esenciales para [21](#page=21):
* Copias de seguridad [21](#page=21).
* Recuperación ante desastres [21](#page=21).
* Organización y búsqueda avanzada de datos [21](#page=21).
#### 4.1.2 Procesamiento, análisis, Big Data e IA
La nube proporciona potencia de cálculo prácticamente ilimitada para analizar datos, entrenar modelos de inteligencia artificial o ejecutar aplicaciones demandantes. Sus beneficios clave en este ámbito son [22](#page=22):
* **Escalabilidad:** Los recursos de procesamiento pueden crecer o decrecer según la carga de trabajo [22](#page=22).
* **Pago por uso:** Se paga únicamente por el tiempo y los recursos de procesamiento consumidos [22](#page=22).
* **Velocidad:** Facilita el análisis de datos en tiempo real [22](#page=22).
#### 4.1.3 Colaboración y productividad
La nube ha transformado la manera de trabajar, permitiendo:
* Edición de documentos en tiempo real [23](#page=23).
* Comunicación instantánea entre usuarios [23](#page=23).
* Acceso remoto a proyectos y recursos compartidos [23](#page=23).
Estas capacidades son fundamentales para facilitar el teletrabajo, la gestión de equipos internacionales y la coordinación general en entornos empresariales [23](#page=23).
#### 4.1.4 Seguridad y cumplimiento
Contrario a lo que podría pensarse, la nube es un entorno altamente seguro gracias a diversas medidas [24](#page=24):
* **Encriptación fuerte:** Protege la confidencialidad de los datos [24](#page=24).
* **Autenticación en varios pasos:** Asegura que solo los usuarios autorizados accedan a la información [24](#page=24).
* **Vigilancia constante:** Monitorización 24/7 para detectar y responder rápidamente a incidentes de seguridad [24](#page=24).
* **Certificaciones de seguridad internacionales:** Confirman el cumplimiento de altos estándares de la industria [24](#page=24).
Sin embargo, las empresas deben prestar atención a aspectos como la gestión de accesos, la protección de datos personales (cumpliendo normativas como el RGPD) y evitar la dependencia excesiva de un único proveedor (vendor lock-in) [24](#page=24).
> **Tip:** Si bien la nube ofrece robustas medidas de seguridad, la responsabilidad de la configuración y el uso seguro recae también en el cliente.
### 4.2 Tecnologías emergentes relacionadas con la nube
Las nuevas arquitecturas buscan complementar la nube tradicional al acercar el procesamiento de datos a donde estos se generan, optimizando la latencia y el uso de ancho de banda.
#### 4.2.1 Edge Computing
El Edge Computing, o computación en el borde, es un modelo que procesa los datos lo más cerca posible de su punto de generación, en lugar de enviarlos a un centro de datos centralizado en la nube. El cálculo ocurre en el propio dispositivo o muy cerca de él [25](#page=25).
> **Ejemplo:**
> * Un dron autónomo que procesa la información de sus sensores para evitar obstáculos en tiempo real, sin esperar instrucciones desde un servidor central [25](#page=25).
> * Un reloj inteligente que analiza las pulsaciones del usuario instantáneamente para detectar anomalías [25](#page=25).
#### 4.2.2 Fog Computing
El Fog Computing, o computación en la niebla, constituye una arquitectura de computación distribuida que acerca el procesamiento, almacenamiento y servicios de la nube a los dispositivos finales donde se generan los datos. Crea una capa intermedia entre el Internet de las Cosas (IoT) y la nube centralizada, actuando como un nivel intermedio entre el edge y la nube [26](#page=26).
> **Idea clave:** No toda la información se procesa en el dispositivo ni se envía directamente a la nube; existe un nivel intermedio "inteligente" que realiza un análisis previo.
> **Ejemplo:**
> * En un edificio inteligente, varios sensores (temperatura, humo, humedad) envían sus datos a un router o servidor local. Este sistema realiza un análisis rápido y solo transmite la información relevante a la nube principal [26](#page=26).
> * Las cámaras de seguridad de un centro comercial envían el video a un servidor del propio edificio para su procesamiento inicial, en lugar de transmitirlo directamente a la nube [26](#page=26).
#### 4.2.3 Mist Computing
El Mist Computing es un modelo de computación distribuida que lleva el procesamiento de datos directamente al dispositivo o sensor que los genera (el "borde extremo"), siendo aún más cercano que el Fog Computing. Se caracteriza por un procesamiento muy distribuido en microdispositivos inteligentes [27](#page=27).
> **Idea clave:** El procesamiento está integrado en los microdispositivos más simples, situándose "en la niebla" en términos de proximidad y descentralización.
> **Ejemplo:**
> * Un sensor de humedad en una planta puede decidir autónomamente si activa un sistema de riego pequeño, sin necesidad de depender de un servidor central ni de la infraestructura de Edge Computing tradicional [27](#page=27).
---
## Errores comunes a evitar
- Revise todos los temas a fondo antes de los exámenes
- Preste atención a las fórmulas y definiciones clave
- Practique con los ejemplos proporcionados en cada sección
- No memorice sin entender los conceptos subyacentes
Glossary
| Término | Definición |
|---|---|
| Computación en la nube (Cloud Computing) | Un modelo que permite acceder a recursos tecnológicos como almacenamiento, servidores, bases de datos o software a través de Internet, sin necesidad de poseer una infraestructura física propia. |
| Escalabilidad | La capacidad de un sistema para aumentar o disminuir sus recursos (como capacidad de procesamiento o almacenamiento) de forma rápida y sencilla para adaptarse a la demanda. |
| Flexibilidad | La posibilidad de trabajar y acceder a recursos desde cualquier dispositivo conectado a Internet, permitiendo el acceso remoto y adaptándose a diversas necesidades de usuario. |
| Ahorro de costes | La reducción de gastos al no tener que comprar, mantener y actualizar servidores y hardware propios, pagando en su lugar por el uso de los recursos en la nube. |
| Innovación | El acceso facilitado a tecnologías avanzadas y disruptivas como Big Data, Inteligencia Artificial (IA) o Internet de las Cosas (IoT), que impulsan el desarrollo de nuevos productos y servicios. |
| Nube pública | Un modelo donde los recursos de computación son ofrecidos por un proveedor externo y se comparten entre múltiples clientes a través de Internet. |
| Nube privada | Infraestructura de computación dedicada exclusivamente a una única organización, que puede ser gestionada internamente o por un tercero. |
| Nube híbrida | Una arquitectura que combina el uso de nubes públicas y privadas, permitiendo a las organizaciones aprovechar las ventajas de ambos modelos para diferentes cargas de trabajo. |
| Multinube | La práctica de utilizar servicios de múltiples proveedores de nube (públicos y/o privados) simultáneamente para optimizar costos, evitar la dependencia de un solo proveedor y mejorar la resiliencia. |
| IaaS (Infraestructura como Servicio) | Un modelo de servicio en la nube que proporciona recursos de infraestructura virtualizados como servidores, almacenamiento y redes, permitiendo al usuario controlar el sistema operativo y las aplicaciones. |
| PaaS (Plataforma como Servicio) | Un modelo de servicio que ofrece un entorno de desarrollo completo con sistemas operativos, bases de datos y herramientas, facilitando a los desarrolladores la creación y despliegue de aplicaciones sin gestionar la infraestructura subyacente. |
| SaaS (Software como Servicio) | Un modelo de servicio que proporciona aplicaciones completas listas para usar a través de un navegador web, sin necesidad de instalación ni mantenimiento por parte del usuario. |
| FaaS (Funciones como Servicio) | Un modelo de computación sin servidor (serverless) donde el código se ejecuta en forma de funciones que se activan por eventos específicos, pagando solo por el tiempo de ejecución. |
| Edge Computing | Un modelo que procesa datos lo más cerca posible de su fuente de generación (en el "borde" de la red), reduciendo la latencia y la necesidad de transmitir grandes volúmenes de datos a centros de datos centralizados. |
| Fog Computing | Una arquitectura de computación distribuida que actúa como una capa intermedia entre los dispositivos de IoT y la nube centralizada, acercando el procesamiento y el almacenamiento a los dispositivos finales. |
| Mist Computing | Un modelo de computación distribuida que lleva el procesamiento de datos directamente al dispositivo o sensor que los genera (el "borde extremo"), siendo aún más cercano que el Fog Computing. |
Cover
TMO-topic 6_basis gegevensverwerkingen_stap 1-2 cleaning.pdf
Summary
# Werkwijze gegevensverwerking en opmaak
Deze sectie beschrijft de procedure voor het verwerken en presenteren van onderzoeksgegevens, met de nadruk op het creëren van frequentietabellen en grafieken [1](#page=1) [2](#page=2).
### 1.1 Algemene stappen van gegevensverwerking
Het proces van gegevensverwerking en opmaak volgt een reeks specifieke stappen om tot een duidelijke en bruikbare presentatie van de onderzoeksresultaten te komen [1](#page=1).
1. **Frequentietabellen maken:** Alle kolommen in de dataset worden omgezet naar frequentietabellen die de absolute waarden weergeven [1](#page=1).
2. **Data opschonen (cleanen):** De dataset wordt gereinigd om inconsistenties en fouten te corrigeren [1](#page=1) [2](#page=2).
3. **Basisgrafieken creëren:** Per vraag worden er 'basisgrafieken' (frequentiegrafieken) gemaakt, die zowel absolute waarden als percentages kunnen tonen [1](#page=1).
4. **Speciale grafieken voor rang- en schaalvragen:** Voor vragen die rangordes of schalen betreffen, worden aanvullende 'speciale grafieken' opgesteld. Deze vallen onder een apart topic (topic 7) [1](#page=1).
5. **Draaigrafieken maken:** De belangrijkste draaitabellen worden geselecteerd en omgezet naar draaigrafieken in percentages [1](#page=1).
> **Tip:** Het is essentieel om de data eerst op te schonen voordat er verdere analyses en visualisaties plaatsvinden.
### 1.2 Opmaak van frequentietabellen
Een frequentietabel telt hoe vaak elke unieke code voorkomt binnen één specifieke kolom van de dataset [2](#page=2).
* **Initiële focus op absolute waarden:** In eerste instantie worden frequentietabellen altijd opgesteld met absolute waarden [2](#page=2).
* **Reden voor absolute waarden:** Dit is cruciaal omdat het opschonen van de data (stap 2) ook steeds in absolute waarden gebeurt [2](#page=2).
De docent illustreert deze stap concreet aan de hand van een voorbeeldmatrix genaamd 'oefendatamatrix BRABO TE CLEANEN_basis gegevensverwerkingen cleaning', die beschikbaar is in de Canvas module 'lesmateriaal' [2](#page=2).
> **Tip:** Zorg ervoor dat je de voorbeelden die de docent gebruikt goed volgt, omdat deze de theoretische stappen verduidelijken.
### 1.3 Data opschonen (Cleaning)
Het opschonen van de data is een fundamentele stap die ervoor zorgt dat de analyse en presentatie van de resultaten betrouwbaar zijn. Deze stap wordt uitgevoerd nadat de initiële frequentietabellen in absolute waarden zijn opgesteld [1](#page=1) [2](#page=2).
### 1.4 Grafiektypen
Er worden verschillende soorten grafieken gebruikt om de onderzoeksresultaten te presenteren:
* **Basisgrafieken (frequentiegrafieken):** Deze grafieken worden per vraag gecreëerd en kunnen zowel absolute aantallen als percentages weergeven [1](#page=1).
* **Speciale grafieken:** Deze zijn specifiek bedoeld voor rang- en schaalvragen en worden in een later stadium (topic 7) behandeld [1](#page=1).
* **Draaigrafieken:** Deze worden gegenereerd uit de meest significante draaitabellen en tonen de resultaten in percentages [1](#page=1).
Alleen de grafieken worden uiteindelijk gepresenteerd aan de opdrachtgever [1](#page=1).
---
# Proces van data cleaning
Het proces van data cleaning omvat verschillende cruciale stappen om de integriteit en nauwkeurigheid van de gegevens te waarborgen voordat verdere analyses worden uitgevoerd [3](#page=3) [4](#page=4) [5](#page=5) [6](#page=6) [7](#page=7).
### 2.1 Stappen in data cleaning
De data cleaning procedure bestaat uit vier hoofdonderdelen:
#### 2.1.1 Aantallen correctie
Dit betreft het controleren en corrigeren van de aantallen van de verzamelde data. Een belangrijke controle hierbij is of het totaal aantal responsen ('n') correct is in alle frequentietabellen. Fouten ontstaan hierbij vaak bij skipvragen, waar respondenten bepaalde vragen overgeslagen zouden moeten hebben [3](#page=3) [4](#page=4) [5](#page=5) [6](#page=6) [7](#page=7).
#### 2.1.2 Verkeerde codes verwijderen
Bij deze stap worden onjuiste codes uit de dataset verwijderd. Dit is met name relevant voor zuiver numerieke vragen [3](#page=3) [4](#page=4) [5](#page=5) [6](#page=6) [7](#page=7).
#### 2.1.3 Code '98. andere, specificeer' opschonen
Antwoorden die onder de categorie '98. andere, specificeer' vallen, vereisen specifieke aandacht. Een vuistregel stelt dat indien de frequentie van antwoorden binnen deze categorie groter is dan 3 tot 5%, deze antwoorden beter uit de '98' categorie gehaald en apart gecodeerd kunnen worden. Afhankelijk van de aard van de vraag kan men ervoor kiezen om deze antwoorden alsnog onder code '98' te plaatsen, of ze te hergroeperen [3](#page=3) [4](#page=4) [5](#page=5) [6](#page=6) [7](#page=7).
> **Tip:** Overweeg bij het opschonen van de code '98' ook het verschil in aanpak tussen Single Response (SR) en Multiple Response (MR) vragen [6](#page=6).
#### 2.1.4 Antwoordcategorieën met te weinig gegevenheden opschonen
Antwoordcategorieën die door te weinig respondenten zijn gebruikt, worden ook opgeschoond. De aanpak hierbij kan zijn om deze categorieën te verwijderen of ze te hergroeperen, evenals bij de '98' categorie [3](#page=3) [4](#page=4) [5](#page=5) [6](#page=6) [7](#page=7).
### 2.2 Algemene procedures en back-up
* Zorg ervoor dat de filter in de datatabel correct is ingesteld tijdens het opschonen [3](#page=3).
* Na elke aanpassing in de data is het noodzakelijk om 'alles te vernieuwen' om de wijzigingen door te voeren [3](#page=3).
* Het is sterk aan te raden om frequentietabellen te genereren voor alle vragen, zowel in absolute waarden als in percentages [3](#page=3).
> **Tip:** Bewaar altijd een extra kopie van zowel de originele als de opgeschoonde dataset als back-up om dataverlies te voorkomen [8](#page=8).
---
## Veelgemaakte fouten om te vermijden
- Bestudeer alle onderwerpen grondig voor examens
- Let op formules en belangrijke definities
- Oefen met de voorbeelden in elke sectie
- Memoriseer niet zonder de onderliggende concepten te begrijpen
Glossary
| Term | Definition |
|------|------------|
| Frequentietabel | Een tabel die weergeeft hoe vaak elke specifieke code of waarde voorkomt binnen een dataset, meestal eerst in absolute aantallen en daarna eventueel in percentages. |
| Absolute waarden | De daadwerkelijke tellingen van hoe vaak een bepaalde categorie of antwoord voorkomt in de dataset, zonder enige vorm van normalisatie of percentageberekening. |
| Cleaning (opschonen) | Het proces van het identificeren en corrigeren van fouten, inconsistenties of ongewenste gegevens in een dataset om de datakwaliteit te verbeteren voor verdere analyse. |
| Verkeerde codes | Ongeldige of onjuiste invoer in de dataset die niet overeenkomt met de vooraf gedefinieerde antwoordopties of categorieën voor een specifieke vraag. |
| Code ‘98. andere, specificeer’ | Een specifieke categorie in een vragenlijst of dataset die wordt gebruikt voor antwoorden die niet onder de vooraf gedefinieerde opties vallen, met de instructie dat deze gespecificeerd moeten worden. |
| Antwoordcategorieën die te weinig gegeven zijn | Categorieën binnen een vraag waarvan het aantal respondenten dat deze heeft gekozen, significant laag is, wat kan leiden tot het samenvoegen of verwijderen ervan. |
| Skipvragen | Vragen in een vragenlijst die alleen aan een deel van de respondenten worden gesteld, afhankelijk van hun eerdere antwoorden, wat kan leiden tot speciale verwerkingsuitdagingen. |
| Zuiver numerieke vragen | Vragen die uitsluitend numerieke antwoorden verwachten, zoals leeftijden, aantallen of meetwaarden, en waarvoor specifieke controle op geldigheid van de numerieke invoer noodzakelijk is. |
| SR (Single Response) | Een type vraag waarbij de respondent slechts één antwoord mag kiezen uit een reeks opties. |
| MR (Multiple Response) | Een type vraag waarbij de respondent meerdere antwoorden mag kiezen uit een reeks opties. |
Cover
TMO-topic 6_basis gegevensverwerkingen_stap 5 draaigrafieken.pdf
Summary
# Basis gegevensverwerkingen en grafiekgeneratie
Dit document beschrijft de stappen voor het transformeren van ruwe data naar begrijpelijke frequentietabellen en grafieken, met een focus op de presentatie aan opdrachtgevers. De verwerking omvat het creëren van frequentietabellen, het opschonen van data, en het genereren van diverse grafiektypes [1](#page=1).
### 1.1 Algemene stappen in de gegevensverwerking
Het proces van gegevensverwerking en grafiekgeneratie volgt een specifieke reeks stappen om ruwe data om te zetten in bruikbare inzichten [1](#page=1).
* **Stap 1: Frequentietabellen maken**
Alle kolommen worden omgezet naar frequentietabellen die de absolute waarden weergeven [1](#page=1).
* **Stap 2: Data opschonen**
De data wordt grondig gereinigd [1](#page=1).
* **Stap 3: Basisgrafieken genereren**
Voor elke vraag worden 'basisgrafieken' gegenereerd, die de absolute frequenties of percentages tonen. Dit zijn typisch frequentiegrafieken [1](#page=1).
* **Stap 4: Speciale grafieken voor rang- en schaalvragen**
Rangschikking- en schaalvragen vereisen aanvullende, 'speciale grafieken' (later behandeld als topic 7) [1](#page=1).
* **Stap 5: Belangrijkste draaigrafieken selecteren en maken**
Dit is een cruciale stap waarbij de belangrijkste draaitabellen worden geselecteerd en omgezet in draaigrafieken, voornamelijk in percentages [1](#page=1) [2](#page=2).
> **Tip:** Het uiteindelijke doel is om grafieken te presenteren aan de opdrachtgever, waarbij de focus ligt op begrijpelijkheid en relevantie [1](#page=1).
### 1.2 Draaigrafieken: de combinatie van variabelen
Draaigrafieken, specifiek in stap 5, representeren de combinatie van twee kolommen, wat neerkomt op de combinatie van twee surveyvragen (SR-vragen) [2](#page=2).
* **Definitie:** Een draaigrafiek is de visuele representatie van een draaitabel die de relatie tussen een onafhankelijke variabele (kolomhoofding) en een afhankelijke variabele (rijhoofding) weergeeft [2](#page=2).
* **Generatie:** Uit één draaitabel kan automatisch één draaigrafiek worden gegenereerd [2](#page=2).
* **Focus:** Bij het genereren van draaigrafieken wordt de nadruk gelegd op verticale percentages. Codes 98 en 99 worden hierbij genegeerd [2](#page=2).
> **Tip:** De draaigrafiek is een krachtig instrument om de interactie tussen twee variabelen te visualiseren [2](#page=2).
### 1.3 Illustratieve voorbeelden van grafiektypes
De docent maakt gebruik van een 'oefendatamatrix BRABO\_standaard gegevensverwerking' om de verschillende grafiektypes concreet te illustreren [3](#page=3).
* **Absolute waarden:** Grafieken die de ruwe aantallen weergeven [3](#page=3).
* **Horizontale percentages:** Waarbij de percentages worden berekend over de rijen [3](#page=3).
* **Verticale percentages:** Waarbij de percentages worden berekend over de kolommen [3](#page=3).
> **Example:** Een concreet voorbeeld is de "draaigrafiek geslachten houding – verticale percentages", waarbij de houding wordt geanalyseerd in relatie tot geslacht, uitgedrukt in verticale percentages. Het is belangrijk om deze grafieken vervolgens te verklaren, interpreteren en te concluderen [3](#page=3).
---
# Functie van draaigrafieken in data-analyse
Draaigrafieken zijn een essentieel onderdeel van data-analyse, waarbij ze visualisaties bieden van de relatie tussen twee variabelen, gegenereerd uit draaitabellen [2](#page=2).
### 2.1 Creatie en structuur van draaigrafieken
Een draaigrafiek wordt automatisch gegenereerd uit één draaitabel. De grafiek combineert twee kolommen, wat overeenkomt met twee "SR-vragen" in de data. Meer specifiek, de draaigrafiek visualiseert de combinatie van een onafhankelijke variabele (die fungeert als kolomhoofding) en een afhankelijke variabele (die fungeert als rijhoofding) [2](#page=2).
#### 2.1.1 Voorwaarden voor draaigrafieken
Er zijn specifieke voorwaarden voor het maken van draaigrafieken vanuit een draaitabel:
* Er mag enkel gebruik gemaakt worden van verticale percentages [2](#page=2).
* Codes die "98" en "99" bevatten, mogen niet gebruikt worden [2](#page=2).
> **Tip:** Zorg ervoor dat de data in de draaitabel correct is opgemaakt en gefilterd voordat u een draaigrafiek genereert om ongewenste resultaten te vermijden [2](#page=2).
### 2.2 Interpretatie van draaigrafieken
Het interpreteren van draaigrafieken, met name die gebaseerd op verticale percentages, is een cruciale stap in data-analyse [3](#page=3).
#### 2.2.1 Voorbeelden van interpretatie
De docent illustreert dit aan de hand van de dataset 'oefendatamatrix BRABO_standaard gegevensverwerking'. Specifieke aandacht gaat uit naar de interpretatie van [3](#page=3):
* Absolute waarden [3](#page=3).
* Horizontale percentages [3](#page=3).
* Verticale percentages [3](#page=3).
Een concreet voorbeeld is de draaigrafiek van "geslachten houding", waarbij de analyse gericht is op het verklaren, interpreteren en concluderen van de data weergegeven door middel van verticale percentages [3](#page=3).
> **Example:** Bij een draaigrafiek die de houding van geslachten weergeeft met verticale percentages, zou men bijvoorbeeld kunnen analyseren welk percentage van de mannen een bepaalde houding heeft, en dit vergelijken met het percentage van de vrouwen met diezelfde houding. Dit helpt bij het identificeren van mogelijke verschillen tussen de groepen [3](#page=3).
---
# Interpretatie van draaigrafieken
Het interpreteren en trekken van conclusies uit draaigrafieken, specifiek met betrekking tot verticale percentages en de relatie tussen variabelen zoals geslacht en houding, is cruciaal voor gegevensverwerking [3](#page=3).
### 3.1 De rol van draaigrafieken in gegevensverwerking
Draaigrafieken, ook wel bekend als draaitabellen of kruistabellen, zijn een essentieel hulpmiddel voor het analyseren van de relatie tussen twee of meer categorische variabelen. Ze stellen ons in staat om de distributie van gegevens te visualiseren en patronen te ontdekken die anders verborgen zouden blijven [3](#page=3).
### 3.2 Verticale percentages in draaigrafieken
Een specifieke methode van interpretatie van draaigrafieken betreft het gebruik van verticale percentages. Dit houdt in dat de percentages binnen elke kolom worden berekend, waardoor de relatie tussen de variabele in de kolom en de variabele in de rijen kan worden geanalyseerd [3](#page=3).
#### 3.2.1 Toepassing op geslacht en houding
Een veelvoorkomende toepassing van verticale percentages is het onderzoeken van de relatie tussen variabelen zoals geslacht en houding. Door een draaigrafiek te maken met "geslacht" als kolomvariabele en "houding" als rijvariabele, kunnen verticale percentages worden berekend om te zien hoe de houding verschilt per geslacht [3](#page=3).
> **Voorbeeld:** Stel we hebben gegevens over de houding ten opzichte van een bepaald onderwerp, onderverdeeld naar geslacht. Een draaigrafiek met verticale percentages kan ons laten zien welk percentage van de mannen een positieve houding heeft, vergeleken met welk percentage van de vrouwen een positieve houding heeft. Dit helpt bij het vaststellen of er een significante relatie bestaat tussen geslacht en houding [3](#page=3).
#### 3.2.2 Stappen voor interpretatie en conclusie
Het proces van het interpreteren van draaigrafieken met verticale percentages omvat doorgaans de volgende stappen:
1. **Creëren van de draaigrafiek:** Genereren van de draaigrafiek, waarbij de variabelen correct worden toegewezen aan rijen en kolommen [3](#page=3).
2. **Berekenen van verticale percentages:** Zorgen dat de percentages correct binnen elke kolom worden berekend [3](#page=3).
3. **Verklaren van de resultaten:** Begrijpen wat de berekende percentages betekenen in de context van de onderzochte variabelen [3](#page=3).
4. **Interpreteren van patronen:** Identificeren van trends, verschillen of overeenkomsten in de verticale percentages tussen de groepen [3](#page=3).
5. **Concluderen:** Trekken van onderbouwde conclusies op basis van de interpretaties, rekening houdend met mogelijke beperkingen van de gegevens [3](#page=3).
> **Tip:** Het is essentieel om bij het interpreteren van draaigrafieken niet alleen naar de absolute aantallen te kijken, maar ook naar de relatieve verdelingen, zoals de verticale of horizontale percentages, om betekenisvolle conclusies te kunnen trekken [3](#page=3).
---
## Veelgemaakte fouten om te vermijden
- Bestudeer alle onderwerpen grondig voor examens
- Let op formules en belangrijke definities
- Oefen met de voorbeelden in elke sectie
- Memoriseer niet zonder de onderliggende concepten te begrijpen
Glossary
| Term | Definition |
|------|------------|
| Frequentietabellen | Dit zijn tabellen die de absolute of relatieve aantallen weergeven van hoe vaak bepaalde waarden voorkomen binnen een dataset, wat helpt bij het begrijpen van de distributie van gegevens. |
| Basisgrafieken | Dit zijn de fundamentele grafische representaties van gegevens, zoals frequentiegrafieken, die absolute waarden of percentages tonen om inzichten te verschaffen over de data. |
| Rang- en schaalvragen | Vragen die respondenten vragen om antwoorden te rangschikken of te beoordelen op een schaal, wat speciale grafische methoden vereist voor analyse en visualisatie. |
| Draaitabellen | Een techniek voor gegevensanalyse die de distributie van waarden van twee of meer variabelen samenvat en de relaties daartussen toont, vaak gebruikt als voorbereiding op draaigrafieken. |
| Draaigrafieken | Visuele representaties die worden gegenereerd uit draaitabellen om de relatie tussen twee variabelen te illustreren, waarbij meestal verticale of horizontale percentages worden gebruikt. |
| Verticale percentages | Percentages berekend ten opzichte van de subtotalen van een kolom in een draaitabel, wat de verdeling binnen elke categorie van de kolomvariabele weergeeft. |
| Horizontale percentages | Percentages berekend ten opzichte van de subtotalen van een rij in een draaitabel, wat de verdeling binnen elke categorie van de rijvariabele weergeeft. |
| Onafhankelijke variabele | De variabele die wordt gemanipuleerd of gecontroleerd in een onderzoek om het effect op de afhankelijke variabele te meten; in draaitabellen vaak gepresenteerd als kolomhoofdingen. |
| Afhankelijke variabele | De variabele die wordt gemeten in een onderzoek om te zien hoe deze wordt beïnvloed door de onafhankelijke variabele; in draaitabellen vaak gepresenteerd als rijhoofdingen. |
Cover
_مستند من `.pdf
Summary
# Computer fundamentals and hardware
A computer is an electronic machine that processes data into information according to programmed instructions [12](#page=12).
## 1. Computer fundamentals and hardware
### 1.1 Basics of a computer
A computer is an electronic machine that accepts data, stores it, and processes it according to instructions (programs) to produce results (information). The word "computer" originates from "compute," meaning to calculate [12](#page=12).
#### 1.1.1 Data and Information
* **Data:** Raw, unorganized facts that require processing [12](#page=12).
* **Information:** Processed, organized, structured, or presented data in a context to make it useful [12](#page=12).
#### 1.1.2 Basic parts of a computer
The fundamental components of a computer system include:
* **System Unit:** A case housing essential components like the motherboard, CPU, and RAM [12](#page=12).
* **Monitor:** An output device that displays graphical or text output [12](#page=12).
* **Keyboard:** An input device for entering text, characters, and commands [12](#page=12).
* **Mouse:** An input device used for pointing, clicking, and moving objects on the screen [12](#page=12).
The overall flow of data and information within a computer can be visualized as: Input Devices $\rightarrow$ System Unit (Processor, RAM, Storage Devices) $\rightarrow$ Output Devices [12](#page=12).
### 1.2 Classifications of computers
Computers are classified based on their size, power, and capability [13](#page=13).
#### 1.2.1 Personal computer (or Microcomputer)
These are designed for individual use.
* **Desktop Computer:** Designed to sit on a desk, consisting of a system unit, keyboard, mouse, and monitor [13](#page=13).
* **Laptop Computer:** A portable computer with an integrated screen and keyboard, powered by a battery [13](#page=13).
* **Tablet Computer:** A handheld, portable computer that uses a touch-sensitive screen for interaction instead of a keyboard and mouse [13](#page=13).
* **Smartphone:** A powerful mobile phone with a touch-sensitive screen, capable of internet connectivity, web browsing, email, and gaming [13](#page=13).
#### 1.2.2 Server
A server is a hardware or software device that responds to requests made over a network. The device making the request is known as a client [13](#page=13).
#### 1.2.3 Mainframe Computer
These are very large, expensive computers capable of supporting hundreds or thousands of users simultaneously. They can support more simultaneous programs than supercomputers, but supercomputers execute single programs faster [14](#page=14).
#### 1.2.4 Supercomputer
Supercomputers are the fastest and most powerful computers, used for specialized applications requiring extensive mathematical calculations, such as weather forecasting and nuclear research [14](#page=14).
### 1.3 Hardware
Hardware refers to the physical components of a computer [14](#page=14).
#### 1.3.1 Motherboard
The motherboard is the main circuit board where most computer parts and peripherals are connected. It houses the CPU, RAM, ROM, and other components [15](#page=15).
#### 1.3.2 The Central Processing Unit (CPU)
The CPU, also known as the microprocessor or processor, is the "brain" of the computer. It receives data and instructions, processes them, and produces results. Common processor manufacturers include Intel and AMD [15](#page=15).
##### Processor speed
CPU speed, measured in Hertz (Hz), determines computer performance. One Hertz equals one cycle per second. A processor speed of 3.8 GHz means 3.8 billion cycles per second. Multi-core processors (dual-core, quad-core) enhance performance by having multiple processors on a single integrated circuit [15](#page=15).
##### Parts of the processor
* **Arithmetic Logic Unit (ALU):** Performs arithmetic (addition, subtraction, multiplication, division) and logic (comparison) operations [16](#page=16).
* **Control Unit (CU):** Directs operations within the CPU, fetching instructions, passing them to the ALU, and sending results to programs [16](#page=16).
* **Register:** Temporary storage areas within the CPU that hold data being processed. Register size is measured in bits (e.g., 32-bit or 64-bit) [16](#page=16).
##### How a processor works: The Machine Cycle
The CPU repeats a four-operation machine cycle for each instruction:
1. **Fetching:** Retrieving the instruction or data from memory [16](#page=16).
2. **Decoding:** Translating the instruction into executable computer signals [16](#page=16).
3. **Executing:** Carrying out the command [16](#page=16).
4. **Storing:** Writing the result back to memory [16](#page=16).
#### 1.3.3 Memory
Memory, also known as primary memory, consists of electronic chips that store the operating system, system software, application programs, data being processed, and resulting information [17](#page=17).
##### RAM (Random Access Memory)
RAM is the main memory where the operating system and loaded applications reside. Larger RAM capacity allows more programs to run simultaneously and improves performance. RAM is volatile, meaning its contents are lost when the power is turned off. The CPU directly accesses RAM [17](#page=17).
##### ROM (Read-Only Memory)
ROM is a permanent, non-volatile memory chip on the motherboard containing essential software for the computer to operate with the operating system. Its contents cannot be changed by the user [17](#page=17).
#### 1.3.4 Input Devices
Input devices are hardware peripherals that provide data and instructions to the computer [17](#page=17).
* **Keyboard:** Used for entering text and characters via keys, typically with a QWERTY layout and around 104 keys [18](#page=18).
* **Pointing Devices:**
* **Optical Mouse:** Uses LEDs or lasers to track movement on a surface for on-screen cursor control [18](#page=18).
* **Trackball:** A pointing device with an exposed ball that detects rotation on two axes [18](#page=18).
* **Touchscreen:** A display that accepts input directly from a finger or stylus, common in PDAs, tablets, and smartphones [18](#page=18).
* **Game Controller:** Used for input in video games and entertainment systems, including gamepads, joysticks, and steering wheels [18](#page=18).
* **Image Scanner:** Captures images, text, or handwriting from paper and converts them into digital formats [19](#page=19).
* **Webcam:** A low-resolution video camera for visual input, easily transferred over the internet [19](#page=19).
* **Digital Camera:** Captures pictures or video, storing them on a memory card that can be transferred to a computer [19](#page=19).
* **Fingerprint Scanner:** Identifies and authenticates individuals using fingerprints for access control [19](#page=19).
* **Microphone:** Converts sound into electrical signals for audio input [19](#page=19).
* **Bar Code Reader:** Reads barcodes, often used in retail for product identification and pricing [19](#page=19).
* **Magnetic Ink Character Recognition (MICR):** A technology using special magnetized ink for character recognition, primarily used in banking for security [19](#page=19).
* **Optical Character Reader (OCR):** Converts images of letters or typed text into data the computer can understand [20](#page=20).
* **QR (Quick Response) Code:** A two-dimensional barcode with high storage capacity, scannable by smartphone apps to retrieve information or link to websites [20](#page=20).
#### 1.3.5 Output Devices
Output devices communicate the results of data processing to the user [20](#page=20).
* **Monitor or Visual Display Unit (VDU):** Displays information in a human-understandable format. Modern monitors are typically flat-screen LCD or LED, replacing older CRT technology [20](#page=20).
* **Printers:** Produce hard copies of information on paper. Types include Dot-Matrix, Ink-Jet, and Laser printers, with laser printers being common in organizations for speed and quality [20](#page=20).
* **Plotters:** Similar to printers but designed for printing larger images [21](#page=21).
* **3D Printer:** Creates physical objects from digital models by layering materials [21](#page=21).
* **Speakers:** Generate sound output from the computer [21](#page=21).
* **Projector:** Projects images or videos onto a surface [21](#page=21).
#### 1.3.6 Storage Devices
Storage devices, also known as secondary memory, are non-volatile and store data for long-term access. They are not directly accessed by the processor [21](#page=21).
* **Hard Disk Drive (HDD):** The primary large data storage within a computer, storing the operating system, applications, and user data using spinning platters and a magnetic head. Capacities range from gigabytes (GBs) to terabytes (TBs) [21](#page=21).
* **Solid State Drive (SSD):** Uses flash memory chips for data storage, making them faster, quieter, and more energy-efficient than HDDs, with no moving parts. Capacities range from GBs to TBs [22](#page=22).
* **Tape Drive:** Reads and writes data on magnetic tape, used for long-term storage and backups, with capacities up to 100 TB [22](#page=22).
* **Compact Disc (CD):** Removable media with a storage capacity of 700 megabytes (MB), suitable for music and data [22](#page=22).
* **Digital Versatile Disc (DVD):** Removable media with a larger storage capacity than CDs; single-layer DVDs store 4.7 GB, and dual-layer DVDs store 8.5 GB [22](#page=22).
* **Blu-ray Disc (BD) Drive:** Optical disc storage media with single-layer (25 GB) and dual-layer (50 GB) discs, capable of storing high-definition video [22](#page=22).
* **Universal Serial Bus (USB) Flash Drive:** A small, portable, rewritable flash memory storage device integrated with a USB connector, with capacities from hundreds of megabytes to tens of gigabytes [22](#page=22).
* **External Hard Disk:** Connects via USB, offering slower transfer rates than internal HDDs, with capacities ranging from 500 GB to 10 TB [23](#page=23).
#### 1.3.7 Units used to measure memory capacity
The smallest unit of data is a bit, which can be a 0 or 1 [23](#page=23).
* **1 Bit:** 0 or 1 [23](#page=23).
* **1 Byte:** 8 Bits [23](#page=23).
* **1 Kilobyte (KB):** 1,024 Bytes [23](#page=23).
* **1 Megabyte (MB):** 1,024 KB [23](#page=23).
* **1 Gigabyte (GB):** 1,024 MB [23](#page=23).
* **1 Terabyte (TB):** 1,024 GB [23](#page=23).
---
# Software and basic computer operations
Software comprises the instructions that enable a computer to function, stored on various media like hard disks, CDs, DVDs, or USB drives, and loaded into RAM when needed. Regular software updates are crucial for fixing issues and improving features, with auto-update options available for most applications [24](#page=24).
### 2.1 Types of software
Software is broadly categorized into system software and application software [24](#page=24).
#### 2.1.1 System software
System software consists of programs that automatically load upon computer startup, managing the computer's operations and devices [24](#page=24).
* **Operating system:** This system software allows users to run other applications and facilitates communication with hardware and file storage management. Examples include MS-DOS, Windows 10, Linux, Mac OS, Android, and iOS [24](#page=24).
* **Utilities software:** These programs enhance computer functionality or performance, including antivirus, backup, disk repair, file management, and file compression tools. Some are integrated into the operating system, while others are installed separately [25](#page=25).
* **Device driver:** A critical system software that enables interaction between a hardware device and the operating system or applications. Without it, the hardware cannot function. Examples include drivers for printers, graphic cards, sound cards, network cards, and modems [25](#page=25).
#### 2.1.2 Application software
Application software is designed to enhance user productivity and assist with personal tasks. Examples include Microsoft Word, Calculator, Microsoft Excel, Web browsers, Microsoft Access, Adobe Photoshop, Microsoft PowerPoint, and games [25](#page=25).
### 2.2 Installing and uninstalling software
The installation process varies based on the operating system, device, and specific program [26](#page=26).
#### 2.2.1 Installing software
* **From a disc or USB flash:** Insert the CD-ROM or connect the USB drive. For USB, open "This PC" or "File Explorer," navigate to the USB drive, and double-click the "setup" or executable file [26](#page=26).
* **From the web:** After downloading a program from a website, open the downloads folder and double-click the file. If the file is compressed (e.g.,.zip,.Rar), extract its contents before starting the setup [26](#page=26).
#### 2.2.2 Uninstalling software applications
In Windows 10, software can be uninstalled via:
* **Control Panel:** Navigate to `Control Panel` > `Programs and Features`, select the program, and click "Uninstall" [26](#page=26).
* **Settings:** Navigate to `Settings` > `Apps` > `Apps and features`, select the program, and click "Uninstall" [27](#page=27).
### 2.3 Software copyright
Software is often protected by licenses based on user numbers, user types, computer counts, and institutional size. Copyright is used by proprietary software companies to prevent unauthorized copying, and open-source licenses also rely on it to enforce terms [28](#page=28).
#### 2.3.1 End-User License Agreement (EULA)
A EULA is a legal contract between the software manufacturer and the end-user, outlining acceptable use and restrictions. Users typically must accept the EULA by clicking an "Accept" button to install the software, often without reading it [28](#page=28).
#### 2.3.2 Shareware
Proprietary software provided on a trial basis, which may cease to function after the trial period until a license is purchased. Microsoft Office and Adobe Photoshop are examples [28](#page=28).
#### 2.3.3 Freeware
Fully functional software available indefinitely at no cost. Authors typically restrict rights to copy, distribute, or create derivative works. Examples include Mozilla Firefox and Google Chrome [29](#page=29).
#### 2.3.4 Proprietary software
Software that is copyrighted and has restrictions on use, distribution, and modification imposed by its publisher or developer [29](#page=29).
#### 2.3.5 Open source software
Software developed collaboratively and distributed with full rights granted to use, modify, and share it in both original and modified forms. Community development is fostered by software freedom. Open Office is an example. An initiative for Free and Open Source Software (FOSS) was launched in Oman in 2010 to promote FOSS as an alternative to proprietary software and develop IT solutions based on it [29](#page=29).
### 2.4 Basic computer operations
This section covers fundamental operations when using Windows 10 [34](#page=34).
#### 2.4.1 Starting the computer
Ensure all cables are securely connected. Locate and press the power switch. If nothing appears on the screen, check that the monitor is switched on [35](#page=35).
#### 2.4.2 Shutting down the computer
Save any open files, close all applications, and then use the "Shut Down" command from the Start button. Do not switch off the machine's power until the computer has completely shut down [35](#page=35).
#### 2.4.3 Restarting the computer
Never switch off a Windows-based computer directly. Always use the "Shut Down" command. To restart the computer immediately after shutting it down, select the "Restart" option from the power menu [35](#page=35).
#### 2.4.4 Signing in and signing out from a computer network
In a network environment (e.g., colleges, companies), signing in connects you to the network, while signing out disconnects you [36](#page=36).
* **To sign in:** On the welcome screen, select "Other User" (usually bottom left), enter your assigned username and password, then press Enter or click "Submit" [36](#page=36).
* **To sign out:** Click the Start button, click your profile, and select "Sign out" [36](#page=36).
* **To switch accounts:** Click the Start button, click your profile, and select "Switch Account" [36](#page=36).
#### 2.4.5 System configuration
System properties can be viewed by right-clicking "This PC" on the Desktop and selecting "Properties" from the popup menu. This displays information such as the Windows edition, CPU type, and installed RAM [37](#page=37).
#### 2.4.6 Desktop and icons
The Desktop is the initial screen displayed after logging into a Windows 10 user account. It includes the taskbar with the Start button and icons, which can be system icons (e.g., Recycle Bin), application shortcut icons, folder icons, or file icons [38](#page=38).
#### 2.4.7 Desktop configuration
Right-clicking on the Desktop opens a popup menu from which you can adjust settings like screen resolution, themes, and background pictures by selecting "Display Settings" or "Personalize" [38](#page=38).
#### 2.4.8 Creating a desktop shortcut
To create a desktop shortcut, click the Start button, select the desired application icon, then drag that icon from the Start Menu directly onto the Desktop. The shortcut icon will then appear on the Desktop [39](#page=39).
#### 2.4.9 Common parts of a window
Windows have several common components: Title Bar, Toolbar, Menu Bar, Status Bar, and Scroll Bar [40](#page=40).
* **Minimizing a window:** Click the Minimize icon [40](#page=40).
* **Maximizing a window:** Click the Maximize icon [40](#page=40).
* **Restoring a maximized window:** Click the Restore icon [40](#page=40).
* **Closing a window:** Click the Close button [40](#page=40).
#### 2.4.10 Moving between open windows
You can switch between open application windows by clicking their icons on the taskbar. Alternatively, use the Task View icon on the taskbar or the keyboard shortcuts Alt + Tab or Windows Key + Tab [41](#page=41).
#### 2.4.11 Opening, modifying, saving, and closing application programs
To open an application like WordPad, use the search box on the Start Menu and type "WordPad" [41](#page=41).
#### 2.4.12 Saving a file in a folder
To save a file, click the Save icon in the toolbar or use the shortcut Ctrl+S. In the "Save As" dialog box, choose the save location, type a file name, and select the file type [42](#page=42).
#### 2.4.13 Saving a file in a different format
When saving, you can change the file type in the "Save As" dialog box using the "Save as type" option. Common formats include Rich Text Format (RTF), Office Open XML Document, Open Document Text, Text Document, Text Document – MS-DOS Format, and Unicode Text Document. The operating system opens files with specific extensions using the corresponding application; for instance, a.html file will open in a web browser like Edge, not Microsoft Word [42](#page=42) [43](#page=43).
#### 2.4.14 Closing the editing application
Click the Close icon in the top right corner of the application window, or press Alt+F4 [43](#page=43).
---
# File management and system utilities
This section details how to manage files and folders within Windows 10, covering essential operations, file properties, data compression, and basic printing functions [44](#page=44).
### 3.1 Understanding files and folders
A **folder** acts as a container for files, shortcuts, and subfolders. A **subfolder** is simply a folder nested within another folder. Folders can store various file types like documents, music, pictures, videos, and programs. Windows provides tools to easily browse and manage these stored items [44](#page=44).
Files are represented by icons reflecting their content type, such as a document with a "W" for a Word file, while folders are consistently depicted with a yellow icon [44](#page=44).
### 3.2 Windows Explorer
Windows Explorer is the primary file management application in Windows. It can be accessed by clicking the File Explorer icon on the taskbar or by double-clicking any folder on the desktop [44](#page=44).
The Windows Explorer window comprises several key components:
1. **Navigation Pane:** Allows users to view the computer's file and folder hierarchy and access specific locations [45](#page=45).
* **OneDrive:** A free cloud storage service offered by Microsoft [45](#page=45).
* **This PC:** Encompasses all folders, hard disk partitions, external drives, USB flash drives, CD/DVD drives, and network locations [45](#page=45).
* **Network:** Provides access to folders stored on a network if the computer is connected [45](#page=45).
2. **Address Bar:** Displays the current path of the selected folder [45](#page=45).
3. **Search Box:** Enables searching for subfolders or files within the current folder [45](#page=45).
4. **Frequent folders:** Lists folders that are accessed most often [45](#page=45).
5. **Recent files:** Shows files that have been opened recently [45](#page=45).
### 3.3 Files and folders operations
#### 3.3.1 Creating a new folder/file
To create a new folder or subfolder:
* Open File Explorer by clicking the folder icon on the Taskbar [45](#page=45).
* Navigate to the desired drive or folder [45](#page=45).
* Right-click in the right pane and select "New," then "Folder" from the submenu. The new folder will be named "New Folder" by default and can then be renamed [45](#page=45).
* Alternatively, click the "Home" ribbon and then click "New Folder" [45](#page=45).
#### 3.3.2 Renaming a folder/file
To rename a folder or file:
* Right-click the item and select "Rename" from the context menu, then type the new name and press Enter [46](#page=46).
* Alternatively, select the item, click "Home" ribbon, then click "Rename," type the new name, and press Enter [46](#page=46).
> **Tip:** You cannot rename a file or folder if it is currently open [46](#page=46).
#### 3.3.3 Selecting a folder/file
* **Single item:** Click directly on the folder/file [46](#page=46).
* **All items:** Press `CTRL + A` or use the mouse to select all items [46](#page=46).
* **Several items (non-contiguous):** Hold down the `CTRL` key while clicking each item individually [46](#page=46).
* **Several items (contiguous):** Click the first item, then hold down the `SHIFT` key while clicking the last item [46](#page=46).
* **Using the Home ribbon:** Utilize "Select all," "Select none," or "Invert selections" options [46](#page=46).
#### 3.3.4 Copying a folder/file
* Right-click the folder/file and choose "Copy" from the menu. To move, choose "Cut" instead [46](#page=46).
* Right-click in the destination folder and choose "Paste" [46](#page=46).
* Alternatively, select the item, click "Copy to" or "Move to" on the "Home" ribbon, and then choose the destination folder [47](#page=47).
#### 3.3.5 Deleting a folder/file
* Right-click the folder/file and select "Delete" from the menu, or press the `Delete` key on the keyboard [47](#page=47).
* A confirmation message will appear; click "Yes" to confirm deletion or "No" to cancel [47](#page=47).
* Alternatively, select the item, click "Delete" on the "Home" ribbon [47](#page=47).
#### 3.3.6 Changing views of files and folders
The appearance of files and folders in Windows Explorer can be customized using various views accessible via the "View" ribbon, specifically within the "Layout" section. Available views include [47](#page=47):
* Extra Large Icons
* Large Icons
* Medium Icons
* Small Icons
* List
* Details
* Tiles
* Content
The "Details" view is particularly useful as it displays columns for Name, Date Modified, Type, and Size [47](#page=47).
#### 3.3.7 Searching for files and folders
Windows 10 offers multiple search methods:
* **Cortana's Search Feature:** This can be faster than File Explorer for general searches, capable of searching the PC and the web from the taskbar for help, apps, files, and settings [48](#page=48).
* **Start Menu Search Box:** Typing a word or part of a word into the search box on the Start menu will display matching files, folders, programs, and email messages as you type [48](#page=48) [49](#page=49).
* **File Explorer Search Box:** Located at the top of an open window, this box filters the current view based on typed text. The search considers both the file name and its contents. As you type, search results appear [49](#page=49).
> **Tip:** If you cannot recall the exact file name, use wildcards in the search. For instance, `*.docx` searches for files with the `.docx` extension, and `ex*.docx` searches for files starting with "ex" and having a `.docx` extension [49](#page=49).
After typing in the search box and pressing Enter, a "Search" ribbon appears. This ribbon allows refining search results by criteria such as kind, size, date modified, and other properties. For example, selecting a "Size" option like "Medium (1-128MB)" narrows the search to files within that size range [49](#page=49).
### 3.4 File and folder properties
Right-clicking a file or folder and selecting "Properties" reveals detailed information. This includes [50](#page=50):
* File/Folder name
* Type of File and Folder
* Opens with
* Location
* Size
* Size on Disk
* Created date
* Modified date
* Accessed date
* Attributes:
* Read only (not editable) [50](#page=50).
* Hidden [50](#page=50).
Properties also allow renaming files/folders, viewing their location and size, and seeing the number of files and subfolders within a folder. Attributes define characteristics like making a file or folder read-only or hidden [50](#page=50).
### 3.5 Different types of files with their extensions
Files are distinguished by their extensions, which indicate the application used to create them [51](#page=51).
**File Extension:** The name appearing after the dot at the end of a file name. To display extensions for all files [51](#page=51):
1. Open File Explorer [51](#page=51).
2. Click the "File" menu, then "Options" [51](#page=51).
3. In the "Folder Options" dialog box, click the "View" tab [51](#page=51).
4. Uncheck the option "Hide extension for known file types" [51](#page=51).
The following table lists common file types and their extensions:
| Extension | File Type | Application Used |
| :-------- | :--------------- | :----------------------- |
| `.txt` | Text file | Notepad |
| `.rtf` | Text file | WordPad |
| `.docx` | Document file | MS Word |
| `.xlsx` | Spreadsheet | MS Excel |
| `.pptx` | Presentation | MS PowerPoint |
| `.accdb` | Database | MS Access |
| `.bmp` | Image file | MS Paint |
| `.jpeg` | Image file | Windows Picture viewer |
| `.zip` | Compressed file | WinZip |
| `.rar` | Compressed file | WinRAR |
| `.html` | Web Pages | Any Web Browser |
| `.wav`, `.mp3` | Sound File | Any Media Player |
| `.mov`, `.avi`, `.mp4` | Movie Files | Any Media Player |
| `.tmp`, `.temp` | Temporary File | None |
### 3.6 Formatting removable drives
Formatting a removable drive erases all data and prepares it for use. This is typically done to remove viruses, clear unnecessary files, or when the drive is not functioning correctly [53](#page=53) [54](#page=54).
To format a removable drive:
1. Open File Explorer [53](#page=53).
2. Right-click the selected drive and choose "Format" from the popup menu [53](#page=53).
3. In the format dialog box, click "Start" [53](#page=53).
4. A warning message will appear stating that all data will be erased. Click "OK" to proceed or "Cancel" to abort [53](#page=53).
5. Upon completion, a "Format complete" message will appear. Click "OK". The drive is then ready for use [54](#page=54).
### 3.7 Data compression and extraction
**Data Compression** is a technique to reduce the storage space required for data. **Data Extraction** is the process of restoring compressed data to its original size [54](#page=54).
* **Compress a file or folder:** Right-click the item and select "Add to [item name.rar" (or similar, depending on the compression software). This creates a compressed archive [54](#page=54).
* **Extract a file or folder:** Right-click a compressed file or folder and select "Extract Here". This restores the original file or folder [55](#page=55).
Data compression and extraction can be performed using programs like WinRAR and WinZip [55](#page=55).
### 3.8 Printing from an installed printer
Printing is typically initiated from within an application, such as Microsoft Word [55](#page=55).
* **To print:** Click the "File" command, then select "Print," or use the keyboard shortcut `CTRL + P` [55](#page=55).
#### 3.8.1 Changing the default printer
1. Click the Start icon, then select "Settings" > "Devices" > "Printers & Scanners" [55](#page=55).
2. To change the default printer, click on a printer that is not currently the default [55](#page=55).
3. Click "Manage" [55](#page=55).
4. Select "Set as Default" [55](#page=55).
#### 3.8.2 Printing any document
1. Open the document or text file [55](#page=55).
2. Click "File" > "Print" or use `CTRL + P` [55](#page=55).
3. Select the desired options from the print dialog box [55](#page=55).
#### 3.8.3 View a print job’s progress
* **From the status bar:** Double-click the small printer icon that appears in the status bar when printing [56](#page=56).
* **From Settings:** Click the Start icon, then "Settings" > "Devices" > "Printers & Scanners". Select the printer receiving the job, then click "Open queue" to view the progress of sent print jobs [56](#page=56).
### 3.9 Using Get Help
To access Windows Help and Support:
1. Click the Start icon [56](#page=56).
2. Select "Get Help" [56](#page=56).
3. Type your search query into the dialog box and follow the prompts [56](#page=56).
---
# Internet, World Wide Web, and email
This module explores the foundational concepts of computer networking, the Internet, the World Wide Web, and electronic mail, along with related technologies like web browsers, search engines, social networking, and cloud storage [59](#page=59).
### 3.1 Computer network
A computer network is a collection of interconnected computers that allows for resource, data, and application sharing between them. It facilitates communication and resource sharing among two or more computers. Network types are categorized by their geographical coverage [60](#page=60).
#### 3.1.1 Computer network types
* **PAN (Personal Area Network):** Used for personal-level tasks, such as transferring small files wirelessly via technologies like Bluetooth or IR [60](#page=60).
* **LAN (Local Area Network):** Connects computers and peripheral devices within a limited geographical area, such as a school, laboratory, home, or office building [60](#page=60).
* **WAN (Wide Area Network):** A computer network that spans a large geographical area, essentially connecting multiple LANs [61](#page=61).
* **MAN (Metropolitan Area Network):** Connects multiple LANs across a large area, such as an entire city or college campus, but is smaller in scope than a WAN [61](#page=61).
### 3.2 Internet
The Internet is a global wide area network that interconnects computer systems worldwide, enabling users to perform various data operations such as sending, receiving, collecting, storing, and updating information [62](#page=62).
#### 3.2.1 What we can do on the Internet?
The Internet offers a wide range of functionalities, including:
* Email for communication and information sharing [62](#page=62).
* Social media for connecting with others and building online communities [62](#page=62).
* Accessing news and online shopping [62](#page=62).
* Managing finances, learning new skills, and entertainment [62](#page=62).
#### 3.2.2 History of the Internet
The Internet's origins trace back to the Advanced Research Projects Agency Network (ARPANET), funded by the U.S. Department of Defense, which began on October 29, 1969. January 1, 1983, is recognized as the official birth date of the Internet. The World Wide Web (WWW), invented by computer scientist Tim Berners-Lee in 1990, significantly popularized the Internet and made information more accessible to the public [62](#page=62).
### 3.3 World wide web
The World Wide Web, often shortened to "the Web," is a collection of websites accessible through the Internet. A website comprises related text, images, and other resources, and can serve various purposes, from news platforms and advertisements to online libraries, image-sharing forums, and educational sites. Websites can mimic traditional media or offer interactive experiences unique to computing [62](#page=62).
### 3.4 Web browser
A web browser is application software that enables users to access and view websites on the Internet [63](#page=63).
#### 3.4.1 Common web browsers
Popular web browsers include Google Chrome, Internet Explorer, Safari, Microsoft Edge, Opera, and Mozilla Firefox [63](#page=63).
#### 3.4.2 URLs and the address bar
A URL (Uniform Resource Locator), also known as an internet address or web address, is a unique address for each website used to locate it. Typing a URL into a browser's address bar and pressing Enter directs the browser to load the corresponding web page [63](#page=63).
#### 3.4.3 Navigation buttons
* **Back and Forward buttons:** Allow users to move through previously visited websites. A click-and-hold action on these buttons reveals recent history [64](#page=64).
* **Refresh button:** Reloads the current web page, useful if a site is not loading correctly [64](#page=64).
* **Tabs:** New blank tabs can be created by clicking the button to the right of open tabs, and tabs can be closed by clicking the 'X' icon [64](#page=64).
#### 3.4.4 Bookmarks and history
* **Bookmarks (Favorites):** Allow users to save websites for easy revisiting by selecting a star icon [65](#page=65).
* **History:** Browsers maintain a record of visited sites, accessible through browser settings, typically by clicking an icon in the upper-right corner and selecting "History" [65](#page=65).
### 3.5 Search engine
Search engines, such as Google, Yahoo!, and Bing, allow users to find information online [66](#page=66).
#### 3.5.1 Performing a search
To perform a search, users enter one or more keywords (search terms) into the search engine and press Enter. The results displayed are relevant websites matching the search terms, known as search results. Many browsers also permit web searches directly from the address bar by typing search terms and pressing Enter [66](#page=66) [67](#page=67).
### 3.6 Electronic mail
Email, or "electronic mail," is a widely used Internet feature that enables sending and receiving messages globally to anyone with an email address [67](#page=67).
#### 3.6.1 Email addresses
An email address is essential for receiving emails and typically comprises a user name, the "@" symbol, and the email provider's domain. The user name is chosen by the individual for identification. Email service providers host email accounts. Businesses and organizations may use email addresses with their own domains, such as `@ict.edu.om` for UTAS-Ibra students and staff. Domain suffixes can include `.gov`, `.edu`, or `.org` [67](#page=67) [68](#page=68) [69](#page=69).
#### 3.6.2 Email providers
Leading webmail providers include Yahoo!, Microsoft's Outlook.com (formerly Hotmail), and Google's Gmail. Many individuals also have email addresses hosted by their employers, schools, or organizations for professional use [68](#page=68).
#### 3.6.3 Email features
An email interface typically includes:
* **Inbox and Sent Panes:** The inbox displays received emails, while the sent folder stores outgoing messages. Emails are listed with the sender's name, subject, and reception date/time [69](#page=69).
* **Message Pane:** Displays the content of a selected email, allowing users to read and respond [70](#page=70).
* **Compose Pane:** Used to create new email messages. It requires the recipient's address and a subject line. Users can attach files, add formatting, and reply or forward messages from this pane [70](#page=70).
### 3.7 Social networking
Social networking involves using social media platforms like Facebook, Instagram, and Twitter to connect with others who share similar interests. It is prevalent globally, particularly among younger demographics. Social media helps connect people and businesses, promoting brand awareness. However, disadvantages include the spread of misinformation and the cost of maintaining profiles [71](#page=71).
### 3.8 Essential concepts of cloud storage
#### 3.8.1 What is cloud storage?
Cloud storage is a model within cloud computing where data is stored on the Internet via a provider who manages and offers data storage as a service. It allows data to be saved off-site and accessed through the public internet or a private network connection [72](#page=72).
#### 3.8.2 Cloud storage applications
* **File storage:** Enables storing various information, including files and emails, accessible from any internet-connected device. Popular services include Dropbox and Google Drive [73](#page=73).
* **File sharing:** Simplifies sharing files with multiple people simultaneously, for instance, sharing photos via services like Flickr or iCloud Photos [73](#page=73).
* **Data Backup:** Used to back up business data and applications onto cloud servers. Apps like Carbonite automate cloud data backups [73](#page=73).
### 3.9 Effects of IT in society
Information technology significantly impacts how individuals communicate, learn, and think, with both positive and negative societal consequences [73](#page=73).
#### 3.9.1 Positive impacts
* **Education:** IT enhances the effectiveness and productivity of the education process, improving student performance through methods like replacing books with tablets and laptops [73](#page=73).
* **Communication:** IT has revolutionized global communication, making it easier and faster, especially through mobiles and emails for urgent messages [73](#page=73).
* **Healthcare:** Technological advancements in health include innovative apps for constant health monitoring [73](#page=73).
#### 3.9.2 Negative impacts
* **Social Interaction:** Mobile communication can negatively affect sociability and face-to-face interactions, potentially decreasing interpersonal relationships and personal time [73](#page=73).
* **Distraction:** Mobile technology can be a distraction from academic work [73](#page=73).
* **Privacy:** Loss of privacy is a concern, as individuals can be located at any time [73](#page=73).
> **Tip:** The overall impact of technology is a balance of positive and negative aspects. Responsible and ethical use is key to maximizing benefits and minimizing harm [73](#page=73).
---
# Information security and data protection
This topic explores the principles and practices of safeguarding information and computer systems from various threats, covering malware, network vulnerabilities, strong security measures, and relevant Omani legislation [77](#page=77).
### 5.1 Information security principles
Information security is defined as the protection of information and information systems from unauthorized access, use, disclosure, disruption, modification, or destruction. The core objectives of information security are [78](#page=78):
* **Confidentiality:** Ensuring that only authorized users have the right to access information [78](#page=78).
* **Integrity:** Guaranteeing that information remains unchanged and accurate [78](#page=78).
* **Availability:** Ensuring that information is accessible when needed by authorized users [78](#page=78).
### 5.2 Computer network security risks
Computer security risk refers to actions or events that could lead to the loss or damage of computer hardware, software, information, data, or processing capabilities, indicating the likelihood of a hazard or dangerous threat [78](#page=78).
#### 5.2.1 Risks to personal and organizational data
Information privacy is the right of individuals and companies to deny or restrict the collection and use of information about them. Security risks are associated with system, power, network, and physical losses, necessitating the protection of data in all forms and consideration of these risks during security design and implementation [78](#page=78).
#### 5.2.2 Computer malware
Malware, or malicious software, is designed to damage computers without the user's consent. It encompasses various threats to computer safety [79](#page=79):
* **Virus:** A malicious software designed to take control of system operations, destroy files, or damage the computer itself. Viruses can replicate and spread through downloaded files, email attachments, CDs, and flash drives once activated by a user [79](#page=79).
* **Worm:** A self-replicating program that consumes system and network resources. It repeatedly makes copies of itself, infecting additional computers, potentially consuming all available resources and causing the computer or network to shut down [79](#page=79).
* **Trojan horse:** A program that does not replicate or copy itself to other computers but causes damage or compromises security. It can enter a computer disguised as a virus or hide within or appear as a legitimate program [79](#page=79).
* **Spyware:** A program installed on a computer without the user's consent or knowledge that can capture information such as web browsing habits, email messages, usernames, passwords, and credit card information [79](#page=79).
#### 5.2.3 Security issues with electronic mails
Electronic mail (email) is a widely used communication channel, but it also presents significant opportunities for cybercrimes. A prominent threat is phishing, a form of social engineering where attackers send official-looking emails from reputable sources (e.g., banks) to trick victims into revealing personal and financial information [80](#page=80).
### 5.3 Safeguards against computer malware
While no method can guarantee absolute safety from malicious software, users can implement several precautions to protect their computers [80](#page=80).
#### 5.3.1 Strong password practices
A password is a private combination of characters associated with a username, granting access to specific computer resources. To create strong passwords [81](#page=81):
* **Adequate length:** Passwords should be at least eight characters long, and preferably longer, to resist brute-force attacks [81](#page=81).
* **Adequate character mix:** A mix of letters (uppercase and lowercase) and numbers is recommended, forming a meaningless combination [81](#page=81).
* **Avoid identifiable information:** Passwords should not include easily guessable information like family members' names, pet names, or other personal details [81](#page=81).
> **Example:** Weak passwords like "orange," "97435333," or "alabri" are easily crackable. Stronger examples include "OraNge@3241" or "Al#Abri@4429." [81](#page=81).
#### 5.3.2 Backup and recovery
Backup is the process of copying selected files or an entire hard disk to another storage medium, such as an external hard drive, optical disc, USB flash drive, or tape. This method is crucial for preventing data loss due to system failure, hardware or software issues, or theft [81](#page=81).
In Windows 10, backing up files involves inserting a storage drive, navigating to "Settings," then "Update & Security," and finally selecting "Backup." [82](#page=82).
Recovery is a tool containing system files that can restart a computer when it fails to boot from its hard disk. This process resets the system, allowing it to function as if newly installed. To reset a Windows 10 system, go to "Settings," "Update & Security," and then "Recovery." [82](#page=82) [83](#page=83).
#### 5.3.3 Regular software updating
No software is perfect, and regular updates are essential for security [83](#page=83).
* **Security updates:** These are designed to protect software and computers from harmful programs, viruses, and exploits [83](#page=83).
* **Application updates:** These add functionality, fix problems, or enhance software performance [83](#page=83).
* **Operating system updates:** Keeping operating system applications updated improves overall performance and stability [83](#page=83).
#### 5.3.4 Digital certificates
A digital certificate is a notice that verifies the legitimacy of a user or a website. Web browsers often display warnings if a website lacks a valid digital certificate [84](#page=84).
> **Example:** Visiting the Bank Nizwa website (https://www.banknizwa.om/) and clicking the "view certificate" link allows viewing its digital certificate, issued by DigiCert ShA2 Secure Server CA [84](#page=84).
#### 5.3.5 Encryption and decryption
* **Encryption:** A security technique that converts readable data (plaintext) into unreadable characters (ciphertext) to prevent unauthorized access [85](#page=85).
* **Decryption:** The inverse process of encryption, allowing only authorized parties with the necessary information to read encrypted files [85](#page=85).
#### 5.3.6 Privacy issues
Privacy concerns on the internet arise from cookies, spyware, browser tracking, and access to internet provider records, which can be used to monitor user behavior or gain access to PCs [85](#page=85).
#### 5.3.7 Firewall
A firewall is a hardware and/or software component that protects a network's resources from intrusion from other networks, such as the internet. It filters and controls incoming and outgoing network traffic, deciding what to allow and what to block. Organizations use firewalls to secure network resources from external threats and to restrict employee access to sensitive data [85](#page=85).
#### 5.3.8 Antivirus software
Antivirus software is a utility program designed to protect computers from viruses by scanning and removing any detected threats in memory, on storage devices, or in incoming files. Most antivirus software also offers protection against worms, Trojans, and spyware [86](#page=86).
### 5.4 Security features in Windows 10
Windows 10 includes several tools to protect computers from threats like viruses and malware. The three primary security tools are [86](#page=86):
* User Account Control [86](#page=86).
* Windows Defender [86](#page=86).
* Windows Firewall [86](#page=86).
#### 5.4.1 User Account Control (UAC)
User Account Control is a tool that alerts users when changes are attempted to the computer system settings. It helps protect the computer from accidental modifications or malicious software altering settings. UAC settings can be configured to [86](#page=86):
* **Low:** Never notify the user [86](#page=86).
* **Moderate:** Notify only when an application attempts to make changes to the computer [87](#page=87).
* **High:** Notify when programs or the user tries to make changes to the computer [87](#page=87).
To adjust UAC settings:
1. Open the Control Panel by searching for it [87](#page=87).
2. Select "User Accounts." [87](#page=87).
3. Click on "Change User Account Control settings." [87](#page=87).
4. Move the slider to the desired level. Windows 10 provides a summary of how the system will behave at each level [88](#page=88).
#### 5.4.2 Windows Defender
Windows Defender is an integrated antivirus and malware protection service within the Windows operating system. It enables users to scan their computer for malicious software and checks each file or program that is opened [88](#page=88).
To configure Windows Defender:
1. Go to SETTINGS and select Update & security [88](#page=88).
2. In the UPDATE & SECURITY window, select Windows Security [88](#page=88).
3. Click on "Virus & threat protection." [89](#page=89).
4. Click on Manage settings [90](#page=90).
Here, users can:
a) Turn real-time protection on or off [90](#page=90).
b) Turn cloud-delivered protection on or off, allowing Defender to send security threat information to Microsoft [90](#page=90).
#### 5.4.3 Windows Firewall
Windows Firewall prevents unauthorized external access to a computer. To customize Firewall settings [91](#page=91):
1. Open the Control Panel by searching for it [91](#page=91).
2. Choose Windows Firewall [91](#page=91).
3. In the Windows Firewall window, users can turn it on or off or select when it protects the computer [92](#page=92).
### 5.5 Oman data protection legislation
Oman's primary legislation concerning data protection includes the Electronic Transactions Law and the Cyber Crimes Law. Additional provisions relating to confidentiality and personal data protection are found in The Banking Law, circulars from the Central Bank of Oman (CBO), and Insurance Regulations issued by the Capital Market Authority (CMA) [92](#page=92).
#### 5.5.1 The Electronic Transactions Law
Article 43 of this law addresses the protection of private data, specifically within the context of e-commerce. It provides safeguards and imposes criminal sanctions for the illegal use of such data [92](#page=92).
#### 5.5.2 The Cyber Crimes Law
Chapter 2 of the Cyber Crimes Law pertains to violations of data and system safety and confidentiality. Penalties for hacking crimes may be increased if they involve the misuse of personal data [92](#page=92).
---
# Productivity software: Word processing, presentations, and spreadsheets
*Summary generation failed for this topic.*
---
## Common mistakes to avoid
- Review all topics thoroughly before exams
- Pay attention to formulas and key definitions
- Practice with examples provided in each section
- Don't memorize without understanding the underlying concepts
Glossary
| Term | Definition |
|---|---|
| Computer | An electronic machine that accepts data, stores and processes it according to instructions (programs) to produce results (information). |
| Data | Raw material and unorganized facts that require processing to become useful. |
| Information | Processed, organized, structured, or presented data in a given context to make it useful. |
| System Unit | A case containing the essential components of the computer, including the motherboard, central processing unit (CPU), and random access memory (RAM). |
| Monitor | An output device that displays graphical or text output from the computer. |
| Keyboard | An input device used to enter text, characters, and commands into a computer by pressing keys. |
| Mouse | An input device used to point to objects on the screen, click them, and move them. |
| Personal Computer (Microcomputer) | A computer designed for individual use, including desktop, laptop, tablet, and smartphone types. |
| Server | A software or hardware device that accepts and responds to requests made over a network; the device making the request is a client. |
| Mainframe Computer | A very large and expensive computer capable of supporting hundreds or thousands of users simultaneously, often processing multiple programs concurrently. |
| Supercomputer | The fastest and most powerful type of computer, used for specialized applications requiring immense mathematical calculations. |
| Hardware | The physical components of a computer system, including input devices, output devices, central processing unit (CPU), motherboard, power supply, and memory. |
| Motherboard | The main circuit board of a computer where most parts and peripherals are connected, holding components like the CPU and RAM. |
| Central Processing Unit (CPU) | The central component of a computer system, also known as a microprocessor or processor; it is the 'brain' of the computer responsible for executing instructions. |
| Processor Speed | A primary factor determining computer performance, measured by the number of cycles per second (Hertz) at which the processor operates. |
| Hertz | A unit of frequency equal to one cycle per second, used to measure processor speed. |
| Multi-core processor | A processor with two or more independent processing units on a single integrated circuit, such as dual-core or quad-core processors, to enhance speed. |
| Arithmetic Logic Unit (ALU) | The part of a CPU that performs arithmetic operations (addition, subtraction, multiplication, division) and logic operations (comparison). |
| Control Unit (CU) | Directs operations within a computer's processor by receiving instructions, passing them to the ALU, and sending results back to the program. |
| Register | Temporary storage areas within a computer processor that hold data currently being processed; their size is measured in bits (e.g., 32-bit or 64-bit). |
| Machine Cycle | The sequence of four operations (fetching, decoding, executing, and storing) that the CPU repeats for every instruction. |
| Fetching | The process of retrieving an instruction or data from memory by the CPU. |
| Decoding | The process of translating an instruction into signals that the computer can execute. |
| Executing | The process of carrying out a command or instruction. |
| Storing | The process of writing the result of a CPU operation back to memory. |
| Memory (Primary Memory) | Electronic chips that hold the operating system, system software, application programs, and data being processed. |
| RAM (Random Access Memory) | The main memory where the operating system and applications are loaded; its capacity affects how many programs can run simultaneously. It is volatile memory. |
| ROM (Read-Only Memory) | A non-volatile memory chip on the motherboard containing essential software that cannot be changed, used to start the computer. |
| Input Devices | Peripheral hardware equipment used to provide data and send instructions to the computer. |
| Output Devices | Computer hardware used to communicate the results of data processing to the user. |
| Storage Devices (Secondary Memory) | Non-volatile and persistent devices used for long-term data storage, not directly accessed by the processor. |
| Hard Disk Drive (HDD) | The main, large data storage area within a computer, storing the operating system, applications, and user data. |
| Solid State Drive (SSD) | A storage device that uses flash memory chips, offering faster speeds and no moving parts compared to HDDs. |
| Tape Drive | A device that reads and writes data on magnetic tape, primarily used for long-term storage and backups. |
| Compact Disc (CD) | A type of removable media with a storage capacity of around 700 MB, commonly used for music and data. |
| Digital Versatile Disc (DVD) | A removable media with higher storage capacity than CDs (4.7 GB single-layer, 8.5 GB dual-layer), popular for digital video and data storage. |
| Blu-ray Disc (BD) Drive | A digital optical disc storage medium capable of storing large amounts of data, including High-Definition and Ultra High-Definition video, with capacities of 25 GB (single-layer) and 50 GB (dual-layer). |
| USB Flash Drive | A small, lightweight, removable, and rewritable flash memory storage device with a USB connector, varying in capacity from megabytes to tens of gigabytes. |
| External Hard Disk | A portable hard disk drive that typically connects via USB, offering slower data transfer rates but large storage capacities (500 GB to 10 TB). |
| Bit | The smallest unit of data in a computer, representing a single binary value (0 or 1). |
| Byte | A unit of digital information consisting of eight bits, often representing a single character. |
| Kilobyte (KB) | A unit of digital information equal to 1,024 Bytes. |
| Megabyte (MB) | A unit of digital information equal to 1,024 Kilobytes. |
| Gigabyte (GB) | A unit of digital information equal to 1,024 Megabytes. |
| Terabyte (TB) | A unit of digital information equal to 1,024 Gigabytes. |
| Software | Instructions (programs) that make a computer work; it can be stored on disks or other media and loaded into RAM. |
| System Software | Programs that control or maintain the operations of a computer and its devices, including operating systems, utility programs, and device drivers. |
| Operating System | System software that allows a user to run applications, communicates with hardware, and manages file storage (e.g., Windows 10, Linux, macOS). |
| Utility Software | System software that adds functionality to a computer or improves its performance, such as antivirus, backup, and file compression tools. |
| Device Driver | System software designed to enable interaction between a hardware device and the operating system or programs using it. |
| Application Software | Software designed to make users more productive and assist them with personal tasks (e.g., word processors, spreadsheets, web browsers). |
| Installing Software | The process of adding software applications to a computer system, often from a disc, USB, or the web. |
| Uninstalling Software | The process of removing a software application from a computer system. |
| Software Copyright | Legal protection granted to software creators to prevent unauthorized copying, distribution, or modification. |
| End-User License Agreement (EULA) | A legal contract between the software manufacturer and the end-user, detailing terms of use and restrictions. |
| Shareware | Proprietary software provided on a trial basis without initial payment, requiring a license purchase after the trial period. |
| Freeware | Software that is fully functional for an unlimited time at no cost, though rights to copy, distribute, or modify may be restricted by the author. |
| Proprietary Software | Software that is copyrighted and has restrictions on its use, distribution, and modification imposed by the developer. |
| Open Source Software | Software whose source code is made available for anyone to use, modify, and share, fostering community development. |
| Ergonomics | The science of designing jobs, equipment, and workplaces to fit the worker to prevent injuries and optimize well-being. |
| Repetitive Strain Injury (RSI) | An injury caused by repetitive movements or prolonged awkward postures, often associated with computer use. |
| Computer Network | A collection of computers and devices linked together to share resources, data, and applications. |
| PAN (Personal Area Network) | A computer network used on a personal level, typically for transferring small files wirelessly (e.g., using Bluetooth). |
| LAN (Local Area Network) | A group of computers and peripherals connected within a limited area like a school, office, or home. |
| WAN (Wide Area Network) | A computer network that extends over a large geographic area, often connecting multiple LANs. |
| MAN (Metropolitan Area Network) | A computer network connecting multiple LANs across a city or large campus, smaller in scope than a WAN. |
| Internet | A global wide area network connecting computer systems worldwide, enabling data exchange and communication. |
| World Wide Web (WWW) | A collection of websites and web pages accessible through the Internet, forming a vast information space. |
| Website | A collection of related text, images, and other resources hosted on a server and accessible via a URL. |
| Web Browser | An application software used to access and view websites on the Internet (e.g., Chrome, Firefox, Edge). |
| URL (Uniform Resource Locator) | The unique address of a website or web page on the Internet. |
| Bookmarks (Favorites) | Saved website addresses that allow users to easily revisit them. |
| History | A record of websites visited by a user, stored by the web browser. |
| Search Engine | A website or tool that searches the Internet for information based on keywords (e.g., Google, Bing, Yahoo!). |
| Electronic Mail (Email) | A system for sending and receiving messages and files electronically over a computer network. |
| Email Address | A unique identifier for an email account, consisting of a username, the '@' symbol, and the email provider's domain. |
| Email Provider | A service that hosts email accounts, allowing users to send and receive emails (e.g., Gmail, Outlook.com, Yahoo! Mail). |
| Inbox | The section of an email client where received emails are stored and managed. |
| Compose Pane | The area in an email client used for writing and sending new email messages. |
| Attachment | A file (document, image, etc.) sent along with an email message. |
| Social Networking | The use of Internet-based social media platforms to connect with friends, family, or people with shared interests. |
| Cloud Storage | A model of data storage where digital data is stored on the Internet through a cloud computing provider, accessible via a network. |
| File Sharing | The practice of distributing or providing access to digital files to others, often facilitated by cloud storage services. |
| Data Backup | The process of copying files or an entire system to another storage medium to prevent data loss. |
| Information Security | The protection of information and information systems from unauthorized access, use, disruption, modification, or destruction, ensuring confidentiality, integrity, and availability. |
| Confidentiality | Ensuring that information is accessible only to authorized individuals. |
| Integrity | Ensuring that information is accurate, complete, and has not been altered without authorization. |
| Availability | Ensuring that information and systems are accessible and usable when needed. |
| Computer Security Risk | An action or event that could cause loss or damage to computer hardware, software, information, or processing capability. |
| Information Privacy | The right of individuals and companies to control the collection and use of information about them. |
| Malware | Malicious software designed to damage computers or gain unauthorized access without the user's consent. |
| Virus | A malicious software program that replicates itself and can damage or destroy files on a computer. |
| Worm | A self-replicating program that spreads across networks and consumes system resources, often without user intervention. |
| Trojan Horse | A malicious program disguised as legitimate software that can compromise computer security or cause damage. |
| Spyware | Software that secretly gathers information about a user's computer activities without their knowledge or consent. |
| Phishing | A type of email-based social engineering attack where attackers impersonate reputable sources to obtain sensitive information. |
| Password | A private combination of characters used to authenticate a user and grant access to computer resources. |
| Backup | A copy of selected files or an entire hard disk stored on another medium for data recovery purposes. |
| Recovery | A process or tool used to restart a computer or restore data after a system failure or data loss. |
| Digital Certificate | A notice that verifies the legitimacy of a user or a website, often used in secure online transactions. |
| Encryption | A security technique that converts readable data (plaintext) into unreadable code (ciphertext) to prevent unauthorized access. |
| Decryption | The process of converting encrypted data (ciphertext) back into its original readable form (plaintext). |
| Firewall | Hardware or software that protects a network's resources from unauthorized access by filtering and controlling incoming and outgoing network traffic. |
| Antivirus Software | A utility program designed to detect, prevent, and remove computer viruses and other malicious software. |
| User Account Control (UAC) | A security feature in Windows that warns users when programs attempt to make changes to system settings. |
| Windows Defender | An antivirus and malware protection program included in the Windows operating system. |
| Windows Firewall | A firewall feature integrated into Windows to protect the computer from unauthorized network access. |
| Word Processing | The creation, editing, formatting, and printing of documents using software like Microsoft Word. |
| Word Processor | Software application used for creating and editing text documents. |
| Ribbon | A user interface element in Microsoft Office applications that contains multiple tabs with groups of commands for performing tasks. |
| Quick Access Toolbar | A customizable toolbar in Microsoft Office applications that provides quick access to frequently used commands. |
| Document | A file created and edited using word processing software. |
| Template | A predesigned document or presentation that can be used as a starting point for new projects. |
| Save As | A command used to save a file with a new name or in a different location or format. |
| Formatting Text | Modifying the appearance of text, such as font, size, color, alignment, and style (bold, italic, underline). |
| Cut, Copy, Paste | Operations used to move (cut and paste) or duplicate (copy and paste) selected text or objects. |
| Font Size | The height of characters in a document, measured in points. |
| Font Style | The typeface used for text, such as Arial, Times New Roman, or Calibri. |
| Font Color | The color applied to text characters. |
| Bold, Italic, Underline | Text formatting styles used to emphasize text. |
| Change Case | A feature that allows changing the capitalization of selected text (e.g., to uppercase, lowercase, sentence case). |
| Highlight Text | Applying a background color to text to draw attention to it. |
| Text Alignment | The arrangement of text on a page relative to the margins (left, right, center, justified). |
| Find and Replace | A feature that searches for specific text within a document and optionally replaces it with different text. |
| Page Layout | The arrangement of content on a page, including orientation, size, and margins. |
| Page Orientation | The direction in which a page is printed (portrait or landscape). |
| Portrait Orientation | A page layout where the page is taller than it is wide. |
| Landscape Orientation | A page layout where the page is wider than it is tall. |
| Page Size | The dimensions of the paper used for a document (e.g., Letter, A4). |
| Margin | The space between the text and the edges of the document page. |
| Printing Documents | The process of producing a hard copy of a document on paper. |
| Print Pane | A view in applications that allows users to configure printing settings and preview the document before printing. |
| Header | Text or graphics that appear at the top margin of each page in a document. |
| Footer | Text or graphics that appear at the bottom margin of each page in a document. |
| Page Number | A sequential number displayed on each page of a document, typically in the header or footer. |
| Pictures | Digital images that can be inserted into documents to illustrate content. |
| Crop an Image | To remove unwanted parts of an image by adjusting its boundaries. |
| Crop to Shape | To reshape an image by fitting it within a selected geometric shape. |
| Picture Border | A line or frame added around an image. |
| Shapes | Geometric figures (lines, squares, circles, arrows, etc.) that can be inserted into documents. |
| Bring to Front/Send to Back | Commands used to control the layering order of overlapping objects or shapes. |
| Resize a Shape | To change the dimensions (width and height) of a shape. |
| Shape Style | A predefined combination of color, effects, and outlines for a shape. |
| Shape Fill | The color or texture used to fill the interior of a shape. |
| Shape Outline | The color, weight, and style of the border of a shape. |
| Table | A grid of cells arranged in rows and columns, used for organizing data. |
| Row | A horizontal set of cells in a table. |
| Column | A vertical set of cells in a table. |
| Cell | The intersection of a row and a column in a table or spreadsheet. |
| Cell Range | A group of contiguous cells in a spreadsheet. |
| Spell Check | A feature that identifies and corrects spelling errors in a document. |
| Grammar Check | A feature that identifies and suggests corrections for grammatical errors in a document. |
| Presentation Program | Software used to create dynamic slide presentations, such as Microsoft PowerPoint. |
| Presentation | A collection of slides displayed in sequence to present information. |
| Slide | A single page within a presentation. |
| Slide Layout | A predefined arrangement of placeholders on a slide for content like text, images, or charts. |
| Placeholder | A designated area on a slide where content can be inserted. |
| Title Slide | The first slide in a presentation, typically containing the presentation title and subtitle. |
| Content Slide | Slides designed to present information, often with placeholders for text, images, charts, etc. |
| Chart | A graphical representation of data, used to visualize trends and comparisons. |
| SmartArt | A feature that allows the creation of visual diagrams (e.g., cycles, lists, processes) to represent information. |
| Duplicate Slide | To create an exact copy of an existing slide. |
| Move Slides | To rearrange the order of slides within a presentation. |
| Delete Slide | To remove a slide from a presentation. |
| Blank Slide | A slide with no pre-defined placeholders, offering maximum flexibility for content placement. |
| Text Box | An object that allows for the insertion and formatting of text on a slide. |
| Slide Notes | Text that accompanies a slide, typically visible only to the presenter, for reference. |
| Play Presentation | To display the presentation in full-screen mode for an audience. |
| Slide Size | The dimensions of a presentation slide. |
| Slide Background | The visual appearance behind the content of a slide. |
| Hide Slide | To exclude a slide from being shown during a presentation. |
| Slide Master | A template slide that controls the formatting and layout of all slides in a presentation. |
| Animation | Visual effects applied to objects or text on a slide to control their appearance and movement. |
| Transition | Visual effects that occur when moving from one slide to the next during a presentation. |
| Animation Pane | A tool that displays and manages all animation effects applied to objects on a slide. |
| Spreadsheet Program | Software used for organizing, analyzing, and calculating data in tabular form, such as Microsoft Excel. |
| Workbook | A file created and saved using spreadsheet software like Excel. |
| Worksheet | A single sheet within an Excel workbook, containing cells arranged in rows and columns. |
| Cell Address | The unique identifier for a cell, formed by its column letter and row number (e.g., A1, C5). |
| Formula Bar | An area in Excel that displays the contents of the active cell, including formulas. |
| Name Box | Displays the cell address of the active cell. |
| Sheet Navigator | Tabs at the bottom of the Excel window that allow users to switch between worksheets. |
| Worksheet Grid Lines | The lines that define the cells in a worksheet. |
| Excel Interface | The visual layout of the Excel application window, including the Ribbon, Formula Bar, and worksheet grid. |
| Formula | A sequence of values, cell references, operators, and functions in a cell that produces a new value. |
| Mathematical Operators | Symbols used in formulas to perform calculations (+, -, *, /, ^). |
| Cell Reference | Using the address of a cell (e.g., A1) within a formula to include its value in the calculation. |
| Point-and-Click Method | Creating formulas by selecting cells with the mouse rather than typing their addresses manually. |
| Excel Functions | Predefined formulas in Excel that perform specific calculations (e.g., SUM, AVERAGE, IF). |
| SUM Function | An Excel function that adds all the numbers in a specified range of cells. |
| AutoSum Function | A quick way to insert the SUM function to calculate the total of a range of cells. |
| MIN Function | An Excel function that returns the smallest value in a set of values. |
| MAX Function | An Excel function that returns the largest value in a set of values. |
| AVERAGE Function | An Excel function that calculates the arithmetic mean of a set of values. |
| IF Function | An Excel function that performs a logical test and returns one value if the test is true, and another if it is false. |
| Formatting Cell Contents | Modifying the appearance of data within cells, including font, color, size, and alignment. |
| Merging Cells | Combining two or more adjacent cells into a single larger cell. |
| Insert Image | Adding a picture or graphic file into a worksheet. |
| Chart/Graph | A visual representation of data used for analysis and presentation. |
| Column Chart | A chart that displays data using vertical bars. |
| Recommended Charts | An Excel feature that suggests appropriate chart types based on the selected data. |
| Chart Elements | Components of a chart, such as titles, legends, and data labels, that enhance readability. |
| Quick Layout | Predefined arrangements of chart elements to quickly format a chart. |
| Chart Style | A predefined visual appearance for a chart, including colors and effects. |
| Switch Row/Column | An option to transpose the data displayed in a chart, swapping rows and columns. |
| Change Chart Type | The ability to convert an existing chart into a different chart type. |
| Move a Chart | To relocate a chart from one location or worksheet to another within a workbook. |
| Handle Sheets | Operations related to managing worksheets within an Excel workbook, such as inserting, deleting, renaming, hiding, and unhiding. |
| Print Area | The specific range of cells designated to be printed from a worksheet. |
| Scaling | Adjusting the size of content to fit within the printable area of a page. |