Introduktion til Smalltalk.

Relaterede dokumenter
Metaklasser i Smalltalk.

Objekt-orienteret programmering uden klasser: Self.

4 Basal Objekt-orienteret Programmering I.

CHAPTER 8: USING OBJECTS

Software Construction 1. semester (SWC) januar 2014 Spørgsmål 1

Aarhus Universitet, Science and Technology, Computer Science. Exam. Wednesday 27 June 2018, 9:00-11:00

Udvidelse og specialisering. Klassehierarkier. Nedarvningsterminologi. Interfaces. Statiske og dynamiske typer. Polymorfi. Abstrakte klasser.

Skriftlig Eksamen Kombinatorik, Sandsynlighed og Randomiserede Algoritmer (DM528)

2 Funktionsorienteret programmering i Scheme.

Rename og redefine. Abstrakte klasser. Dynamisk binding.

9 Introduktion til CLOS.

Help / Hjælp

12 Metaobjekt protokoller i CLOS.

Black Jack --- Review. Spring 2012

Programmering for begyndere Lektion 2. Opsamling mm

Klasser og Objekter i Python. Uge 46 Learning Python: kap 15-16,

Portal Registration. Check Junk Mail for activation . 1 Click the hyperlink to take you back to the portal to confirm your registration

Privat-, statslig- eller regional institution m.v. Andet Added Bekaempelsesudfoerende: string No Label: Bekæmpelsesudførende

Abstrakte datatyper C#-version

Det er muligt at chekce følgende opg. i CodeJudge: og

10 Metodekombination og multimetoder i CLOS.

26 Programbeviser I. Noter. PS1 -- Programbeviser I. Bevis kontra 'check af assertions' i Eiffel. Betingelser og bevisregler.

Project Step 7. Behavioral modeling of a dual ported register set. 1/8/ L11 Project Step 5 Copyright Joanne DeGroat, ECE, OSU 1

ECE 551: Digital System * Design & Synthesis Lecture Set 5

Datalogi OB, Efterår 2002 OH er, forelæsning 10/ Klasser og nedarvning

DANMARKS TEKNISKE UNIVERSITET

Løsning af skyline-problemet

Linear Programming ١ C H A P T E R 2

Forelæsning Uge 3 Mandag

3D NASAL VISTA TEMPORAL

Forelæsning Uge 2 Torsdag

Klasser og objekter. (Afsnit i manualen)

Skriftlig Eksamen Diskret matematik med anvendelser (DM72)

The purpose of our Homepage is to allow external access to pictures and videos taken/made by the Gunnarsson family.

Hvordan vælger jeg dokumentprofilen?

28 Algoritmedesign. Noter. PS1 -- Algoritmedesign

PARALLELIZATION OF ATTILA SIMULATOR WITH OPENMP MIGUEL ÁNGEL MARTÍNEZ DEL AMOR MINIPROJECT OF TDT24 NTNU

Forelæsning Uge 2 Torsdag

Algoritmer og invarianter

Ugeseddel 4 1. marts - 8. marts

Python programmering. Per Tøfting. MacFest

Klasser og Objekter i Python. Uge 11

Øvelse 9. Klasser, objekter og sql-tabeller insert code here

DET KONGELIGE BIBLIOTEK NATIONALBIBLIOTEK OG KØBENHAVNS UNIVERSITETS- BIBLIOTEK. Index

3D NASAL VISTA 2.0

Engineering of Chemical Register Machines

Åben uddannelse, Efterår 1996, Oversættere og køretidsomgivelser

5 Basal Objekt-orienteret Programmering II.

Software Construction 1 semester (SWC) Spørgsmål 1

On the complexity of drawing trees nicely: corrigendum

Dannelse af PDF dokumenter

Sproget Rascal (v. 2)

Polymorfi. Arv (inheritance) Abstrakte klasser, substitutionsprincippet, overriding, statisk og dynamisk type. Coercion

Algoritmeskabeloner: Sweep- og søgealgoritmer C#-version

Besvarelser til Lineær Algebra Reeksamen Februar 2017

Forelæsning Uge 4 Torsdag

Skriftlig Eksamen Beregnelighed (DM517)

Tree klassen fra sidste forelæsning

Basic statistics for experimental medical researchers

Introduktion til Funktionsorienteret Programmering.

Noter til kursusgang 8, IMAT og IMATØ

Digitaliseringsstyrelsen

