boolean bei Setter und getter methoden

nata

Bekanntes Mitglied
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
Java:
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
 
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 😉
 
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 😉
 
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?

Java:
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
 
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
 
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.
 
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.?
 
Zum Beispiel so mit einem enum:
Java:
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.
 
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.
 
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
 
Zuletzt bearbeitet:
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 ;-)
 
Zuletzt bearbeitet:
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!
 
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
 
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.

Java:
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 ...
 
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.
 
@ 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 😉
 

Neue Themen


Zurück
Oben