Dokumentasjon. Hvorfor skrive dokumentasjon? For hvem? Javas dokumentasjon «Lesbar programmering» («Literate programming») IN 211 Programmeringsspråk

Like dokumenter
IN 211 Programmeringsspråk. Dokumentasjon. Hvorfor skrive dokumentasjon? For hvem? «Lesbar programmering» Ark 1 av 11

INF3110/4110 INF3110/4110

Dagens tema: Resten av det dere trenger til del 1

Dagens tema: Resten av det dere trenger til del 2

Dagens tema: Resten av det dere trenger til del 1

Dagens tema: Resten av det dere trenger til del 1

Dagens tema: Koding. Programmering i høynivåspråk. Navn. Mitt forslag:

Dagens tema: Koding. Høynivåprogrammering, kommentarer og stil Kompilering av store programsystemer Prosjekter, samarbeide og versjoner

1 User guide for the uioletter package

Unit Relational Algebra 1 1. Relational Algebra 1. Unit 3.3

Slope-Intercept Formula

Syntax/semantics - I INF 3110/ /29/2005 1

Han Ola of Han Per: A Norwegian-American Comic Strip/En Norsk-amerikansk tegneserie (Skrifter. Serie B, LXIX)

7) Radix-sortering sekvensielt kode og effekten av cache

Databases 1. Extended Relational Algebra

Trigonometric Substitution

Hvor mye praktisk kunnskap har du tilegnet deg på dette emnet? (1 = ingen, 5 = mye)

IN1010. Fra Python til Java. En introduksjon til programmeringsspråkenes verden Dag Langmyhr

Elektronisk innlevering/electronic solution for submission:

Oppgave 1a Definer følgende begreper: Nøkkel, supernøkkel og funksjonell avhengighet.

5 E Lesson: Solving Monohybrid Punnett Squares with Coding

Du må håndtere disse hendelsene ved å implementere funksjonene init(), changeh(), changev() og escape(), som beskrevet nedenfor.

INF2270 Datamaskinarkitektur

UNIVERSITETET I OSLO

GEO231 Teorier om migrasjon og utvikling

Den som gjør godt, er av Gud (Multilingual Edition)

STILLAS - STANDARD FORSLAG FRA SEF TIL NY STILLAS - STANDARD

TMA4329 Intro til vitensk. beregn. V2017

UNIVERSITETET I OSLO

MID-TERM EXAM TDT4258 MICROCONTROLLER SYSTEM DESIGN. Wednesday 3 th Mars Time:

IN2010: Algoritmer og Datastrukturer Series 2

Information search for the research protocol in IIC/IID

of color printers at university); helps in learning GIS.

EXAM TTM4128 SERVICE AND RESOURCE MANAGEMENT EKSAM I TTM4128 TJENESTE- OG RESSURSADMINISTRASJON

Hvor mye teoretisk kunnskap har du tilegnet deg på dette emnet? (1 = ingen, 5 = mye)

UNIVERSITY OF OSLO DEPARTMENT OF ECONOMICS

Lære å tenke effektiv bruk av både CPU og minne når vi utvikler programvare. TOD 063: Datastrukturer og algoritmer, Kap.2

Improving Customer Relationships

UNIVERSITETET I OSLO

Stationary Phase Monte Carlo Methods

SVM and Complementary Slackness

Fra Python til Java. En introduksjon til programmeringsspråkenes verden. Dag Langmyhr

Kartleggingsskjema / Survey

GEOV219. Hvilket semester er du på? Hva er ditt kjønn? Er du...? Er du...? - Annet postbachelor phd

Fra sekvensielt til parallelt

Fra sekvensielt til parallelt

Presenting a short overview of research and teaching

TFY4170 Fysikk 2 Justin Wells

Andrew Gendreau, Olga Rosenbaum, Anthony Taylor, Kenneth Wong, Karl Dusen

Juridiske aspekter ved publisering i åpne institusjonelle arkiv

Hvor mye praktisk kunnskap har du tilegnet deg på dette emnet? (1 = ingen, 5 = mye)

FASMED. Tirsdag 21.april 2015

UNIVERSITETET I OSLO

IN1010. Fra Python til Java. En introduksjon til programmeringsspråkenes verden Dag Langmyhr

Examination paper for (BI 2015) (Molekylærbiologi, laboratoriekurs)

HONSEL process monitoring

KROPPEN LEDER STRØM. Sett en finger på hvert av kontaktpunktene på modellen. Da får du et lydsignal.

