Escapando del Interbloqueo
Publicado: 11:43 02/08/2006 · Etiquetas: · Categorías: Cursillo de POO
Un objeto es un elemento identificable que contiene características declarativas, utilizadas para determinar el estado del objeto, características procedimentales, utilizadas para modelar el comportamiento del objeto, y características estructurales, utilizadas para organizar los objetos con respecto a otros objetos de su entorno.

Identidad

La identidad es una propiedad de un objeto que lo distingue de todos los demás. Esta unicidad se consigue a través de unos identificadores de objetos (OID – object identifiers)

Los OIDs son independientes de los atributos que definen el estado del objeto y que normalmente se implementan a través de punteros. Generalmente los identificadores de objetos son generados por el sistema y no pueden ser modificados por el usuario.

Gestión de la Memoria

---- Pila (Stack)

La pila es la estructura en la cual solo se pueden incorporar o eliminar elementos por un solo punto denominado cima. Se utiliza para las llamadas a funciones, cuando se llama a una función se reserva espacio en la pila para los valores locales y los parámetros de dicha función.

---- Montículo (Heap)

El montículo es la parte de la memoria que no esta ligada a la llamada de funciones y en el cual la memoria se asigna cuando se solicita expresamente (a partir del operador new en Java).

---- En OO

Para una mayor eficiencia, la pila almacena tipos básicos cuyo tamaño es conocido en tiempo de compilación (int, float, double, etc.) entre los que se incluye el tipo puntero.

Los objetos se implementan como punteros que residen en la pila pero que apuntan a una zona de memoria del montículo.

Comparación de Objetos

Los tipos de comparación que podemos distinguir son:

---- Identidad

Dos objetos son idénticos si y solo si son el mismo objeto, es decir, tienen un mismo OID.

---- Igualdad

Dos objetos se consideran iguales si, a pesar de ser objetos distintos (con distinto OID), sus atributos son idénticos.

El problema se plantea con los objetos compuestos (objetos que contienen otros objetos) y que hace que se distingan dos tipos de igualdad: igualdad superficial e igualdad profunda.

En la igualdad superficial (shallow): dos objetos son superficialmente iguales si los atributos de los objetos son idénticos. Es importante destacar que esta definición no es recursiva.

En la igualdad profunda (deep): dos objetos son profundamente iguales si sus atributos son recursivamente iguales.

Clonación de Objetos

En la clase Object existe un método clone que permite realizar copias superficiales, pero debido a que las copias superficiales son peligrosas de manejar, se ha protegido la ejecución accidental de este método de varias maneras: tiene visibilidad privada, por lo que hay que redefinirlo con visibilidad publica; y la clase que lo redefine debe de implementar la interfaz de marcado Cloneable (que curiosamente no contiene el método clone)

Puede ser mas sencillo clonar los objetos a través de constructores de clonado (aunque ahora no podemos ayudarnos del método clone de Object)  si el objeto no es muy complejo, hacer un clon resultara sencillo.

Recomendación: Los objetos siempre deberían saber clonarse a si mismos (no es recomendable que la tarea de clonación se delegue a un objeto externo). Para ver más sobre este tema:

developer.java.sun.com/developer/Books/effectivejava/Chapter3.pdf

Especificadotes de Acceso

Un objeto se define como sigue:

[especificadorAcceso][Modificadores] tipo nombreVariable [= valor_inicial];

A continuación expongo una lista de los especificadotes de acceso y desde donde pueden ser vistos:

public: se puede acceder a el desde: la misma clase, una subclase del mismo paquete, una subclase de otro paquete, otra clase del mimo paquete y otra clase de otro paquete.

protected: se puede acceder a el desde: la misma clase, una subclase del mismo paquete, una subclase de otro paquete y otra clase del mismo paquete.

por defecto (paquete): se puede acceder a el desde: la misma clase, una subclase del mismo paquete y otra clase del mismo paquete.

private: solo se puede acceder a el desde la misma clase.

Ortodoxia de la OO

Los atributos deben declararse privados y su acceso solo debe ser posible a través de métodos públicos de lectura/escritura. Los motivos de este modo de actuar son:

• Control de acceso: Se puede controlar el acceso a los atributos y, por ejemplo, no permitir su modificación si no se cumplen ciertas condiciones.

• Limitar la propagación de modificaciones: Mantener a los atributos abiertos a su acceso directo al exterior complica la posterior modificación de estos atributos. Si el atributo es definido como privado, un cambio en sus características solo afectaría a su propia clase y no a las clases clientes (siempre y cuando no suponga cambios en los métodos de acceso).

