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.
-
Sykkel
kan med dagens teknologi inneholde enMotor
(El-sykkel).Hvis dette er noe man har lyst til å ta videre kan man med enkelhet la
Sykkel
ha enMotor
. -
Bil
også inneholder flere forskjelligeRom
(bagasjerom, hanskerom, motorrom, etc).Dette er igjen noe man enkelt kan legge til rette for, da man kan la
Bil
ha et ellere flereRom
. -
Bil
kan 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
Bil
arve fra bådeFremkomstmiddel
ogBosted
. Det mest naturlige ville vært å droppetBosted
, men hvis man absolutt vil kunne man gjort feks.Bosted
om til eninterface
, slik at alle klassene ikkeextends
men hellerimplements
Bosted
.
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());
}
}
}