Endringer i neste revisjon av EHF / Changes in the next revision of EHF 1. October 2015

Neural Network. Sensors Sorter

Speed Racer Theme. Theme Music: Cartoon: Charles Schultz / Jef Mallett Peanuts / Frazz. September 9, 2011 Physics 131 Prof. E. F.

INF2270 Datamaskinarkitektur

Emneevaluering GEOV272 V17

0:7 0:2 0:1 0:3 0:5 0:2 0:1 0:4 0:5 P = 0:56 0:28 0:16 0:38 0:39 0:23

Eksamen ENG1002/1003 Engelsk fellesfag Elevar og privatistar/elever og privatister. Nynorsk/Bokmål

Programmering. Carsten Wulff

Hvor mye teoretisk kunnskap har du tilegnet deg på dette emnet? (1 = ingen, 5 = mye)

Citation and reference tools for your master thesis

Universitetet i Bergen Det matematisk-naturvitenskapelige fakultet Eksamen i emnet Mat131 - Differensiallikningar I Onsdag 25. mai 2016, kl.

pnvdb Documentation Release Jan Tore Kyrdalen

Dagens tema: Eksempel Klisjéer (mønstre) Tommelfingerregler

Dynamic Programming Longest Common Subsequence. Class 27

Physical origin of the Gouy phase shift by Simin Feng, Herbert G. Winful Opt. Lett. 26, (2001)

Presenting a short overview of research and teaching

Løsningsforslag 2017 eksamen

Gir vi de resterende 2 oppgavene til én prosess vil alle sitte å vente på de to potensielt tidskrevende prosessene.

Enkel og effektiv brukertesting. Ida Aalen LOAD september 2017

Mannen min heter Ingar. Han er også lege. Han er privatpraktiserende lege og har et kontor på Grünerløkka sammen med en kollega.

UNIVERSITETET I OSLO ØKONOMISK INSTITUTT

FIRST LEGO League. Härnösand 2012

Dagens tema. L A T E X filer. BibT E X Hovedidé. Et eksempel. Hvordan jobber BibT E X? Hvordan bygge opp en database? Ulike BibT E X stiler

Hvor mye praktisk kunnskap har du tilegnet deg på dette emnet? (1 = ingen, 5 = mye)

Norsk (English below): Guide til anbefalt måte å printe gjennom plotter (Akropolis)

(MVC - Model, View, Control)

Moving Objects. We need to move our objects in 3D space.

Vekeplan 4. Trinn. Måndag Tysdag Onsdag Torsdag Fredag AB CD AB CD AB CD AB CD AB CD. Norsk Matte Symjing Ute Norsk Matte M&H Norsk

Citation and reference tools for your master thesis

Løsningsforslag for oppgavene i operativsystemer og C, uke 38 ( )

Python: Løkker. TDT4110 IT Grunnkurs Professor Guttorm Sindre

UNIVERSITETET I OSLO

BIBSYS Brukermøte 2011 Live Rasmussen og Andreas Christensen. Alt på et brett? -om pensum på ipad og lesebrett

UNIVERSITETET I OSLO

2A September 23, 2005 SPECIAL SECTION TO IN BUSINESS LAS VEGAS

EN Skriving for kommunikasjon og tenkning

Maple Basics. K. Cooper

Tema. Informasjonsarkitektur Brukervennlighet/Usability Kommunikasjon som treffer målrettet kommunikasjon

Trådløsnett med. Wireless network. MacOSX 10.5 Leopard. with MacOSX 10.5 Leopard

Server-Side Eclipse. Bernd Kolb Martin Lippert it-agile GmbH

Citation and reference tools for your master thesis

UNIVERSITETET I OSLO ØKONOMISK INSTITUTT

Graphs similar to strongly regular graphs

Transkript:

Dokumentasjon Hvorfor skrive dokumentasjon? For hvem? Javas dokumentasjon «Lesbar programmering» («Literate programming») Ark 1 av 13 Forelesning 6.11.2000

Dokumentasjon Med hvert skikkelig program bør det komme følgende dokumentasjon: innføring for nye brukere oppslagsverk for erfarne brukere guide om installasjon og tilpasning for systemansvarlige dokumentasjon for de som senere skal vedlikeholde og oppdatere programmet. I dette kurset er det siste punkt som opptar oss. Forelesning 6.11.2000 Ark 2 av 13

