miércoles, 29 de abril de 2015

PROGRAMACIÓN ORIENTADA A OBJETOS

La programación orientada a objetos es un paradigma surgido en los años 70, que utiliza objetos como elementos fundamentales en la construcción de la solución. Un objeto es una abstracción de algún hecho o ente del mundo real, con atributos que representan sus características o propiedades, y métodos que emulan su comportamiento o actividad. 





Características de la POO:

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. 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.


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. Cuando esto ocurre en "tiempo de ejecución", esta última característica se llama asignación tardía o asignación dinámica. Algunos lenguajes proporcionan medios más estáticos (en "tiempo de compilación") de polimorfismo, tales como las plantillas y la sobrecarga de operadores de C++.


Herencia:

Las clases no se encuentran 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. Estos pueden compartir (y extender) su comportamiento sin tener que volver a implementarlo. Esto suele hacerse habitualmente agrupando los objetos en clases y estas en árboles o enrejados que reflejan un comportamiento común. Cuando un objeto hereda de más de una clase se dice que hay herencia múltiple; siendo de alta complejidad técnica por lo cual suele recurrirse a la herencia virtual para evitar la duplicación de datos.


La programación orientada a objetos es una forma de programar que trata de encontrar una solución a estos problemas. Entre los elementos principales de la POO, podremos encontrar a:

            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 ella.

      Herencia:

(Por ejemplo, herencia de la clase C a la clase D) 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 públicas 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 POO.

Objeto:
Instancia de una clase. 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 corresponden con los objetos reales del mundo que nos rodea, o con 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 la reacción que puede desencadenar un objeto; es decir, la acción que genera.

Atributos:
Características que tiene la clase.

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.

Identificació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.


JAVA Y ALGO MÁS


Java es un lenguaje de programación de propósito general, concurrente, orientado a objetos que fue diseñado específicamente para tener tan pocas dependencias de implementación como fuera posible. Su intención es permitir que los desarrolladores de aplicaciones escriban el programa una vez y lo ejecuten en cualquier dispositivo (conocido en inglés como WORA, o "write once, run anywhere"), lo que quiere decir que el código que es ejecutado en una plataforma no tiene que ser recompilado para correr en otra. Java es, a partir de 2012, uno de los lenguajes de programación más populares en uso, particularmente para aplicaciones de cliente-servidor de web, con unos 10 millones de usuarios reportados.

Java se creó como una herramienta de programación para ser usada en un proyecto de set-top-box en una pequeña operación denominada the Green Project en Sun Microsystems en el año 1991. El equipo (Green Team), compuesto por trece personas y dirigido por James Gosling, trabajó durante 18 meses en Sand Hill Road en Menlo Park en su desarrollo.

El lenguaje se denominó inicialmente Oak (por un roble que había fuera de la oficina de Gosling), luego pasó a denominarse Green tras descubrir que Oak era ya una marca comercial registrada para adaptadores de tarjetas gráficas y finalmente se renombró a Java.

Es frecuentada por algunos de los miembros del equipo. Pero no está claro si es un acrónimo o no, aunque algunas fuentes señalan que podría tratarse de las iniciales de sus diseñadores: James Gosling, Arthur Van Hoff, y Andy Bechtolsheim. Otros abogan por el siguiente acrónimo, Just Another Vague Acronym ("sólo otro acrónimo ambiguo más"). La hipótesis que más fuerza tiene es la de que Java debe su nombre a un tipo de café disponible en la cafetería cercana, de ahí que el icono de java sea una taza de café caliente. Un pequeño signo que da fuerza a esta teoría es que los 4 primeros bytes (el número mágico) de los archivos.class que genera el compilador, son en hexadecimal, 0xCAFEBABE. A pesar de todas estas teorías, el nombre fue sacado al parecer de una lista aleatoria de palabras.

Los objetivos de Gosling eran implementar una máquina virtual y un lenguaje con una estructura y sintaxis similar a C++. Entre junio y julio de 1994, tras una sesión maratoniana de tres días entre John Gaga, James Gosling, Patrick Naughton, Wayne Rosing y Eric Schmidt, el equipo reorientó la plataforma hacia la Web. Sintieron que la llegada del navegador web Mosaic, propiciaría que Internet se convirtiese en un medio interactivo, como el que pensaban era la televisión por cable. Naughton creó entonces un prototipo de navegador, WebRunner, que más tarde sería conocido como HotJava.

