Det vil være naturlig å la Fremkomstmiddel være forelderen til Bil og Sykkel (arv). Bil naturlig ha Pedal og Motor (komposisjon), og Sykkel vil ha Pedal (komposisjon).
På samme måte vil Bosted vil naturlig være en parent for Hus og Hytte, hvorpå både Hus og Hytte har ett eller flere Rom.
Det er til tross for oppgavens enkelhet flere spørsmål man kan spørre seg i forhold til diverse definisjoner.
-
Sykkelkan med dagens teknologi inneholde enMotor(El-sykkel).Hvis dette er noe man har lyst til å ta videre kan man med enkelhet la
Sykkelha enMotor. -
Bilogså inneholder flere forskjelligeRom(bagasjerom, hanskerom, motorrom, etc).Dette er igjen noe man enkelt kan legge til rette for, da man kan la
Bilha et ellere flereRom. -
Bilkan være etBosted(bobil etc).Dette kan bli mer komplisert å utføre, med tanke på at man i Java kun kan arve fra én klasse. Dermed kan ikke
Bilarve fra bådeFremkomstmiddelogBosted. Det mest naturlige ville vært å droppetBosted, men hvis man absolutt vil kunne man gjort feks.Bostedom til eninterface, slik at alle klassene ikkeextendsmen hellerimplementsBosted.
Det vil være naturlig å deklarere Fremkomstmiddel og Bosted abstract, da dette er "abstrakte" objekter som bare er en overordnet term. Verken Fremkomstmiddel eller Bosted er noe håndfast, men heller en overordnet betegnelse som kan kan benytte til å gruppere andre klasser under. Derfor er disse perfekte kandidater til å deklareres abstract.
abstract class Fremkomstmiddel{}
abstract class Bosted{}
class Motor{}
class Pedal{}
class Rom{}
class Bil extends Fremkomstmiddel{
private Motor motor;
private Pedal[] pedal;
// Kan potensielt også ha Rom
private Rom[] rom;
}
class Sykkel extends Fremkomstmiddel{
private Pedal[] pedal;
// Kan potensielt ha Motor
// private Motor motor;
}
class Hus extends Bosted{
private Rom[] rom;
}
class Hytte extends Bosted{
private Rom[] rom;
}
package Eksamen2012;
import javax.swing.*;
import java.awt.*;
public class Oppgave2 extends JFrame{
public Oppgave2(){
super("FINN SKATTEN!");
JPanel knapper = new JPanel(new GridLayout(4,4));
for(int i = 0; i < 16; i++){
knapper.add(new JButton("Kanskje her?"){{
setBackground(Color.LIGHT_GRAY);
}});
}
add(knapper, BorderLayout.NORTH);
JPanel bunnKnapper = new JPanel(new GridLayout(1,2));
add(bunnKnapper, BorderLayout.SOUTH);
bunnKnapper.add(new JButton("Start på nytt"));
bunnKnapper.add(new JButton("Avslutt"));
pack();
setVisible(true);
}
public static void main(String[] args){
new Oppgave2();
}
}
@Override
public void actionPerformed(ActionEvent a){
JButton button = (JButton) a.getSource();
button.setText("Ikke her!");
button.setBackground(Color.WHITE);
}
@Override
public void actionPerformed(ActionEvent a){
switch(a.getActionCommand()){
case "Kanskje her?":
JButton button = (JButton) a.getSource();
button.setText("Ikke her!");
button.setBackground(Color.WHITE);
break;
case "Start på nytt":
this.dispose();
new Oppgave2();
break;
case "Avslutt":
System.exit(0);
break;
}
}
public class Gjenstand {
private String beskrivelse;
private int regNr;
private int dimension;
public Gjenstand(){
this("", 0, 0);
}
public Gjenstand(String beskrivelse, int regNr, int dimensjon) {
setBeskrivelse(beskrivelse);
setRegNr(regNr);
setDimension(dimensjon);
}
public void setBeskrivelse(String beskrivelse) {
this.beskrivelse = beskrivelse;
}
public String getBeskrivelse(){
return beskrivelse;
}
public void setRegNr(int regNr) {
this.regNr = regNr;
}
public int getRegNr() {
return regNr;
}
public void setDimension(int dimension) {
this.dimension = dimension;
}
public int getDimension() {
return dimension;
}
public String toString(){
return getRegNr() + ": " + getBeskrivelse() + " (" + getDimension() + ")";
}
public boolean equals(Object object){
if(!(object instanceof Gjenstand)) return false;
if(object == this) return true;
return getRegNr() == ((Gjenstand) object).getRegNr();
}
}
public class GjenstandKlient {
public static void main(String[] args){
Gjenstand bok = new Gjenstand("Bok", 1, 1);
Gjenstand kopp = new Gjenstand("Kopp", 2, 1);
Gjenstand bord = new Gjenstand("Bord", 3, 1);
Gjenstand boks = new Gjenstand("Boks", 4, 1);
Gjenstand ark = new Gjenstand("Ark", 5, 1);
ArrayList<Gjenstand> gjenstander = new ArrayList<Gjenstand>();
gjenstander.add(bok);
gjenstander.add(kopp);
gjenstander.add(bord);
gjenstander.add(boks);
gjenstander.add(ark);
for (Gjenstand gjenstand : gjenstander){
System.out.println(gjenstand.toString());
}
System.out.println(gjenstander.contains(new Gjenstand("", 1, 0)));
// fjerner kopp
gjenstander.remove(kopp);
// fjerner ark
ArrayList<Gjenstand> nyeGjenstander = new ArrayList<Gjenstand>();
for (Gjenstand gjenstand : gjenstander){
if(!gjenstand.equals(ark)){
nyeGjenstander.add(gjenstand);
}
}
gjenstander = nyeGjenstander;
for (Gjenstand gjenstand : gjenstander){
System.out.println(gjenstand.toString());
}
}
}