lunes, 1 de agosto de 2011

¿QUÉ ES LA PROGRAMACIÓN 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 modelizarlo 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.
Pues en un esquema POO el coche sería el objeto, las propiedades serían las características como el color o el modelo y los métodos serían las funcionalidades asociadas como ponerse en marcha o parar.
Por poner otro ejemplo vamos a ver cómo modelizaríamos en un esquema POO una fracción, es decir, esa estructura matemática que tiene un numerador y un denominador que divide al numerador, por ejemplo 3/2.
La fracción será el objeto y tendrá dos propiedades, el numerador y el denominador. Luego podría tener varios métodos como simplificarse, sumarse con otra fracción o número, restarse con otra fracción, etc.
Estos objetos se podrán utilizar en los programas, por ejemplo en un programa de matemáticas harás uso de objetos fracción y en un programa que gestione un taller de coches utilizarás objetos coche. Los programas Orientados a objetos utilizan muchos objetos para realizar las acciones que se desean realizar y ellos mismos también son objetos. Es decir, el taller de coches será un objeto que utilizará objetos coche, herramienta, mecánico, recambios, etc.

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 e 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.
Otras cosas
Hay mucho todavía que conocer de la POO ya que sólo hemos hecho referencia a las cosas más básicas. También existen mecanismos como la herencia y el polimorfismo que son unas de las posibilidades más potentes de la POO.
La herencia sirve para crear objetos que incorporen propiedades y métodos de otros objetos. Así podremos construir unos objetos a partir de otros sin tener que reescribirlo todo.
El polimorfismo sirve para que no tengamos que preocuparnos sobre lo que estamos trabajando, y abstraernos para definir un código que sea compatible con objetos de varios tipos.
Son conceptos avanzados que cuesta explicar en las líneas de ese informe. No hay que olvidar que existen libros enteros dedicados a la POO y aquí solo pretendemos dar un repaso a algunas cosas para que os suenen cuando tengáis que poneros delante de ellas en los lenguajes de programación que debe conocer un desarrollador del web.

Ejemplo concreto de programación orientada a objetos
Para conseguir un ejemplo concreto de lo que es la programación orientada a objetos, podemos entrar en elManual de PHP 5. Realmente este manual explica las características de orientación a objetos de PHP 5 y ofrece ejemplos concretos de creación de clases con características como herencia, polimorfismo, etc.

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


FUENTES:
http://www.desarrolloweb.com/articulos/499.php
http://es.wikipedia.org/wiki/Programaci%C3%B3n_orientada_a_objetos

IDEs PARA JAVA II

La elección de un IDE para trabajar con Java es una decisión muy importante. El hecho de que Sun ponga a disposición gratuita el JDK de Java, y otras descargas, ha permitido aflorar un cúmulo de aplicaciones de apoyo a los desarrolladores Java, incluyendo IDEs. Particularmente he trabajado bastante a fondo con dos de ellos, Sun One Studio y Eclipse. De todos modos existen y a lo largo del tiempo han existido muchos otros. AnyJ, NetBeans, Sun Java Studio Creator, Borland JBuilder, IBM WebSphere Studio Application Developer.
La mayoría de estos IDE's son propietarios de compañías como Sun, Borland o IBM. Esto es un inconveniente, tanto monetario si quieres operar con una licencia legal, incluso problematico de cara a la compatibilidad de los ficheros generados, en algunos casos muy puntuales. Aún así son opciones muy validas y cada cual podrá comparar a su gusto con el entorno que mejor se desenvuelve.
En este enlace, os dejo una comparativa (lastima que esté en inglés), realizada con los cinco IDE's mas importantes (el artículo es de 2005), para mas información ajena a este sitio.
Mi experiencia con Sun One Studio, de la que conocí hasta la versión 7, no fue mala, de hecho el entorno era bastante completo, pero el coste de adquisición de licencias para operar con el, y el hecho mismo de ser un software mantenido únicamente por Sun, no me terminó de convencer (ojo, opinines mias).
Si debo aconsejar la utilización de un IDE, por parte de los lectores para programar en Java, me quedo sin duda con Eclipse. Eclipse es un IDE que soporta multiples lenguajes, y mucho mas. Me refiero al permitir de una forma muy cómoda, trabajar con varias tecnologías asociadas. En estos momentos, estoy redactando este tutorial desde el plug-in Oxygen para Eclipse, que me permite trabajar con tecnologías basadas en XML.
En la sección anterior tuvisteis la oportunidad de comprabar el aspecto de un pantallazo de Eclipse en ejecución sobre Windows.
Eclipse es mucho mas que un simple IDE, es toda una comunidad de desarrolladores de código libre, dedicados a la implementación de mejoras del entorno. Además algunas de las firmas mas importantes del sector, como IBM dan soporte a la Fundación Eclipse para su desarrollo. Incluso Sun, tradicionalmente defensora de su IDE gratuito NetBeans, parece dispuesta a estrechar lazos con la Fundación.