En 1994, se les hizo una demostración de HotJava y la plataforma Java a los ejecutivos de Sun. Java 1.0a pudo descargarse por primera vez en 1994, pero hubo que esperar al 23 de mayo de 1995, durante las conferencias de SunWorld, a que vieran la luz pública Java y HotJava, el navegador Web. El acontecimiento fue anunciado por John Gage, el Director Científico de Sun Microsystems. El acto estuvo acompañado por una pequeña sorpresa adicional, el anuncio por parte de Marc Andreessen, Vicepresidente Ejecutivo de Netscape, de que Java sería soportado en sus navegadores. El 9 de enero del año siguiente, 1996, Sun fundó el grupo empresarial JavaSoft para que se encargase del desarrollo tecnológico. Dos semanas más tarde la primera versión de Java fue publicada.

La promesa inicial de Gosling era Write Once, Run Anywhere (Escríbelo una vez, ejecútalo en cualquier lugar), proporcionando un lenguaje independiente de la plataforma y un entorno de ejecución (la JVM) ligero y gratuito para las plataformas más populares de forma que los binarios (bytecode) de las aplicaciones Java pudiesen ejecutarse en cualquier plataforma.

El entorno de ejecución era relativamente seguro y los principales navegadores web pronto incorporaron la posibilidad de ejecutar applets Java incrustadas en las páginas web.

Java ha experimentado numerosos cambios desde la versión primigenia, JDK 1.0, así como un enorme incremento en el número de clases y paquetes que componen la biblioteca estándar.

EMULADORES

DeviceAnywhere:

DeviceAnywhere™ es un innovador servicio diseñado por Mobile Complete que pone en manos de los desarrolladores la interacción con los dispositivos en tiempo real conectados a redes globales activas.
Creada a partir de la innovadora tecnología Direct- To-Device™ de interacción con dispositivos de Mobile Complete.
DeviceAnywhere permite conectarse y controlar dispositivos móviles en todo el mundo, con tan solo acceder a través de Internet.
Consta de una plataforma en tiempo real, no simulada, en la que se puede pulsar una tecla para los botones laterales del dispositivo, hablar por el micrófono del dispositivo a través del micro del ordenador, visualizar la pantalla LCD del dispositivo, escuchar el altavoz y timbres, conectar y desconectar la batería, cable eléctrico y cable de datos, hacer llamadas, navegar por sitios WAP, enviar y recibir mensajes y muchas más cosas.



MobiReady:

mobiReady se lanzó en noviembre de 2006 como herramienta gratuita para que los desarrolladores tuvieran un mejor conocimiento de su contenido web y sus posibilidades de funcionamiento en los dispositivos móviles.
El comprobador de sitios prueba las páginas web para comprobar su disponibilidad móvil, además del tiempo y coste de descarga, basándose en el tamaño del contenido y en otros elementos adicionales.
Desarrollado junto a W3C y las principales compañías de movilidad, mobiReady además proporciona asesoramiento sobre cómo solucionar los problemas para que el contenido funcione en la más amplia variedad de teléfonos móviles.

El crecimiento del uso de la herramienta se refleja en el crecimiento general de la web móvil. mobiReady ha demostrado ser una herramienta potente que ayuda a los desarrolladores a crear y mantener contenido web compatible con los dispositivos móviles.
mobiReady está disponible de forma gratuita desde http://mobiReady.com o a través del foro de desarrolladores móviles web de dotMobi desde http://mobiForge.com. 




Opera Mini:

Opera Mini es un navegador web para dispositivos móviles desarrollado con Java ME. Originalmente fue creado para dispositivos móviles con poca capacidad de memoria y proceso. Actualmente soporta a la mayoría de los móviles incluyendo los smartphones. La versión 5 de Opera Mini ha sido adaptada para dispositivos con pantalla táctil.
Al contrario de la mayoría de los navegadores, Opera Mini obtiene todo el contenido a través de un proxy que corre el motor de maquetación delnavegador Opera. Este motor en el servidor proxy reformatea las páginas web con la anchura adecuada para pantallas pequeñas. El contenido se comprime y posteriormente se entrega al teléfono en lenguaje de marca llamado OBML (Opera Binary Markup Language, Lenguaje de Marcado Binario de Opera). Los contenidos llegan al teléfono con una reducción de tamaño entre el 70 y el 90%.
Opera Mini fue presentado mundialmente en enero de 2006.
A lo largo de los años han ido apareciendo más versiones con nuevas prestaciones como descargar un archivo a la memoria del teléfono, posibilidad de modificar el aspecto visual, nuevas páginas de búsqueda y mejor navegación, mayor velocidad de procesamiento y nuevas web habilitadas. En abril de 2008, Opera Mini 4.1 trae como novedades la posibilidad de descargar archivos adjuntos y archivos de audio, video, imágenes y aplicaciones entre otros directamente sin salir del navegador como en las versiones anteriores.


