Design Pattern für einen simple Rechenmaschine

Status
Nicht offen für weitere Antworten.

Kaffeebohne

Bekanntes Mitglied
Hallo Forenteilnehmer,

ich will einen kleine Rechnenmaschine programmieren. Ohne Lexer und großartige Beachtung der Ranges von Datentypen und nur die vier Grundrechenarten. Es geht mir nur um das/die Pattern.

Also stelle mir einmal ein Interface vor (Stragtegiepattern) das die Methode bereche, calcualte whatever hat. Dies müssen dann alle Rechenarten implementieren.

Desweitern, ich weiss aber noch nicht ob das Relevant ist, würde ich eine Abstrakte Klasse für die jeweiligen Rechenarten bauen. Also zb. abstractAdd als abstrakte Klasse mit dem implementierenten berechene. Die konkrete Klasse würde dann z.b. AddSimpleImpl heissen. Simple wegen den Ranges :)

Später könnte ich dann alles Austauschen ohne die Eigentlichen Rechenablauf zu ändern.

Was haltet ihr davon?
 

byte

Top Contributor
Mal abgesehen davon, dass sich die Addition seit hunderten von Jahren nicht verändert hat, klingt das ok. Abstrahieren ist selten verkehrt. ;)
 

Kaffeebohne

Bekanntes Mitglied
Hallo byto,


nur gehen ja integer nicht z.b. über 32k. Ich habe noch nicht geschaut, aber vielleicht/wahrscheinlich gibt es in JAVA auch etwas um Mathematische Operationen beliebiger genauigekeit durchzuführen.


Ne andere Frage wie würdest du das machen, wenn der Wert übergeben wird mit dem etwas gemacht werden soll. Per Konstruktor oder mit beim berechnen. Etwas wirre Formulierung deshalb ein Beispiel:

Berechenet werden soll 1+1 (der Hammer :bae: )


Code:
AddSimpleImpl add = new AddSimpleImpl(1);
System.out.println(add.berechne(1));

//Oder
AddSimpleImpl add = new AddSimpleImpl();
System.out.println(add.berechne(1,1));
 

Murray

Top Contributor
Ich würde den zweiten Weg bevorzugen: warum sollte der erste Operand Attribut der Klasse sein, während der zweite nur als Parameter einer Instanzmethode übergeben wird? Interessant wird das, wenn Du so ein AddSimpleImpl-Objekt wiederverwenden willst. Mit dem ersten Weg geht das nur dann, wenn Du zu einer Zahl nacheinander verschiedene andere addieren willst.
M.E. sollte so ein AddSimpleImpl-Objekt möglichst zustandslos sein; alle für die Berechnung notwendigen Informationen werden in dem Call mitgegeben, der auch das Ergebnis liefert.
 

Kaffeebohne

Bekanntes Mitglied
Hallo Murray,

hmm das ist eine gute Frage. Also ich dachte da man ja mit eine Zahl die ist mit der etwas passiert. Die also addiert wird. (Anmerkung an mich selbst: Hätte wohl besser dividieren als Beispiel genommen.)

Code:
alle für die Berechnung notwendigen Informationen werden in dem Call mitgegeben, der auch das Ergebnis liefert.
Was meinst du damit genau? Es werden ja nur Zahlen || Zahler[] übergeben.
 
M

math66

Gast
schonmal was von patternfever gehört? man sollte nicht für alles patterns nehmen, da dadurch oftmals ERSTMAL mehraufwand entsteht (mehr klassen etc). und bei grundrechenarten ist das sicher nicht nötig. hibts jetzt allerdings komplexe algorithmen zur berechnung von was weiss ich bildaten doer so, dann empfiehlt es sich. take out what varies...aber wie schon gesagt wurde... + * - / werden wohl bin in alle zeit gleich bleiben ;)

gruß
 

byte

Top Contributor
Kann Murray nur recht geben. Ist halt ein etwas blödes Beispiel, dass Du Dir ausgesucht hast. Nicht ohne Grund sind die arithmetischen Funktionen aus Math alles statische zustandslose Methoden.
 

Kaffeebohne

Bekanntes Mitglied
Hy math66,

jupp, auch von Antipattern. Nur will(naja muss) ich in diesem Fall zeigen wie man OO programmiert. Es soll eher als Beispiel dienen wie man Pattern und OO einsetzen kann.


@byto
Ich weiss :cool: :roll: :wink: :D



Mal davon abgesehen, was haltet ihr vom "Prinzip"? (Ich mein nicht das ich jetzt das Patternfever hab)
 