Klasser og nedarvning

PHP 3 UGERS FORLØB PHP, MYSQL & SQL

IBM Network Station Manager. esuite 1.5 / NSM Integration. IBM Network Computer Division. tdc - 02/08/99 lotusnsm.prz Page 1

AAU, Programmering i Java Intern skriftlig prøve 18. maj 2007

Before you begin...2. Part 1: Document Setup...3. Part 2: Master Pages Part 3: Page Numbering...5. Part 4: Texts and Frames...

Modern Concurrency Abstractions for C#

DK - Quick Text Translation. HEYYER Net Promoter System Magento extension

Introduktion til funktioner, moduler og scopes i Python

Forelæsning Uge 2 Mandag

Hvor er mine runde hjørner?

Skriftlig Eksamen Algoritmer og Datastrukturer (dads)

BACK-END OG DATA: ADMINISTRATION HVAD ER DE NYE MULIGHEDER MED VERSION 7.1? STEFFEN BILLE RANNES, 4. FEBRUAR 2015

Forelæsning Uge 4 Torsdag

Dannelse af PDF-dokumenter

Netværksalgoritmer 1

Generelt om faget: (Eventuelle kommentarer til højre) - Givet målbeskrivelsen ovenfor, hvordan vurderer du så pensum?

To the reader: Information regarding this document

Forelæsning Uge 2 Torsdag

Aktivering af Survey funktionalitet

16/04/12 50% 50% Waveform Chart Waveform Graph XY Graph Indicator Graph 33% 17% 88% 13%

Sortering fra A-Z. Henrik Dorf Chefkonsulent SAS Institute

Online kursus: Programming with ANSI C

Forelæsning Uge 12 Torsdag

Business Rules Fejlbesked Kommentar

Forelæsning Uge 2 Torsdag

DM507 Algoritmer og datastrukturer

Forelæsning Uge 12 Mandag

SWC eksamens-spørgsmål. Oversigt

1. Variable og assignment

Terese B. Thomsen 1.semester Formidling, projektarbejde og webdesign ITU DMD d. 02/

User Manual for LTC IGNOU

class subklasse-navn extends superklasse-navn { } NorwaySpruce har superklassen Spruce, som igen har superklassen Tree.

Forelæsning Uge 2 Mandag

Som sagt kræves der helst lidt viden om OOP hvis man virkelig vil lærer noget, og ikke bare lave copypaste

Software 1 with Java. Recitation No. 7 (Servlets, Inheritance)

TM4 Central Station. User Manual / brugervejledning K2070-EU. Tel Fax

Dannelse af PDF-dokumenter

How Long Is an Hour? Family Note HOME LINK 8 2

Transkript:

7 Introduktion til Smalltalk. Designbeslutninger. Message passing. Klassebegrebet. Metodebegrebet. Forskellige slags variable. Nedarvning og metodeopslag. Instans og klassevariable ift. nedarvning. Blokbegrebet. Blokke og kontrolstrukturer. Kurt Nørmark, Aalborg Universitet 11/6/96 s. 113 Nogle eksempler og slides i dette kapitel er lånt eller inspireret fra slides, som Kasper Østerbye har benyttet i tidligere versioner af dette kursus. 113

Et dynamisk, objekt-orienteret sprog. Smalltalk = Simula - Algol + Lisp. Har overtaget, og videreudviklet de objekt-orienterede ideer fra Simula. Populariserede de objekt-orienterede ideer dramatisk sidst i 70-erne og først i 80-erne. Understøtter dynamisk typing, på samme måde som Lisp og CLOS. Har ligesom flere Lisp-systemer en særdeles veludviklet programmeringsomgivelse omkring sig. Kurt Nørmark, Aalborg Universitet 11/6/96 s. 114 114

