Wie anfangen? Konzept / Designfrage

Status
Nicht offen für weitere Antworten.

El Rakiti

Mitglied
Hallo zusammen, ich bin der Neue ;-).

Ich möchte mich kurz halten, auf der Arbeit hat man halt nicht so viel Zeit ;).

Ich habe 3,5 Jahre in C# "programmiert", also mehr Hobbymäßig, etwas in der Ausbildung. Jetzt arbeite ich seit Anfang des Jahres in einem Softwarehaus und programmiere hier in XBase++...Kein schöner Umstieg, wenn man von C# verwöhnt ist.

So, da ich am Ball der Zeit bleiben will und wenigstens eine "hohe" Sprache weiter lernen möchte habe ich mich für Java entschieden. Grade weil ich auch im Studium, dass ich "nebenbei" mache wohl in Java programmieren werden.

Ich habe schon viele Artikel über OOP gelesen, so Begriffe wie Schichtentrennung, und die ganzen OOP Begriffe sind mir THEORETISCH ein Begriff und ich weiß, was damit gemeint ist, bzw. was es soll.

Nur leider fehlt da der praktische Brocken...Die Hobby C# Programme waren nie groß genug bzw. wichtig genug, sie "sauber" aufzuziehen und hier auf der Arbeit arbeite ich an einem bestehenden Programm, dass zum Teil 20 Jahre alte Clipper Sourcen hat...Also auch hier gibts keine Praxis zu den "wichtigen" OOP Eigenschaften.

Jetzt zu meiner eigentlichen Frage:

Ich weiß nicht, wie ich anfangen soll...Syntax und Semantik von Java ist die eine Sache, die lässt sich "einfach" lernen bzw. hat ja schon viele Eigenschaften von C#. Nur ich weiß nicht, wie ich das Programm "anfangen" soll... Als Beispiel soll es ein Source Editor werden, der mir die Arbeit mit Xbase auf der Arbeit erleichert...Anfangen kann man ja mit einem einfachen Texteditor, der dann stückweise erweitert wird (Syntaxhighlighting usw.)

Nur weiß ich einfach nicht, wie ich anfangen soll. Wie ein Konzept erstellen? GUI in Netbeans zusammenklicken und dann mit der Logik anfangen. UML Diagramm? Wie trenne ich die 3 Schichten? Wie ihr seht, mir fehlt da die Erfahrung und ich bin etwas überfordert ;).

Vielleicht habt ihr ja ein paar Tipps?
 

Atze

Top Contributor
na das konzept sollte doch zuerst stehen. du kannst zwar direkt anfangen, und neue features versuchen dazuzustricken, aber das ist immer ein graus. du solltest wissen was die anwendung können soll (must have), was schön ware (nice to have) und wie es grafisch dargestellt werden soll (zumindest eine grobe vorstellung. ob dann ein button rund oder eckig ist, kann man ja immernoch entscheiden).
dann solltest du dir über concurrency gedanken machen, über benutzerverwaltung und rechte. wer darf was, unter welchen umständen. (ok, im falle eines texteditors wohl nicht :))

wenn du das ganze kozept hast, legst du dir am besten meilensteine fest, also zuerst wohl die must haves, eine rudimentäre gui. dazu kommen dann die nächsten meilensteine, die nice to haves. am ende kannst du es dann noch "schön schubsen" :) darauf achten, dass alles so modular wie irgendwie nötig ist (stichworte "hohe kohäsion", "geringe Kopplung"), damit du es bei bedarf erweitern und autauschen kannst.

schichten im sinne von mvc wirst du hier nicht wirklich benötigen, da du ja nicht wirklich auf einem datenmodell aufbaust, aber gui und logik sollten zumindest so weit es geht getrennt werden, damit du eine oberfläche variabel halten kannst
schichten im sinne von client, server und datenbank hast du ja auch nicht. in dem sinne als eine ein-schicht-architektur

so, noch was vergessen? :) wenn ja, einfach fragen. hoffe ich konnte helfen :)
 

El Rakiti

Mitglied
Hey super, danke für die Antwort.

Ok, das Konzept zu erst. Es reicht da doch, sich mit nem Blatt Papier, nem Stift und nem Bier auf die Couch zu setzen und die Funktionen festzuhalten, oder?

concurrency hab ich noch nicht gehört ;).

