miércoles, 2 de abril de 2008

Encapsulamiento

Si todos los elementos tienen el mismo comportamiento e igual visibilidad que sentido tiene programar con la orientación a objetos


Si cuando se hace el diseño de una solución de software, todos los elementos que la componen se comportan de igual manera y tiene niveles de acceso sin restricciones, no estamos modelando con orientación a objetos y tenemos que replantear o el modelo o el paradigma sobre el cual deseamos plantear la solución de software.

Paquetes.
Los paquetes en java nos permiten agrupar clases por funcionalidad, y es el elemento que se asocia a las llamadas “librerías” o unidades de librerías.

Cuando se trabaja en c o c++, en la programación estructurada, y se requería de elementos ya implementados como librerías matemáticas, por ejemplo, se recurría a los “#include” para cargar dichas librerías y poder usar las diferentes funciones que nos brindan.

En java cuando deseamos cargar un grupo de librerías o una en especial, tenemos que conocer en que paquete están definidas, java nos proporciona la palabra reservada import para obtener los paquetes (package) donde se encuentran los elementos que necesitamos.

Existen dos formas de utilizar la palabra reservada import:

import java.util.*;


Lo que nos trae todas la clases definidas dentro del paquete o,

import java.util.Random;


Lo que nos trae la clase Random definida dentro del paquete.

Con la primera forma podemos usar dentro de nuestra clase las diferentes clases que se encuentran en java.util, por ejemplo podremos definir objetos de tipo Random o de tipo ArrayList; con la segunda forma solo tendremos a nuestra disposición la clase Random de java.util, pero las demás clases no.
Los paquetes en java también nos ayudan a evitar colisiones de nombre con otros paquetes creados por terceros, por ejemplo, si nosotros creamos una clase que nos permita manejar un vector y de hecho llamáramos esta clase como Vector, ya sabemos que java posee una clase dentro del paquete java.util que se encarga de esto como podría java diferenciar cual clase debe encargarse del manejo de los elementos de tipo Vector, eso se puede manejar con la declaración del elemento de la siguiente forma:
 
java.util.Vector v = new java.util.Vector();

si lo que deseamos es un objeto de tipo vector que se encuentra definido en java.util, si por el contrario deseamos uno basado en nuestra clase Vector entonces:

mipaquete.Vector v = new mipaquete.Vector();

evitando colisiones:
Una forma de evitar las colisiones entre nombres de paquetes es simular nombres de dominios en nuestros paquetes, por ejemplo podemos usar el dominio de nuestra universidad o empresa para evitar que nuestros paquetes tengan colisión de nombres con otros paquetes de java o con otros desarrollados por terceros, un ejemplo de esto seria algo como esto:

package co.edu.udistrital.miproyecto.logica;


Modificadores de acceso:


Los modificadores de acceso son palabras reservadas del lenguaje que nos permiten restringir la visibilidad y acceso a los elementos de nuestra solución de software. Existen 4 tipos de modificadores de acceso en java:

  • default - friendly (amistoso)
  • public (publico)
  • protected (protegido)
  • private (privado)

Estos cuatro elementos son aplicables a los atributos y métodos de nuestras clases y los dos primeros a nuestras clases en si, pero veamos que nos dice cada uno de ellos sobre la visibilidad de los elementos.

default: cualquier elemento declarado sin asignarle un modificador de acceso especifico, toma el nivel de acceso por defecto, este nivel es llamado el nivel amistoso o con visibilidad de paquete porque estos elementos se comportan como elementos públicos (cualquiera los puede ver) para la clase y todas las clases definidas dentro del paquete; pero se comportan como privados (nadie los puede ver) por fuera del paquete.

public: los elementos de tipo públicos son visibles desde cualquier parte, es decir se pueden leer o modificar des cualquier clase que conforme la solución de software.

protected: los elementos protegidos serán visibles para la misma clase y las clases que heredan de esta.

private: los elementos privados solo son visibles dentro de la clase que fueron declarados.

veamos como se ve esto en una tabla:



Clase Sub-clases Paquete Fuera del paquete
default si si si no
public si si si si
protected si si no no
private si no no no



Recordemos lo que nos reza el concepto de encapsulación:

Encapsular se refiere al hecho de ocultar la implementación es decir ocultar los atributos de nuestros objetos y hacer visibles los métodos que escriben o retornan dichos valores. De esta forma el usuario de la clase puede obviar la implementación de los métodos y propiedades para concentrarse sólo en cómo usarlos. Por otro lado se evita que el usuario pueda cambiar su estado de maneras imprevistas e incontroladas.

Entonces para garantizar este principio es necesario tener claros los conceptos revisados en este escrito y hacer buen uso de los modificadores de acceso y los paquetes de clases.

Qué reglas me ayudarían a garantizar la encapsulación de mis desarrollos?

  • Los atributos de las clases deben ser privados o protegidos.
  • Se deben crear métodos públicos para leer o escribir los valores de estos atributos (setters/getters)
  • Si las clases solo tienen funcionalidad dentro del paquete estas no deben ser públicas si no amistosas.

siguiendo estas reglas básicas podemos garantizar inicialmente la encapsulación en nuestros desarrollo.

13 comentarios:

Roberto Briones dijo...

Muy Util la información, interesante y muy bien explicada ;) Saludos!!

Anónimo dijo...

Gracias por ser tan claro en tu explicacion

alejo dijo...

Grcias por los comentarios, me animan a seguir publicando, nuevamente muchas gracias

Javier Hdez dijo...

Muy Buena la informacion Saludoss desde Qro

Jose dijo...

Gracias por la informacion que publicas

Anónimo dijo...

Este texto es muy bueno puedo decir que es excelente para alguien que este empezando a utilizar la programacion orientada a objetos, gracias.

Anónimo dijo...

hola yo quisiera saber un poco mas sobre la utilizacion de vectores y sobre
import java.util.*;
import java.util.Vector;

para ser mas especifico como crear un vector con esas clases, crear un contructor para el vector creado y poder retornar el valor del vector apenas voy empezando y se me dificulta un poco te lo agredeceria mucho gracias.

por si ocupas mi correo es jilio_nota@hotmail.com

Anónimo dijo...

mi brother que buena explicasion, pero cabe resaltar que el default no es un modificador de acceso, si no un comportamiento natural que toman los objetos a los que no se les asigna uno, de todas formas debo decir que estubo muy bien lo posteado

Anónimo dijo...

muy buen dato ...te sugeriria que escribas mas sobre java....

Anónimo dijo...

Good ωаy of desсribing, and fastidious
рarаgraph to take faсts оn the tοpic of my ρrеsentatiоn topіc, which i am going to deliver in univегsity.


Review my homepage; www.carrieraircon.co.uk

Anónimo dijo...

I think еvеrything ѕаiԁ was very logical.
But, ωhаt аbоut this? suppose уοu composeԁ a catchier
ρost titlе? I mеan, ӏ don't wish to tell you how to run your blog, but suppose you added a post title that grabbed people's
attentіon? I mеan "Encapsulamiento" іs kindа νanilla.

Yοu might look at Yahoo's home page and note how they write article titles to get viewers interested. You might add a video or a related picture or two to get readers excited about what you've got to ѕaу.
In my οpiniоn, it ωοuld bring your poѕtѕ а lіttle bit mοrе interеѕtіng.


Hегe is my web-site ... relevant Website

Anónimo dijo...

Havе you ever thought abοut іncluding a little bit moгe than ϳust your artiсles?

I mean, what you say is important аnd all.
But imaginе if you aԁԁed some great viѕuals оr viԁeos to give
your posts morе, "pop"! Yοur content is exсellent but with images and νideоs, this website
сould definitely be one οf the verу beѕt in its field.
Veгy good blog!

My ωebsite: V2 Cigs

Anónimo dijo...

Marte drehte sich um und stützte sich auf die Couch.

Es gibt sogenannte Cougar-Parties für reife damen und
junge Herren, Black and White-Parties, für Frauen mit Lust auf schwarze Männer und vice versa.
Kein Wunder, dass beim Schauen eines solchen Sexfilme der Liebes-Saft in alle Richtungen verschossen wird, weil alles hemmungslose Wichsen wird garantiert.


Willst du dir meine Web Seite anschauen? sexcam