Grundlæggende designbeslutninger. Good design: A system should be built with a minimum set of unchangeble parts; those parts should be as general as possible; and all parts should be held in a general framework. Personal mastery: If a system is to serve the creative spirit, it must be entirely comprehensible to a single individual. Storage Management: To be truely object-oriented, a computer system must provide automatic storage management. Classification: A language must provide means for classifying similar objects, and for adding new classes of objects on equal footing with the kernel classes. Operating System: An operating system is a collection of things that don t fit into a language. There shouldn t be one. Messages: Computing should be viewed as an intrinsic capability of objects that can be uniformly invoked by sending messages. Uniform Metaphor: A language should be designed around a powerful metaphor that can be uniformly applied in all areas. Polymorphism: A program should specify only the behavior of objects, not their representation. Factoring: Each independent component in a system should appear in only one place. Natural Selection: Languages and systems that are of sound design will persist, to be supplanted only by better ones. Kurt Nørmark, Aalborg Universitet 11/6/96 s. 115 I det ovenstående har jeg i spredt orden fastholdt nogle udsagn om Smalltalk design principper, som stammer fra en artikel skrevet af Daniel Ingals ( Design Principles Behind Smalltalk, BYTE, August 81). Polymorfi: Synspunktet er, at et program ikke skal erklære variable og parametre statisk af en bestemt type. Det er mere fleksibelt at erklære, at det kan svare på en nærmere bestemt mængde af beskeder. 115

Message passing metaforen. Objekter interagerer med hinanden, udelukkende ved at sende beskeder. En besked lokaliserer (ved dynamisk opslag) en metode. En metode returnerer altid en værdi til afsenderen. Forskellige former af beskeder: Unær besked Binær besked Nøgleordsbesked Afsendingsregler: Unære beskeder sendes først, og associerer fra venstre. Binære beskeder sendes dernæst, og associerer fra venstre. Ingen indbyrdes prioriteringer. Nøgleordsbeskeder sendes tilsidst. Paranteser nødvendige for kombination med andre nøgleordsbeskeder. Paranteser kan ændre den indbyrdes ordning af unære, binære og nøgleordsbeskeder. 5 fak 7 fak negate 3 + 5 (3-5) > (a * 4) 3 + 4 * 5 printer display: Anders And rectangle rotateangle: 45 indirection: positive. window showtext: Title infont: times indented: 15 rectangle strech: circle radius + 3 Kurt Nørmark, Aalborg Universitet 11/6/96 s. 116 Beskeden rectangle strech: circle radius + 3 er interessant hvad angår parsning. Først sendes den unære besked radius til det objekt, der refereres af circle. Dernæst sendes beskeden + til resultat af circle radius. Slutteligt sendes nøgleordsbeskeden strech: til rektanglet, som refereres af rectangle, med parameteren, som er resultatet af additionen. Nøgleordbeskeder er interessante. Der er ligheder til nøgleordsparametre i andre sprog, men også forskelle. Konkatenationen af nøgleordene kan opfattes som metodens navn. Det er ikke muligt (som i Common Lisp) at benytte nøgleordene i vilkårlig rækkefølge i et kald. Eksempelvis er showtext:indented:infont en anderledes besked end showtext:infont:indented. 116

Klassebegrebet. En klasse karakteriseres primært af Én superklasse. En mængde af instansvariable. En mængde af klassevariable. En uformel kategori, hvortil klassen hører. Klassedefinition via nøgleordsbesked til eksisterende superklasse. superclass subclass: #Class instancevariablenames: v1 v2 classvariablenames : pooldictionaries: category: class category Information hiding Alle instansvariable er private i klassen. Alle metoder, som tilføjes klassen, er tilgængelige for alle klienter. Pr. konvention kan der være en kategori af metoder, der er private. Kurt Nørmark, Aalborg Universitet 11/6/96 s. 117 Ovenstående viser klasseanatomien på to forskellige måder: Som en prosabeskrivelse og som en besked til superklassen af den nye klasse Vi vil senere vende tilbage til hvordan klasser (og metoder) kan tilgåes via værktøj i programmeringsomgivelsen. 117

Metodebegrebet. En metode består af: Et message pattern ( ~ metodenavn og parameterprofil). En kommentar: "kommentar" En sekvens af udtryk: afsendelse af beskeder. Mulighed for assignment (med assignmentprefix). Mulighed for angivelse af returværdi. Default: modtagerobjektet af den besked, hvis metode vi udfører. Mulighed for kaskade af beskeder til samme objekt. Metoder specialiserer kun på én parameter. En metode tilhører netop én klasse. En metode aktiveres ved at sende en besked til en instans af denne klasse (eller til en instans af en subklasse) med en besked der modsvarer metodens selektor. Der anvendes imperativ metodekombination (mellem metoder med samme selektor). Kurt Nørmark, Aalborg Universitet 11/6/96 s. 118 118

