martes, 7 de junio de 2011

Polimorfismo


Polimorfismo


El polimorfismo es una técnica que está ligada a la orientación a objetos, especialmente a la herencia y la jerarquía de clases. Bueno primero vamos a tratar de definir el concepto el cual es uno de los más complejos desde mi punto de vista de entender.
Primero vamos a ver qué quiere decir esta palabra.

Poli: Esto quiere decir mucho.

Morfismo: Esta es formas.

Teniendo estos dos conceptos con los cuales podríamos afirmar que polimorfismo quiere decir muchas formas. ¿Pero qué quiere decir esto realmente en la programación orientada a objetos? Bueno lo que esta técnica nos permite es cambiar de un tipo de objeto a otro por medio de la herencia, es decir, que podemos crear un objeto de un tipo y dependiendo de las necesidades podemos hacer que este cambie otro tipo.

Veamos un ejemplo .
Tenemos un objeto de tipo estudiante el cual va a realizar una serie de procesos. Podemos ver un historial del estudiante que nos mostraría todas las calificaciones del mismo.  Pero qué pasa si queremos que ese mismo objeto ahora sea un empleado y que historial lo que muestra es todos los pagos que se le realizaron a este empleado.

Tendríamos que crear dos objetos diferentes para poder hacer esto. Ahora si queremos guardar una lista de estudiantes  y empleados tendríamos que crear dos estructuras para poder almacenar estos dos tipos de objetos, pero gracias al polimorfismo podríamos crear una sola estructura que almacene los dos tipos de objetos.

Lo que tenemos que notar es que el método verHistorial() que queremos desarrollar va existir en ambos objetos pero dependiendo del tipo de objeto que deseamos llamar es como se va a comportar este método.

Para poder realizar esto debemos inicialmente definir una clase base para las dos clases (empleado, Estudiantes), comúnmente conocida como clase interfaz, esta clase base es la que vamos a usar para poder ejecutar el comportamiento polimórfico es decir que desde la clase base es donde vamos a poder definir los comportamientos de los objetos.

Tip: Esta clase base puede ser abstracta, no abstracto o una interfaz.

Este comportamiento básicamente son los métodos que vamos a poder ejecutar. Ahora para poder hacer que nuestros objetos funcionen de manera polimorfa debemos definir los métodos al menos como abstractos y/o en una interfaz.

Tip: Los métodos y variables que no se encuentren en la clase base no van a poder ser usados de forma polimorfa.

Etiquetas:

Clases abstractas



Estas clases por lo generan presentan una estructura de métodos y variables, es decir, una definición de trabajo que se usara como base para las demás clases. Podemos decir que es el concepto de lo que deseamos desarrollar en las clases hijas cuando heredan de las clases abstractas. Estas clases pueden tener método activos y métodos no activos.

·         Las clases abstractas se usan como súper clases
·         Esta clase tiene métodos abstractos.
·         Las clases abstractas no pueden ser instanciadas.
·         Tiene una definición de cómo implementar las subclases.
·         No se pueden implementar métodos abstractos si la clase no se declara como abstractos.
·         Las clases hijas de las clases abstractas deben de implementar los métodos abstractos.
·         Las clases abstractas deben de utilizar la palabra reservada abstract.

En cuales casos es bueno el manejo de clases abstractas

·         Cuando se requiere crear una estructura de trabajo
·         Cuando se requiere que las clases hijas implementen métodos necesarios para las tareas.
·         En las tareas donde se pueden agrupar variables en una clase y métodos pero estos métodos no funcionan igual en ninguna de las clases hijas.
·         Para obligar a los programadores de utilizar una metodología de desarrollo que tiene que seguir una serie de métodos.
Clases finales
Las clases finales las definimos cuando no queremos que estas clases sean utilizadas como super clases por otras clases. Es decir, que estas clases no se pueden derivar.
Estas clases son las últimas en la jerarquía de clases puesto que no permite que otros las utilicen en herencia.
Otra de las características de estas clases es que tienen implícito sus métodos como finales.
Otros usos de la palabra reservada final
Las variables que se declaran con la palabra reservada final no pueden cambiarse en toda la ejecución del sistema.
Los parámetros de los métodos se pueden declarar final, y estos no permiten que sean cambiados a los largo de todo el método.
Métodos finales estos métodos no se pueden supeditar.

