Klassenverbindungen

satinez

Mitglied
ciao!

Habe einige Fragen zu meinem (Programm)

Ich habe hier die Klasse CPerson
Java:
package code;
public class CPerson {

	// Das f vor einer Variable steht für Field
	private String fName;
	private double fIn;
	private double fOut;
	private double fMustTime;

	public CPerson(String name, double i, double o, double m) 
	{
		fName = name;
		fIn = i;
		fOut = o;
		fMustTime = m;
	}

	// Arbeitsbeginn Wert holen
	public double getInTime() {
		// System.out.println("getInTime");
		return fIn;
	}

	// Arbeitsende Wert holen
	public double getOutTime() {
		// System.out.println("getOutTime");
		return fOut;
	}

	// Die Soll Stunden holen
	public double getMustTime() {
		// System.out.println("getMustTime");
		return fMustTime;
	}

	// Den Namen holen
	public String getName() {
		// System.out.println("getName");
		return fName;
	}

	// Hole und berechne die effektive Arbeitszeit
	public double getWorked() {
		// System.out.println("getWorked");
		if (fOut < fIn) {
			return 99;
		} else {
			return fOut - fIn - 1;
		}

	}

	// Setter Methoden

	// Name aendern
	public void setName(String userName) {
		fName = userName;
	}

	// Beginn der arbeitszeit ändern
	public void setInTime(double intime) {
		fIn = intime;
	}

	// Ende der Arbeitszeit ändern
	public void setOutTime(double outtime) {
		fOut = outtime;
	}

	// Soll Stunden ändern
	public void setMustTime(double musttime) {
		fMustTime = musttime;
	}

}

Dann habe ich eine Klasse PersonManager

Java:
package code;
import java.util.ArrayList;

public class PersonManager {

	public ArrayList<CPerson> fPersons = new ArrayList<CPerson>();

	// Einzelne Personen hinzufuegen
	public void addPerson(CPerson i) {
		fPersons.add(i);
	}

	// Einzelne Personen loeschen
	public void removePerson(CPerson p) {
		fPersons.remove(p);
	}

	// Zaehlt wieviele Personen im Array sind
	public int getPersonCount() {
		return fPersons.size();
	}

	// Methode um der aktuellen Person einen Wert im Array abzufragen
	public CPerson getPerson(int index) {

		return fPersons.get(index);

	}

	public void addPerson(int i) {
		// TODO Auto-generated method stub
		
	}

}

Und eine Klasse PersonTest mit junit

Java:
package code;
import junit.framework.*;

public class PersonTest extends TestCase {

	public void testAddPerson() {
		System.out.print("Methode - testAddPerson: ");

		PersonManager pm = new PersonManager();

		// Eine Person hinzufuegen
		pm.addPerson(new CPerson("Petra", 8.0, 17.0, 9.0));

		// Ueberprueft wieviele Personen im Array sind
		assertEquals(1, pm.getPersonCount());

		// Ausgabe von Personen im Array
		int personcount = pm.getPersonCount();

		switch (personcount) {
		case 0:
			System.out.print("Nichts vorhanden!");
			break;
		case 1:
			System.out.print(personcount + " Person im Array");
			break;
		default:
			System.out.print(personcount + " Personen im Array");
		}

	}

	public void testRemovePerson() {

		PersonManager pm = new PersonManager();
		CPerson p = new CPerson("Stefan", 8.0, 17.0, 9.0);

		// Eine Person hinzufuegen
		pm.addPerson(p);

		// Person entfernen
		pm.removePerson(p);

		// Wenn der Remove geklappt hat
		// konnte er die Person entfernen
		// also wird eine 0 erwartet! Da das Array

		assertEquals(0, pm.getPersonCount());

		System.out.println("\n" + "Methode - testRemovePerson: "
				+ pm.getPersonCount() + " Personen im Array");
	}

	

}

Dann habe ich noch eine Klasse CTimeCalc

Java:
package code;
public class CTimeCalc {

	

	public void CalcMustTime() 
	{
	
	}

	
} // END OF CLASS CTIMECALC

Jetzt möchte ich gerne in der Klasse PersonTest eine Person erstellen mit den gewünschten Parametern, und CTimeCalc soll dann eine Berechnung starten.

Wie kann ich das bewerkstelligen?
Also die Klasse CTimeCalc soll nur für die Berechnung da sein.
Ich weiss das ich die Klassen irgendwie verbinden muss, aber ich finde keine Hilfe wie ich das machen kann. Muss ich erben?




greet;s satinez
 

Marco13

Top Contributor
Nee, nicht erben.

Du musst die Person entweder direkt der Methode aus CTimeCalc übergeben....
Java:
public class CTimeCalc {
    public static void calcMustTime(CPerson person) 
    {
       person.bla();
       person.blubb();
    }
}

// Aufruf:
CPerson person = new CPerson("Petra", 8.0, 17.0, 9.0)
CTimeCalc.calcMustTime(person);

oder im Konstruktor:

Java:
public class CTimeCalc 
{
    private CPerson person;
    public CTimeCalc(CPerson person)
    {
        this.person = person;
    }
    public void calcMustTime() 
    {
       person.bla();
       person.blubb();
    }
}

// Aufruf:
CPerson person = new CPerson("Petra", 8.0, 17.0, 9.0)
CTimeCalc c = new CTimeCalc(person);
c.calcMustTime();
 

satinez

Mitglied
Danke für die Antwort.

@ARadauer: Warum sollte man dies so nicht machen?


Das Problem das ich jetzt habe, ist ; die Klasse PersonManager wird ja nicht mehr benötigt.

Ich möchte aber das alle Personen die erstellt werden, in den PersonManager gelangen.

Und die Klasse CTimeCalc holt sie dann aus dem PersonManager.
Oder ist dieser Ansatz falsch?

Später soll es eine Art Zeiterfassung geben.



greet;s satinez
 
J

JohannisderKaeufer

Gast
Das C sollte man aus Gründen der konvention weglassen. Es ist unüblich.
Klassen Beginnen mit einem Großbuchstaben.
KONSTANTEN schreibt man so.
Und vor ein Field schreibt man auch kein f. Man beginnt locale Variablen mit einem kleinBuchstaben.

Es liest sich einfach leichter. Ansonsten dauert es nicht lang und man liest sowas
Java:
public static final String publicStaticFinalStringKONSTANTE = "Text";
Codevervollständigung die eine Entwicklungsumgebung bereitstellen kann, müßten mit dem C oft 2 Buchstaben angegeben werden um eine Auswahl zu bekommen.


Einer Managerklasse kann man auch die Objekterzeugung überlassen. Eine Methode könnte so aussehen.
Java:
public class PersonManager{
  private List<Person> people = new ArrayList<Person>();
  public Person createPerson(String name, double in , double out, double mustTime){
    Person person = new Person(name, in, out, mustTime);
    people.add(person);
    return person;
  }
}

Um zu verhindern, daß man direkt new Person(...); aufruft und so eine Person erstellt, die nicht in der Manager Klasse gelistet ist muß man etwas mehr investieren.
 

Neue Themen


Oben