# boolean bei Setter und getter methoden



## nata (9. Dez 2010)

Hallo Leute,

ich habe klasse registrierte uster wo ich als lunde und admin als boolean werte abspeichere und habe eine frage ob es so korrekt wäre

```
public class RegUser {
	
	private boolean kunde;
	private boolean admin;
	
	public void setKunde(boolean kunde){
		this.kunde = kunde;
	}
	
	public void setAdmin(boolean admin){
		this.admin = admin;
	}
	
	public boolean isAdmin(){
		return true;
	}
	

	public boolean isKunde(){
		return true;
	}
}
```
es ist kleine ausschnitt. natürlich ist da drinnen namen, adressen ...

ich habe noch eine frage, es ist eine gruppenarbeit wo es um eine Alpenreise geht und damit man reise bucht muss man registriert sein und ich denke dass registrirte user machen wir als abstrakte klasse und admin und kunde als unterklasse.
was denkt ihr? wie ist besser?

danke vielmals
Nata


----------



## tfa (9. Dez 2010)

Sieht doch gut aus. Aber warum geben isAdmin() und isKunde() immer true zurück?


----------



## nrg (9. Dez 2010)

hat kunde und admin eine und/oder oder eine oder beziehung? wenn jemand sowohl admin als auch kunde sein kann, macht es so sinn. Wenn der RegUser automatisch Kunde ist, sobald isAdmin false liefert, kannst du dir einen davon sparen. Hoffe das ist verständlich .

Registrierte User könnte ein Interface oder eine Klasse sein. Auf's Erste hört sich da also dein Vorhaben für mich plausibel an


----------



## nata (9. Dez 2010)

also doch keine Abstrakte klasse. Ich wollte damit bei kunde und admin boolean wert vermeiden wo ich nicht weiß wie ich isAdmin und isKunde implementieren soll


----------



## nata (9. Dez 2010)

bei mir schaut der aktuelle code so aus. überprüfungen habe ich gelöscht, damit der code übersichtlicher ist. ich komme nicht dazu wie ich isKunde und isAdmin implementiere. kann mir jemand tipp geben?brauche ich noch ein atributt dazu?


```
import java.util.Date;

public class RegistrierterUser {

	private String vorname;
	private String nachname;
	private String mail;
	private String svnr;
	private boolean kunde = true;
	private boolean admin = true;
	private Date gebDat;

	public RegistrierterUser(String vorname, String nachname, String mail,
			String svnr, boolean kunde, boolean admin, Date gebdat) {
		setAdmin(admin);
		setGebDat(gebdat);
		setKunde(kunde);
		setMail(mail);
		setNachname(nachname);
		setSvnr(svnr);
		setVorname(vorname);
	}
	
	public void setVorname(String vorname) {
		this.vorname = vorname;
		
	}
	
	public void setNachname(String nachname) {
		
		this.nachname = nachname;
		
	}
	
	
	public void setMail(String mail) {
		
		this.mail = mail;
		
	}
	
	public void setSvnr(String svnr){
		this.svnr = svnr;
		
	}
	
	public String getSvnr(){
		return svnr;
	}
	
	public void setGebDat(Date gebDat) {
		
		this.gebDat = gebDat;
	}
	
	public String getVorname(){
		return vorname;
	}
	
	public String getNachname(){
		return nachname;
	}
	
	public String getMail(){
		return mail;
	}
	
	public Date getGebDat(){
		return gebDat;
	}
	
	public void setKunde(boolean kunde){
		this.kunde = kunde;
	}
	
	public void setAdmin(boolean admin){
		this.admin = admin;
	}
	
	public boolean isKunde(){

		return true;
	}
	
	public boolean isAdmin(){
		return true;
	}
	
	
	public String toString(){
		if(isAdmin()){
			return "Admin mit " +   vorname + " " + nachname + " " + mail +" " + svnr + " "+ gebDat;
			
		}
		return "Kunde mit " + vorname + " " + nachname + " " + mail +" " + svnr + " "+ gebDat;
		
	}

}
```

danke vielmals
nata


