Nochmal Frage zu Vererbung Interfaces etc.

Status
Nicht offen für weitere Antworten.
T

TheMole

Gast
Hallo,
ich muss mich nochmal melden, wenn ich das im alten Thread gestellt hätte, wäre es vielleicht untergegangen und es wäre wichtig für mich. Daher wäre ich dankbar wenn sich mal jemand melden könnte und kurz seinen kompeteten Senf dazu gibt: Zuerst muss ich ein bisschen viel Code posten:

http://www.java-forum.org/de/topic58433_frage-interface-guter-programmierstil.html


und die Fragen sind auch konkret:

- Ist es sinnvoll, Die zustäzlichen Methoden der Klassen ElementDataImplxxx auch in das interface zu nehmen, auch
wenn die nicht von allen erbenden Klassen gebraucht werden?

- Ist es möglich eine einzige View für alle 3 Modelklassen zu definieren, anstatt für jede Modelklasse eine eigene View (für die Darstellung werden ja JLabels verwendet, davon werden in einer View graphics methoden benötigt, insgesamt sind die Views , auch wenn alle gemeinsame Daten haben, sehr unterschiedlich, so dass hier in einer ViewKlasse wohl viel Code nötige wäre...?)


- Allgemein: Wie ist dieser Ansatz, was kann man besser machen ?


Bitte es wäre sehr wichtig, für sinnvolle Antworten überweise ich eine Spende für das Forum ;)

Code:
package mvc;

import java.awt.Graphics;

import javax.swing.JLabel;

/**
 * 
 * interface mit gemeinsamen methoden für die Klassen ElementDataImplxxxx
 *
 */

public interface ElementData {
	
	void setA(int a);
	int getA();
	
	void setB(int b);
	int getB();
	
	void setC(int c);
	int getC();
	
	void setD();
	int getD();	

}

/**
 * 
 * abstrakte Oberklasse für gemeinsame Felder
 *
 */

public abstract class ElementDataImpl implements ElementData {	

	int a, b, c, d;
	
	public ElementDataImpl(int a, int b, int c, int d) {		
		this.a = a;
		this.b = b;
		this.c = c;
		this.d = d;
	}
	
	public int getA() {	
		return 0;
	}

	public int getB() {	
		return 0;
	}

	public int getC() {	
		return 0;
	}

	public int getD() {	
		return 0;
	}

	public void setA(int a) {}

	public void setB(int b) {}

	public void setC(int c) {}

	public void setD() {}	
}

/**
 * 
 * Datenhalter Klassen
 *
 */

public class ElementDataImplExtended1 extends ElementDataImpl {
	
	private String additionalField1;	
	
	public ElementDataImplExtended1(int a, int b, int c, int d, String newField) {
		super(a,b,c,d);
		setAdditionalField1(newField);
	}

	public String getAdditionalField1() {
		return additionalField1;
	}

	public void setAdditionalField1(String additionalField1) {
		this.additionalField1 = additionalField1;
	}	
}

public class ElementDataImplExtended2 extends ElementDataImpl {
	
	private String additionalField1;
	private boolean additionalField2;
	
	public ElementDataImplExtended2(int a, int b, int c, int d, String newField, boolean newValue) {
		super(a,b,c,d);
		setAdditionalField1(additionalField1);
		setAdditionalField2(newValue);
	}

	public String getAdditionalField1() {
		return additionalField1;
	}

	public void setAdditionalField1(String additionalField1) {
		this.additionalField1 = additionalField1;
	}

	public boolean isAdditionalField2() {
		return additionalField2;
	}

	public void setAdditionalField2(boolean additionalField2) {
		this.additionalField2 = additionalField2;
	}	
}


public class ElementDataImplExtended3 extends ElementDataImpl {
	
	
	private byte[] newField;
	
	public ElementDataImplExtended3 (int a, int b, int c, int d, byte[] newField) {
		super(a,b,c,d);
		setNewField(newField);
		
	}

	public byte[] getNewField() {
		return newField;
	}

