Föreläsning 10, kapitel 10 Abstrahera mera! Abstrakta klasser och interface Kursbok: “Objects First with Java - A Practical Introduction using BlueJ”,

Slides:



Advertisements
Liknande presentationer
Utveckla en applikation Kursbok: “Objects First with Java - A Practical Introduction using BlueJ”, David J. Barnes & Michael Kölling Fredric Ragnar
Advertisements

Interface.  Interface är en datatyp och har alltså egen syntax och en hel del egna regler för vad arv från interface innebär.  Interface är renodlad.
Föreläsning 7, Kapitel 7 Designa klasser Kursbok: “Objects First with Java - A Practical Introduction using BlueJ”, David J. Barnes & Michael Kölling.
Programmeringsteknik
Next previous Internetprogrammering 2000 Internetprogrammering 2000 Föreläsning 10 Distribuerad programmering med Javas RMI, Remote Method Invocation.
Fortsättningskurs i Programmering lektion 6
Klassarv och inkapsling
Next previous Refactoring och lite mönster kodade i Java Innehåll Vad är refactoring? Ett större refactoringexempel Några mönster kodade i Java OOMPA 2000.
OOP Objekt-orienterad programmering
Datastrukturer och algoritmer Föreläsning 11. Datastrukturer och algoritmer VT08 Innehåll  Mängd  Lexikon  Heap  Kapitel , , 14.4.
Lennart Edblom, Frank Drewes, Inst. f. datavetenskap 1 Föreläsning 10: Objektorientering Objektorientering och abstrakta datatyper Dynamisk bindning.
Arv.
Abstract & sealed.
Objektorienterad tänkande
Polymorfism.
Alice in Action with Java
i olika programmeringsspråk
Sid period2CD5250 OOP med C++ Mats Medin MDH/IDT Objektbaserad programmering –Grundläggande om klasser och objekt – (Arv får vänta)  Iden med klasser.
Föreläsning 4, Kapitel 4 Gruppera objekt Kursbok: “Objects First with Java - A Practical Introduction using BlueJ”, David J. Barnes & Michael Kölling.
Objektorienterad programmering i Java
Föreläsning 2, Kapitel 2 Att förstå klassdefinitioner Kursbok: “Objects First with Java - A Practical Introduction using BlueJ”, David J. Barnes & Michael.
PROCESSPROGRAMMERING
Föreläsning 6, kapitel 6 Objekt som uppför sig som de skall Kursbok: “Objects First with Java - A Practical Introduction using BlueJ”, David J. Barnes.
Föreläsning 5. Problemet Vi har sett att vi kan ersätta de metoder vi ärver från överklassen med egen funktionalitet (polymorfism) class Bil : public.
Sid 41 Fordon int antalhjul; int vikt;
Datasamlingar och generiska enheter
Föreläsning 2 Kort Översikt Över Javaspråket. Källkodsformat Unicode används åäöμψζ tillåtna Inte alla miljöer klarar av det Källkod Bytekod Java VM för.
4. Arv och dynamisk bindning
Föreläsning 8, kapitel 8 Förbättra strukturen med arv Kursbok: “Objects First with Java - A Practical Introduction using BlueJ”, David J. Barnes & Michael.
Metodik för problemlösning Kursbok: “Objects First with Java - A Practical Introduction using BlueJ”, David J. Barnes & Michael Kölling Fredric Ragnar.
1 ITK:P1 Föreläsning 7 Algoritmer och datastrukturer DSV Marie Olsson.
Vektorer (klassen Vector) Sortering
Mer om arv - Polymorfism Kursbok: “Objects First with Java - A Practical Introduction using BlueJ”, David J. Barnes & Michael Kölling Fredric Ragnar
Programmering i C# 5. Structer.
Arv.
F. Drewes, Inst. f. datavetenskap1 Föreläsning 10: Objektorientering Objektorientering och abstrakta datatyper Dynamisk bindning Singel mot multipelt.
PROCESSPROGRAMMERING Föreläsning ‏ Innehåll: Högnivå objekt för trådprogrammering: - Trådgrupper (”Thread pools”)‏ - Exekverare (Executor.
Föreläsning 8 Arv och abstrakta klasser. Arv Definierar en klass utifrån en redan existerande klass Den nya klassen utökar den ärvda klassen ( extends.
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 8 ( ) INNEHÅLL:Klasser: -Konstruktorer -Klassvariabler -Instansmetoder -Privata.
Föreläsning 5, Kapitel 5 Använda Java-bibliotek för att få avancerad funktionalitet Kursbok: “Objects First with Java - A Practical Introduction using.
Riktade listor i C och Java Lösning till gruppövning 1.
Next previous RMI, Remote Method Invocation Om du har boken av Marty Hall, läs avsnitt 15.8 För fler exempel se:
Föreläsning 1 Reserverade ord Javas API Identifierare Litteraler Variabler Kompilering och interpretering.
Introduktion till klasser, objekt och BlueJ Kursbok: “Objects First with Java - A Practical Introduction using BlueJ”, David J. Barnes & Michael Kölling.
Föreläsning 9 Gränssnitt. Super Super kan användas till anrop av en omdefinierad metod Super kan användas till anrop av konstruktorer i superklassen Super.
För utveckling av verksamhet, produkter och livskvalitet. Stack och Kö - Implementering - Tilllämpningar.
Datastrukturer och algoritmer
Föreläsning 4 Klasser Och Objekt.
1 ITK:P2 F6 Sortering av generiska containerklasser DSV Peter Mozelius.
Föreläsning 4 programmeringsteknik och Matlab 2D1312/ 2D1305
ITK:P1 Föreläsning 2 Introduktion till objektorientering DSV Marie Olsson.
PROCESSPROGRAMMERING Föreläsning 1 ( )‏ Innehåll: Introduktion till paralellprogrammering (“concurrent programming”)‏ Introduktion till parallellprogrammering.
Föreläsning 3, Kapitel 3 Objektinteraktion - Skapa objekt som samarbetar Kursbok: “Objects First with Java - A Practical Introduction using BlueJ”, David.
Föreläsning 9 Arv kap 8.1 Interface kap 9.2 Grafiska användargränssnitt (GUI) kap 10.
Arv repetition Arv = Är relation Tillgänglighet public, protected och private. Överklass ös Direkt härledd underklass dhu: Class dhu : public ös{} Indirekt.
Köer -- Kapitel 16. Principen med en kö Köer är FIFO datastrukturer  First In – First Out  enqueue() Lägg till data i kön (först)  dequeue() Hämta.
Välkommen till kursen objektorienterad programmering med Java Kursbok: “Objects First with Java - A Practical Introduction using BlueJ”, David J. Barnes.
OOP F5:1 Stefan Möller OOP Objekt-orienterad programmering Föreläsning 5 Klasser och objekt Skapa objekt - new Referenser Konstruktorer Inkapsling.
Övning2 programmeringsteknik och Matlab 2D1312/ 2D1305
Programmeringsteknik för K och Media
OOP - teori1 OOP del II– Föreläsning 5 vecka 6. OOP - teori2 Klasser Substantiv i singularis stavat med stor bokstav till exempel Human Dog Account Circle.
Lennart Edblom, Frank Drewes, Inst. f. datavetenskap 1 Föreläsning 3: Abstrakta datatyper Algebror Abstrakta datatyper Inkapsling och informationsmaskering.
Arv, abstrakta klasser och gränssnitt
OOP&M - teori1 OOPM del II– Föreläsning vecka Mer om ärvning.. Abstrakta klasser/metoder Gränssnitt/Interface klasser.
OOP&M - teori1 OOPM del II – Föreläsning vecka Abstrakta klasser/metoder igen Gränssnitt/Interface klasser igen tillämpat.
Objektorienterad programmering sid. 1 7/15/2015 CD5250 OOP med C++ Mats Medin MDH/IDT Objektorienterad programmering OOP = objektbaserad programmering.
Föreläsning 8: Exempel och problemlösning
Föreläsning 12: Exempel och problemlösning
Föreläsning 9: Arv och UML
Repetitionsföreläsning 1: Lite rekursion & problemlösning
Presentationens avskrift:

Föreläsning 10, kapitel 10 Abstrahera mera! Abstrakta klasser och interface Kursbok: “Objects First with Java - A Practical Introduction using BlueJ”, David J. Barnes & Michael Kölling Fredric Ragnar Telefon Andreas Hedrén Telefon

Denna föreläsning Abstrakta klasser Interface Multipelt arv

Simuleringar Program används ofta för att simulera verkliga saker Stadstrafik Vädret Processer med atomkärnor Svängningar på aktiemarknaden Förändringar i miljön

Simuleringar, mer Ofta simulerar man bara en liten del av någonting Man gör ofta förenklingar Ju mer detaljrik en simulering är, ju större chans är det att resultatet är mer rätt. Ju mer detaljrik en simulering är, ju mer resurser kräver den : –Beräkningskraft –Tid att göra simuleringen

Varför simulera? Ett sätt att kunna göra förutsägelser –Vädret Tillåter att man experimenterar –Säkrare, billigare, snabbare Exempel: –Hur kommer djurlivet att förändras om vi drar en väg rakt igenom den här nationalparken?

Simulering av rov- och bytesdjur Det är ofta en fin balans mellan arterna Många bytesdjur betyder mycket mat Mycket mat tillåter flera rovdjur Fler rovdjur äter fler bytesdjur Färre bytesdjur betyder mindre mat Mindre mat betyder…

Projektet foxes-and-rabbits

De mest intressanta klasserna Fox –En enkel modell av ett rovdjur Rabbit –En enkel modell av ett bytesdjur Simulator –Sköter den övergripande simuleringen –Har en samling rävar och kaniner

Resten av klasserna Field –Representerar ett 2-D fält Location –Representerar en 2-D position SimulatorView, FieldStats, Counter –Underhåller statistik och presenterar en bild av fältet.

Hur det kan se ut

Tillståndet för en kanin public class Rabbit { Static fields omitted. // Individual characteristics (instance fields). // The rabbit's age. private int age; // Whether the rabbit is alive or not. private boolean alive; // The rabbit's position private Location location; Method omitted. }

En kanins beteende Sköts från metoden run Åldern ökas vid varje simuleringssteg –En kanin kan dö vid denna punkt Kaniner som är tillräckligt gamla kan föröka sig vid varje steg –Nya kaniner kan födas vid denna punkt

Förenklingar av kaniner Kaninerna har inte olika kön –I praktiken är alla honor Samma kanin kan föröka sig i varje steg Alla kaniner dör vid samma ålder Fler?

En rävs tillstånd public class Fox { Static fields omitted // The fox's age. private int age; // Whether the fox is alive or not. private boolean alive; // The fox's position private Location location; // The fox's food level, which is increased // by eating rabbits. private int foodLevel; Methods omitted. }

En rävs beteende Sköts från metoden hunt Rävar åldras och förökar sig de med De blir hungriga De jagar mat i närliggande positioner

Förenklingar av rävarna Liknande förenklingar som de hos kaninerna Att jaga och äta kan modelleras på många sätt –Skall tillgången på mat vara additiv? –Är det troligare att en hungrig räv jagar, eller är det mindre troligt? Kan man någonsin acceptera förenklingar?

Klassen Simulator Tre huvudsakliga delar Initiering i konstruktorn Metoden populate() –Varje djur får en slumpmässig ålder vid starten Metoden simulateOneStep() –Itererar över populationen –Två fältobjekt används: field och updatedField

Uppdateringssteget if(animal instanceof Rabbit) { Rabbit rabbit = (Rabbit)animal; rabbit.run(updatedField, newAnimals); } else if(animal instanceof Fox) { Fox fox = (Fox)animal; fox.hunt(field, updatedField, newAnimals); }

Saker som kan förbättras Fox och Rabbit har stora likheter men har ingen gemensam superklass Klassen Simulator är starkt bunden till de andra klasserna –Den vet mycket om hur rävar och kaniner beter sig.

Superklassen Animal Lägg gemensamma fält i Animal : –age, alive, location Döp om metoderna för att stötta ”information hiding”: run och hunt kallas nu act Simulator kan nu bli betydligt mindre hårt kopplad

Omarbetad mindre kopplad iteration for(Iterator iter = animals.iterator(); iter.hasNext(); ) { Animal animal = (Animal)iter.next(); animal.act(field, updatedField, newAnimals); }

Animal -klassens metod act Statisk typkontroll kräver att det finns en metod act i Animal Det finns ingen självklar gemensam implementation av act Definiera act som abstrakt: abstract public void act(Field currentField, Field updatedField, List newAnimals);

Abstrakta klasser och metoder Abstrakta metoder har abstract i signaturen Abstrakta metoder har ingen kropp Abstrakta metoder gör klassen abstrakt Abstrakta klasser kan inte instansieras (skapa sådana objekt) Konkreta subklasser kompletterar med implementation

Klassen Animal public abstract class Animal { fields omitted /** * Make this animal act - that is: make it do * whatever it wants/needs to do. */ abstract public void act(Field currentField, Field updatedField, List newAnimals); other methods omitted }

Ytterligare abstraktion

Selektiv utritning (multipelt arv)

Multipelt arv Låta en klass ärva direkt av flera förfäder Varje språk har sina regler –Hur löser man motstridiga definitioner? Java förbjuder multipelt arv för klasser Java tillåter multipelt arv för interface –Inga motstridiga implementationer

Ett Actor -interface public interface Actor { /** * Perform the actor's daily behavior. * Transfer the actor to updatedField if it is * to participate in further steps of the simulation. currentField The current state of the field. location The actor's location in the field. updatedField The updated state of the field. */ void act(Field currentField, Location location, Field updatedField); }

Klasser implementerar interface public class Fox extends Animal implements Drawable {... } public class Hunter implements Actor, Drawable {... }

Interface som typer Klasser som implementerar ärver inte kod, men… Klasser som implementerar är subtyper av interfacets typer Alltså: polymorfism finns hos interface precis som hos klasser

Interface som specifikation Klar separation av funktionalitet och implementation –Fast det krävs parameter- och returvärdestyper Klienter jobbar mot gränssnittet oberoende av implementationen –Men klienter kan välja mellan olika implementationer

Alternativa implementationer

Summering arv Arv kan ge delad implementation –Konkreta och abstrakta klasser Arv ger delad typinformation –Klasser och interface

Summering abstrakta klasser Abstrakta metoder tillåter statisk typkontroll utan att det krävs en implementation Abstrakta klasser fungerar som superklasser som inte är kompletta –Inga instanser Abstrakta klasser stödjer polymorfism

Summering interface Interface tillhandahåller specifikation utan en implementation –Interface är helt abstrakta Interface stödjer polymorfism Javas interface stödjer multipelt arv