• No results found

2. Palindrom. Exempel: 1,2,3,2,1 är ett palindrom, och även 0, men inte 1,2,3,1,2,3.

N/A
N/A
Protected

Academic year: 2022

Share "2. Palindrom. Exempel: 1,2,3,2,1 är ett palindrom, och även 0, men inte 1,2,3,1,2,3."

Copied!
11
0
0

Loading.... (view fulltext now)

Full text

(1)

LULE˚ A TEKNISKA UNIVERSITET

Tentamen i

Objektorienterad programmering och design Totala antalet uppgifter: 5

L¨arare: H˚akan Jonsson, 491000, 073-820 1700 Resultatet offentligg¨ors senast: 2011-04-02.

Kurskod D0010E Datum 2011-03-18 Skrivtid 5 tim Till˚atna hj¨alpmedel: Inga.

OBS! L¨osningar f˚ar inte baseras p˚a f¨ordefinierade klasser ur t ex Javas standardbibliotek annat ¨an d¨ar detta uttryckligen till˚ats. S˚adana l¨osningar ger inga po¨ang.

1. Teori

a) Ange en v¨asentlig skillnad mellan klass och objekt. (1p) b) Ett program best˚ar av fyra klasser A, B, C och D. Klasserna A och B ligger i paketet p medan C och D ligger i paketet q. Vidare ¨ar B och D abstrakta, och D inneh˚aller deklarationerna:

protected int i;

private int j;

int k;

Om nu A ¨arver B som ¨arver C som ¨arver D, i vilka av de fyra klasserna syns d˚a

i) ... i? (1p)

ii) ... j? (1p)

iii) ... k? (1p)

c) P˚a sida 3 finns en klass f¨or FIFO-k¨oer1 som fungerar trots att den har vissa brister. Vilka?

Svara kortfattat med radnummer och vad som ¨ar ol¨ampligt samt hur du ist¨allet skulle ha skrivit. L¨agg d¨arefter till en lista med eventuella brister

som inte har med enskilda rader att g¨ora. (2p)

2. Palindrom (6p)

Skriv en metod public static boolean isPalindrome(int[] num) som avg¨or om en listning av talen i en heltalsarray blir densamma oavsett fr˚an vilket h˚all man listar talen. Anta, om du vill, att arrayen inneh˚aller minst ett tal (beh¨over inte kollas).

Exempel: 1,2,3,2,1 ¨ar ett palindrom, och ¨aven 0, men inte 1,2,3,1,2,3.

3. Fotoalbum (6p)

Utg˚a fr˚an att det redan finns en klass Photo och skriv en klass PhotoAlbum f¨or fotoalbum med f¨oljande konstruktor och metoder:

• public PhotoAlbum(int maxSize) som skapar ett tomt album med plats f¨or som mest maxSize foton.

• public int maxSize() som ger maximala antalet foton som ryms i albumet.

• public int size() som ger tillbaka aktuellt antal foton i albumet.

• public void append(Photo p) som l¨agger till p sist. Fotot som l¨aggs till ett album inneh˚allande i foton ¨ar nr i + 1.

• public Photo photoNum(int n) som ger tillbaka foto nr n.

• public void replaceNum(int n, Photo p) som byter ut foto nr n mot p.

1Ungef¨ar som k¨on du implementerade i lab 3, men inte lika omfattade.

1

(2)

• public void deleteNum(int n) som tar bort foto nr n. Detta minskar albu- mets storlek med 1. Det minskar ocks˚a numret p˚a alla foton med nummer h¨ogre

¨an n med 1.

Undantag ska kastas n¨ar s˚a ¨ar l¨ampligt. Tips: Representera internt fotoalbumet med en array.

4. UML (6p)

+ EnLitersBurk(int vikt) EnLitersBurk

+ Behållare(double volym) + volym() : double + ärÖppen() : boolean + öppna() : void + stäng() : void

# volym : double

# öppen : boolean

<<abstract>>

Behållare

+ Burk(double volym, int vikt) + vikt() : int

# vikt : int

<<abstract>>

Burk RuntimeException

throws throws

+ Påse(double volym) Påse + KonservBurk(double volym, int vikt)

KonservBurk

Figur 1: UML-diagram f¨or uppgift 4.

Implementera klasserna i UML-diagramet i figur 1 enligt f¨oljande:

Beh˚allare En klass representerar allm¨anna beh˚allare som har viss volym (ml) och