En Java, la visibilidad por defecto de los atributos es “package” que es bastante permisiva y, quizás, no la mas adecuada.

Hay que tener especial cuidado con los métodos de acceso que devuelven referencias de atributos privados, ya que rompen la encapsulacion.

Modificadores

Los modificadores existentes son:

static: para definir atributos de clase.
final: para definir constantes. Pueden inicializarse al definirlas o en el constructor (“blank finals”).
transient: no es una parte persistente del estado del objeto.
volatile: es modificado de forma asíncrona.

Atributos de Clase

Un atributo de clase puede ser visto como un atributo que no pertenece a una instancia concreta de una clase, sino que pertenece a la clase misma, aunque es accesible por todas las instancias. Es decir, es un atributo compartido por todas las instancias de la clase.

Los atributos de clase, al no pertenecer a ninguna instancia en concreto, pueden existir aunque no hayamos instanciado ningún objeto de la clase.

Atributos Constantes

Se definen a través de la palabra clave final. Nos permiten desarrollar el código de forma mas clara, ya que evitan el uso de “números mágicos” (es mucho mas claro el uso de la constante PI que el uso de su valor numérico).

Las constantes, además de final suelen declararse como static, pues suelen ser valores que se comparten entre todas las instancias de una clase y, al no variar, no es necesario que cada instancia almacene una copia del valor.

Existen ocasiones en las que cada instancia de una clase almacena un valor distinto en una variable constante. Java permite hacer esto a través de los llamados “blank finals”, es decir, variables que se declaran constantes y a las cuales se les puede dar valor, aunque únicamente un vez (normalmente en el constructor de la clase).

Hasta aqui por ahora, espero que os esté resultando interesante.

Un saludo.
2 comentarios :: Enlace permanente
Compartir Compartir
FacebookCompartir
TuentiCompartir en Tuenti
MenéameMenéame Enviar
Comentarios: (del primero al último)
11:45 02/08/2006
No entiendo casi ni papa XDDD
13:21 02/08/2006
XD Entonces, supongo que me stas dando a entender que me explico mal, ¿no?

La verdad, es que es un tema un poco lioso, espero que de aqui en adelante empiece a ser un poco mas sencillo, ademas que se entendera mejor cuando avance un poco en el curso de Java, que lo tengo un poco abandonado, pero ya lo dice el refran, "el que mucho abarca, poco aprieta"
Participa con tu Comentario:

Este blog no permite comentarios.

Escapando del Interbloqueo

Jordav
Blog de Jordav
Blog de Jordav

Posts destacados por el autor:
· Mi twitter @dlopezmartin
· Índice


Últimos comentarios:
Jordav
Jordav hace semanas
Sr.A
Sr.A hace semanas
Jordav
Jordav hace semanas
Sr.A
Sr.A hace semanas
milinagi
milinagi hace semanas
Jordav
Jordav hace semanas




Blogs amigos:
Cardesin
Eisberg
Glitch
Noid


Categorías:
Anime
Cursillo de Auditoria Informatica
Cursillo de Dibujo de Manga
Cursillo de Java
Cursillo de POO
Desvarios varios
Eclipse
Fate Stay Night
Libros
Mi Colección
Musica
Películas
Programacion
Series TV
Videojuegos y Foro


Archivo:
Junio 2013
Mayo 2013
Abril 2013
Marzo 2013
Febrero 2013
Enero 2013
Diciembre 2012
Noviembre 2012
Octubre 2012
Septiembre 2012
Agosto 2012
Julio 2012
Junio 2012
Mayo 2012
Abril 2012
Marzo 2012
Febrero 2012
Enero 2012
Diciembre 2011
Noviembre 2011
Octubre 2011
Septiembre 2011
Agosto 2011
Julio 2011
Junio 2011
Octubre 2010
Noviembre 2008
Octubre 2008
Septiembre 2008
Agosto 2008
Julio 2008
Junio 2008
Mayo 2008
Abril 2008
Marzo 2008
Febrero 2008
Enero 2008
Diciembre 2007
Noviembre 2007
Octubre 2007
Septiembre 2007
Agosto 2007
Julio 2007
Junio 2007
Mayo 2007
Abril 2007
Marzo 2007
Febrero 2007
Enero 2007
Octubre 2006
Septiembre 2006
Agosto 2006
Julio 2006
Junio 2006


Vandal Online:
Portada
Blogs
Foro

Blogs en Vandal · Contacto · Denunciar Contenido