PROGRAMMIAMO
JS - Gerarchie di oggetti
Nested objects

Un oggetto può contenere al proprio interno qualsiasi cosa, come per esempio vettori e stringhe o anche un altro oggetto. Si parla in questi casi di nested objects (o oggetti annidati).

Si consideri l'esempio seguente che definisce un segmento in base alle coordinate dei due punti estremi e quindi ne calcola la lunghezza:

var segmento = {
                        punto1:
                                {
                                x:0,
                                y:0
                                },

                        punto2:
                                {
                                 x:0,
                                 y:0
                                },

                        lunghezza: function()
                        {
                        var lung;
                        lung = Math.sqrt((this.punto2.x-this.punto1.x)*(this.punto2.x-this.punto1.x) +
                                             (this.punto2.y-this.punto1.y)*(this.punto2.y-this.punto1.y))
                        return lung;
                        }
                        }

L'immagine seguente riassume il calcolo della lunghezza a partire dagli estremi del segmento:

Si osservi, nel codice del metodo lunghezza(), l'uso del doppio punto in this.punto2.x e similari. Il significato è che 'x' è una proprietà di 'punto2' il quale a sua volta è una proprietà dell'oggetto corrente (this), cioè di segmento. Si noti come non esista possibile confusione fra la proprietà x di punto1 e la proprietà omonima x di punto2.

E' interessante osservare come l'oggetto segmento precedentemente definito viene usato nel codice seguente:

segmento.punto1.x = document.getElementById("x1").value;
segmento.punto1.y = document.getElementById("y1").value;
segmento.punto2.x = document.getElementById("x2").value;
segmento.punto2.y = document.getElementById("y2").value;
document.getElementById("ris").value = segmento.lunghezza();

Si noti anche in questo caso la notazione

oggetto1.oggetto2.proprietà
oggetto1.oggetto2.metodo()

usata per separare l'oggetto "principale" dal suo sotto-oggetto.

Un altro modo per considerare il problema è questo: la proprietà di un oggetto può essere un altro oggetto (il quale a sua volta può avere delle proprietà). E' evidente come in questo modo si crea una gerarchia potenzialmente infinita di oggetto-proprietà/oggetto-proprietà/oggetto....

La figura seguente dovrebbe chiarire i rapporti fra i vari elementi della nostra gerarchia di oggetti e sotto-oggetti:

Un'altra rappresentazione possibile di una gerarchia di oggetti fa uso di una struttura detta ad albero, che, nel nostro caso, assume la forma seguente:

rappresentazione ad albero

Ogni elemento si chiama nodo dell'albero. Nel nostro caso segmento, punto1, punto2, x e y sono tutti nodi (si osservi che possono esserci nodi con lo stesso nome). I nodi sono legati da relazioni gerarchiche espresse in questo modo: segmento è parent (genitore) di punto1 e punto2, i quali a loro volta sono child (figli) di segmento. Infine punto1 e punto2 sono nodi sibling (fratelli) in quanto condividono lo stesso parent.

Torneremo ancora sulla notazione ad albero per rappresentare una gerarchia di oggetti parlando di BOM e di DOM.

precedente - successiva

Sito realizzato in base al template offerto da

http://www.graphixmania.it