¨ar antingen ¨oppna eller st¨angda. Endast en st¨angd beh˚allare kan ¨oppnas (med

¨

oppna()), och en¨oppen st¨angas (med st¨ang()). F¨ors¨ok att ¨oppna eller st¨anga i andra fall resulterar i att ett undantag kastas. Metoden ¨ar¨Oppen() avg¨or om en beh˚allare ¨ar ¨oppen och volym() ger beh˚allarens volym.

P˚ase En nyskapad p˚ase ¨ar till att b¨orja med ¨oppen.

Burk En burk ¨ar en beh˚allare med vikt (gram). Metoden vikt() ger vikten.

Konservburk En konservburk ¨ar till att b¨orja med st¨angd. S˚a snart den ¨oppnats kan den inte st¨angas; f¨ors¨ok att st¨anga den ger d˚a ett undantag.

EnLitersBurk En 1-litersburk ¨ar en burk med volymen 1000 ml.

5. Iteratorer

a) Utg˚a fr˚an klassen p˚a sidan 3 och inf¨or p˚a l¨ampligt s¨att en m¨ojlighet att skapa iteratorer enligt Iterator-gr¨anssnittet bifogat sist. Metoden remove ska endast kasta undantag.

Du f˚ar h¨ar, f¨or enkelhets skull, anta att en k¨o inte f¨or¨andras efter att en f¨orsta

iterator har skapats. (3p)

b) N¨ar en k¨o f¨or¨andras, genom att inneh˚all l¨aggs till eller tas bort, kan man s¨aga att det ¨over tiden uppst˚ar olika versioner av den.

Om vi vill att iteratorer som skapats f¨or en viss version av k¨on ska fungera endast s˚a l¨ange inga nya versioner av k¨on skapas, hur skulle du ˚astadkomma det? Ange kortfattat de f¨or¨andringar och till¨agg du skulle g¨ora i klassen p˚a

sidan 3 och din iterator. (3p)

2

(3)

Bilaga: En k¨ oklass

1 public c l a s s LIFO { 2 public Item f i r s t ; 3 public Item l a s t ; 4 public i n t s i z e = 0 ; 5

6 public LIFO ( ) {

7 f i r s t = new Item ( ) ; // h e a d e r 8 l a s t = f i r s t ;

9 }

10

11 public c l a s s Item {

12 public Item l i n k = n u l l ; 13 public O b j e c t c o n t e n t ;

14 }

15

16 public i n t s i z e ( ) { 17 return t h i s . s i z e ;

18 }

19

20 public void add ( O b j e c t e l e m e n t ) { 21 Item b2 = new Item ( ) ;

22 b2 . c o n t e n t = e l e m e n t ; 23 l a s t . l i n k = b2 ;

24 l a s t = b2 ;

25 s i z e ++;

26 }

27

28 public O b j e c t f i r s t ( ) { 29 return f i r s t . l i n k ;

30 }

31

32 public void r e m o v e F i r s t ( ) { 33 i f ( f i r s t . l i n k != n u l l ) { 34 Item r = f i r s t . l i n k ; 35 f i r s t = f i r s t . l i n k ;

36 s i z e −−;

37 }

38 }

39 }

3

(4)

Overview Package Class Use Tree Deprecated Index Help JavaTM 2 Platform Std. Ed. v1.4.2

PREV CLASS NEXT CLASS FRAMES NO FRAMES All Classes

SUMMARY: NESTED | FIELD | CONSTR | METHOD DETAIL: FIELD | CONSTR | METHOD

java.util

Interface Iterator

All Known Subinterfaces:

ListIterator

All Known Implementing Classes:

BeanContextSupport.BCSIterator

public interface Iterator

An iterator over a collection. Iterator takes the place of Enumeration in the Java collections framework. Iterators differ from enumerations in two ways:

Iterators allow the caller to remove elements from the underlying collection during the iteration with well-defined semantics.

Method names have been improved.

This interface is a member of the Java Collections Framework.

Since:

1.2

See Also:

Collection

,

ListIterator

,

Enumeration

Method Summary

boolean hasNext()

Returns

true

if the iteration has more elements.

Object next()

Returns the next element in the iteration.

void remove()

Removes from the underlying collection the last element returned by the iterator (optional operation).

Method Detail

hasNext

public boolean hasNext()

Returns

true

if the iteration has more elements. (In other words, returns

true

if

next

would

return an element rather than throwing an exception.)

(5)

Returns:

true

if the iterator has more elements.

next

public Object next()

Returns the next element in the iteration.

Returns:

the next element in the iteration.

Throws:

NoSuchElementException

- iteration has no more elements.

remove

public void remove()

Removes from the underlying collection the last element returned by the iterator (optional operation). This method can be called only once per call to

