|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Member
Iscritto dal: Aug 2010
Messaggi: 36
|
[Java] dubbi teorici
Ho iniziato da poco lo studio di java, xò conosco già il C (basi).
Ho dei dubbi su:che cos'è il pattern? Un'alto dubbio è: un listener si implementa con l'interfaccia Actionlistener. Però ho letto che un listener lo si può usare su più bottoni. Con la classe anonima questo non è possibile. Giusto? Spero di aver descritto bene i miei dubbi ![]() |
![]() |
![]() |
![]() |
#2 | |
Member
Iscritto dal: May 2009
Messaggi: 274
|
Quote:
Perché senza un solido background di quel tipo (che non si ottiene scrivendo un po' di righe in C), mi sembra superfluo studiare i design pattern o addentrarsi in questione tecniche di quel tipo... |
|
![]() |
![]() |
![]() |
#3 |
Member
Iscritto dal: Aug 2010
Messaggi: 36
|
L'anno scorso ho studiato il C che è un linguaggio di programmazione strutturale.
Quest'anno sempre per motivi didattici ho dovuto imparare il java che è un linguaggio OOP. Quindi al momento so ragionare + o - sia in oggetti che non ![]() questo volevi sapere? |
![]() |
![]() |
![]() |
#4 | |
Senior Member
Iscritto dal: Nov 2005
Messaggi: 2774
|
Quote:
Dire che un listener si implementa con l'interfaccia ActionListener non è corretto, nel senso che si deve implementare il Listener adatto al tipo di evento che si vuole "ascoltare". Ad esempio ActionListener va bene per "ascoltare" l'evento di pressione di un pulsante, ma esistono anche altri tipi di eventi. Detto questo, se vuoi usare la stessa classe anonima come listener per più eventi puoi assegnarne il riferimento ad una variabile: Codice:
ActionListener listener = new ActionListener(){...}; button1.addActionListener(listener); button2.addActionListener(listener); Ultima modifica di wingman87 : 11-07-2011 alle 10:51. |
|
![]() |
![]() |
![]() |
#5 | |
Senior Member
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
|
Quote:
Per quanto riguarda un listener implementato con una classe anonima: sì, lo puoi usare su più bottoni, ad esempio: Codice:
import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.Box; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.SwingUtilities; public class MainFrame { public static void main(String[] args) { MainFrame f = new MainFrame(); f.show(); } private final JFrame frame; public MainFrame() { frame = new JFrame("MainFrame"); frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); // init button listener ActionListener listener = new ActionListener() { @Override public void actionPerformed(ActionEvent e) { JOptionPane.showMessageDialog(frame, "You just clicked a button -_-'"); } }; // init buttons JButton[] buttons = new JButton[3]; for (int i=0; i<3; i++) { buttons[i] = new JButton("Button" + i); buttons[i].addActionListener(listener); } // add components JPanel panel = new JPanel(); Box box = Box.createVerticalBox(); for (JButton b : buttons) { box.add(Box.createVerticalStrut(10)); box.add(b); } panel.add(box); frame.add(panel); } private void show() { SwingUtilities.invokeLater(new Runnable() { @Override public void run() { frame.pack(); frame.setLocationRelativeTo(null); frame.setVisible(true); } }); } }
__________________
As long as you are basically literate in programming, you should be able to express any logical relationship you understand. If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it. (Chris Crawford) |
|
![]() |
![]() |
![]() |
#6 | |
Member
Iscritto dal: Aug 2010
Messaggi: 36
|
ok! ho capito!
ricapitolando io negli appunti avevo scritto: Pattern: nella OOP rappresenta una schema progettuale che fornisce una soluzione ad un problema ricorrente. E l'avete confermato. Per quanto riguarda la classe anonima e l'action listener mi avete fatto vedere come si implementa ma wingman87 ha specificato che Quote:
|
|
![]() |
![]() |
![]() |
#7 | ||
Member
Iscritto dal: May 2009
Messaggi: 274
|
Quote:
![]() Quote:
Se ti chiedo di darmi la definizione e scrivere un esempio di polimorfismo lo sapresti ad occhi chiusi giusto? Per farla molto terra terra un pattern è la soluzione ad un problema ricorrente nel software design. Nell'introduzione della Gang of Four, il libro che chiunque legge quando si addentra in queste tematiche, si scrive come gli sviluppatori si siano accorti ad un certo punto che durante la loro esperienza di lavoro ci fossero dei problemi che si ripresentavano schematicamente più o meno nella medesima forma. Sono stati enucleati, divisi per categoria ed i design pattern sono le soluzioni, di fatto, a quei problemi. Listener, che nel libro viene chiamato Observer (anche se presenta qualche differenza) è un esempio abbastanza tipico. C'è un oggetto che scatena un evento/invia un messaggio ed uno/n che si preoccupano di riceverlo, trapparlo ecc e per farlo implementano un'interfaccia. Una spiegazione abbastanza buona dell'event-listener pattern |
||
![]() |
![]() |
![]() |
#8 |
Member
Iscritto dal: Aug 2010
Messaggi: 36
|
Peccato che io quel libro non l'abbia letto. E che nn ho fatto neanche ingegneria del software
![]() |
![]() |
![]() |
![]() |
#9 |
Member
Iscritto dal: May 2009
Messaggi: 274
|
|
![]() |
![]() |
![]() |
#10 |
Member
Iscritto dal: Aug 2010
Messaggi: 36
|
ho un dubbio per l'esame:
l'incapsulamento è una 1)proprietà.. 2)caratteristica.. 3)una tecnica... ..del java su wikipedia di che è una tecnica xò visto che è uno dei pilastri della OOP potrebbe anche essere una caratteristica |
![]() |
![]() |
![]() |
#11 |
Senior Member
Iscritto dal: Mar 2005
Città: Morimondo city
Messaggi: 5491
|
io a questa domanda risponderei C, in quanto, se siamo d'accordo che na caratteristica è una proprietà che definisce, caratterizza una determinata cosa, l'incapsulamento non caratterizza Java,tu puoi scrivere un programma intero senza incapsulare un bel niente, non è una caratteristica del linguaggio ma è una tecnica che puoi intraprendere utilizzando java
__________________
Khelidan |
![]() |
![]() |
![]() |
#12 | |
Member
Iscritto dal: Aug 2010
Messaggi: 36
|
Quote:
allora riepilogando: 1)incapsulamento = tecnica del java 2)ereditarietà = caratteristica del java 3)polimorfismo= tecnica del java poi è vero che l'ovveriding e l'overloading sono proprietà del java o devo dargli un'altra definizione? |
|
![]() |
![]() |
![]() |
#13 | |||
Member
Iscritto dal: May 2009
Messaggi: 274
|
Quote:
Quote:
abbi pazienza, non vorrei essere pedante, ma nel momento in cui affermi che sai scrivere codice nel paradigma OOP ed imperativo/procedurale su queste domande non dovresti avere alcun dubbio. Cioè se sai scrivere codice OOP non puoi avere dubbi sulla teoria OOP. Sarebbe come dire che sei in grado di costruire o riparare un motore ma non conosci i principi che lo governano. Un po' dura... Detto questo, incapsulamento ereditarietà e polimorfismo sono i 3 pilastri su cui si basano il paradigma orientato agli oggetti. Non vedo per quale motivo 2 dovrebbero essere tecniche di Java mentre la seconda una caratteristica. Se un linguaggio (tra cui Java) supporta l'OOP ovviamente supporta tutti e 3 quelle proprietà. La domanda poi è piuttosto confusa, cosa si intende per proprietà, caratteristica o tecnica? Quote:
L'override va di pari passo con l'ereditarietà. Ovviamente non sei obbligato ad usarlo nel momento in cui fai discendere da una classe una sottoclasse (e quindi erediti i suoi membri), ma puoi voler cambiare l'implementazione e quindi la firma del metodo. idem l'overloading... ma sono domande del tuo professore, per curiosità? |
|||
![]() |
![]() |
![]() |
#14 |
Senior Member
Iscritto dal: Mar 2005
Città: Morimondo city
Messaggi: 5491
|
credo che con caratteristica si intenda qualcosa di intrinseco di java, come può essere l'overriding, con tecnica è un qualcosa che tu metti in atto usando java, ma non è un qualcosa che fa parte del linguaggio,almeno io lo capita così, indi per cui l'incapsulamento lo vedo come una tecnica, ma come la stessa OOP, nulla ti vieta(tralasciando il fatto che le librerie sono comunque scritte OOP) di scrivere dei programmmi procedurali in Java, anzi guardando il codice legacy che ho trovato in giro al lavoro è più il java procedurale o la finta OOP che la vero programmazione ad oggetti che c'è in giro.
La verità è che pochi sanno programmare davvero ad oggetti, e Java non è che ti ci forzi più di quel tanto. L'unica cosa è che io caratteristica e propietà li vedo come sinonimi. Comunque in effetti è ben confusa la domanda, credo che neanche chi la posta abbia le idee chiare sulla OOP ma non me ne meraviglio.
__________________
Khelidan |
![]() |
![]() |
![]() |
#15 | ||
Member
Iscritto dal: May 2009
Messaggi: 274
|
Quote:
Polimorfismo, ereditarietà, overloading, overriding, incapsulamento sono tutte che fanno parte dei vari paradigmi di programmazione. Quel che distingue l'OOP nell'uso dei concetti sopra esposti è che sono i fondamenti attraverso il quale uno sviluppatore dovrebbe scrivere il proprio codice. E' la loro interazione a fare la differenza. Tenicamente però io potrei scrivere un sorgente funzionante in Java senza fare uso di nessuno dei 5. Ed allora che significa che l'overriding è una caratteristica intrinseca del linguaggio? Perché lo è l'overriding e non piuttosto l'incapsulamento per esempio? Quote:
|
||
![]() |
![]() |
![]() |
#16 | |
Member
Iscritto dal: Aug 2010
Messaggi: 36
|
Quote:
Visto che ogni domande sbagliata è 0,5 non posso rischiare. I dubbi nascono quando tu la impari in un modo ed il prof. la intende in un'altro. Un sacco di miei colleghi sono stati bocciati proprio per queste cavolate. Mo io dovrei stampare questo topic ed il giorno dell'esame farlo vedere al prof. ![]() Ora voi mi potete definire "asino","che non so programmare" va be non mi offendo. Però essere bocciato alla fine x queste cavolate non mi va. Per questo chiedo aiuto ad una comunità di sicuro più esperta di me. |
|
![]() |
![]() |
![]() |
#17 | ||
Member
Iscritto dal: May 2009
Messaggi: 274
|
Quote:
Io in ogni caso il thread lo stamperei prima dell'esame ![]() Ma poi scusa, non puoi contattarlo via mail in qualche modo? Gli chiedi "salve prof, mi sto esercitando sui vecchi compiti (ipotesi mia), ma non riesco a capire quale sia la differenza tra caratteristica ecc. ecc." Così risolvi i tuoi dubbi ed anche i nostri a questo punto ![]() Quote:
![]() nessuno nasce "imparato". Però se scrivi che sai programmare in OOP allora quei dubbi non li dovresti avere. Il problema nasce dal fatto però che chi ti insegna fa delle domande, su cui vieni giudicato, che sono boh per me senza alcun senso (e mi viene il dubbio quindi che le idee non le abbia chiare nemmeno lui). Magari lo fa per aiutarvi, in realtà è il contrario. |
||
![]() |
![]() |
![]() |
#18 |
Junior Member
Iscritto dal: Jul 2011
Messaggi: 9
|
Andate a chiedere a un programmatore Java se i paradigmi che avete citato sono proprietà caratteristiche o chissà che!!
Non capisco tutta questa teoria che chiedono i prof.. A cosa serve?? Se sai i concetti e li sai applicare programmando cosa ti interessa sapere in che "categoria" rientrano??!
__________________
"I'm not crazy. My mother had me tested." Sheldon Cooper ![]() |
![]() |
![]() |
![]() |
#19 | |||
Senior Member
Iscritto dal: Mar 2005
Città: Morimondo city
Messaggi: 5491
|
Quote:
Quote:
Quote:
__________________
Khelidan |
|||
![]() |
![]() |
![]() |
#20 |
Member
Iscritto dal: Aug 2010
Messaggi: 36
|
@devbeginner
se che ti sembra che lui è fesso a darmi la soluzione. E poi nota dolente al primo appello non ho preso parte. Ho sentito annotato le testimonianze dei miei colleghi, x questo sto girando mezzo internet per trovare le risposte. Cmq io resto dell'opinione che l'incapsulamento e il polimorfismo sono tecniche xkè uno può programma in java facendo a meno di esse. Per l'overloading e l'overriding mi hanno detto che il prof lo intende come una proprietà ![]() |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 14:03.