On Change

Γενικά θέματα για τις γλώσσες προγραμματισμού που δεν καλύπτονται από τις άλλες περιοχές της κατηγορίας.

Συντονιστές: WebDev Moderators, Super-Moderators

Απάντηση
Άβαταρ μέλους
geomatical04
Δημοσιεύσεις: 164
Εγγραφή: 17 Φεβ 2003 00:27
Τοποθεσία: Ηράκλειο

On Change

Δημοσίευση από geomatical04 » 09 Ιουν 2009 00:48

Καλησπέρα,

Έχω ένα πίνακα ο οποίος ανα πάσα στιγμή μπορεί να αλλάξει τιμή. Το ερώτημα μου είναι πως μπορώ να υλοποιήσω έναν OnChange Listener, ο οποίος όταν αλλάζει κάποια μεταβλητή μέσα σε αυτόν τον πίνακα να με ενημερώνει. Σκεφτηκα να το κάνω με ένα while μέσα σε thread το οποίο να κάνει συνεχώς έλεγχο (while(true) -> check). Αλλά δεν ξέρω αν είναι ο αυτός είναι ο ενδεδειγμένος τρόπος για να γίνει ή αν αυτός δεν είναι τόσο σωστός από άποψη μνήμης και επεξεργαστικής ισχύως που θα χρειαστώ.

Άβαταρ μέλους
virxen75
Δημοσιεύσεις: 493
Εγγραφή: 18 Φεβ 2009 00:17
Τοποθεσία: ΗΡΑΚΛΕΙΟ ΚΡΗΤΗΣ

On Change

Δημοσίευση από virxen75 » 09 Ιουν 2009 01:23

αναφέρεσε σε java? ή κάποια άλλη γλώσσα προγραμματισμού?

ο πίνακας από που αλλάζει?

εκεί που αλλάζει δεν μπορεί να ενημερώσει μία global μεταβλητή
ή να εκτελέσει μία μέθοδο?

Άβαταρ μέλους
geomatical04
Δημοσιεύσεις: 164
Εγγραφή: 17 Φεβ 2003 00:27
Τοποθεσία: Ηράκλειο

On Change

Δημοσίευση από geomatical04 » 09 Ιουν 2009 09:26

Αναφέρομαι σε γενικό πρόβλημα αν μπορείς να μου δώσεις παράδειγμα σε java ή σε κάποια άλλη γλώσσα προγραμματισμού καλοδεχούμενο (Εγώ θα το γράψω σε vb.NET):). To θέμα είναι ότι περιμένω δεδομένα από ένα εξωτερικό πρόγραμμα τα οποία μπορεί να έλθουν οποιαδήποτε στιγμή και όχι αυτό το πρόγραμμα δεν παρέχει event listener.

Άβαταρ μέλους
EneMe
Super Moderator
Δημοσιεύσεις: 13309
Εγγραφή: 09 Ιούλ 2002 13:29
Τοποθεσία: Στο κέντρο της Ελλάδας!
Επικοινωνία:

On Change

Δημοσίευση από EneMe » 09 Ιουν 2009 10:30

Άρα θα πρέπει να ελέγχεις εξωτερικά την τιμή.

Κάθε 1", 30", 1', 5'... Εσύ ξέρεις...

Άβαταρ μέλους
virxen75
Δημοσιεύσεις: 493
Εγγραφή: 18 Φεβ 2009 00:17
Τοποθεσία: ΗΡΑΚΛΕΙΟ ΚΡΗΤΗΣ

On Change

Δημοσίευση από virxen75 » 09 Ιουν 2009 10:58

και η σύνδεση μεταξύ τους πως θα γίνει?

πως το εξωτερικό πρόγραμμα θα στέλνει τον πίνακα?
με sockets π.χ.?με αρχείο στον δίσκο?πως?

Άβαταρ μέλους
ThyClub
Honorary Member
Δημοσιεύσεις: 5312
Εγγραφή: 17 Νοέμ 2003 00:21
Τοποθεσία: Hell's Kitchen
Επικοινωνία:

On Change

Δημοσίευση από ThyClub » 09 Ιουν 2009 12:20

HTML?
Περιέγραψε μας τι θα κάνει και θα βρείς απάντηση

Άβαταρ μέλους
dva_dev
Script Master
Δημοσιεύσεις: 3790
Εγγραφή: 16 Σεπ 2005 01:32
Επικοινωνία:

On Change

Δημοσίευση από dva_dev » 09 Ιουν 2009 12:33

Τσεκάρισε το proxy design pattern. Μάλλον σε καλύπτει.

Επίσης αν δεν έχεις το Design Patterns: Elements of Reusable Object-Oriented Software το συστήνω χωρίς δεύτερη σκέψη. Ισως να είναι το πιο χρήσιμο βιβλίο που έχω αγοράσει.
Τελευταία επεξεργασία από το μέλος dva_dev την 09 Ιουν 2009 15:34, έχει επεξεργασθεί 1 φορά συνολικά.

Άβαταρ μέλους
Sheena
Honorary Member
Δημοσιεύσεις: 3654
Εγγραφή: 07 Σεπ 2005 00:00

On Change

Δημοσίευση από Sheena » 09 Ιουν 2009 14:24