	public void setNewField(byte[] newField) {
		this.newField = newField;
	}
}

/**
 * 
 * View Klassen
 *
 */

public class ElementDataImplExtended1View extends JLabel {
	
	private ElementDataImplExtended1 data;
	
	public ElementDataImplExtended1View(ElementDataImplExtended1 data){
		this.data = data;		
	}

	public ElementData getData() {
		return data;
	}

	public void setData(ElementDataImplExtended1 data) {
		this.data = data;
	}	
	
	/**
	 * additional code
	 */
	
	public void paintComponent(Graphics g){
		//some action
	}
	
}


public class ElementDataImplExtended2View extends JLabel {
	
	private ElementDataImplExtended2 data;
	private JLabel otherLabel = new JLabel();
	
	public ElementDataImplExtended2View(ElementDataImplExtended2 data){
		this.data = data;
		//some actions
	}

	public ElementData getData() {
		return data;
	}

	public void setData(ElementDataImplExtended2 data) {
		this.data = data;
	}	
	
}

public class ElementDataImplExtended3View extends JLabel {
	
	private ElementDataImplExtended3 data;
	
	public ElementDataImplExtended3View(ElementDataImplExtended3 data){
		this.data = data;	
		
		//to something with the data
	}

	public ElementData getData() {
		return data;
	}

	public void setData(ElementDataImplExtended3 data) {
		this.data = data;
	}	
	
}
 

André Uhres

Top Contributor
> - Ist es sinnvoll, Die zustäzlichen Methoden der Klassen ElementDataImplxxx auch in das interface zu nehmen, auch
> wenn die nicht von allen erbenden Klassen gebraucht werden?
Ich würde dann wohl eher ein zweites Interface ElementData2 machen, das vom ersten erbt.

> - Ist es möglich eine einzige View für alle 3 Modelklassen zu definieren, anstatt für jede Modelklasse eine eigene View
Ein Model kann mehrere Views haben, aber nicht umgekehrt :wink:
 
T

TheMole

Gast
Ok, Danke. Das heißt also dass das im Wesentlichen so in Ordnung ist ?

Was spricht gegen einen solchen Ansatz, der nun genau eine View für mehrere Models hat ?

Code:
class BusinessAction {
	
	ElementDataImplExtended1 dataModel1 = new ElementDataImplExtended1(1,2,3,4,"Typ 1");
	ElementDataImplExtended2 dataModel2 = new ElementDataImplExtended2(1,2,3,4,"Typ 2");
	ElementDataImplExtended3 dataModel3 = new ElementDataImplExtended3(1,2,3,4,"Typ 3");
}

public class OneViewForDifferentModels extends JPanel
{
	
	JLabel viewingLabel;
	ElementData data;
	
	public OneViewForDifferentModels(ElementData data) {
	
		this.data = data;
		
		if(data.getType.equals(TYPE_1)){
			setViewForType1();
		}
		else if (data.getType.equals(TYPE_2)){
			setViewForType1();
		}
		//...
		
	}
	
	public void setViewForType1() {
		viewingLabel = new JLabel();
		//....
		
		//special operations
		this.add(viewingLabel);
	}
	
	public void setViewForType2() {
		viewingLabel = new JLabel() {
			
			public void paintComponent(Graphics g){
				//...
			}
			
		};
		
	}
}
 
G

Guest

Gast
Hm, ich glaub jetzt war ich ein bisschen falsch. Das ganze ist ja nur in einer Klasse statt in mehreren gesteuert, aber trotzdem werden utnerschiedliche Views in Abhängigkeit des Modesl erzeugt ???:L
 

Marco13

Top Contributor
Die letzte Frage würde mich jetzt auch interessieren, speziell wegen des Kommentars

André Uhres hat gesagt.:
Ein Model kann mehrere Views haben, aber nicht umgekehrt

