Nedarvning! Plan! Overlæsning! Signaturer! Overlæsning af metoder og konstruktører! Nedarvning fra klasser! Implementering af grænseflader!

Størrelse: px
Starte visningen fra side:

Download "Nedarvning! Plan! Overlæsning! Signaturer! Overlæsning af metoder og konstruktører! Nedarvning fra klasser! Implementering af grænseflader!"

Transkript

1 Nedarvning! Plan! Overlæsning af metoder og konstruktører! Nedarvning fra klasser! Implementering af grænseflader! Retningslinjer for design af klasser! Animering i appletter! 1! 2! Overlæsning! Signaturer! Java tillader mulighed for at metoder og konstruktører kan deles om det samme navn. Navnet siges da at være overlæsset med flere implementationer.! Lovligheden af en overlæsning afgøres af metodernes og konstruktørernes signatur, d.v.s. sekvensen af parametrenes typer.! Metode!! Signatur! String tostring()!! ()! void move(int dx, int dy)! (int, int)! void paint(graphics g)! (Graphics)! Hvis to metoder eller konstruktører har forskellige signaturer, må de gerne dele det samme navn.! Bemærk at returtypen ikke indgår i signaturen.! 3! 4!

2 Eksempel på overlæsning (kontruktører)! public class Point {! double x, y;! public Point() {! x = 0.0; y = 0.0;! public Point(double x, double y) {! this.x = x; this.y = y;!...! }! 5! Eksempel på overlæsning (metoder)! public class Point {! double x, y;! //...! public double distance(point other) {! double dx = this.x - other.x, dy = this.y - other.y;! return Math.sqrt(dx*dx + dy*dy);! public double distance(double x, double y) {! double dx = this.x - x, dy = this.y - y;! return Math.sqrt(dx*dx + dy*dy);! public double distance(int x, int y) {! double dx = this.x - x, dy = this.y - y;! return Math.sqrt(dx*dx + dy*dy);! }! 6! Alternativ implementering! Brug af overlæsning! public class Point {! double x, y;! //...! public double distance(double x, double y) {! double dx = this.x - x, dy = this.y - y;! return Math.sqrt(dx*dx + dy*dy);! public double distance(point other) {! return distance(other.x, other.y);!!!!!!!!!!public double distance(int x, int y) {! return distance((double) x, (double) y);!}!!!!!!! 7! Overlæsning bør kun bruges, når der findes en generel beskrivelse af funktionaliteten, der passer på alle overlæssede metoder.! public class StringBuffer {! StringBuffer append(string str) {... StringBuffer append(boolean b) {... StringBuffer append(char c) {... StringBuffer append(int i) {... StringBuffer append(long l) {... StringBuffer append(float d) {... StringBuffer append(double d) {... //...! Hvorfor er returværdien ikke void?! 8!

3 For at forenkle notationen ved successive af kald af append på samme StringBuffer-object.!!!StringBuffer buf = new StringBuffer();!!!buf.append("A").append(38);! Implementation:!!private char[] value;!!private int count;! Svar!!public StringBuffer append(string str) {!! int newcount = count + str.length();!!! ensurecapacity(newcount);!! str.getchars(0, str.length(), value, count);!! count = newcount;!! return this;!! 9! public class String {! public String substring(int i, int j) {! // base method: return substring [i..j-1]! Brug af overlæsning (2)! public String substring(int i) {! return substring(i, length());! //...! 10! Nedarvning fra klasser! Eksempel på nedarvning! Når klassen C2 nedarver fra (eller udvider) klassen C1, siges C2 at være en underklasse af C1, og C1 siges at være overklasse for C2.! C1! C2! class C2 extends C1 {! //...! class ColoredPoint extends Point {! Color color;! //...! Point! double x! double y!...! Alle medlemmer i C1, der er public eller protected, er tilgængelige i C2.! ColoredPoint! Color color!...! 11! 12!

4 En klasse, som arver fra en anden klasse, kan være en specialisering (typisk), en udvidelse, eller både en specialisering og en udvidelse af denne klasse.! Specialisering:! Brug af arv! class ChessFrame extends JFrame {! //...! Udvidelse:! class ColoredPoint extends Point {! //...! Former for arv! (god, dårlig, kompliceret)! Specialisering. Underklassen er et specialtilfælde af overklassen.! Udvidelse. Underklassen tilføjer ny funktionalitet til overklassen, men ændrer ikke den nedarvede adfærd.! Specifikation. Overklassen definerer adfærd, som implementeres i underklassen, men ikke i overklassen.! Begrænsning. Underklassen begrænser brugen af en del af den nedarvede adfærd fra overklassen.! Konstruktion. Underklassen gør brug af overklassens adfærd, men er ikke en undertype af sin overklasse.! Kombination. Underklassen nedarver adfærd fra mere end én overklasse.! 13! 14! Designregel for klasser! Singulær nedarvning! I Java må enhver klasse højst have én overklasse.! Åben-lukket-princippet: En klasse bør være åben for udvidelse, men lukket for modifikation.! C1! C1a! C1b! Bertrand Meyer! C2a! C2b! C2! C3! 15! 16!

5 Klassen Object! Klassen Object! I Java er alle klasser organiseret i et hierarki, der har klassen Object som rod.! public class Object {! public String tostring();! public boolean equals(object obj);! public int hashcode();! protected Object clone();! Enhver klasse, undtagen Object, har en unik overklasse.! Hvis der for en klasse ikke eksplicit defineres nogen overklasse, er Object dens overklasse.! public final void notify();! public final void notifyall();! public final wait()! throws InterruptedException;! public final wait(long millis)! throws InterruptedException;! public final wait(long millis, int nanos)! throws InterruptedException;! public void finalize();! public final Class getclass();!// reflection! 17! 18! Klassen Class! Konstruktører for underklasser! public class Class implements Serializable {! public java.lang.reflect.constructor[] getconstructors()! throws SecurityException;! public java.lang.reflect.field[] getfields()! throws SecurityException;! public java.lang.reflect.method[] getmethods()! throws SecurityException;! public Class getsuperclass();! public static Class forname(string s)! throws ClassNotFoundException;! public Object newinstance()! throws InstantiationException,! IllegalAccessException;!...! import java.awt.color;!!!!!!!!!! public class ColoredPoint extends Point {!!!!!public Color color;!!!!!!!!!!!!public ColoredPoint(double x, double y, Color color) {!! super(x, y);!! // must be the first statement!!!!this.color = color;!!!!!!!!public ColoredPoint(double x, double y) {! // black point!!! this(x, y, Color.black); // must be the first statement!!!public ColoredPoint() {!!! color = Color.black; // invokes super() implicitly!!!!!!!!!! 19! 20!

6 Konstruktion af egne Exception-klasser! Klassen Exception! eller! class MyException extends Exception { class MyException extends Exception {! MyException() {! super();! MyException(String s) {! super(s);! public class Exception extends Throwable {! public Exception() {! super();! public Exception(String s) {! super(s);! 21! 22! Klassen Throwable! public class Throwable {! private String detailmessage;! public Throwable() {! fillinstacktrace();! public Throwable(String message){! this();! detailmessage = message;! public String tostring() {! String s = getclass().getname();! String message = detailmessage;! return message!= null? (s + ": " + message) : s;! public void printstacktrace() {... public native Throwable fillinstacktrace();! 23! public class ExceptionTest {! static void pip() throws MyException {!!throw new MyException("Oops!");!!! public static void main(string[] args) {! try {! pip();! } catch (MyException e) {! System.out.println(e);! e.printstacktrace();! MyException: Oops!! MyException: Oops!! at ExceptionTest.pip(ExceptionTest.java)! at ExceptionTest.main(ExceptionTest.java)! 24!

7 Initialisering af nedarvede klasser! Referencer! public class Super {! int x =...;!!// executed first! public Super() {! x =...;!!// executed second! public class Extended extends Super {! int y =...;!!// executed third! En variabel af referencetype indeholder en henvisning til et objekt.! En reference kan henvise til objekter fra forskellige klasser, blot reglen om undertyper er overholdt.! public Extended() {! y =...;!!// executed fourth! Super s = new Extended();! 25! 26! Reglen om undertyper! Designregel for underklasser! Definition: En type er en mængde af værdier.! Definition: Typen T 1 er en undertype af typen T 2, hvis enhver værdi i T 1 også er en værdi i T 2.! T 2! T 1! Regel: En værdi af en undertype kan optræde overalt, hvor en værdi af dens overtype forventes.! Liskovs substitutionsprincip: Et objekt af en underklasse bør kunne optræde overalt, hvor et objekt af dens overklasse forventes.! Line! Shape! Rectangle! Lines! Er-relation imellem klasser (is-a)! Shapes! Rectangles! 27! 28!

8 Polymorf tildeling! Tildelingsreglen: Typen af et udtryk på højresiden af en tildeling skal være en undertype af typen på venstresiden.! Shape ashape;!!!!! Line aline = new Line(...);!! Rectangle arectangle = new Rectangle(...);! ashape = aline;! ashape = ashape;! aline = arectangle;! aline = ashape;!!// ok!!// ok!!// compilation error!!// compilation error! Tildelingsreglen checkes på oversættelsestidspunktet.!!aline = ashape;! Typekonvertering! (casting, kvalificering)!!// compilation error! Reglen kan tilfredsstilles ved at indsnævre typen på højresiden (narrowing, down casting):! aline = (Line) ashape;!!// ok! Lovligheden af tildelingen checkes på kørselstidspunktet.! En ulovlig indsnævring bevirker, at der kastes en ClassCastException.! 29! 30! Bestemmelse af klassetilhørsforhold! Operatoren instanceof kan benyttes til at afgøre, hvorvidt et objekt tilhører en given klasse (eller grænseflade).! if (ashape instanceof Line)! aline = (Line) ashape;!! Arraytyper! I Java er arrays objekter. Alle arrays er undertyper af Object.! Object! int[]! double[]! X! X[]! Y! Y[]! 31! 32!

9 Overskrivning af metoder! Overskrivning foretages, når der i en underklasse defineres en metode med samme navn, signatur og returværdi som en metode i overklassen. Ellers foretages overskrivning ikke.! class Shape {! public String tostring() {! return "Shape";! class Line extends Shape {! Point p1, p2;! public String tostring() {! return "Line from " + p1 + " to " + p2;! }! Præcision ved overskrivning! class B {! public void m(int i) {... class C extends B {! public void m(char c) {... resulterer ikke i overskrivning, men derimod i overlæsning.! Giver ikke oversætterfejl, som hævdet i lærebogen (s. 172).! 33! 34! Præcision ved overskrivning! Løsning 1! public interface Comparable {! int compareto(object obj);! class Number implements Comparable {! public int compareto(number number) {! return value < number.value? -1 :! value > number.value? 1 : 0;! private int value;! class Number implements Comparable {! public int compareto(object obj) {! return value < ((Number) obj).value? -1 :! value > ((Number) obj).value? 1 : 0;! private int value;! Nødvendig! giver fejl på oversættelsestidspunktet:!!number is not abstract and does not override!abstract method compareto(java.lang.object) in!comparable! 35! 36!

10 class Number implements Comparable<Number> {! public int compareto(number number) {! return value < number.value? -1 :! value > number.value? 1 : 0;! Løsning 2! (med generisk type)! private int value;! idet Comparable i Java 5.0 er defineret således! interface Comparable<T> {! public int compareto(t I Java 5.0 er det muligt med at få oversætteren til at kontrollere, at en metode overskrives.! class Number public String tosting() {!...! Ved oversættelse gives fejlmeddelelsen! Stavefejl! method does not override a method from its ^! 37! 38! Polymorfe metodekald! Hvilken implementation af en overskrevet metode, der udføres, afhænger af objekttypen og afgøres på kørselstidspunktet (dynamisk binding).! Shape[] shapes = new Shape[100];! shapes[0] = new Line(...);! shapes[1] = new Rectangle(...);!...! for (int i = 0; i < 100; i++)! System.out.println(shapes[i].toString());! Polymorfe metodekald! Hvilken implementation af en overskrevet metode, der udføres, afhænger af objekttypen og afgøres på kørselstidspunktet ved søgning op igennem klassehierarkiet, startende ved den klasse, som objektet tilhører.! Den første implementation af metoden, der mødes, udføres.! Object! Shape! Kun instansmetoder kan kaldes polymorft.! Line! Rectangle! 39! 40!

11 Kald af overskrevne metoder! class Point {! //...! public boolean equals(object other) {! if (other instanceof Point) {! Point p = (Point) other;! return x == p.x && y == p.y;! return false;! Nedarvning fra og implementering af grænseflader! En grænseflade erklærer metoder uden implementation. Klasser, der implementer en grænseflade, skal angive implementationer for alle grænsefladens metoder (hvis klassen da ikke skal være abstrakt).! class ColoredPoint extends Point {! //...! public boolean equals(object other) {! if (other instanceof ColoredPoint) {! ColoredPoint p = (ColoredPoint) other;! return super.equals(p) && color.equals(p.color);! return false;! 41! En grænseflade kan nedarve fra en eller flere andre grænseflader, men ikke fra en klasse.! En klasse kan implementere flere grænseflader.! 42! Implementation af flere grænseflader! Delegering! interface Drawable {!!!!!void draw(graphics g);!! }!!!!!!!!!!!!!! class Rectangle implements Drawable, Movable {!!public void draw(graphics g) {!!! // draw the rectangle!}!!!!!!!!!!!!!!public void move(double dx, double dy) {!! // move the rectangle!}!!!!! }! Multipel nedarvning fra klasser er ikke tilladt i Java, men kan opnås ved hjælp af delegering:! StudentImpl! Student! Employee! EmployeeImpl! FullTimeStudent! StudentEmployee! FullTimeEmployee! 43! 44!

12 interface Student {! float getgpa();! interface Employee {! float getsalary();! // Grade Point Average! public class StudentImpl implements Student {! public float getgpa() {! return...;!!// calculate GPA! public class EmployeeImpl implements Employee {! public float getsalary() {! return...;!// calculate salary! public class StudentEmployee implements Student, Employee {! private StudentImpl mystudentimpl = new StudentImpl();! private EmployeeImpl myemployeeimpl = new EmployeeImpl();! public float getgpa() {! return mystudentimpl.getgpa();!!// delegation! public float getsalary() {! return myemployeeimpl.getsalary();!// delegation! 45! 46! Fælles egenskaber kan samles i en overklasse! Mærkegrænseflader (marker interfaces)! StudentImpl! Student! Person! Employee! EmployeeImpl! En mærkegrænseflade er en tom grænseflade, altså en grænseflade uden metoder og konstanter.! De to mest benyttede er!!!!!!!!!interface Cloneable!!(java.lang) og!!!!!!!!!interface Serializable!!(java.io)! FullTimeStudent! StudentEmployee! FullTimeEmployee! 47! 48!

13 Retningslinjer ved design af klasser! (1) Undgå offentlige felter! Et felt må kun være offentligt, hvis klassen er final, og en ændring af feltets værdi frit kan foretages.! public class Point {! protected double x, y;! public double getx() { return x; public double gety() { return y; public void setx(double x) { this.x = x; public void sety(double y) { this.y = y; public class PolarPoint extends Point {! protected double r, a;! public PolarPoint() { public PolarPoint(double r, double a)! { this.r = r; this.a = a; polartorectangular(); public double getradius() { return r; public double getangle() { return a; public void setradius(double r) { this.r = r; polartorectangular(); public void setangle(double a) { this.a = a; polartorectangular(); public void setx(double x) { this.x = x; rectangulartopolar(); public void sety(double y) { this.y = y; rectangulartopolar(); protected void polartorectangular() {! x = r * Math.cos(a);! y = r * Math.sin(a);! protected void rectangulartopolar() {! r = Math.sqrt(x * x + y * y);! a = Math.atan2(y, x);! }! }! y! a! r! x! (x,y)! 49! 50! (2) Adskil grænseflade fra implementation! Når funktionaliteten af en klasse kan opnås på forskellig vis, bør grænsefladen adskilles fra implementationen.! public interface List {! Object elementat(int pos);! int getcount();! boolean isempty();! void insertelementat(object obj, int pos);! void removeelementat(int pos);! public class LinkedList implements List {! // body of LinkedList! public class ArrayList implements List {! // body of ArrayList! (3) Placer en klasses hjælpeklasser i samme fil som klassen! Definer eventuelt en hjælpeklasse som en indre klasse.! public class LinkedList implements List {! protected static class Node {! Node prev, next;! Object element;! Node! //...! prev! next! element! Object! 51! 52!

14 (4) Klasser, der skal være generelt anvendelige,!!bør være på kanonisk form!!erklær en offentlig no-arg-konstruktør (tillader dynamisk!indlæsning af klassen).!!overskriv metoderne tostring, equals og hashcode.!!implementer grænsefladen Cloneable og overskriv,!om nødvendigt, metoden clone.!!implementer grænsefladen Serializable, hvis objekter!skal gemmes i en fil eller sendes over netværk.! public class LinkedList implements List, Cloneable {! public String tostring() {! StringBuffer s = new StringBuffer();! for (int i = 0; i < getcount(); i++)! s.append("[" + i + "] = " + elementat(i) + "\n");! return s.tostring();! //...! fortsættes! 53! 54! public boolean equals(object otherlist) {! if (otherlist instanceof List) {! if (getcount() == otherlist.getcount()) {! for (int i = 0; i < getcount(); i++) {! Object thiselement = elementat(i);! Object otherelement = otherlist.elementat(i);! if ((thiselement == null && otherelement!= null)!!thiselement.equals(otherelement))! return false;! return true;! return false;! }! fortsættes! Om brug af hashcode! int hashcode()! Tænk på værdien af hashcode som et vink om, på hvilken plads i hashtabellen, objektet ligger.! Der bør for ethvert par af objekter (o1, o2) gælde:! o1.equals(o2)! o1.hashcode() == o2.hashcode()! Ideelt set (men ofte ikke praktisk muligt) desuden:!!o1.equals(o2)! o1.hashcode()!= o2.hashcode()! 55! 56!

15 public int hashcode() {! int sum = 0;! for (int i = 0; i < 4 && i < getcount(); i++) {! sum <<= 8;! sum = elementat(i).hashcode() & 0xFF;! return sum;! }! public Object clone()! throws CloneNotSupportedException {! LinkedList list = (LinkedList) super.clone();! list.head = list.tail = null;! list.count = 0;! for (Node node = head; node!= null; node = node.next)! if (node.item!= null)! list.insertlast(node.item);! return list;! }! sum =! hash0! hash1! hash2! hash3! Konsistent med equals.! 8 bit! 8 bit! 8 bit! Konsistent med equals! 8 bit! fortsættes! Her er der tale om en dyb kopi ( deep copy ).! Hvis der kun foretages bitvis kopiering af objektets felter!! (med super.clone()), er der tale om en lav kopi ( shallow copy ).! 57! 58! (5) Ordn klassens medlemmer i forhold til deres!!tilgængelighed og roller! (6) Sørg for at de offentlige metoder tilfredsstiller!følgende to krav:! public class TypicalClass {! <public constants>! <public constructors>! <public accessors>! <public mutators>! <nonpublic fields>! <nonpublic auxiliary methods and nested classes>!!fuldstændighed:!!!!!!brugeren skal have adgang til klassens fulde!!funktionalitet.!!sikkerhed:!!!!!!et kald må aldrig føre til en ikke-konsistent tilstand.!bevar klasseinvarians.! 59! 60!

16 (7) Afprøv hver klasse for sig (unit testing)! Afprøvningen af en klasse kan passende foretages i en main-metode i klassen.! Ekstern afprøvning (black-box test)!! Kald enhver metode mindst én gang - og med passende kombinationer af mulige parameterværdier.!! XP: Programmér dette før implementering af metoderne.! Intern afprøvning (white-box test)!!! Udfør enhver mulig vej i enhver metode mindst én gang.! Værktøjer: junit og jtest! 61! Eksempel på brug af junit! import junit.framework.*;! public class FractionTest extends TestCase {! private Fraction f1, f2, f3;! public void setup() {! f1 = new Fraction(3, 4);! f2 = new Fraction(4, 5);! f3 = new Fraction(-3, 4);! public void testadd() {! asserttrue(f1.add(f2).equals(new Fraction(31, 20)));! asserttrue(f1.add(f3).equals(new Fraction(0)));! public static void main(string[] args) {! new junit.textui.testrunner().run(fractiontest.class);! 62! (8) Dokumenter kildekoden med javadoc! Eksempel på en javadoc kommentar:!!/**!!!* Retrieves the element from the LinkedList!!* at the position pos!!*!!*@param pos!the position!!!!*@return!the retrieved element!!*@see!#insertelementat(object element, int pos)!!*/!!public Object elementat(int pos) {! Andre specielle mærker (tags):!!@author!!@version!!@exception 63! 64!

17 (9) Angiv kontrakter og klasseinvarianter! Eksempel på kontrakt:! /**!! * Retrieves the element from the LinkedList! * at the position pos! *!!! *@pre!!pos >= 0 && pos < size()! *@post!!@nochange! */! public Object ElementAt(int pos)! Værktøj: jcontract! 65! 66! (10) Benyt påstande (assertions) aggressivt! Frameworks! (programskeletter)! Defensiv programmering:! Hver metode bør afprøve sine pre- og postbetingelser samt klassens invarianter.! public Object ElementAt(int i) {! assert i >= 0 && i < size();!...! }! Ny i JDK 1.4! Kan kaste en AssertionError undtagelse! Et framework (ramme, skelet, stel) består typisk af en mængde af abstrakte klasser og grænseflader, der udgør delene i halvfærdige programmer.! Et framework anvendes ved at udfylde dets huller.! Kontrollen ligger typisk i frameworket.! Et eksempel er klassen java.applet.applet.! 67! 68!

18 Appletter! Klassen java.applet.applet er et skelet af en applet.! En applets livscyklus! (tilstandsdiagram)! paint()! En underklasse kan tilpasse en applet ved at overskrive en eller flere af følgende metoder:! start()! running!!init()!!kaldes, når appletten indlæses!!start()!!kaldes, når websiden besøges!!stop()!!kaldes, når websiden forlades!!destroy()!kaldes, når websiden fjernes!!paint()!!kaldes, når websiden skal (gen)tegnes! init()! born! stop()! idle! start()! destroy()! dead! 69! 70! En applet til visning af tid! DigitalClock.java! import java.awt.*;! import java.util.calendar;! public class DigitalClock! extends java.applet.applet implements Runnable {! protected Thread clockthread = null;! protected Font font = new Font("Monospaced", Font.BOLD, 48);! protected Color color = Color.green;! public void start() {... public void stop() {... public void run() {... public void paint(graphics g) {... 71! 72!

19 Metoderne start og stop! Metoden run! public void start() {! if (clockthread == null) {! clockthread = new Thread(this);! clockthread.start();! public void stop() {! clockthread = null;! public void run() {! while (clockthread!= null) {! repaint();! try {! Thread.sleep(1000);! } catch (InterruptedException e) { 73! 74! Metoden paint! drawstring! public void paint(graphics g) {! Calendar calendar = Calendar.getInstance();! int hour = calendar.get(calendar.hour_of_day);! int minute = calendar.get(calendar.minute);! int second = calendar.get(calendar.second);! g.setfont(font);! g.setcolor(color);! g.drawstring(hour + ":" + minute / 10 + minute % 10! + ":" + second / 10 + second % 10,! 10, 60);! basislinje! (x,y)! A sample string! 75! 76!

20 HTML-filen! Visning af tidspunkt i millisekunder! <html>! <body bgcolor=white>! <center>! <h1> The Digital Clock Applet</h1>! <applet codebase="java Classes"! code=digitalclock.class! width=250 height=80>! </applet>! </center>! </body>! </html>! 77! 78! public void run() {! while (clockthread!= null) {! repaint();! try {! Thread.sleep(1);! } catch (InterruptedException e) { Visning af tidspunkt og dato! public void paint(graphics g) {! Calendar calendar = Calendar.getInstance();! int hour = calendar.get(calendar.hour_of_day);! int minute = calendar.get(calendar.minute);! int second = calendar.get(calendar.second);! int millisecond = calendar.get(calendar.millisecond);! g.setfont(font);! g.setcolor(color);! g.drawstring(hour + ":" + minute / 10 + minute % 10 +! ":" + second / 10 + second % 10 +! ":" + millisecond / 100 +! (millisecond / 10) % 10 +! millisecond % 10, 10, 60);! 79! 80!

21 Parametre til appletter! public void paint(graphics g) {! Calendar calendar = Calendar.getInstance();! int hour = calendar.get(calendar.hour_of_day);! int minute = calendar.get(calendar.minute);! int second = calendar.get(calendar.second);! Date date = new Date();! DateFormat df = DateFormat.getDateInstance();! g.setfont(font);! g.setcolor(color);! g.drawstring(hour + ":" + minute / 10 + minute % 10 +! ":" + second / 10 + second % 10 +! " " + df.format(date), 10, 60);! <html>! <body bgcolor=white>! <center>! <h1>the <b>extended</b> Digital Clock Applet</h1>! <applet codebase="java Classes"! code=digitalclock.class! width=250 height=80>! <param name=color value=blue>! </applet>! </center>! </body>! </html>! 81! 82! import java.awt.color;! En applet til animering af en lysavis! public class DigitalClock2 extends DigitalClock {! public void init() {! String param = getparameter("color");! if ("red".param.equals(param))! color = Color.red;! else if ("blue".equals(param))! color = Color.blue;! else if ("yellow".equals(param))! color = Color.yellow;! else if ("orange".equals(param))! color = Color.orange;! else! color = Color.green;! 83! 84!

22 import java.awt.*;! public class ScrollingBanner! extends java.applet.applet! implements Runnable {! protected Thread bannerthread;! protected String text;! protected Font font = new Font("Sans-serif", Font.BOLD, 24);! protected int x, y;! protected int delay = 100;! protected int offset = 1;! protected Dimension d;! Klassen ScrollingBanner! public void init() {... public void start() {... public void stop() {... public void paint(graphics g) {... public void run() {... 85! HTML-filen! <html>! <head>! <title> Scrolling Banner Applet </title>! </head>! <body bgcolor=black text=white>! <center>! <h1> The Scrolling Banner Applet</h1>! <p>! <applet! codebase="java Classes"! code=scrollingbanner.class! width=250 height=33>! <param name=text value="java is cool">! <param name=delay value=50>! </applet>! </center>! </body>! </html>! 86! Metoden init! Animeringen! public void init() {! String att = getparameter("text");! text = att!= null? att : "Scrolling banner.";! att = getparameter("delay");! if (att!= null)! delay = Integer.parseInt(att);! d = getsize();! x = d.width;! y = font.getsize();! size! length! Java is cool! (-length, y)! leftmost position! (0,0)! viewing area! Java is cool! (x,y)! (d.width-1, d.height-1)! Java is cool! (d.width, y)! rightmost position! Initialiseringen foretages i init() - ikke i en konstruktør! 87! 88!

23 Metoden paint! Metoderne start og stop! public void paint(graphics g) {! g.setfont(font);! FontMetrics fm = g.getfontmetrics();! int length = fm.stringwidth(text);! x -= offset;! if (x < -length)! x = d.width;! g.setcolor(color.black);! g.fillrect(0, 0, d.width, d.height);! g.setcolor(color.green);! g.drawstring(text, x, y);! public void start() {! if (bannerthread!= null) {! bannerthread = new Thread(this);! bannerthread.start();! public void stop() {! bannerthread = null;! 89! 90! Metoden run! public void run() {! while (bannerthread!= null) {! repaint();! try {! Thread.sleep(delay);! } catch (InterruptedException e) { Hvorledes undgås flimmer?! Flimmer skyldes kaldet af repaint.! repaint kalder update, der som standard!!1. maler hele området med baggrundsfarven (typisk hvid),!!2. sætter skrivefarven til forgrundsfarven (typisk sort), og!!3. kalder paint! Løsning:!!Overskriv update.!!benyt et Image-objekt som buffer (mellemlager).! 91! 92!

24 import java.awt.*;! Brug af dobbeltbuffer for at eliminere flimmer! public class ScrollingBanner2 extends ScrollingBanner {! protected Image image;! protected Graphics offscreen;! public void update(graphics g) {!// called by repaint! if (image == null) {! image = createimage(d.width, d.height);! offscreen = image.getgraphics();! super.paint(offscreen);!// paint in buffer! g.drawimage(image, 0, 0, this);!// copy buffer to screen! public void paint(graphics g) {! update(g);! 93! Brug et Swing-JPanel for at eliminere flimmer! class ScrollingBannerAnimator! extends JPanel implements Runnable {! protected Thread bannerthread;! protected String text;! protected Font font =! new java.awt.font("sans-serif", Font.BOLD, 24);! protected int x, y;! protected int delay;! protected int offset = 1;! protected Dimension d;! ScrollingBannerAnimator(int delay, String text)! { this.delay = delay; this.text = text;! /* setdoublebuffered(true); */ void start() {... void stop() {... void run() {... void paintcomponent(graphics g) {... fortsættes! 94! public class ScrollingBanner extends JApplet {! ScrollingBannerAnimator animator;! int delay = 100;! String text;! Klassen java.awt.graphics! public void init() {! String att = getparameter("delay");! if (att!= null)! delay = Integer.parseInt(att);! att = getparameter("text");! if (att!= null)! text = att!= null? att : "Scrolling banner.";! animator = new ScrollingBannerAnimator(delay, text);! animator.setsize(getsize());! getcontentpane().add(animator);! public void start() { animator.start(); public void stop() { animator.stop(); void setcolor(color c)! void setfont(font f)! void setpaintmode()!!! void setxormode(color c)!!! Color getcolor()! Font getfont()! FontMetrics getfontmetrics()! FontMetrics getfontmetrics(font f)! fortsættes! 95! 96!

25 void drawstring(string s, int x, int y)! void drawline(int x1, int y1, int x2, int y2)! void drawrectangle(int x, int y, int w, int h)! void fillrectangle(int x, int y, int w, int h)! void drawoval(int x, int y, int w, int h)! void filloval(int x, int y, int w, int h)! void drawroundrect(int x, int y, int w, int h)! void fillroundrect(int x, int y, int w, int h)! void draw3droundrect(int x, int y, int w, int h,!!!! boolean raised)! void fill3droundrect(int x, int y, int w, int h,!!!! boolean raised)! void drawarc(int x, int y, int w, int h,!!! int startangle, int arcangle)! void fillarc(int x, int y, int w, int h,!!! int startangle, int arcangle)! void drawimage(image img, int x, int y,... )! Læsning af filer fra appletter! En applet kan ikke læse filer på klientmaskinen,! kun på servermaskinen.! import java.net.*;!...! try {! URL url = new URL(getDocumentBase(), filename);! BufferedReader in = new BufferedReader(! new InputStreamReader(! url.openstream()));! String line;! while ((line = in.readline())!= null) {! process line;! } catch (IOException e) { 97! 98! Ugeseddel 3" 14. september september!!læs kapitel 7 i lærebogen (side )!!Løs opgave 5.1, projekt 5.4 (fortsættelse af opgave 5.1) og opgave 5.5.!!Vink til opgave 5.5: Beregningerne af koordinater kan foretages ud!!fra koden i metoden polartorectangular på side 212 i lærebogen!(se også figur 6.3 på side 211).! 99!

Plan. Overlæsning af metoder og konstruktører. Nedarvning fra klasser. Implementering af grænseflader. Retningslinjer for design af klasser

Plan. Overlæsning af metoder og konstruktører. Nedarvning fra klasser. Implementering af grænseflader. Retningslinjer for design af klasser Nedarvning 1 Plan Overlæsning af metoder og konstruktører Nedarvning fra klasser Implementering af grænseflader Retningslinjer for design af klasser Animering i appletter 2 Overlæsning Java tillader mulighed

Læs mere

Datalogi OB, Efterår 2002 OH er, forelæsning 10/ Klasser og nedarvning

Datalogi OB, Efterår 2002 OH er, forelæsning 10/ Klasser og nedarvning Datalogi OB, Efterår 2002 OH er, forelæsning 10/9-2002 Klasser og nedarvning Hvad er formålet? Typer, generisk kode, typeparameterisering Kritisk kig på, hvordan man gør i Java. Eftermiddagens opgave:

Læs mere

Klasser og nedarvning

Klasser og nedarvning Datalogi C, Efterår 2004 OH er, forelæsning 21/9-2004 Klasser og nedarvning Hvad er formålet? Typer, generisk kode, typeparameterisering Kritisk kig på, hvordan man gør i Java. Opgaven til senere: Generalisere

Læs mere

Ugeseddel 4 1. marts - 8. marts

Ugeseddel 4 1. marts - 8. marts Ugeseddel 4 1. marts - 8. marts Læs følgende sider i kapitel 6 i lærebogen: s. 233 258 og s. 291 317 (afsnit 6.3 overspringes). Begynd at overveje, hvad afleveringsopgaven skal omhandle. Læs vejledningen,

Læs mere

OOP e uge kursusgang. Disposition for (gennemgang af) afleveringsopgave. Deck.shuffle() 'Problemformulering', Indledning

OOP e uge kursusgang. Disposition for (gennemgang af) afleveringsopgave. Deck.shuffle() 'Problemformulering', Indledning OOP e2002 - uge 40 Disposition for (gennemgang af) afleveringsopgave IV. Teori B: Designmønstre. V. Tips til øvelser: Bold-appletten, dobbeltbufring. 1. Problemformulering 2. Design for at forklare designet

Læs mere

Polymorfi. Arv (inheritance) Abstrakte klasser, substitutionsprincippet, overriding, statisk og dynamisk type. Coercion

Polymorfi. Arv (inheritance) Abstrakte klasser, substitutionsprincippet, overriding, statisk og dynamisk type. Coercion Polymorfi Arv (inheritance) Abstrakte klasser, substitutionsprincippet, overriding, statisk og dynamisk type Coercion Tvangskonvertering (forfremmelse og begrænsning) Oversigt Abstrakt klasse abstrakt

Læs mere

Tree klassen fra sidste forelæsning

Tree klassen fra sidste forelæsning Programmering 1999 Forelæsning 12, fredag 8. oktober 1999 Oversigt Abstrakte klasser. Grænseflader. Programmering 1999 KVL Side 12-1 Tree klassen fra sidste forelæsning class Tree { int age; // in years

Læs mere

Dag 10 Flertrådet programmering

Dag 10 Flertrådet programmering Videregående programmering i Java Dag 10 Flertrådet programmering Fremlæggelse af programmering/status for projekter Dokumentation med javadoc Flertrådede designmønstre: Arbejdstråd, Producent Konsument,

Læs mere

class subklasse-navn extends superklasse-navn { } NorwaySpruce har superklassen Spruce, som igen har superklassen Tree.

class subklasse-navn extends superklasse-navn { } NorwaySpruce har superklassen Spruce, som igen har superklassen Tree. Programmering 1999 Forelæsning 11, tirsdag 5. oktober 1999 Oversigt Klasse-hierarkier: superklasser og subklasser Nedarvning Polymorfi Programmering 1999 KVL Side 11-1 Hierarkier En klasse repræsenterer

Læs mere

Software Construction 1 semester (SWC) Spørgsmål 1

Software Construction 1 semester (SWC) Spørgsmål 1 Spørgsmål 1 Objekter #1 Giv en kort præsentation af begrebet objekt, samt hvorledes du erklærer(declare), opretter(create) og bruger objekter Du kan beskrive o Datatyper o Variable / Instans variable /

Læs mere

University of Southern Denmark Syddansk Universitet. DM503 Forelæsning 11

University of Southern Denmark Syddansk Universitet. DM503 Forelæsning 11 DM503 Forelæsning 11 Generics Pakker Exceptions Indhold Generics Nedarvning og Generics Generics Nedarvning og Generics Husk Box fra sidst Generics public class Box {! private T object;! public void

Læs mere

AAU, Programmering i Java Intern skriftlig prøve 18. maj 2007

AAU, Programmering i Java Intern skriftlig prøve 18. maj 2007 AAU, Programmering i Java Intern skriftlig prøve 18. maj 2007 Opgavebesvarelsen skal afleveres som enten en printerudskrift eller som et passende dokument sendt via email til fjj@noea.dk. Besvarelsen skal

Læs mere

Videregående programmering i Java

Videregående programmering i Java Videregående programmering i Java Dag 6 Komponenter (og lidt Swing og MVC) Læsning: VP 4, evt. VP 6 Dette materiale er under Åben Dokumentlicens, se http://www.sslug.dk/linuxbog/licens.html Grafiske komponenter

Læs mere

DANMARKS TEKNISKE UNIVERSITET

DANMARKS TEKNISKE UNIVERSITET DANMARKS TEKNISKE UNIVERSITET Skriftlig prøve, 14. december 2018, 4 timer Side 1 af 18 Kursus navn: 02101 Indledende Programmering Kursus : 02101 Tilladte hjælpemidler: Ikke-digitale skriftlige hjælpemidler

Læs mere

b) Udvid din implementation af forme til at understøtte.equals. To objekter af samme form er ens hvis de har samme værdier i felterne.

b) Udvid din implementation af forme til at understøtte.equals. To objekter af samme form er ens hvis de har samme værdier i felterne. Exercise 1: Opgave 9.1 på CodeJudge. a) Lav klasserne Cirkel, Rektangel og Kvadrat, som implementerer vedhæftede interface From.java (se CodeJudge). Lav Rektangel før du laver Kvadrat. Kan du bruge nedarvning

Læs mere

Videregående Programmering Obligatorisk opgave - 3. semester, efterår 2004

Videregående Programmering Obligatorisk opgave - 3. semester, efterår 2004 Overvågningssystem Beskrivelse Bagagesorteringssystemet består af et antal skranker (check-in) til modtagelse og registrering af bagage, et automatiseret sorteringsanlæg samt et antal terminaler (gates),

Læs mere

Objektorienteret design med arv og polymorfi:

Objektorienteret design med arv og polymorfi: Note til Programmeringsteknologi Akademiuddannelsen i Informationsteknologi Objektorienteret design med arv og polymorfi: Substitutionsprincippet Composite Design Pattern Finn Nordbjerg Side 1 Objektorienteret

Læs mere

Forelæsning Uge 12 Torsdag

Forelæsning Uge 12 Torsdag Forelæsning Uge 12 Torsdag Protected access Alternativ til public og private Abstrakte klasser og interfaces En abstrakt klasse er en klasse, som man ikke kan lave instanser (objekter) af En abstrakt klasse

Læs mere

Dag 10 Flertrådet programmering

Dag 10 Flertrådet programmering Videregående programmering i Java Dag 10 Flertrådet programmering Fremlæggelse af programmering/status for projekter Dokumentation med javadoc Flertrådede designmønstre: Arbejdstråd, Producent Konsument,

Læs mere

Kursus i OOP og Java. Kursus i Objektorienteret programmering i Java

Kursus i OOP og Java. Kursus i Objektorienteret programmering i Java Kursus i OOP og Java Kursus i Objektorienteret programmering i Java Åben Dokumentlicens Dette foredragsmateriale er under Åben Dokumentlicens (ÅDL) Du har derfor lov til frit at kopiere dette værk Bruger

Læs mere

Hvordan organiseres et programs grafik-elementer? OOP e uge kursusgang. Advarsel! Component-objekter

Hvordan organiseres et programs grafik-elementer? OOP e uge kursusgang. Advarsel! Component-objekter OOP e2002 - uge 42 6. kursusgang Hvordan organiseres et programs grafik-elementer? 1. Teori: class Component og subklasser: Composite pattern layout-managere hændelsesstyret programmering 2. XP-program:

Læs mere

Forelæsning Uge 12 Mandag

Forelæsning Uge 12 Mandag Forelæsning Uge 12 Mandag Protected access Alternativ til public og private Abstrakte klasser og interfaces En abstrakt klasse er en klasse, som man ikke kan lave instanser (objekter) af En abstrakt klasse

Læs mere

Objektorienteret programmering!

Objektorienteret programmering! Objektorienteret programmering! Introduktion! Plan!! Generelt om programmeludvikling!! Objekter og klasser (begreber)!! Objektorienteret programmeludvikling!! Programmering i Java! 1! 2! Aforisme! Programmeludvikling!

Læs mere

Eksempel: Skat i år 2000

Eksempel: Skat i år 2000 Kursus 02199: Programmering afsnit 2.1-2.7 Anne Haxthausen IMM, DTU 1. Værdier og typer (bl.a. char, boolean, int, double) (afsnit 2.4) 2. Variable og konstanter (afsnit 2.3) 3. Sætninger (bl.a. assignments)

Læs mere

import java.applet.applet; import java.awt.*; public class MinApplet extends Applet { // diverse metoder her - til grafik er det nok med "paint":

import java.applet.applet; import java.awt.*; public class MinApplet extends Applet { // diverse metoder her - til grafik er det nok med paint: Noget at tegne på: Appletter. En applet (et småprogram ) er et java-program der er beregnet til at køre i et vindue på en web-side. Programmering 1999 Forelæsning 10, fredag 1. oktober 1999 Oversigt Appletter

Læs mere

Klasser og objekter. (Afsnit i manualen)

Klasser og objekter. (Afsnit i manualen) Klasser og objekter (Afsnit 4 + 5 i manualen) Grundbegreber Klasser og objekter beskrivelse oprettelse Attributter og metoder tilstand opførsel Indkapsling afskærmning datarepræsentationsuafhængighed Klasser

Læs mere

Objektorienteret programmering. Introduktion

Objektorienteret programmering. Introduktion Objektorienteret programmering Introduktion 1 Plan Generelt om programmeludvikling Objekter og klasser (begreber) Objektorienteret programmeludvikling Programmering i Java 2 Aforisme Ordene er håndtag

Læs mere

DM01 DM01. 3. Obl. Afl. Jacob Christiansen, 130282, jacob.ch@mail.tdcadsl.dk. D12, Elias 18/3-2003. Side 1 af 11

DM01 DM01. 3. Obl. Afl. Jacob Christiansen, 130282, jacob.ch@mail.tdcadsl.dk. D12, Elias 18/3-2003. Side 1 af 11 DM01 DM01 3. Obl. Afl. Jacob Christiansen, 130282, jacob.ch@mail.tdcadsl.dk D12, Elias 18/3-2003 Side 1 af 11 DM01 Indholdsfortegnelse: BILAG:...2 1 FORMÅL:...3 2 KLASSER:...4 2.1 DILEMMA:...4 2.1.1 METODER:...4

Læs mere

Videregående programmering i Java

Videregående programmering i Java Videregående programmering i Java Dag 9 Andre designmønstre Andre designmønstre: Uforanderlig, Fluevægt, Lagdelt Initialisering, Komposit/Rekursiv Komposition, Kommando/Ændring Fremlæggelse af programmering/status

Læs mere

Design by Contract Bertrand Meyer Design and Programming by Contract. Oversigt. Prædikater

Design by Contract Bertrand Meyer Design and Programming by Contract. Oversigt. Prædikater Design by Contract Bertrand Meyer 1986 Design and Programming by Contract Michael R. Hansen & Anne Haxthausen mrh@imm.dtu.dk Informatics and Mathematical Modelling Technical University of Denmark Design

Læs mere

Skriftlig eksamen i Datalogi

Skriftlig eksamen i Datalogi Roskilde Universitetscenter side 1 af 9 sider Skriftlig eksamen i Datalogi Modul 1 Vinter 1999/2000 Opgavesættet består af 6 opgaver, der ved bedømmelsen tillægges følgende vægte: Opgave 1 5% Opgave 2

Læs mere

Forelæsning Uge 11. Nedarvning. Object klassen. Projektopgave om computerspil

Forelæsning Uge 11. Nedarvning. Object klassen. Projektopgave om computerspil Forelæsning Uge 11 Nedarvning En klasse kan være en subklasse af en anden Det betyder at subklassen arver superklassens feltvariabler og metoder Object klassen Superklasse for alle klasser Indeholder en

Læs mere

Hvad er et distribueret objekt? Plan 12.3. Objekter, objektreferencer, metoder, parameteroverførsel. Objekter: notation

Hvad er et distribueret objekt? Plan 12.3. Objekter, objektreferencer, metoder, parameteroverførsel. Objekter: notation Plan 12.3. Oversigt over grundlæggende begreber Java: eksempel på applikation, programmering og oversættelse Uddybning af grundlæggende begreber Java RMI implementation Forklaring af øvelsen Hvad er et

Læs mere

Programmering 1999 KVL Side 5-4. Klassen Time: metoder. Metoder i objektet giver mulighed for at ændre tilstanden, eller kigge på tilstanden.

Programmering 1999 KVL Side 5-4. Klassen Time: metoder. Metoder i objektet giver mulighed for at ændre tilstanden, eller kigge på tilstanden. Programmering 1999 Forelæsning 5, tirsdag 14. september 1999 Oversigt Mere om klasser og objekter Klassefelter: static Konstante felter: final Indkapsling og synlighed: private og public Overlæsning af

Læs mere

et enkelt kontrol flow sætningerne i programmet afvikles en ad gangen flowet følger dels den tekstlige rækkefølge

et enkelt kontrol flow sætningerne i programmet afvikles en ad gangen flowet følger dels den tekstlige rækkefølge Tråd-definition 2. XP-program: Dissektion af boldapplet (fortsat) En tråd er en separat programudførelse = separat "flow of control" = rækkefølge af programinstruktioner, der udføres En tråd kan mere konkret

Læs mere

SWC eksamens-spørgsmål. Oversigt

SWC eksamens-spørgsmål. Oversigt SWC eksamens-spørgsmål Oversigt #1 Typer og variable #2 Aritmetik og logik #3 Klasser (definition, objekter) #4 Klasser (metoder) #5 Klasser (nedarvning, polymorfi) #6 Conditional statements #7 Repetition

Læs mere

Forelæsning Uge 4 Mandag

Forelæsning Uge 4 Mandag Forelæsning Uge 4 Mandag Algoritmeskabeloner findone, findall, findnoof, findsumof Primitive typer (forfremmelse og begrænsning) Identitet versus lighed (for objekter, herunder strenge) Opfølgning på Skildpadde

Læs mere

I profil-feltet kan imastra-kunder vælge om upload skal ske ligesom filerne var indsendt til mailboksen eller

I profil-feltet kan imastra-kunder vælge om upload skal ske ligesom filerne var indsendt til mailboksen eller Upload fil Upload fil skal ses som et alternativ til at indsende tællefiler vedhæftet til mails Upload fil kan være en hurtigere og mere håndholdt måde at få data ind i Mastra på. Man starter med via Gennemse

Læs mere

Eksempel på en database: studenter, kurser, eksamener

Eksempel på en database: studenter, kurser, eksamener Udvidet Programmering 1999 Forelæsning 20, fredag 12. november 1999 Relationsdatabaser: relationer, tupler, attributter Forespørgselssproget SQL Databasesystemet PostgreSQL Tilgang til relationsdatabaser

Læs mere

A Profile for Safety Critical Java

A Profile for Safety Critical Java A Profile for Safety Critical Java Martin Schoeberl Hans Søndergaard Bent Thomsen Anders P. Ravn Præsenteret af: Henrik Kragh-Hansen November 8, 2007 Forfatterne Martin Schoeberl Udvikler af JOP processoren

Læs mere

Datalogi OB, Efterår 2002 OH er, forelæsning 3/9-2002 - forstå datastrukturer og algoritmer (teoretisk forståelse og intuition)

Datalogi OB, Efterår 2002 OH er, forelæsning 3/9-2002 - forstå datastrukturer og algoritmer (teoretisk forståelse og intuition) Datalogi OB, Efterår 2002 OH er, forelæsning 3/9-2002 Datastrukturer og algoritmer Henning Christiansen henning@ruc.dk http://www.ruc.dk/~henning Formål: at kunne - forstå datastrukturer og algoritmer

Læs mere

University of Southern Denmark Syddansk Universitet. DM502 Forelæsning 4

University of Southern Denmark Syddansk Universitet. DM502 Forelæsning 4 DM502 Forelæsning 4 Flere kontrolstrukturer for-løkke switch-case Metoder Indhold Arrays og sortering af arrays String-funktioner for-løkke Ofte har man brug for at udføre det samme kode, for en sekvens

Læs mere

Objektorienterede metoder

Objektorienterede metoder Objektorienterede metoder Denne gang: Designmønstre Skabende designmønstre: Fabrikeringsmetode/Fabrik, Singleton, Abstrakt fabrik (Toolkit), Prototype, Objektpulje Singleton eksempel: Forskellige slags

Læs mere

Forelæsning Uge 4 Mandag

Forelæsning Uge 4 Mandag Forelæsning Uge 4 Mandag Algoritmeskabeloner Kan (ved simple tilretningerne) bruges til at implementere metoder, der gennemsøger en arrayliste (eller anden objektsamling) og finder objekter, der opfylder

Læs mere

University of Southern Denmark Syddansk Universitet. DM502 Forelæsning 3

University of Southern Denmark Syddansk Universitet. DM502 Forelæsning 3 DM502 Forelæsning 3 Indlæsning fra tastatur Udskrift til skærm Repetition Beregning af middelværdi Gentagelse med stop-betingelse (while) Heltalsdivision Division med nul Type-casting ( (double) ) Betinget

Læs mere

Java Klasse nedarvninger

Java Klasse nedarvninger Denne guide er oprindeligt udgivet på Eksperten.dk Java Klasse nedarvninger Et let lille overblik i hvordan klasse nedarvning virker i java Skrevet den 07. dec 2011 af mochners I kategorien Programmering

Læs mere

Forelæsning Uge 11. Nedarvning. Object klassen. Projektopgave om computerspil

Forelæsning Uge 11. Nedarvning. Object klassen. Projektopgave om computerspil Forelæsning Uge 11 Nedarvning En klasse kan være en subklasse af en anden Det betyder at subklassen arver superklassens feltvariabler og metoder Object klassen Superklasse for alle klasser Indeholder en

Læs mere

Objektorienteret Programmering

Objektorienteret Programmering Objektorienteret Programmering Struktureret Systemudvikling Jan Bendtsen Automation and Control Indhold Lidt om programmeringssprog Klasser i Java Klasser i C++ Oversættelse og kørsel af kode Et eksempel:

Læs mere

Forelæsning Uge 5 Mandag

Forelæsning Uge 5 Mandag Forelæsning Uge 5 Mandag Algoritmeskabeloner findone, findall, findnoof, findsumof (sidste mandag) findbest Brug af klassen Collections og interfacet Comparable BlueJ s Debugger Nyttig til at inspicere

Læs mere

Forelæsning Uge 4 Mandag

Forelæsning Uge 4 Mandag Forelæsning Uge 4 Mandag Algoritmeskabeloner Kan (ved simple tilretningerne) bruges til at implementere metoder, der gennemsøger en arrayliste (eller anden objektsamling) og finder objekter, der opfylder

Læs mere

class Time { int hours, min; } } Time t1; // Erklær variabel af type Time class Time1 { public static void main(string[] args) { Time t1; t1.

class Time { int hours, min; } } Time t1; // Erklær variabel af type Time class Time1 { public static void main(string[] args) { Time t1; t1. Programmering 1999 Forelæsning 4, fredag 10. september 1999 Klasser og objekter Felter, konstruktorer, this Eksempler på klasser: Time, Appointment Eksempler på metoder i Time og Appointment Klassefelter:

Læs mere

Forelæsning Uge 11 Torsdag

Forelæsning Uge 11 Torsdag Forelæsning Uge 11 Torsdag Nedarvning En klasse kan være en subklasse af en anden Det betyder at subklassen arver superklassens feltvariabler og metoder Object klassen Superklasse for alle klasser Indeholder

Læs mere

Software Construction 1. semester (SWC) januar 2014 Spørgsmål 1

Software Construction 1. semester (SWC) januar 2014 Spørgsmål 1 Spørgsmål 1 Grundlæggende objektorienterede begreber o Klasse (class) o Objekt (object) o Metode (method), herunder return type og parametre o Instansvariable (instance variables) & egenskaber (properties),

Læs mere

Forelæsning Uge 11 Mandag

Forelæsning Uge 11 Mandag Forelæsning Uge 11 Mandag Nedarvning En klasse kan være en subklasse af en anden Det betyder at subklassen arver superklassens feltvariabler og metoder Object klassen Superklasse for alle klasser Indeholder

Læs mere

Eksamens spørgsmål i Java HTML - DataBase 3. Semester (i)

Eksamens spørgsmål i Java HTML - DataBase 3. Semester (i) Eksamens spørgsmål i Java HTML - DataBase 3. Semester (i) 1: KLASSE METODE KONSTRUKTØR EKS. PÅ TYPE (VARIABLE) PUBLIC/PRIVATE OBJECT UD FRA KLASSE KALD METODE TILFØR PARAMETER TIL METODE RETURNERE VARIBEL.

Læs mere

Bilag 1 Rige billeder Ordremodtagelse

Bilag 1 Rige billeder Ordremodtagelse Bilag1 Rigebilleder Ordremodtagelse Tværfagligtprojektpå2.Semester Bilag afchristian,kennetogmartin 71 Overordnet Tværfagligtprojektpå2.Semester Bilag afchristian,kennetogmartin 72 Produktionsgulvet Tværfagligtprojektpå2.Semester

Læs mere

Løsning af møntproblemet

Løsning af møntproblemet Løsning af møntproblemet Keld Helsgaun RUC, oktober 1999 Antag at tilstandene i problemet (stillingerne) er repræsenteret ved objekter af klassen State. Vi kan da finde en kortest mulig løsning af problemet

Læs mere

Forelæsning Uge 6 Mandag

Forelæsning Uge 6 Mandag Forelæsning Uge 6 Mandag Tingene i denne forelæsning er ikke eksamenspensum Forelæsningen afrunder kurset, og forklarer nogle af de begreber, som I har mødt under kurset uden at få detaljeret forklaring

Læs mere

9.8 Kildekode. side 88. Pakke Klasse Sidenummer. fortsætter..

9.8 Kildekode. side 88. Pakke Klasse Sidenummer. fortsætter.. 9.8 Kildekode Pakke Klasse Sidenummer db Aktivitetstype 91 Behandler 91 ConnectDB 92 DagensKommentar 93 Helligdag 94 IkkePrimaerTid 94 Patient 96 Patientaftale 96 PatientAktivitet 97 Patientgruppe 98 PatientgruppeItem

Læs mere

Overblik. Class Loader. Java. Class Libraries. Bytecode. Verifier Java. Source (.java) Just in Time Compiler. Java

Overblik. Class Loader. Java. Class Libraries. Bytecode. Verifier Java. Source (.java) Just in Time Compiler. Java OOP1 Java intro. Klasser, objekter, interfaces, nedarvning, Association, Aggregation og Composition mvh. Try and catch exceptions. Package Intro. til jar filer. Overblik Compile-time Environment Run-time

Læs mere

METODER ARV KLASSER. Grundlæggende programmering Lektion 5

METODER ARV KLASSER. Grundlæggende programmering Lektion 5 METODER KLASSER ARV Grundlæggende programmering Lektion 5 1 METODER Sekvenser af kode om samme emne 2 REPETITION Række af statements der udfører en handling Mindst én metode der hedder main Forskellen

Læs mere

Skriftlig eksamen i Datalogi

Skriftlig eksamen i Datalogi Roskilde Universitetscenter Skriftlig eksamen i Datalogi Modul 1 Sommer 1999 Opgavesættet består af 5 opgaver, der ved bedømmelsen tillægges følgende vægte: Opgave 1 15% Opgave 2 15% Opgave 3 8% Opgave

Læs mere

Forelæsning Uge 3 Torsdag

Forelæsning Uge 3 Torsdag Forelæsning Uge 3 Torsdag Billedredigering (bl.a. brug af for-løkker) Gråtonebilleder (som er lidt simplere end farvebilleder) Arrays Kan "opbevare" et antal objekter (som ArrayList) Fast (på forhånd kendt)

Læs mere

Serialization i Java

Serialization i Java Serialization i Java Tutorial lavet af Jákup W. Hansen TSU 2006 1.semester 06.novemter 2006 Hvad er Serialization? I vores tekstbog Objects First with Java bliver denne del af Java ikke gennemgået. Men

Læs mere

SigmaT.

SigmaT. Java + Groovy Disposition Om SigmaT Eksempel på indlejring af Groovy Overvågning af PEM Ønske om dynamisk loaded Java uden at fifle med classloaderen Groovy til hjælp Opsamling hvad jeg ikke har fortalt

Læs mere

Forelæsning Uge 4 Torsdag

Forelæsning Uge 4 Torsdag Forelæsning Uge 4 Torsdag Algoritmeskabeloner findone, findall, findnoof, findsumof (i mandags) findbest Levetid for variabler og parametre Virkefeltsregler Hvor kan man bruge de forskellige variabler?

Læs mere

Vejledende løsninger

Vejledende løsninger Roskilde Universitetscenter side 1 af 8 sider Vejledende løsninger Opgave 1 Spørgsmål 1.1 a = b - a; b = b - a; a = b + a; Opgaven har flere løsninger. En anden løsning er: a = b + a; b = a - b; a = a

Læs mere

ATTRIBUTES MULTITHREADING DYNAMIC PROGRAMMING. Grundlæggende programmering Lektion 11

ATTRIBUTES MULTITHREADING DYNAMIC PROGRAMMING. Grundlæggende programmering Lektion 11 ATTRIBUTES DYNAMIC PROGRAMMING MULTITHREADING Grundlæggende programmering Lektion 11 1 ATTRIBUTES Information om adfærd 2 ATTRIBUTES En attribut er en deklarativ tag, der bruges til at formidle information

Læs mere

Objektorienteret design

Objektorienteret design Objektorienteret design 1 Plan Introduktion til designmønstre Design af generiske komponenter - faktorisering - generalisering - abstrakt kobling Design case: animering af algoritmer til sortering 2 Genbrug

Læs mere

Design by Contract. Design and Programming by Contract. Oversigt. Prædikater

Design by Contract. Design and Programming by Contract. Oversigt. Prædikater Design by Contract Design and Programming by Contract Anne Haxthausen ah@imm.dtu.dk Informatics and Mathematical Modelling Technical University of Denmark Design by Contract er en teknik til at specificere

Læs mere

Software 1 with Java. Recitation No. 7 (Servlets, Inheritance)

Software 1 with Java. Recitation No. 7 (Servlets, Inheritance) Software 1 with Java Recitation No. 7 (Servlets, Inheritance) Servlets Java modules that run on a Web server to answer client requests For example: Processing data submitted by a browser Providing dynamic

Læs mere

Skriftlig eksamen i Datalogi

Skriftlig eksamen i Datalogi Roskilde Universitetscenter side 1 af 11 sider Skriftlig eksamen i Datalogi Modul 1 Sommer 2000 Opgavesættet består af 6 opgaver, der ved bedømmelsen tillægges følgende vægte: Opgave 1 10% Opgave 2 10%

Læs mere

Databaseadgang fra Java

Databaseadgang fra Java Databaseadgang fra Java Grundlæggende Programmering med Projekt Peter Sestoft Fredag 2007-11-23 Relationsdatabasesystemer Der er mange databaseservere Microsoft Access del af Microsoft Office MySQL god,

Læs mere

OOP e uge kursusgang: Grafik (II) class Scribble (Tegnebrættet) Frihåndstegning: repræsentation

OOP e uge kursusgang: Grafik (II) class Scribble (Tegnebrættet) Frihåndstegning: repræsentation OOP e2002 - uge 43 class Scribble (Tegnebrættet) Det simplest mulige tegnebræt kun en funktion: tegn streger med musen ingen kontrolknapper/valgmuligheder skal dog kunne "holde til" at ændre størrelse

Læs mere

Real-time programming safety in Java and Ada

Real-time programming safety in Java and Ada Real-time programming safety in Java and Ada Bo Sandén Presenter: Thomas Bøgholm 25. oktober 2007 Forfatteren Artiklen Synkroniserings Begreber Bo Sandén Professor på Colorado Technical University Beskæftiger

Læs mere

Forelæsning Uge 3 Torsdag

Forelæsning Uge 3 Torsdag Forelæsning Uge 3 Torsdag Billedredigering Gråtonebilleder (som er lidt simplere end farvebilleder) Arrays Kan "opbevare" et antal objekter (som ArrayList) Fast (på forhånd kendt) antal elementer Afleveringsopgave:

Læs mere

Forelæsning Uge 4 Torsdag

Forelæsning Uge 4 Torsdag Forelæsning Uge 4 Torsdag Algoritmeskabeloner findone, findall, findnoof, findsumof (sidste mandag) findbest Levetid for variabler og parametre Virkefeltsregler Hvor kan man bruge de forskellige variabler?

Læs mere

University of Southern Denmark Syddansk Universitet. DM502 Forelæsning 2

University of Southern Denmark Syddansk Universitet. DM502 Forelæsning 2 DM502 Forelæsning 2 Repetition Kompilere og køre Java program javac HelloWorld.java java HeloWorld.java Debugge Java program javac -g HelloWorld.java jswat Det basale Java program public class HelloWorld

Læs mere

Forelæsning Uge 3 Mandag

Forelæsning Uge 3 Mandag Forelæsning Uge 3 Mandag Niveauer af programbeskrivelser Statiske / dynamiske beskrivelser ArrayList Collection med variabelt antal elementer Der er mange andre Collection typer (se Collection interfacet

Læs mere

Forelæsning Uge 3 Torsdag

Forelæsning Uge 3 Torsdag Forelæsning Uge 3 Torsdag Billedredigering Gråtonebilleder (som er lidt simplere end farvebilleder) Rekursive metoder Metoder der kalder sig selv Giver ofte meget elegante og simple løsninger på komplekse

Læs mere

RMI introduktion. Denne artikel beskriver Java RMI (Remtote Method Invocation).

RMI introduktion. Denne artikel beskriver Java RMI (Remtote Method Invocation). Denne guide er oprindeligt udgivet på Eksperten.dk RMI introduktion Denne artikel beskriver Java RMI (Remtote Method Invocation). Den beskriver teorien bag RMI, viser et simpelt kode eksempel og forklarer

Læs mere

Objekt-orienteret programmering uden klasser: Self.

Objekt-orienteret programmering uden klasser: Self. Objekt-orienteret programmering uden klasser: Self. Sammenligning klasse-baseret og klasseløs programstrukturering. Basale forhold Singulære objekter Dynamisk nedarvning Variable i forhold til metoder.

Læs mere

DM507 Algoritmer og datastrukturer

DM507 Algoritmer og datastrukturer DM507 Algoritmer og datastrukturer Forår 2018 Projekt, del II Institut for matematik og datalogi Syddansk Universitet 13. marts, 2018 Dette projekt udleveres i tre dele. Hver del har sin deadline, således

Læs mere

//Udskriver System.out.println("Hej " + ditfornavn + " " + ditefternavn + "."); System.out.println("Du er " + dinalder + " aar gammel!

//Udskriver System.out.println(Hej  + ditfornavn +   + ditefternavn + .); System.out.println(Du er  + dinalder +  aar gammel! Denne guide er oprindeligt udgivet på Eksperten.dk Brugerinput i Java Denne her artikel gennemgår diverse ting ved brug af brugerinput i Java. Den starter med det simple og fortæller derefter skridt for

Læs mere

Dvs. at give dit program muligheden for at loade og bruge plugins som andre har lavet.

Dvs. at give dit program muligheden for at loade og bruge plugins som andre har lavet. Denne guide er oprindeligt udgivet på Eksperten.dk Refleksion med.net Refleksion bruges til at undersøge klasser på runtime tidspunktet. Se hvordan du f.eks. loader en klasse fra en DLL, gennemkigger dens

Læs mere

Virkefeltsregler i Java

Virkefeltsregler i Java Virkefeltsregler i Java int i; int k; Sequence s; int j; What s in a name? Brian spillede blændende i søndags! Skolen ligger i Viby Ring til Kirsten og sig at... Et navn fortolkes i en kontekst og konteksten

Læs mere

Fundamentale sprogbegreber

Fundamentale sprogbegreber Fundamentale sprogbegreber Sætninger og udtryk Niveauer af programbeskrivelse (statisk versus dynamisk syn) Oversigt Sætninger simple sætninger (assignment, metodekald) sammensatte sætninger (selektion,

Læs mere

Klienten. import java.util.*;

Klienten. import java.util.*; Klienten import java.util.*; * Aktiviteter er et model element, som indeholder blandt andet psimetiks beskrivleser. * @author rling public class Aktivitet extends Beholder implements HarEOgA, HarTilknytning,

Læs mere

Singleton pattern i C#

Singleton pattern i C# Denne guide er oprindeligt udgivet på Eksperten.dk Singleton pattern i C# Denne artikel beskriver Singleton pattern og implementation i C#. Den forudsætter kendskab til C# men ikke til Singleton. Der er

Læs mere

Klasser og Objekter i Python. Uge 46 Learning Python: kap 15-16, 19-22.

Klasser og Objekter i Python. Uge 46 Learning Python: kap 15-16, 19-22. Klasser og Objekter i Python Uge 46 Learning Python: kap 15-16, 19-22. Klasser og objekter En klasse beskriver en klump af samhørende funktioner og variable En klasse er en beskrivelse. En kage form Klassens

Læs mere

Kursus navn: Indledende programmering Kursus nr. 02101

Kursus navn: Indledende programmering Kursus nr. 02101 Danmarks Tekniske Universitet Side 1 af 8 sider Skriftlig prøve, den 15. december 2007 Kursus navn: Indledende programmering Kursus nr. 02101 Tilladte hjælpemidler: Alle skriftlige hjælpemidler Vægtning

Læs mere

Jacob Nordfalk. Ingeniørhøjskolen i København. Nykøbing F itvisioncenter 24. februar 2004

Jacob Nordfalk. Ingeniørhøjskolen i København. Nykøbing F itvisioncenter 24. februar 2004 Genbrugelige komponenter og designmønstre i Java Jacob Nordfalk Ingeniørhøjskolen i København Nykøbing F itvisioncenter 24. februar 2004 Program Om Jacob Nordfalk introduktion (ikke-teknisk del) Komponentbaseret

Læs mere

Forelæsning Uge 2 Torsdag

Forelæsning Uge 2 Torsdag Forelæsning Uge 2 Torsdag Niveauer af programbeskrivelser Statiske / dynamiske beskrivelser Klassevariabler og klassemetoder Variabler og metoder der et tilknyttet klassen (i stedet for at være tilknyttet

Læs mere

Introduktion til ActionScript, fortsat

Introduktion til ActionScript, fortsat Introduktion til ActionScript, fortsat Kaspar Rosengreen Nielsen kaspar@interactivespaces.net i n t e r a c t i v e s p a c e s. n e t Kaspar Nielsen, kaspar@interactivespaces.net 1 Dagens program Opsamling

Læs mere

Skriftlig eksamen i Datalogi

Skriftlig eksamen i Datalogi Roskilde Universitetscenter Skriftlig eksamen i Datalogi Modul 1 Vinter 1998/99 Opgavesættet består af 5 opgaver, der ved bedømmelsen tillægges følgende vægte: Opgave 1 16% Opgave 2 12% Opgave 3 10% Opgave

Læs mere

Har kun én enkelt abstract metode De steder, hvor man skal bruge et objekt, hvis type er et funktionelt interface, kan man i stedet bruge en lambda

Har kun én enkelt abstract metode De steder, hvor man skal bruge et objekt, hvis type er et funktionelt interface, kan man i stedet bruge en lambda Forelæsning Uge 12 Protected access Alternativ til public og private Abstrakte klasser og interfaces En abstrakt klasse er en klasse, som man ikke kan lave instanser af En abstrakt klasse kan indeholde

Læs mere

DM507 Algoritmer og datastrukturer

DM507 Algoritmer og datastrukturer DM507 Algoritmer og datastrukturer Forår 2018 Projekt, del II Institut for matematik og datalogi Syddansk Universitet 20. marts, 2019 Dette projekt udleveres i tre dele. Hver del har sin deadline, således

Læs mere

Om binære søgetræer i Java

Om binære søgetræer i Java Om binære søgetræer i Java Mads Rosendahl 7. november 2002 Resumé En fix måde at gemme data på er i en træstruktur. Måden er nyttig hvis man får noget data ind og man gerne vil have at det gemt i en sorteret

Læs mere

Har kun én enkelt abstract metode De steder, hvor man skal bruge et objekt, hvis type er et funktionelt interface, kan man i stedet bruge en lambda

Har kun én enkelt abstract metode De steder, hvor man skal bruge et objekt, hvis type er et funktionelt interface, kan man i stedet bruge en lambda Forelæsning Uge 12 Abstrakte klasser og interfaces En abstrakt klasse er en klasse, som man ikke kan lave instanser af En abstrakt klasse kan indeholde abstrakte metoder, hvor kun hovedet er angivet, mens

Læs mere

Forelæsning Uge 3 Mandag

Forelæsning Uge 3 Mandag Forelæsning Uge 3 Mandag ArrayList klassen Gør det let at lave en objektsamling (collection) med et variabelt antal elementer Der er mange andre slags objektsamlinger (se Collection interfacet i JavaDoc)

Læs mere