Skip to content
Snippets Groups Projects
Commit 815b4ef4 authored by Otto Kuusniemi's avatar Otto Kuusniemi
Browse files

Tehtävä 2 tehty.

parent fec00960
Branches master
No related tags found
No related merge requests found
package fi.utu.tech.ooj.exercise2;
public class Tehtava2ohjelmalogiikka {
private Tehtava2tiedostopalvelu tietopalvelu;
import fi.utu.tech.ooj.exercise2.teht2tiedostot.*;
public Tehtava2ohjelmalogiikka(Tehtava2tiedostopalvelu tieto) {
public class Tehtava2ohjelmalogiikka<T extends TiedostojenTallennus<T>> {
private T tietopalvelu;
public Tehtava2ohjelmalogiikka(T tieto) {
this.tietopalvelu = tieto;
}
......
......
package fi.utu.tech.ooj.exercise2;
package fi.utu.tech.ooj.exercise2.teht2tiedostot;
import java.util.List;
public class Tehtava2tiedostopalvelu<T> {
public class Tehtava2tiedostopalvelu<T> implements TiedostojenTallennus<T> {
@Override
public void lisaaTieto(T value) {
//Toteutus poistettu. Se on merkityksetön tehtävän kannalta.
}
@Override
public List<T> haeTiedot() {
//Toteutus poistettu. Se on merkityksetön tehtävän kannalta.
return null;
}
@Override
public void muokkaaTieto(T value, T newValue) {
//Toteutus poistettu. Se on merkityksetön tehtävän kannalta.
}
@Override
public void poistaTieto(T value) {
//Toteutus poistettu. Se on merkityksetön tehtävän kannalta.
}
......
......
package fi.utu.tech.ooj.exercise2;
package fi.utu.tech.ooj.exercise2.teht2tiedostot;
import java.util.List;
public class Tehtava2tietokanta1<T> {
public class Tehtava2tietokanta1<T> implements TiedostojenTallennus<T> {
@Override
public void lisaaTieto(T value) {
//Toteutus poistettu. Se on merkityksetön tehtävän kannalta.
}
@Override
public List<T> haeTiedot() {
//Toteutus poistettu. Se on merkityksetön tehtävän kannalta.
return null;
}
@Override
public void muokkaaTieto(T value, T newValue) {
//Toteutus poistettu. Se on merkityksetön tehtävän kannalta.
}
@Override
public void poistaTieto(T value) {
//Toteutus poistettu. Se on merkityksetön tehtävän kannalta.
}
......
......
package fi.utu.tech.ooj.exercise2.teht2tiedostot;
import java.util.List;
/**
* Määrittää ohjelmalogiikan tarvitsemat rutiinit.
* @param <T> geneerinen tyyppi, joka riippuu toteutuksesta
*/
public interface TiedostojenTallennus<T> {
/**
* Lisää tyyppiä T oleva alkio tiedostoon.
* @param value tyyppiä T oleva lisättävä alkio
*/
public void lisaaTieto(T value);
/**
* Palauttaa tiedostossa olevat alkiot
* @return <code>List <T></code> lista tiedostossa olevista alkioista
*/
public List<T> haeTiedot();
/**
* Muokkaa vanhan arvon <code>value</code> uudeksi arvoksi <code>newValue</code>
* @param value vanha muokattava arvo
* @param newValue uusi arvo
*/
public void muokkaaTieto(T value, T newValue);
/**
* Poistaa annetun alkion tiedostosta
* @param value poistettava alkio
*/
public void poistaTieto(T value);
}
Tehtava2tiedostopalvelu ja Tehtava2tietokanta on siirretty uuteen pakettiin teht2tiedostot, jossa on tekstinä tehtävän perustelut, että rajapintaluokka TiedostojenTallennus. TiedostojenTallennus rajapintaluokan tarkoitus on määrittää ohjelmalogiikan tarvitsemat rutiinit. Täten mikä tahansa luokka, joka toteuttaa rajapintaluokan TiedostojenTallennus toimii ohjelmalogiikan kanssa, sillä rajapintaluokan toteuttaminen tarkoittaa juuri tarvittavien rutiinien toteuttamista.
Ratkaisun takia tosin uusien ominaisuuksien lisääminen vaikeutuu, sillä joko TiedostojenTallennus rajapintaan täytyy silloin lisätä uudet rutiinit, jolloin kaikkien rajapinnan toteuttavien luokkien on tehtävä toteutuksensa rutiinista tai uusi rutiini täytyy lisätä toteutuksen kera rajapintaan.
Kolmas tapa olisi sitten TiedostojenTallennus rajapinnan laajentaminen uudella perivällä rajapinnalla, joka pakottaisi jonkinlaisen luokka tunnistamisen ohjelmalogiikkaan, jotta uutta rutiinia ei kutsuttaisi kun vain vanhan rajapinnan toteuttavaa tietoyhteyttä käytetään.
Kaiken kaikkiaan itse toteutuksen tekeminen monimutkaistuu, mutta uudelleenkäytettävyys ja kokonaisuuden selkeys lisääntyy, sillä nyt ohjelmistokokonaisuus on saatu nivottua toisiinsa selkeällä suhteella.
\ No newline at end of file
......@@ -2,4 +2,6 @@ module fi.utu.tech.ooj.exercise2 {
exports fi.utu.tech.ooj.exercise2;
opens fi.utu.tech.ooj.exercise2;
exports fi.utu.tech.ooj.exercise2.teht2tiedostot;
opens fi.utu.tech.ooj.exercise2.teht2tiedostot;
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please to comment