Eine View KÖNNTE doch auch meherer Models haben ???:L Oder anders gefragt: Wenn man die von dir genannte Bedingung erfüllen würde, indem man nicht
Code:
View { Model1, Model2, Model3  }
sondern
Code:
CompoundModel { Model1, Model2, Model3 }
View { CompoundModel }
schreibt, wäre das doch erstmal nur "Kosmektik"!? Ich würde spontan keinen direkten Vor- oder Nachteil bei einer der beiden Varianten sehen (abgesehen davon, dass beim CompoundModel u.U. mehr Durchreich-Arbeit zu tun ist)
[/quote]
 

André Uhres

Top Contributor
Sowas ist vielleicht irgendwie machbar. Vom Gefühl her widerstebt mir aber ein Design, bei dem eine View gleichzeitig mehrere Models hat.
Dass man das mal Model austauschen kann, ist verständlich.
Aber gleichzeitig mehrere Model für ein View, da seh ich wirklich keinen Sinn dahinter.
 

Marco13

Top Contributor
Hm. Vielleicht hätte ich einen wichtigen Punkt erwähnen sollen: Ich bin davon ausgegangen, dass die Models "disjunkt" sind - also, dass es NICHT mehrere Models gibt, die (sinngemäß) auf die gleiche Component in der View "abgebildet" werden.
 
T

TheMOle

Gast
Ok aber meine Frage zu dem letzten Codeabschnitt ist immer noch nicht beantwortet.
Ein Model, verschiedene Views, die aber alle aus einer Klasse in Anbhägigkeit des Models (Konstruktor) gesetzt werden.
Ist das so in Ordnung oder nicht. so lange dies nicht ein gravierend schlec htes desgin ist, bin ich zufrieden. bitte nochmal um antwort. danke!
 

HLX

Top Contributor
Marco13 hat gesagt.:
Code:
View { Model1, Model2, Model3  }
sondern
Code:
CompoundModel { Model1, Model2, Model3 }
View { CompoundModel }
schreibt, wäre das doch erstmal nur "Kosmektik"!? Ich würde spontan keinen direkten Vor- oder Nachteil bei einer der beiden Varianten sehen (abgesehen davon, dass beim CompoundModel u.U. mehr Durchreich-Arbeit zu tun ist)
[/quote]

Also zweiteres ist schon wesentlich besser, da hier in der View keine Unterscheidung zwischen den 3 Models durchgeführt werden muss. Die Unterscheidung ist Aufgabe des Controllers. Im Beispiel von TheMole ist diese Unterscheidung im Konstruktor implementiert, wodurch Controller und GUI stark vermischt werden.

Mit einem CompoundModel jedoch, weist man dem View einmal die Komponente zu und kann sie dann später im Controller modifizieren. Sämliche Modifikationsmöglichkeiten sollten dabei mindestens als abstrakte Methode im CompoundModel stehen. Das beste existierende Beispiel für den "CompoundModel-Ansatz" sind TableModel und JTable, obwohl ich eigentlich das Swing-TableModel noch zur GUI zähle - aber das Prinzip ist das gleiche.
 

HLX

Top Contributor
TheMOle hat gesagt.:
Ok aber meine Frage zu dem letzten Codeabschnitt ist immer noch nicht beantwortet.
Ein Model, verschiedene Views, die aber alle aus einer Klasse in Anbhägigkeit des Models (Konstruktor) gesetzt werden.
Ist das so in Ordnung oder nicht. so lange dies nicht ein gravierend schlec htes desgin ist, bin ich zufrieden. bitte nochmal um antwort. danke!

Geschmackssache. Im Sinne von MVC halte ich es für unschön, das im Konstruktor zu machen. S.o.
 
G

Gast