Dokumentasjon og programkode Alle programmeringsspråk har muligheten for å legge inn kommentarer i programkoden. Uten slik dokumentasjon er det ofte vanskelig å forstå ideene bak programmet. /* Sort array a with n elements using bubble sort. */ void bubble(int a[], int n) { int i, temp, n_swaps; } do { n_swaps = 0; for (i=0; i<n-1; ++i) if (a[i]>a[i+1]) { temp = a[i]; a[i] = a[i+1]; a[i+1] = temp; ++n_swaps; } } while (n_swaps > 0); Forelesning 6.11.2000 Ark 3 av 13

Problemet med slike kommentarer er imidlertid at programkoden ofte «drukner» i kommentarene. /* Sort array a with n elements using the technique called bubble sort. */ void bubble(int a[], int n) { /* Variables: i: loop index temp: temporary variable used during swapping n_swaps: count the number of swaps done */ int i, temp, n_swaps; /* Loop until no swaps were performed, as this implies that the array is completely sorted. */ do { /* Initialize the variables used in the loop. */ n_swaps = 0; for (i=0; i<n-1; ++i) /* In a bubble sort, all adjacent array elements are compared. If they are out of order, they are swapped*/ if (a[i]>a[i+1]) { /* Swapping uses a temporary variable. */ temp = a[i]; a[i] = a[i+1]; a[i+1] = temp; /* Remember to update the swap counter. */ ++n_swaps; } } while (n_swaps > 0); /* The array should now be completely sorted. */ } Forelesning 6.11.2000 Ark 4 av 13

