Unidad 1 El microprocesador




 Es un circuito electrónico que actúa como unidad central de proceso de un ordenador, proporcionando el control de las operaciones de cálculo. Los microprocesadores también se utilizan en otros sistemas informáticos avanzados, como impresoras, automóviles o aviones. En 1995 se produjeron unos 4.000 millones de microprocesadores en todo el mundo.
chip4004
El microprocesador es un tipo de circuito sumamente integrado. Los circuitos integrados, también conocidos como microchips o chips, son circuitos electrónicos complejos formados por componentes extremadamente pequeños formados en una única pieza plana de poco espesor de un material conocido como semiconductor. Los microprocesadores modernos incorporan hasta 10 millones de transistores (que actúan como amplificadores electrónicos, osciladores o, más a menudo, como conmutadores), además de otros componentes como resistencias, diodos, condensadores y conexiones, todo ello en una superficie comparable a la de un sello postal.

Un microprocesador consta de varias secciones diferentes. La unidad aritmético-lógica (ALU, siglas en inglés) efectúa cálculos con números y toma decisiones lógicas; los registros son zonas de memoriaespeciales para almacenar información temporalmente; la unidad de control descodifica los programas; los buses transportan información digital a través del chip y de la computadora; la memoria local se emplea para los cómputos realizados en el mismo chip. Los microprocesadores más complejos contienen a menudo otras secciones; por ejemplo, secciones de memoria especializada denominadas memoriacache, que sirven para acelerar el acceso a los dispositivos externos de almacenamiento de datos. Los microprocesadores modernos funcionan con una anchura de bus de 64 bits (un bit es un dígito binario, una unidad de información que puede ser un uno o un cero): esto significa que pueden transmitirse simultáneamente 64 bits de datos.





Read Users' Comments (0)

HISTORIA DE MIDDLEWARE



Los Middleware han aparecido de manera relativamente reciente en el mundo de la informática, hoy en día tecnologías móviles (celulares) están aplicando esta tecnología para el soporte de llamadas VOIP. En el pasado ganaron popularidad en la década de los 80, ya que eran la solución de cómo integrar las nuevas aplicaciones con los sistemas heredados (legacy systems), en todo caso, el termino ha sido usado desde 1968. También facilitaba la computación distribuida, mediante conexión de múltiples aplicaciones para crear una mucha mayor, sobre una red.

Un sistema distribuido es un sistema informático compuesto por computadoras autónomas (nodos) que se comunican mediante una red de comunicación. La principal diferencia entre un sistema distribuido y un sistema en red es la transparencia: en el sistema distribuido hay capas de software que permiten a las aplicaciones ejecutarse como si el sistema fuese parte de una única entidad de computación, mientras que en el sistema en red la aplicación es consciente de los nodos y debe realizar su gestión.

Los sistemas distribuidos son cada vez más populares e importantes en el campo de la computación moderna. Los últimos avances en redes y el enorme despliegue y abaratamiento de los servicios de Internet han sido bien recibidos por los sectores empresariales. Como consecuencia, aplicaciones ya existentes han evolucionado rápidamente desde arquitecturas monolíticas a distribuidas. En este proceso de adaptación se han detectado nuevos requisitos para el software; dentro del proceso actual de globalización de las empresas, se requiere integrar software de empresas adquiridas o desarrollar software que distribuya la gestión de la empresa entre organizaciones geográficamente distribuidas. También se requiere confiabilidad y disponibilidad permanente de dichas aplicaciones.


Actualmente la programación de este tipo de aplicaciones es independiente del lenguaje de programación y se realiza mediante componentes. El componente distribuido es un elemento de desarrollo del software distribuido que se programa de forma independiente del resto de la aplicación, facilitando así el análisis y desarrollo progresivo de partes específicas de la aplicación. Esto tiene como ventaja adicional la reducción del coste de las nuevas aplicaciones distribuidas mediante la reutilización de dichos componentes.

Read Users' Comments (0)

MIDDLEWARE


MIDDLEWARE


El Middleware es un software de conectividad que ofrece un conjunto de servicios que hacen posible el funcionamiento de aplicaciones distribuidas sobre plataformas heterogéneas. Funciona como una capa de abstracción de software distribuida, que se sitúa entre las capas de aplicaciones y las capas inferiores (sistema operativo y red).
Actualmente el uso de Internet como herramienta básica de comunicación es fundamental en muchos sectores industriales y profesionales. Desarrollar software moderno para Internet requiere afrontar nuevos requisitos, como por ejemplo: escalabilidad, el número de nodos y dispositivos gestionados por el sistema no debe establecer un límite para las aplicaciones; adaptabilidad, la aplicación debe soportar simultáneamente una amplia gama de dispositivos con recursos y funciones heterogéneos; flexibilidad, la aplicación debe permitir cambios en las condiciones de entorno, y dinamicidad, los nuevos dispositivos pueden estar disponibles durante breves periodos de tiempo.


