• No results found

Interface Programmera mot interface Johan Eliasson Johan Eliasson Interface kan bryta beroendekedjor Skriv generell kod «Type» Class2 Interface

N/A
N/A
Protected

Academic year: 2021

Share "Interface Programmera mot interface Johan Eliasson Johan Eliasson Interface kan bryta beroendekedjor Skriv generell kod «Type» Class2 Interface"

Copied!
5
0
0

Loading.... (view fulltext now)

Full text

(1)

Johan Eliasson

Programmera mot interface

Johan Eliasson

Interface

• Snabba att implementera

• Bryter beroenden

• Gör det enklare att samarbeta

• Gör det enkelt att i ett senare skede byta ut implementationer

mot effektivare

Johan Eliasson

Interface kan bryta beroendekedjor

«Type»

Interface

metod1()

Class2

Attributes

metod1()

Class2

Attributes

metod2()

Johan Eliasson

Skriv generell kod

• Skriv alltid kod så att den använder sig av klasser/interface så

högt upp i hierarkin som möjligt

• Ska ni bara göra saker som finns definierade i Figure-klassen så

använd er då av en Figure-referens i stället för tex en mer

specifik Triangle, så får ni mer generell kod

moveFigure(new Triangle())

void moveFigure(Figure f) {

f.moveVertical(10);

f.moveHorizontal(10)

}

Johan Eliasson

Programexempel

• Referenshantering

• Tidskriftsartiklar och konferensartiklar

• Samma information till stor del

Johan Eliasson

Reference

(2)

Johan Eliasson

Reference

Key

Title

Author

Year

Pages

Article

Journal

InProceeding

Proceeding

Johan Eliasson

TextReference

Author

Pages

Article

Journal

InProceeding

Proceeding

Reference

Key

Title

Year

WebSite

URL

Visited

Johan Eliasson package Biblio; abstract public class Reference {

private String refKey; private String refTitle; private String publishedYear; public Reference(String key) {

refKey = key; } public String key( ) { return refKey; }

public void title( String newTitle ) {

refTitle = newTitle; }

public String title( ) {

return refTitle; }

public void year( String newYear ) {

publishedYear = newYear; }

public String year( ) {

return publishedYear; }

public String toString( ) {

return "Title = " + refTitle + "\nÅr = " + publishedYear + "\nKey = " + refKey; }

}

Reference

Johan Eliasson

package Biblio; abstract public class TextReference extends Reference {

private String theAuthor; private int pageStart, pageEnd; public TextReference( String ID) {

super(ID); }

public void author( String newAuthor ) {

theAuthor = newAuthor; }

public String author( ) {

return theAuthor; }

public void pages( int start, int end ) {

pageStart = start; pageEnd = end; }

public int firstPage( ) {

return pageStart; }

public int lastPage( ) {

return pageEnd; }

public String toString( ) {

return super.toString() + "\nAuthor = " + theAuthor + "\nPage start = " + pageStart + "\nPage end = " + pageEnd; }

}

TextReference

Johan Eliasson

package Biblio;

public class Article

extends TextReference

{

private String journalName;

public Article( String ID )

{

super(ID);

}

public void journal( String theJournal )

{

journalName = theJournal;

}

public String journal( )

{

return journalName;

}

public String toString( )

{

return super.toString() + "\nJournal = " + journalName;

}

}

(3)

Johan Eliasson

Inte bra

package Biblio; public class Library {

final static int LIBRARY_SIZE = 100;

private Reference ref[]; private int refCount = 0;

public Library( ) {

ref = new Reference[LIBRARY_SIZE]; }

public boolean add( Reference r ) {

for( int i = 0 ; i < refCount ; i++ ){ if( ref[i].key() == r.key() ){ return false; } } ref[refCount++] = r; return true; }

public String toString() {

String s="";

for(int i = 0 ; i < refCount; i++){ s = s + "Key: " + ref[i].key() + " Titel: " + ref[i].title() + "\n"; } return s; } }

Library

