Nokioteca [Nokia] Forum: Pattern Observer Symbian C++ - Nokioteca [Nokia] Forum

Salta al contenuto

Pagina 1 di 1
  • Non puoi iniziare una nuova discussione
  • Non puoi rispondere a questa discussione

Pattern Observer Symbian C++ Spiegazione

#1 L   qwertyuiopearendil 

  • Advanced Member
  • PuntoPuntoPunto
  • Gruppo: Utente
  • Messaggi: 40
  • Iscritto: 01 marzo 2007
  • Cellulare:HTC TyTn

Inviato 11 settembre 2008 - 14:38

La mia domanda è molto semplice, anche se la risposta sarà probabilmente complicata:
qualcuno di voi saprebbe spiegarmi come usare il pattern observer in symbian, ho trovato del materiale in rete ma in lingua inglese e non sono stato in grado di capire praticamente niente.
Naturalmente sono ben accetti anche dei codici di esempio.
Grazie a tutti.
0

#2 L   Il.Socio 

  • Nokioteca Staff
  • Gruppo: Moderatore
  • Messaggi: 7144
  • Iscritto: 02 dicembre 2005
  • Località:Torino
  • Cellulare:N8-00

Inviato 11 settembre 2008 - 18:14

Su Symbian puoi realizzarlo tramite la dichiarazione, implementazione, utilizzo di una interfaccia di callback.

Questo l'esempio piu' semplice (riporto solo le parti salienti)... Eventualmente, si puo' anche "complicare" a piacimento, sostituendo ad esempio iObserver con una lista di MObserver.


class MObserver
{
virtual void Notify()=0;
}


class CObservable : CBase
{
CObservable(MObserver& obs);

private:
void DoNotify();

MObserver* iObserver;
}

void CObservable::DoNotify()
{
iObserver->Notify();
}

Messaggio modificato da Il.Socio il 11 settembre 2008 - 18:14

Per segnalare allo Staff un messaggio non conforme al regolamento è sufficiente premere il bottone "Segnala" posizionato in basso a sinistra di ciascun messaggio.
0

#3 L   qwertyuiopearendil 

  • Advanced Member
  • PuntoPuntoPunto
  • Gruppo: Utente
  • Messaggi: 40
  • Iscritto: 01 marzo 2007
  • Cellulare:HTC TyTn

Inviato 12 settembre 2008 - 11:25

CObservable(MObserver& obs);


Questo pezzo di codice suppone che io debba passare un riferimento ad una classe astratta? Ma mi ricordavo che non era possibile istanziare oggetti di questo tipo... Ho semrpe trovato esempi simili a quello che mi hai fatto te, grazie per il tempo dedicatomi, ma non riesco veramente a capire quale sia il loro funzionamento.
0

#4 L   dokkis 

  • Senior Member
  • Gruppo: Developer
  • Messaggi: 828
  • Iscritto: 22 ottobre 2006
  • Località:Italia->Roma
  • Cellulare:NoKia 6630

Inviato 12 settembre 2008 - 11:36

Visualizza Messaggiqwertyuiopearendil, il 12/09/2008 - 12:25, ha scritto:

CObservable(MObserver& obs);


Questo pezzo di codice suppone che io debba passare un riferimento ad una classe astratta? Ma mi ricordavo che non era possibile istanziare oggetti di questo tipo... Ho semrpe trovato esempi simili a quello che mi hai fatto te, grazie per il tempo dedicatomi, ma non riesco veramente a capire quale sia il loro funzionamento.


la classi astratte sono classi che contengono solitamente solo delle funzioni virtuali (puoi crearle tu e chiamarle a tuo piacimento ovviamente), se tu passi ad 1 classe che deve svolgere determinate funzioni questo oggetto astratto, quando ci sono sviluppi con le operazioni che deve svolgere la classe (ha finito, ci sono stati errori ecc) puoi fare una chiamata ad una funzione virtuale di MObserver, da ricordare che poi non dovrai instanziare una vera e propria classe MObserver, come dicevi tu non si può, ma dovrai ereditarla da una delle tue classi, e nella classe che erediti, devi esplicitare le funzioni virtuali dichiarate nella classe MObserver, inoltre quando crei la classe CObservable, alla classe per passare un oggetto MObserver, passerai un'istanza stessa della classe che eredita MObserver, e non un vero oggetto MObserver.
Cmq si symbian c++ ho visto anche io, è pieno di queste cose! Per non parlare delle classi con gli activeobject.. o.O

ps: cn il symbian c++ non sono per niente esperto, cmq spero di aver capito di cosa parlavate e di non aver dato una risposta fuorviante! =)
ciao
0

#5 L   Il.Socio 

  • Nokioteca Staff
  • Gruppo: Moderatore
  • Messaggi: 7144
  • Iscritto: 02 dicembre 2005
  • Località:Torino
  • Cellulare:N8-00

Inviato 12 settembre 2008 - 18:14

E' corretto... dovrai passare il riferimento ad una classe che eredita MObserver... vedi esempio:

In questo caso CProva contiene CObservable ed e' un MObserver... ma CObservable eventualmente potrebbe trovarsi "altrove", in tal caso, non passerai "*this" in fase di creazione dell'istanza CObservable, ma passerai il riferimento all'instanza CProva.