Etiquetas:

Excepciones

Cuando nosotros estamos desarrollando programas por lo general no es para nuestro propio uso. En la mayoría de los casos desarrollamos programas para otras personas y ellos no saben cómo están diseñados internamente. Por lo que pueden ingresar cualquier tipo de información. Esta información que se le está enviando al sistema puede ocasionar que este falle por muchas diferentes razones.

Nosotros tenemos que prestar mucha atención a instrucciones que puedan ocasionar que nuestro sistema termine de una manera incorrecta. Cuando nosotros identificamos las posibles fallas que el sistema puede tener las intentamos validar de manera que no ocurra una caída del sistema.

Pero siempre se nos puede escarpar una falla o el usuario siempre pueden encontrar una forma de hacer que nuestro sistema falle. Para esos momentos, es cuando los programadores queremos proteger el sistema de todas estas posibles caídas inesperadas.

Lo que siempre se desea es que el sistema no se detenga, que siempre continúe corriendo a pesar de las excepciones que ocurran. Siempre se busca la continuidad.

El manejo de errores es una de las partes críticas en nuestro diseño de aplicaciones. Ya que no podemos asegurar que siempre nuestra aplicación va hacer uso correcto de llamadas a objetos con los que podría provocar un error o los datos van a poder funcionar correctamente como los usuarios los digitaron.

Cuando se encuentra un error el programa tiene varias opciones que puede realizar para manejarlo:

• La aplicación podría decidir si terminar cuando aparece el error
• Ignorar, esto esperando que no se presente otra vez.
• Finalmente, se podría buscar la forma de establecer una señal de error.

Cuando hablamos de formas de señales de error esto es para poder determinar el tipo de error lanzado y/o terminar el programa.

Java no nos permite ignorar los errores pero si nos da la facilidad de atrapar errores y su tipo de mensajes que lanzan las excepciones y de esta manera poder continuar con la ejecución de programa sin que tenga terminaciones indeseadas.

Cuando las aplicaciones en java están corriendo y se encuentra un error se lanza (esto se hace por medio de la palabra reservada throws). Esto se realiza en la primera línea de código donde sucedió el problema. Entonces el manejador de errores entra en el juego, ya que de manera automáticamente se buscan algún código que controle la excepción que se lanzó. Todo esto para que las excepciones sean manejadas de manera correcta. Este proceso es conocido como atrapar una excepción.

Si ocurre una excepción y esta no es capturada en el bloque de código donde ocurre, el error se propaga por todo el sistema buscando el siguiente bloque de código que pueda manejar a la excepción.

Los errores deben ser atrapados en el lugar de ocurrencia, esto para que la trazabilidad sea más simple. Es más complejo si los errores se dispersan por el programa. Esto porque los síntomas del error puede no indicar la raíz del problema.

Algunas desventajas del manejo de excepciones

• Añadir código para el manejo de errores
• El código de manejo de errores hace más difícil la lectura de la lógica ya que está mezclado con este.
• Esto incrementa su tamaño en el ejecutable del sistema.

En java tenemos diferentes formas de manejar las excepciones, la primera que vamos a mencionar es try. Con la palabra reservada try intentamos ejecutar un bloque de código que podría tener algún tipo de fallo. Luego para poder atrapar la excepción dentro que sucede en el bloque de código que se está ejecutando tenemos la palabra catch que nos permite capturar diferentes tipos de excepciones. Y luego tenemos la palabra finally, con esta podemos hacer rutinas que permitan evitar errores futuros. Por ejemplo se pueden cerrar archivos que no deberían quedar abiertos para que puedan ser utilizados por otras rutinas.

Luego tenemos throw, esta es la expresión que le indica a java que puede disparar una excepción. Y finalmente tenemos throws esto nos indica las diferentes excepciones que pueden ser disparadas por un método.

Etiquetas:

miércoles, 1 de junio de 2011

Redes Convergentes