Johan Eliasson

equals !!!

abstract

public

class

Reference {

...

!

public

boolean

sameKey( Reference otherReference ) {

! !

return

refKey.equals(otherReference.refKey);

! }

...

}

Johan Eliasson

for( int i = 0 ; i < refCount ; i++ ){

if( ref[i].sameKey(r) ){

return false;

}

}

Johan Eliasson

Export

TextReference Author Pages Article Journal InProceeding Proceeding Reference Key Title Year WebSite URL Visited

Library

???

Johan Eliasson

Export

TextReference Author Pages Article Journal InProceeding Proceeding Reference Key Title Year WebSite URL Visited

Library

???

Johan Eliasson

Export

TextReference Author Pages Article Journal InProceeding Proceeding Reference Key Title Year WebSite URL Visited

Library

???

!!

!!

(4)

Johan Eliasson

Export

TextReference Author Pages Article Journal InProceeding Proceeding Reference Key Title Year WebSite URL Visited

Library

«interface»

Formatter

startReference()

endReference()

field(String,String)

Johan Eliasson

package Biblio;

public interface Formatter

{

public void startReference();

public void endReference();

public void field( String fld, String value );

}

Johan Eliasson

public void export( Formatter format)

{

for( int i = 0 ; i < refCount ; i++ ){

format.startReference();

ref[i].listFields(format);

format.endReference();

}

}

Johan Eliasson

public void listFields( Formatter format )

{

format.field("JournalName",journalName);

super.listFields(format);

}

Article.listFields

Johan Eliasson

public void listFields( Formatter format )

{

format.field("TheAuthor",theAuthor);

format.field("PageStart",String.valueOf(pageStart));

format.field("PageEnd",String.valueOf(pageEnd));

super.listFields(format);

}

TextReference.listFields

Johan Eliasson

public class SimpleFormatter

implements Formatter

{

public void startReference( )

{

System.out.println(

" ================= start ==============");

}

public void endReference( )

{

System.out.println(

" ================= slut ==============\n\n\n");

}

public void field( String fld, String value )

{

System.out.println(fld + " : " + value);

}

}

(5)

Johan Eliasson

Library lib = new Library(); if( lib.add(art) ){

System.out.println("Kunde lägga till"); } else {

System.out.println("Kunde inte lägga till"); }

if( lib.add(ip) ){

System.out.println("Kunde lägga till"); } else {

System.out.println("Kunde inte lägga till"); } System.out.println(lib); lib.export(new SimpleFormatter()); } } import Biblio.*; import java.lang.System; public class Demo {

public static void main( String[] args ) {

Article art = new Article("anka:2000"); art.year("ca 2000");

art.title("Vad kul detta är"); art.journal("Disney's samlade verk"); art.author("Kalle Anka"); art.pages(34,90);

InProceeding ip = new InProceeding("anka:2002"); ip.year("2002"); ip.title("Ankeborgs ekonomi"); ip.author("Kalle Anka"); ip.pages(12,78); ip.proceeding("Ankornas Världskonferens");

References

Related documents

This tool features: public access through web services; extracting metadata of photos from Flickr or local photo repositories; clustering photos using

Ingrid Carlou, CEO of Patria Re told LatAm Insurance Review that the new office will help Patria Re to be nearer the “pulse of the trends and developments” in the global

In section 7 the effect that ionospheric out flows into the electron plasma sheet (the warm plasma cloak) has on dayside reconnection is studied: mass densities measured

these safety functions Assess architecture, apply design guidance Allocate functions to systems Carry out risk assessment?. Capture requirements (from safety functions and

[r]

cost per unit of production of production Measure of quality Measure of quality ( Quality Level) ( Quality Level) Economic Economic  balance  balance Total Total cost cost

b) Expression transformation: You can use the Expression transformations to calculate values in a single row before you write to the target. For example, you might need to

First, using high frequency data across a wide range of asset classes, we provide an analysis of realised kernel based volatility of Exchange Traded Funds, FX, fixed income,