ObjektOrientert Systemutvikling del I

Slides:



Advertisements
Liknende presentasjoner
Hvor stor er en fisk? Yggdrasil Hvor stor er en fisk?  Vanlige kundetyper og prosjekter  Faktorer som påvirker.
Advertisements

Trykk på mus eller tastatur for neste bilde…
Repetisjon innkapsling static tabell av primitiv datatype LC191D Videregående programmering Høgskolen i Sør-Trøndelag, Avdeling for informatikk og e-læring.
14 okt. 2003, Arne Maus Inst. for informatikk, UiO
Del 3 : Patterns (Kap 16 – kap 20, Craig Larman) Arne Maus Inst. for informatikk, UiO.
Litt mer om PRIMTALL.
Programmering i ActionScript - hva er det, og hvordan undervise?
Høgskolen i Oslo - GM Vær metodisk  Definer og forstå problemet  Spesifiser hva du har av hardware  Lag en prototyp av brukersnittet  Design.
Java database persistence framework.  SELECT by FROM postnr AS p WHERE ( SELECT DISTINCT postnr FROM addr AS a WHERE user.adrId = a.Id ) = p.postnr;
Introduksjon til objektorientert programmering i PHP
Uke 10 - Sortering, og hvordan lage en klasse for et klassebibliotek 21 okt. 2003, Arne Maus Inst. for informatikk, UiO.
Uke 8 - Mer om: Objekter, klasser og pekere
1 Objektorientert samvirke - del 4 av Arne Maus, Institutt for informatikk, Universitetet i Oslo.
1 OO systemutvikling, del 3  Nominalist eller realist ?  OO egenskaper  Generelt om OO Analyse & Design  En 8-stegs metode for OO Systemering (analyse.
1 Objektorienterte databaser - 6 Arne Maus. 2 Problemstillinger, hvorfor OO- databaser ?  dagens relasjonsdatabaser (RDB) passer ikke for alle anvendelser.
1 Litt om OO og programmering Arne Maus. 2 OO og Java (og C++, C#)  Arven fra Simula  Programstruktur i Java  Generering av objekter  Beskyttelse.
Programmering i Java versjon januar 2005 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else.
Programmering i Java versjon januar 2005 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else.
Objekt, Instanser og referanser + litt til. Objekter  Instanser  En instans er et objekt av en bestemt klasse  Instanser blir laget ved å kalle klassens.
Objektorientert programmering Objektorientert systemutvikling
Objektorientert programmering i PHP del 2
Programmering av dynamiske websider i C# - hva er det, og hvordan undervise? Tom Heine Nätt.
IS-102 Klassedefinisjoner
Eiendomsregister - eksempel
Gjenfinningssystemer og verktøy II
En gang til!? .
Operativsystemer.  Tilstandsmaskiner kalles på engelsk Finite State Machines.  Tilstandsmaskiner er en metode til å beskrive systemer med logisk og.
Jæger: Robuste og sikre systemer INF150 Programmering mandag 2.10 Default values – standardverdier ved oppstart MER OM: Sub-prosedyrer og sub-funksjoner.
Introduksjon til systemutvikling
Jæger: Robuste og sikre systemer INF150 Programmering torsdag 31.8 Kapittel 3: Grunnlag for programmering i Visual Basic.
Objekt Orientert Programmering (OOP). Objektorientering (OO)1/6 Objektorientering er en grunnleggende måte å organisere komplekse fenomener på.
Læring og tenkning Systemutvikling er læring Gjensidig respekt og samarbeid Følge en konkret oppskrift Velge blant flere oppskrifter Nå målet uten oppskrift,
Strukturerende elementer i UML
Hvordan uttrykke krav Kapittel 4.4. Innledning Målet er å samles rundt ett entydig språk som ikke kan misforståes eller feiltolkes. Gjør sporbarheten.
Gruppe 3 – Presentasjon 2 Henning Kristiansen, Mats Lindh, André Hauge og Vegard Simensen.
Programmering i Java versjon desember 2002 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else.
Objektorientert programmering
Programmering i ActionScript - hva er det, og hvordan undervise?
1 Organisering av kode (Kapittel 5). 2 Mål ● Forstå inkludering er og hvilken gevinst det gir ● Lære å utvikle egne funksjoner ● Forstå variablenes virkemåte.
Uke 7 - del I: Repetisjon del II: Objekter, klasser og pekere 30 sept. 2003, Arne Maus Inst. for informatikk, UiO.
Java 11 Programmering med og uten objekter: hva er forskjellen?
Andre funksjoner. Her kommer en beskrivelse av søkefunksjoner, knapper og annen funksjonalitet. 2.
VI LAGER EN PLATEBUTIKK
Oppgaver til kodegenerering etc. INF-5110, 2013 Oppgave 1: Vi skal se på koden generert av TA-instruksjonene til høyre i figur 9.10 i det utdelte notatet,
Programmering sif8005. Praktisk informasjon  Innleveringsfrist øvinger: mandag kl  Alle øvinger er obligatoriske  Studass tilgjengelig 6 timer.
PUG-NORWAY OKTOBER 2008 THOMAS SKJØRTEN, HILDE ANDREASSEN UML og OpenEdge OOABL.
Jæger: Robuste og sikre systemer INF150 Programmering Kapittel 2: Problemløsning Kapittel 3.1 og 3.2.
Objekt, Instanser og referanser + litt til. Objekter  Instanser  Kan sees på som det samme. Personen Per kan være både et objekt og en instans av klassen.
Objektorientert utforming In 140 Sommerville kap. 12.
Main metoden n public static void main(String[] args){ } n Inni denne metoden skjer alt! n Det kan bare finnes en main metode per program. n Den kan ligge.
Kapittel 1, oppgave i) Sett inn preposisjoner eller adverb som passer.
Ekstra mange tips til Oblig 3! 12. mars 2007 Are Magnus Bruaset og Arild Waaler Inst. for informatikk, UiO.
Gamle systemer In 140 Forelesning Nr 19 Sommerville kap 26.
Befolkning og arbejdsmarked 7. Mikroøkonomi Teori og beskrivelse © Limedesign
INF1000 (Uke 14) Eksamen V06 Grunnkurs i programmering Institutt for Informatikk Universitet i Oslo Are Magnus Bruaset og Arild Waaler.
Byggeklosser i java  Klassedefinisjon  Variabel deklarasjon  Metodedeklarasjoner  En ordentlig klasse  Spesielle/kryptiske skrivemåter  løkker og.
Objektorientert design
Objektorientert utforming In 140 Forelesning Nr 11 Sommerville kap 12 – del 1.
Inf1000 (Uke 5) Arrayer, filer og tekst
INF1000 (Uke 11) Programmering
Kapittel 4 Skriving av klasser. 4.1 Anatomien til ein klasse Så langt har vi brukt ferdige klasser frå klassebiblioteket i Java Vi lagar objekt og brukar.
Objektorientert design In 140 Sommerville kap 12 – del 1.
Stian Grønning Master i samfunnsøkonomi Daglig leder i Recogni.
Professor Guttorm Sindre Institutt for datateknikk og informasjonsvitenskap Programmering i Python.
Strukturerende elementer i UML
Triks Avslutt alle klasser, metoder og løkker samtidig som du lager dem. Deklarer alle variablene/referansene på begynnelsen av klassen. Hvis du definerer.
IS-102 Interaksjon med objekter
Objektorientert programmering i Java
Begynnerkurs i Python Realfagskonferansen 2019 Henrik H. Løvold
IN3030 – Effektiv parallellprogrammering Uke 1 2. del, våren 2019
Utskrift av presentasjonen:

ObjektOrientert Systemutvikling del I Arne Maus, førsteamanuensis, Inst for informatikk, Univ. i Oslo (tidl: Univ i Tromsø, Norsk Regnesentral, MYCRON, SIFF)

Oversikt – dag 1 Grunnbegreper Litt om OO programmering (C++, Java) OO analyse og design (systemutvikling) 8 stegs analyse/design metode OO samvirke UML og RationalRose - notasjon og metode OO databaser + Øvelsesoppgaver

OO programmering og systemutvikling Objektorientering er : en annen tenkemåte en annen måte å dele opp problemet og programmere dette mer effektiv for store systemer ikke valg av et bestemt OO-programmeringsspråk Objektorientering dekker programmering systemutvikling dokumentproduksjon brukergrensesnitt databaser operativsystemer, nett gjenbruk av programvare

OO-begreper Spesielle trekk historikk forhold verden modell notasjon klasser og objekter pekere og dynamisk hukommelseshåndtering innkapsling av moduler arv / virtuelle gjenbruk

Hvorfor en nytt programmerings-paradigme (stil) ? Programvare-krisen : Store systemer, kompleksitet, kostnader Mer dynamiske systemer Vedlikehold av programvare dyrt (ca. 70% av kostnadene) Feilretting Nye krav Bedre brukervennlighet, nytt grafisk grensesnitt Preventivt vedlikehold

Programmerings-stiler, historikk Prosedyreorientert, strukturert programmering Teknisk/vitenskapelig miljø Datamodellering Forretningslivet, IBM Objektorientering “Alle” miljøer, men startet i teknisk miljø. + Applikativ/funksjonell programmering (Lisp, ML) + Logikkprogrammering (Prolog)

I) Prosedyreorientert, strukturert programmering Modellerer løsningen som en rekke med handlinger FORTRAN, C, Pascal State maskiner, transisjonsmatriser Prosedyre begrepet Navngi samling av handlinger, generalisere løsningen ved parametre Dynamisk hukommelses bruk Stakken, rekursive prosedyrer

