19. januar 2012 Noen punkter fra i går



Like dokumenter
UML 1. Use case drevet analyse og design Kirsten Ribu

Introduksjon til objektorientert. programmering. Hva skjedde ~1967? Lokale (og globale) helter. Grunnkurs i objektorientert.

Kap3: Klassemodellering

Brukerkrav og use case diagrammer og -tekst 19. januar Agenda. Brukerkrav og use case. Diagrammer Tekst.

INF1000: Forelesning 7. Konstruktører Static

Spesifikasjon av Lag emne

Etter uke 9 skal du. Introduksjon til objektorientert programmering. Innhold. Klasser som abstraksjoner

Ansvarsdrevet OO: CRC og UML Sekvensdiagrammer

Lykke til! Eksamen i fag TDT4140 Systemutvikling NTNU Norges teknisk-naturvitenskapelige universitet

Eksamen. Objektorientert Programmering IGR 1372

Socket og ServerSocket

INF1000: Forelesning 7

Hensikten med denne delen av kurset. Objektets egenskaper. Objektorientering hva er det? Best practises ved programvareutvikling. Kravspesifikasjonen

I dag UML. Domenemodell visualisering av konsepter. Eksempel. Hvordan finne domeneklasser?

UNIVERSITETET I OSLO

Tittel Objektorientert systemutvikling 2

Oppgave 1: Multiple choice (20 %)

Universitetet i Oslo Institutt for informatikk. Eskild Busch. UML hefte

Tom Røise IMT2243 : Systemutvikling 1. IMT2243 Systemutvikling 26. februar Klassediagrammet. Klasse

Eksekveringsrekkefølgen (del 1) Oppgave 1. Eksekveringsrekkefølgen (del 2) Kommentar til oppgave 1. } // class Bolighus

Klasser. Webprogrammering høsten Objekter. Eksempelklasser og -objekter. 2 of :56. 1 of :56

Hvordan designe en ER-modell med MS-VISIO

UKE 13 Mer UML modellering. Gruppetime INF1055 Julie Hagen Nilsen & Maria Stolinski

Motivasjon: Hvorfor modellere? Systemutvikling med UML Del 2 (forelesning 4-6) Repetisjon: Egenskapsrommet. Egenskapsrommet

Object interaction. Innhold. Abstraksjon Grunnleggende programmering i Java Monica Strand 3. september 2007.

Introduksjon til objektorientert programmering

Innhold. INF1000 Høst Unified Modeling Language (UML) Unified Modeling Language (UML)

Øvingsforelesning TDT4105

INF1000 Metoder. Marit Nybakken 16. februar 2004

Innhold. Forord Det første programmet Variabler, tilordninger og uttrykk Innlesing og utskrift...49

UKE 11 UML modellering og use case. Gruppetime INF1055

INF1010 Arv. Marit Nybakken 2. februar 2004

Tittel Objektorientert systemutvikling 1. Eksamenstid, fra-til Ant. oppgaver 6

Læringsmål for forelesningen

Gruppenavn. Prosjektnavn Beskrivelse av design For Navn på systemet. Versjon <1.0>

Fra krav til modellering av objekter

1. Modellering av objektorienterte systemer

Algoritmer og datastrukturer Kapittel 11 - Delkapittel 11.2

Fra krav til objekter. INF1050: Gjennomgang, uke 05

Eksamen i Internetteknologi Fagkode: ITE1526

HØGSKOLEN I SØR-TRØNDELAG

TOD063 Datastrukturer og algoritmer

Fra krav til objektdesign

Hvorfor objektorientert programmering? Objektorientert programmering i Python: Introduksjon. Læringsmål uke 7. Undervisning og pensum IN1000

Oblig 4 (av 4) INF1000, høsten 2012 Værdata, leveres innen 9. nov. kl

Kapittel 7: Mer om arv

Klasser, objekter, pekere og UML. INF gruppe 13

Spesifikasjon av Lag emne. Kursregistrering bruksmønstermodell (ny versjon) Dagens forelesning. Fra krav til objektdesign

EKSAMEN I INF244: OBJEKTORIENTERT PROGRAMVAREUTVIKLING I BACHELORSTUDIET I IT OG INFORMASJONSSYSTEMER BACHELORSTUDIET I IT OG ENTREPRENØRSKAP

Hvorfor objektorientert programmering?

(MVC - Model, View, Control)

Sensur-veiledning INF1000 h 2013 (fasit) am - 6. des. 2013

Husk at du skal ha to vinduer åpne. Det ene er 'Python Shell' og det andre er for å skrive kode i.

Use Case-modellering. INF1050: Gjennomgang, uke 04

Kapittel 1: Datamaskiner og programmeringsspråk

Objektorientert design av kode. Refaktorering.

Modellering av data. Magnus Karge, Kartverket

UNIVERSITETET I OSLO

Læringsmål for forelesningen

81,9(56,7(7(7,26/2 'HWPDWHPDWLVNQDWXUYLWHQVNDSHOLJHIDNXOWHW

Metode for ansvarsdrevet OO. Dagens forelesning. Delegering av ansvar i en trelagsarkitektur

En oppsummering (og litt som står igjen)

Kompilering Statiske Syntaksanalyse Feilsjekking Eksempel Oppsummering

Skilpaddefraktaler Erfaren Python PDF

INF1010 UML. Marit Nybakken 26. januar 2004

UML-Unified Modeling Language

Beskjed fra Skagestein

Løsningsforslag til Case. (Analysen)

Dagens forelesning. Java 13. Rollefordeling (variant 1) Rollefordeling (variant 2) Design av større programmer : fordeling av roller.

EKSAMEN I FAG TDT4100 Objekt-orientert programmering. Fredag 3. juni 2005 KL

Læringsmål uke 7. Objektorientert programmering i Python: Introduksjon. Innhold uke 7. Lite tilbakeblikk: Programflyt og skop

1. Designe ER-modeller med MS Visio

J2EE. CMP Entity Beans, Transaksjoner, JSP

Metode for ansvarsdrevet OO med UML. Dagens forelesning. Hovedflyt for Meld på kurs. Delegering av ansvar i en trelagsarkitektur

Løsningsforslag ukeoppg. 9: okt (INF Høst 2011)

Gjennomgang av eksamen H99

LITT OM OPPLEGGET. INF1000 EKSTRATILBUD Stoff fra uke September 2012 Siri Moe Jensen EKSEMPLER

EKSAMENSFORSIDE SKRIFTLIG EKSAMEN

Eksamen Objektorientert Programmering 2013

INF1000 Prøveeksamen Oppgave 7 og 9

Løsningsforslag Test 2

EKSAMEN. Objektorientert programmering

Oblig 4Hybelhus litt mer tips enn i oppgaven

Hva er en algoritme? Har allerede sett på mange algoritmer til nå i IT1101. Forholdet mellom en algoritme og et program. Algoritme program prosess

Conference Centre Portal (CCP)

Hva gjøres i design? 19. september 2002, Tore Berg Hansen, TISIP

Bakgrunn. Kurset krever ingen spesielle forkunnskaper om modellering.

INF Forelesning oppsummering forts. Et meget enkelt banksystem. Oppsummering om klasser, objekter, pekere og.

Dagens tema. Hva er kompilering? Anta at vi lager dette lille programmet doble.rusc (kalt kildekoden): Hva er kompilering?

UNIVERSITETET I OSLO

Evaluering av IT-systemer Introduksjon. Monica Kristiansen

Objekt med Java. Harald Yndestad Høgskolen i Ålesund

UML- Use case drevet analyse og design. Domenemodeller Sekvensdiagrammer Use case realisering med GRASP patterns Klassediagram - designmodeller

Diverse eksamensgaver

Flere design mønstre. 19. september 2002, Tore Berg Hansen, TISIP

I denne oppgaven blir du introdusert for programmeringsspråket JavaScript. Du skal gjøre den klassiske oppgaven Hei verden, med en katt.

Objekter. Uke 8 - Objekter, klasser og pekere. Verden består av mange objekter, noen ganske like, noen ulike. Klasser og objekter i verden

Shellscripting I. Innhold

Metode for ansvarsdrevet OO. Dagens forelesning. Delegering av ansvar i en trelagsarkitektur

Metode for ansvarsdrevet OO. Dagens forelesning. Delegering av ansvar i en trelagsarkitektur

Transkript:

1 19. januar 2012 Noen punkter fra i går Godkjente øvinger og prosjekt er obligatorisk for å få gå opp til eksamen Noen myter om systemutvikling Ariane 5 ulykken 2 Noen myter om systemutvikling Myte 1: Systemet må tilpasse seg datamaskinens krav (bruke få ressurser, være tilpasset fysisk arkitektur) Informasjonssystemet skal være tilpasset bruker og deres krav! Nøkkelord: Evolusjonær utvikling, evaluering av prototyper, brukergrensesnittdesign Myte 2: De beste datasystemer er de du selv bygger opp fra grunnen ( Not Invented Here -syndromet) Studier viser at det er overraskende lite gjenbruk av funksjonalitet eller kode mellom prosjekter! Undersøk først om det finnes standardprogrammer (eller et sett med standardkomponenter) som allerede dekker (deler av) behovene, eller som enkelt kan tilpasses til å dekke behovene Nøkkelord: komponentbasert utvikling 1

3 Myte 3: datasystemet skal automatisere gamle rutiner Systemutvikling dreier seg også om å identifisere forbedringsmuligheter og finne nye løsninger for å oppnå bestemte mål. Ofte vil innføring av nye datasystemer omlegge rutinene i en bedrift totalt Nøkkelord: Målanalyse, BPR Eksempler: Bank, bestille flybillett 4 En myte til Myte 4: Programvare er så fleksibel at den alltid kan endres senere 2

5 Noen flere myter Myte 5: Løsningen ligger i å bruke riktige verktøy A fool with a tool is still a fool Myte 6: Ansett flere programmerere hvis prosjektet er forsinket Brook s Mythical Man-Month: adding people to a late software project makes it later : Opplæring Antall kommunikasjonskanaler = n(n-1)/2 6 Faren ved gjenbruk: the Ariane 5 accident, 1996 Single root cause failure! The bug : attitude deviation stored as 2-byte integer (max value 65,535) in stead of 4-byte (max value 4,294,967,295) SW module was reused from Ariane 4 Insufficient V&V of detailed requriements: larger attitude deviation tolerated in Ariane 5 than in Ariane 4 Ariane 5 production cost 10 years and $7 billion; luckily no victims because it was unmanned. 65,535 = 00000000 00000000 11111111 11111111 65,536 = 00000000 00000001 00000000 00000000 3

7 Introduksjon til objektorientert analyse og design 8 Mål med forelesningen Formål Introdusere objektorientert design med UML Foreløpig innføring i klassediagram Opplæringsmål Grunnleggende om programvaredesign Hva er et design Hva er funksjonen til et design Når i utviklingsprosessen lager vi design Grunnleggende om klassediagram i UML Klasser med attributter og operasjoner Assosiasjoner mellom klasser og multiplisitet Generalisering og abstrakte klasser 4

9 Agenda Hva er et design? Fra kode til diagram: Et praktisk eksempel Design forklart Funksjonen til et design Utarbeidelse av klassediagram Kort om klassediagram Praktisk eksempel Avhengigheter og multiplisitet Generalisering og abstrakte klasser Praktiske råd om objektorientert design 10 OOAD i livsløpsperspektiv Krav Design Konstruksjon Testing Vedlikehold Her er vi i nå 5

11 Hva er et design? public class FlatFile { public Group load(file afile) throws java.io.ioexception, ParseException { Group agroup = new Group(); FileReader afilereader = new FileReader(aFile); BufferedReader areader = new BufferedReader(aFileReader); String line = areader.readline(); while (line!= null) { agroup.addperson(assembleperson(line)); line = areader.readline(); return agroup; private Person assembleperson(string line) throws ParseException { StringTokenizer tokenizer = new StringTokenizer(line, ";"); String name = tokenizer.nexttoken(); String email = tokenizer.nexttoken(); Date date = parsedate(tokenizer.nexttoken()); Person aperson = new Person(); aperson.setname(name); aperson.setemail(email); aperson.setbirthdate(date); return aperson; 12 Hva er et design? public class FlatFile { public Group load(file afile) throws java.io.ioexception, ParseException { Group agroup = new Group(); FileReader afilereader = new FileReader(aFile); BufferedReader areader = new BufferedReader(aFileReader); String line = areader.readline(); while (line!= null) { agroup.addperson(assembleperson(line)); line = areader.readline(); return agroup; private Person assembleperson(string line) throws ParseException { StringTokenizer tokenizer = new StringTokenizer(line, ";"); String name = tokenizer.nexttoken(); String email = tokenizer.nexttoken(); Date date = parsedate(tokenizer.nexttoken()); Person aperson = new Person(); aperson.setname(name); aperson.setemail(email); aperson.setbirthdate(date); return aperson; 6

13 Hva er et design? public class FlatFile { public Group load(file afile) throws java.io.ioexception, ParseException { Group agroup = new Group(); FileReader afilereader = new FileReader(aFile); BufferedReader areader = new BufferedReader(aFileReader); String line = areader.readline(); while (line!= null) { agroup.addperson(assembleperson(line)); line = areader.readline(); return agroup; private Person assembleperson(string line) throws ParseException { StringTokenizer tokenizer = new StringTokenizer(line, ";"); String name = tokenizer.nexttoken(); String email = tokenizer.nexttoken(); Date date = parsedate(tokenizer.nexttoken()); Person aperson = new Person(); aperson.setname(name); aperson.setemail(email); aperson.setbirthdate(date); return aperson; 14 Hva er et design? public class FlatFile { public Group load(file afile) throws java.io.ioexception, ParseException { Group agroup = new Group(); FileReader afilereader = new FileReader(aFile); BufferedReader areader = new BufferedReader(aFileReader); String line = areader.readline(); while (line!= null) { agroup.addperson(assembleperson(line)); line = areader.readline(); return agroup; private Person assembleperson(string line) throws ParseException { StringTokenizer tokenizer = new StringTokenizer(line, ";"); String name = tokenizer.nexttoken(); String email = tokenizer.nexttoken(); Date date = parsedate(tokenizer.nexttoken()); Person aperson = new Person(); aperson.setname(name); aperson.setemail(email); aperson.setbirthdate(date); return aperson; 7

15 Hva er et design? 16 Design forklart Design: Strukturen til et programsystem Implisitt design: Strukturen til koden Eksplisitt design: Diagrammer som beskriver strukturen til et programsystem med en spesifikk notasjon Notasjon Språk bestående av grafiske symboler for å beskrive (modellere) programvaresystem Regler for hvordan de grafiske symbolene kan brukes og knyttes sammen UML: Notasjon for objektorientert design 8

17 Design forklart Det er dette vi mener med et design i dette kurset Design: Strukturen til et programsystem Implisitt design: Strukturen til koden Eksplisitt design: Diagrammer som beskriver strukturen til et programsystem med en spesifikk notasjon Notasjon Språk bestående av grafiske symboler for å beskrive (modellere) programvaresystem Regler for hvordan de grafiske symbolene kan brukes og knyttes sammen UML: Notasjon for objektorientert design 18 Funksjonen til et design Hvordan lager vi et design? Gjenskape design ('reverse engineering') med utgangspunkt i kode Konstruksjonsplanlegging ('forward engineering') med utgangspunkt i krav Hvorfor lager vi et design? Gjøre et design for å kommunisere designet til andre Gjøre et design for å forstå krav eller kode (for oss selv og andre) Typer design Kladd Konstruksjonsplan (Programmeringsspråk) 9

19 Agenda Hva er et design? Fra kode til diagram: Et praktisk eksempel Design forklart Funksjonen til et design Design av klassediagram Kort om klassediagram Praktisk eksempel Avhengigheter og multiplisitet Generalisering og abstrakte klasser Praktiske råd om objektorientert design 20 Klassediagram Hensikten med diagrammet Beskrive klassene i systemet Beskrive hvordan klassene forholder seg til hverandre (relasjoner) Klasse Strukturen på fenomenet (i motsetning til objekt som er instansen av fenomenet) Attributter Operasjoner 10

21 Grunnelementene i et klassediagram Argument-liste Retur-type Diagram Operasjons-navn Klassenavn Attributter Operasjoner 22 Praktisk eksempel: Del 1 Meldingsbroen skal motta meldinger fra telefonsvarere og oversette meldingene til kommandoer. Kommandoene skal meldingsbroen sende til kjernesystemet. Meldingsbroen skal oversette responsen fra kjernesystemet til en melding som sendes tilbake til telefonsvareren. Meldingsbroen skal lytte på innkommende oppkoblinger fra telefonsvarerne. En telefonsvarer kan sende flere meldinger før den kobler seg fra meldingsbroen. Telefonsvareren skal sende en avslutningsmelding til meldingsbroen når den er ferdig med å sende meldinger. Meldingsbroen skal selv avslutte en oppkobling dersom det ikke har mottatt en melding fra telefonsvareren på 60 sekunder. Meldingsbroen skal ikke akseptere flere enn 10 oppkoblinger fra telefonsvarerne. 11

23 Praktisk eksempel: Del 1 Meldingsbroen skal motta meldinger fra telefonsvarere og oversette meldingene til kommandoer. Kommandoene skal meldingsbroen sende til kjernesystemet. Meldingsbroen skal oversette responsen fra kjernesystemet til en melding som sendes tilbake til telefonsvareren. Meldingsbroen skal lytte på innkommende oppkoblinger fra telefonsvarerne. En telefonsvarer kan sende flere meldinger før den kobler seg fra meldingsbroen. Telefonsvareren skal sende en avslutningsmelding til meldingsbroen når den er ferdig med å sende meldinger. Meldingsbroen skal selv avslutte en oppkobling dersom det ikke har mottatt en melding fra telefonsvareren på 60 sekunder. Meldingsbroen skal ikke akseptere flere enn 10 oppkoblinger fra telefonsvarerne. 24 Praktisk eksempel: Del 1 Meldingsbroen skal motta meldinger fra telefonsvarere og oversette meldingene til kommandoer. Kommandoene skal meldingsbroen sende til kjernesystemet. Meldingsbroen skal oversette responsen fra kjernesystemet til en melding som sendes tilbake til telefonsvareren. Meldingsbroen skal lytte på innkommende oppkoblinger fra telefonsvarerne. En telefonsvarer kan sende flere meldinger før den kobler seg fra meldingsbroen. Telefonsvareren skal sende en avslutningsmelding til meldingsbroen når den er ferdig med å sende meldinger. Meldingsbroen skal selv avslutte en oppkobling dersom det ikke har mottatt en melding fra telefonsvareren på 60 sekunder. Meldingsbroen skal ikke akseptere flere enn 10 oppkoblinger fra telefonsvarerne. 12

25 Klassediagram for meldingsbro 26 Klassediagram til kode class Oppkobling { Telefonsvarer telefonsvarer; Kjernesystem kjernesystem; Oppkobling(Telefonsvarer telefonsvarer, Kjernesystem kjernesystem) { this.telefonsvarer = telefonsvarer; this.kjernesystem = kjernesystem; 13

27 Klassediagram til kode class Oppkobling { Telefonsvarer telefonsvarer; Kjernesystem kjernesystem; Oppkobling(Telefonsvarer telefonsvarer, Kjernesystem kjernesystem) { this.telefonsvarer = telefonsvarer; this.kjernesystem = kjernesystem; Melding motta() { 28 Klassediagram til kode class Oppkobling { Telefonsvarer telefonsvarer; Kjernesystem kjernesystem; Oppkobling(Telefonsvarer telefonsvarer, Kjernesystem kjernesystem) { this.telefonsvarer = telefonsvarer; this.kjernesystem = kjernesystem; Melding motta() { Respons send(kommando enkommando) { 14

29 Klassediagram til kode class Oppkobling { Telefonsvarer telefonsvarer; Kjernesystem kjernesystem; Oppkobling(Telefonsvarer telefonsvarer, Kjernesystem kjernesystem) { this.telefonsvarer = telefonsvarer; this.kjernesystem = kjernesystem; Melding motta() { Respons send(kommando enkommando) { void sendtilbake(melding enmelding { 30 Klassediagram til kode class Oppkobling { Telefonsvarer telefonsvarer; Kjernesystem kjernesystem; Oppkobling(Telefonsvarer telefonsvarer, Kjernesystem kjernesystem) { this.telefonsvarer = telefonsvarer; this.kjernesystem = kjernesystem; Melding motta() { Respons send(kommando enkommando) { void sendtilbake(melding enmelding { void koblefra() { 15

31 Assosiasjoner og multiplisitet Assosiasjoner Viser relasjonen til en annen klasse Hel linje mellom to klasser Enveisrelasjon: Linjen er rettet fra kildeklassen til målklassen Toveisrelasjon: Pil i begge ender Multiplisitet Indikasjon på hvor mange objekter som fyller attributtet 1, 0..1, * 32 Klassediagram for meldingsbro 16

33 Assosiasjoner for meldingsbro 34 Multiplisitet i meldingsbro 17

35 Praktisk eksempel: Del 2 En melding består av et meldingshode og en meldingskropp på dette formatet: #<meldingshode>#<meldingskropp> Meldingshodet er et standard for alle meldingene på følgende format: <3-sifret meldingskode>,<bankid>,<meldingstidspunkt> Meldingen for å overføre penger har meldingskode 503, og med følgende meldingskropp: <fra_konto 11 siffer>,<til konto 11 siffer>,<beløp> Meldingen for å sperre konto har meldingskode 201, og følgende meldingskropp: <konto som skal sperres 11 siffer> 36 Klassediagram meldingsbro 18

37 Generalisering og aggregering Generalisering (arv) Superklasse og barneklasse Eks: Hund er en type dyr Aggregeringer ( består av relasjoner) Klasse som beskriver hvordan hvordan noe er satt sammen Eks.: Sykkel består av ramme, hjul, sete, styre osv. Hjul består av felg, slange, dekk, nav, eiker osv. 38 Klassediagram meldingsbro Generalisering 19

39 3 enkle triks Ikke bruk all tilgjengelig notasjon. Hold det så enkelt som mulig (KISS keep it simple stupid) Konseptuelle klassediagrammer fokuserer på datamodellen og er nyttige for å forstå et domene. Ikke prøv å modellere alt. Forkuser på de viktigste delene. 40 Hva skal vi modellere? Hva vi tar med i modellen avhenger av hva vi skal lage. Om vi skal modellere en bil kan vi fokusere på: Mekanikk motor, drivverk, vindusheiser, bremser etc. Software kontroll av forgasser, bremser, girkasse 20

41 Oppsummering Grunnleggende om programvaredesign Hva et design er Hva funksjonen til et design er Når i utviklingsprosessen lager vi design Grunnleggende om klassediagram i UML Klasser med attributter og operasjoner Assosiasjoner mellom klasser og multiplisitet Generalisering og abstrakte klasser 21