Klasser

Et klassediagram

Figur 5.3. En simpel klassemodel
En simpel klassemodel

  • Cprnr klassen, som oplæg til kodning
  • Studerende klassen, ligeså

Lad os gennemgå detaljerne i diagrammet.

Rektanglet
Tredelt, navn, status, opførsel
Navn
Altid med Stor begyndelsesbogstav
Status
Egenskaber: adgang, navn, type
Adgang
Access modifier, oftest private mere om lidt.
Navn
Regler som variabelnavne
Type
Javas normale typer + andre klasser
Opførsel
Metoder gældende for klassen
Metoder
Adgang, returtype, navn, parameterliste
Adgang
Access modifier, jf ovenfor, og senere
Returtype
Datatype for returneret værdi, eller void.
Navn
Navneregler som for variabler
Parameterliste
I parentes. Kommasepareret liste: (typenavn, … typenavn)
Særlige metoder
Konstruktør
Andre særlige metoder
Get'ere, set'ere, aka accessor-metoder og mutator-metoder, toString

Skriv testprogrammet til en klasse

public class CprTestObject {
	/*
	 * Demo af operatorer og beregninger
	 * 
	 * @author NML
	 */
	public static void main(String[] args) {
		Cprnr cpr = new Cprnr(Long.parseLong(args[0]));

		System.out.println("Du indtastede cprnr " + cpr.getCprnr());
		System.out.println("Cprnr er " + cpr.toString());

		if (cpr.checkCprnr())
			System.out.println("Cprnr gyldigt");
		else
			System.out.println("Cprnr ikke gyldigt");
		System.out.println("Farvel");
	}
}

Skriv CPRNr klassen

import org.deformation.utilities.MyInput;

/**
 * Klasse til cpr-numre Klassen har constructor, checkValidity og toString
 * 
 * @author Niels
 * @version sept 09
 * 
 */
public class Cprnr {

	private final long cprnr;

	/**
	 * Konstruktoer bruges 1 gang per objekt, naar det oprettes med Cprnr nyCpr
	 * = new Cprnr(2511450007L);
	 * 
	 * Konstruktoeren skal have samme navn som klassen. Den har ingen type (type
	 * Object) Der kan vaere flere konstruktoerer, blot de har hver sin
	 * kaldesekvens.
	 * 
	 */

	public Cprnr(long cprInd) {
		this.cprnr = cprInd;
	}

	/**
	 * Metode til modulus 11 kontrol af objektets cprnr
	 */
	public boolean checkCprnr() {
		long sum;
		long restcpr = this.cprnr;
		sum = 0L;

		sum += restcpr % 10 * 1;
		restcpr = restcpr / 10;
		sum += restcpr % 10 * 2;
		restcpr = restcpr / 10;
		sum += restcpr % 10 * 3;
		restcpr = restcpr / 10;
		sum += restcpr % 10 * 4;
		restcpr = restcpr / 10;
		sum += restcpr % 10 * 5;
		restcpr = restcpr / 10;
		sum += restcpr % 10 * 6;
		restcpr = restcpr / 10;
		sum += restcpr % 10 * 7;
		restcpr = restcpr / 10;
		sum += restcpr % 10 * 2;
		restcpr = restcpr / 10;
		sum += restcpr % 10 * 3;
		restcpr = restcpr / 10;
		sum += restcpr % 10 * 4;
		restcpr = restcpr / 10;
		if (sum % 11 == 0 && sum != 0)
			return true;
		else
			return false;
	}

	/**
	 * Accessormetode Leverer vaerdien i sin type
	 */
	public long getCprnr() {
		return this.cprnr;
	}

	/**
	 * toString redefinerer java's default metode af samme navn er konventionelt
	 * altid String
	 */
	@Override
	public String toString() {
		String aString = "";
		long iLong;
		iLong = this.cprnr / 10000;
		if (iLong < 100000)
			aString += "0";
		aString += Long.toString(iLong);
		aString += "-";
		iLong = this.cprnr % 10000;
		if (iLong < 1000)
			aString += "0";
		if (iLong < 100)
			aString += "0";
		if (iLong < 10)
			aString += "0";
		aString += Long.toString(iLong);
		return aString;
	}

	/**
	 * Main metode til test af Cprnr alene dvs metoder uden sammenhæng til
	 * anvendelse.
	 * 
	 * @param parms
	 */
	public static void main(String[] args) {
		System.out.println("Indtast cpr: ");
		long cpr = MyInput.readLong();
		Cprnr cprnr = new Cprnr(cpr);
		System.out.println("Cpr som long: " + cprnr.getCprnr());
		System.out.print("Cpr: " + cprnr);
		if (cprnr.checkCprnr())
			System.out.println(" gyldigt.");
		else
			System.out.println(" ugyldigt.");
	}
}

Vis et eksempel med oprettelse af en række samtidigt eksisterende cprnr, der checkes og udskrives.

Access Modifiers

Private
Kun adgang for klassens egne metoder.
Protected
Adgang gennem nedarvning, dvs fra sub-klasser. Endvidere fra klasser i samme pakke.
Public
Adgang til egenskaber og metoder for alle.
Figur 5.4. Diagram over adgang til variable og metoder
Diagram over adgang til variable og metoder