----------



## Andi_CH (9. Dez 2010)

Versuchst doch einfach mal so ???

```
public boolean isAdmin(){
        return admin;
}
```


----------



## nata (9. Dez 2010)

aaaaa ja
danke vielmals


----------



## nrg (9. Dez 2010)

das hat dir doch tfa schon ganz am anfang gesagt . musst die antworten schon lesen


----------



## nata (9. Dez 2010)

ich weiß, wenn er das nicht gesagt hätte wurde mir erst später auffallen, dass ich fehler hatte. ich wusste nicht wie ich das anderes implementieren sollte. habe gedacht, dass ich noch eine zusätzliche atributt für admin brauche

ich bin euch sehr sehr dankbar
ihr seid alle Spitzen
nata


----------



## tfa (9. Dez 2010)

Kann denn ein RegistrierterUser gleichzeitig Admin und Kunde sein?
Falls nicht, sollte man das Design eventuell noch umbauen, z.B. durch ein Attribut, das die User-Rolle angibt.


----------



## nata (9. Dez 2010)

ja kann sein aber kunde kann nicht admin sein. soll ich trotzdem umbauen?

was meinst du mit *durch ein Attribut, das die User-Rolle angibt*.?


----------



## tfa (9. Dez 2010)

Zum Beispiel so mit einem enum:

```
public enum Rolle { KUNDE, ADMIN }

------

public class RegistrierterUser {
 
    private String vorname;
    private String nachname;
    private String mail;
    private String svnr;
    private Rolle rolle = Rolle.KUNDE;

   [...]

    public boolean isKunde() {
         return this.rolle == Rolle.KUNDE;
    }

    public boolean isAdmin() {
         return this.rolle == Rolle.ADMIN;
    }
```
So hat jeder User immer genau eine Rolle.


----------



## nrg (9. Dez 2010)

häää?? das ist doch ein widerspruch in sich . wenn kunde nicht admin sein kann, dann kann auch admin nicht kunde sein.
Wenn es jetzt nur die 2 Zustände gibt und einer davon zwingend erforderlich ist, dann ist jeder RegUser *entweder* Kunde *oder* Admin. seh ich das richitg??

also mach einfach isKunde, boolean kunde und setKunde weg. Dann hast du nurnoch isAdmin, boolean admin und setAdmin. Wenn isAdmin dann false liefert ist er automatisch Kunde. Ansonsten ist er halt Admin 

edit: bzw s. Vorposter. Zwei Zustände lässt sich noch mit einem Boolean abbilden. Bei > 2 auf jedenfall enums nehmen.


----------



## nata (9. Dez 2010)

mein user case schaut so aus wie im anhang ist. denkt ihr immernoch, dass ich auf richtigen weg bin?


----------



## nata (9. Dez 2010)

wenn ich sagen wurde dass admin auch kunde sein kann. also admin kann auch buchen , aber kunde kann nicht admin sein. wie sollte ich vorgehen?

danke für euren tollen Tipp


----------



## Andi_CH (9. Dez 2010)

Ich hab den Use Case (hat nichts mit user zu tun) mal angeschaut.

Ein Admin ist kein Kunde und umgekehrt die haben keine gemeinsamen Aufgaben zu erledigen.

Wenn der Mensch XY der Admin ist auch noch Kunde ist (Der Sysdamin kann ja möglicherweise im eigenen Geschäft einkaufen) wechselt er die Rolle und loggt sich mal als Kunde und mal als Admin ein.
(Actors sind nicht Menschen, sondern Aufgaben, die z.B. von Menschen wargenommen werden)

Ein "Kunde" ist auch ein "Registrierter User" und dieser ist ein "User" - das zeigen die Vererbungspfeile
Ein Admin ist weder noch - er ist nicht mal user, sondern eine ganz eigene Klasse - hm, ich würde das allerdings schon so implementieren, dass der Admin auch ein User ist - die Gemeinsamkeiten sind schon vorhanden (Name, Login, Passwort .....), aber er ist kein Kunde

Im Code würde das heissen, dass du sicher nur eine Statusvariable hast:

z.B. userStatus und die kann den (enum) Wert "Kunde" oder "Admin" annehmen.
Das wäre auch mit einem boolean (z.B. isAdmin) möglich, ist aber nicht optimal, falls das mal erweitert würde
Ein enum ist besser, denn da lassen sich jederzeit zusätzliche Werte anfügen. (Vielleicht "VIP-Kunde", "unerwünschter Kunde"  oder ähnliches)

Möglich wäre auch für Kunde und Admin unabhängige Klassen zu schreiben, die aber von "user" bzw "Registrierter User" abgeleitet sind

Alles unklar? Frag einfach wieder - vielleicht habe ich auch kleine Überlegungsfehler drin - ist ja immer irgendwie ein Schnellschuss wenn man hier antwortet ;-)


----------



## Andi_CH (9. Dez 2010)

Hm - Korrektur: (ein Kollege hat mir gerade über die Schulter geschaut ;-) )

Ein Admin ist nach diesem use Cas auch kein User. Ein User kann "suchen", ein Admin nicht.

Also keine Gemeinsamkeiten!


----------



## nata (9. Dez 2010)

du bist so toll. Ich habe mein usecase nochmal angeschaut und anscheinend haben kollgen noch was verändert. Ich werde am abend nochmal mit dennen besprächen und nochmal posten

danke danke vielmals


----------



## nata (9. Dez 2010)

das mit kunde und user habe nicht ganz gut verstanden, weil es meine fremde sprache ist und brauche ich wirklich gut nachdenken und realisieren, aber falls ich verstehe was du meinst muss ich im stoff das durchlesen damit ich es realisiere?
Galileo Computing :: Java ist auch eine Insel (8. Auflage) – 6.4 Konstanten und Aufzählungen

falls usecase so ist wie ich oben geschickt habe, muss ich doch admin separat implementieren?


----------



## Andi_CH (9. Dez 2010)

Dieses Diagram ist noch meilenweit davon entfern ist, implementiert werden zu können!

Ausgehend von diesem Diagramm müssen erst einmal Klassendiagramme gezeichnet werden und ich habe noch NIE ein Klassendiagramm gesehen in dem einer der Actors als Klasse aufgetaucht ist - ich habe auch noch nie eines gesehen in dem die Actors irgendwie eine Beziehung zueinander hatten.

Was ich damit sagen will: Deine Kollegen haben einfach ein anderes Verständnis von UML Diagrammen als ich, also musst du die fragen.

Aus diesem Grund kann niemand sagen was du implementieren musst und was nicht.

-- So zum coden.

Wenn wir als mal die Denkweise deiner Kollegen annehmen und die Acotrs als Klassen sehen brauch ich gar keinen Aufzählungstyp und auch kein Flag - ich brauche nur Klassen.


```
class User {}

class RegistrierterUser extends User {}

class Kunde extends RegistrierterUser {}

class Admin{}
```

und wenn sich nun jemand einloggt, weiss das System um wen es sich handelt und instanziert das entsprechende Objekt ...


----------



## Andi_CH (9. Dez 2010)

nata hat gesagt.:


> wenn ich sagen wurde dass admin auch kunde sein kann. also admin kann auch buchen , aber kunde kann nicht admin sein. wie sollte ich vorgehen?
> 
> danke für euren tollen Tipp



Also nochmals:
Das einzige was der *Admin* kann ist "Tour anlegen" - mehr kann der nicht!
Er darf also weder User noch sonst was als Vaterklasse haben.

Der *User* kann suchen und sonst nichts

Der *RegistrierteUser* kann buchen, anschauen und account bearbeiten - und natürlich suchen, weil er das vom user erbt.

Der *Kunde* kann eine Tour reservieren und alles was der RegistrierteUser kann.


----------



## nata (10. Dez 2010)

@ Andi_CH : Aus diesem Grund kann niemand sagen was du implementieren musst und was nicht.

ich studiere noch und habe sehr geringe erfahrung. also du kannst mir nichts falsches sagen als ich mache


----------