Top-down analyse Problemet løses ved kall på en prosedyre “Løs_problemet” Denne handlingen deles opp i flere under/del-handlinger Disse deles opp igjen .... inntil hver del blir liten nok og lett å kode Handlingen er alt deklarasjoner spres omkring “tilfeldig”

II) Datamodellering COBOL Relasjonsmodellen statiske relasjoner Navn på sammensatte data, records (Data Section) Operasjoner på sammensatte data Relasjonsmodellen statiske relasjoner SQL Entity-Relationship NIAM Data er “alt” handlingene i prosedyre-divisjonen er trivielle Alle skulle kunne lage Cobol, SQL, 4GL,...programmer selv

III) Objektorientering & systemperspektiv Data og handling like viktig, både: Prosedyrer (= navn på sammensatte handlinger , kalt metoder) Recorder (=navn på sammensatte data) Utgangspunkt i simulering modellering av verden Som programmerere/systemerere lager vi: en modell av den del av verden vi lager system for forholder vi oss til brukere og andre systemer bruker en viss mengde isenkram (maskiner, kommunikasjonslinjer, sensorer, skjermer, skrivere,..) til å realisere systemet

OO og Simula 67 Objekt-orientering startet i Norge Smalltalk To skoler O.J.Dahl og K. Nygaard Simula I og Simula 67 Simuleringer (modellerer verden som en rad med prosesser) La ikke selv vekt på “objekt-orienteringen”, brukte selv ikke ordet. Smalltalk Allen Key Apple/MacIntosh To skoler Skandinavisk (Simula, C++, Java, Eiffel, Fortran, Cobol...) “Ren OO” “alt” er objekter (Smalltalk, Actor)

Verden består av objekter som samhandler Hus, trær, mennesker, bankkonti, regninger, ansatte, studenter, biler,.. Objekter i data-systemet objekt = Data til en ‘gjenstand’ + operasjoner på denne objekter kan oppretter andre objekter gjør operasjoner på hverandre (kaller metoder) = “sender meldinger” til hverandre Objekter består av både data og operasjoner som logisk hører sammen med disse data og dette objektet

Forholdet mellom system og verden Som programmerere/systemerere velger vi ut: den del av virkeligheten vi er interessert i (problemområdet) de delene av dette som er interessante for vårt formål (problemområdets objekter med tilpasset detaljeringsnivå) Programmet / systemet skal gjenspeile verden en-til-en Ett objekt i vår del av verden => ett objekt i systemet + objekter for i/o + av og til ‘finnes’ bare objektene i maskinen eks. bankkonto

Startpunkt: OO-programmering Forstå begrepene ved å se dem nyttet i programmering objekter og klasser pekere innkapsling arv, super/subklasser - generalisering/spesialisering virtuelle metoder (polymorfisme)

Objekter og klasser Bare én klasse = beskrivelse/mal for hvordan objektene dine skal se ut eks: bare én beskrivelse av hvordan en honnørkonto ser ut Ett eller flere (mange) objekter samtidig av en klasse eks: mange ‘honnørkonto’ objekter i et kjørende banksystem Et objekt er som en metode som ligger igjen i hukommelsen etter at den er ‘ferdig utført’, og hvor vi kan: Få adgang til lokale data i objektet Kalle de lokale metodene i objektet

Klasser og objekter Klasser er fellesbeskrivelser av like objekter data (ikke tilgjengelig utenfra) synlige operasjoner = “grensesnitt med tilbud av tjenester” interne hjelpe- operasjoner

Data og operasjoner som en naturlig enhet - eks 1 Eks: STUDENT REGISTER Hvordan representere en student ( lage class student) Data: navn, adresse, personnummer + ‘ et visst antall’: (kursnavn, karakter) Operasjoner ( dvs. metoder) meld_opp_til_eksamen (kurs) registrer_eksamens_karakter (kurs, karakter) regn_ut_gjennomsnitt_karakter ( ) skriv_ut_vitnemål( ) N.B. Dette er operasjoner på bare én student.

Pekere & dynamisk hukommelse Objekter får man adgang til via peker-variable (adresser) Objekter opprettes og ‘dør’ under eksekvering (variabel datastruktur)

Hvordan opprette objekter, hvordan få tak i innholdet class Bil {int regnr; String eier; } Bil minbil; Bil dinbil; minbil = new Bil(); minbil.regnr = 476767; dinbil = new Bil();

Objekt-Orientert program Klasse-deklarasjoner (med datadel og operasjoner i form av metoder) Deklarasjon av andre globale variable (dette gjelder C++ - ikke Java) Evt. metoder som ikke er med i noen klasse. Hovedprogram hvor det bl.a opprettes noen objekter, og man begynner å kalle operasjoner i disse objektene.... I Java : ALT er klasser og objekter. Hovedprogrammet er inne i en av klassene

Innkapsling Bare nødvendige operasjoner synlige fra utsiden Vi skiller altså sterkt mellom: Grensesnittet til en klasse = De operasjonene den tilbyr resten av programmet Implementasjonen av dette og alle detaljene inne i klassen eks i Java: (neste foil )

{ saldo = saldo + beløp;} public void ta_ut_beløp(int beløp) public class konto { int kontonr, saldo; String eier ; konto( int knr, String s) { kontonr = knr; eier = s; saldo = 0;} public void sett_inn(int beløp) { saldo = saldo + beløp;} public void ta_ut_beløp(int beløp) { saldo = saldo - beløp;} public void overfør (int beløp, konto konto2) { ta_ut-beløp (beløp); konto2.sett_inn(beløp); } public int kontonummer ( ); { return kontonr;} }

Objektorientering basis, oppsummering Komponenter i programmet representeres som objekter OO programmer ‘simulerer’ virkeligheten, ett objekt i programmet for hvert ‘ting’ i virkeligheten + objekter som representerer deler av løsningen (vinduer og knapper på skjermen, en printer, ..) Objekter har både data og operasjoner Objekter deklareres som klasser (det kan være mange objekter av en klasse) Objekter genereres dynamisk (med new) Innholdet (variable og metoder) fås adgang til ved pekervariable Innkapsling betyr at selve implementasjonen av en klasse skjules. Hver klasse fremstår bare med et sett av veldefinerte operasjoner (metoder) overfor resten av systemet.