Javas dokumentasjon I Java har man prøvd å gjøre dette bedre. Der kan man legge inn dokumentasjon i tillegg til vanlige kommentarer: /* Copyright (c) 1996, 2000. : */ package java.lang; /**Provides classes that are fundamental to the design of * the Java programming language. * see Description */ public class Object { /** Class Object is the root of the class hierarchy. * Every class has Object as a superclass. All objects, * including arrays, implement the methods of this class. * see Class : */ Forelesning 6.11.2000 Ark 5 av 13

Utifra dette genereres automatisk dokumentasjonen: Forelesning 6.11.2000 Ark 6 av 13

Lesbar programmering Donald Knuth var én av de første med et videre syn på dokumentasjon: Programmer bør skrives for mennesker og ikke for maskiner. Dette medfører Programmet må deles opp i biter av passe størrelse. Rekkefølgen må tilpasses leseren. Man bør utnytte det rike utvalget av typografiske teknikker som har oppstått de siste fem hundre år: Angivelse av dokumentets struktur (kapittel, hovedavsnitt, underavsnitt,... ) Kryssreferanser, fotnoter, stikkordlister,... Matematiske formler, figurer, tabeller,... Ulike typesnitt som kursiv, fete typer og skrivemaskinskrift. Forelesning 6.11.2000 Ark 7 av 13

Bubble sort Dag Langmyhr Department of Informatics University of Oslo dagifi.uio.no November 6, 2000 This short article describes bubble sort, which quite probably is the easiest sorting method to understand and implement. Although far from being the most efficient one, it is useful as an example when teaching sorting algorithms. Let us write a function bubble in C which sorts an array a with n elements. In other words, the array a should satisfy the following condition when bubble exits: #1 bubble sort 1 void bubble(int a[], int n) 2 { 3 local variables #4 (p.1) 4 i, j N :0 i<j<n a[i] a[j] 5 use bubble sort #2 (p.1) 6 } (This code is not used.) Bubble sorting is done by making several passes through the array, each time letting the larger elements bubble up. This is repeated until the array is completely sorted. #2 use bubble sort 7 do { 8 perform bubbling #3 (p.1) 9 } while ( not sorted #7 (p.2) ); (This code is used in #1 (p.1).) Each pass through the array consists of looking at every pair of adjacent elements; 1 if the two are in the wrong sorting order, they are swapped: #3 perform bubbling 10 initialize #6 (p.2) 11 for (i=0; i<n-1; ++i) 12 if (a[i]>a[i+1]) { swap a[i] and a[i+1] #5 (p.2) } (This code is used in #2 (p.1).) The for-loop needs an index variable i: #4 local variables 13 int i; (This code is extended in #4 a (p.2). It is used in #1 (p.1).) 1 We could, on the average, double the execution speed of bubble by reducing the range of the for-loop by 1 each time. Since a simple implementation is the main issue, however, this improvement was omitted. File: bubble.w0 page 1 Forelesning 6.11.2000 Ark 8 av 13

Swapping two array elements is done in the standard way using an auxiliary variable temp. We also increment a swap counter named n_swaps. #5 swap a[i] and a[i+1] 14 temp = a[i]; a[i] = a[i+1]; a[i+1] = temp; 15 ++n_swaps; (This code is used in #3 (p.1).) The variables temp and n_swaps must also be declared: #4 a local variables #4 (p.1) + 16 int temp, n_swaps; The variable n_swaps counts the number of swaps performed during one bubbling pass. It must be initialized prior to each pass. #6 initialize 17 n_swaps = 0; (This code is used in #3 (p.1).) If no swaps were made during the bubbling pass, the array is sorted. #7 not sorted 18 n_swaps > 0 (This code is used in #2 (p.1).) File: bubble.w0 page 2 Forelesning 6.11.2000 Ark 9 av 13

Ulike utgaver av lesbar programmering Det finnes mange implementasjoner av lesbar programmering: WEB, CWEB, NOWEB, web 0,... Hvordan skriver man lesbar programmering? Dokumentasjonen skrives som annen dokumentasjon for det valgte verktøyet (f. eks. L A T E X). Programkoden flettes inn i dokumentasjonen: Man definerer diverse metasymboler. Hvert metasymbol defineres som én eller flere linjer programkode. Definisjonen av et metasymbol kan inneholde referanser til andre metasymboler. Forelesning 6.11.2000 Ark 10 av 13

\documentclass[12pt,a4paper]{webzero} \usepackage[latin1]{inputenc} \usepackage[t1]{fontenc} \usepackage{amssymb,palatino,mathpple} \title{bubble sort} \author{dag Langmyhr\\ Department of Informatics\\ University of Oslo\\[5pt] \texttt{dagifi.uio.no}} \begin{document} \maketitle \noindent This short article describes \emph{bubble sort}, which quite probably is the easiest sorting method to understand and implement. Although far from being the most efficient one, it is useful as an example when teaching sorting algorithms. Let us write a function \texttt{bubble} in C which sorts an array \texttt{a} with \texttt{n} elements. In other words, the array \texttt{a} should satisfy the following condition when \texttt{bubble} exits: \[ \forall i, j \in \mathbb{n}: 0 \leq i < j < \mathtt{n} \Rightarrow \mathtt{a}[i] \leq \mathtt{a}[j] \] <<bubble sort>>= void bubble(int a[], int n) { <<local variables>> <<use bubble sort>> } Bubble sorting is done by making several passes through the array, each time letting the larger elements bubble up. This is repeated until the array is completely sorted. <<use bubble sort>>= do { <<perform bubbling>> } while (<<not sorted>>); Forelesning 6.11.2000 Ark 11 av 13

Each pass through the array consists of looking at every pair of adjacent elements;\footnote{we could, on the average, double the execution speed of \texttt{bubble} by reducing the range of the \texttt{for}-loop by~1 each time. Since a simple implementation is the main issue, however, this improvement was omitted.} if the two are in the wrong sorting order, they are swapped: <<perform bubbling>>= <<initialize>> for (i=0; i<n-1; ++i) if (a[i]>a[i+1]) { <<swap a[i] and a[i+1]>> } The \texttt{for}-loop needs an index variable \texttt{i}: <<local var...>>= int i; Swapping two array elements is done in the standard way using an auxiliary variable \texttt{temp}. We also increment a swap counter named \texttt{n\_swaps}. <<swap...>>= temp = a[i]; a[i] = a[i+1]; a[i+1] = temp; ++n_swaps; The variables \texttt{temp} and \texttt{n\_swaps} must also be declared: <<local var...>>= int temp, n_swaps; The variable \texttt{n\_swaps} counts the number of swaps performed during one bubbling pass. It must be initialized prior to each pass. <<initialize>>= n_swaps = 0; If no swaps were made during the bubbling pass, the array is sorted. <<not sorted>>= n_swaps > 0 \wzvarindex \wzmetaindex \end{document} Forelesning 6.11.2000 Ark 12 av 13

Eksempler De mest kjente eksemplene på bruk av lesbar programmering er Donald Knuths bøker «T E X: the program» og «METAFONT: the program». Ellers finnes flere eksempler på /local/doc/programs. Hvor finnes mer informasjon? /local/doc/programs/web0.pdf, spesielt de første 13 sidene. Donald Knuth og Silvio Levy: The CWEB system of structured documentation; Addison-Wesley 1994. En tidlig versjon finnes som /local/doc/tex/cwebman.dvi. Forelesning 6.11.2000 Ark 13 av 13