martes, 6 de agosto de 2013

ASERCIONES

Definición
Las aserciones permiten generar información acerca de las suposiciones y expectativas que maneje el desarrollo al momento de programar. Por tal motivo, las aserciones resultan de alta utilidad al momento de trabajar con el código para realizar operaciones de mantenimiento.

Ventaja: Las aserciones deben utilizarse para verificar la lógica de un sólo método o de un pequeño conjunto de métodos que estén relacionados entre sí. 

Desventaja: No deben utilizarse para comprobar todo el código desarrollado sino para verificar que se cumplan las condiciones internas.

Para activar las directivas del manejo de aserciones:

  • -ea: activa aserciones
  • -da: desactiva aserciones


Tipos de aserciones
  • Aserciones en el diseño por contrato.- pueden describir el estado en que el código empieza su ejecución (precondición), y el estado que el código espera alcanzar cuando finalice (postcondición); asimismo pueden servir de especificación para los invariantes de clase.
  • Aserciones en tiempo de ejecución.- es  utilizada para verificar que una suposición hecha por el programador durante la implementación del programa sigue siendo válida durante la ejecución del programa. 
  • Aserciones durante el ciclo de desarrollo.-  Durante el ciclo de desarrollo, el programador normalmente ejecuta su programa con las aserciones activadas. Cuando una aserción resulta falsa y se produce el correspondiente error, el programador automáticamente recibe un aviso.
  • Aserciones estáticas.- Las aserciones que son comprobadas en tiempo de compilación reciben el nombre de aserciones estáticas. Este tipo de aserciones resultan particularmente útiles en la meta programación de plantillas.
Aserciones según su expresión:

assert <expresion_booleana> ;
En cualquier caso, si la expresión booleana evaluada es falsa, se genera un error de aserción (AssertionError). Este tipo de error no debería capturarse y el programa debería finalizar de forma anormal.

assert <expresion_booleana> : <expresion_detallada> ;
En esta expresión (que puede ser de cualquier tipo) será convertida al tipo String y se utilizará para complementar el mensaje a mostrar por pantalla al momento de producirse el AssertionError.


viernes, 5 de julio de 2013

LIBRERÍA AWT

QUÉ ES?
Es una librería de clases Java para desarrollar interfaces de usuario gráficas. Es la librería básica y se ha construido una posterior que es la Swing.

COMPUESTA POR:
  • Los Componentes (java.awt.Component)
  • Los Contenedores (java,awt.containers), contienen componentes.
  • Los gestores de posición (java.awt.LayoutManager), que posiciona los componentes dentro de los contenedores.
  • Los eventos (java.awt.AWTEvent), que nos indican las acciones del usuario.
  • Es una clase abstracta que representa todo lo que tiene una posición, un tamaño, puede ser pintado en pantalla y puede recibir eventos.


SU ESTRUCTURA:
  • Los Contenedores contienen Componentes, que son los controles básicos
  • No se usan posiciones fijas de los Componentes, sino que están situados a través de una disposición controlada (layouts)
  • El común denominador de más bajo nivel se acerca al teclado, ratón y manejo de eventos
  • Alto nivel de abstracción respecto al entorno de ventanas en que se ejecute la aplicación (no hay áreas cliente, ni llamadas a X, ni hWnds, etc.)
  • La arquitectura de la aplicación es dependiente del entorno de ventanas, en vez de tener un tamaño fijo.
  • Es bastante dependiente de la máquina en que se ejecuta la aplicación (no puede asumir que un diálogo tendrá el mismo tamaño en cada máquina).
  • Carece de un formato de recursos. No se puede separar el código de lo que es propiamente interface. No hay ningún diseñador de interfaces (todavía).


CLASES DE AWT