class CProva : public CBase, public MObserver
{
void ConstrucL();
void Notify();

private:
CObservable* iObservable;
}


void CProva::ConstrucL()
{
iObservable = CObservable::NewL(*this);
}


void CProva::Notify()
{
// TODO: Callback richiamata da iObservable...
}

Messaggio modificato da Il.Socio il 12 settembre 2008 - 18:18

Per segnalare allo Staff un messaggio non conforme al regolamento è sufficiente premere il bottone "Segnala" posizionato in basso a sinistra di ciascun messaggio.
0

#6 L   qwertyuiopearendil 

  • Advanced Member
  • PuntoPuntoPunto
  • Gruppo: Utente
  • Messaggi: 40
  • Iscritto: 01 marzo 2007
  • Cellulare:HTC TyTn

Inviato 13 settembre 2008 - 23:46

Visualizza MessaggiIl.Socio, il 12/09/2008 - 19:14, ha scritto:

E' corretto... dovrai passare il riferimento ad una classe che eredita MObserver... vedi esempio:

In questo caso CProva contiene CObservable ed e' un MObserver... ma CObservable eventualmente potrebbe trovarsi "altrove", in tal caso, non passerai "*this" in fase di creazione dell'istanza CObservable, ma passerai il riferimento all'instanza CProva.

class CProva : public CBase, public MObserver
{
void ConstrucL();
void Notify();

private:
CObservable* iObservable;
}


void CProva::ConstrucL()
{
iObservable = CObservable::NewL(*this);
}


void CProva::Notify()
{
// TODO: Callback richiamata da iObservable...
}


Quindi posso dire che in questo caso la classe CProva è l'pggetto che voglio tenere d'occhio?
Altra cosa, visto che hai tirato fuori il discorso, mi puoi dare delle lucidazione sul funzionamento e utilizzo dei metodi di callback...?
Grazie e scusate la mia ignoranza.
0

#7 L   Il.Socio 

  • Nokioteca Staff
  • Gruppo: Moderatore
  • Messaggi: 7144
  • Iscritto: 02 dicembre 2005
  • Località:Torino
  • Cellulare:N8-00

Inviato 14 settembre 2008 - 16:24

eheh... No.
CProva e' l'oggetto che tiene d'occhio (e' un MObserver).
L'oggetto che vuoi tenere d'occhio e' iObservable (e' un CObservable).

Qui puoi trovare una definizione appropriata per quel riguarda le callback.
Per visualizzare questo link registrati o esegui il log in.

Nel nostro caso il metodo di callback e' il Notify() che CObservable richiama per fornire una notifica, tuttavia, non deve curarsi di come questa notifica sara' trattata... La gestione della notifica dipende da chi implementa il metodo Notify(), nel nostro caso CProva...
Per segnalare allo Staff un messaggio non conforme al regolamento è sufficiente premere il bottone "Segnala" posizionato in basso a sinistra di ciascun messaggio.
0

#8 L   qwertyuiopearendil 

  • Advanced Member
  • PuntoPuntoPunto
  • Gruppo: Utente
  • Messaggi: 40
  • Iscritto: 01 marzo 2007
  • Cellulare:HTC TyTn

Inviato 14 settembre 2008 - 22:30

Visualizza MessaggiIl.Socio, il 14/09/2008 - 17:24, ha scritto:

Nel nostro caso il metodo di callback e' il Notify() che CObservable richiama per fornire una notifica, tuttavia, non deve curarsi di come questa notifica sara' trattata... La gestione della notifica dipende da chi implementa il metodo Notify(), nel nostro caso CProva...


Quindi nell'esempio che mi avevi precedentemente postato:

class MObserver
{
virtual void Notify()=0;
}


class CObservable : CBase
{
CObservable(MObserver& obs);

private:
void DoNotify();

MObserver* iObserver;
}

void CObservable::DoNotify()
{
iObserver->Notify();
}


Chi osserva chi?

Ultima cosa, potresti postare o mandarmi per posta un esempio completo in cui specifichi chi osserva chi e un metodo di callback per poterlo provare sull'emulatore. Naturalmente se non è un problema o ti fa perdere troppo tempo.

Grazie infinite cmq della vostra disponibilità.

Messaggio modificato da qwertyuiopearendil il 14 settembre 2008 - 22:38

0

#9 L   Il.Socio 

  • Nokioteca Staff
  • Gruppo: Moderatore
  • Messaggi: 7144
  • Iscritto: 02 dicembre 2005
  • Località:Torino
  • Cellulare:N8-00

Inviato 15 settembre 2008 - 00:38

MObserver osserva CObservable

Un esempio completo lo trovi qui (in questo caso viene gestito un'array di observer):
Per visualizzare questo link registrati o esegui il log in.

e' in java, ma integrando con le definizioni che ti ho riportato poco sopra dovresti riuscire ad orientarti...

la classe Subject e' CObservable
l'interfaccia IObserver e' MObserver
il metodo Update() e' Notify()
la classe Observer1 e' CProva
Per segnalare allo Staff un messaggio non conforme al regolamento è sufficiente premere il bottone "Segnala" posizionato in basso a sinistra di ciascun messaggio.
0

Condividi questa discussione:


Pagina 1 di 1
  • Non puoi iniziare una nuova discussione
  • Non puoi rispondere a questa discussione