Enfocaré la descripción que haga de Eclipse a su puesta a punto para empezar a programar en Java. Desde la misma página principal de eclipse, no obstante, teneís acceso a todos los proyectos de la comunidad , a la descarga del software necesario según la plataforma, de modo gratuito, y a todas las noticias interesantes que acontecen en la comunidad. Por ello no me extenderá mas en explicar este sitio.
Eclipse parte de una instalación base, orientada a varios perfiles de desarrollador. Desarrollador Java, Desarr.Java EE, Desaroll. C/C++, Desarrollador de plug-ins, y el Clásico de eclipse, que incluye código fuente. Bajo estas lineas una captura de la página de 
Para nuestros propositos de iniciación a programadores Java, bastará con descargar la distribución Eclipse IDE for Java Developers. La cual como podreís observar está disponible para Mac, Linux y Windows.

Con este software, y tras instalarlo en nuestro ordenador, previa instalación del JDK de Java, ya podremos realizar nuestro primeros programas Java en un entorno mucho mas cómodo. No es el objeto de esta guia enseñar la utilización del IDE eclipse, pero su manejo es bastante sencillo e intuitivo y viene con ayuda en linea para comenzar a trabajar con eclipse.
Eclipse, además tiene una comunidad de desarrolladores, realmente activa. Continuamente se están desarrollando nuevos y revisando anteriores plug-ins. Al igual que en cualquier otro software, eclipse permite la instalación de plug-ins destinados a mejorar las funcionalidades del propio IDE y a extenderse en cada vez mas tecnologías. Como anteriormente os comentaba, ahora mismo escribo este tutorial en la vista del plug-in Oxygen XML, para eclipse.
Eclipse tiene abiertos una grana cantidad de proyectos, para ampliación del IDE, y que en este entorno se instalan conociendose como plug-ins. En este enlace existe una lista completa de los proyectos que se están desarrollando para eclipse por la comunidad de desarrolladores. La cantidad de ellos es enorme, y la mayoría disponen de espacios propios en el sitio de eclipse, tanto para ver la evolución o noticias del desarrollo, para reportar bugs, descargas, etc...
Dado que esta guia pretende mostrar lo necesario para la utilización del IDE como solución en el desarrollo de Java, no voy a comentar todos los plug-ins, ya que de hecho, es algo muy personal, y en funión de la tecnología con la que trabajemos y nuestras necesidades como desarrolladores, el que instalemos uno u otro plug-in.
Aún así no dejaré pasar esta oportunidad para aconsejar, que una vez tengamos instalado el IDE para Java que recomendamos anteriormente, probemos con la instalación de uno de los plug-ins mas interesantes a la hora de desarrollar aplicaciones visuales en Java (formularios, campos de texto, menús, etc...), como la clase oneSimpleWindow que vimos en un ejemplo anterior
. Se trata del plug-in Visual editor - VE, perteneciente al Tools Project en Eclipse.
Esta es la página principal del proyecto, desde donde podeís descargar e instalar el plug-in para eclipse. Fijaos en el pantallazo anterior para el desarrollo de la clase oneSimpleWindowque vimos anteriormente, en mi instalación (eclipse 3.2).