next

. The behavior of an iterator is unspecified if the underlying collection is modified while the iteration is in progress in any way other than by calling this method.

Throws:

UnsupportedOperationException

- if the

remove

operation is not supported by this Iterator.

IllegalStateException

- if the

next

method has not yet been called, or the

remove

method has already been called after the last call to the

next

method.

Overview Package Class Use Tree Deprecated Index Help JavaTM 2 Platform Std. Ed. v1.4.2

PREV CLASS NEXT CLASS FRAMES NO FRAMES All Classes

SUMMARY: NESTED | FIELD | CONSTR | METHOD DETAIL: FIELD | CONSTR | METHOD

Submit a bug or feature

For further API reference and developer documentation, see Java 2 SDK SE Developer Documentation. That documentation contains more detailed, developer-targeted descriptions, with conceptual overviews, definitions of terms, workarounds, and working code examples.

Copyright © 2003, 2010 Oracle and/or its affiliates. All rights reserved. Use is subject to license terms. Also see the documentation redistribution policy.

(6)

Errata (D0010E, 2011-03-18)

1. Kommentar: I sista deluppgiften ska det verkligen st˚a ”FIFO”; implementeringen p˚a sida 3 ¨ar en FIFO-k¨o trots klassens (missvisande) namn. Ett mera avvikande namn p˚a LIFO, t ex BankKonto, hade varit tydligare.

2.

3. F¨ortydligande: deleteNum minskar den aktuella storleken, inte den maximala.

F¨ortydligande: replaceNum ska bara byta ut foton som finns i albumet(!) Att albu- met inte ¨ar fullt, och det d¨arf¨or finns tomma platser, ska inte blandas ihop med att varje foto har ett unikt nummer och att endast foton kan bytas ut. Numreringen f¨oljer av den ordning i vilken albumets metoder anropats.

4.

5. Kommentar: Observera att det ska kunna finnas flera iteratorer till en och samma k¨o.

6

(7)

Existing suggested solutions (D0010E, 2011-03-18)

1

Kommentarer p˚a uppgift 1:

a) Klasser skrivs av programmerare och ing˚ar i programmets k¨allkod medan objekt skapas under k¨orning.

b) i) Alla.

ii) Endast D.

iii) C och D.

c) F¨oljande, som inte allt ¨ar lika sj¨alvklart, ¨ar brister:

• Klassnamnet ¨ar missvisande; borde vara FIFO.

• Interna tillst˚andet b¨or vara dolt, dvs private.

• Den interna nodklassen Item b¨or vara dold, dvs private.

• Det saknas javadoc.

• Det saknas interna kommentarer. T ex att first ¨ar en pre-pointer.

• removeFirst b¨or reagera om man f¨ors¨oker ta bort ur en tom k¨o, t ex genom att kasta undantag (en enkel l¨osning ¨ar att l¨agga till en else-gren p˚a if- satsen, och i den kasta undantaget).

• Klassen Item skulle kunna ha metoder och konstruerare med argument (t ex inneh˚allet).

• P˚a rad 17 beh¨ovs inte this.

• Rad 34 beh¨ovs inte.

• Metoden first b¨or inte returnera link utan content. Att det fungerar nu beror bara p˚a att den interna nodklassen exponeras utanf¨or LIFO, vilket ¨ar ol¨ampligt (se ovan).

• Idag skulle man med f¨ordel kunna parametrisera LIFO med elementtypen, och d¨arigenom komma ifr˚an problemet med att ett Object kan vara vad som helst. Detta skulle ocks˚a omdelbart r¨oja misstaget i first.

• ..

2

Kommentarer p˚a uppgift 2:

Metoden Math.abs b¨or man ha skrivit sj¨alv (ber¨aknar absolutbeloppet) men ¨ar s˚a enkel att den godtas i denna l¨osning.

1 p u b l i c s t a t i c b o o l e a n i s P a l i n d r o m e ( i n t [ ] num) { 2 r e t u r n iP (num , 0 , num . l e n g t h − 1 ) ;

3 }

4

5 p u b l i c s t a t i c b o o l e a n iP ( i n t [ ] num , i n t i , i n t j ) { 6 i f ( Math . abs ( i −j )<=1) {

7 r e t u r n t r u e ;

8 } e l s e {

9 r e t u r n num [ i ]==num [ j ] && iP (num , i +1 , j − 1 ) ;

10 }

11 }

3

Kommentarer p˚a uppgift 3:

7

(8)