Kaffeebohne

Bekanntes Mitglied
Noch ein kleiner Zusatz,

wie sieht es aus wenn ich eine Factory zum Erzeugen der Objekte benutzen würde, da ich die Objekte zur Laufzeit erzeugen möchte?
 
M

math66

Gast
dann nimm doch was mit dateien und zeigs daran. also so:

Code:
abstract class FileReader{
    abstract String readFile(File f);

}


dann eben andere klassen, die diese methode implementieren:

Code:
class XMLFileReader extends FileReader{

     public String readFile(File f){
          //XML file auslesen und parsen oder was weiss ich
     }
}

class ZIPFileReader extends FileReader{

     public String readFile(File f){
          //ZIP file auslesen  was weiss ich
     }
}

und dann je nach endung machst du sowas:

Code:
if(f.toString().endsWith(".zip")){
        FileReader fr = new ZIPFileReader()
        String content = fr.readFile(f);
}

wäre ein beispiel. oder du machst was mit tieren. oberklasse Ente, und unterklassen GummiEnte, HolzEnde, StcokEnte und so weiter. die erben vond er abstrakten klasse duck gewisse gleiche dinge, wie swim(). aber sie unterscheiden sich im flugverhalten. also nimmst du das raus per stragedy....war mal in nem buch, weiss aber nicht mehr in welchem :-/

viele grüße
 
M

math66

Gast
hi, noch ein beispiel. man kann textfeldeingaben damit kontrollieren. so:

Code:
abstract class AbstractChecker //oder interface {
	abstract boolean checkContent(String mail);
}

class EmailChecker extends AbstractChecker{

    boolean checkContent(String mail){
		return mail.matches(".+@.+\\.[a-z]+"); 
	}
}

class MyJTextFiled extends JTextField{
	AbstractChecker a;

	public MYJTextField(AbstractChecker a){
		this.a=a;
	}

	FocusListener listener = new FocusListener() {
      public void focusGained(FocusEvent e) {
        //nix machen
      }

      public void focusLost(FocusEvent e) {
        if(a.checkContent(this.getText())){ //a ist hier ein EMailChecker
			//ok
		}else{
			this.setText("Fehler in der Eingabe!");
		}
      }

      
    };

}

class Tester{
	MyJTextField mjtf = new MyJTextField(new EMailChecker());
	//mjtf in das GUI packen und fertig

}

ist mal so schnell hingeschrieben...weiss nicht, obs gleich geht, aber so in der art

gruß
 

Kaffeebohne

Bekanntes Mitglied
Hmm,

leider lässt sich daran nix drehen. Enten wären mir auch lieber :D


btw

Ich würd ne Factory noch machen:



Code:
class FileReaderFactory {
....
	public FileReader getInstance{File f)  throws Exception{
        if(f.toString().endsWith(".zip")){
            return new ZIPFileReader();
           
        }else f(f.toString().endsWith(".xml")) {
        	return new XMLFileReader();
    	}
	} else { throw new Exception("blub")}
}
 
M

math66

Gast
gute idee....wie würde man die jetzt einsetzen? factory method hab ich noch nicht genutzt....

gruß
 

Kaffeebohne

Bekanntes Mitglied
Achso der Konstruktor muss natürlich private oder protected sein und getInstance static

Code:
FileReader fr = FileReaderFactory.getInstance(new File("xmlfile.xml"));
 
M

math66

Gast
hi, nocmal, kannste den code nochmal komplett posten, also die factotry? so wies richtig ist?

gruß und danke :lol:
 

Murray

Top Contributor
In manchen Frameworks wird der Factory-Gedanke auch noch weitergetrieben, indem man die Factory(-Instanz) wiederum indirekt über eine Factory-Methode erhält; siehe z.B.:

Code:
javax.xml.tranform.TransformerFactory transFac = javax.xml.tranform.TransformerFactory.newInstance();
javax.xml.tranform.Transformer trans = transFac.newTransformer());

Analog funktioniert das z.B. auch mit javax.xml.xpath.XPathFactory und javax.xml.xpath.XPath oder mit javax.xml.parsers.DocumentBuilderFactory und javax.xml.parsers.DocumentBuilder, wobei man im letzten Fall den DocumentBuilder eigetnlich auch wieder als eine Art Factory ansehen könnte.
 
M

math66

Gast
ich nochmal, ich dneke mal, ich habs jetzt. was sind die vorteile? ich würde sagen:

- also erstmal ist die implementierung der filereader gekapselt, man kann sie veränder, ohne jeweils eine andere klasse anfassen zu müssen

- mann kann schnell neue reader hinzufügen

- man kann collections/methoden machen, die FileReader objekte aufnehem, also mehere spezielle reader wie zip oder jar oder.... (polymorphismus)

- durch die factory ist man flexibel, was wann passiert. wenn man anstelle von XMLFileReader doch was anderesr erzeugen will, muss man das nur an einer stelle, nämlich in der factory machen. anders müsste man an jeder stelle in jeder klasse änderungen vornehmen

was noch?

grüße :)
 

Kaffeebohne

Bekanntes Mitglied
Hy math66,

also mir fällt da auch nichts mehr großartiges ein. Denke du hast alle wichtigen Punkte aufgezählt.


Wenn ich mirs so überlege ist die Factory aufjedenfall eine gute Idee für meine Rechnenmaschine.


@all

Was meint ihr was für ein Pattern könnte ich noch verwenden?
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
S Design Pattern für zwei abhängige Klassen Softwareentwicklung 8
M Visito/Besucher Design-Pattern/Strukturmuster Softwareentwicklung 4
H2SO3- design pattern: code in model classes Softwareentwicklung 5
G Design Pattern gesucht! Softwareentwicklung 4
D Design Pattern Softwareentwicklung 6
B Design Patterns und die Keywords Softwareentwicklung 22
P Zwei Fragen zum Design Softwareentwicklung 16
K Einlesen einer .dat-Datei (verschiedene Formate) | Entwicklung unter Einsatz von Design-Patterns Softwareentwicklung 0
L Design Patterns zu abstraktem Problem Softwareentwicklung 2
M Sauberes Design, Clean Code, etc. pp. Softwareentwicklung 47
G Projekte die Design by Contract verwendet haben?? Softwareentwicklung 2
C Wiki für ein Uni - High Level Design Softwareentwicklung 5
V Design Patters - Observer Softwareentwicklung 6
Jay_030 Checkstyle: Lösungsvorschläge für Design for Extension Softwareentwicklung 7
J Design Patterns in Programm hineinfließen lassen Softwareentwicklung 23
G Suche Programm für Masken Design für Pflichtenheft Softwareentwicklung 5
W Frage zu a)Innere Klassen und b)OO Design Softwareentwicklung 13
D Datenbank-Design Softwareentwicklung 3
M Datei-Typ-Design Softwareentwicklung 10
S Design-Frage: Wie viele Fassaden? Softwareentwicklung 4
G Test First <-> Design First Softwareentwicklung 6
B Haskell pattern matching in if else Anweisung umschreiben Softwareentwicklung 3
E Frage zu Dekorator-Pattern Softwareentwicklung 2
slawaweis Factory-Builder Pattern? Softwareentwicklung 6
B konfigurierbare Objekte - Singelton und Factory Pattern Softwareentwicklung 3
C Flyweight-Pattern verhält sich unerwartet Softwareentwicklung 5
U Decorator Pattern in der Java API Softwareentwicklung 6
M Proxy Pattern - Verständnisfrage Softwareentwicklung 2
0 Unklarheiten beim State Pattern Softwareentwicklung 2
N Composite pattern Softwareentwicklung 2
N Pattern Softwareentwicklung 2
L Builder Pattern Softwareentwicklung 6
1 Factory-Pattern: Bitte um Tipps zur Anwendung Softwareentwicklung 3
L Pattern Softwareentwicklung 3
J DAO Pattern bei komplexen Datenbankzugriffen Softwareentwicklung 2
M IllegalStateException - Problem mit GUI und Observer pattern Softwareentwicklung 4
G Pattern für Datenbank Anwendung Softwareentwicklung 22
A Iterato-Pattern und Innere Klassen Softwareentwicklung 9
F Unterschied Command und Strategy pattern Softwareentwicklung 4
F Wann Observer Pattern nehmen und Vorteile davon? Softwareentwicklung 5
H Frage ueber Prototype Pattern? Softwareentwicklung 2
G Warum/Wann mehrere Modells beim MVC-Pattern verwenden ? Softwareentwicklung 7
timomeinen DAO Pattern - Relationen mit DTO abbilden Softwareentwicklung 9
D Singleton pattern Softwareentwicklung 19
M decoration pattern Softwareentwicklung 2
M Plugins entwickeln für ein CMS welches unter der GPL V3 steht Softwareentwicklung 1
I Datenbankschema für Versionierung der Tabellen Softwareentwicklung 9
R Datenstruktur für einen rätselhaften Namen Softwareentwicklung 10
Rahim Post Conditions für InsertAt und remove Softwareentwicklung 1
P Thema für meine Projektarbeit die etwas mit Webautomatisierung zu tuen haben soll? Softwareentwicklung 1
H Entwurfsmuster für den Client der Rest API Softwareentwicklung 0
D Welche Technologien für App und web? Softwareentwicklung 3
Thallius oAuth2 und ClientCredentials für API sinnvoll? Softwareentwicklung 3
S Welche Programmiersprache für eine 3D-Software? Softwareentwicklung 6
N Technologie Grundlagen für eine "App" Softwareentwicklung 12
OnDemand Welches Tool für Planung Softwareentwicklung 2
B Sprache für 3D Physics Engine? Softwareentwicklung 3
K Maßnahmen für Softwarequalität Softwareentwicklung 2
N Graphenalgorithmen: Best Practice für Knoten-/Kanten-Attribute Softwareentwicklung 5
Z Analysemuster - Welches nehme ich für diese Problem? Softwareentwicklung 0
L Softwareentwicklung für Embedded Systems Softwareentwicklung 1
T Gibt es eine Software die Texte für Skype automartisch (automassage) sendet ? Softwareentwicklung 4
R Online-Plattform für Essensbestellungen mit der momentanen Bestellverfolgung Softwareentwicklung 1
S Suche: (Versionierungs)Tool für Klassenaustausch mit Kollegen, die auch an dem Projekt arbeiten Softwareentwicklung 5
R UML-Diagramm für mehrere JFrames Softwareentwicklung 0
S Algorithmus für perfekte Kombination Softwareentwicklung 2
U Individualsoftware - eine Gefahr für Kunden oder die günstigere Alternative? Softwareentwicklung 7
J Grafiken für eigene Apps ? Softwareentwicklung 2
V [Klassendesgin] Verhalten von Subklassen für Aufgabenteilung benutzen. Softwareentwicklung 2
KranzKrone Architektur für einfaches Gui Programm Softwareentwicklung 6
R freie Engine für IOS, Android, Blackberry Softwareentwicklung 11
T SMART für USB Sticks? Softwareentwicklung 9
BinaryLogic Software für Projektplanung und -Entwicklung Softwareentwicklung 19
A MVC & getter für GUI Komponenten Softwareentwicklung 5
S Abstractes/Schnittstellen für Objekte Softwareentwicklung 8
fastjack Welches Tool für Agile Softwareentwicklung? Softwareentwicklung 6
Mike90 Lizenz für eigene software Softwareentwicklung 9
V Welche Programmisprache für den Desktop? Softwareentwicklung 17
V Zeitplanung für JUnit-Tests? Softwareentwicklung 9
B Allgemeine Fragen für eigenes Projekt Softwareentwicklung 4
P Sensibilität für Codequalität fördern Softwareentwicklung 17
B Empfehlung für Datenbankschulung? Softwareentwicklung 2
D Beispiele für Patterns Softwareentwicklung 3
K Aufwandsabschätzung für User Stories Softwareentwicklung 8
Torres SDK für automatische Bildkorrektur Softwareentwicklung 3
martin82 Tool für IT-Requests Softwareentwicklung 5
Z Welche Software für Web Anwendungen/Spiel Softwareentwicklung 3
Quaxli Suche Tutorial für Jasper Report - speziell iReport Softwareentwicklung 8
Outsourcer Webservertechnologie für Objekterkennung Softwareentwicklung 7
Landei SSH für VMware GSX mit Windows? Softwareentwicklung 2
ARadauer jetzt wirds zeit für Delphi Softwareentwicklung 6
X JavaScript Plugin für Eclipse Softwareentwicklung 3
sparrow Welche Lizenz für ein offenes Programm Softwareentwicklung 2
ARadauer Code Konvention für Datenbanken Softwareentwicklung 5
S Wie weiter gehen und tutorial für MVC Softwareentwicklung 20
m@nu Anti-Spam-System für Blog bauen Softwareentwicklung 3
B Was ist besser für Grafiken? Java oder C#? Softwareentwicklung 9
N Brauche Hilfe für Onlineshop Aufgabe für OOP Grundlagen Softwareentwicklung 4
N Für und Wieder von Java und .NET (primär C#) | Performance Softwareentwicklung 6
G 1 Benutzeroberfläche für 3 einzelne Programme! Softwareentwicklung 9

Ähnliche Java Themen

Neue Themen


Oben