FEN 2008-09-23NOEA/IT Programmeringsteknologi 1 Arv og polymorfi Substitutionsprincippet Abstrakte klasser Design Patterns (Composite)

Slides:



Advertisements
Lignende præsentationer
Velkommen til Softwarekonstruktion
Advertisements

FEN KbP/seminar3: subcontracts1 Kontraktbaseret programmering Seminar 3 Kontrakter og arv Underleverandørsyn Substitutionsprincippet Guarded.
Programmeringsparadigmer.
07 – Kort om OO Introduktion.
T1 – OPGAVE 14.2 LINETT & SABRINA Klasse Varer namespace Opgave_14._2 { class Varer { private string vare; private string farve; private double.
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
VOOP, 8 april Refleksion i objekt orienterede programmeringssprog Mandag 8/ Kasper Østerbye.
Structs Structs allokeres på stakken Memory-allokering sker ved oprettelse af variabel og ikke ved new Der kan defineres metoder incl. Constructor. Eksempel.
Arv Idéen i arv et at kunne genbruge gennem generalisering
NOEA/IT - FEN1 Typeparametisering/Genericity Generics i.NET 2 og C#
NOEA/IT FEN - Databaser/modellering 1 Tabeldesign Omformning af E/R-modellen til relationelle skemaer.
Iteration og parametrisering
Grundlæggende elementer i UML
Interfaces – brug. Overblik Tidligere: –Interfaces Comparable gør det muligt at bruge Collections metoderne –min, max, sort, … –Algoritmemønstre Find.
Lektion 7 Læsestof: Kopier fra Caranno
Eksempel på realisering af domænemodel
GP 8, 24/ Grundlæggende programmering Efterår 2001 Forelæsning 8 onsdag 24/ kl. 9:15 – 12:00.
FEN KbP/seminar2: design11 Kontraktbaseret programmering Seminar 2 Klassedesign – grundprincipper Eksempler: Stack Dictionary.
Objekter og klasser Rasmus D. Lehrmann DM
Comparable Students German Students Composite Pattern State Pattern Observer Pattern Collections Interfaces Abstrakte klasser Design Patterns.
FEN IntroJava AAU1 Klasser og objekter Grundbegreber Student-Course.
FEN IntroJava AAU1 Grafik – Crayon-objekter.
NOEA/IT FEN - Databaser/modellering 1 Datamodellering Den udvidede (enhanced) E/R-model (EE/R- modellen) Begreber Diagrammering Omformning til.
Forelæsning 2.2 Tilstand og opførsel (repetition)
Fundamentale sprogbegreber
FEN IntroJava AAU1 Endnu mere om Klasser og Objekter Mange til mange relationer Student-Course v3.
Uge 14: distribuerede objekter, fjernprocedurekald, RMI Tirsdag: Introduktion Mulige fordele ved distribuerede objekter Introduktion til RMI: - Interfacets.
C#: Udtryk og metoder Kilde: Joe Hummel. 2 Nordjyllands Erhvervakademi – 2008 Indhold “With regards to programming statements and methods, C# offers what.
Virkefeltsregler i Java int i; int j; int k; i = i+j; String t; Sequence s; int i; int j; Sequence s; String s; int i; int j;
Repetition af dIntProg v/ Morten D. Bech. Tour de force Variabler Løkker Comparable ImErKo-reglen Eksamenssæt dIntProg, E13.
9. Interfaces. 2 Nordjyllands Erhvervakademi Objectives “Good class design starts with good application design — how many classes, do they relate.
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.
Spec. af LottotalsGenerator interface LottoTal{ // S: mgd. af udtrukne tal // min, max: int - angiver intervallet (incl.) void set(int min, int max); //PRE.
I o p o DAIMI, AU, November 1999Programkonstruktion I9E.1 Konstruktion og brug af klasser – en stak og en HP-regnemaskine push pop.
Fundamentale sprogbegreber Sætninger og udtryk Niveauer af programbeskrivelse (statisk versus dynamisk syn)
 Bærbak & Caspersen, 2000Introducerende objektorienteret programmering1.1 Turtlemaskinen Arkitektur, instruktionssæt og eksempler.
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”
Klasser og objekter. dIntProg, E08Klasser og objekter.2 Grundbegreber Klasser og objekter –beskrivelse –oprettelse Attributter og metoder –tilstand –opførsel.
 Jens Bennedsen, 2003Introducerende objektorienteret programmeringinterfaces.1 Interfaces En ren kontrakt.
 Michael E. Caspersen, 2000Introducerende objektorienteret programmering6A.1 Programmering med interfaces – en stak og en HP-regnemaskine push pop.
 Henrik Bærbak, 2000Introducerende objektorienteret programmering11B.1 Destilleret UML Oversættelse fra UML til Java.
Klassehierarkier Specialisering vha. subklasser. dIntProg, E05Klassehierarkier.2 Oversigt Eksempler på specialisering –Aktør, Koreograf, Skuespiller,
Polymorfi Abstrakte klasser, substitutionsprincippet, statisk og dynamisk type.
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.
DAIMIIntroducerende Objektorienteret Programmering8A.1 Polymorfi og nedarvning Motivation for arv og “mange former”
Grafik Modeller, objekter og opførsel. dIntProg, F08Grafik.2 Nye begreber Repetition (iteration) –gentagelse af opførsel Parametrisering –generalisering.
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.
 Jens Bennedsen 2001Multimedie programmering10B.1 Interfaces En ren kontrakt.
 Jens Bennedsen 2001Multimedie programmering4.1 Definition af begreber Interface, implements, klasse.
 Jens Bennedsen 2001Multimedie programmering3B.1 Specifikationer Betingelser, specifikationer og JavaDoc.
Introduktion til programmering Repetition. dIntProg, F08Repetition.2 dIntProg Sidste forelæsning (12/10) –kort tilbagemelding på evaluering –repetition.
DAIMI, AUIntroducerende objektorienteret programmering11A.1 Destilleret UML Oversættelse fra UML til Java.
Programmering med interfaces – en stak og en HP-regnemaskine push pop.
Quiz – Uge 3 – mandag – første time
Parametrisering En kort introduktion.
Dog Sort Dogs For meget ansvar Låst til én måde at sortere på
Præsentationens transcript:

FEN NOEA/IT Programmeringsteknologi 1 Arv og polymorfi Substitutionsprincippet Abstrakte klasser Design Patterns (Composite)

FEN NOEA/IT Programmeringsteknologi 2 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 kun afsvækker pre-betingelser og strammer post- betingelser.

FEN NOEA/IT Programmeringsteknologi 3 Eksempel: public class Shape{ private int x,y; // figurens position private Colour color; //figurens farve //øvrige attributter public virtual void MoveTo(int newX, int newY){ //PRE 0 <= newX <= maxX && 0 <= newY <= maxY, // hvor maxX og maxY angiver vinduets maksimum // POST x'=newX && y'=newY } public virtual float Area(){ //PRE none //POST returnerer figurens areal med 4 decimalers nøjagtighed //beregnet efter en eller anden tilnærmet metode } }//end Shape public class Circle: Shape{ private int r; //radius - x, y //og color arves public override float Area(){ } public override void MoveTo(){ } }//end circle Hvad må vi gøre med Area()? Hvad må vi gøre med MoveTo()?

FEN NOEA/IT Programmeringsteknologi 4 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.

FEN NOEA/IT Programmeringsteknologi 5 Nedarvning - abstract En klasse som indeholder en eller flere metoder som ikke er defineret kaldes abstrakt En abstrakt klasse bruges kun i forbindelse med arv, og kan ikke instantieres, dvs. der kan ikke oprettes objekter af en abstrakt klasse. En abstrakt metode skal redefineres i de(n) nedarvede klasse(r). En abstrakt metode definerer funktionalitet for alle arvinger (men implementerer ikke). En constructor i en abstrakt klasse bruges kun af arvingernes constructors

FEN NOEA/IT Programmeringsteknologi 6 Eksempel: Tysk-elever På Nørhalne Gymnasium findes både sproglige og matematiske klasser. Men i faget tysk gælder der specielle regler for de to typer af elever, angående bestået. Derfor vil tysklærer Andersen gerne have et lille system, der kan lave skrive lister over bestået og ikke bestået elever. Følgende regler gælder: –En sproglig elev har bestået tysk hvis karakteren er mindst 8. –En matematisk elev har bestået hvis karakteren er mindst 6. Struktur: Elev MatElevSprogligElev

FEN NOEA/IT Programmeringsteknologi 7 Der skal gøres følgende 1.Lav koden til superklassen Elev (skal måske være abstrakt?) 2.Lav de to subklasser Sproglige og Matematiske 3.Lav metoden bestået for Sproglige og Matematiske 4.Test, at det virker 5.Lav en container klasse ElevCont, der kan indeholde elev-objekter. 6.Lav en metode på containeren, der kan udskrive alle elever, der har bestået 7.Lav en metode på containeren, der kan udskrive de elever, der ikke har bestået 8.Lav et testprogram der opretter nogle sproglige og matematiske elever, tilføjer dem i containeren og udskriver de to lister Source Ny karakterskala?

FEN NOEA/IT Programmeringsteknologi 8 Designeksempel: Composite-pattern Composite: Grafisk editor, Tekstbehandling, Køkkenlager mmm. Hvordan ser en Show-metode ud på Shape, Circle og Picture

FEN NOEA/IT Programmeringsteknologi 9 abstract public class Shape{ protected Position pos; //figurens position protected Color color; //figurens farve //øvrige attributter public virtual void MoveTo(Position newPos){ // PRE none // POST pos'=newPos } public abstract void Show(); // Abstrakt operation // - kan ikke implementeres for en vilkårlig figur. // PRE none // POST figuren er tegnet public abstract void Hide(); // Abstrakt operation // - kan ikke implementeres for en vilkårlig figur. // PRE none // POST figuren er skjult // øvrige operationer }//end Shape

FEN NOEA/IT Programmeringsteknologi 10 public class Circle: Shape{ private int r; //radius //øvrige attributter - pos og color arves public override void Show(){ //PRE none //POST cirklen er tegnet //Denne operation kan nu implementeres for en cirkel //ved hjælp af en passende grafikrutine. } public override void Hide(){ //PRE none //POST cirklen er skjult //Denne operation kan nu implementeres for en cirkel //ved hjælp af en passende grafikrutine. } // øvrige operationer - MoveTo() arves} }//end Circle;

FEN NOEA/IT Programmeringsteknologi 11 public class Picture: Shape{ private ArrayList shapes; // operationer til at tilføje og slette figurer mv. public void override Show(){ //PRE none //POST den sammensatte figur er tegnet foreach(Shape s in shapes) s.Show(); } public void override Hide(){ //PRE none //POST den sammensatte figur er skjult foreach(Shape s in shapes) s.Hide(); } public void MoveTo(Position newPos){ //PRE none //POST pos'=newPos foreach(Shape s in shapes) s.MoveTo(newPos); } }//end Picture Dynamisk type definerer Show() Statisk type

FEN NOEA/IT Programmeringsteknologi 12 Composite Pattern The concept of patterns originates from architecture (Christopher Alexander, 1977): “Each pattern describes a problem which occurs over and over again in our environment, and then describes the core of the solution to that problem, in such a way that you can use this solution a million times over, without ever doing it the same way twice” (Christopher Alexander e. a.: “A Pattern Language”. Oxford University Press, New York, 1977.)

FEN NOEA/IT Programmeringsteknologi 13 (OO) Design Patterns A well known and widely accepted concept in software engineering Developed in the early 1990s and published by Gamma e.a. (“Gang of Four”, GoF) in 1995: “(…) design patterns (…) are descriptions of communicating objects and classes that are customized to solve a general design problem in a particular context.” (Erich Gamma e. a.: ”Design Patterns. Elements of Reusable Object- Oriented Software”. Addison-Wesley )

FEN NOEA/IT Programmeringsteknologi 14 The benefits of patterns A pattern captures a proven good design: –A pattern is based on experience –A pattern is discovered – not invented It introduces a new (and higher) level of abstraction, which makes it easier: –to talk and reason about design on a higher level –to document and communicate design One doesn’t have to reinvent solutions over and over again Patterns facilitate reuse not only of code fragments, but of ideas.

FEN NOEA/IT Programmeringsteknologi 15 Patterns as a learning tool It is often said that good skills in software construction require experience and talent …and neither can be taught or learned at school Patterns capture experience (and talent) in a way that is communicable and comprehensible …and hence experience can be taught (and learned) So one should put a lot of effort in studying patterns

FEN NOEA/IT Programmeringsteknologi 16 Eksempel: Organisation Source Organisatorisk enhed TeamAfdeling Tekst

FEN NOEA/IT Programmeringsteknologi 17 Typekompatibilitet, polymorfi og dynamisk binding Et eksempel (Antag at vi har et klassehieraki med en Konto og CheckKonto som arver fra Konto): Konto konto = new Konto(); CheckKonto ckonto = new CheckKonto(); konto = ckonto; //OK, idet ckonto er typekompatibel, på konto-referencen // kan dog kun tilgå medlemmer fra Konto-klassen Når eksempelvis metoden konto.tilskrivRente() kaldes, vil det være checkkontoens metode der bliver kaldt – i fald den er erklæret som override og erklæret virtual i basisklassen. (Objektet retter sig efter objektets type – den dynamiske type - i stedet for referencens – den statiske type: polymorfi og dynamisk binding)

FEN NOEA/IT Programmeringsteknologi 18 C# - Hvornår er objekter ens? Klasser bør override Equals-metoden public class Customer {. public override bool Equals(object obj) { Customer other; if ((obj == null) || (!(obj is Customer))) return false; // helt sikkert ikke ens other = (Customer) obj; // typecast for adgang return this.id == other.id; // ens hvis ens id... }

FEN NOEA/IT Programmeringsteknologi 19 Opgaver Nørhalne Sejlklub Projektstyring