Aspecto de eclipse, trabajando con una clase con el editor Visual Editor.


Como podeís ver en el editor (en el centro de la pantalla), se trata de un plug-in, que nos permite trabajar con las clases Visuales de Java (AWT y Swing), al estilo arrastrar y colocar. Incluso fijaos en la paleta de controles (clases visuales de Java), situado a la derecha de la captura. De esta forma podemos, crear una clase como oneSimpleWindow con cinco acciones de arrastrar y soltar.
Eclipse desarrolla proyectos muy, pero que muy ineteresantes para programar con Java, que debieriais descubrir, echando un vistazo a su sitio eclipse.org, además de Visual Editor, podeís encontrar plug-ins muy importantes, como por ejemplo Dali Java Persistence Tools, dentro de Eclipse Web Tools Platform Project. Es un proyecto que permite, integrado en el IDE eclipse, implementar persistencia de datos en nuestras aplicaciones Java (con Bases de datos), al igual que otras utilidades conocidas y mas asentadas como hibernate. Proyectos muy interesantes, también, son los incluidos dentro de Test and Performance Tools Platform Project, que permiten la monitorización de nuestras clases Java en ejecución, y el testeo de las mismas, todo ello orientado al ajuste y rendimiento de las aplicaciones que desarrollemos. En fin, como estos, una cantidad de proyectos interesantisimos, y que nosotros como programadores agradeceremos, ya que facilitan nuestra tarea como programadores.
A los que barajeís Eclipse como una opción interesante de IDE, sería bueno, que echarais un vistazo mas comprometido al sitio eclipse.org, para estar informado de las novedades con respecto a todos los proyectos relacionados. Además Eclipse, no se trata de un IDE tan solo para Java, así que todo el aprendizaje que se realice sobre este IDE, será tarea avanzada, cuando pretendamos usarlo como IDE de otras tecnologías, como html,php,xml,C,etc...
Con esto finalizamos el apartado dedicado a los IDE's para java. No hemos realizado una exhaustivo analisis de ninguno de ellos, ni hemos visto las especificaciones de Eclipse, pero para eso están todas la páginas de soporte de sus respectivos creadores y comunidades que los mantienen.
Mi consejo, es que quien ya trabaje con un IDE compatible, lo mantenga, y quien empieza con la necesidad de obtener un nuevo IDE, que se plantee seriamente las ventajas que puede tener comenzar a aprender a trabajar con Eclipse, que es el que yo aconsejo.
Despues de ver la necesidad como desarrolladores Java de disponer de un IDE integrado, creo que estamos en disposición de comenzar a programar y programar en Java, que a buen seguro, lo estaremos haciendo de la forma correcta y como profesionales de la materia.
FUENTE: 
http://www.redribera.es/formacion/tutoriales/viewfile.html?file=javaintro0108-5.xml

Entorno de desarrollo integrado (IDE)

Un entorno de desarrollo integrado o Integrated Development Environment (IDE) es un programa compuesto por un conjunto de herramientas para un programador.
Puede dedicarse en exclusiva a un lenguaje de programación o bien, poder utilizarse para varios.

Un IDE es un entorno de programación que ha sido empaquetado como un programa de aplicación, es decir, consiste en un editor de código, un compilador, un depurador y un constructor de interfaz gráfica GUI. Los IDEs pueden ser aplicaciones por si solas o pueden ser parte de aplicaciones existentes. El leguaje Basic por ejemplo puede ser usado dentro de las aplicaciones de Microsoft Office, lo que hace posible escribir sentencias Basic en forma de macros para Word.
Los IDEs proveen un marco de trabajo amigable para la mayoría de los lenguajes de programación tales como C++, Java, C#, Basic, Object Pascal, etc.

