|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Junior Member
Iscritto dal: Jan 2009
Messaggi: 11
|
[Java] Consigli per primo progetto
ciao a tutti
sto lavorando al mio primo progetto in Java, è solo da circa 2 mesi che seguo il linguaggio. il progetto riguarda la programmazione di un software che organizzi le pubblicazioni di una Unversità: "Il gruppo deve implementare un software perla gestione di pubblicazioni scientifiche. Le pubblicazioni (Publication) possono essere dei seguenti tipi: ● Slide ● Paper, che può essere dei seguenti tipi: ---● Conference Paper ---● Journal Article ---● Workshop Paper ---● Technical Report ● Journal ● Poster ● Book Chapter ● Book ● Thesis. Ogni pubblicazione ha uno o più autori (Author), che possono essere dei seguentitipi: ● Graduated Student ● PhD ● Researcher ● Assistant Professor ● Professor Le funzionalità da implementare obbligatoriamente, tramite opportune API, sono le seguenti: ● Ricerca degli autori di una pubblicazione ● Ricerca di tutte le pubblicazioni di un certo autore ● Ricerca di tutti i co-autori di un certo autore (un co autore è qualcuno che ha almeno una pubblicazione scritta insieme all'autore) ● Ricerca di tutte le pubblicazioni di un certo anno ● Ricerca di tutte le pubblicazioni di un certo autore in un certo anno" il mio primo problema è quello di creare una struttura delle classi e soprattutto le sottoclassi. pensavo di salvare i dati in un file .txt visto che i database non sono permessi. e poi sfruttare i metodi di ricerca a partire dal file .txt naturalmente non vi chiedo di scrivere il codice, anche perché non imparerei niente Grazie anticipatamente |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Apr 2002
Città: Palermo
Messaggi: 4913
|
Ciao, IMHO, creare un'applicazione del genere senza usare un database è veramente una cavolata.
Detto questo, per la parte di progettazione ti consiglio di seguire proprio quello che hai scritto. Un esempio: Sicuramente ci sarà una classe Pubblicazione, che magari è astratta e da cui tutti i vari tipi di Pubblicazioni estendono. Se ha detto che ogni pubblicazione è composta da uno o più autori, potresti pensare che ad una lista di autori...quindi: Codice:
abstract class Pubblicazione{
private List<Autore> autori;
...
}
class Autore{
....
}
Prima però considera quali possono essere tutti i protagonisti della tua applicazione e a come possono collaborare l'uno con l'altro. Ciao |
|
|
|
|
|
#3 |
|
Junior Member
Iscritto dal: Jan 2009
Messaggi: 11
|
Prima di tutto ti ringrazio di avermi risposto e dell'aiuto che mi hai dato, comunque i miei problemi principali sono quelli di non sapere come importare nel programma java dei file di tipo txt quindi di poter aggiungere tutti i relativi attributi della pubblicazione (quindi associandola ad autori e a la sua appropriata categoria). Magari utilizzando API di cui al momento ignoro l'esistenza.
|
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Apr 2002
Città: Palermo
Messaggi: 4913
|
Se proprio devi salvare su file, potresti scegliere di utilizzare file csv oppure excel e magari scaricare ed usare qualche libreria che ti semplifichi la cosa.
Un'altra soluzione e scriversi a manina tutto utilizzando le API di java usando quindi la classe File e tutto il cucuzzaro di api java. Io opterei per la prima se proprio vuoi scrivere su file piuttosto che usare un db. |
|
|
|
|
|
#5 |
|
Junior Member
Iscritto dal: Jan 2009
Messaggi: 11
|
il mio problema è come far recuperare al prog i dati da un txt,
così li ci scrivo le varie pubblicazioni con anno, autori, ecc... poi queste pubblicazioni devono essere recuperate dal prog per poi chiamare i metodi di ricerca. mi era stato proposto come esempio di simulare il codice xml, ossia utilizzando tag, identificatori per poter far capire al programma come etichettare l'elemento tra i tag, è una buona idea? |
|
|
|
|
|
#6 |
|
Senior Member
Iscritto dal: Apr 2002
Città: Palermo
Messaggi: 4913
|
Si, utilizzare file xml non è una cattiva soluzione. Potrebbe esserti utile la libreria JDom.
Ad ogni modo, non ti fossilizzare su questo problema. Se pensi bene tutta l'architettura del tuo progetto, il problema di come salvare su file o recuperare informazioni è secondario. |
|
|
|
|
|
#7 |
|
Junior Member
Iscritto dal: Jan 2009
Messaggi: 11
|
allora vediamo:
Codice:
abstract class Pubblicazione{
private List<Autore> autori;
private String tipo;
private int anno;
...
}
class Autore{
//potrei creare un array di autori in modo da assegnare una posizione per ogni autore
}
|
|
|
|
|
|
#8 |
|
Senior Member
Iscritto dal: Jul 2006
Città: Bergamo
Messaggi: 401
|
Non c'è bisogno ne di usare un txt ne un db
Se i file li devi salvare in locale, usando i suggerimenti di gokan, ovvero di Pubblicazione come classe astratta, ti potresti mettere tutte le pubblicazioni che hai in una collezione (tipo ArrayList) e poi salvare direttamente la collezione come oggetto. Ad esempio: Codice:
ArrayList<Pubblicazione> pub = new ArrayList<Pubblicazione>(); ...riempi pub... ObjectOutputStream o_out = new ObjectOutputStream(new FileOutputStream(nomeFile)); o_out.writeObject(pub); o_out.close(); Codice:
ObjectInputStream o_in = new ObjectInputStream(new FileInputStream(nomeFile)); ArrayList<Pubblicazione> pub_salvate = (ArrayList<Pubblicazione>)o_in.readObject(); o_in.close(); Saluti
__________________
iMac 27" 5K |
|
|
|
|
|
#9 |
|
Junior Member
Iscritto dal: Jan 2009
Messaggi: 11
|
mi sto incastrando il cervello...
non riesco nemmeno a creare le classi... come posso dividere le varie tipologie di un autore? e come posso legare autori e pubblicazioni? |
|
|
|
|
|
#10 |
|
Senior Member
Iscritto dal: Jul 2006
Città: Bergamo
Messaggi: 401
|
Codice:
public abstract class Pubblicazione {
private ArrayList<Autore> autori;
..bla..bla..bla...
}
public abstract class Autore {
...bla...bla...bla...
}
public class Slide extends Pubblicazione {
...bla...bla...bla...
}
public class GraduatedStudent extends Autore {
...bla...bla...bla...
}
Saluti
__________________
iMac 27" 5K |
|
|
|
|
|
#11 |
|
Member
Iscritto dal: Oct 2008
Messaggi: 59
|
Ciao..
Ti dico la verità... Da come è scritta la traccia.. (tutte quelle estensioni) Sembra che vogliano farti fare un DB infatti con un modello Entità-Relazione semplice sbrogli il tutto... Altrimenti se lo vuoi fare con LinkedList Fatti la classe pubblicazione e tutte le altre la estenderanno Attenzione tieniti il + generale possibile cioè fai LinkedList<Pubblicazione> e poi usa instanceof per gestire i casi Ti consiglierei di disaccoppiare il progetto in package CommonClasses (contiene pubblicazione e figli) GestioneDati (contiene una classe Struttura dati che gestisce le pubblicazioni) Actor( che contiene due classi : Client e Admin) Client ricerca le pubblicazioni Admin aggiunge pubblicazioni alla struttura dati (una volta che ti metti a fare una cosa falla bene , è bruttino caricare le pubblicazioni da txt ) GUI (per le interfacce grafiche) Attenzione fai in modo che tutte le classi che usi implementano serializable così puoi salvarle su disco) Nel caso vuoi usare il db resta tutto identico tranne che al posto della classe StrutturaDati ti fai un DB managere che accede al DB Mamma come mi piace Java
__________________
Desktop: [Case]TT V9[Alim]Lc-Power Hyperion 700w[Mobo]AsRock AOD 790Gx/128M[Ram]2x2gb OCZ DDR2 1066Mhz[Cpu]AMD Phenom II X4 940 BE[GPU]Sapphire 4850 512mb gddr3 Notebook: Asus F9F 12" |
|
|
|
|
|
#12 | |
|
Junior Member
Iscritto dal: Jan 2009
Messaggi: 11
|
Quote:
adesso per inserire qualche esempio di pubblicazione come faccio? la mia classe Autore si presenta cosi: Codice:
package Actor;
import java.util.ArrayList;
public class Autore {
public static void main(String[] args){
ArrayList<String> list=new ArrayList<String>();
list.add("Mario");
list.add("Pippo");
list.add("Peppe");
}
}
come faccio ad associare ogni pubblicazione al proprio\propri autore\i? Ultima modifica di pag65 : 16-01-2009 alle 15:12. |
|
|
|
|
|
|
#13 |
|
Senior Member
Iscritto dal: Jul 2006
Città: Bergamo
Messaggi: 401
|
Errore
Le tue classi devono rappresentare un'astrazione della realtà. In questo caso ad esempio, Autore non deve contenere ne main ne tantomeno un ArrayList di autori, ma dovrà contenere chennesò nome, cognome, un identificativo, ecc ecc e dei metodi comuni a tutti gli autori (magari getNome() ecc). In uguale maniera anche la tua classe Pubblicazione dovrà rappresentare quella che, a tutti gli effetti, è una pubblicazione reale. Quindi dovrà contenere ad esempio la lista degli autori, il testo della pubblicazione, la data di creazione ecc ecc (con relativi metodi ecc ecc). Una volta create queste classi che ti rappresentano quello che ti serve, le puoi estendere creando delle classi specifiche che rappresentano ad esempio una Slide, un Journal, un Researcher o un Professor. Queste specializzazioni conterranno qualcosa di unico e utile per loro. Ad esempio una Slide potrebbe contenere un riferimento alla slide successiva e precedente, o un Professor potrebbe conenere il suo titolo di studio piuttosto che il dipartimento in cui lavora ecc ecc. Una volta create tutte le classi che ti interessano le usi come ti pare. Ma ricordati che la classe Pubblicazione o Autore sono solo delle astrazioni delle loro controparti reali. Non vederle dal punto di vista prettamente della programmazione Saluti
__________________
iMac 27" 5K |
|
|
|
|
|
#14 | |
|
Junior Member
Iscritto dal: Jan 2009
Messaggi: 11
|
Quote:
Codice:
package Actor;
import java.util.ArrayList;
public abstract class Autore {
public String nome;
public String cognome;
public String ideNum;
getNome....
getCognome...
getIdeNum....
}
|
|
|
|
|
|
|
#15 |
|
Senior Member
Iscritto dal: Jul 2006
Città: Bergamo
Messaggi: 401
|
Mettiamo che ti fai una classe Database così:
Codice:
public class Database {
ArrayList<Pubblicazione> pubblicazioni;
ArrayList<Autore> autori;
public Database() {
pubblicazioni = new ArraiList<Pubblicazione>();
autori = new ArrayList<Autore>();
}
...bla...bla...ti riempi i 2 ArrayList...bla....bla
//metodo ipotetico per recuperare tutte le pubblicazioni di un autore
public ArrayList<Pubblicazione> getAut_pub(Autore aut) {
return aut.getPubblicazioni();
}
//metodo ipotetico per recuperare tutti gli autori di una pubblicazione
public ArrayList<Attore> getPublication_aut(Pubblicazione pub) {
return pub.getAutori();
}
}
Poi i dati li tratti come ti pare, proprio come se fosse un database vero.
__________________
iMac 27" 5K |
|
|
|
|
|
#16 |
|
Junior Member
Iscritto dal: Jan 2009
Messaggi: 11
|
ricordo che con il java parto proprio da 0
i metodi di cui parli sono: -get.Pubblicazioni -get.Autore ho un po di dubbi: nel compilare l'array Pubblicazioni come posso inserire anche l'anno? come posso far riconoscene al programma che quello è l'anno e non un altro valore? nell'array Pubblicazioni devo mettere anche ideNum dell'autore giusto? scusa l'infinita ignoranza... mi ci sto impegnando di brutto |
|
|
|
|
|
#17 |
|
Junior Member
Iscritto dal: Jan 2009
Messaggi: 11
|
buongiorno
sono sempre qui se invece di una classe astratta definissi un "interface"? da quello che ho capito, se uso una classe astratta, le sottoclassi (cioè che le classi che estendono la classe astratta) ereditano variabili istanza e metodi definiti nella classe astratta...se poi metto un metodo astratto, questo deve essere ridefinito nelle sottoclassi invece in un'interfaccia posso definire solo metodi che poi dovranno essere ridefiniti nelle classi che implementano l'interfaccia.. grazie Ultima modifica di pag65 : 30-01-2009 alle 12:24. |
|
|
|
|
|
#18 |
|
Junior Member
Iscritto dal: Jan 2009
Messaggi: 11
|
sono incappato in un problemome...
come posso fare ciò "● Ricerca di tutte le pubblicazioni di un certo anno" dovrei organizzare tutte le pubblicazioni in un array o simili come posso fare? Grazie edit: nella classe Database devo creare un solo oggetto di tipo Database perchè il database è unico... edit2: io nella classe Autore ho messo come variabile istanza anche un arraylist di pubblicazioni. Ultima modifica di pag65 : 10-02-2009 alle 08:44. |
|
|
|
|
|
#19 |
|
Senior Member
Iscritto dal: Jul 2006
Città: Bergamo
Messaggi: 401
|
Posta il codice
__________________
iMac 27" 5K |
|
|
|
|
|
#20 |
|
Junior Member
Iscritto dal: Jan 2009
Messaggi: 11
|
quale ti metto?
Questo è Database: Codice:
public class Database {
public ArrayList<ClPubblicazioni> pubblicazioni;
public ArrayList<Autore> autori;
public Database() {
pubblicazioni = new ArrayList<ClPubblicazioni>();
autori = new ArrayList<Autore>();
}
{
//...bla...bla...riempire i 2 ArrayList...bla....bla
}
//metodo ipotetico per recuperare tutte le pubblicazioni di un autore
public ArrayList<ClPubblicazioni> getAut_pub(Autore aut){
return aut.getPubblicazioni();
}
//metodo ipotetico per recuperare tutti gli autori di una pubblicazione
public ArrayList<Autore> getPublication_aut(ClPubblicazioni pub) {
return pub.getAutori();
}
//metodo ipotetico per recuperare tutti gli autori di una pubblicazione
@SuppressWarnings("null")
public ArrayList<ClPubblicazioni> getPublication_Year(int z) {
if (z < 1900){
System.out.println("Aiutooooooooo");
}
ArrayList<ClPubblicazioni> stessoAnno = null;
for(int i = 0; i<pubblicazioni.size(); i++){
ClPubblicazioni pub = pubblicazioni.get(i);
if (z == pub.getYear()){
stessoAnno.add(pub);
}
if (stessoAnno == null)
{
System.out.println("erroraccio");
}
System.out.println(pub.getTitolo());
}
return stessoAnno;
}
}
Codice:
public class ClPubblicazioni {
public String titolo;
public int year;
public ArrayList<Autore> autori;
getAutori;
getTitolo;
getYear;
addAutore;// aggiunge solo l'autore ad "autori"
addAutoreComp;// aggiunge l'autore ad "autori" e la pubblicazione all'autore
Ultima modifica di pag65 : 10-02-2009 alle 10:52. |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 22:39.




















