PHP objects and public/private methods

Θοδωρής Λύτρας thlytras at gmail.com
Tue Sep 4 14:40:23 EEST 2007


Στις Τρίτη 04 Σεπτέμβριος 2007 13:37, ο/η Christos Ricudis έγραψε:
> GENIKA milwntas, yparxoun kai protected methods, poy mporoyn na klh8oun apo
> sub-classes ths class sthn opoia anhkoun, alla oxi apo classes xwris
> syggenikh sxesh.
>
> An xreiazesai na dhlwseis mia method san kati pou den einai oute public
> oute protected, tote apla exeis kanei lan8asmeno OO design. Rethink your
> objects.

Χμμ... πολύ σωστό ακούγεται ως αρχή, αλλά αν δεν κάνω λάθος η απάντηση υπονοεί 
οτι όλα τα αντικείμενα ενός *λειτουργικού συνόλου* θα πρέπει να έχουν 
συγγενική σχέση μεταξύ τους. Ισχύει κάτι τέτοιο?

Το άμεσο παράδειγμα που μου έρχεται στο μυαλό είναι το ίδιο το DOM όπου 
σύμφωνα με την τεκμηρίωση της PHP (http://de.php.net/dom) δεν έχουν όλες οι 
κλάσεις συγγενική σχέση μεταξύ τους. Για παράδειγμα η κλάση DOMNodeList δεν 
έχει σχέση με τη DOMNode. Όμως περιέχει σαν properties της αντικείμενα που 
προέρχονται από τη βασική κλάση DOMNode.

Αυτό περιγράφει και το δικό μου πρόβλημα. Ας επεκταθώ λίγο περισσότερο: έχω 
μια κλάση που ας την ονομάσουμε MyGroup, και μια άλλη που θα την πούμε 
MyElement. Κάθε αντικείμενο MyGroup έχει ως properties του είτε αντικείμενα 
MyElement, είτε άλλα αντικείμενα MyGroup, κατά τρόπο ώστε να προκύπτει μια 
δενδροειδής δομή.

Η μέθοδος που θέλω να φτιάξω ανήκει στην κλάση MyGroup και στόχος της είναι να 
διατρέξει ένα αρχείο xml και να φτιάξει την αντίστοιχη δενδροειδή δομή 
αντικειμένων. Αυτή με τη σειρά της καλεί μια δεύτερη μέθοδο στην κλάση 
MyElement η οποία δέχεται έναν κόμβο του XML αρχείου και φτιάχνει το 
αντίστοιχο αντικείμενο. Σωστά δεν ακούγεται ως εδώ?

Το θέμα όμως είναι οτι η δεύτερη μέθοδος (στην κλάση MyElement) δεν έχει νόημα 
να κληθεί παρά μόνο από την πρώτη μέθοδο (της κλάσης MyGroup). Οι δύο κλάσεις 
δεν έχουν συγγενική σχέση.

Είναι όντως λανθασμένος ο σχεδιασμός των αντικειμένων μου? Πως θα έπρεπε να το 
έχω φτιάξει? Υποθέτω η περίπτωση που περιγράφω πρέπει να απαντάται συχνά στον 
προγραμματισμό (δηλ. αντικείμενο που περιέχει άλλα αντικείμενα), έτσι δεν 
είναι?


-- 
"Beauty is transitory"
"Beauty survives"
        - Mr. Spock & Capt. Kirk, "That which survives", stardate unknown
by Theodore Lytras <aspirin at myrealbox.com>
Processing Key: 09 F9 11 02 9D 74 E3 5B D8 41 56 C5 63 56 88 C0




More information about the Linux-greek-users mailing list