Dachte mir schon, dass MVC bei so einem Programm übertrieben ist, konnte mir auch nicht vorstellen, wie das gehen soll...

Aber wie trenne ich die Logik und GUI am besten? Hast du da vielleicht ein konkretes Beispiel, gerne auch Source?
 

Marco13

Top Contributor
MVC verwendet man bei Swing automatisch - ob man das auf höherer Ebene nochmal braucht, muss man sich überlegen. Aber nebenbei: Ein TextEditor mit Syntaxhighlighting & Co ist alles andere als trivial - und er wird mit Sicherheit NIE auch nur annähernd so gut, wie die, die es schon gibt. Die Gefahr ist eben, dass man sich am Anfang so etwas großes vornimmt, und das dann zu Frust führt. Eine konkrete Empfehlung soll das nicht sein, aber du könntest in Erwägung ziehen, "klein" anzufangen - d.h. z.B. ein kleines Spiel oder eine andere kleine Anwendung schön sauber Objektorientiert aufzubauen - auch wenn das bei einer kleinen Anwendung eigentlich "nicht nötig" ist, erkennt man daran schon, wie man die Prinzipien umsetzen kann, und vor allem: Welche Fehler man machen kann.
 
B

bygones

Gast
concurrency ? ... behaupte mal in 99% aller anwendungen nicht von interesse.

ansonsten - ich bin kein Fan des seitenweisen konzeptbauens, sich schon vorher grosse Gedanken machen was die Applikation noch so alles haben koennte (v.a. von den nice-to-haves wuerde ich die Finger weglassen !). Entwicklung in meinen Augen ist nicht ein One-direction prozess, bei dem man sich einmal alle Gedanken macht und dann implementiert - das schlaegt zu 100% fehl.

Lieber den iterativen Weg waehlen, eine kleine Einheit nehmen, Test schreiben der fehl schlaegt, Implementierung dass der Test gruen wird, naechsten fehlerhaften Test schreiben und und und

Wenn du mit einer GUI arbeitest wuerde ich schon versuchen das MVC so weit wie moeglich einzuhalten, warum es nicht relevant sein sollte kann ich nicht verstehen. Zur Programmierung gehoert eine gescheite Kapselung, punkt
 

El Rakiti

Mitglied
Hey Marco,

prinzipiell gebe ich dir Recht ;).

Ich will mich auf keinen Fall übernehmen und weiß, dass es viel Arbeit ist. Aber das Programm soll nicht nur einfach so geschrieben werden, sondern ich möchte es auf der Arbeit einsetzen ;). Das Problem ist, dass es für XBase++ keinen richtig guten Source Editor gibt.

Ich werde mit einem simplen Notepad Editor anfangen. Dann Erweiterungen wie Suchen / Ersetzen, dann vielleicht Zeilennummern, Syntaxhighlighting und so weiter...

Natürlich könnte ich z.b. JEedit runterladen und da meine Änderungen machen, aber da lerne ch nicht soviel, als wenn ich es selber mache. Zumal ich nicht glaube, das ich mich in so einem komplexen Programm schnell zurechtfinde.

Aber trotzdem danke für den Tipp ;-).

Nur zuletzt, wie meinst du, dass man MVC mit Swing automatisch verwendet? Wie gesagt, ich weiß ungefähr, was MVC bedeutet, aber die praktische Anwendung oder wie es in der Praxis aussieht, weiß ich noch nicht so recht.
 

Marco13

Top Contributor
Nur zuletzt, wie meinst du, dass man MVC mit Swing automatisch verwendet? Wie gesagt, ich weiß ungefähr, was MVC bedeutet, aber die praktische Anwendung oder wie es in der Praxis aussieht, weiß ich noch nicht so recht.

Swing ist im Prinzip komplett nach MVC aufgebaut. Es gibt ein
[c]interface TableModel[/c]
und eine Implementierung
[c]class DefaultTableModel implements TableModel[/c]
So ein TableModel speichert Tabellendaten. Das ist nur die Datenhaltung und der über das Interface geregelte Zugriff.

Zusätzlich kann man an ein TableModel einen TableModelListener hängen, der über alle Änderungen am Modell benachrichtigt wird.

So.

Hier mal eine SlaterB'sche Trennlinie:

-------------- :)

Vollkommen getrennt davon ist die JTable. Die Zeigt den Inhalt eines TableModels an. Sie hängt "sich" als TableModelListener an das TableModel, und wenn das TableModel sich ändert, wird die JTable entsprechend angepasst. Das TableModel weiß aber nicht, dass es in einer JTable angezeigt wird. Man könnte auch ein TableModel in einem JLabel anzeigen, oder eine Spalte der Tabelle in einer JList.

Und diese Trennung "Model - Listener - View" gibt es eben bei fast allen Swing-Components:
TableModel, ComboBoxModel, ListModel, Document ("TextModel" - das wäre für dich interessant ...) usw...
 

El Rakiti

Mitglied
Ui, das klingt ja doch komplizierter, als ich dachte.

Hast du vielleicht genau dafür eine gute Lektüre? Ich weiß, galileocomputing mit JAva ist auch eine Insel soll gut sein, werde ich mir auch teilweise zu Gemüte führen.

Nur leider hab ich nicht mehr die Zeit wie damals und würde lieber nach dem Motto learning by doin lernen. Also mit dem Editor einfach anfangen. Das Grundwissne habe ich ja schon.

Das einzige was ich halt vorher angucken wollte wäre eventuell das MVC Konzept, bzw. wie man mit Swing arbeitet..Ist ja glaub ich schon was anderes als mit Visual Studio in C#.

Habe übrigens Netbeans installiert, machte mir einen nutzerfreundlichen Eindruck.
 

Atze

Top Contributor
ja, concurrency ist hier wohl nicht im spiel. aber dass man es bei 99% der anwendungen (im web) nicht braucht, halte ich für ein gerücht! :)

ich finde auch, dass ein editor mit highlighting für ein erstes projekt zu viel ist. dazu gehört ja das parsen von text, beachten der formatierungen, und alle kombinationen von literalen müssen beachtet werden. das ist schon ne menge arbeit. würd auch mit was kleinerem anfangen :)

und klar lernt man viel beim ausprobieren, aber die javainsel hilft dir schon sehr, würd ich nicht drauf verzichten. ist gut inverstierte zeit, ist nämlich nicht alles so intuitiv.
 

tfa

Top Contributor
ja, concurrency ist hier wohl nicht im spiel. aber dass man es bei 99% der anwendungen (im web) nicht braucht, halte ich für ein gerücht! :)
Ich würde fast sagen, Concurrency spielt in 99% der Anwendungen eine Rolle.
Gerade bei Swing muss man Threading einsetzen, wenn man ein reaktives Programm haben will.
 

El Rakiti

Mitglied
Ich fange ja mit einem kleinen Programm an, ein Java Notepad ;-).

Keine Angst, ich werde mich nicht übernehmen, habe aber keine Lust, sinnlose Programme zu schreiben, die ich nicht brauche. Das habe ich schon hinter mir ;). Und Notepad ist ja einfach, das ganze extra Zeugs kommt später.

Nur nochmal zum MVC. Bei Swing soll man damit automatisch arbeiten. Gibt es da eine hilfreiche Lektüre, die einem da einen kurzen Einblick gibt, wie das mit den Interfaces und den Models geht? Das hab ich nämlich noch nie gemacht.
 

Marco13

Top Contributor
Naja, die Java Insel ist schon ... sehr umfassend .... Für jemanden, der schon weiß, was Schleifen und If-Abfragen sind, und für jemanden, der schon die Grundlagen von OOP kennt, ist das vielleicht ein bißchen redundant - und an der ensprechenden Stelle ( Galileo Computing :: Java ist auch eine Insel (8. Auflage) – 16.15 Das Model-View-Controller-Konzept ) vielleicht nicht ... sooo auführlich/praxisnah/zugänglich.

Als Beispiel für MVC, das man mal schnell kopieren & starten, in ähnlicher Form nachprogrammieren oder erweitern kann, und das vor allem die Grundidee von MVC IMHO sehr schön verdeutlicht, fand ich MVC Pattern ganz gut: Kompakt und auf den Punkt gebracht. Aber auch das ist nur als verdeutlichendes Beispiel zu sehen. Z.B. würde man bei einem eigenen Entwurf nicht unbedingt Observer/Observable verwenden, sondern ggf. eigene Listener, aber ansonsten fand ich das Beispiel gut.
 

El Rakiti

