Eksempel på realisering af domænemodel

Slides:



Advertisements
Lignende præsentationer
Hvordan programmerer man?? STREAM - en model. Programmører arbejder ofte i teams Hver programmør arbejder på sin del af en større helhed.
Advertisements

Velkommen til Softwarekonstruktion
07 – Kort om OO Introduktion.
1 Intro nedarvning (eng.: inheritance) Nedarvningshierarkier Intro polymorfisme (eng.: polymorphism) Abstract / virtual / override / sealed Intro interfaces.
Indledende Programmering Uge 2 - Efterår 2006 Selektioner og interaktion mellem objekter Susanne Brix Lindros.
KONCEPT Klasser og objekter En klasse beskriver et World ArrayList
Programmeringsteknologi: Lektion 1
Object-Orienteret Programmering og Design. 2 Nordjyllands Erhvervakademi – 2009 Indhold “Classes, objects and object-oriented programming (OOP) play a.
Selve objektet versus referencen til objektet Nedarvning
Objektorienteret programmering
08 – Mere OO Indkapsling Arv og polymorfi (OOP’s 3 hovedprincipper)
09 – Arv og polymorfi i java
Hvordan man skriver koden.
Arv Idéen i arv et at kunne genbruge gennem generalisering
Programklasser for bladhus Den efterfølgende beskrivelse er ikke komplet. Der er ikke taget afsæt i use cases, sekvensdiagrammer og operationsbeskrivelser.
NOEA/IT - FEN1 Typeparametisering/Genericity Generics i.NET 2 og C#
Delphi og C++ Builder C++ Referencer og pointere.
FEN NOEA/IT Programmeringsteknologi 1 Arv og polymorfi Substitutionsprincippet Abstrakte klasser Design Patterns (Composite)
Interfaces – brug. Overblik Tidligere: –Interfaces Comparable gør det muligt at bruge Collections metoderne –min, max, sort, … –Algoritmemønstre Find.
Items 4, 14, 24, 34, 44, 54 Orange gruppe Liv, Jonas, Thorkil, Søren S og Martin D.
Lektion 7 Læsestof: Kopier fra Caranno
GP 8, 24/ Grundlæggende programmering Efterår 2001 Forelæsning 8 onsdag 24/ kl. 9:15 – 12:00.
Objekter og klasser Rasmus D. Lehrmann DM
Repetition: Introduktion til OOP med C# og .NET
Comparable Students German Students Composite Pattern State Pattern Observer Pattern Collections Interfaces Abstrakte klasser Design Patterns.
8 RÅD VEDRØRENDE GOD PROGRAMMERING Effective (brown) Java.
FEN IntroJava AAU1 Klasser og objekter Grundbegreber Student-Course.
NOEA/IT FEN - Databaser/modellering 1 Datamodellering Den udvidede (enhanced) E/R-model (EE/R- modellen) Begreber Diagrammering Omformning til.
Uge 14: distribuerede objekter, fjernprocedurekald, RMI Tirsdag: Introduktion Mulige fordele ved distribuerede objekter Introduktion til RMI: - Interfacets.
KF04 GRAY Item 2, 12, 22, 32, 42, 52. Consider a builder when faced with many constructor parameters Item 2.
Databaseadgang fra C#:
9. Interfaces. 2 Nordjyllands Erhvervakademi Objectives “Good class design starts with good application design — how many classes, do they relate.
Forelæsning 7.1 – repetition
FEN NOEA - Nordjyllands Erhvervsakademi1 Objektorienteret programmering Indkapsling Arv og polymorfi (OOP’s 3 hovedprincipper)
Effective Java Blå gruppe. Item 18: Interfaces frem for abstrakte klasser Kan implementeres i klasser der ikke nedarver Eksisterende klasser kan nemt.
Begreber og Redskaber 4. Plan for idag Om metoder, parametre, returværdier Et par ord om objekt-orientering Håndkøring af programmer.
Begreber og Redskaber 3. Plan for idag Om metoder, parametre, returværdier Overblik over klasser,objekter,nedarvning Et par ord om objekt-orientering.
I o p o DAIMI, AU, November 1999Programkonstruktion I9E.1 Konstruktion og brug af klasser – en stak og en HP-regnemaskine push pop.
 Jens Bennedsen 2002Objektorienteret systemudvikling GRASP mønstre Basale ansvarsplaceringsregler.