La tecnología está cambiando de una manera muy acelerada alrededor del mundo. Todos tanto personas como empresas tienen participación en la red. Con esta gran cantidad de información que se moviliza, nacen más necesidades a nuevos y mejores servicios. Con estas nuevas necesidades nacen herramientas para solventar estos requisitos.
Cada día se busca implementar formas de mejoramiento de la red y tratar de hacer que esta integre muchas más tecnologías e importante medidas de reducción de costos en las operaciones. Entre muchas de las ventajas que se están buscando es poder tener los servicios en cualquier parte del mundo en donde yo me encuentre conectado. Sistemas distribuidos, seguros y que nos permitan trabajar con solo una conexión de Internet disponible.
Nuestro mundo competitivo, creciente y cambiante demanda cada días más de esas características en la red. Queremos que nuestras redes puedan crecer con nosotros y nuestros negocios. Las redes deben ser capaces de cambiar con forme nuestro negocio cambia y nuestro estilo de vida.
Este crecimiento de la red la podemos ver todos nosotros en nuestra vida cotidiana y vemos la necesidad que las redes crezcan brinden más y mejores servicios. Por ejemplo cuando yo estaba en el colegio recuerdo que trabaja con una red de 54 Kb y los servicios que teníamos eran muy limitados si los comparamos con lo que nosotros tenemos hoy en día. Otra de las desventajas que teníamos era que no podíamos utilizar el teléfono e Internet al mismo tiempo. Pero hoy en día nos conectamos a Internet y no nos percatamos si el teléfono está siendo utilizado o no.
Los servicios que usábamos en esa época era correo electrónico, ver contenido, algunos servicios de chat. Pero hoy en día tenemos mucha más herramientas que nos permite ver videos, tener video conferencias desde cualquier parte del mundo, redes sociales y algo muy importante compartir grandes volúmenes de información.
Como usuarios finales lo que realmente queremos es poder llegar a una terminal de red y tener acceso a todos los servicios sin importar el número de computadoras que estén conectadas a la red. Queremos tener nuestros teléfonos IP, poder hacer nuestro trabajo con los servicios locales pero a su vez el acceso a los servicios remotos. Nosotros lo que queremos ver es videos, escuchar radio, tener terminales remotas y en estos tiempos se está haciendo más popular el “claud computing”. Todos estos servicios los queremos disponibles en un solo nodo y que nuestros servicios no sean interrumpidos.
Regresando a mi ejemplo solo que esta vez en mi vida laboral, yo puedo trabajar desde mi casa y lo único que requiero es de una conexión a Internet y cuando mi equipo está conectado a la red mi experiencia laboral es la misma. Todo lo puedo hacer por medio de mi computadora. Es decir, puedo ver las terminales remotas y los sistemas y servicios a los que estoy acostumbra a utilizar desde mi cubículo laboral. Para yo poder realizar mi trabajo lo que requiero es poder conectarme a una red privada y a los servidores remotos que están en una “nube” en otro lugar fuera de nuestro país.
Entonces como hemos visto un crecimiento en la red y como los servicios que esta nos brinda y nos brindara en el futuro, parece que todos nuestros datos serán enviados por medio de una única red que nos permite manipular todo tipo de datos.
Centralizando la red podemos tener un solo canal de comunicación para las diferentes tareas que debemos realizar a la hora de hacer nuestro trabajo.
Para toda esta complejidad, volúmenes de datos y servicios que deseamos tener en nuestras redes se requiere de equipo especializado, personal especializado y software especializado para poder construir estos tipos de redes.
Este tipo de redes hace referencia a las redes que pueden transmitir voz, video y datos. Estas redes están basadas en protocolos sobre IP.
Los servicios de datos y voz se estaban transmitiendo de manera separa por redes especializadas para cada uno de estos servicios.
Antes los servicios de voz se enviaban por una red basada en PBX (private Branch eXchange) conectados a la PSTN (Public Switched Telephone Network) externa. Pero los datos se estaban enviando por medio de redes LAN que se conectaban entre sí utilizando protocolos IP.
Pero la necesidad de tener una red en la que se puedan enviar estos tipos de datos de una manera natural es cada vez mayor. Esto con la idea de solo tener que administrar una solo red y que los costos de mantenimiento sean cada día mejor. Sin olvidar la productividad y poder reducir los tiempos de espera de los clientes.
Inicialmente se considero utilizar la red basada en PBX para hacer la convergencia, sin embargo se noto que para poder hacer esta convergencia se requería de la conmutación de paquetes. ATM y Frame Relay los cuales son dos opciones a considerar para las redes convergentes. Sin embargo, el creciente uso de Internet y las mejoras en los protocolos IP están haciendo que las redes convergentes se puedan implementar por medio de este.
“En efecto, la aplicación del protocolo IP para la transmisión integrada de voz y datos es un concepto que ha revolucionado a la industria de las telecomunicaciones, elevando la posición de la Internet a un plano de competencia comercial. Sobre la Internet ya se pueden ofrecer servicios de transmisión de voz, a precios muy inferiores a los tradicionales, gracias al desarrollo de aplicaciones de tiempo real sobre IP. De hecho se espera que en el 2006 más de 50% de las líneas telefónicas comerciales contratadas en los Estados Unidos sean líneas IP.” [1]
Incluso con nuestros grandes avances en tecnología, para las redes de convergencia existen limitaciones que se deben superar con el paso del tiempo ya que la idea de múltiples tipos de datos crea complejidad, porque existen datos con diferentes características que requerirán de especiales tratamientos a la hora que son manejados.
“Por ejemplo, los datos se presentan en ráfagas que consumen grandes volúmenes de ancho de banda durante cortos intervalos de tiempo, mientras que el tráfico de voz requiere un ancho de banda constante y un bajo retardo de transmisión.”[2]
Para poder llevar a cabo una transición de voz, la cual demanda muchos recursos de la red, se utilizan circuitos especializados que son TDM (estos son circuitos basados en multiplexaje por división de tiempo).
Por otro lado se ha encontrado que el tráfico de datos es muy grande y está creciendo de manera exponencial mientras que el de voz está creciendo de manera lineal.
Esto nos indica que los proveedores de comunicaciones deben buscar nuevos y mejores servicios para poder mantener la porción de mercado que ya tienen y buscar nuevos clientes. Mientras que los fabricantes de hardware para redes deben buscar la innovación en sus equipos y sistemas para que tengan una oportunidad en este mercado tan cambiante y dinámico que estamos viviendo actualmente.
Esta nueva idea de convergencia de redes hace que tanto las tecnologías para móviles como redes inalámbricas y alámbricas tengan grandes retos a la hora de empaquetar los datos por medio de los protocolos de IP.