Algunos ejemplos de entornos integrados de desarrollo (IDE) con su respectivo link para mas detalles son los siguientes:

  • Eclipse
  • NetBeans
  • IntelliJ IDEA
  • JBuilder de Borland
  • JDeveloper de Oracle
  • KDevelop
  • Anjuta
  • Clarion
  • MS Visual Studio .NET de Microsoft
  • Delphi de Borland
  • e-Des
  • RadRails para Ruby on Rails
  • Code::Blocks
  • Zend Studio 
La gama de productos de Visual Studio comparte un único entorno de desarrollo integrado (IDE) que se compone de varios elementos: la barra de menús, la barra de herramientas Estándar, varias ventanas de herramientas que se acoplan u ocultan automáticamente a la izquierda, en la parte inferior y a la derecha, así como en el espacio del editor. Las ventanas de herramientas, menús y barras de herramientas disponibles dependen del tipo de proyecto o archivo en el que esté trabajando.
Figura 1: IDE con la configuración de desarrollo general aplicada

IDE con configuración de desarrollo general aplicado.

Dependiendo de la configuración aplicada y de las subsiguientes personalizaciones que haya realizado, variará la colocación de las ventanas de herramientas y de otros elementos en el IDE. Puede cambiar la configuración mediante el Import and Export Settings Wizard. Al seleccionar la opción Restablecer todas las configuraciones, se puede cambiar el lenguaje de programación predeterminado.
Puede desplazarse y acoplar ventanas con facilidad mediante el rombo de guía visual u ocultar temporalmente las ventanas utilizando el comando Ocultar automáticamente. Para obtener más información, vea Cómo: Organizar y acoplar ventanas.
Puede utilizar el modelo de automatización de Visual Studio para automatizar y extender el IDE. Para obtener más información, vea Personalizar, automatizar y ampliar el entorno de desarrollo.

Las soluciones y los proyectos contienen elementos en forma de referencias, conexiones de datos, carpetas y archivos necesarios para crear la aplicación. Un contenedor de tipo solución puede contener varios proyectos y un contenedor de tipo proyecto normalmente contiene varios elementos. Para obtener más información, vea Soluciones como contenedores y Proyectos como contenedores.
El Solution Explorer muestra soluciones, sus proyectos y los elementos incluidos en dichos proyectos. En el Explorador de soluciones, puede abrir archivos para editar, agregar nuevos archivos a un proyecto y ver las propiedades de las soluciones, proyectos y elementos.
Figura 2: Explorador de soluciones

Ventana Explorador de soluciones

Para obtener más información, vea Utilizar el Explorador de soluciones y Cómo: Crear soluciones y proyectos.

El editor y los diseñadores que utilice dependerán del tipo de archivo o documento que esté creando. El Editor de texto es el procesador de textos básico del IDE, mientras que el Editor de código es el editor de código fuente básico.
Otros editores, como el Editor CSS, el Diseñador HTML y el Diseñador de páginas Web, comparten muchas de las características del Editor de código, junto con mejoras específicas en el tipo de código o de marcado admitido.
Los editores y diseñadores normalmente tienen dos vistas: una vista de diseño gráfica y la vista de código subyacente o vista de código fuente. La vista de diseño le permite especificar la ubicación de los controles y otros elementos en la interfaz de usuario o la página web. Puede arrastrar controles desde el cuadro de herramientas y colocarlos en la superficie de diseño.
Figura 3: Diseñador de páginas Web, vista Diseño

Diseñador de páginas Web, vista Diseño