Introduktion til programmering Repetition - ArrayList.
DAIMIIntroducerende Objektorienteret Programmering1 Polymorfi og nedarvning Motivation for arv og “mange former”
 1999, Henrik B. ChristensenIntroducerende objektorienteret programmering8A.1 Polymorfi og nedarvning Motivation for arv og “mange former”
 Jens Bennedsen 2001Multimedie programmering10A.1 Polymorfi og nedarvning Motivation for arv og “mange former”
 Jens Bennedsen 2002Objektorienteret systemudvikling Design -> kode Mapning af et klassediagram til kode.
Klasser og objekter. dIntProg, E08Klasser og objekter.2 Grundbegreber Klasser og objekter –beskrivelse –oprettelse Attributter og metoder –tilstand –opførsel.
DAIMIIntroducerende objektorienteret programmering3B.1 Definition af klasser Klasseskelet, metoder, et eksempel: dato.
 Jens Bennedsen, 2003Introducerende objektorienteret programmeringinterfaces.1 Interfaces En ren kontrakt.
DAIMIIntroducerende objektorienteret programmeringkd.1 Definition af klasser Klasseskelet, metoder, et eksempel: dato.
 Michael E. Caspersen, 2000Introducerende objektorienteret programmering6A.1 Programmering med interfaces – en stak og en HP-regnemaskine push pop.
Klassehierarkier Specialisering vha. subklasser. dIntProg, E05Klassehierarkier.2 Oversigt Eksempler på specialisering –Aktør, Koreograf, Skuespiller,
Indledende Programmering Uge 6 - Efterår 2006
Polymorfi Abstrakte klasser, substitutionsprincippet, statisk og dynamisk type.
 Jens Bennedsen 2001Multimedie programmering13.1 Lingo Objectorienteret Lingo.
Kari Rye Schougaard, Ph.d.-stud. Værktøjer og Teknikker, 2006 A A R H U S U N I V E R S I T E T DATALOGISK INSTITUT Java på 20 minutter (eller lidt mere)
Programmering med interfaces Separering af specifikation, anvendelse og implementation.
Objekt-relationel DBMS1 4.5 The Object-Relational Model 9.4 User-Defined Types in SQL 9.5 Operations on Object-Relational Data Ullman: Object-Relational.
DAIMIIntroducerende Objektorienteret Programmering8A.1 Polymorfi og nedarvning Motivation for arv og “mange former”
Klasser og objekter – grundbegreber.  Michael E. Caspersen, 2001Introducerende objektorienteret programmeringKlasser og objekter.2 Klasser og objekter.
Programmering med interfaces – en stak og en HP-regnemaskine push pop.
Jesper Mosegaard Multimedie Programmering E2003 MMProg uge46 Ancestor.
 Jens Bennedsen 2001Multimedie programmering4.1 Definition af begreber Interface, implements, klasse.
 Jens Bennedsen 2001Multimedie programmering3A.1 Definition af klasser Klasseskelet, metoder, et eksempel: dato.
Klasser og objekter. dIntProg, F08Klasser og objekter.2 Grundbegreber Klasser og objekter –beskrivelse –oprettelse Attributter og metoder –tilstand –opførsel.
Introduktion til programmering Repetition. dIntProg, F08Repetition.2 dIntProg Sidste forelæsning (12/10) –kort tilbagemelding på evaluering –repetition.
Jesper Mosegaard Multimedie Programmering E2003 MMProg uge44 Java til Lingo Klasser, statements og lister.
Objecter Introduktion Webintegrator HF1 PHP Object orienteret.
Forelæsning Uge 6 – Mandag
Forelæsning Uge 11 – Torsdag
Forelæsning Uge 12 – Torsdag
Klasser og objekter (Afsnit i manualen).
Præsentationens transcript:

Eksempel på realisering af domænemodel Del af design-klassediagram i et system til registrering af ansatte og projekter

Realisering af objektforbindelse Designovervejelser Hvilken vej skal objekterne kunne tilgås Forbindelse til 1 objekt Simpel objektreference Forbindelse til * objekter Reference til collection på 1-siden Se demo: demos\EmpProjV1

Nedarvning -generelt Alle metoder bortset fra constructors arves. private medlemmer af basisklassen nedarves, men kan ikke tilgås direkte. Alle protected medlemmer af basisklassen er synlige nedad i arvehierakiet, men private for alle klasser udenfor. Der kan tilføjes attributter og metoder i den nedarvede klasse Ingen multipel arv I C# arver alle klasser fra Object