Como podemos ver en esta figura tenemos una red convergente que permite el envió de diferentes servicios por una única red. Todo está basado en comunicaciones IP.
Para poder entender mejor que es una red de convergencia basada en el protocolo IP tenemos que tomar en cuenta 3 factores claves:
La red por donde enviamos datos debe ser capaz de soportar múltiples servicios
La arquitectura de red basada en protocolos IP debe ser multipropósito.
La red debe estar implementada en estándares y protocolos internacionales maduro y aceptado.
Para poder liderar con los problemas que teníamos en VoIP se debe de utilizar protocolos de MPLS (multiprotocol label switching).
MPLS nos ayuda a hacer tareas complejas de ingeniería de tráfico y funciones de calidad de servicio. Esto se logra porque separa las funciones de enrutamiento y conmutación.
Para poder enviar nuestros paquetes por el protocolo de IP MPLS los encapsula para que puedan viajar por toda la red, esto lo hacen por una red conexión virtual llamada LSP (label switched path). Para poder implementar este tipo de redes se requiere de un hardware especializado que se llama LSRs (labe switched routers). Y los enrutadores que trabajan en ingreso y egreso del dominio en
MLPS se llaman E-LSR (edge label switched router).
Estos son los pasos de cómo funciona la arquitectura MPLS:
  1. Antes de iniciar la conmutación se establece los LPS en los enrutadores de ingreso.
  2. Los E-LSR calculan las rutas que seguirán los paquetes por enviar