Objektorientering, ’avanserte’ begreper I. Arv av egenskaper - subklasser II. Redefinering av operasjoner - virtuelle metoder

I. Subklasse = Arv av egenskaper Problem: Flere av klassene i et program er ganske like,har felles deler. Må disse delene skrives flere steder ? Ikke: Skrive klasse som er summen ave-egenskapene, teste med statusbit etc. hva som nå er tilfellet. Eks: Bankkonti lønnskonto, honnørkonto og høyrentekonto har mye felles Løsning: subklasser Skriv først felles del som egen klasse

eks Bankkonti Flere nivåer av arv mulig: public class konto { String navn, adresse; int saldo, rentefot,kontonummer; } class lønnskonto extends konto { String arbeidsgiver; int arbeidsgiver_nummer; class høyrente extends konto { int ant_årlig_uttak; .... Et objekt av class lønnskonto vil bestå av to deler: alt definert i 'konto' og i tillegg alt definert i 'lønnskonto' konto lønnskonto høyrente selvstendig næringsdrivende ansatt offentligansatt privatansatt Et objekt av typen ‘privatansatt’ inneholder da alle deklarasjoner (data+funksjoner) i konto, lønnskonto, ansatt og privatansatt

Multippel arv EKS. Ferdige klasser for a) statistikk (class stat) b) være med i køer (class kø) c) grafisk brukergrensesnitt (class grafikk) Vi ønsker alle disse i vår class bil (i C++) -ikke mulig i Java class bil : public stat, kø, grafikk { .... }; I Java kan vi gjøre noe lignende med grensesnitt: class bil implements stat, kø, grafikk { .... }

Når bruker vi subklasser ? a) som arv: Verktøyboks-tankegangen ved ferdig definerte systemklasser (vanligst) b) ved stadig utbygging av fellesdeler i egne klasser (klassifikasjon dvs.generalisering og spesialisering) Ikke definer ikke for mange nivåer , det er ofte en dårlig klassifikasjon (medfører også mye blaing i koden)

II. Virtuelle metoder Redefinering av operasjoner Eks: Renteberegning public class konto { int saldo,......; public int beregn_renter () {..'vanlig renteberegning'...} public void årsoppgjør () {.. saldo = saldo + beregn_renter(); } class honnør extends konto { ... {... 'beregn renter etter honnør-måten' Redefinering av operasjoner Eks: Renteberegning Alle kontotyper unntatt honnørkonti beregner renter på samme måte

Tomme virtuelle Eks: Grafiske brukergrensesnitt Definerer en rekke virtuelle metoder som: Mouse_button_down(); Key_down(); Disse kalles i systemklassene, men gjør da ingenting Vi kan skrive våre versjoner av disse virtuelle metodene, og sørger da for at våre brukerdefinerte handlinger blir kalt istedenfor, i systemklassene. Dette er systemets måte å la programmereren gripe inn i systemets (predefinerte) operasjoner Tilsvarende i Visual Basic, DCOM/ActiveX Controls

Når bruker vi virtuelle metoder a) Til redefinering av egne metoder i egendefinerte klasser ( som: beregn-renter( ) dette er ikke veldig vanlig ) b) Til redefinering av ferdigskrevne systemklasser gripe inn i systemklassenes oppførsel. (ganske vanlig og mer vesentlig enn a) )

Objektorienterte begreper, oppsummering Abstraksjon (hva det modellerer) Innkapsling (skjuler implementasjon) Modularisering (oppdelingen av problemområdet) Hierarki (subklasser/arv) Gjenbruk (subklasser /virtuelle metoder) Typing (skille mellom objekter av ulike klasser, metoder og ulike dataelementer) Prosess-egenskap (passiv, aktiv, parallellitet) Persistent (overlever i en database)