1 p u b l i c c l a s s PhotoAlbum { 2

3 p r i v a t e i n t maxSize ; 4 p r i v a t e i n t s i z e ;

5 p r i v a t e Photo [ ] p h o t o s ; 6

7 p u b l i c PhotoAlbum ( i n t maxSize ) { 8 t h i s . maxSize = maxSize ;

9 p h o t o s = new Photo [ t h i s . maxSize ] ; 10 s i z e = 0 ;

11 }

12

13 p u b l i c i n t maxSize ( ) { 14 r e t u r n t h i s . maxSize ;

15 }

16

17 p u b l i c i n t s i z e ( ) { 18 r e t u r n t h i s . s i z e ;

19 }

20

21 p u b l i c v o i d append ( Photo p ) { 22 i f ( s i z e == maxSize ) {

23 throw new RuntimeException ( ” Album a l r e a d y f u l l . ” ) ;

24 } e l s e {

25 p h o t o s [ s i z e ++] = p ;

26 }

27 }

28

29 p r i v a t e b o o l e a n okPhotoNum ( i n t num) { 30 r e t u r n 0 <= num && num < s i z e ;

31 }

32

33 p u b l i c Photo photoNum ( i n t num) { 34 i f ( okPhotoNum (num ) ) {

35 r e t u r n p h o t o s [ num ] ;

36 } e l s e {

37 throw new RuntimeException ( ”No s u c h photo . ” ) ;

38 }

39 }

40

41 p u b l i c v o i d replaceNum ( i n t num , Photo p ) { 42 i f ( okPhotoNum (num ) ) {

43 p h o t o s [ num ] = p ;

44 } e l s e {

45 throw new RuntimeException ( ”No s u c h photo . ” ) ;

46 }

47 }

48

49 p u b l i c v o i d deleteNum ( i n t num) { 50 i f ( okPhotoNum (num ) ) {

51 f o r ( i n t i = num ; i <= s i z e − 2 ; i ++) { 52 p h o t o s [ i ] = p h o t o s [ i + 1 ] ;

53 }

54 s i z e −−;

55 } e l s e {

8

(9)

56 throw new RuntimeException ( ”No s u c h photo t o d e l e t e . ” ) ;

57 }

58 }

59 } 4

Kommentarer p˚a uppgift 4:

1 a b s t r a c t c l a s s B e h˚a l l a r e { 2 p r o t e c t e d d o u b l e volym ; 3 p r o t e c t e d b o o l e a n ¨oppen ; 4

5 p u b l i c B e h˚a l l a r e ( d o u b l e volym ) { 6 t h i s . volym = volym ;

7 }

8

9 p u b l i c d o u b l e volym ( ) { 10 r e t u r n volym ;

11 }

12

13 p u b l i c b o o l e a n ¨ar ¨Oppen ( ) { 14 r e t u r n ¨oppen ;

15 }

16

17 p u b l i c v o i d ¨oppna ( ) { 18 i f ( ¨oppen ) {

19 throw new RuntimeException ( ) ;

20 } e l s e {

21 ¨oppen = t r u e ;

22 }

23 }

24

25 p u b l i c v o i d s t ¨a n g ( ) { 26 i f ( ! ¨oppen ) {

27 throw new RuntimeException ( ) ;

28 } e l s e {

29 ¨oppen = f a l s e ;

30 }

31 }

32 } 33

34 c l a s s P˚ase e x t e n d s B e h˚a l l a r e { 35 p u b l i c P˚ase ( d o u b l e volym ) { 36 s u p e r ( volym ) ;

37 ¨oppen = t r u e ;

38 }

39 } 40

41 a b s t r a c t c l a s s Burk e x t e n d s B e h˚a l l a r e { 42 p r o t e c t e d i n t v i k t ;

43

44 p u b l i c Burk ( d o u b l e volym , i n t v i k t ) { 45 s u p e r ( volym ) ;

46 t h i s . v i k t = v i k t ;

47 }

48

9

(10)

49 p u b l i c i n t v i k t ( ) { 50 r e t u r n v i k t ;

51 }

52 } 53

54 c l a s s KonservBurk e x t e n d s Burk {

55 p u b l i c KonservBurk ( d o u b l e volym , i n t v i k t ) { 56 s u p e r ( volym , v i k t ) ;

57 ¨oppen = f a l s e ;

58 }

59

60 p u b l i c v o i d s t ¨a n g ( ) {

61 throw new RuntimeException ( ) ;

62 }

63 } 64

65 c l a s s E n L i t e r s B u r k e x t e n d s Burk { 66 p u b l i c E n L i t e r s B u r k ( i n t v i k t ) { 67 s u p e r ( 1 0 0 0 , v i k t ) ;

68 }

69 }

5 Kommentarer p˚a uppgift 5:

a) L¨agg till en intern klass MyIterator som implementerar granssnittet Iterator och en metod

1 p u b l i c I t e r a t o r i t e r a t o r ( ) { 2 r e t u r n new M y I t e r a t o r ( ) ; 3 }

Klassen berikas sen med en egen Item-referensvariabel som anv¨ands f¨or att referera in i nodlistan under iteration:

1 p r i v a t e c l a s s M y I t e r a t o r i m p l e m e n t s I t e r a t o r {

2 Item p t r ;

3

4 p u b l i c M y I t e r a t o r ( ) { 5 p t r = f i r s t . l i n k ;

6 }

7

8 p u b l i c b o o l e a n hasNext ( ) { 9 r e t u r n p t r != n u l l ;

10 }

11

12 p u b l i c O b j e c t n e x t ( ) {

13 i f ( hasNext ( ) ) {

14 O b j e c t c = p t r . c o n t e n t ; 15 p t r = p t r . l i n k ;

16 r e t u r n c ;

17 } e l s e {

18 throw new NoSuchElementException ( ) ;

19 }

20 }

21

22 p u b l i c v o i d remove ( ) {

23 throw new U n s u p p o r t e d O p e r a t i o n E x c e p t i o n ( ) ;

10

(11)

24 }

25 }

b) I huvudklassen l¨agger vi till en versionsvariabel, version, ett heltal, som ¨okas med 1 varje g˚ang vi f¨or¨andrar k¨on. V˚ar interna klass kopierar versionsnumret till en egen variabel, myVersion, och kollar sedan i samband med varje anrop till den att k¨ons versionsnummer inte f¨or¨andrats:

1 p r i v a t e c l a s s M y I t e r a t o r i m p l e m e n t s I t e r a t o r {

2 Item p t r ;

3 i n t myVersion ;

4

5 p u b l i c M y I t e r a t o r ( ) { 6 p t r = f i r s t . l i n k ; 7 myVersion = v e r s i o n ;

8 }

9

10 p u b l i c b o o l e a n hasNext ( ) { 11 i f ( myVersion != v e r s i o n ) { 12 r e t u r n f a l s e ;

13 }

14 r e t u r n p t r != n u l l ;

15 }

16

17 p u b l i c O b j e c t n e x t ( ) {

18 i f ( ( myVersion == v e r s i o n ) && hasNext ( ) ) { 19 O b j e c t c = p t r . c o n t e n t ;

20 p t r = p t r . l i n k ;

21 r e t u r n c ;

22 } e l s e {

23 throw new NoSuchElementException ( ) ;

24 }

25 }

26

27 p u b l i c v o i d remove ( ) {

28 throw new U n s u p p o r t e d O p e r a t i o n E x c e p t i o n ( ) ;

29 }

30 }

Man kan ocks˚a g¨ora k¨on observerbar och l˚ata iteratorer observera f¨or¨andringar i den. S˚a snart en f¨or¨andring sker s¨atts en stoppflagga i iteratorn. Denna flagga kollas i iteratorns metoder och f¨orhindrar vidare anv¨andning av iteratorn om k¨on f¨or¨andrats.

11

References

Related documents

Keprové vazby mají nejčastější využití jako podšívkoviny, šatové nebo oblekové tkaniny, pracovní tkaniny, denimy, sportovní košiloviny, flanel

souvislosti se zjišťováním podstaty trestného činu)) objektivními důkazními prostředky, např. výslechem osob z prostředí, v němž obviněný žil nebo pracoval. 12) Od

Nyligen publicerade artiklar av

Mezi tyto metody patří metoda select, znázorněná na obrázku 7, která vytvoří treemapu času měření a naměřených hodnot podle vstupních parametrů, kterými jsou objekt

Vývoz a dovoz zboží a služeb (obchodní operace), dále jsou formy nenáročné na kapitálové investice (licence, franchising atd.) a třetí skupinou jsou

V této bakalářské práci jsme se zabývali tématem nozokomiálních nákaz, které mimo jiné úzce souvisí s ošetřovatelskou péčí o operační rány. Tato práce se

Cílem tohotoprůzkumu bylo zjistit pohled veřejnosti na náročnost profese sociálních pracovníků. Pod termínem náročnost je zde myšlena odbornost, emoční

Problematika bezdomovectví se týká téměř každého z nás, a proto je důležité se tímto fenoménem často zabývat, abychom dokázali pochopit, proč v 21. století, jsou mezi