Visualizzazione dei risultati da 1 a 5 su 5

Discussione: librerie Java

  1. #1

    librerie Java

    Allora, ancor prima di salutare tutti gli utilizzatori del forum vorrei fare una doverosa premessa: di Java non so praticamente nulla.
    M'è toccato di realizzare una libreria in questo linguaggio e, grazie anche alle guide di HTML.it, devo dire che funziona benino e sono abbastanza soddisfatto solo che, ad un passo dal rilascio, c'è un aspetto che mi sfugge: cos'è una libreria in Java?
    Faccio un passo indietro: utilizzando ad esempio C#, la compilazione di una libreria determina la generazione di un eseguibile .dll che deve essere distribuito nelle macchine che della libreria intendano utilizzare le funzionalità.
    Se, sempre ad esempio, ho la libreria pippo.dll, posso creare una applicazione pluto.exe che la referenzi e, in seguito, distribuire sia pippo.dll che pluto.exe.
    Realizzando la mia libreria in java, invece, mi sono accorto che il risultante pippo.jar non è necessario che sia presente sulla macchina target: pluto.class funziona di per sè.
    Mi sembra, in pratica, che le librerie in java siano sempre linkate 'staticamente', a voler usare un termine caro anche ad altri compilatori.
    Un grazie anticipato (ed un caffè pagato a quanti fossero dell'urbe zona colombo) a chiunque voglia essere così gentile da chiarirmi il concetto di libreria (jar) in java, sua distribuzione, sua relazione con l'eseguibile che ne rappresenta il consumatore.
    Grazie e scusate se la domanda è troppo triviale.

  2. #2

    Re: librerie Java

    Originariamente inviato da redOctober cos'è una libreria in Java?
    E' semplicemente un package con un insieme di classi (file .class).

    Originariamente inviato da redOctober
    Mi sembra, in pratica, che le librerie in java siano sempre linkate 'staticamente', a voler usare un termine caro anche ad altri compilatori.
    I file class sono librerie che contengono la singola classe.
    Usando import tu ovviamente li linki staticamente. Ma per ovviare a questo problema, Java introduce la Reflection (è come un LoadLibrary con le API di windows), che diciamo "linka dinamicamente le librerie" caricandole a runtime grazie ai ClassLoader
    lolide
    Java Programmer

    Informati

  3. #3
    Graize lolide, chiaro.
    Quindi, se ho ben capito, utilizzando i classLoader potrei omettere gli import iniziali, corretto?
    A quel punto si potrebbero lasciare i jar sulla macchina target e farli caricare dinamicamente dall'applicazione cui servono.
    Grazie alla Reflection, quindi, l'applicazione dovrebbe essere in grado di invocare i metodi esportati dalla libreria pur senza utilizzare l'import (link statico). Corretto?

    Più che altro questo sistema mi sembra parecchio macchinoso in fase di manutenzione. Se rilascio la versione 1.0 della mia libreria che esporta una funzione per la quale si palesa un malfunzionamento, la successiva versione riveduta e corretta 1.1 non dovrebbe implicare la ricompilata di tutte le applicazioni che hanno utilizzato la prima versione, se la seconda non ne ha cambiato l'interfaccia.

    In quest'ottica, l'utilizzo del classLoader in luogo dell'import (se la mia premessa risultasse corretta) sarebbe da preferirsi: almeno di potrebbero sostituire i .jar di libreria 'al volo'.

    Se stò dicendo una lunga sequenza si scemenze -evenienza sempre assai probabile- ditemelo che mi taccio.

  4. #4
    Si è così, però devi strutturare bene le tue librerie in modo da non usare in un brutto modo la reflection.
    Mi spiego: usando la reflection, il compilatore non potrà referenziare bene le classi. Cioè se tu hai una classe Prova in una libreria, usandola con la reflection in un'altra, il compilatore vedrebbe quella classe come oggetto Class non come Prova, e la sua istanza non come oggetto Prova ma come Object. Quindi ogni volta che vorrai fare un'operazione su quella classe reflexata, devi caricarne il metodo, oppure l'attributo e si formerebbe un eccezione se per esempio vuoi accedere ad un membro privato, oppure sbagli parametri ecc...

    Io personalmente strutturerei il mio programma in entrypoint, cioè ho una libreria che scrive una stringa in un textbox su un frame e ne fa varie operazioni (un editor di testo in poche parole)

    Volendo linkare insieme questa libreria ed una che riprende la stringa, io costruirei un metodo setString e run nella libreria, in modo che io con la reflection gli passo la stringa e chiamo run con cui passo l'esecuzione alle classi nella libreria.

    Se non facessi così saresti costretto a chiamare con la reflection tutti i metodi di quella libreria.

    Struttura bene il tuo progetto per la reflection, altrimenti ti troveresti a ricominciarlo da capo


    lolide
    Java Programmer

    Informati

  5. #5
    Eh, il progetto ormai è andato ed è stato fatto così come voluto dal committente, quindi finisce così.
    La mia era una curiosità del tutto accademica, visto che ho approcciato java per la prima volta e chiaramente mi sfuggono i principi di funzionamento.
    La questione librerie adesso mi è parecchio più chiara: grazie lolide, disponibile ed efficace.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.