W3C mobileOK:


Este corrector realiza varias pruebas en una página Web para determinar su nivel de telefonía móvil amigable. Las pruebas se definen en el mobileOK Pruebas básicas 1.0pliego de condiciones. Una página Web es mobileOK cuando pasa todas las pruebas.
El W3C mobileOK Checker es un servicio gratuito del W3C que permite comprobar el nivel de la móviles en el manejo de documentos Web.
El objetivo del verificador mobileOK del W3C es ayudar a los creadores de contenidos web en el desarrollo de contenidos para móviles de forma automática. Estos análisis de contenido se realizan con la interoperabilidad con el estándar del W3C mobileOK que se ha desarrollado como parte de la Iniciativa de Web Móvil del W3C.

La norma mobileOK se ha derivado de W3C Mobile Web Best Practices 1.0, estándar que define una serie de recomendaciones a seguir para mejorar la experiencia del usuario de la Web en dispositivos móviles.
Este trabajo en parte está basado en las directrices ya existentes. Fue publicado como un estándar del W3C final ("Recomendación") en julio de 2008.
El grupo de trabajo extrae un subconjunto de las mejores prácticas de este documento y define una nueva especificación que se llama W3C mobileOK Basic Tests 1.0, y ha sido publicada como un estándar del W3C en diciembre de 2008. 



DotMobi Emulator:

El emulador de dotMobi en línea es otra manera de ver los sitios web mostrándolos como en un teléfono móvil común. dotMobi emulador en línea es muy similar a Opera Mini.
Es necesario tener la última versión de Java instalada en el PC.
Introduciendo el. Com /. Net /. Org /. Biz, etc., la dirección del sitio el usuario puede comprobar cómo se vería en el teléfono móvil. Y en caso de no estar satisfecho con lo que se ve dotMobi ayuda a optimizar el sitio para la web móvil.
El. Mobi y una suite de herramientas de desarrollo de dotMobi ayudan a resolver las barreras para el uso de Internet móvil, tales como páginas mal formateadas, un inapropiado o excesivo contenido, una difícil navegación, etc.




iPhoney:


Tiene el mismo aspecto que el iPhone, se parece muchísimo pero no es un iPhone, se llama iPhoney y se trata de una interfaz que permite ver cómo queda una página web desde el iPhone.
Tampoco se trata de un emulador puesto que no permite ejecutar aplicaciones ni emular las funciones del iPhone, excepto tal vez las aplicaciones basadas en web. Se puede comprobar las páginas en 320x480 o 480x320 píxeles.
Es un buen intento de emulación de la interfaz del iPhone, más bien de su navegación web pero está muy limitado. No hay forma de hacer zoom ni se puede usar el sistema de entrada de datos del autentico iPhone. Sin embargo, es ideal para realizar capturas originales para los blogs personales sobre Mac.

LENGUAJES DE PROGRAMACIÓN PARA EL DESARROLLO DE APPs

Java:
Este lenguaje se basa en c y c++ y abarca un gran número de dispositivos móviles, fue diseñado para que cuando se corriera el programa no se tuviera que estar recompilando.












JavaScript:

Solo se usa para crear programas que se ejecuten en páginas web, no contiene clases, es un lenguaje de formato libre y menos potente que Java.












Python:
Es un lenguaje fácil de aprender funciona en Windows, Linux, IOS Y móviles de nokia, el código es libre lo cual lo hace más simple.












Objetive C:
Es utilizado por el S.O. IOS, los objetos se crean una memoria dinámica y se puede usar el lenguaje c++.








Ruby:
Es diseñado para la productividad y diversión del desarrollador, es multiplataforma y tiene una amplia librería. Es parecido a Python.