Mostrando entradas con la etiqueta Diseño Orientado a Objetos. Mostrar todas las entradas
Mostrando entradas con la etiqueta Diseño Orientado a Objetos. Mostrar todas las entradas

lunes, 3 de diciembre de 2018

Excepciones en Java 1/2

El artículo a continuación es una traducción y resumen del tutorial facilitado por Oracle, con algunos aportes personales.

Partamos por la definición.
Una excepción es un evento, que ocurre durante la ejecución de un programa, que interrumpe el flujo normal de las instrucciones del programa. 
Ahora bien, ¿Qué pasa cuando ocurre durante la ejecución uno de estos eventos?, realmente lo que ocurre es que el método donde se origina la excepción crea un objeto y lo entrega al sistema de tiempo de ejecución. El objeto, llamado objeto de excepción, contiene información sobre el error, incluido su tipo y el estado del programa cuando ocurrió el error. Crear un objeto de excepción y entregarlo al sistema de tiempo de ejecución se llama lanzar una excepción.

Después de que un método lanza una excepción, el sistema de tiempo de ejecución intenta encontrar algo para manejarlo. El conjunto de posibles "cosas" para manejar la excepción es la lista ordenada de métodos que se habían llamado para llegar al método donde ocurrió el error. La lista de métodos se conoce como la pila de llamadas.


El sistema en tiempo de ejecución busca en la pila de llamadas un método que contenga un bloque de código que pueda manejar la excepción. Este bloque de código se llama un controlador de excepciones (exception handler). La búsqueda comienza con el método en el que se produjo el error y continúa a través de la pila de llamadas en el orden inverso en que se llamaron los métodos. Cuando se encuentra un controlador adecuado, el sistema de ejecución pasa la excepción al controlador. Un controlador de excepciones se considera apropiado si el tipo del objeto de excepción lanzado coincide con el tipo que puede manejar el controlador. Se dice que el controlador de excepciones elegido captura la excepción. Si el sistema en tiempo de ejecución busca exhaustivamente todos los métodos en la pila de llamadas sin encontrar un controlador de excepción apropiado, como se muestra en la siguiente figura, el sistema en tiempo de ejecución (y, en consecuencia, el programa) termina.


El requisito de captura o especificación

Java válido debe cumplir con el requisito de captura o especificación. Esto significa que el código que podría generar ciertas excepciones debe estar incluido por uno de los siguientes:

  • Una declaración try que atrapa la excepción. try debe proporcionar un controlador para la excepción (catch).
  • Un método que especifica que puede lanzar la excepción. El método debe proporcionar una cláusula throws  que enumera la excepción o excepciones que puede lanzar el método.
El código que no cumple con el requisito de captura o especificación no se compilará.

No todas las excepciones están sujetas al requisito de captura o especificación. Para entender por qué, debemos observar las tres categorías básicas de excepciones, de las cuales solo una está sujeta al Requisito.

  1. Excepción comprobada (checked exception) : Estas son condiciones excepcionales que una aplicación bien escrita debe anticipar y recuperar. Las excepciones comprobadas están sujetas al requisito de captura o especificación. Todas las excepciones son excepciones verificadas, excepto aquellas indicadas por Error, RuntimeException y sus subclases.
  2. Error :  Son condiciones excepcionales que son externas a la aplicación y de las cuales la aplicación generalmente no puede anticipar o recuperar. Los errores no están sujetos a los requisitos de captura o especificación. Los errores son aquellas excepciones indicadas por Error y sus subclases.
  3. Excepción de tiempo de ejecución (RuntimeException) :  Son condiciones excepcionales que son internas a la aplicación y de las cuales la aplicación generalmente no puede anticipar o recuperar. Estos suelen indicar errores de programación, como errores lógicos o uso incorrecto de una API. Las excepciones de tiempo de ejecución no están sujetas al requisito de captura o especificación. Las excepciones de tiempo de ejecución son aquellas indicadas por RuntimeException y sus subclases.
Debido a que este artículo se ha extendido un poco lo dejare hasta acá y seguiremos en Excepciones en Java 2/2 donde abordaremos los bloques necesarios para controlar una excepción.

miércoles, 14 de noviembre de 2018

Programación Orientada a Objetos (POO) desde un Enfoque Simple

Este paradigma es descubierto en el año 1966, por Ole Johan Dahl y Kristen Nygaard, dos años antes que la programación estructurada, pero es adoptado después de esta.

Dentro de la POO existen dos conceptos claves.
  • Clase: Modelo o plantilla a partir del cual podemos crear los objetos.
  • Objeto: Un objeto es una unidad de software de estado y comportamiento relacionados, también puede describirse como la instancia de una clase.
Profundicemos un poco en los objetos, estos a menudo se utilizan para modelar los objetos del mundo real, esto incluye conceptos, cosas tangibles e intangibles que se encuentran en la vida cotidiana. Los objetos del mundo real comparten dos características: 
  • Estado 
  • Comportamiento
Por ejemplo, los perros tienen estado (nombre, color, raza, hambre) y comportamiento (ladrar, buscar, menear la cola). Un objeto almacena su estado en campos, atributos o variables  y expone su comportamiento a través de métodos o funciones, los métodos operan el estado interno de un objeto, pero para que dicho objeto o una clase realice alguna acción se debe enviar un mensaje, pero no basta con esto, ya que, para que el objeto o la clase procese el mensaje que recibe, debe poseer un método de coincidencia. Ilustremos lo anterior con un ejemplo escrito en Java.

Automovil auto = new Automovil();
auto.encender();

Como podemos ver, creamos a partir de la clase Automovil un objeto llamado auto al cual le enviamos el mensaje auto.encender() ya que queremos que encienda, pero para que esto se de la clase Automovil debe tener un método que coincida con encender()

Teniendo claro y comprendiendo los conceptos de Clase y Objeto, podemos hablar del Diseño Orientado a Objetos (DOO), que como menciona Rober C Martin en su libro Arquitectura limpia, "podemos utilizar  tres palabras mágicas para explicar la naturaleza del DOO: encapsulación, herencia y polimorfismo. La implicación es que el DOO es la combinación adecuada de estas tres cosas"

Encapsulación: Describe la capacidad de un objeto para ocultar sus datos y métodos del resto del mundo. Ocultar el estado interno y exigir que toda la interacción se realice a través de los métodos de un objeto se conoce como encapsulación de datos. Vemos la encapsulación con las variables privadas y métodos publicos de una clase.

Herencia: Diferentes tipos de objetos a menudo tienen una cierta cantidad de características en común entre sí, sin embargo, cada uno también define características adicionales que los hacen diferentes. La programación orientada a objetos permite que las clases hereden el estado y el comportamiento de uso común de otras clases. De aquí que Rober C Martin en su libro Arquitectura limpia la defina como "La redeclaración de un grupo de variables y funciones dentro de un ámbito de inclusión".

Polimorfismo: Es la capacidad de diferentes objetos para responder de manera diferente al mismo mensaje. Ejemplo: Tenemos dos clase EstudiantePregrado y EstudiantePosgrado que Heredan de la clase Estudiante, el polimorfismo nos permitiría que una variable de tipo Estudiante no se limite a referirse a un objeto de la clase EstudiantePregrado, ya que, puede hacer referencia a cualquier objeto de las clases descendientes de Estudiante.

Para finalizar hablemos de la Abstracción una palabra muy utilizada cuando hablamos de POO pero que es?, bueno se podría decir que la abstracción consiste en captar las características esenciales de un objeto, así como su comportamiento.

En mi repositorio de GitHub https://github.com/cedaniel200/Programacion-Orientada-a-Objetos encontraras algunos talleres donde puedes practicar los temas vistos y más, en caso de no poder solucionarlos, no te preocupes cada taller tiene una posible solución.

Instalación NodeJS

Ingresamos a la página oficial de NodeJS donde lo descargaremos  https://nodejs.org/en/download/ Escogemos el instalador que se ajuste a ...