Mitglied
Naja, die Java Insel ist schon ... sehr umfassend .... Für jemanden, der schon weiß, was Schleifen und If-Abfragen sind, und für jemanden, der schon die Grundlagen von OOP kennt, ist das vielleicht ein bißchen redundant - und an der ensprechenden Stelle ( Galileo Computing :: Java ist auch eine Insel (8. Auflage) – 16.15 Das Model-View-Controller-Konzept ) vielleicht nicht ... sooo auführlich/praxisnah/zugänglich.

Als Beispiel für MVC, das man mal schnell kopieren & starten, in ähnlicher Form nachprogrammieren oder erweitern kann, und das vor allem die Grundidee von MVC IMHO sehr schön verdeutlicht, fand ich MVC Pattern ganz gut: Kompakt und auf den Punkt gebracht. Aber auch das ist nur als verdeutlichendes Beispiel zu sehen. Z.B. würde man bei einem eigenen Entwurf nicht unbedingt Observer/Observable verwenden, sondern ggf. eigene Listener, aber ansonsten fand ich das Beispiel gut.


Genau das meinte ich. Die ganzen Grundsachen kenn ich alle, entweder aus der Theorie (Interfaces, relationale Datenbanken...) oder aus der Praxis (Kontrollstrukturen, Klassen usw.). Was ich brauche, ist wirklich einen Java spezifischen Crashkurs.

Für die ganze Standartsachen schaue ich mir die Insel an, also wie genau geht Veerbung in Java, was sind nochmal abstrakte Klassen und halt so allgemeine Javasachen..

Was ich aber noch bräuchte wäre ein Crashkurs für GUI Programmierung...

Ich schau mir einfach mal die Insel an, aber bin gerne noch für andere Tips offen.

Thx!
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
R Wie kann ich anfangen? Allgemeine Java-Themen 12
O BufferedReader von ganz unten anfangen zu lesen Allgemeine Java-Themen 7
K Programmieren anfangen. Allgemeine Java-Themen 21
R In einer for Schleife bei einem Substring anfangen, wo man davor aufgehört hat Allgemeine Java-Themen 6
W Timer Konzept-Frage Allgemeine Java-Themen 16
S Suche Konzept: Korrektheit des Aufrufers feststellen Allgemeine Java-Themen 7
J MVC Konzept Allgemeine Java-Themen 1
reibi log4j - Bestes Konzept Allgemeine Java-Themen 10
E Super erzwingen, konzept/pattern gesucht. Allgemeine Java-Themen 8
D GUI-Controller Konzept Allgemeine Java-Themen 6
G UML Konzept Allgemeine Java-Themen 3
M Backend Entwicklung - Konzept fragen Allgemeine Java-Themen 3
R Konzept eines Software-Rollout/Synchronisation via WebService Allgemeine Java-Themen 5
D Observer/Observable Pattern vs. Listener-Konzept Allgemeine Java-Themen 4
MQue Thread Konzept Allgemeine Java-Themen 8
G MVC-Konzept - effizienz beim "notify" Allgemeine Java-Themen 2
MQue Konzept- Frage zum Button-Aktualisieren Allgemeine Java-Themen 5
S Frage zum Java-Konzept Allgemeine Java-Themen 6
H GUI - Konzept Allgemeine Java-Themen 3
S Konzept: Innere Klasse, Anwendungsbeispiel? Allgemeine Java-Themen 4
V Designfrage: try-catch-throws Allgemeine Java-Themen 11
L Designfrage: Dispatcher-Programmierung - redundante Auslegung Allgemeine Java-Themen 1
F.S.WhiTeY Designfrage bzw. Meinung zur Umsetzung Allgemeine Java-Themen 39
G Designfrage Vererbung ja oder nein Allgemeine Java-Themen 9
G Designfrage: Exceptions in Konstruktoren Allgemeine Java-Themen 7
heart_disease Designfrage: Statische Konfigurationsklasse Allgemeine Java-Themen 10
sliwalker Designfrage: Dateninhalte in Komponenten variabel halten Allgemeine Java-Themen 4
N DesignFrage FactoryPattern Allgemeine Java-Themen 7
N verschiedene Klasse laden (Designfrage) Allgemeine Java-Themen 2
A Designfrage zu Dateimanager Allgemeine Java-Themen 4
O Designfrage Allgemeine Java-Themen 6
T Designfrage: Viele, kleine Objekte Allgemeine Java-Themen 13
T Designfrage: Audiochat Allgemeine Java-Themen 3
S Designfrage Allgemeine Java-Themen 3

Ähnliche Java Themen

Neue Themen


Oben