Adicionalmente, el protocolo MLSP tiene la funcionalidad de reservar recursos con ingeniería de tráfico (RSVP-TE) o enrutarlos con distribución de etiquetas (CR-
LDP).
Una de las ventajas que podemos ver con este protocolo es que el ancho de banda es dinámico dependiendo de las necesidades de los datos que se están transmitiendo y los caminos virtuales pueden ser liberas o establecidos dependiendo de su necesidad.
Para proporcionar calidad de servicios la IETF[4] ha estandarizado protocolos de servicios diferenciados en su arquitectura. Los paquetes son agrupados o se pueden colocar con los paquetes de los mismos servicios por medio de un encabezado que indica el tipo de servicio del paquete. Esto con el fin de garantizar los recursos y los tipos de servicios que corresponden a cada paquete.
Si queremos enviar voz se pue
den definir una serie de características que se agrupan en una clase que pueda manejar este tipo de servicio.
Qué tipo de servicios se pueden agrupar para un servicio de voz:
Bajo retardo
Variedad mínima en su retardo
Sin olvidar que podemos establecer el ancho de banda que el servicio requiere.
Con esto podemos garantizar un mejor servicio en trafico de voz, ya que los paquetes pueden tratarse de la misma manera y
así evitar que unos sean manipulados de una forma que no son manipulados los otros o simplemente no se les dé el trato correcto por no saber qué tipo de servicio es el que se está tratando.
Algunas de las ventajas que podemos observar con las redes convergentes son:
Todo el trafico de la red se maneja por medio de IP
La complejidad se reduce
Flexibilidad de la red
Se pueden tener muchas herramientas que aumentan la productividad
Se puede tener más servicios
Los servicios se pueden
mejorar
Se pueden consolidar muchas aplicaciones empresariales.

IP/MPLS es clasificado por su relación en la función que realizan. Donde podemos encontrar la siguiente clasificación:
P(Provider): Estos son los nodos que solamente conoce el proveedor de servicios. Es decir, que están conectados solo con otros nodos del proveedor de servicios. Esta es la conexión física de los nodos.
PE (Provider Edge): Estos nodos son los que hacen la comunicación con el cliente. Estos están entre los nodo
s P y los nodos del cliente.
Existen dos tipos de presentación para los servicios que están presentes en la arquitectura de este protocolo los cuales son:
POP primario: En este tipo podemos encontrar nodos P
POP secundario: En este tipo no tenemos nodos P. Solo podemos tener nodos PE
Vamos a ver una serie de topologías que podemos implementar en las redes convergentes.
Para poder implementar este tipo de arquitectura se requiere tomar en cuenta las siguientes hipótesis:
  • Para los POP primarios
    • Tiene que existir redundancia en los cuales dos routes locales de tipo P se conectaran para poder así realizar la redundancia.
    • PE no pueden tener ningún tipo de conexión directa.
    • A los routers se le hará un full mesh. Y la evolución de la red dependerá de las necesidades del tráfico de red.
  • POP secundarios
    • Se deberá crear una conexión full mesh entre los router PE con sitios que cumplan funciones similares.
    • Se tendrá dos conexiones o más de los POP a todos los routes P de dos POPs primarios diferentes.
    • Los puertos d e los routes P deberán ser repartidos de una forma equiparada.






Algunas de las ventajas que se pueden presentar con este tipo de topología son:
  • Todo el tráfico que vieja por nuestra red queda confinado a los POPs primarios. Por esto nos hace la búsqueda de fallos de manera más simple
  • Cuando se requiere actualizar algún POP secundario a uno primario la tarea se puede realizar de una forma sencilla.
  • Permite tener una mejor redundancia en las conexiones locales.
  • Los PEs que se encuentran en los POPs primarios no tendrán porque tener más problemas con tendido de fibra óptica oscura.
  • Los equipos auxiliares se pueden conectar de una forma más simple.
Algunas de las desventajas que podemos encontrar son:
  • Para poder realizar la tarea de cambiar algún POP secundario a uno primario requiere de dos equipos P.
  • La carga para poder habilitar un POP terciario se debe de balancear. Y esto se logra con el cambio de conexión en los POP secundarios.