Eksempler på klasse og metoder. class name Complex superclass name Object instance variable names real imag class methods instance creation newwithreal: rl andimaginary: im "Return a new complex number, corresponding to rl + i im." ^Complex new realpart: rl; imaginarypart: im instance methods accessing realpart "return the real part of a complex number" ^real realpart: rl "assign a new real part of this complex number" real := rl arithmetic + anothercomplex "add anothercomplex to this complex number" realsum imagsum realsum := real + anothercomplex realpart. imagsum := imag + anothercomplex imaginarypart. ^Complex newwithreal: realsum andimaginarypart: imagsum Kurt Nørmark, Aalborg Universitet 11/6/96 s. 119 Ovenstående viser et skematisk eksempel på en (ukomplet) klasse i Smalltalk samt et antal metoder i denne klasse. Klassen er Complex (komplekse tal). Man ser at der er to hovedafdelinger af metoder: klasse metoder og instansmetoder. Klassemetoderne anvendes primært til at instantiere et objekt. Dette har vi meget mere at sige om i næste kapitel (Metaklasser i Smalltalk). I dette kapitel vil vi koncentrere os om instansmetoderne (her realpart, realpart: og +). Man ser endvidere at der er underafdelinger af instans metoder, her accessing og arithemtic. Dette er en uformel opdelning af metoderne i kategorier, som afspejles i bl.a. systembrowseren (se tidligere i dette kapitel). At opdelningen er uformel betyder, at kategorierne ikke har nogen semantisk konsekvens for et Smalltalk program. Bemærk at der ovenfor benyttes en skematisk opstilling af klassen, dens instansvariable, og dens metoder. Der findes ikke en syntaktisk form, som tillader os at udtrykke alt dette. I praksis benytter vi et browserværktøj til at definere de enkelte bestanddele. Lidt mindre bekvemt kunne vi også definere det hele ved at sende beskeder til klasser. 119

Variable. Lokale variable i metoder. De formelle parametre er ikke lokale variable: De er read-only. Med lille begyndelsesbogstav. Instansvariable i objekter. Navngivne eller indicerede. Navngivne instansvariable kun leksikalsk tilgængelige i metoder. Med lille begyndelsesbogstav. Globale variable. Hvert klassenavn bliver automatisk en global variabel, der refererer klassen, som objekt. Med stort begyndelsesbogstav. Klassevariable Med stort begyndelsesbogstav. Pool variable. Default puljer tilgængelige for alle klasser: Smalltalk (pulje delt af alle klasser): de globale variable. Klassevariablene (klassespecifik pulje). Andre puljer kan skabes efter behov. Med stort begyndelsesbogstav. Kurt Nørmark, Aalborg Universitet 11/6/96 s. 120 Hvorvidt et objekt har indicerede instansvariable eller ej styres af den besked, som sendes til superklassen. Når beskeden variablesubclass:instancevariablenames:classvariablenames:pooldictioraries:category: imodsætning til subclass:instancevariablenames:classvariablenames:pooldictioraries:category: sendes til en klasse skabes en ny klasse, hvori der er indicerede instansvariable. 120

Nedarvning og Metodeopslag. Smalltalk tillader udelukkende enkelt-nedarvning. Self og super er pseudo-variable, der kan anvendes i metoder. Self refererer til modtager-objektet af en besked, uanset den aktiverede metodes klasse-tilhørsforhold. Super referer ligesom self til modtager-objektet af en besked. Men beskeder sendt til super starter metodeopslaget i superklassen til den metode, hvori super forekommer. Super tillader imperativ metodekombination mellem metoder med samme selektor. R meth. S meth R S Kurt Nørmark, Aalborg Universitet 11/6/96 s. 121 A B C D x x x metode med selektor x meth self x. super x Hvilke metoder refereres af ovenstående, når meth er i hhv. A, B, C eller D? Fortolkningen af super må ikke forveksles med beskeder sendt til super starter metodeopslaget i superklassen til modtagerobjektets klasse. Dette er en forkert fortolkning! Svar på spørgsmål fra sliden: Meth placeret i klasse r meth D C B A self x super x self x super x self x super x self x super x fejl fejl B B B A B fejl s meth D B D B D A D fejl Tabellen indeholder klassen af metoden, som aktiveres af self x hhv super x fra hhv r meth og s meth. Som illustreret er r en instans af C, og s en instans af D i hele scenariet. Fra søjle til søjle flytter vi på metoden meth. De fede klassenavne i tabellen er specielt bemærkelsesværdige. 121