Gast
hier kann man das adapter pattern anwenden, und die models passend übersetzen..
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
K Muss ich Eclipse und Java nochmal neu installieren? Allgemeine Java-Themen 10
M nochmal was mit generischen Containern Allgemeine Java-Themen 4
M Nochmal I-Frame zu Image Allgemeine Java-Themen 4
P Webstart nochmal Allgemeine Java-Themen 7
M Bereits imlplementierte Interfaces nochmal bei "impleme Allgemeine Java-Themen 10
P Nochmal RandomAccessFile Allgemeine Java-Themen 6
E Nochmal komplexen String matchen und splitten Allgemeine Java-Themen 2
I Nochmal ASCII-Code Allgemeine Java-Themen 9
J Thread nochmal starten Allgemeine Java-Themen 6
N Nochmal Clipboard. cut copy paste Allgemeine Java-Themen 2
M Nochmal ne Regexfrage Allgemeine Java-Themen 2
U nochmal Plattenplatz... Allgemeine Java-Themen 2
KonradN Mal eine Frage zu Binary Serialization Allgemeine Java-Themen 15
8u3631984 Frage zu Java Streams min / max Allgemeine Java-Themen 17
8u3631984 Frage Performance bei Linked List und Array List Allgemeine Java-Themen 5
H Frage regex greater than less than Allgemeine Java-Themen 7
berserkerdq2 Frage zu IntelliJ und JavaFX Allgemeine Java-Themen 1
W Timer Konzept-Frage Allgemeine Java-Themen 16
T Eine Frage des Designs Allgemeine Java-Themen 2
C Frage zu eigenem TableCellRenderer Allgemeine Java-Themen 11
C Programmvorstellung & Frage zum Thema Geschäftsform Allgemeine Java-Themen 51
J Frage zu System.getproperties. Allgemeine Java-Themen 60
molat100 wie kann man die Frage beantworten Allgemeine Java-Themen 1
pkm Frage zur Präzision von Calendar.WEEK_OF_YEAR Allgemeine Java-Themen 12
J Eine Frage zu den Threads und Task Allgemeine Java-Themen 1
pkm Frage nach eventuellem syntaktischen Zucker bei der Konkatenation von ArrayLists Allgemeine Java-Themen 4
M Frage-Antwortspiel wie Wer wird Millionär Allgemeine Java-Themen 1
F Frage zu System.in Allgemeine Java-Themen 3
marcooooo Frage zum Beispiel im Anhang Allgemeine Java-Themen 16
T Meine Frage lautet wie ich 2 CSV Dateien miteinander in Java verbinde und Spalten die zueinander gehören durch den gleichen Key zusammen ausgebe? Allgemeine Java-Themen 5
S Noch eine Design-Frage zu Setter Allgemeine Java-Themen 6
B For-Loop Frage Allgemeine Java-Themen 21
L Java frage Allgemeine Java-Themen 3
bueseb84 Frage zu Mock und UpperBound Allgemeine Java-Themen 2
M Frage zum Konstruktor Allgemeine Java-Themen 2
W Best Practice Frage zur Umsetzung MVC Allgemeine Java-Themen 9
P String-Verschlüsselung - Frage zur Sicherheit Allgemeine Java-Themen 21
B Frage zu Unit-Tests Allgemeine Java-Themen 6
T Allgemeine Frage: GUI für 3D-Visualisierung Allgemeine Java-Themen 5
R Allgemeine Frage zu RMI bei MVC Allgemeine Java-Themen 2
O Frage zum Runtimeverhalten von Java ... Allgemeine Java-Themen 2
H Rundreise frage (Algorithmus) Allgemeine Java-Themen 18
B Generelle Frage bei einer Webanwendung / Reduzierung von DB Abfragen Allgemeine Java-Themen 1
D Frage zu Vererbung Allgemeine Java-Themen 5
J Frage zu regulärem Ausdruck Allgemeine Java-Themen 2
M Allgemeine Frage: Wie lernt man Java / Programmieren von Grund auf? Allgemeine Java-Themen 7
rentasad Design-Frage - Interfaces, Klassen, statische Methoden Allgemeine Java-Themen 3
S Frage zur JLS Allgemeine Java-Themen 0
J Verständnis Frage zur Instanz, Objekte, Instanzierung, Referenz Allgemeine Java-Themen 14
A Methoden Allgemeine Java Frage Allgemeine Java-Themen 3
E String Frage Allgemeine Java-Themen 9
I bin neu bei GitHub, Frage zur Sicherheit Allgemeine Java-Themen 14
C J2V8 NodeJs Java Bride Problem und Frage!?!? Allgemeine Java-Themen 1
C KeyListener Frage Allgemeine Java-Themen 3
T Frage zu UML in Java programmieren Allgemeine Java-Themen 1
R Konstanten initialisieren - FRAGE Allgemeine Java-Themen 3
MTJ004 FTP Frage zu FTP Speicherung Java-Android-FTP Allgemeine Java-Themen 5
J Frage zum Entwurf / json-Datenmodell Allgemeine Java-Themen 8
A Frage zu meinem Code Allgemeine Java-Themen 2
RalleYTN Classpath Nur ne kleine Frage zur MANIFEST.MF Allgemeine Java-Themen 4
T Frage zu Access Modifiers Allgemeine Java-Themen 6
W Input/Output Frage zu pdfbox und FileUtils Allgemeine Java-Themen 2
O Frage zur Implementierungsweise Allgemeine Java-Themen 4
B Frage zu Bitshift Allgemeine Java-Themen 3
J Java Zufallsgenerator (6 aus 49) Frage Allgemeine Java-Themen 7
L Frage zu RIA und GWT Allgemeine Java-Themen 0
P Concurrency Frage Allgemeine Java-Themen 8
M Frage zu Enumerations Allgemeine Java-Themen 2
F Unlimited Strength Policy. Frage Verbreitung der Anwendung Allgemeine Java-Themen 1
F Frage zur Library JTS Allgemeine Java-Themen 5
S Java Design Frage Allgemeine Java-Themen 10
E Reflection? Frage Allgemeine Java-Themen 4
C FileInputStream frage Allgemeine Java-Themen 6
G Polymorphie Programmdesign Frage Allgemeine Java-Themen 20
Uzi21 Frage zu NetBeans ( Console) Allgemeine Java-Themen 11
D Classpath Frage zum Java Resource Loading Allgemeine Java-Themen 2
G Frage zu JPA Allgemeine Java-Themen 1
S Methoden Frage Allgemeine Java-Themen 2
P MVC - Frage zu Model Allgemeine Java-Themen 4
K Frage zu Locks Allgemeine Java-Themen 1
S Frage zu abstract Allgemeine Java-Themen 5
M ArrayList<String> Frage Allgemeine Java-Themen 7
M OOP Design Frage Allgemeine Java-Themen 2
N Frage zur while-Schleife Allgemeine Java-Themen 18
T Best Practice Auslesen von Zeichenketten (Frage, Antworten, usw) Allgemeine Java-Themen 4
C Eine Frage zur Bearbeitungszeit Allgemeine Java-Themen 8
H Frage wegen Heap-Speicher Allgemeine Java-Themen 2
T Garbage Collection Frage Allgemeine Java-Themen 15
P Kurze Frage: aus einer File die Zeilenanzahl auslesen Allgemeine Java-Themen 9
D Frage zu Java und Umlauten / charsets Allgemeine Java-Themen 2
B Frage zu Java und OpenGL? Allgemeine Java-Themen 3
Q Kapselung Allgemeine Design- Frage Allgemeine Java-Themen 8
A eine test thread.join() frage Allgemeine Java-Themen 2
DStrohma LayoutManager Frage zum GridBagLayout Allgemeine Java-Themen 4
F Frage zu Regex möglich Allgemeine Java-Themen 4
H XML-File mit Java erzeugt Frage Allgemeine Java-Themen 10
D Frage und Antwort Programm, Problem bei Methodenaufruf Allgemeine Java-Themen 3
J NetBeans Frage bezüglich der Scanner-Klasse Allgemeine Java-Themen 6
H Java Vector Frage Allgemeine Java-Themen 9
W Frage... Allgemeine Java-Themen 29

Ähnliche Java Themen

Neue Themen


Oben