Clases contenedoras (hijas de Container)
  • Panel: Permite hacer una presentación más avanzada que Container mediante la combinación con subpaneles o subclases para crear contenedores personalizados. La clase Applet que sirve para crear applets Java, hereda de esta clase Panel.
  • ScrollPane: Una barra de desplazamiento, horizontal o vertical.
  • Window: Una ventana sin borde.
  • Frame: Una ventana que no tiene borde. Puede tener asociado un objeto Menubar (una barra de herramientas o barra de menú personalizada).
  • Dialog: Una ventana usada para crear diálogos. Tiene la capacidad de ser modal con lo que sólo este contenedor recibiría entradas del usuario.
  • Filedialog: Un diálogo que usa el selector de archivos nativo del sistema operativo.

Clases componentes (hijas directas de Component)
  • Button: Un botón gráfico para el que se puede definir una acción que sucederá cuando se presione el botón.
  • Canvas: Permite pintar o capturar eventos del usuario. Se puede usar para crear gráficos o como clase base para crear una jerarquía de componentes personalizados.
  • Checkbox: Soporta dos estados: on y off. Se pueden asociar acciones que se ejecuten (triggers) cuando el estado cambie.
  • Choice: Menú desplegable de opciones.
  • Label: Cadena de etiqueta en una localización dada.
  • List: Una lista desplegable de cadenas.
  • Scrollbar: Desplegable de objetos Canvas.
  • TextComponent: Cualquier componente que permita editar cadenas de texto.Tiene dos clases hijas:
  • TextField: Componente de texto consistente en una línea que puede ser usada para construir formularios.
  • TextArea: Componente para edición de texto de tamaño variable.


EVENTOS DE AWT

Eventos físicos: Son todos hijos del evento ComponentEvent, que indica algún cambio en un objeto Component:
  • InputEvent: Se ha producido una entrada del usuario. Tiene como eventos hijos KeyEvent (pulsación de una tecla) y MouseEvent (acción sobre el ratón).
  • FocusEvent: Avisa al programa de que el componente ha ganado o perdido la atención (enfoque) del usuario. Esto se deduce de la actividad del usuario (ratón y teclado).
  • WindowEvent: Avisa al programa de que el usuario ha utilizado uno de los controles de ventana a nivel del sistema operativo, como los controles de minimizar o cerrar.
  • ContainerEvent: Se envía cuando se añaden o eliminan componentes a un contenedor.
  • PaintEvent: Evento especial que señala que el sistema operativo quiere dibujar de nuevo una parte de la interfaz. Un componente debe sobreescribir el método paint() o el método update() para gestionar este evento.

Eventos semánticos: Son todos hijos del evento AWTEvent, que es el evento base de la jerarquía de eventos:
  • ActionEvent: Avisa al programa de acciones específicas de componentes como las pulsaciones de botones.
  • AdjustmenteEvent: Comunica que una barra de desplazamiento ha sido ajustada.
  • ItemEvent: Avisa al programa cuando el usuario interacciona con una elección, una lista o una casilla de verificación.

POLIFORMISMO

El polimorfismo, en programación orientada a objetos, se refiere a la posibilidad de acceder a un variado rango de funciones distintas a través de la misma interfaz. O sea, un mismo identificador puede tener distintas formas (distintos cuerpos de función, distintos comportamientos) dependiendo del contexto en el que se halle.

El polimorfismo es muy parecido o más bien tiene sus bases en la capacidad de herencia que presentan los lenguajes orientados a objetos como es el caso de java.

El término polimorfismo se refiere a que una característica de una clase puede tomar varias formas, en P.O.O. (programación orientada a objetos) representa: La posibilidad de desencadenar operaciones distintas en respuesta a un mismo mensaje.


El polimorfismos se puede definir como "el mecanismo que permite definir e Invocar funciones idénticas en denominación e interfaz, pero con implementaron diferente.

Recordando que:
  • El polimorfismo promueve la extensibilidad del software.
  • Cada subclase hereda las operaciones de la superclase, pero tiene la posibilidad de modificar el comportamiento de dichas operaciones cambiando su implementación.
  • Aunque los objetos se accedan con referencias de superclase, el método que se ejecuta es el de la clase real del objeto.

La programación orientada a objeto (POO)

QUE ES?


Es un paradigma de programación que usa los objetos en sus interacciones, para diseñar aplicaciones y programas informáticos. Está basado en varias técnicas, incluyendo herencia, cohesión, abstracción, polimorfismo, acoplamiento y encapsulamiento. Su uso se popularizó a principios de la década de los años 1990. En la actualidad, existe una gran variedad de lenguajes de programación que soportan la orientación a objetos.


CARACTERÍSTICAS

Abstracción
El proceso de abstracción permite seleccionar las características relevantes dentro de un conjunto e identificar comportamientos comunes para definir nuevos tipos de entidades en el mundo real. La abstracción es clave en el proceso de análisis y diseño orientado a objetos, ya que mediante ella podemos llegar a armar un conjunto de clases que permitan modelar la realidad o el problema que se quiere atacar.

Encapsulamiento
Significa reunir todos los elementos que pueden considerarse pertenecientes a una misma entidad, al mismo nivel de abstracción. Esto permite aumentar la cohesión de los componentes del sistema. Algunos autores confunden este concepto con el principio de ocultación, principalmente porque se suelen emplear conjuntamente.

Modularidad
Se denomina modularidad a la propiedad que permite subdividir una aplicación en partes más pequeñas (llamadas módulos), cada una de las cuales debe ser tan independiente como sea posible de la aplicación en sí y de las restantes partes. Estos módulos se pueden compilar por separado, pero tienen conexiones con otros módulos. Al igual que la encapsulación, los lenguajes soportan la modularidad de diversas formas.

Principio de ocultación
Cada objeto está aislado del exterior, es un módulo natural, y cada tipo de objeto expone una interfaz a otros objetos que especifica cómo pueden interactuar con los objetos de la clase. El aislamiento protege a las propiedades de un objeto contra su modificación por quien no tenga derecho a acceder a ellas; solamente los propios métodos internos del objeto pueden acceder a su estado. Esto asegura que otros objetos no puedan cambiar el estado interno de un objeto de manera inesperada, eliminando efectos secundarios e interacciones inesperadas.

Polimorfismo
Comportamientos diferentes, asociados a objetos distintos, pueden compartir el mismo nombre; al llamarlos por ese nombre se utilizará el comportamiento correspondiente al objeto que se esté usando. O, dicho de otro modo, las referencias y las colecciones de objetos pueden contener objetos de diferentes tipos, y la invocación de un comportamiento en una referencia producirá el comportamiento correcto para el tipo real del objeto referenciado.

Herencia
Las clases no están aisladas, sino que se relacionan entre sí, formando una jerarquía de clasificación. Los objetos heredan las propiedades y el comportamiento de todas las clases a las que pertenecen. La herencia organiza y facilita el polimorfismo y el encapsulamiento, permitiendo a los objetos ser definidos y creados como tipos especializados de objetos preexistentes.

Recolección de basura
La recolección de basura o garbage collector es la técnica por la cual el entorno de objetos se encarga de destruir automáticamente, y por tanto desvincular la memoria asociada, los objetos que hayan quedado sin ninguna referencia a ellos. Esto significa que el programador no debe preocuparse por la asignación o liberación de memoria, ya que el entorno la asignará al crear un nuevo objeto y la liberará cuando nadie lo esté usando.


LENGUAJES ORIENTADOS A OBJETOS
  • ABAP -> SAP Lenguaje orientado a eventos
  • ABL Lenguaje de programación de OpenEdge de Progress Software
  • ActionScript
  • ActionScript 3
  • Ada
  • C++
  • C#
  • Clarion
  • Clipper1
  • D
  • Object Pascal (Embarcadero Delphi)
  • Gambas
  • Genie
  • Harbour
  • Eiffel
  • Fortran 90/95
  • Java
  • JavaScript2
  • Lexico3
  • Objective-C
  • Ocaml
  • Oz
  • R
  • Perl4
  • PHP5
  • PowerBuilder
  • Python
  • Ruby
  • Self
  • Smalltalk6
  • Magik (SmallWorld)
  • Vala
  • VB.NET
  • Visual FoxPro7
  • Visual Basic 6.0
  • Visual DataFlex
  • Visual Objects
  • XBase++
  • Lenguaje DRP
  • Scala8