2. Geschiedenis 1 telraam (Mesopotami ë 3000 v.C) Pascal (1623) : mechanische rekenmachine Babbage (1822): eerste volautomatische computer met geheugen voor tussenresultaten en geheugen voor instructies ontworpen( "Analytical Engine”) Augusta Ada Byron (1843) eerste programma voor de "analytical engine” Herman Hollerith (1890): volkstelling d.m.v. geperforeerde kartonnen kaarten Alan TURING (1936) artikel 'On computable numbers’. Concept bevatte eigenschappen van de moderne computer. Dat jaar gebouwd. 1946 ENIAC: eerste elektronische computer voor algemene doeleinden
3. Geschiedenis 2 1e generatie: von Neuman computer: 1) een centraal geheugen dat het programma, de gegevens, de tussenresultaten en de resultaten van de bewerkingen kan bevatten. 2) een stuureenheid met een teller om de instructies één voor één uit het geheugen te lezen en ze uit te voeren; 3) een rekeneenheid die rekenkundige en logische bewerkingen verricht onder leiding van de stuureenheid, met gegevens afkomstig uit het geheugen. 4) in- en uitvoerapparaten die de communicatie tussen computer en gebruiker mogelijk maken Zeer klein geheugen (akoestische vertragingslijnen met kwik of geheugen kathode straalbuizen)
4. Geschiedenis 3 2de generatie (jaren 50). hardware: twee nieuwe componenten: radiobuis transistor als schakelaar in stuur- en rekenkundige eenheden, kwiklijnen en kathode straalbuizen magnetische ferriet ringetjes in centraal geheugen. besturing: batch (= letterlijk: stapel) programmeren: grotere rekenkracht complexe programma’s hogere programmeertaal : 1956: FORTRAN
5. Geschiedenis 4 3de generatie (vanaf 1965). hardware: nieuwe componenten: ge ïntegreerde schakelingen ( meerdere transistoren, en hun doorverbindingen, samen op een enkel plaatje silicium - chips) besturing: interactieve minicomputers, systeemsoftware programmeren: FORTRAN, software engineering, Pascal
6. Geschiedenis 5 De vierde generatie (vanaf jaren 70). hardware: : zeer goedkope microprocessoren persoonlijke computer: Apple 2 (1978), IBM PC (1981) besturing: UNIX, MS-DOS en Windows talen: C als basis van UNIX (oorspronkelijk in assembler) object-geori ënteerde talen toepassingsgerichte omgevingen (bijvoorbeeld: spreadsheets, tekstverwerking)
7. Computers To compute = berekenen Eerste toepassingen numeriek Programmeerbare digitale computer programmeerbaar: instructies maken geen deel uit van de machine digitaal: informatie wordt voorgesteld door getallen ( digits )
8. Binaire getallen Er zijn10 soorten mensen De mensen die het binaire stelsel begrijpen en de mensen die dat niet begrijpen Basis 2 … 2^2|2^1|2^0 1011
9. Programmeren Computerprogramma expliciete lijst van instructies die aangeven wat de computer moet doen om input om te zetten in betekenisvolle output een programma is een recept voor problem solving een programma is een model van de werkelijkheid Specificaties. Beschrijven wat programma kan doen. Defini ëren: verzameling van alle mogelijke gegevens die ingevoerd kunnen worden verzameling van alle mogelijke resultaten functie die elk element van 1ste verzameling doet overeenstemmen met een element van de 2de verzameling
10. Compromis Bij het opstellen van een programma moet evenwicht gevonden worden tussen volledigheid en correctheid inspanning voor het opstellen van de specificaties Factoren aantal gebruikers van een programma aantal andere programma’s waarmee gegevens uitgewisseld moeten worden
11. Afwegingen Goed programma betrouwbaar stabiel effici ënt in ontwikkeling effici ënt in uitvoering (geheugen en rekentijd) flexibel leesbaar Quality is fitness for purpose. Er is geen pasklare oplossing
12. Problem solving Cyclus analyse van het probleem keuze en ontwerp van de oplossing realisatie van de oplossing evaluatie van de oplossing Oplossing van complexe problemen splitsen in deelproblemen die onafhankelijk van elkaar opgelost kunnen worden.
13. Methode 1: Top-down eerst globaal weinig aandacht voor details later details invullen, rekening houdend met middelen eventueel feedback naar globaal niveau wanneer blijkt dat deeloplossingen niet optimaal zijn qua haalbaarheid (bijvoorbeeld: te duur) zeker aan te raden wanneer problemen omvangrijk zijn of niet echt bekend
14. Methode 2: Bottom-up eerst deelproblemen oplossen ( deelprogramma’s) deze deelprogramma’s gebruiken als bouwstenen verder gaan tot het probleem opgelost eventueel feedback naar globaal niveau wanneer blijkt dat deeloplossingen slecht gekozen zijn heeft vooral zin wanneer je niet met een schone lei begint, en stukken bestaande programma’s opnieuw wilt gebruiken werkt alleen als die bestaande programma’s voldoende algemeen zijn, en informatie-uitwisseling transparant is
15. Methode 1/2: hybride top-down design van oplossing bottom-up om beschikbare componenten maximaal in te passen in de globale oplossing Risico’s van hergebruik van deelprogramma’s Voorbeeld: Europese raket Ariane 5 Hergebruik Ariane 4 deelprogramma Een ander programma probeerde een getal van 64 bits lang in een ruimte voor een 16 bit getal te “proppen” Gevolg: raket stortte na 37 seconden neer Belangrijk: testen voor nieuwe situaties Risico op over-veralgemenisering (“o, dat kunnen we al”)
16. Een problem solving illustratie lekke band met de auto opdracht: schrijf een programma dat aan de chauffeur uitlegt wat hij moet doen eerst keuze van strategie (ANWB bellen, repareren, om hulp roepen, …)
17. Top-down oplossing Gegevens defect wiel reservewiel gereedschap Acties op gegevens onderzoek reservewiel indien OK, monteer Monteer neem gereedschap neem reservewiel vervang defect wiel door reservewiel ruim gereedschap op
18. Bottom-up oplossing Bout losdraaien zet sleutel draai in tegenwijzerzin indien klem, sta op sleutel Wiel demonteren Bout losdraaien alle andere bouten losdraaien bouten opzijleggen wiel afnemen Hergebruik wisselen van banden om slijtage voor en achter te uniformiseren Van lekke band: een schommel maken voor de kinderen
19. Procedureel programmeren Modulair programmeren: een groot programma moet verdeeld kunnen worden in verscheidene kleinere delen die apart geprogrammeerd kunnen worden eventueel door verschillende programmeurs een goed gedefinieerde interface hebben om met de andere delen te interageren Procedureel: Nadruk op handelingen (procedures, routines, functies) procedures zijn de bouwstenen van een programma gegevens (data) gescheiden van de procedures Model open(door)
20. Object-georiënteerd programmeren Modulair: aparte blokken met duidelijke interface Nadruk op data (objecten) objecten zijn de bouwstenen van een programma gegevens (data) samen ingekapseld met de procedures Model door.open Klassen en objecten
21. Beslissingstabellen Nadelen: werkt enkel voor eenvoudige problemen geen aanduiding van volgorde in uitvoering van handelingen Externe hulp nodig Tracht gereedschappen te lenen of roep externe hulp Gereedschappen niet OK Externe hulp nodig Herstel zelf Gereedschappen OK Reserve wiel niet OK Reservewiel OK
22. Analyse en ontwerp en Hulpmiddelen bij het analyseren en ontwerpen van programma’s: beslissingstabellen flowcharts gestructureerde flow charts Nassi-Schneiderman pseudocode naamgeving en commentaar
24. Flowcharts Symbolen rechthoeken om verzamelingen akties voor te stellen met 1 beginpunt en 1 eindpunt. ruiten om beslissingen betreffende het verder verloop van het programma voor te stellen. georiënteerde lijnen tussen deze elementen om het verloop van het programma voor te stellen Nadelen gegevensstructuren worden niet voorgesteld leggen geen structuur op kunnen leiden tot grote lappen papier moeten handmatig vertaald worden naar ‘code’
26. Data-flow charts beschrijven wat er met de gegevens gebeurt. Voor elk gegeven zijn de opeenvolgende bewerkingen die het ondergaat voorgesteld. bijzonder nuttig om de uitwisselingen van gegevens tussen verschillende programma’s op een overzichtelijke wijze weer te geven. Ook, in combinatie met programmastroomschema's, om bepaalde programmafouten op te sporen en om een optimale volgorde van instructies te zoeken. Als bepaalde gegevens op verschillende manier behandeld kunnen worden in een programma, kan men dat niet op een eenvoudige wijze weergeven in de gegevensstroomschema's en is men dikwijls verplicht voor elk geval een afzonderlijk schema te tekenen.
27. Gestructureerde flowcharts programma's opbouwen met behulp van modules die één beginpunt en één eindpunt hebben (rechthoek) In plaats van spronginstructies: twee gespecialiseerde controle-instructies: voor selekties voor herhalingen
30. Pseudocode Voorbeeld: Program repareer controleer wiel controleer gereedschap vervang wiel berg gereedschap op Procedure vervang wiel neem gereedschap draai bouten los leg bouten weg neem wiel1 af monteer wiel2 draai bouten vast
31. Aanpasbaarheid van een programma totale kostprijs van een professioneel softwarepakket wordt hoofdzakelijk bepaald door testen de vele kleine aanpassingen die nodig blijken gedurende de normale levensduur van een softwarepakket. Hieruit kan men besluiten dat het gemak waarmee men programma's kan testen en wijzigen een doorslaggevende invloed zal hebben op de totale kostprijs van de programma's.
32. Leesbaarheid van een programma Uitvoerbare code Modulaire structuur Duidelijke, intuïtieve naamgeving van variabelen en modules Indentering Commentaar Is deel van het programma maar wordt niet door de computer uitgevoerd Essentieel: ook anderen kunnen dan het programma aanpassen Het programma zonder de commentaar doet hetzelfde als mè t Nadeel: niets belet dat commentaar verkeerd is, of niet wordt aangepast