Objekter - Klasser

Vi har indtil nu arbejdet med såkaldt primitive variabler, int, long, double, etc. Ikke primitive typer i egenskaber, men primitive i modsætning til komplekse. De har hver én værdi, fx int i = 42;

Overfor de primitive typer, står klasser, som er komplekse typer i den forstand at typen har, potentielt, flere værdier. Vi ser her nærmere på dette.

Klasser som typer

  • En klasse er en type.
  • Et objekt er et konkret individ af den pågældende type.
// Erklæring af variabler
// primitive
int i;                          // er klæring af primitiv type
i = 42;                         // tildeling af værdi
int j = 47;                     // erklæring og tildeling af værdi

// komplekse
String fornavn;                 // String er en af Java's datatyper
                                // dvs IKKE selvdefineret    
Studerende student1;            // erklæring af variabel af typen Studerende
                                // som vi selv har defineret
			     
student1 = new Studerende();    // initialisering af variabel
                                // uden tildeling af værdier
                                // student1 er nu et objekt

Studerende student2 = new Studerende('Niels', 'Lærer', 18325);
                                // erklæring og tildeling af værdier
  • Et objekt er en variabel, med et antal værdier.
  • Variablen indeholder ikke værdierne.
  • Den er en objektreference til det sted i hukommelsen, hvor værdierne faktisk findes.

Live Coding

  • Vi laver en Boks lignende bogens afsnit 4.1. Tegn og kod.
    Figur 5.1. En klassemodel

  • Vi laver et program til test af Boks. Lad os bruge navnet BenytBoks.
  • Uden encapsulation, indkapsling. Program leverer værdier. Print.
  • Med encapsulation. Program leverer værdier. Print.
  • Lav constructor, konstruktør. Print.
  • Indfør get-metoder. Print.
  • Som alternativ, drop konstruktør og brug set-metoder. Print.

Endnu et eksempel

Figur 5.2. En ny simpel klassemodel

/**
 * @author nml
 * 
 */
public class NmlTime {

	private final int hour, minute;

	private final double second;

	public NmlTime() {
		this.hour = 0;
		this.minute = 0;
		this.second = 0.0;
	}

	public NmlTime(int h, double s, int m) {
		this.hour = h;
		this.minute = m;
		this.second = s;
	}

	public NmlTime(int h, int m, double s) {
		this.hour = h;
		this.minute = m;
		this.second = s;
	}

	@Override
	public String toString() {
		String s = "";
		s += this.hour + ":";
		s += this.minute + ":";
		s += this.second;
		return s;
	}

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		NmlTime t1 = new NmlTime();
		NmlTime t2 = new NmlTime(1, 19, 34.0);
		NmlTime t3 = new NmlTime(1, 21., 34);
		NmlTime t4 = t3.diff(t2);
		System.out.println(t1);
		System.out.println(t2);
		System.out.println(t3);
	}

}