Datanom Basisfag

Lektionsoversigt

Opdateret 10. maj 1999

1. Opstart og grundlæggende teknologi - mandag 15. februar 1999

Jeg startede med bogstaverne EDB (elektronisk data behandling), som jeg så definerede indefra:
- Data, information, viden
- Numerisk, alfabetisk, alfanumerisk
- Binære tal, koder (ASCII)

Herefter koblede jeg ordet behandling på:
Databehandling (manuel eller elektronisk) består af:
- Dataindsamling
- Datalagring
- Databearbejdning
- Datapræsentation

Endelig koblede jeg ordet elektronisk på:
De fire elementer i databehandlingen udføres ved hjælp af en kombination af hardware og software:

Hardware
- Centralenhed (hvor programmer udføres). ALU, styreenhed, registre, cache og RAM (du kan inddrage deres kendskab til PC'er)
- Ydre lagre (hvor datalagring foregår). Disk, tape, CD-ROM, diskette
- Input/output enheder (hvor dataindsamling og datapræsentation foregår). Skærm, tastatur, mus, printer, scanner.

Software
- BIOS
- Basisprogrammel (DOS, Windows, Unix)
- Applikationsprogrammel (tekstbehandling, regneark, bogføring osv.)

Jeg nåede også at berøre den lagdelte computerarkitektur og formålet med programmeringssprog i al almindelighed.
0 Digital elektronik
1 Konventionel arkitektur (Von Neuman arkitektur)
2 Assembler
3 Problemorienterede sprog
4 Applikationsprogrammer

I forbindelse hermed nåede jeg også at omtale systemudviklingens forskellige faser og programmeringens placering i forhold hertil.

2. Grundlæggende teknologi fortsat - mandag 1. marts 1999

Vi startede med en kort repetition af, hvad der foregik på den første aften.

Herefter talte vi om talsystemer. Hvad skal vi bruge det oktale og det hexadecimale talsystemer til? I den forbindelse berørte vi begreberne dump og debugging. Vi talte om bussen, adressebus og databus. Bussen er et antal parallelle ledninger, som forbinder de forskellige komponenter i computeren - først og fremmest processor, RAM og controllere til ydre enheder (disk). Hvor mange parallelle ledninger har man brug for og hvad er konsekvensen af flere eller færre ledninger?

Herefter talte vi om den fysiske opbygning af de ydre lagre - især disk og CD-ROM. Begreber som spor, sektorer og cluster blev omtalt.

Til slut talte vi om ideen med og princippet bag programmering. Dette skete med udgangspunkt i den lagdelte virtuelle computerarkitektur, som også blev omtalt første aften. Den eneste kode computeren forstår og kan udføre er maskinkode svarende til det konventionelle lag i den virtuelle lagdelte arkitektur. Maskinkoden består af rene talkoder og er meget vanskelig at overskue. Derfor er der udviklet (og udvikles stadig) mere og mere abstrakte kunstsprog, hvormed man kan definere den opgave computeren skal løse. Løsningen på en sådan opgave kaldes også en algoritme. På kurset skal vi f.eks. senere lære at udtrykke algoritmer til computeren ved hjælp af sproget Java; men der er flere hundrede andre mulige sprog at vælge imellem. Fælles for alle sprog er, at de inden de kan udføres på computeren skal oversættes til maskinkode. Dette gøres med et særligt oversætter program (compiler).

Hvordan laver man algoritmen? Det er lige så let (eller svært) at svare på dette spørgsmål som at forklare, hvordan man løser en kryds og tværs opgave.

3. Indledning til programmering - mandag 8. marts 1999

Med udgangspunkt i den lagdelte computerarkitektur (se 1. lektion) fortalte jeg om, at overgangen fra et lag i modellen til et lavere lag kan ske på to måder:

Endelig findes der forskellige mellemformer, som kombinerer de to fundamentale teknikker. I denne kategori hører Java, som vi skal bruge til programmering her på kurset.

Selve programudviklingen kan opdeles i et antal aktiviteter, som hver især er understøttet af et eller flere hjælpeprogrammer:

Værktøjerne kan være mere eller mindre integrerede. Formålet med integrationen er at gøre denne del af programmeringen så brugervenlig som muligt for programmørerne. For specielt interesserede kan jeg henvise til et speciale jeg har lavet om programudviklingsmiljøer.

Programmering er en særdeles vanskelig disciplin at mestre - ikke mindst fordi man skal lære 4 forskellige ting mere eller mindre samtidigt:

Udgangspunktet for programmeringen er som regel nogle overvejelser om, hvordan systemet skal udformes. Disse overvejelser gøres primært i aktiviteterne analyse og design, der går forud for programmeringen. Når man har fået defineret en opgave, skal den løses - d.v.s. man skal have udformet en algoritme. Dette gøres med udgangspunkt i det aktuelle paradigme. Algoritmen skal siden udtrykkes i det valgte programmeringssprog og overføres til computeren ved hjælp af udviklingsmiljøet. Det er et karakteristisk træk, at beskrivelsen af problemet fra analysen til det færdige program bliver mere og mere konkret. Samtidig går beskrivelsen fra at være uformel til at blive mere og mere formel.

Vi sluttede aftenen med en gennemgang af programmeringen af et simpelt Java program.

Aftenens gennemgang bliver godt understøttet af kap. 1 i Judy Bishop "Java Gently".

Til næste gang kan I med fordel downloade og udskrive følgende note om objektorienteret analyse: oometode.doc

4. Objektorienteret systemudvikling og programmering - mandag 15. marts 1999

Den første time arbejdede vi med systemudvikling. Først gav jeg et overblik over systemudviklingens faser:

 Foranalyse

 Analyse

 Design

 Programmering

 Test

 Drift

Dernæst beskrev jeg nogle modeller til forståelse af systemudviklingens placering i et spændigsfelt mellem det konkrete og abstrakte på den ene side og brugere og eksperter på den anden side. Man kan læse om dette emne i afsnittene systemudviklingsprocessen og den visuelle systemudvikling i en afhandling jeg har lavet sammen med Ole Dolriis om Visuelle programudviklingsmiljøer.

Herefter gennemgik jeg rammerne omkring en objektorienteret analyse. Det skete med udgangspunkt i noten om objektorienteret analyse: oometode.doc

I den anden time gennemgik jeg en række af grundbegreberne indenfor Java programmering. Det skete med udgangspunkt i kapitel 2 i Judy Bishop "Java Gently". Et af de store problemer bliver sikkert, at der indenfor objektorienteret programmering med tiden er udviklet en terminologi med mange begreber, der har næsten identisk betydning.

I den tredje time fandt vi et computerrum, hvor vi kunne afprøve vores sparsomme færdigheder med sproget Java og udviklingsmiljøet Kawa. Det blev hurtigt klart, at det er en rigtig god idé at oprette et nyt projekt i Kawa, inden man opretter det nye program, man vil indtaste. En anden erfaring var, at man skal være meget præcis med syntaksen.

Næste gang: Dem, der ikke har læst kap. 2 i "Java Gently" endnu, skal læse det. Desuden læser man kap. 3 - vi når ikke det hele næste gang; men jeg har svært ved at forudsige præcis hvor meget vi når. Løs opgaverne i slutningen af kapitel 2. Vi vil løse nogle af dem på tavlen næste gang.

5. Objektorienteret analyse og java programmering - mandag 22. marts 1999

I den første time snakkede jeg om objektorienteret analyse. Det skete med udgangspunkt i bogen "Objektorienteret analyse og design" af Lars Mathiassen, Jan Stage, Peter Axel Nielsen og Andreas Munk-Madsen. Bogen bruges på 1. studieår af datamatikeruddannelsen. Jeg snakkede om klasser - hvor kommer ideerne fra til de klasser, som systemudviklingen og dermed også programmeringen skal baseres på?

Man kan bl.a. analysere systemforslaget med henblik på at identificere navneord, som alle er kandidater til at blive klasser. Man kan også lade sig inspirere af forbilleder og metaforer.

Resten af aftenen beskæftigede vi os med programmering. Først drøftede vi på klassen nogle af de erfaringer, som vi høstede den foregående mandag aften. Der blev gennemgået nogle af opgaverne fra slutningen af kapitel 2 på tavlen. Nogle eksempler og vejledende løsninger til kapitel 2 er lagt på nettet.

Aftenen sluttede i computerrummet, hvor vi øvede os noget mere.

Næste gang tager vi fat på bogens kapitel 3.

6. Objektorienteret analyse og java programmering (fortsat) - mandag 12. april 1999

Vi startede på en gennemgang af kapitel 3 i Java Gently. Der startes med en redegørelse for, hvad man forstår ved et godt program, derefter er der en gennemgang af simple typer i Java (boolean, char, byte, short, int, long, float, double). Vi sluttede med afsnittet om gentagelser med FOR loops.

Som supplement til bogens præsentation har jeg lavet nogle noter: Strategi for problemløsning i forbindelse med programmering og Basale typer og kontrolstrukturer i Java.

Omkring kl. 18.30 kastede vi os over computerne for at øve os i programmering med Kawa/Java. Her kunne man arbejde med to forskellige ting: 1. Indtastning af programeksempler fra bogen eller mine noter. Formålet hermed er at få øvelse med udviklingsmiljøet (Kawa) og sproget (Java). 2. Løsning af opgaver fra slutningen af kapitel 3 eller de ekstra opgaver, jeg har stillet (Øvelsesopgaver til programmering i Java). Formålet hermed er at øve sig i problemløsning. Når I har løst nogle opgaver, må I meget gerne sende dem til mig eller aflevere dem til mig, så vil jeg prøve at kommentere jeres løsninger.

Næste gang arbejder vi videre med kapitel 3 og begynder (forhåbentlig) på kapitel 4.

7. Objektorienteret analyse og java programmering (fortsat) - mandag 19. april 1999

Vi fortsatte med kapitel 3, hvorfra jeg gennemgik 3.4 Making methods, 3.5 Passing parameters, 3.6 Guidelines for designing classes. Herefter tog vi fat på kapitel 4, hvorfra jeg gennemgik 4.1 Inputting interactively, 4.3 Selection with if-else og 4.5 Creating and accessing packages.

Jeg gennemgik nogle eksempler på tavlen; men der blev ikke tid til at arbejde med opgaveløsning. Jeg regner i øvrigt med at I hjemme arbejder meget med opgaveløsning. Det er vigtigt at øve sig, hvis man vil lære at programmere. I skal kigge en ekstra gang på bogens eksempel 4.6, som vi ikke nåede at snakke om. Det indeholder en principiel problemløsningsskabelon.

Jeg har udarbejdet en supplerende note Sammenligning og forgrening i Java.

Næste gang arbejder vi videre med afsnit 4.2, 4.4 samt begynder på kapitel 5. Kig nærmere på eksemplerne 4.8 og 5.1, som indeholder principielle problemløsningsskabeloner.

Der er tilføjet flere opgaver i det ekstra opgavesæt (Øvelsesopgaver til programmering i Java).

8. Objektorienteret design og java programmering - mandag 3. maj 1999

Vi startede med en hurtig gennemgang af afsnit 4.2 File input and output og 4.4 Introduction to exceptions.

Dernæst startede vi på kapitel 5, hvor vi gennemgik afsnit 5.1 om while og do loops og afsnit 5.2 om switch sætningen.

Aftenen sluttede i computerrummet, hvor der blev lejlighed til at arbejde med opgaverne. Der er nogle få af jer der sender mig opgaveløsninger via e-mail. Det må flere af jer gerne gøre - jeg kommenterer løsningerne i den rækkefølge de kommer ind. Jeg samler arbejdet sammen i klumper, så det kan godt være der går nogen tid inden man får svar.

Næste gang gør vi kapitel 5 færdigt og begynder på kapitel 6, hvor det skal handle om arrays. 

9. Objektorienteret design og java programmering - mandag 10. maj 1999

Denne aften blev følgende afsnit behandlet: 5.3 om styring af loops i forbindelse med indlæsning af data. Afsnit 6.1 om simple tabeller. Eksempel 6.2 blev gennemgået linie for linie. Aftenen sluttede med individuel opgaveløsning i computerrummet. Næste gang behandles resten af kapitel 6 og 7.

10. Java programmering - mandag 17. maj 1999

Efter en hurtig repetition af de simple tabeller blev resten af kapitel 6 gennemgået. Herunder blev der især lagt vægt på 6.3 om sortering og søgning. Vi nåede ikke en egentlig gennemgang af kapitel 7, som handler om forskellige former for formattering; men kapitlet egner sig også udmærket til selvstudium.

Næste gang behandler vi kapitel 8, der handler om objektorientering.

11. Objektorienteret programmering - mandag 31. maj 1999

Denne aften afsluttede vi den teoretiske del af undervisningen. Vi nåede til side 242 (til og med afsnit 8.2). De sidste afsnit handlede om udformningen af objektklasser, nedarvning og objektorienteret programmering. Mads Borik har lavet nogle noter om teknologi, som man bør udskrive fra hans hjemmeside på internettet. De bliver en del af pensum.