Instans og klassevariable ved nedarvning. Class A iv1 iv1 iv1 Cv1 Metode ma lv1 Tilgang til lv1, iv1, Cv1 iv1 iv2 Class B iv2 Cv2 Metode mb lv2 Tilgang til lv2, iv1, iv2, Cv1, Cv2 iv1 iv2 klasse-superklasse relation. Instans klasse relation. Kurt Nørmark, Aalborg Universitet 11/6/96 s. 122 Denne slide illustrerer, hvilke instans variable (iv..), klassevariale (Cv..) og lokale variable (lv..) der er tilgængelige i de to metoder i hhv. klassen A og klassen B. Bemærk, at uden for metoderne i klasserne, er der ikke leksikalsk adgang til variablene. Der skal laves en metode for hver variabel, hvis værdi blot ønskes returneret til en en klient. 122

Blokbegrebet. En blok svarer til en closure: Et parametriseret udtryk (en sekvens af beskeder), samt den omgivelse, hvori blokken er defineret. En blok er (ligesom alle andre objekter) et 1. klassesobjekt. Statisk navnebinding: Frie navne i en blok bindes i blokkens statiske omgivelser. Ifølge Smalltalk tankegang er en blok en sekvens af handlinger, hvis udførelse er udsat. En blok er et objekt, som kan udføres ved at sende en bestemt besked, value, til blokken. Blokke kan benyttes til at definere traditionelle og egne kontrolstrukturer. Eksempler: Blok uden parametre. b1 := [index := index + 1. array at: index put: 0]. b1 value Blok med parametre. b2 := [ :newelement index := index + 1. list at: index put: newelement]. b2 value: 3 Kurt Nørmark, Aalborg Universitet 11/6/96 s. 123 En blok er instans af klassen BlockContext. Det skal bemærkes, at hvis der returneres en værdi fra en blok med ^x, terminerer og returnerer metoden, hvori blokken er defineret (altså metoden, hvori blokke findes som et udtryk). Dette sker uanset hvorfa blokken dynamisk set bliver aktiveret. (Man skal erindre, at en blok kan flyde omkring, lige som alle ande objekter, og derfor kan konventionen omkring returnering forekomme overraskende). 123

Kontrolstrukturer med blokke. Selektion (ala if-then-else) realiseres ved at sende en besked til en boolsk værdi med to blokke som parametre. Iteration (ala while) realiseres ved at sende en besked til en blok, med en anden blok som parameter. (a < b) iftrue: [ max := b] iffalse: [ max := a] [found not] whiletrue: [index incr. found := (self at: index) = x] iftrue: trueblock iffalse: falseblock self subclassresponsibility Boolean I klassen blockcontext: whiletrue: ablock (self value) iftrue: [ablock value. self whiletrue: ablock] True iftrue: trueblock iffalse: falseblock trueblock value False iftrue: trueblock iffalse: falseblock falseblock value Kurt Nørmark, Aalborg Universitet 11/6/96 s. 124 Bemærk at True og False i figuren ovenfor er klasser (subklasser af Boolean). De boolske metoder annonceres i klassen Boolean, men subklasserne gøres ansvarlige for deres egentlige realisering. Subklasserne redefinerer derfor disse metoder. 124