La vista Código fuente muestra el código fuente del archivo o documento. Esta vista admite ayudas de codificación como IntelliSense, secciones de código plegables, Refactorización (C#) e inserción de fragmentos de código. Otras características incluyen el ajuste automático de línea, los marcadores y la visualización de números de línea, por citar algunos. Para obtener más información, vea Funciones y comandos prácticos del editor.
Figura 4: Diseñador de páginas Web, vista Código fuente

Diseñador de páginas Web, vista Código fuente

Algunos editores, como el Diseñador de páginas web y el Diseñador XAML, también proporcionan una vista híbrida que le permite ver la vista del gráfico y del código de un archivo simultáneamente. Esta vista se llama la Vista dividida.
Figura 5: Diseñador de páginas web, Vista dividida

Vista de la ficha Dividir del Diseñador HTML

Visual Studio proporciona un sólido conjunto de herramientas de compilación y depuración. Con las configuraciones de compilación puede seleccionar los componentes que se van a generar, excluir los que no se van a generar y determinar cómo se van a generar los proyectos seleccionados y en qué plataforma. Puede tener configuraciones de compilación para soluciones y para proyectos. Para obtener más información, vea Cómo: Crear y editar configuraciones y Versiones de generación durante el desarrollo de una aplicación.
Cuando genera, está comenzando el proceso de depuración. La compilación de la aplicación le ayuda a detectar errores de compilación. Estos errores pueden deberse a una sintaxis incorrecta, a palabras clave mal escritas o a divergencias entre los tipos. La Resultados (Ventana) muestra estos tipos de errores.
Figura 6: Ventana de salida con información de compilación

Ventana Resultados con información de generación

Después de generar la aplicación, puede utilizar el depurador para detectar y corregir problemas como errores lógicos y semánticos que se descubren en tiempo de ejecución. En el modo de interrupción, puede examinar las variables locales y otros datos pertinentes utilizando herramientas como Ventanas de variables y Memoria (Ventana).
Figura 7: Formulario de Visual Basic en el modo de interrupción

Ejemplo de punto de interrupción de depuración en Visual Basic

Figura 8: Ventanas de herramientas de depuración

Herramientas de depuración

La Lista de errores (Ventana) muestra errores, advertencias y otros mensajes relacionados con la depuración.
Para obtener más información, vea Guía básica del depurador.

Visual Studio proporciona dos estrategias de implementación diferentes: ClickOnce y Windows Installer. Con la implementación de ClickOnce, publica la aplicación en una ubicación centralizada y el usuario instala o ejecuta la aplicación desde esa ubicación. La implementación de Windows Installer permite empaquetar la aplicación en un archivo setup.exe y distribuir ese archivo entre los usuarios; ellos ejecutan el archivo setup.exe para instalar la aplicación. Para ver una comparación detallada, consulte Elegir una estrategia de implementación.
ClickOnce permite implementar rápidamente aplicaciones mediante el Asistente para publicación.
Figura 9: Asistente para publicación

Asistente para publicación

Para obtener más información, vea Cómo: Publicar una aplicación ClickOnce sin usar el Asistente para publicación.
La implementación de Windows Installer proporciona mayor flexibilidad para implementar aplicaciones. Varios editores, como el Editor de acciones personalizadas y el Editor de la interfaz de usuario, permiten personalizar Windows Installer para satisfacer sus necesidades de implementación. Para crear un archivo de instalación básico, utilice el Editor del sistema de archivos, para especificar qué elementos desea implementar.
Figura 10: Editor del sistema de archivos

Editor del sistema de archivos de Windows Installer

Para obtener más información, vea Windows Installer Deployment Tasks y Editores de implementación.

Para obtener acceso a la Ayuda, puede presionar F1 en el IDE o hacer clic en Documentación de Visual Studio en el menú Ayuda. La documentación de la Ayuda se muestra en el explorador web. Puede utilizar la Ayuda instalada localmente o MSDN en pantalla y otros de recursos en pantalla para obtener ayuda.
Figura 11: Ayuda en la ventana del explorador

Página de búsqueda de la Ayuda


FUENTES:
  • http://msdn.microsoft.com/es-es/library/ms165088.aspx
  • http://foro.ignetwork.net/showthread.php?15188-IDE-Entorno-integrado-de-desarrollo-(Concepto-importante)

SISTEMA OPERATIVO

Un sistema operativo (SO) es el programa o conjunto de programas que efectúan la gestión de los procesos básicos de un sistema informático, y permite la normal ejecución del resto de las operaciones.1
Nótese que es un error común muy extendido denominar al conjunto completo de herramientas sistema operativo, es decir, la inclusión en el mismo término de programas como el explorador de ficheros, el navegador y todo tipo de herramientas que permiten la interacción con el sistema operativo, también llamado núcleo okernel. Uno de los más prominentes ejemplos de esta diferencia, es el núcleo Linux, que es el núcleo del sistema operativo GNU,  del cual existen las llamadasdistribuciones GNU. Este error de precisión, se debe a la modernización de la informática llevada a cabo a finales de los 80, cuando la filosofía de estructura básica de funcionamiento de los grandes computadores2 se rediseñó a fin de llevarla a los hogares y facilitar su uso, cambiando el concepto de computador multiusuario, (muchos usuarios al mismo tiempo) por un sistema monousuario (únicamente un usuario al mismo tiempo) más sencillo de gestionar.3 (Véase AmigaOSbeOS o MacOS como los pioneros4 de dicha modernización, cuando los Amiga, fueron bautizados con el sobrenombre de Video Toasters5 por su capacidad para la edición en video en entorno multitarea round robin, con gestión e miles de colores e interfaces intuitivos para diseño en 3D.
Uno de los propósitos del sistema operativo que gestiona el núcleo intermediario consiste en gestionar los recursos de localización y protección de acceso del hardware, hecho que alivia a los programadores de aplicaciones de tener que tratar con estos detalles. La mayoría de aparatos electrónicos que utilizan microprocesadores para funcionar, llevan incorporado un sistema operativo. (teléfonos móviles, reproductores de DVD, computadoras, radios, enrutadores, etc).

El sistema operativo como máquina virtual
Un computador se compone de uno o más procesadores o CPUs, memoria principal o RAM, memoria secundaria (discos), tarjetas de expansión (tarjetas de red, modems y otros), monitor, teclado, mouse y otros dispositivos. O sea, es un sistema complejo. Escribir programas que hagan uso correcto de todas estas componentes no es una tarea trivial. Peor aún si hablamos de uso óptimo. Si cada programador tuviera que preocuparse de, por ejemplo, como funciona el disco duro del computador, teniendo además siempre presentes todas las posibles cosas que podrían fallar, entonces a la fecha se habría escrito una cantidad bastante reducida de programas. 
Es mucho más fácil decir `escriba "Chao" al final del archivo "datos"', que
1-Poner en determinados registros del controlador de disco la dirección que se quiere escribir, el número de bytes que se desea escribir, la posición de memoria donde está la información a escribir, el sentido de la operación (lectura o escritura), amén de otros parámetros;
2-Decir al controlador que efectué la operación.
3-Esperar. Decidir qué hacer si el controlador se demora más de lo esperado (¿cuánto es "lo esperado"?).
4-Interpretar el resultado de la operación (una serie de bits).
5-Reintentar si algo anduvo mal.
6-etc.
Además, habría que reescribir el programa si se instala un disco diferente o se desea ejecutar el programa en otra máquina. 
Hace muchos años que quedó claro que era necesario encontrar algún medio para aislar a los programadores de las complejidades del hardware. Esa es precisamente una de las tareas del sistema operativo, que puede verse como una capa de software que maneja todas las partes del sistema, y hace de intermediario entre el hardware y los programas del usuario. El sistema operativo presenta, de esta manera, una interfaz o máquina virtual que es más fácil de entender y de programar que la máquina "pura". Además, para una misma familia de máquinas, aunque tengan componentes diferentes (por ejemplo, monitores de distinta resolución o discos duros de diversos fabricantes), la máquina virtual puede ser idéntica: el programador ve exactamente la misma interfaz. 
El sistema operativo como administrador de recursos
La otra tarea de un sistema operativo consiste en administrar los recursos de un computador cuando hay dos o más programas que ejecutan simultáneamente y requieren usar el mismo recurso (como tiempo de CPU, memoria o impresora). 
Además, en un sistema multiusuario, suele ser necesario o conveniente compartir, además de dispositivos físicos, información. Al mismo tiempo, debe tenerse en cuenta consideraciones de seguridad: por ejemplo, la información confidencial sólo debe ser accesada por usuarios autorizados, un usuario cualquiera no debiera ser capaz de sobreescribir áreas críticas del sistema, etc. (En este caso, un usuario puede ser una persona, un programa, u otro computador). En resumen, el sistema operativo debe llevar la cuenta acerca de quién está usando qué recursos; otorgar recursos a quienes los solicitan (siempre que el solicitante tenga derechos adecuados sobre el recurso); y arbitrar en caso de solicitudes conflictivas. 
Las tareas que generalmente realiza un Sistema Operativo son las siguientes:
-Realizar el interfaz sistema-usuario.
-Compartir los recursos de Hardware entre los usuarios.
-Permitir a los usuarios compartir sus datos entre ellos.
-Prevenir que las actividades de un usuario no interfieran en las de los demás usuarios.
-Calendarizar los recursos de los usuarios.
-Facilitar el acceso a los dispositivos de E/S.
-Recuperarse de fallas o errores.
-Llevar el control sobre el uso de los recursos.
-Entre otras. 
Un sistema operativo está formado por varios programas que en conjunto presentan al usuario una vista integrada del sistema, los componentes principales de un sistema operativo son los siguientes módulos:
-Manejo de procesos.
-Manejo de E/S.
-Manejo de Memoria.
-Manejo del Sistema de Archivos. 
El sistema operativo indica a la computadora la manera de utilizar otros programas de software y administra todo el hardware, tanto el interno como el externo, que está instalado en la computadora.
Los sistemas operativos pueden ser basados en caracteres o gráficos. Un sistema operativo basado en caracteres, tal como MS-DOS, le permite escribir comandos en un indicador para controlar la computadora. Un interfaz gráfico del usuario, o GUI, le permite enviar comandos a la computadora al hacer clic en iconos o al seleccionar elementos en los menús. Windows 95 cuenta con un GUI.
La mayoría de los sistemas operativos pueden manejar programas de 16 ó 32 bits, o ambos. Microsoft Windows 3.x ejecuta únicamente los programas de 16 bits; Windows 95 de Microsoft puede ejecutar ambos programas de 16 ó 32 bits.

FUENTES: 
  • wikipedia.org/wiki/Sistema_operativo
  • http.www.euram.com.ni/pverdes/verdes_informatica/informatica_al_dia/que_es_un_so_144  

TIPOS DE BÚSQUEDAS

Aunque normalmente hacemos las búsquedas de forma casi inconsciente, cuando nos encontramos delante de un buscador tenemos que darnos cuenta de que, dependiendo de los resultados que queramos obtener, deberemos realizar las búsquedas de una forma u otra. 
Las búsquedas dependen también del tipo de usuario que se encuentra delante del buscador y de su nivel de experiencia, por ejemplo, de si puede usar o no operadores avanzados para realizar las búsquedas.
Pero centrémonos en los tipos de búsqueda que los buscadores interpretan y que los usuarios suelen efectuar de forma inconsciente. Podemos clasificarlas en:
  • transaccionales
  • de información
  • de navegación
  • multimedia
  • geolocalizadas
  • ambiguas
Cada una de estas búsquedas implica unos resultados distintos, como veremos a continuación.
Las búsquedas transaccionales son aquellas en las que los usuarios efectúan una transacción online. Por ejemplo, comprar un Iphone.

Como vemos en la imagen anterior la mirada se desvía claramente hacia las zonas superior y lateral, es decir, hacia la zona de los anuncios patrocinados que están estudiados para llamar la atención sobre un producto y obtener el mayor porcentaje de clics respecto a una búsqueda con llamadas a la acción como: ¡Ven ya!
Ejemplo de anuncios:
Las búsquedas de información, en las que el usuario simplemente indaga, recaba datos sobre un tema o producto para mejorar la información que tiene sobre él. Por ejemplo, características Iphone.
En este caso apreciamos en las imágenes cómo la vista se desplaza hacia la zona de los resultados naturales u orgánicos situados en las primeras posiciones, donde el usuario centrará su atención en los títulos. Se desvía con esto de la zona lateral, en la que también aparecen menos anuncios, algo lógico ya que una búsqueda de información es menos atractiva para los anunciantes.
Muchos usuarios suelen hacer búsquedas de navegación, su intención es llegar directamente a un sitio web específico y obtener la información de él, esto es, de primera mano de la web de la empresa de un determinado producto o servicio. Por ejemplo, Apple Iphone.
En este caso el usuario se centra principalmente en los primeros resultados, en los que debería aparecer el snippet de la página oficial del servicio o producto, y se detiene en comprobar si el resultado obtenido corresponde al nombre de la empresa, marca o producto. Los usuarios un poco más avanzados también se fijaran en si la url se corresponde con la página oficial.
Las búsquedas con resultados multimedia fueron introducidas con el llamado Universal Search hace relativamente poco tiempo. Este tipo de búsquedas tiene como consecuencia que la vista del usuario se fije casi únicamente en estos tipos de resultados enriquecidos. Por ejemplo, vídeo Iphone.
Lo mismo pasa con las búsquedas geolocalizadas, en las que muestran un mapa que sitúa los lugares donde se ofrece un determinado producto o servicio. Por ejemplo, tienda Iphone Valencia.
El mapa ocupa una gran parte de los resultados devueltos por el buscador en la zona superior de la pantalla, lo que hace casi imposible no fijarse en él, estos resultados son muy importantes para las empresas y existe lo que se podría llamar una disciplina dentro del SEO llamada SEO Google Places, que, en España tiene como referente a Aleyda Solis.
Por último, también podríamos realizar una búsqueda a la que llamaríamosambigua, en la que el buscador no sabe realmente desgranar lo que el usuario está demandando, ya que la búsqueda es demasiado general. Por ejemplo, Iphone.
Como vemos, el buscador nos muestra una combinación de resultados navegacionales, informaciones, multimedia y de actualidad para que podamos elegir entre ellos, también nos propone al final de la página unas búsquedas relacionadas para afinar los resultados.
HISTORIA
El primer buscador fue "Wandex", un índice (ahora desaparecido) realizado por la World Wide Web Wanderer, un robot desarrollado por Mattew Gray en el MIT, en 1993. Otro de los primeros buscadores, Aliweb, también apareció en 1993 y todavía está en funcionamiento. El primer motor de búsqueda de texto completo fue WebCrawler, que apareció en 1994. A diferencia de sus predecesores, éste permitía a sus usuarios una búsqueda por palabras en cualquier página web, lo que llegó a ser un estándar para la gran mayoría de los buscadores. WebCrawler fue también el primero en darse a conocer ampliamente entre el público. También apareció en 1994 Lycos (que comenzó en la Carnegie Mellon University).

Muy pronto aparecieron muchos más buscadores, como Excite, Infoseek, Inktomi, Northern Light y Altavista. De algún modo, competían con directorios (o índices temáticos) populares tales como Yahoo!. Más tarde, los directorios se integraron o se añadieron a la tecnología de los buscadores para aumentar su funcionalidad.
Antes del advenimiento de la Web, había motores de búsqueda para otros protocolos o usos, como el buscador Archie, para sitios FTP anónimos y el motor de búsqueda Verónica, para el protocolo Gopher.
En la actualidad se aprecia una tendencia por parte de los principales buscadores de Internet a dar el salto hacia entornos móviles creando una nueva generación de buscadores: los buscadores móviles.

FUENTES: