• Ei tuloksia

Esimerkki: Esimerkki: PinoPino 1(3) 1(3)

N/A
N/A
Info
Lataa
Protected

Academic year: 2022

Jaa "Esimerkki: Esimerkki: PinoPino 1(3) 1(3)"

Copied!
2
0
0

Kokoteksti

(1)

1 1

Esimerkki:

Esimerkki: Pino Pino 1(3) 1(3)

/** Pino on alkiokokoelma, joka noudattaa /** Pino on alkiokokoelma, joka noudattaa * LIFO-käyttäytymistä.

* LIFO-käyttäytymistä.

*/

*/

public interface public interface PinoPino<T> {<T> { //-- Havainnointioperaatiot //-- Havainnointioperaatiot /** Palauttaa alkioiden määrän.

/** Palauttaa alkioiden määrän.

* @.pre true * @.pre true * @.post RESULT ==

* @.post RESULT ==

*

* (pinossa olevien alkioiden lukumäärä)(pinossa olevien alkioiden lukumäärä) */

*/

public int public int annaKoko();annaKoko();

/** Palauttaa pinon päällimmäisen alkion.

/** Palauttaa pinon päällimmäisen alkion.

* @.pre !onTyhjä() * @.pre !onTyhjä()

* @.post RESULT == (pinon päällimmäinen alkio) * @.post RESULT == (pinon päällimmäinen alkio) */

*/

publicpublic T päällimmäinen(); T päällimmäinen();

Esimerkki:

Esimerkki: Pino Pino 2(3) 2(3)

/** Palauttaa pinon alimmaiset alkiot./** Palauttaa pinon alimmaiset alkiot.

* @.pre !onTyhjä() * @.pre !onTyhjä()

* @.post RESULT == (pinon alimmaiset alkiot pinona) * @.post RESULT == (pinon alimmaiset alkiot pinona) */

*/

publicpublic PinoPino<T> alimmaiset();<T> alimmaiset();

/** Tarkistaa onko pino tyhjä.

/** Tarkistaa onko pino tyhjä.

* @.pre true * @.pre true

* @.post RESULT == (annaKoko() == 0) * @.post RESULT == (annaKoko() == 0) */

*/

public booleanpublic boolean onTyhjä(); onTyhjä();

/** Tarkistaa onko pino täysi.

/** Tarkistaa onko pino täysi.

* @.pre true * @.pre true

* @.post RESULT == (pinoon mahtuu vielä alkioita) * @.post RESULT == (pinoon mahtuu vielä alkioita) */

*/

public boolean public boolean onTäysi();onTäysi();

Esimerkki:

Esimerkki: Pino Pino 3(3) 3(3)

//-- Muutosoperaatiot //-- Muutosoperaatiot /** Lisää alkion pinon päälle.

/** Lisää alkion pinon päälle.

* @.pre !onTäysi() * @.pre !onTäysi()

* @.post OLD(this).equals(this.alimmaiset()) &

* @.post OLD(this).equals(this.alimmaiset()) &

*

* (päällimmäinen() == alkio)(päällimmäinen() == alkio) */

*/

public voidpublic void lisää(T alkio); lisää(T alkio);

/** Poistaa pinon päällimmäisen alkion.

/** Poistaa pinon päällimmäisen alkion.

* @.pre !onTyhjä() * @.pre !onTyhjä()

* @.post this.equals(OLD(this).alimmaiset()) * @.post this.equals(OLD(this).alimmaiset()) */

*/

public voidpublic void poista(); poista();

/** Tyhjentää pinon.

/** Tyhjentää pinon.

* @.pre true * @.pre true * @.post onTyhjä() * @.post onTyhjä() */

*/

public voidpublic void tyhjennä(); } tyhjennä(); }

Erikoistilanteiden hallinta Erikoistilanteiden hallinta

 Rutiini matemaattisena funktiona Rutiini matemaattisena funktiona

 määrittelyjoukko ( määrittelyjoukko (domain domain) ) D D

 arvojoukko ( arvojoukko (range range) ) R R

 Rutiini on kuvaus Rutiini on kuvaus f f : : D D → → R R

Esimerkkejä: Esimerkkejä:

itseisarvo: itseisarvo: D D = = R R, , R R = = R R

++

 kokonaislukujakolasku: kokonaislukujakolasku: D D = = Z Z × × Z Z, , R R = = Z Z

Määrittelyjoukon jako eri Määrittelyjoukon jako eri osiin

osiin

Alkuehtotapaukset Alkuehtotapaukset

Erikoistapaukset Erikoistapaukset

Normaali tapaus Normaali tapaus

Erikoistilanteesta Erikoistilanteesta tiedottaminen tiedottaminen

 Poikkeuksen nostaminen Poikkeuksen nostaminen

 tarkistettavat poikkeukset tarkistettavat poikkeukset

 tarkistamattomat poikkeukset tarkistamattomat poikkeukset

  Viittaustyyppisen parametrin kautta Viittaustyyppisen parametrin kautta

 Toimittajaluokan attribuutin kautta Toimittajaluokan attribuutin kautta

 Globaalia tietoa sisältävän olion Globaalia tietoa sisältävän olion kautta