HISTORIA DE MIDDLEWARE


Los Middleware han aparecido de manera relativamente reciente en el mundo de la informática, hoy
en día tecnologías móviles (celulares) están aplicando esta tecnología para el soporte de llamadas VOIP. En el pasado ganaron popularidad en la década de los 80, ya que eran la solución de cómo integrar las nuevas aplicaciones con los sistemas heredados (legacy systems), en todo caso, el termino ha sido usado desde 1968. También facilitaba la computación distribuida, mediante conexión de múltiples aplicaciones para crear una mucha mayor, sobre una red.

Un sistema distribuido es un sistema informático compuesto por computadoras autónomas (nodos) que se comunican mediante una red de comunicación. La principal diferencia entre un sistema distribuido y un sistema en red es la transparencia: en el sistema distribuido hay capas de software que permiten a las aplicaciones ejecutarse como si el sistema fuese parte de una única entidad de computación, mientras que en el sistema en red la aplicación es consciente de los nodos y debe realizar su gestión.

Los sistemas distribuidos son cada vez más populares e importantes en el campo de la computación
moderna. Los últimos avances en redes y el enorme despliegue y abaratamiento de los servicios de Internet han sido bien recibidos por los sectores empresariales. Como consecuencia, aplicaciones ya existentes han evolucionado rápidamente desde arquitecturas monolíticas a distribuidas. En este proceso de adaptación se han detectado nuevos requisitos para el software; dentro del proceso actual de globalización de las empresas, se requiere integrar software de empresas adquiridas o desarrollar software que distribuya la gestión de la empresa entre organizaciones geográficamente distribuidas. También se requiere confiabilidad y disponibilidad permanente de dichas aplicaciones.

Actualmente la programación de este tipo de aplicaciones es independiente del lenguaje de

programación y se realiza mediante componentes. El componente distribuido es un elemento de desarrollo del software distribuido que se programa de forma independiente del resto de la aplicación, facilitando así el análisis y desarrollo progresivo de partes específicas de la aplicación. Esto tiene como ventaja adicional la reducción del coste de las nuevas aplicaciones distribuidas mediante la reutilización de dichos componentes.

TAXONOMÍA DE LOS SOFTWARE MIDDLEWARE





Middleware orientado a mensajes
Este tipo de middleware facilita la comunicación mediante intercambio de mensajes.

Los mensajes pueden ser utilizados para solicitar la ejecución de servicio remoto, para notificación distribuida de eventos, o para implementar sistemas basados en publicación-suscripción.
Generalmente el middleware orientado a mensajes sólo proporciona de forma eficiente servicios asíncronos y colas de mensajes (no ofrece soporte para la comunicación síncrona). Este bajo nivel de abstracción suele completarse con capas adicionales que incorporen mecanismos de detección de fallos, gestión de prioridad de mensajes, desacople entre cliente y servidor (para facilitar la escalabilidad del software), y soporte básico de radiado de mensajes (multicast y broadcast).

Middleware basado en RPC
Este tipo de middleware proporciona gestión eficiente de llamadas remotas a procedimiento (Remote Procedure Call --RPC).
La principal ventaja de la RPC es que permite definir la interfaz de comunicación con los componentes mediante un lenguaje de definición de interfaz (Interface Definition Language--IDL).
A partir de esta definición existen herramientas automáticas de generación de código que generan el código necesario para realizar el empaquetado/desempaquetado de los mensajes y gestionar la comunicación a través de la red. Además, la RPC tiene implementaciones (bindings) para múltiples sistemas operativos y lenguajes de programación, aspecto que le convierten en una solución interesante para la programación de sistemas distribuidos multiplataforma.
Desde la perspectiva de los desarrolladores, la RPC además facilita la reutilización de código, ya que se utiliza de forma semejante a una llamada a procedimiento local.

Middleware orientado a transacciones
Este tipo de middleware facilita el desarrollo de sistemas que requieren transacciones distribuidas.
La transacción asegura que un conjunto de operaciones se realicen en todos los nodos del sistema o en ninguno. Generalmente se utilizan en aplicaciones que requieren consistencia de estado entre componentes distribuidos.
El principal inconveniente de este tipo de middleware es su eficiencia; la complejidad inherente a las transacciones distribuidas requiere un alto coste de ejecución. Por esta razón, este tipo de middleware sólo suele utilizarse cuando es realmente imprescindible para la aplicación.

Middleware orientado a objetos
Es una extensión del middleware orientado a RPC que agrega muchas características propias de los
lenguajes de programación orientados a objetos. Estas extensiones incluyen soporte para herencia, referencias a objetos y soporte de excepciones.
El middleware orientado a objetos comparte muchas de las ventajas atribuidas al middleware basado en RPC. De nuevo, el empaquetado y desempaquetado son generados automáticamente por los suplentes del cliente y del servidor, liberando al programador de esta tarea propensa al error.


Middleware basado en grupos
El simple intercambio de mensajes entre un emisor y un receptor, no es siempre un buen modelo de comunicación para un sistema distribuido. En muchas situaciones es más útil disponer de primitivas que permitan enviar datos desde un emisor a un grupo de procesos. Este tipo de comunicación es habitual en sistemas con requisitos de tolerancia a fallos, disponibilidad de servicio o reparto de carga. En estos casos, suele ser más sencillo diseñar la aplicación utilizando radiado de mensajes (multicast).
A continuación se describen brevemente las características de algunos middleware basados en grupos:
Transis: es un middleware con soporte de comunicación con grupo que proporciona comunicación con multicast fiable, y servicios que ayudan en la diseminación y replicación de la información.
Horus: es un middleware para el desarrollo y la experimentación de protocolos. Proporciona una implementación de alto rendimiento del modelo de sincronía virtual. Considera a los protocolos tipos abstractos de datos para proporcionar diferentes calidades de servicio. Este apilamiento se lleva a cabo en tiempo de ejecución, y se fuerza usando una interfaz uniforme y claramente definida, llamada Horus Common Protocol Interface (HCPI).
Ensemble: No es sólo un conjunto de herramientas, sino una arquitectura completa, y un conjunto de protocolos. Entre los objetivos principales que guían el diseño de Ensemble, los siguientes son especialmente destacables: 1) Abstraer la implementación de los niveles de protocolo lo más posible del sistema de ejecución. 2) Soportar la aplicación de métodos formales a implementaciones reales de protocolos de comunicación distribuida. 3) Proporcionar una plataforma flexible para facilitar la experimentación.

Isis: diseñado como un conjunto de herramientas, fue uno de los primeros sistemas que proporcionaron primitivas de comunicación que garantizasen entrega causal y totalmente ordenada. Se diseñó como un conjunto de herramientas para simplificar la construcción de sistemas distribuidos tolerantes a fallos, y está basada en los conceptos de grupo de procesos y sincronía virtual.

EVOLUCION MIDDLEWARE






Modelo centralizado:
• Toda la “inteligencia”, procesamiento de negocio, interfaces y persistencia, se realiza en un host central.
• También conocidas como “Mainframe architectures”
•  Los usuarios interactúan a través de terminales tontas
•  Capturan el teclado, envían la información al host, este procesa y se retorna la pantalla a la terminal.
• La interacción puede realizarse tanto en terminales unix, dos/windows u otras.
• Fueron (y lo son todavía) muy exitosas en ámbitos donde se realizan procesamientos intensos de datos, Por ejemplo, entidades bancarias, procesamiento de tarjetas de crédito, etc. Es común encontrar hoy día mainframes en perfecto funcionamiento. Sus programadores se cotizan en el mercado (escasean).



Modelo centralizado
• Fueron (y lo son todavía) muy exitosas en ámbitos donde se realizan procesamientos intensos de datos.
• Por ejemplo, entidades bancarias, procesamiento de tarjetas de crédito, etc.
• Es común encontrar hoy día mainframes en perfecto funcionamiento.
• Sus programadores se cotizan en el mercado (escasean).





Modelo centralizado
• Empresas como IBM utilizan sus productos tipo mainframe para soportar servidores J2EE.
• El caso de la línea y Series es un ejemplo de ello.
• El mainframe ejecuta un sistema operativo particular el cual ejecuta Websphere (Application Server).
• Las aplicaciones acceden a este como si entraran a un servidor tradicional.
• Hoy día existe un resurgimiento de las arquitecturas tipo mainframe.


Modelo de intercambio de archivos
• Conocidas también como “file sharing architectures”.
• Tiene su punto de partida con la popularización de las redes de área local.
• En esta, el servidor (o el PC) descarga en su espacio local archivos que se encuentran en el servidor.
•             El procesamiento solicitado por el cliente, es realizado en el espacio de procesamiento del mismo.
•             Funcionan cuando el volumen compartido es bajo, la contención por actualizaciones es baja y el volumen transferido es también bajo
•             Un ejemplo de esto, es un sistema desarrollado en Visual Basic con Access
•             Los clientes acceden a través de los programas (almacenado en el servidor en un disco compartido) a una base de datos/archivos indexados compartida
•             Modelo Cliente/Servidor
•             Como una evolución de las anteriores, surge este modelo.
•             El servidor de archivos es reemplazado por una base de datos (relacional).
•             Se tienen dos partes claramente diferenciadas, el cliente y el servidor.
•             El cliente emite consultas, las cuales son respondidas por un servidor.
•             En este caso, se recibe solo la respuesta, en vez de un archivo compartido.
•             El procesamiento es dividido entre el cliente y el servidor, balanceando la carga entre ambos.
•             Existen modelos basados en cliente servidor que extienden la idea:
 Arquitecturas en 2 capas
Arquitecturas en 3 capas
Arquitecturas en 3 capas con
Monitores transaccionales
 Servidores de mensajes
 Servidores de aplicación


Arquitectura en 2 capas
•             La presentación y la lógica de negocio se encuentran en la maquina cliente.
•             Los datos y el acceso a los mismos, se resuelve en el servidor.
•             El servidor suele ser mucho más poderoso que las maquinas cliente.
•             Este tipo de arquitecturas es buena cuando el volumen de los usuarios es alto.
•             Ahora la lógica de negocio puede colocarse también dentro de la base de datos (nuevas herramientas).

Lenguajes de programación en el DBMS (Java, C).
•             Procedimientos almacenados.
•             Triggers.
•             Todos estos enfoques limitan la portabilidad del sistema construido.
•             Sin embargo aumentan la eficiencia de los mismos, ya que el procesamiento:
•             Se hace más cerca de los datos.
•             Se hace en un entorno más poderoso (servidor).
•             Arquitectura en 3 capas
•             También conocidas como arquitecturas multicapa (no están limitadas a 3)
•             Una capa intermedia se añade entre el ambiente del cliente y el servidor de base de datos.
•             Esta capa puede implementarse de múltiples formas:

•                     Servidores de aplicación.
•             Monitores transaccionales.

•             Sistemas de mensajería.




PROTOCOLOS MIDDLEWARE




Protocolos de nivel de transporte de Internet Ambos permiten un paso de mensajes básico.


UDP: con fallos por omisión.

TCP: garantiza la entrega en condiciones normales, pero al coste de una bajada en el rendimiento  Generalmente, usamos TCP sobre IP, o TCP/IP  Aunque TCP/UDP abstraen del nivel de red, no abstraen perfectamente de los niveles de hardware y ssoo  Distinto almacenamiento de números (little endian/big endian)  Distinta codificación de caracteres (ASCII/Unicode).
Hay tres paradigmas de invocación remota Protocolos de petición-respuesta, un modo relativamente a bajo nivel para ejecutar una operación remota.
Sienta las bases para RPC y RMI Remote procedure call (RPC) es el primer modelo (y el más conocido) para facilitar las llamadas a servidores remotos
Remote method invocation (RMI) extensión de RP para la llamada a métodos de objetos en nodos remotos.

Protocolo de petición-respuesta
Se basa en tres primitivas de comunicación doOperation(s,args): invoca una operación remota en  
los argumentos indicados en args (parámetros y tipo de operación) getRequest: espera/adquiere una petición en el servidor  sendReply(r,c): manda el mensaje de respuesta r al cliente c.
WAP son las siglas de Wireless Application Protocol. Define un entorno de aplicación y una pila de protocolos para aplicaciones y servicios accesibles a través de terminales móviles. Consiste en un conjunto de especificaciones, definidas tanto por la Open Mobile Alliance como por el WAP Forum, que permiten a los desarrolladores diseñar aplicaciones de interconexión para terminales móviles, teléfonos generalmente.
La versión 1 de WAP aparece en 1999. El lenguaje de presentación de contenidos o lenguaje de marcas, es el WML, o Wireless Markup Language. En el capítulo siguiente se hablará en profundidad sobre los lenguajes de marcas.

La pila de protocolos de WAP 1 se compone de:
WAE (Wireless Application Environment). Es la base para el desarrollo de aplicaciones de propósito general, se combinan tecnologías similares a las usadas en el WWW y tecnologías relacionadas con telefonía móvil.

WSP (Wireless Session Protocol). Permite definir sesiones. Ofrece dos tipos de servicios, orientados a conexión y no orientados a conexión.

WTP (Wireless Transaction Protocol). Garantiza la entrega de los mensajes.

WTLS (Wireless Transport Layer Security). Proporciona integridad de datos, privacidad y autenticación en la comunicación de dos aplicaciones.


WDP (Wireless Datagram Protocol). Corresponde a la capa de transporte. Su funcionalidad es equivalente al protocolo UDP de Internet y, como él, no garantiza la entrega de los mensajes. Se apoya en los servicios de la "portadora" WAP, que depende de la red móvil que esté usando el terminal.



                                                                       APLICACIONES

En un Sistema Distribuido, el middleware (lógica de la mediación) es un software de conectividad que permite ofrecer un conjunto de servicios que hacen posible el funcionamiento de aplicaciones distribuidas sobre plataformas heterogéneas, el middleware funciona como una capa de abstracción de software distribuida que se sitúa entre las capas de aplicaciones y las capas inferiores (sistema operativo y red).

Los servicios de middleware proporcionan un conjunto más funcional de la API's para permitir una aplicación a:
Localizar claramente a través de la red, proporcionando así una interacción con otro servicio o aplicación
Los datos filtrados para que sean utilizables en un ambiente público a través de anonymization process para la protección de la privacidad.

Middleware ofrece algunas ventajas únicas tecnológicas para los negocios y la industria. Por ejemplo
, los sistemas tradicionales de bases de datos suelen ser desplegados en entornos cerrados, donde los usuarios acceden al sistema sólo a través de una red restringida o intranet (por ejemplo, red interna de una empresa).
Con el crecimiento de la World Wide Web, los usuarios pueden acceder a prácticamente cualquier base de datos para las que tengan derechos de acceso adecuados desde cualquier parte del mundo. Middleware aborda el problema de diferentes niveles de interoperabilidad entre las estructuras de base de datos diferente. Middleware facilita el acceso a la herencia de un sistema de gestión de bases de datos (DBMS) o aplicaciones a través de un servidor web, sin tener en cuenta las características específicas de base de datos.

Las empresas frecuentemente utilizan las aplicaciones de middleware para vincular la información de bases de datos de sus departamentos, tales como nóminas, ventas y contabilidad, o bases de datos alojadas en múltiples localizaciones geográficas. En el mercado de la salud que es altamente competitivo, los laboratorios hacen un amplio uso de aplicaciones de middleware para minería de
datos y sistema informático del laboratorio (LIS), y para combinar los sistemas de información durante fusiones de hospitales. Los Middleware ayudan a reducir la brecha entre LISs separados en una red de salud recién formado a raíz de una compra del hospital.
Los desarrolladores de redes inalámbricas pueden utilizar middleware para afrontar los retos asociados a los de sensores inalámbricos de red (WSN), o tecnologías WSN. La implementación de una aplicación de middleware permite WSN [Los analistas Middleware] desarrolladores]. Para integrar los sistemas operativos y hardware con la amplia variedad de aplicaciones diferentes que están disponibles actualmente.


Los middleware pueden ayudar a los desarrolladores de software a no tener que escribir APIs para todos los programas de control, que actúa como una interfaz de programación independiente para sus aplicaciones. Para la Internet del Futuro, el funcionamiento de la red a través del monitoreo de tráfico en escenarios multi-dominio, utilizando herramientas de mediación (middleware) es una poderosa ayuda, ya que permiten operadores, investigadores y [proveedores de servicios] para supervisar Calidad de servicio y analizar los eventuales fracasos en servicio de telecomunicaciones.


Read Users' Comments (0)

JAVA

Java es un lenguaje de programación orientado a objetos (POO) concebido por unos Ingenieros de

Sun Microsystems compañia adquirida por Oracle en el 2009, inicialmente fue llamado “Oak” hasta 1995 cuando se renombro a Java, luego en 1998 con la versión 1.2 se le empezo a llamar Java2 o J2SE hasta finales del 2006 cuando Sun dejo el nombre en Java SE nombre que tiene hasta la actualidad.




Java es uno de los lenguajes de programación más importantes debido a su portabilidad ya que tiene
la posibilidad de poder crear o diseñar software para todo tipo de aplicaciones (Locales, intranet o internet) y poder ser ejecutado en diferentes plataformas de ahí uno de los axiomas de Java “write once, run anywhere”, que se refiere a que se pudiera usar para crear software incorporado en distintos electrodomésticos como lo son un tostador o un control remoto. Esto es gracias a que al compilar el código java genera un código conocido como Bytecode que son instrucciones las cuales puede interpretar una Máquina Virtual (JVM) que es encargada de ejecutarlo, claro para implementarlo en electrodomésticos como mencione estos correrían en versiones más compactas de la Máquina Virtual según el caso.
Estas características son las que llevaron a que el venerable C++ pudiera evolucionar en lo que Microsoft desarrollo como C# el cual toma las mejores características de C++ y las mencionadas de Java logrando un lenguaje de programación más puro y con mayor control pero de eso ya hablare en otra ocasión. Algunas de las palabras con las que podemos definir Java son:
  • Simple
  • Seguro
  • Portátil
  • Orientado a Objetos
  • Robusto
  • Multihilo
  • Arquitectura Neutral
  • Interpretado
  • Alto Rendimiento
  • Distribuido
  • Dinámico


Y ya que el núcleo de Java es la programación orientada a objetos cuya metodología es inherente a Java y por lo tanto todo programa en java es en algún grado orientado a objetos por lo cual para poder programar en este lenguaje es necesario comprender los principios de la POO cuales características son encapsulación, polimorfismo y herencia.



Hoy en día podemos ver todo tipo de aplicaciones desarrolladas en Java como lo son algunos sitios en
internet que funcionan con JavaServer Pages, que incluyen Beans, Servlets o Applets como lo hace el sitio del Banco Santander, aplicaciones visuales de escritorio como lo es mismo IDE de Oracle para Java NetBeans, aplicaciones y juegos que encontramos en algunos teléfonos moviles hechas en j2ME, el Sistema Operativo Android desarrollado por Google para dispositivos mobiles y Tablets, en fin java lo podemos encontrar en todas partes.

Read Users' Comments (0)

PROGRAMACIÓN ORIENTADA A OBJETOS

La programación orientada a objetos o POO (OOP según sus siglas en inglés) 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 objeto.
 
Los objetos son entidades que tienen un determinado estado, comportamiento (método) e identidad:
El estado está compuesto de datos o informaciones; serán uno o varios atributos a los que se habrán asignado unos valores concretos (datos).El comportamiento está definido por los métodos o mensajes a los que sabe responder dicho objeto, es decir, qué operaciones se pueden realizar con él. 
La identidad es una propiedad de un objeto que lo diferencia del resto; dicho con otras palabras, es su identificador (concepto análogo al de identificador de una variable o una constante).Un objeto contiene toda la información que permite definirlo e identificarlo frente a otros objetos pertenecientes a otras clases e incluso frente a objetos de una misma clase, al poder tener valores bien diferenciados en sus atributos. A su vez, los objetos disponen de mecanismos de interacción llamados métodos, que favorecen la comunicación entre ellos. Esta comunicación favorece a su vez el cambio de estado en los propios objetos. Esta característica lleva a tratarlos como unidades indivisibles, en las que no se separa el estado y el comportamiento. 

Los métodos (comportamiento) y atributos (estado) están estrechamente relacionados por la propiedad de conjunto. Esta propiedad destaca que una clase requiere de métodos para poder tratar los atributos con los que cuenta. El programador debe pensar indistintamente en ambos conceptos, sin separar ni darle mayor importancia a alguno de ellos. Hacerlo podría producir el hábito erróneo de crear clases contenedoras de información por un lado y clases con métodos que manejen a las primeras por el otro. De esta manera se estaría realizando una programación estructurada camuflada en un lenguaje de programación orientado a objetos.

 La POO difiere de la programación estructurada tradicional, en la que los datos y los procedimientos están separados y sin relación, ya que lo único que se busca es el procesamiento de unos datos de entrada para obtener otros de salida. La programación estructurada anima al programador a pensar sobre todo en términos de procedimientos o funciones, y en segundo lugar en las estructuras de datos que esos procedimientos manejan. En la programación estructurada solo se escriben funciones que procesan datos. Los programadores que emplean programación orientada a objetos, en cambio, primero definen objetos para luego enviarles mensajes solicitándoles que realicen sus métodos por sí mismos.  Origen Los conceptos de la programación orientada a objetos tienen origen en Simula 67, un lenguaje diseñado para hacer simulaciones, creado por Ole-Johan Dahl y Kristen Nygaard, del Centro de Cómputo Noruego en Oslo. En este centro se trabajaba en simulaciones de naves, que fueron confundidas por la explosión combinatoria de cómo las diversas cualidades de diferentes naves podían afectar unas a las otras. La idea surgió al agrupar los diversos tipos de naves en diversas clases de objetos, siendo responsable cada clase de objetos de definir sus propios datos y comportamientos. Fueron refinados más tarde en Smalltalk, desarrollado en Simula en Xerox PARC (cuya primera versión fue escrita sobre Basic) pero diseñado para ser un sistema completamente dinámico en el cual los objetos se podrían crear y modificar "sobre la marcha" (en tiempo de ejecución) en lugar de tener un sistema basado en programas estáticos. La programación orientada a objetos se fue convirtiendo en el estilo de programación dominante a mediados de los años ochenta, en gran parte debido a la influencia de C++, una extensión del lenguaje de programación C. Su dominación fue consolidada gracias al auge de las Interfaces gráficas de usuario, para las cuales la programación orientada a objetos está particularmente bien adaptada. En este caso, se habla también de programación dirigida por eventos.


 Las características de orientación a objetos fueron agregadas a muchos lenguajes existentes durante
ese tiempo, incluyendo Ada, BASIC, Lisp más Pascal, entre otros. La adición de estas características a los lenguajes que no fueron diseñados inicialmente para ellas condujo a menudo a problemas de compatibilidad y en la capacidad de mantenimiento del código. Los lenguajes orientados a objetos "puros", por su parte, carecían de las características de las cuales muchos programadores habían venido a depender. Para saltar este obstáculo, se hicieron muchas tentativas para crear nuevos lenguajes basados en métodos orientados a objetos, pero permitiendo algunas características imperativas de maneras "seguras". El Eiffel de Bertrand Meyer fue un temprano y moderadamente acertado lenguaje con esos objetivos, pero ahora ha sido esencialmente reemplazado por Java, en gran parte debido a la aparición de Internet y a la implementación de la máquina virtual de Java en la mayoría de navegadores. PHP en su versión 5 se ha modificado; soporta una orientación completa a objetos, cumpliendo todas las características propias de la orientación a objetos.  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 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.  Características de la POO
Existe un acuerdo acerca de qué características contempla la "orientación a objetos". 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. 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. Algunos lenguajes relajan esto, permitiendo un acceso directo a los datos internos del objeto de una manera controlada y limitando el grado de abstracción. La aplicación entera se reduce a un agregado o rompecabezas de objetos.


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.

Recolección de basura: La recolección de basura o garbage collection 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. En la mayoría de los lenguajes híbridos que se extendieron para soportar el Paradigma de Programación Orientada a Objetos como C++ u Object Pascal, esta característica no existe y la memoria debe desasignarse expresamente.

Read Users' Comments (0)

EMULADORES


Un emulador es un software que permite ejecutar programas o videojuegos en una plataforma (sea una arquitectura de hardware o un sistema operativo) diferente de aquella para la cual fueron escritos originalmente. A diferencia de un simulador, que solo trata de reproducir el comportamiento del programa, un emulador trata de modelar de forma precisa el dispositivo de manera que este funcione como si estuviese siendo usado en el aparato original.Un uso popular de los emuladores es el de imitar la experiencia de los videojuegos de máquinas recreativas o videoconsolas en computadoras personales, o el poder ser jugados en otras videoconsolas.


Emulador para Windows Mobile



Un emulador de dispositivos Windows Mobile con prácticamente las mismas funciones que cualquier
Terminal del mercado con este sistema. Además se integra las con Visual Studio aunque no os obligatorio. El módulo Cellular Emulator que nos permite emular un teléfono realizando, por ejemplo, llamadas al teléfono del Windows Mobile “virtual”.







Emulador para Blackberry



Para BlackBerry existe una amplia oferta de emuladores destacando BlackBerry Smartphone
Simulator. La funcionalidad incluye la misma interacción del usuario de un dispositivo real (incluida la rueda o bola de desplazamiento y el teclado), las mismas aplicaciones y las mismas características, como los mensajes de correo electrónico, el teléfono y el explorador de Internet. BlackBerry Smartphone Simulator también sirve como plataforma sobre la que ejecutar aplicaciones: establecer conexiones de red, almacenar datos y gestionar mensajes de correo electrónico. Con BlackBerry Smartphone Simulator para realizar pruebas, se pueden BlackBerry MDS Simulator y BlackBerry Email Simulator, y que también estarían disponibles para este fin.