Para poder definir este tipo de arquitecturas se debe definir la siguiente configuración:
· POP primarios
o No se permite más de un router P para cada POP primario.
o Los POP deben estar agrupados por regiones
o Los PE que se encuentran de forma local deben tener en un extremo un nodo P local y en el otro un P regional.
· POP secundarios
o Mantiene una configuración similar a la anterior pero con la diferencia que los PE tienen que estar conectados a dos Ps que se van a ubicar en su misma región.
[6]






Algunas de las ventajas que podemos encontrar son:
  • Se maximiza la cantidad de POPs
  • Mayor redundancia geográfica
  • Simplicidad para ver la conexión de los POPs secundarios con los primarios por su región.
Algunas desventajas:
  • Existencia de tráfico entre de PEs locales de POPs primarios que no son transmitidos por P locales.
  • Fibras oscuras[7] para la conexión de los PEs
Aquí se debe definir la red en 3 regiones
  • POP primarios
    • Los POPs primarios pertenecerán a dos regiones
    • Solo un router P por POP
    • Los PE tendrán dos conexiones una entre un P local y al otro lado con P de algún otro POP primario.
  • POP secundario
    • Una configuración similar a la arquitectura anterior pero con la diferencia que los PE se tienen que conectar a dos routers P.








Algunas de las ventajas que podemos encontrar son:
  • Dos caminos independientes de fibra para cada POP secundario hacia los POPs primarios en su zona.
  • División equitativa.
  • Simplicidad de criterios para determinar conexiones de los POPs secundarios
  • Reducción de equipo
Algunas desventajas:
  • Se puede tener tráfico en POPs primarios entre PEs que no provienen de Ps locales.
  • Mayor uso de fibras oscuras
Como podemos observar en el documento tenemos una gran revolución en el cambio de tecnología que se va a utilizar en las futuras redes.
Las compañías quieren tener más servicios, por menos costo y de mayor calidad. Sin olvidar el punto importante que todo este viajando por una sola red de datos.
Para poder realizar esta tarea de tener una única red de datos por donde viaja todo el tráfico de las empresas debemos invertir dinero en infraestructura, equipos de cómputo y personal capacitado para poder implementar este tipo de redes.
Cada empresa en particular tendrá sus propias necesidades y limitación por lo que podemos ver que estas redes convergentes tiene diferentes formas de ser implementadas dando así una oportunidad a las empresas de buscar la que más se ajuste a su tipo de negocio.
Pero no solo el hardware que se utilizara es importante, sino también el software que se puede implementar para la administración de este tipo de redes.
Importante mencionar que como se pudo observar se cuenta con protocolos bien definidos y lo más importante son protocolos internacionales. Esto quiere decir que cuenta con el respaldo de muchas empresas que posiblemente tiene ya implementadas de este tipo de redes.
Bibliografía
Ángela Marcela Mejía Fajardo (2004). Redes Convérgeles. Universidad Militar Nueva Granda.
Marcelo Abreu (2008). Análisis de arquitectura para un Core IP/MPLS. Universidad de Montevideo.

[1] Articulo Redes convergentes. Ángela Marcela Mejía Fajardo.
[2] Articulo Redes convergentes. Ángela Marcela Mejía Fajardo.
[3] VoIP como tecnología habilitadora de la red de convergencia. Tomado del artículo Redes Convergentes.
[4] Internet Engineering Task Force
[5] Topología colapsada. Tomada del articulo Análisis de arquitectura para un CORE IP/MPLS.
[6] Topología distribuida en dos regiones. Tomada del artículo Análisis de arquitectura para un CORE IP/MPLS.
[7] “Fibra oscura es la denominación popular que se atribuye a los circuitos de fibra óptica, que han sido desplegados por algún operador de telecomunicaciones, pero no están siendo utilizados. La conectividad por la fibra se comercializa en bruto, de manera que es el propio cliente quien aplica la tecnología de transmisión que más se adecua a sus necesidades, mejorando así el rendimiento obtenido puesto que se evitan conversiones innecesarias de protocolos.” Tomado de Wikipedia
[8] Topologías distribuidas en tres regiones. Tomada del artículo Análisis de arquitectura para un CORE IP/MPLS

¿Quieres aprender java y C#?

Etiquetas: