domingo, 1 de enero de 2012

1.1.- REPASO DE PROGRAMACIÓN ORIENTADA A OBJETOS.

Según lo expuesto la POO es una forma de programación que utiliza objetos que responden a sucesos. Estos sucesos producen un flujo de mensajes entre los objetos, lo que origina cambios en el estado del objeto que recibe el mensaje. Como ejemplo piense en el problema de que un objeto caja de texto visualice un comunicado cuando se haga clic en otro objeto botón de pulsación. La estructura de la programación básicamente estará formada por dos objetos y un mapa de mensajes; uno de los mensajes relacionara el clic sobre el botón con el método que tiene que ejecutarse para poner el comunicado en la caja de texto. Así la POO es un enfoque sumamente natural, puesto que la estructura de los programas refleja directamente la estructura del problema.

Además la POO puede considerarse como una extensión natural de la programación estructurada en un inte3nto de potenciar los conceptos de modularidad y reutilización del código.

MECANISMOS BÁSICOS DE LA POO:

Los mecanismos básicos de la programación orientada a objetos son: objetos mensajes, métodos, clases y subclases

OBJETOS

Un programa tradicional se compone de procedimientos y de datos. Un programa orientado a objetos se compone solamente de objetos. Un objeto es una encapsulación genérica de datos y de los procedimientos para manipularlos.

MENSAJES

Cuando se ejecuta un programa orientado a objetos los objetos están recibiendo, interpretando y respondiendo a mensajes de otros objetos.
El conjunto de mensajes a los que un objeto puede responder se denomina protocolo.

MÉTODOS

Un método se implementa en una clase, y determina como tiene que actuar el objeto cuando recibe un mensaje.

La POO frente a la programación tradicional
En la historia de la programación ha habido varias evoluciones sucesivas. Una de las principales fue la programación estructurada, cuyo principio fundamental era dividir un programa en subprogramas más pequeños y fáciles de resolver, hasta llegar a niveles de complejidad elementales, siempre apoyándonos en la idea de que debe hacer el programa.

CLASES

Una clase se puede considerar como plantilla para crear objetos de esa clase o tipo. Una clase describe los métodos y atributos que definen las características comunes a todos los objetos de esa clase.
Una clase es un tipo de objeto definido por el usuario. En otras palabras, una clase equivalente a la generalización de un tipo específico de objeto. Un objeto es la concreción de una clase (algunos autores utilizan el termino instancia, traducción directa de instante). Por ejemplo, un objeto de la clase C sería un ejemplar O de esa clase. Entonces, para disponer de un objeto, primero  se abstraen las características comunes (clase) y por último se pone nombre a uno o más ejemplares de la clase (objetos).

HISTORIA DE LOS LENGUAJES ORIENTADOS A OBJETOS

Son varios los lenguajes que han contribuido a la evolución de los lenguajes orientados a objetos de hoy: LISP en la década de los 50, simula en la década de los 60 y más tarde pascal, C, Modula y Ada. Si bien estos lenguajes no incluyen mecanismos para la programación orientada a objetos, sus características sirvieron de base para la construcción de estos mecanismos: por ejemplo, simula contribuye con el concepto de clase.
En la década de los 70, aparece como smaltalk como un lenguaje orientado a objetos puro, con lo que queda introducido definitivamente este tipo de programación. En la década de los 80 cuando los avances son mayores, debido fundamentalmente a la disponibilidad de extensiones orientadas a objetos en dos de los lenguajes populares, C y pascal.

VENTAJAS DE LOS LENGUAJES ORIENTADOS A OBJETOS

Un lenguaje de programación que soporte programación orientada a objetos beneficia el desarrollo de software. Esto es así, porque:

·         Los objetos bien diseñados son la base para sistemas que se construyen a partir de módulos reutilizables, dando lugar a una mayor productividad.
·         La reutilización de las clases que han sido probadas en circunstancias reales, en proyectos anteriores, dan lugar a sistemas de mayor calidad y con menos errores.
·         La herencia hace posible definir sistemas más fiables, más fáciles de ampliar y menos costosos de mantener.
·         Un diseño orientado a objetos es una herramienta clave para enfrentarse a problemas complejos porque favorece el paso de pequeños a grandes sistemas.
·         Las aplicaciones requieren escribir menos líneas de código, menos sentencias de bifurcación y por lo tanto, los módulos son más comprensibles.
·         La encapsulación ayuda a construir sistemas más seguros.
                                
DISEÑO ORIETADO A OBJETOS

Un diseño orientado a objetos no es un diseño top down ni bottom up. Aunque envuelve elementos próximos a ambos. En el diseño top down, usted prueba a ver y comprender el problema en su aspecto más general; una vez superado este paso, tratara de descomponer el problema general en subproblemas más pequeños y fáciles de resolver, procediendo con estos de forma similar.

PROGRAMACION ORIENTADA A OBJETOS

La programación Orientada a objetos (POO) es una forma especial de programar, más cercana a como expresaríamos las cosas en la vida real que otros tipos de programación.
Con la POO tenemos que aprender a pensar las cosas de una manera distinta, para escribir nuestros programas en términos de objetos, propiedades, métodos y otras cosas que veremos rápidamente para aclarar conceptos y dar una pequeña base que permita soltarnos un poco con este tipo de programación.

MOTIVACIÓN

Durante años, los programadores se han dedicado a construir aplicaciones muy parecidas que resolvían una y otra vez los mismos problemas. Para conseguir que los esfuerzos de los programadores puedan ser utilizados por otras personas se creó la POO. Que es una serie de normas de realizar las cosas de manera que otras personas puedan utilizarlas y adelantar su trabajo, de manera que consigamos que el código se pueda reutilizar.
La POO no es difícil, pero es una manera especial de pensar, a veces subjetiva de quien la programa, de manera que la forma de hacer las cosas puede ser diferente según el programador. Aunque podamos hacer los programas de formas distintas, no todas ellas son correctas, lo difícil no es programar orientado a objetos sino programar bien. Programar bien es importante porque así nos podemos aprovechar de todas las ventajas de la POO.

CÓMO SE PIENSA EN OBJETOS

Pensar en términos de objetos es muy parecido a cómo lo haríamos en la vida real. Por ejemplo vamos a pensar en un coche para tratar de modernizarlo en un esquema de POO. Diríamos que el coche es el elemento principal que tiene una serie de características, como podrían ser el color, el modelo o la marca. Además tiene una serie de funcionalidades asociadas, como pueden ser ponerse en marcha, parar o aparcar.

CLASES EN POO

Las clases son declaraciones de objetos, también se podrían definir como abstracciones de objetos. Esto quiere decir que la definición de un objeto es la clase. Cuando programamos un objeto y definimos sus características y funcionalidades en realidad lo que estamos haciendo es programar una clase. En los ejemplos anteriores en realidad hablábamos de las clases coche o fracción porque sólo estuvimos definiendo, aunque por encima, sus formas.

PROPIEDADES EN CLASES

Las propiedades o atributos son las características de los objetos. Cuando definimos una propiedad normalmente especificamos su nombre y su tipo. Nos podemos hacer a la idea de que las propiedades son algo así como variables donde almacenamos datos relacionados con los objetos.

MÉTODOS EN LAS CLASES

Son las funcionalidades asociadas a los objetos. Cuando estamos programando las clases las llamamos métodos. Los métodos son como funciones que están asociadas a un objeto.

OBJETOS EN POO

Los objetos son ejemplares de una clase cualquiera. Cuando creamos un ejemplar tenemos que especificar la clase a partir de la cual se creará. Esta acción de crear un objeto a partir de una clase se llama instanciar (que viene de una mala traducción de la palabra instace que en inglés significa ejemplar). Por ejemplo, un objeto de la clase fracción es por ejemplo 3/5. El concepto o definición de fracción sería la clase, pero cuando ya estamos hablando de una fracción en concreto 4/7, 8/1000 o cualquier otra, la llamamos objeto.

Para crear un objeto se tiene que escribir una instrucción especial que puede ser distinta dependiendo el lenguaje de programación que se emplee, pero será algo parecido a esto.

miCoche = new Coche()

Con la palabra new especificamos que se tiene que crear una instancia de la clase que sigue a continuación. Dentro de los paréntesis podríamos colocar parámetros con los que inicializar el objeto de la clase coche.


ESTADOS EN OBJETOS

Cuando tenemos un objeto sus propiedades toman valores. Por ejemplo, cuando tenemos un coche la propiedad color tomará un valor en concreto, como por ejemplo rojo o gris metalizado. El valor concreto de una propiedad de un objeto se llama estado.

Para acceder a un estado de un objeto para ver su valor o cambiarlo se utiliza el operador punto.

MiCoche.color = rojo

El objeto es miCoche, luego colocamos el operador punto y por último el nombre y la propiedad a la que deseamos acceder. En este ejemplo estamos cambiando el valor del estado de la propiedad del objeto a rojo con una simple asignación.

MENSAJES EN OBJETOS

Un mensaje en un objeto es la acción de efectuar una llamada a un método. Por ejemplo, cuando le decimos a un objeto coche que se ponga en marcha estamos pasándole el mensaje “ponte en marcha”.

Para mandar mensajes a los objetos utilizamos el operador punto, seguido del método que deseamos invocar
.
miCoche.ponerseEnMarcha()

En este ejemplo pasamos el mensaje ponerseEnMarcha(). Hay que colocar paréntesis igual que cualquier llamada a una función, dentro irían los parámetros.

CONCEPTOS FUNDAMENTALES

La programación orientada a objetos es una forma de programar que trata de encontrar una solución a estos problemas. Introduce nuevos conceptos, que superan y amplían conceptos antiguos ya conocidos. Entre ellos destacan los siguientes:

Clase: definiciones de las propiedades y comportamiento de un tipo de objeto concreto. La instanciación es la lectura de estas definiciones y la creación de un objeto a partir de ellas.

Herencia: (por ejemplo, herencia de la clase D a la clase C) Es la facilidad mediante la cual la clase D hereda en ella cada uno de los atributos y operaciones de C, como si esos atributos y operaciones hubiesen sido definidos por la misma D. Por lo tanto, puede usar los mismos métodos y variables publicas declaradas en C. Los componentes registrados como "privados" (private) también se heredan, pero como no pertenecen a la clase, se mantienen escondidos al programador y sólo pueden ser accedidos a través de otros métodos públicos. Esto es así para mantener hegemónico el ideal de OOP.

Objeto: entidad provista de un conjunto de propiedades o atributos (datos) y de comportamiento o funcionalidad (métodos) los mismos que consecuentemente reaccionan a eventos. Se corresponde con los objetos reales del mundo que nos rodea, o a objetos internos del sistema (del programa). Es una instancia a una clase.

Método: Algoritmo asociado a un objeto (o a una clase de objetos), cuya ejecución se desencadena tras la recepción de un "mensaje". Desde el punto de vista del comportamiento, es lo que el objeto puede hacer. Un método puede producir un cambio en las propiedades del objeto, o la generación de un "evento" con un nuevo mensaje para otro objeto del sistema.

Evento: Es un suceso en el sistema (tal como una interacción del usuario con la máquina, o un mensaje enviado por un objeto). El sistema maneja el evento enviando el mensaje adecuado al objeto pertinente. También se puede definir como evento, a la reacción que puede desencadenar un objeto, es decir la acción que genera.

Mensaje: una comunicación dirigida a un objeto, que le ordena que ejecute uno de sus métodos con ciertos parámetros asociados al evento que lo generó.

Propiedad o atributo: contenedor de un tipo de datos asociados a un objeto (o a una clase de objetos), que hace los datos visibles desde fuera del objeto y esto se define como sus características predeterminadas, y cuyo valor puede ser alterado por la ejecución de algún método.

Estado interno: es una variable que se declara privada, que puede ser únicamente accedida y alterada por un método del objeto, y que se utiliza para indicar distintas situaciones posibles para el objeto (o clase de objetos). No es visible al programador que maneja una instancia de la clase.

Componentes de un objeto: atributos, identidad, relaciones y métodos.

Representación de un objeto: un objeto se representa por medio de una tabla o entidad que esté compuesta por sus atributos y funciones correspondientes.
En comparación con un lenguaje imperativo, una "variable", no es más que un contenedor interno del atributo del objeto o de un estado interno, así como la "función" es un procedimiento interno del método del objeto.

CARACTERÍSTICAS DE LA POO

Hay un cierto acuerdo sobre exactamente qué características de un método de programación o lenguaje le definen como "orientado a objetos", pero hay un consenso general en que las características siguientes son las más importantes:
Abstracción: Denota las características esenciales de un objeto, donde se capturan sus comportamientos. Cada objeto en el sistema sirve como modelo de un "agente" abstracto que puede realizar trabajo, informar y cambiar su estado, y "comunicarse" con otros objetos en el sistema sin revelar cómo se implementan estas características. Los procesos, las funciones o los métodos pueden también ser abstraídos y cuando lo están, una variedad de técnicas son requeridas para ampliar una abstracción.

Encapsulamiento: Significa reunir a 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.

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.

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 Collection es la técnica por la cual el ambiente de Objetos se encarga de destruir automáticamente, y por tanto desasignar de la memoria, los Objetos que hayan quedado sin ninguna referencia a ellos.

1.2.- CLASIFICACION DE LA INTERFAZ DE USUARIO


En esta sección se describen varios tipos de interfaces de usuario entre ellas las siguientes:
  • Interfaces de lenguaje natural
  • Interfaces de preguntas y respuestas
  • Menú
  • Formularios
  • Interfaces de lenguajes de comando
  • Interfaces gráficos de usuario(GUIs)
  • Y una variedad de interfaces Web para uso en internet.     
La interfaz de usuario tiene dos componentes principales:
 
I.    El lenguaje de presentación, que es la parte computadora humana de la transacción

    II.        Y el lenguaje de acción, que caracteriza la parte humana-computadora. En conjunto, ambos conceptos cubren la forma y contenido del término interfaz de usuario.

INTERFACES DE LENGUAJE NATURAL

Las interfaces de lenguaje natural son quizás el sueño e ideal de usuarios inexpertos, debido a que permiten a usuarios interactuar con la computadora en su lenguaje cotidiano o natural. No se requieren habilidades especiales de usuarios, quienes interactúan con la computadora mediante lenguaje natural.

Las sutilezas e irregularidades que residen en la ambigüedad es del lenguaje natural producen u problema de programación sumamente exigente y complejo. Los intentos por interactuar con lenguaje natural para algunas aplicaciones en las cuales cualquier otro tipo de interfaz no es factible (por decir, en el caso de un usuario que está incapacitado) se está obteniendo con algo de éxito; sin embargo, estas interfaces normalmente son caras. Los problemas de implementación  y la demanda extraordinaria en los recursos de informática hasta ahora han mantenido las interfaces de lenguaje natural a un mínimo. Sin embargo, la demanda existe y muchos programadores e investigadores están trabajando diligentemente en las interfaces del lenguaje natural. Es una área de crecimiento y, por lo tanto, merece supervisión continua. Algunos sitios Web, tal como Ask Jeeves (www.askjeeves.com), usan una interfaz natural para que los usuarios introduzcan su consulta de búsqueda. Cuando la consulta se introduce, Ask Jeeves responde con una lista de consultas que coinciden con la pregunta que el usuario introdujo.

INTERFACES DE PREGUNTA Y RESPUESTA

En una interfaz de pregunta y respuesta, la computadora despliega en pantalla una pregunta para el usuario. Para interactuar, el usuario introduce una respuesta (mediante pulsaciones el teclado o un clic del ratón)  y la computadora después actúa en esa información de entrada de acuerdo con su programa, normalmente pasando a la siguiente pregunta.

Los asistentes usados para instalar software son un ejemplo común de una interfaz de pregunta y respuesta. El usuario responde a las preguntas acerca del proceso de instalación, tal como donde instalar el Software o características. Otro ejemplo común  es el uso de asistente de Office usado en los productos de Microsoft. Cuando el usuario necesita ayuda, el Asistente de Office hace preguntas y reacciona a las respuestas con preguntas adicionales diseñadas para limitar el alcance  del problema. Los usuarios que no están familiarizados con aplicaciones particulares o no están informados sobre un tema podrían encontrar interfaces de pregunta y respuesta más cómodas, ganando rápidamente confianza a través de su éxito.
MENÚS

Una interfaz de menús adquiere apropiadamente su nombre de la lista de platillos que se pueden seleccionar en un restaurante. De forma similar, una interfaz de menú proporciona al usuario una lista de pantalla de las selecciones disponibles.
  En respuesta al menú, un usuario está limitado a las opciones desplegadas. El usuario no necesita conocer el sistema pero tiene que saber qué tarea se deba realizar. Por ejemplo, con un menú típico de procesamiento de texto, los usuarios pueden escoger opciones para editar, copiar o  imprimir. Sin embargo, para utilizar e mejor menú los usuarios deben saber una tarea desean desempeñar.
Los menús no dependen del hardware. Las variaciones abundan. Los menús se establecen para usar el teclado, lápiz óptico o el ratón. Las selecciones se pueden identificar con un número, carta o palabra clave. La consistencia es importante en el diseño de una interfaz de menú.

Los menús se pueden anidar  dentro de otro para llevar a un usuario a las opciones de un programa. Los menús anidados permiten a la pantalla aparecer menos desordenada, la cual es consistente con el adecuado diseño. También permiten a usuarios evitar opciones de menú en las que no están interesados. Los menús anidados también pueden mover rápidamente a los usuarios a través del programa.

Los menús de GUI se usan para controlar el software de PC y tiene los siguientes lineamientos:

1.    Siempre se despliega la barra de menú principal.
2.    El menú principal usa palabras simples para los artículos del menú. Las opciones de menú principales siempre despliegan menús desplegables secundarios.
3.    El menú principal debe tener opciones secundarias agrupadas en grupo similares de características.
4.    Los menús desplegables que se presentan cuando se hacen clic en un artículo de menú principal con frecuencias consisten en más de una palabra.
5.    Estas opciones secundarias desempeñan acciones o despliegan artículos de menú adicionales.
6.    Los artículos de menú en gris no están disponibles para la actividad actual.

Los menús también se pueden ocultar hasta que el usuario quiera usarlos.

INTERFACES DE LENGUAJES DE COMANDOS

Una interface  de lenguaje de comandos permites al usuario  controlar la aplicación con una serie de pulsaciones  del teclado, comandos, frase o alguna secuencia de estos métodos tres métodos. El lenguaje  de comandos  no tiene un significado inherente  para el usuario  y este  hecho lo hace bastante diferentes  a las otras interfaces. los lenguajes  de  comandos  manipulan  a la  computadora  como una herramienta  para  permitir  al usuario    controlar el dialogo. El lenguaje de comandos ofrece  al usuario  mayor flexibilidad  y control. Cuando  el usuario  da una introducción  a la  computadora mediante  lenguajes de comandos, se ejecutan  de inmediato   por el sistema. Después  el usuario  podría  proceder  para dar otra instrucción.

Los lenguajes  de comandos  requieren  memorizar  las reglas de sintaxis, esto  generalmente  es un obstáculo  para los usuarios  inexpertos. Los usuarios  experimentados  tienen a preferir  los lenguajes  de comandos, posiblemente  porque  les permite  trabajar más rápidos.

INTERFACES DE  FORMULARIO  (FORMULARIOS  DE ENTRADA/SALIDA)

Las interfaces de formulario  consisten de formulario  en pantalla o formulario  que se basan en la web  que despliegan campos que contienen  datos  o parámetros  que necesitan  ser comunicados  al usuario . El formulario  a menudo  es fácil  de un formulario impreso  ya  que es  familiar para el usuario. Esta técnica  de interfaz  también se  conoce  como método  basado en el  formulario  y de  formulario de entrada/salida.
Los formularios  para la pantalla  de despliegue  se configuran para mostrar la información  debe  introducirse y donde. Los campos en blanco requieren información que se puede resaltar con caracteres inversos o intermitentes .por ejemplo el usuario mueve el cursor  de un campo  a otro mediante  la pulsación de una tecla de fecha.

INTERFACES GRAFICAS DE USUARIOS

las interfaces  grafica  d usuario (GUIs) permiten la manipulación directa  de la representación  gráfica en pantalla ,  la cual  se puede  realizar con la entrada  del teclado, una palanca  de juego o el ratón.  La manipulación directa  requiere  mayor sofisticación del sistema  urge las interfaces  vistas  anteriormente.
La clave para  las  GUIs  es la retroalimentación  constante  que proporcionan. La retroalimentación  continua  en el  objeto manipulado  significa  que se pueden  hacer rápidamente  los cambios incluso   cancelar operaciones  sin ocurrir  mensajes de error. El concepto  de retroalimentación,  para los usuarios  se discute  más a fondo  en una sección más adelante.
La creación de  GUIs  REPRESENTA  UN RETO ,  debido  a que se debe inventar  un modelo  apropiado de realidad   o un modelo  conceptual  aceptable  de la representación. El diseño  de GUIs  para uso en intranets, extranet  y,  aún más  urgente, en web, requiere una planeación  más cuidadosa. En general los usuarios  de sitios web son desconocidos para el diseñador, de modo que el diseño debe ser bien definido.

OTRAS  INTERFACES DE USUARIO

Otras interfaces  de usuarios, aunque  menos comunes  que las discutidas  anteriormente,  están ganando popularidad. Estas interfaces  incluyen  dispositivos de  indicación  tal como el lápiz óptico, pantallas sensibles al tacto  y reconocimiento de voz  y síntesis. Cada una estas interfaces  tiene  su propios  atributos  especiales  que corresponden  de forma  única  a aplicaciones  particulares.
El lápiz  óptico  (un palo  puntiagudo  que parece  pluma ) se está volviendo  popular  debido al muevo software  de reconocimiento de escritura  y a los asistentes  digitales  personales (PDAs). Los  dispositivos  palm  y pocket /pc  han sido  un éxito  porque hacen  muy bien  un número  limitado  de cosas. Las computadoras  portátiles  como están incluyen un calendario, directorio, agenda  y block de notas. La entrada  de datos  también  se facilita  con una estación  de acoplamiento   para que  pueda sincronizar  los datos con su PC.