kautta

 Palauttamalla tieto Palauttamalla tieto

normaalitapauksen tapaan

normaalitapauksen tapaan

(2)

2 2

Nyrkkisääntö erikoistilanteiden Nyrkkisääntö erikoistilanteiden käsittelyyn

käsittelyyn

1.

1. Siirrä erikoistilanne alkuehtoon, Siirrä erikoistilanne alkuehtoon, mikäli se asiakkaan kannalta mikäli se asiakkaan kannalta selkeää ja ymmärrettävää.

selkeää ja ymmärrettävää.

2.

2. Mikäli sääntö 1 ei toimi, Mikäli sääntö 1 ei toimi, erikoistilanteet hoidetaan erikoistilanteet hoidetaan

käsiteltävillä poikkeuksilla, jolloin käsiteltävillä poikkeuksilla, jolloin asiakas pakotetaan ottamaan niihin asiakas pakotetaan ottamaan niihin kantaa.

kantaa.

3.

3. Mikäli säännöt 1 ja 2 eivät toimi, Mikäli säännöt 1 ja 2 eivät toimi, hoidetaan erikoistilanne muulla hoidetaan erikoistilanne muulla tavoin.

tavoin.

Javan poikkeushierarkia Javan poikkeushierarkia

Throwable Throwable

Error

Error Exception Exception

RuntimeException RuntimeException

tarkistamattomat tarkistamattomat

poikkeukset poikkeukset

tarkistamattomat poikkeukset tarkistamattomat poikkeukset

tarkistettavat tarkistettavat poikkeukset poikkeukset

Tarkistamattomat poikkeus Tarkistamattomat poikkeus (unchecked exception ( unchecked exception) )

Ei tarvitse esitellä signatuurissa  Ei tarvitse esitellä signatuurissa

Ei yleensä napata kiinni  Ei yleensä napata kiinni

Error  Error: vakavat virheet : vakavat virheet

RuntimeException  RuntimeException: ajoaikainen : ajoaikainen virhe

virhe

Tarkistettava poikkeus Tarkistettava poikkeus (checked exception ( checked exception) )

 Esiteltävä signatuurissa Esiteltävä signatuurissa

 Otettava aina ekspliittisesti Otettava aina ekspliittisesti kantaa

kantaa

 nappaa kiinni nappaa kiinni

 päästä eteenpäin päästä eteenpäin

 Periytyvät Periytyvät Exception Exception-luokasta -luokasta

Esimerkki poikkeusten Esimerkki poikkeusten käytöstä

käytöstä

/** Palauttaa taulukon minimialkion.

/** Palauttaa taulukon minimialkion.

* @.pre true * @.pre true

* @.post FORALL(a : taulu; RESULT <= a) * @.post FORALL(a : taulu; RESULT <= a) * @throws NullPointerException * @throws NullPointerException *

* Nostetaan jos taulu == null.Nostetaan jos taulu == null.

* @throws TyhjäTaulukkoPoikkeus * @throws TyhjäTaulukkoPoikkeus *

* Nostetaan jos taulu.length == 0.Nostetaan jos taulu.length == 0.

*/

*/

public static int

public static int minimi(minimi(intint[] taulu)[] taulu)

throwsthrows NullPointerExceptionNullPointerException, , TyhjäTaulukkoPoikkeusTyhjäTaulukkoPoikkeus { {

trytry { {

intint pienin = taulu[0]; pienin = taulu[0];

forfor ( (intint i = 1; i < taulu.length; i++) i = 1; i < taulu.length; i++)

ifif (taulu[i] < pienin) pienin = taulu[i]; (taulu[i] < pienin) pienin = taulu[i];

returnreturn pienin; pienin;

}

} catchcatch ( (IndexOutOfBoundsExceptionIndexOutOfBoundsException e) { e) {

throw new throw new TyhjäTaulukkoPoikkeusTyhjäTaulukkoPoikkeus(("tyhjä taulu""tyhjä taulu"););

} } } }

Viittaukset

LIITTYVÄT TIEDOSTOT

Kahta

*:llä merkityt tehtävät eivät ole kurssien keskeiseltä alueelta. Pisteeseen Q piirretty ympyrän tangentti leikkaa säteen OP jatkeen pisteessä R. Auringon säteet

Siirrä erikoistilanne alkuehtoon, Siirrä erikoistilanne alkuehtoon, mikäli se asiakkaan kannalta mikäli se asiakkaan kannalta selkeää ja ymmärrettävää.. selkeää

Tytin tiukka itseluottamus on elämänkokemusta, jota hän on saanut opiskeltuaan Dallasissa kaksi talvea täydellä

Explain the reflection and transmission of traveling waves in the points of discontinuity in power systems2. Generation of high voltages for overvoltage testing

The Extrinsic Object Construction must have approximately the meaning'the referent ofthe subject argument does the activity denoted by the verb so much or in

To this day, the EU’s strategic approach continues to build on the experiences of the first generation of CSDP interventions.40 In particular, grand executive missions to

However, the pros- pect of endless violence and civilian sufering with an inept and corrupt Kabul government prolonging the futile fight with external support could have been