Emulador para iPhone



Para la plataforma iPhone la oferta de emuladores es limitada, de estos recomendamos
MobiOne.MobiOne es un IDE y emulador de pago para iPhone, ofrece:
Un editor y depurador para JavaScript, CSS3 y HTML5
Plantillas para iPhone Web Apps
Soporte para geolocalización
Switcher para los User Agent
Diseñador visual para hacer maquetas Web para móviles
Soporte para Phone Gap



La SDK de Android



Incluye un emulador, este emulador mimetiza todas las características de hardware y software del
dispositivo móvil.Una de las ventajas de este emulador sería que proporciona una interfaz en la que podemos ver nuestra aplicación corriendo con otra serie de aplicaciones android. El emulador para Android soporta AVD (Android Virtual Device), y permite especificar la versión del sistema operativo, características del dispositivo, con el emulador podemos también simular interrupciones en la aplicación (equivalente a un sms o una llamada).


El Nokia Mobile Browser Simulator




 Forma parte de Nokia Mobile Internet Toolkit. NMIT sería un conjunto de editores para la creación
de diversos tipos de contenidos de Internet para móviles y la previsualización de estos contenidos en diferentes SDKs para móviles.
Nokia Mobile Browser Simulator (NMB) es un Navegador de desarrollo para navegar por contenidos de internet para móviles (a través de una conexión WAP) y contenido en archivos locales.Soporta las características del contenido que se produce con el Nokia Mobile Internet Toolkit 4.0 y puede ser utilizado para mostrar contenido xHTML y WML, así como mensajes Push. 

Read Users' Comments (0)

LENGUAJES DE PROGRAMACIÓN PARA EL DESARROLLO DE APPS

Los lenguajes de programación para los dispositivos móviles dependen en gran parte del dispositivo en el que se quiera trabajar, sin embargo tienen en común que se puede crear sistemas visuales robustos con mayor facilidad independientemente del lenguaje de programación que se esté aplicando, por supuesto dicho lenguaje debe soportar la metodología de programación con la que trabaja el dispositivo en particular.


Java
Para dispositivos móviles la versión de Java en la que se programa es J2ME (JavaMicro Edition).











Lenguaje de C++
Una de las herramientas que se utilizan para la programación de móviles basadas en el lenguaje de C++ es Carbide.c++ la cual trabaja en la plataforma de Symbian.





Lenguaje de C#

Para desarrollar aplicaciones en dispositivos móviles a través de este lenguaje de programación se
puede utilizar la herramienta de Visual C# que trabaja con un IDE para diseñar las ventanas de la aplicación.







Objective – C  
Este lenguaje de programación está basado en C y a diferencia de C++ es un súper conjunto del
lenguaje C, ya que agrega a la sintaxis de C la manera de enviar mensajes enSmall-Talk y de definir e implementar objetos.

 





.NET
Es un Framework (estructura de soporte para organizar y desarrollar software) de Microsoft que permite un rápido desarrollo de aplicaciones.










Python
Este lenguaje de programación orientado a objetos es utilizado para dispositivos móviles tales como
Symbian, Palm, teléfonos inteligentes de Nokia, etc., también se puede emplear en otras plataformas tales como Windows, Linux/Unix, Mac OS X, OS/2 y también ha sido portado para maquinas virtuales de Java y .Net, distribuido bajo la licencia de código abierto OSI lo hace libre en su uso.

PHP
(Procesador de Hipertexto) es un lenguaje orientado para script de servidores, diseñado para sitios
web dinámicos y el desarrollo de aplicaciones. Se puede integrar directamente en un documento fuente HTML en lugar de un archivo externo, el cual ha hecho que sea un lenguaje de programación popular para los desarrolladores web. PHP corre más de 200 millones de sitios web, incluyendo WordPress, Digg y Facebook.



HTML5
(HyperText Markup Language, versión 5) es la quinta revisión importante del lenguaje básico de la
World Wide Web, HTML. HTML5 especifica dos variantes de sintaxis para HTML: un «clásico» HTML (text/html), la variante conocida como HTML5 y una variante XHTML conocida como sintaxis XHTML5 que deberá ser servida como XML. Esta es la primera vez que HTML y XHTML se han desarrollado en paralelo.

Read Users' Comments (0)