OO-Principper -nedarvning Nedarvning understøtter kodegenbrug Nedarvning gør det muligt at udvide en eksisterende klasse. Nedarvning er typespecialisering, dvs. vi modellerer et ”er-en” forhold mellem den nedarvede klasse og den der arves fra - fx: en Checkkonto er-en Konto. Hvis vi står og mangler en klasse som er en specialisering af en klasse vi har, kan vi anvende nedarvning. Fx Konto -> CheckKonto

OO-Principper -nedarvning Den der arves fra kaldes basisklasse/superklasse. Den der arver kaldes subklasse Husk at der gælder et er-en forhold mellem sub- og basisklassen En nedarvet klasse er typekompatibel med basisklassen: CheckKonto ck = new CheckKonto(); If (ck is Konto) returnerer true hvis CheckKonto arver fra Konto Er-en forholdet er transitivt.

Nedarvning - Constructors Basisdelen af en nedarvet klasse initialiseres ved kald til base(param-liste). Kald til forfaders constructor er det første der sker i den nedarvede klasses constructor. :base(param-liste) placeres umiddelbart efter constructorens metodehoved – notation taget fra C++ Hvis man ikke definerer en constructor, genereres en default. Ved nedarvning kalder denne implicit en default constructor (parameterløs) på basisklassen.

Nedarvning - redefinering En basisklasse-metode kan redefineres i den nedarvede klasse Fx Haev-metoden på en Konto/CheckKonto En basisklasse-metode der skal redefineres i den nedarvede klasse, skal erklæres virtual i basisklassen, og eksplicit overrides i den nedarvede klasse. En override-metode tilsidesætter basisklassens metode. Metoden i den nedarvede klasse skal have samme signatur og returtype som den virtuelle den redefinerer. En redefineret metode kan kalde den metode den redefinerer i superklassens vha. base.metodenavn();

Nedarvning - polymorfi Alle referencevariabler i C# kan referere objekter af nedarvede typer – (polymorf = mange former). Ved virtuelle metoder træffes der beslutning på run-time om hvilken metode der skal kaldes. Metoden der kaldes er den der er defineret på det objekt referencen i øjeblikket refererer. Dette kaldes dynamisk binding.

Polymorfi/Dynamisk binding Statisk type Dynamisk type Som vi plejer at se det: Ansat programmør = new Ansat("KodeKarl","Programmør",22222); Statisk type = Dynamisk type Statisk metodekald Statisk type Dynamisk type Med polymorft typesystem: Ansat chef = new Chef(”Bosse",”Direktør",52525, 500); Dynamisk type er samme som eller arving til statisk type Compiler checker på statisk type om metode eksisterer, kald til metode vha. dynamisk binding Dynamisk binding forudsætter at metoder er erklæret virtual

Nedarvning - override af ikke-virtual metoder Hvad nu hvis vi glemmer at gøre vores metoder virtual, og en anden senere vil arve en af vores klasser og override en metode? Svaret er new foran override-metoden

Substitutionsprincippet Den dynamiske type skal altid kunne bruges i stedet for den statiske Dvs., at objekter af en nedarvet type skal kunne anvendes i stedet for objekter af den oprindelige De skal kunne substitueres Dette sikres ved at vi ved redefinering af methoder kun afsvækker pre-betingelser og strammer post-betingelser.

Arv - Vi vil udvide domænemodellen fra før

Polymorfi - redefinering af metoder Først implementerer vi metoden GivBonus(int belob) som virtual i klassen Ansat Herefter redefiner vi den i klasserne Chef og Saelger Endelig oprettes et array af Ansatte i main, hvor alle medarbejdere får 500,- i bonus Se demo: demos\EmpProjectV2

Nedarvning - designovervejelser Lad os antage at vi skal bruge en klasse der kan indeholde en liste af ansatte, hvor det er muligt at tilføje sidst i listen, men ikke midt i – Skal vi arve fra Array, ArrayList eller? Nej vi skal ikke arve, men bruge delegation Arv bør ikke bruges blindt for at opnå kodegenbrug - arv er typespecialisering! Arv skal kunne forsvares logisk som en ”A er-en B” Kodegenbrug kan i stedet opnås ved at bygge oven på eksisterende klasser. Kaldes også for komposition, delegering, mm.