Nel post 3D CountDown con FIVe3D (vedi anche How I Did It: scrivere un countdown in Flash), veniva proposta una classe per la creazione di un oggetto CountDown in Actionscript, eccone una versione simile in Javascript:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
| /**
* CountDown Class
*
* @author Giovambattista Fazioli
* @email g.fazioli@undolog.com
* @web http://www.undolog.com
*
* @param dd (string) 'month day, year'
*
*/
function countDown( dd ) {
// init target time
var target = new Date( dd );
this.targetTime = target.getTime();
/**
* refresh countdown
*/
this.refresh = function() {
var today = new Date();
var currentTime = today.getTime();
// time left
this._leftMilliseconds = (this.targetTime - currentTime);
this._leftSeconds = Math.floor( this._leftMilliseconds / 1000 );
this._leftMinutes = Math.floor( this._leftSeconds / 60 );
this._leftHours = Math.floor( this._leftMinutes / 60 );
// no module
this.leftDays = Math.floor( this._leftHours / 24 );
// for print
this.leftMilliseconds = this._leftMilliseconds % 1000;
this.leftSeconds = this._leftSeconds % 60;
this.leftMinutes = this._leftMinutes % 60;
this.leftHours = this._leftHours % 24;
}
this.refresh();
} |
Esempio
1 2 3
| var cd = new countDown( '1 1, 2009' );
// mostra quanti giorni, ore, minuti, secondi e millisecondi al primo gennaio 2009
document.write( cd.leftDays + "," + cd.leftHours + "," + cd.leftMinutes + "," + cd.leftSeconds + "," + cd.leftMilliseconds ); |
Continua...
Ho notato spesso confusione quando si parla di Classi, Oggetti ed Istanze. Chi non è particolarmente istruito sulla programmazione ad oggetti spesso confonde il vero significato di questi termini. Sapevo, tuttavia, che esistono due scuole di pensiero riguardo alla definizione di Classe e Oggetto. A me piace la “scuola” che indica la Classe come definizione di un possibile Oggetto e, quindi, l’Oggetto come Istanza della Classe.
Sembra banale, tuttavia mi è capitato – discorrendo con altri – di trovarmi in “conflitto” (per così dire) e poi cadere in equivoci, quando si usano questi termini, partendo casomai dal presupposto che “l’altro” li intenda esattamente come noi.
Io la vedo in questo modo; una Classe è una definizione! Viene appunto definita una classe di possibili oggetti. La Classe è l’insieme di metodi e proprietà (se volete possiamo aggiungere anche gli eventi – che altro non solo che speciali metodi…) che possiederà l’oggetto.
Ad esempio quando scriviamo in Actionscript, o qualsiasi altro linguaggio ad oggetti:
1 2 3 4
| class MiaClasse {
function MiaClass() {}
function MioMetodo() {}
} |
Abbiamo definito una Classe e non un Oggetto. Al limite abbiamo “definito” un “possibile” oggetto. Potremmo addirittura sostenere, e non a torto, che l’Oggetto esiste a runtime mentre la Classe no (in verità esistono Classi dinamiche che possono essere definite – e poi usate per creare oggetti – anche a runtime). Escludo le classi statiche, ovviamente che – alla fine – altro non sono che sotto-istanze (o istanze nascoste) e quindi oggetti veri e propri.
Quando invece abbiamo:
1
| var mioOggetto:MiaClasse = new MiaClasse(); |
Ecco che mioOggetto è una istanza di MiaClasse()! Cioè mioOggetto è un Oggetto – appunto – di tipo MiaClasse().
Ne deriva, proprio nella filosofia ad oggetti, che di Oggetti di tipo MiaClasse() ne posso avere quanti ne voglio, cosa che non può essere – per la definizione stessa – di MiaClasse(). Ad esempio, se vale ed ha senso la relazione:
1 2 3 4 5
| var mioOggetto_1:MiaClasse = new MiaClasse();
var mioOggetto_2:MiaClasse = new MiaClasse();
var mioOggetto_3:MiaClasse = new MiaClasse();
...
var mioOggetto_n:MiaClasse = new MiaClasse(); |
Non ha significato:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| class MiaClasse {
function MiaClass() {}
function MioMetodo_2() {}
}
class MiaClasse {
function MiaClass() {}
function MioMetodo_2() {}
}
class MiaClasse {
function MiaClass() {}
function MioMetodo_3() {}
} |
Istanza e Oggetto, quindi, coincidono e sono usate alternativamente per lo stesso significato in diversi contesti.
Probabilmente non frega molto a nessuno… questione di esigenze di completezza…
Continua...
Ultimi Commenti
Marco: Ti ringrazio moltissimo, mi hai illuminato
ho risolto impostando [cc_objc] //OptionViewController.m -...
Giovambattista Fazioli: @Marco: Ti consiglio un approccio credo più corretto. Se hai eseguito il subclass del tab...
Marco: Scusa lo spam.. ho notato che c’è un errore.. ecco la correzione [cc_objc] /** PrimaClasse.h **/ #import...
Marco: dimenticato.. in [cci]OptionViewController[/cci ] il [cci]@syntetize[/cci] del delegato l’ho messo
luigi: molto chiaro e semplice devo ammettere che anche scrivendo da un pà difficilmente uso delegati creati da...