geomatical04 έγραψε:Αναφέρομαι σε γενικό πρόβλημα αν μπορείς να μου δώσεις παράδειγμα σε java ή σε κάποια άλλη γλώσσα προγραμματισμού καλοδεχούμενο (Εγώ θα το γράψω σε vb.NET):). To θέμα είναι ότι περιμένω δεδομένα από ένα εξωτερικό πρόγραμμα τα οποία μπορεί να έλθουν οποιαδήποτε στιγμή και όχι αυτό το πρόγραμμα δεν παρέχει event listener.
Αφού θα το γράψεις σε .ΝΕΤ, γιατί δεν συγκεκριμενοποιείς τι θέλεις να κάνεις; Το .ΝΕΤ έχει event γι' αυτή την δουλειά. Επίσης όπως λέει και ο virxen75, πώς θα τροφοδοτήσεις το πρόγραμμά σου;

Παρεμπιπτόντως, το βιβλίο που αναφέρει ο dva_dev, είναι η βίβλος του προγραμματιστή. :D
Εικόνα

id12856 Οι άγγελοι πάνε κοντά με τους αγγέλους...

Άβαταρ μέλους
geomatical04
Δημοσιεύσεις: 164
Εγγραφή: 17 Φεβ 2003 00:27
Τοποθεσία: Ηράκλειο

On Change

Δημοσίευση από geomatical04 » 09 Ιουν 2009 15:52

1) (Γενικά έχω διαβάσει λίγο από το HeadFirst Design Patterns :) πολύ ωραίο και αυτό !)
2) To proxy pattern χρησιμοποιήται από ότι έχω καταλάβει για να μην ξανα κάνω load ότι έχω φορτώσει ήδη.
3) Όχι δεν παίρνω τα δεδομένα από socket. Ας θεωρήσουμε το εξής :

Έστω ότι έχω μία μεταβλητή η οποία σε τυχαία χρονικά διαστήματα που δεν μπορείς να τα ελένξεις εσύ αλλάζει τιμή. Για να ειδοποιηθώ όταν θα αλλάξει τιμή πρέπει να το ελένχω τη μεταβλητή κάθε 1,2,3,..,ν δευτερόλεπτα ή αυτό γίνεται και με κάποιον event listener;

Άβαταρ μέλους
dva_dev
Script Master
Δημοσιεύσεις: 3790
Εγγραφή: 16 Σεπ 2005 01:32
Επικοινωνία:

On Change

Δημοσίευση από dva_dev » 10 Ιουν 2009 01:24

Δεν πολυγράφω σε .net και η vb.net δεν είναι και η αγαπημένη μου γλώσσα, αλλά θα κάνω μια προσπάθεια όσο μπορώ με απλά :-? παραδείγματα.
Γενικά από αυτά που έχω καταλάβει στην εφαρμογή σου (app1) έχεις κάτι τέτοιο

Κώδικας: Επιλογή όλων

public class ClassΑ
public myVariable as integer
end class
και στην εξωτερική εφαρμογή (app2) κάνεις κάτι σαν αυτό

Κώδικας: Επιλογή όλων

protected objectA as ClassA
objectA = new ClassA
objectA.myVariable = 12
για να δώσεις τιμή στην μεταβλητή myVariable. Αυτό αν και φαίνεται να δουλεύει είναι πολύ προβληματικό γιατί "δένει σφιχτά" την υλοποίηση της app1 με την υλοποίηση της app2. Αν θέλεις να κάνεις rename τη μεταβλητή σου από myVariable σε myVar, θα πρέπει να ψάχνεις να βρείς σε χιλιάδες σημεία τί έσπασε στον κώδικα και που, και στις δύο εφαρμογές. Αν θέλεις εκτός από το να αλλάζει τιμή να κάνει και κάτι ακόμα ή να το κάνει κάπως διαφορετικά, πρέπει να το κάνεις και στα 1000 σημεία που χρησιμοποιείς την myVariable.

Μια μάλλον βολικότερη λύση είναι να δημιουργήσεις μια function που να δίνει έμμεσα πρόσβαση στη μεταβλητή.
Κάνεις στην App1 κάτι τέτοιο

Κώδικας: Επιλογή όλων

public class Class2
protected myVariable2 as integer

public sub SetNewValue(byval newValue as integer)
myVariable2 = newValue
end sub
end class
Και έτσι η app2 θα χρησιμοποιεί την function ως εξής:

Κώδικας: Επιλογή όλων

protected obj as Class2
obj = new Class2
obj.SetNewValue(12)
Τι κερδίζεις με αυτή τη μικρή αλλαγή; "Κουμπώνεις" την app2 στην app1 με το όνομα μιας function και τις παραμέτρους τις. Δεν σε νοιάζει η function πως έχει υλοποιηθεί. Μπορεί να είναι ο απλός κώδικας που έχω βάλει ή να είναι χιλιάδες γραμμές πολύπλοκου κώδικα που από μήνα σε μήνα μπορεί να τον αλλάζεις. Η app2 για το μόνο που νοιάζεται είναι να υπάρχει η function, να έχει όνομα SetNewValue και να συνεχίσει να παίρνει μία παράμετρο integer.
Mπορείς επιπλέον στον κώδικα της SetNewValue να δώσεις τιμή στην μεταβλητή σου ΚΑΙ να κάνεις ότι άλλους ελέχους/κλήσεις χρειάζεσαι, να βάλεις ένα delegate και να καλέσεις το delegate για να πιάσεις κάποιο OnCustomChange Event, ή να περάσεις μια callback function επιπλέον σαν παράμετρο και να καλέσεις αυτήν. Βάζεις τη φαντασία σου από κει και πέρα για το πως θα καλέσεις το OnCustomChange event. Το σημείο το έχεις.

Απάντηση

Επιστροφή στο “γλώσσες προγραμματισμού - γενικά”

Μέλη σε σύνδεση

Μέλη σε αυτήν τη Δ. Συζήτηση: Δεν υπάρχουν εγγεγραμμένα μέλη και 0 επισκέπτες