Arv, abstrakta klasser och gränssnitt

Slides:



Advertisements
Liknande presentationer
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.
Advertisements

Array Skriv ett program som frågar följande: ”Hur många tal vill du mata in?” användaren matat in ett tal t.ex n. då frågar programmet n ggr följande.
Fortsättningskurs i Programmering lektion 6
Klassarv och inkapsling
Repetition av objektorientering
OOP Objekt-orienterad programmering
Objektorienterad utveckling Lektion 2 Objekt, överlagring, överskuggning, klasshierarkier och dynamisk bindning KTH Peter Mozelius.
Arv.
Abstract & sealed.
Inkapsling.
Polymorfism.
Programmeringsteknik för K och Media
Föreläsning 6 Referenser Objekt som parametrar public/private Klassvariabler och klassmetoder.
Next previous Introduktion till Java Av Björn Eiderbäck Adress: Rum 1641, 6tr NADA Osquars Backe 2 Tel: OOMPAE 2000.
1 Föreläsning 6 Klass Object, instans av klass public/private Klassvariabler och klassmetoder.
Alice in Action with Java
Föreläsning 13 Polymorfism, Paket och JAR-filer. Polymorfism Ordet härstammar från grekiskan Poly – många Morf – form Polymorf – många former Någonting.
Föreläsning 11 Arrayer.
Objektorienterad programmering i Java
OOP F4:1 Marie Olsson OOP Objekt-orienterad programmering Föreläsning 4 Metoder klass-metoder instans-metoder.
Programmering i C# 3. Klasser.
Sid 41 Fordon int antalhjul; int vikt;
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
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.
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 7 ( ) INNEHÅLL: -Klasser -Att definiera egna klasser -Klassvariabler -Klassmetoder.
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.
1 Föreläsning 6 Programmeringsteknik och Matlab 2D1312/2D1305 Metoder & parametrar Array API och klassen ArrayList.
Föreläsning 1 Reserverade ord Javas API Identifierare Litteraler Variabler Kompilering och interpretering.
Föreläsning 8 Programmeringsteknik och Matlab DD1312 Klassmetoder Egen modul, Self Metoderna: __str__, __lt__,… Meddelande Arv, Överlagring av metoder,
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öreläsning 12 Om slutprovet. Repetition –deklaration av variabler –skapande av objekt (instansiering) –Vektorer och Vector-klassen –Klasser –Instans-/klassvariabler.
Föreläsning 10, kapitel 10 Abstrahera mera! Abstrakta klasser och interface Kursbok: “Objects First with Java - A Practical Introduction using BlueJ”,
OOP F14:1 Stefan Möller OOP Objekt-orienterad programmering Föreläsning 14 Repetition Tips inför inlämningsuppgift 2.
Föreläsning 4 Klasser Och Objekt.
1. Ett problem/uppgift.
Objektorienterad programmering i Java
Föreläsning 1 Om kursen Reserverade ord Javas API Identifierare Litteraler Variabler Kompilering och interpretering.
ITK:P1 Föreläsning 2 Introduktion till objektorientering DSV Marie Olsson.
Class VattenKraft{ public static void main(String[] args){ int num=150; int i, totflöde, maxflöde; int[] fall = new int[num]; //vattenflödet i vattenfallen.
Arv repetition Arv = Är relation Tillgänglighet public, protected och private. Överklass ös Direkt härledd underklass dhu: Class dhu : public ös{} Indirekt.
Föreläsning 17 Repetition. Källkodsformat Unicode används åäöμψζ tillåtna i namn på identifierare Inte alla miljöer klarar av det Källkod Bytekod Java.
TILLÄMPAD DATALOGI (TILDA) Övningsgrupp 2 Marcus Hjelm
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
Övning 3. Repetition Metoder class RepetitionMetoder { public static void main(String [] args) double längd = 2.0; double bredd = 1.0; double area =
Programmeringsteknik
Föreläsning 5 Objekt Klasser Konstruktorer Metoder Minnesbilder av objekt.
Programmeringsteknik för K och Media
Föreläsning 7 Repetition Sammansatta datatyper –vektor (hakvektor, array) –matris.
1 Föreläsning 2 Reserverade ord Javas API Identifierare Litteraler Variabler Kompilering och interpretering.
Föreläsning4 Repetition slingor Metoder. while-sats består av följande delar: 1. while 2. Villkor-sats (condition) 3. uttryck (statement) while-sats int.
Föreläsning 7 Metoder Parametrar Klassmetod.
1 Föreläsning 4 Metoder & parametrar Array API och klassen ArrayList.
Malmö högskola Rolf Axelsson 2003/2004 DA7235, 4 poäng Fält som returvärde Sortera fält Söka i fält Tvådimensionella fält Fält och spelplan Föreläsning.
DA7351 Programmering 1 Fält och objekt Tvådimensionella fält Sortera fält Föreläsning 13.
Föreläsning Klass Cirkel, Punkt Klassen Object Arv, överskuggning
Malmö högskola Rolf Axelsson 2003/2004 DA7231, 4 poäng Referensvariabel Klass och konstruktorer Klass med set- och get-metoder Klass och fält Fler metoder.
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.
Föreläsning 3: Booleans, if, switch
Föreläsning 8: Exempel och problemlösning
Föreläsning 12: Exempel och problemlösning
Föreläsning 2: Typer, klasser, tilldelning
Föreläsning 9: Arv och UML
Föreläsning 10: Abstrakta klasser, gränssnitt
Repetitionsföreläsning 1: Lite rekursion & problemlösning
Presentationens avskrift:

Arv, abstrakta klasser och gränssnitt Java doc

Viktiga OO-begrepp Klass Objekt Överskugga Överlagra Ärva Polymorfism Dynamisk bindning Abstrakta klasser Gränssnitt

Klass diagram Person namn Student Anstalld namn skola namn arbetsgivare lön ProgramStudent namn skola program inskrivningsÅr

Rektangel En rektangel: Rektangel double bredd -double längd +getLängd:double +setLängd(double) +getBredd:double +setBredd(double) +area():double +jämförArea:double +comperTo(Object):int +equals(Object):boolean +toString:String

Cirkel med mittpunkt En Cirkel som har ett objekt Punkt har Cirkel -double radie -Punkt mittPunkt +getRadie:double +setRadie(double) +getMittPunkt:Punkt +setMittPunkt(double ,double ) +area():double +jämförArea:double +comperTo(Cirkel):int +equal(Cirkel):boolean +toString:String Punkt double xKord -double yKord +getX:double +getY:double +equal(Punkt):boolean har

equals Det finns en metod i klassen Object som kan överskuggas precis som toString: public boolean equals(Object o){ if (o instanceof Cirkel) { Cirkel c=(Cirkel) o; if (radie ==c.getRadie()&& mittPunkt.equals(c.getMittPunkt()) return true; } return false;}

Leta efter objekt i ett fält med hjälp av equals Cirkel[] cirklar=new Cirkel[3]; Cirkel nyCirkel=new Cirkel(1,0,0); Cirklar[i].equals(nyCirkel); cirklar Cirkel r=1 p=(0,0) r=2 p=(1,1)

public static void main(String[] args) { TestaCirkelMedPunkt2 m=new TestaCirkelMedPunkt2(); Cirkel[] cirklar; //fältet som håller cirklarna System.out.print("Ange hur många cirklar du vill lägga in i ditt fält: "); int antal=Input.readInt(); // antalet cirklar i fältet cirklar=new Cirkel[antal]; // fältet skapas for (int i=0;i<antal;i++){ cirklar[i]=m.inMatning(); //fältet fylls på med cirklar } m.skrivUt(cirklar); //fältet skrivs ut System.out.println("Ange en cirkel du vill ändra i: "); Cirkel nyCirkel=m.inMatning(); //ny cirkel skapas för att kunna söka i fältet boolean hittad=false; int i=0; do { hittad=nyCirkel.equals(cirklar[i]); i++; } while (hittad==false && (i<cirklar.length)); if (!hittad) //om inte cirklen hittades System.out.println(" Din cirkel finns inte i listan"); else m.ändra(cirklar[i-1]); // ändrar i den cirkeln som är hittad m.skrivUt(cirklar); //skriver ut fältet igen.

Abstrakta klasser Man kan tänka sig att cirklar och rektanglar är geometriska objekt. De har ju visa egenskaper gemensamt. Geometriska objekt kan ha en area. Klassen Geometriska objekt måste dock bli lite mer specialiserad för att kunna skapas som en instans. En abstrakt klass deklareras abstrakt. Den kan inte skapas med new. Abstrakta klasser har abstrakta metoder som subklasserna kan implementera, de är dock deklarerade i den abstrakta klassen. Abstrakta klasser kan ha vanliga metoder och instansvariabler.

GeometrisktObjekt GeometrisktObjekt Cirkel Punkt Rektangel public abstract class GeometrisktObjekt { deklaration protected GeometrisktObjekt() { konstruktor } public abstract double area(); abstrakt metod public double areaSkillnad(GeometrisktObjekt geoObjekt){ return area()-geoObjekt.area(); vanlig metod

TestaGeometrisktObjekt public class TestaGeometrisktObjekt { public static void main(String[] args) { GeometrisktObjekt geo1=new Cirkel(1,1,1); GeometrisktObjekt geo2=new Rektangel(1,1); System.out.println(geo1+" och har arean "+geo1.area()+" a.e."); System.out.println(geo2+" och har arean "+geo2.area()+" a.e"); System.out.println("Area skillnaden är "+geo1.areaSkillnad(geo2)+ " a.e."); }

Utskrift Cirklen har radien 1.0 l.e. och mittPunkten: (1.0, 1.0) och har arean 3.141592653589793 a.e. Rektanglens bredd är 1.0 l.e. och längden är 1.0 och har arean 1.0 a.e Area skillnaden är 2.141592653589793 a.e.

Typ omvandling Implicit typomvandling GeometrisktObjekt geoObjekt1=new Cirkel(1,1,1); Explicit typomvanling Cirkel cirk1= (Cirkel) geoObjekt1; fungerar om man vet att det är rätt typ av objekt Annars får man testa med instansof if ( geoObjekt1 instanceof Cirkel ) { Cirkel cirk1= (Cirkel) geoObjekt1;}

Interfaces-gränssnitt I Java finns inte multipelt arv, d.v.s att en klass kan inte ärva från två klasser. Istället har Java interfaces eller gränssnitt. interfaces har bara abstrakta metoder och kan ha konstanter. Inget objekt kan skapas av ett interface med new. En klass kan implementera ett gränssnitt eller flera, måste då göra egna versioner av metoderna i gränssnittet om inte klassen är abstrakt. Man refererar och arbetar med interfaces på samma sätt som med klasser.

Modifierare Synlighet public + (alla kommer åt) private - (klassen kommer åt) protected # (klassen och subklasserna kommer åt) Andra final (kan inte ändras) static (finns bara en i varje klass)

Interfaces forts. Skapa en fil med samma namn som interfacet och deklarera: public interface Inter { resultattyp m1(parametrar); resultattyp m2(parametrar); static final int k =KONSTANT_VÄRDE; } Ex. public interface HarVolym{ //abstrakt metod som ska implementeras public double volym(); //konstanter public final static double MIN_VOLYM=0;

Interfaces eller abstrakta klasser Interfaces är en svagare är-relation eller Egenskaper som kan finnas hos olika typer av objekt som inte bör ärva varandra Ett interface kan bara ha konstant data medan abstrakta klasser kan har instansvariabler Ett interface har bara abstrakta metoder som inte är implementerade. En abstrakt klass kan ha konkreta metoder. Eftersom alla metoderna i ett interface är abstrakta måste man inte ange det explicit.

Comparable package java.lang; public interface Comparable { public int comparTo (Object o); } Ex. public int compareTo(Object o){ Rektangel annanRektangel= (Rektangel) o; double areaSkillnad; areaSkillnad=area()-annanRektangel.area(); if (areaSkillnad>0) return 1; else if (areaSkillnad<0) return -1; else return 0;

Ett exempel GeometrisktObjekt Cirkel Punkt Rektangel Comparable

Java doc Klasser och metoder kommenteras med Javadoc vilket gör att html-filer som beskriver klassen kan genereras. /** * <p>Title: Rektangel</p> * <p>Description: En rektangel. </p> * <p>Copyright: Copyright (c) 2004</p> * <p>Company: Malmö högskola</p> * @author Kristina von Hausswolff * @version 1.1 */

Java doc /** * Konstruktor som sätter bredd och längd * @param bredd rektanglens bredd * @param längd rektanglens längd */ // konstruktorn * Retunerar rektanglens längd * @return höjd // metoden getLängd