Flere eksempler på metoder: factorial i klassen Integer. factorial "Answer the factorial of the receiver. Fail if the receiver is less than 0. For example, 6 factorial == 6*5*4*3*2*1." tmp self < 0 iftrue: [^self class raise: #domainerrorsignal receiver: self selector: #factorial errorstring: 'Factorial is invalid on negative numbers']. tmp := 1. 2 to: self do: [:i tmp := tmp * i]. ^tmp Kurt Nørmark, Aalborg Universitet 11/6/96 s. 125 125

Flere eksempler på metoder: gcd i klassen Integer. gcd: aninteger "Answer the greatest common divisor of the receiver and aninteger." "Euclid's algorithm." m n t m := self abs max: aninteger abs. n := self abs min: aninteger abs. [n = 0] whilefalse: [t := n. n := m \\ n. m := t]. ^m Kurt Nørmark, Aalborg Universitet 11/6/96 s. 126 126

Flere kontrolstrukturer med blokke. 0.7 perhaps: [x := x + 1] I klassen Float: perhaps: ablock Udfør blokken med sandsynlighed self (Float random < self) iftrue: [ablock value] 3 to: 5 do: [:i res := i * i + res] I klassen Integer: to: last do: ablock Udfør blokken for indeces fra self til last i i := self. [i <= last] whiletrue: [ablock value: i. i := i + 1] Kurt Nørmark, Aalborg Universitet 11/6/96 s. 127 Det øverste eksempel er en lidt særartet kontrolstruktur, i hvilken vi udfører en blok med en ønsket sandsynlighed. Det nederste eksempel svarer til Pascal s for i := a to b do statement. 127

Mapning og filtrering af samlinger. Smalltalk indeholder en rig samling af klasser, som realiserer forskellige former for samlinger af objekter. Alle disse er subklasser af klassen Collection. Der findes metoder i klassen Collection, der svarer nøje til de klassiske højere-ordens funktioner på lister. mapning: filtrering: venstre akkumulering: #(2 4 6) collect: [:el el * 2] #(4 8 12 ) #(1 2 3 4 5) select: [:el el even] #(2 4 ) #( 2 3 4 5) inject: 1 into: [:sum :el sum - el ] -13 Kurt Nørmark, Aalborg Universitet 11/6/96 s. 128 Venstre akkumuleringen svarer til ((((1-2) -3) -4) -5). 128

Metoder for mapning, filtrering og akkumulering. collect: ablock "Evaluate ablock with each of the values of the receiver as the argument. Collect the resulting values into a collection that is like the receiver. Answer the new collection." newcollection newcollection := self species new. self do: [:each newcollection add: (ablock value: each)]. ^newcollection select: ablock "Evaluate ablock with each of the receiver's elements as the argument. Collect into a new collection like the receiver, only those elements for which ablock evaluates to true. Answer the new collection." newcollection newcollection := self species new. self do: [:each (ablock value: each) iftrue: [newcollection add: each]]. ^newcollection inject: thisvalue into: binaryblock "Accumulate a running value associated with evaluating the argument, binaryblock, with the current value and the receiver as block arguments. The initial value is the value of the argument, thisvalue." nextvalue nextvalue := thisvalue. self do: [:each nextvalue := binaryblock value: nextvalue value: each]. ^nextvalue Kurt Nørmark, Aalborg Universitet 11/6/96 s. 129 Alle metoder ovenfor findes i den meget generelle klasse Collection. Læg mærke til, hvordan alle metoderne benytter metoden med selektor do:. Metoden do: i klassen Collection ser således ud: do: ablock "Evaluate ablock with each of the receiver's elements as the argument." self subclassresponsibility Det vil altså sige, at vi ikke kan implementere denne uden at vide noget mere specifikt om, hvilken slags Collection vi har med at gøre. Hvis vi ved, at vi har men en sekventiel samling at gøre, kan vi implementere do: som følger: do: ablock "Evaluate ablock with each of the receiver's elements as the argument." 1 to: self size do: [:i ablock value: (self at: i)] Beskeden to:do:, som sendes til et tal, har vi tidligere studeret. 129

Smalltalk programmeringsomgivelsen. Smalltalk er en workspace-baseret omgivelse ( image ). Et fælles rum for objekter, værktøj og programbeskrivelse. Workspacet kan gøres persistent mellem interaktive sessioner. Programbegrebet er svagt. File ind og file ud transporterer udvalgte dele af workspacet til og fra kildefiler. Værktøj i omgivelsen: Systembrowseren og andre former for browsere. Workspaces. Debugger. mv. Kurt Nørmark, Aalborg Universitet 11/6/96 s. 130 130

Systembrowseren. Tilføje klasse (ved skabelon udfyldelse). Fjerne klasse. File ud. Vise definition/hierarki/kommentar Flytte til anden kategori. Krydsreference på variable og klasse. Tilføje/fjerne kategori. File ud. Omdøbe kategori. Søge efter klasse. Klasse kategorier Editeringsrude Klasse navne Tilføj/fjerne kategori. File ud. Omdøbe kategori. Søge efter metode. Metode kategorier Tilføje metode ved skabelon udfyldelse. Flytte metode til anden klasse. Fjerne metode. Krydsreference Senders: Hvem anvender metoden? Implementors: Hvem implementerer ellers metoden? Metode navne Editerings operationer. Evaluerings operationer. Inspections operationer. Accept. Forklaring. Kurt Nørmark, Aalborg Universitet 11/6/96 s. 131 131