|
|
|
![]() |
|
Strumenti |
![]() |
#161 | |
Senior Member
Iscritto dal: Dec 2005
Messaggi: 7249
|
Quote:
mi risulta difficile attenermi strettamente a qualcosa di ambiguo. comunque prevenire potenziali comportamenti non voluti è da buon programmatore |
|
![]() |
![]() |
![]() |
#162 |
Senior Member
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
|
Non c'è NESSUNA ambiguità e ti stai arrampicando sugli specchi.
Non so dove e come tu abbia studiato, ma la definizione matematica di equazione di secondo grado in quella forma che ho riportato è quella corretta, e il programma che ho scritto ricava le sue soluzioni (TUTTE, visto che ci sono sempre). Se hai una definizione diversa, sei pregato di farmela avere, altrimenti evita di rigirare la frittata perché è del tutto inutile.
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro @LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys |
![]() |
![]() |
![]() |
#163 | |
Senior Member
Iscritto dal: Dec 2005
Messaggi: 7249
|
Quote:
|
|
![]() |
![]() |
![]() |
#164 | ||
Senior Member
Iscritto dal: Oct 2002
Città: San Jose, California
Messaggi: 11794
|
Quote:
Un buon programmatore risolve solo il problema che gli e' fornito e si attiene strettamente alle specifiche date. Non implementa nulla di piu'. Il buon programmatore prende un problema ambiguo e ne ricava specifiche non ambigue sulle quali lavorare discutendole col cliente. E poi scrive il codice piu' semplice possibile che risolve il problema. Quote:
"La soluzione e' finita non quando non c'e' piu' nulla da aggiungere, ma quando non c'e' piu' nulla da togliere"
__________________
"We in the game industry are lucky enough to be able to create our visions" @ NVIDIA Ultima modifica di fek : 10-10-2007 alle 11:42. |
||
![]() |
![]() |
![]() |
#165 | |
Senior Member
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
|
Quote:
Se ti serve il parere di un matematico non hai che da chiederlo: nel forum ce ne sono diversi e basta scomodarne gentilmente qualcuno, ma in linea teorica certe nozioni avresti dovute averle affrontate e assimilate anche tu, sia alla scuola dell'obbligo sia all'università. Il mio codice le rispetta in pieno: non fa né più né meno di quello richiesto, e lo fa nel più semplice dei modi. Poi se vuoi continuare a farti ragione stravolgendo le basi della matematica e dell'informatica, dimmelo chiaramente perché la chiudiamo qui: non ho intenzione di perdere altro tempo su cose così banali e che dovrebbero essere scontate.
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro @LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys |
|
![]() |
![]() |
![]() |
#166 | ||||||||||
Senior Member
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
|
Nessuna travisazione: è da un pezzo che fai lascia e prendi col discorso della scelta o non scelta del linguaggio.
Quote:
Affiancare pochi, o anche uno solo, concetti di teoria alla volta immergendosi subito nella pratica e sperimentando quanto appreso è il modo migliore per impararli e fissarli in testa. Quote:
Quote:
Adesso dovresti cortesemente spiegarmi perché l'assembly sì e il linguaggio macchina no. Quote:
Quote:
In questo caso i controlli di cui parli sono inutili, perché stai aggiungendo cose non richieste, codice e possibilità di introdurre bug. Quote:
Quote:
Quote:
Quote:
Quote:
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro @LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys Ultima modifica di cdimauro : 10-10-2007 alle 13:09. |
||||||||||
![]() |
![]() |
![]() |
#167 | ||
Senior Member
Iscritto dal: Dec 2005
Messaggi: 7249
|
Quote:
per il coefficiente diverso da zero sono daccordo con te, ma allora se il programma accetta uno zero è sbagliato Quote:
|
||
![]() |
![]() |
![]() |
#168 | |||||||||
Senior Member
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
|
Quote:
![]() ![]() Quote:
Quote:
Quote:
Quote:
Quote:
Codice:
object Pippo { public String getName() { return "Pippo"; } } ... Pippo.getName(); Quote:
Codice:
class SuperOne { String getValue() { return "Hello" } } class SuperTwo { String getValue() { return "World" } } class Sub extends SuperOne, SuperTwo { //getValue() restituisce Hello o World ? } Dell'estensione (singola o multipla che sia) non apprezzo inoltre il fatto che essa costringa ad eccepire la comune regola secondo cui l'implementazione è sempre irrilevante: l'estensione è differisce dall'ereditarietà esattamente in ciò che la prima trasferisce dichiarazione e implementazione mentre la seconda trasferisce la sola dichiarazione. Se l'implementazione è sempre irrilevante perchè trasferirla? La risposta è per comodità ed è effettivamente comodo ma io non apprezzo le comodità che incrinano l'omogeneità dei principi. Quote:
Codice:
Te ne sparo una sinteticamente: con Python è possibile modellare velocemente e in maniera semplice un problema, mantenendo il codice compatto, chiaro e manutenibile. Ci si focalizza sul problema. ;) ROTFL. Mi fai morire. ![]() Quote:
![]()
__________________
Uilliam Scecspir ti fa un baffo? Gioffri Cioser era uno straccione? E allora blogga anche tu, in inglese come me! |
|||||||||
![]() |
![]() |
![]() |
#169 | ||
Senior Member
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
|
Quote:
Se gli fornisci qualcosa che NON è un'equazione di secondo grado, il suo comportamento E' INDEFINITO (nel senso che NON l'ho assolutamente definito e non m'importa). Come non è definito neppure se al posto di un numero in virgola mobile digiti, ad esempio, "Pippo". Caso che, "stranamente", tu non hai considerato nemmeno di striscio con la tua versione C: eppure, secondo la tua logica, un controllo avrebbe dovuto esserci anche qui. Comunque per maggiori informazioni su cosa significhi sviluppare programmi: http://it.wikipedia.org/wiki/Algoritmo di cui riporto uno spezzone: "In informatica, con il termine algoritmo si intende un metodo per la soluzione di un problema adatto a essere implementato sotto forma di programma. Intuitivamente, un algoritmo si può definire come un procedimento che consente di ottenere un risultato atteso eseguendo, in un determinato ordine, un insieme di passi semplici corrispondenti ad azioni scelte solitamente da un insieme finito." Quote:
- avere due soluzioni; - avere una soluzione; - non avere soluzioni. All'università, posto che il docente sappia fare bene il proprio dovere, si insegna che le soluzioni sono sempre due. Le soluzioni complesse si escludono SE E SOLO SE il codominio viene ristretto al campo dei reali (che, non essendo stato specificato, non è il caso nostro). Vediamo se devi ancora continuare con questa storia. ![]()
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro @LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys |
||
![]() |
![]() |
![]() |
#170 | ||||||||||
Senior Member
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
|
Quote:
Quote:
Quote:
Quote:
Quote:
Quote:
Quote:
Tornando al discorso dell'ereditarietà multipla, se il linguaggio definisce bene il meccanismo di ricerca dei metodi e/o attributi, io non vedo particolari problemi nell'adottarla. Quanto all'approccio delle interfacce, cosa succede se ne esistono due che dichiarano due metodi getValue e una classe prova ad estenderle entrambe? Non c'è anche qui la necessità di capire a quale ci si riferisce se nel codice è presente soltanto l'invocazione di getValue? Quote:
Quote:
![]() Tornando a ciò che dicevi, dove starebbe il trasferimento di parte delle informazioni dal discorso esplicito a uno implicito? Insomma, dove trovi che, nella definizione in Python che ho fornito, siano celate implicitamente delle informazioni? La sintesi serve principalmente a rimuovere delle informazioni ridondanti o inutili. Quote:
![]()
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro @LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys |
||||||||||
![]() |
![]() |
![]() |
#171 | ||
Senior Member
Iscritto dal: Jul 2002
Città: Reggio Calabria -> London
Messaggi: 12112
|
Quote:
![]() il tuo codice è una mera ridondanza. E' possibile esprimere il concetto che tu hai espresso con un semplicissimo Codice:
for (int i = 0; i < 100; i++){ System.out.println("Hello world!"); } Ora.. secondo te, inserendo lo snippet di codice col for e quello "unrolled" in un'applicazione reale, quale versione è più o meno soggetta ad errori? (da notare che hai specificato 100 volte, quindi se sbagliando nel copia e incolla ne metti 99 o 101 allora stai introducendo dei bug) Inoltre mettendo quello più lungo complichi incredibilmente la tua applicazione e per seguire il filo logico tra prima del tuo snippet e dopo dovresti fare i salti mortali, a meno ovviamente di non usare un extract method che ha esattamente la stessa funzione di ridurre la quantità di codice in quel metodo in modo da aumentarne la leggibilità e diminuire così la possibilità d'errore (credo che venga da se che un programma + leggibile sia meno soggetto ai bug). Quote:
![]()
__________________
![]() |
||
![]() |
![]() |
![]() |
#172 | |
Senior Member
Iscritto dal: Jul 2002
Città: Reggio Calabria -> London
Messaggi: 12112
|
Quote:
![]() perchè? ![]() Nelle interfacce non definisci l'implementazione, sono solo utilizzate per definire un contratto. Dato che la tua classe che implementa le interfacce deve rispettare il contratto basta che implementi un solo metodo che faccia quanto richiesto. Quindi il caso di due metodi in due interfacce diverse mi ricorda tanto l'esempio di cui sopra delle due soluzioni reali e coincidenti ( ![]() ![]()
__________________
![]() |
|
![]() |
![]() |
![]() |
#173 | |
Senior Member
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
|
Quote:
Per intenderci: una cosa è la getValue di un'interfaccia "ListCollection" e tutt'altra cosa è la getValue di una "DBField". Se ho una sola implementazione per le due definizioni, quale dovrebbe essere il comportamento plasmato? Quella della prima? Quello della seconda? O una sorta di "combinazione"?
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro @LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys |
|
![]() |
![]() |
![]() |
#174 | |
Senior Member
Iscritto dal: Jul 2002
Città: Reggio Calabria -> London
Messaggi: 12112
|
Quote:
alla fine è una tua scelta immagino... Probabilmente se arrivi a questa situazione comunque il tuo oggetto non rispetta il principio di separazione dei compiti (o come cavolo si chiama ![]() Io personalmente separerei quindi il mio oggetto in due oggetti che implementano ognuno una delle due interfacce. Questo sempre per restare nel tema che l'ereditarietà multipla comporta solo casini e dovrebbe essere applicata solo in caso un oggetto possa comportarsi effettivamente come specificato dalle varie interfacce che lo compongono. Se ad esempio ho un oggetto Animale che è sia un uccello che un mammifero allora c'è qualcosa che non va ![]()
__________________
![]() |
|
![]() |
![]() |
![]() |
#175 |
Senior Member
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
|
Le operazioni, anche se hanno lo stesso nome, sono separate ed è possibile "indirizzarle" con lo scoping.
Comunque neanch'io farei casini di questo tipo: era soltanto un dubbio esclusivamente sul piano formale che m'era sovvenuto. Quindi la risposta è: no, si può implementare il metodo una sola volta per entrambe le interfacce. A questo punto mi aspetto che se due interfacce definiscono lo stesso metodo, ma che tornano risultati diversi, linguaggi come Java, Delphi, ecc. sollevino un'errore in fase di compilazione.
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro @LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys |
![]() |
![]() |
![]() |
#176 | ||
Senior Member
Iscritto dal: Dec 2005
Messaggi: 7249
|
Quote:
Quote:
le soluzioni complesse si includono SE E SOLO SE il codominio viene ESTESO ai numeri complessi. ti faccio notare che qualunque insegnante serio di analisi specifica sempre all'inizio qual'è il dominio e il codominio, per cui se stiamo parlando di numeri reali anche all'università ti insegnano che possono non esserci soluzioni. i numeri complessi si usano soltanto quando servono, mentre nella maggiorparte dei casi si fa riferimento a reali ora.. rispondi a questa domanda: perchè non dovrebbe essere possibile dare in input al programma numeri complessi? non è sottointeso? direi che è il caso di non andare oltre Ultima modifica di k0nt3 : 11-10-2007 alle 12:32. |
||
![]() |
![]() |
![]() |
#177 | ||
Senior Member
Iscritto dal: Jul 2002
Città: Reggio Calabria -> London
Messaggi: 12112
|
Quote:
![]() Quote:
![]() l'unica cosa che puoi dire a cesare è che non ha trattato il caso di coefficienti complessi, ma la sua soluzione si accorda perfettamente con la definizione di equazione polinomiale di secondo grado, come puoi anche vedere da quanto riportato. La distinzione per delta > e < di 0 viene fatta solo quando gli studenti ancora non hanno appreso il concetto di numeri complessi. Ma è solo una spiegazione per superare questa limitazione, infatti ti specificano chiaramente che nel domino dei numeri reali tale equazione non ammette soluzione per delta < 0. Ma mica vuol dire che per delta minore di zero non la puoi risolvere.... Infatti se prendi la definizione generale (come quella riportata da wikipedia) vedi testualmente scritto che l'equazione di secondo grado ammette sempre due soluzioni.
__________________
![]() |
||
![]() |
![]() |
![]() |
#178 |
Senior Member
Iscritto dal: Dec 2005
Messaggi: 7249
|
la definizione del problema era ambigua perchè non è stato specificato il dominio di riferimento, quindi anche trovare solo le soluzioni reali (quando ci sono) era corretto.
non ho bisogno di cercare su wikipedia, sono cose che so già ![]() lui ha aggiunto anche le soluzioni complesse solo per scrivere meno righe di codice.. nient'altro |
![]() |
![]() |
![]() |
#179 |
Senior Member
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
|
Non c'è nemmeno bisogno che rispondo perché mi sono già espresso chiaramente e sono d'accordo con quanto ha scritto Danilo, tranne che su una cosa: non ho aggiunto niente; al contrario, semplicemente non ho tolto niente.
Per me la questione "risoluzione di un'equazione di secondo grado" finisce qui.
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro @LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys Ultima modifica di cdimauro : 11-10-2007 alle 13:03. |
![]() |
![]() |
![]() |
#180 | |
Senior Member
Iscritto dal: Oct 2002
Città: San Jose, California
Messaggi: 11794
|
Quote:
In caso di definizione ambigua del cliente, comunque, il buon programmatore implementa sempre la soluzione piu' semplice al problema, non la piu' complessa.
__________________
"We in the game industry are lucky enough to be able to create our visions" @ NVIDIA Ultima modifica di fek : 11-10-2007 alle 14:11. |
|
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 05:54.