Præsentation er lastning. Vent venligst

Præsentation er lastning. Vent venligst

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

Lignende præsentationer


Præsentationer af emnet: "FEN 2008-09-23NOEA/IT Programmeringsteknologi 1 Arv og polymorfi Substitutionsprincippet Abstrakte klasser Design Patterns (Composite)"— Præsentationens transcript:

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

2 FEN 2008-09-23NOEA/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.

3 FEN 2008-09-23NOEA/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()?

4 FEN 2008-09-23NOEA/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.

5 FEN 2008-09-23NOEA/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

6 FEN 2008-09-23NOEA/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

7 FEN 2008-09-23NOEA/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?

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

9 FEN 2008-09-23NOEA/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

10 FEN 2008-09-23NOEA/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;

11 FEN 2008-09-23NOEA/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

12 FEN 2008-09-23NOEA/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.)

13 FEN 2008-09-23NOEA/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. 1995.)

14 FEN 2008-09-23NOEA/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.

15 FEN 2008-09-23NOEA/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

16 FEN 2008-09-23NOEA/IT Programmeringsteknologi 16 Eksempel: Organisation Source Organisatorisk enhed TeamAfdeling Tekst

17 FEN 2008-09-23NOEA/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)

18 FEN 2008-09-23NOEA/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... }

19 FEN 2008-09-23NOEA/IT Programmeringsteknologi 19 Opgaver Nørhalne Sejlklub Projektstyring


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

Lignende præsentationer


Annoncer fra Google