martes, 29 de octubre de 2013

COMPETENCIAS
  • Al final de esta sesión, el alumno/a debería haber adquirido las siguientes competencias:
  • Saber usar el entorno de desarrollo Code::Blocks y familiarizarse con las acciones básicas del mismo.
  • Edición, compilación, ejecución y depuración de programas.
  • Construir programas que permitan la interacción con el usuario/a mediante la entrada y salida de texto.

 ¿Qué es Code::Blocks? 
Es un entorno de desarrollo integrado libre y multiplataforma para el desarrollo de programas en lenguaje C y C++.
¿En que se basa Code::Blocks? 
Está basado en la plataforma de interfaces gráficas WxWidgets, lo cual quiere decir que puede usarse libremente en diversos sistemas operativos.

¿Cuál es la licencia de Code::Blocks? 
Está licenciado bajo la Licencia pública general de GNU.

¿Qué es GNU?
Es un proyecto que fue iniciado por Richard Stallman con el objetivo de crear un sistema operativo completamente libre.
El sistema GNU fue diseñado para ser totalmente compatible con UNIX (Sistema operativo comercial).

Para asegurar que el software GNU permaneciera libre para que todos los usuarios pudieran "ejecutarlo, copiarlo, modificarlo y distribuirlo", el proyecto debía ser liberado bajo una licencia diseñada para garantizar esos derechos al tiempo que evitase restricciones posteriores de los mismos. La idea se conoce en Inglés como copyleft (lo cual significa que el autor permite la distribución libre del mismo, en clara oposición acopyright o "derecho de autor"), y está contenida en la Licencia General Pública de GNU (GPL). 


¿Bajo que motivación se creó Code::Blocks?
Debido a que Dev-C++ es un IDE para los lenguajes C y C++ y está creado en Delphi, surgió la idea y necesidad de crear un IDE hecho en los lenguajes adecuados: C y C++.

¿Qué significa IDE?
Un entorno de desarrollo integrado, llamado también IDE (sigla en inglés de integrated development environment), es un programa informático compuesto por un conjunto de herramientas de programación. Puede dedicarse en exclusiva a un solo lenguaje de programación o bien puede 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 sí solas o pueden ser parte de aplicaciones existentes.

Los IDE proveen un marco de trabajo amigable para la mayoría de los lenguajes de programación tales como C++PHPPythonJava,C#DelphiVisual Basic, etc. En algunos lenguajes, un IDE puede funcionar como un sistema en tiempo de ejecución, en donde se permite utilizar el lenguaje de programación en forma interactiva, sin necesidad de trabajo orientado a archivos de texto, como es el caso de Smalltalk u Objective-C.

¿Cuáles son las características principales de Code::Blocks?
  • Code::Blocks es un IDE construido como un núcleo altamente expansible mediante complementos (plugins).
  • Actualmente la mayor parte de la funcionalidad viene provista por los complementos incluidos predeterminadamente.
  • No es un IDE autónomo que acepta complementos, sino que es un núcleo abstracto donde los complementos se convierten en una parte vital del sistema. Esto lo convierte en una plataforma muy dinámica y potente, no solo por la facilidad con que puede incluirse nueva funcionalidad, sino por la capacidad de poder usarla para construir otras herramientas de desarrollo tan solo añadiendo complementos.

Entre otras están: 
¿A le llamamos Plugins?

Un Plugin es un programa que puede anexarse a otro para aumentar sus funcionalidades  (generalmente sin afectar otras funciones ni afectar la aplicación principal). No se trata de un parche  ni de una actualización, es un módulo aparte que se incluye opcionalmente en una aplicación.)
Por ejemplo si el plugin es para un navegador de internet, este hara que tu navegador pueda desplegar diferentes tipos de contenido web como animaciones, graficos o reproducir archivos multimedia.
Si es para un reproductor de música o videos, el plugin hace que el reproductor reconozca mas formatos y pueda reproducirlos sin problemas. 
No hay riesgo siempre y cuando lo descargues de un link confiable, si es programa mismo te lo proporciona mejor.

¿Cuáles son los compiladores compatibles con Code::Blocks? 
  • Microsoft Visual Studio Toolkit (una extensión de compilador de C++ de Microsoft)
  • GCC, en sus versiones para Microsoft (ya sea MinGW o Cygwin) y GNU/Linux.
  • Borland C++ Compiler
  • Digital Mars Compiler
  • Intel C++ Compiler
  • Open Watcom

Todos estos compiladores pueden ser detectados automáticamente si están ya instalados al iniciar Code::Blocks.
Aunque no es oficialmente compatible (producto de su bajo nivel de adhesión a la norma de C++), Microsoft Visual Studio 6 puede ser configurado y utilizado, aunque no con muy buenos resultados.
También es posible añadir compatibilidad con otros compiladores

¿Cuáles son las características del entorno de Code:Blocks?

Entre otras, Code::Blocks soporta varias de las características ya consideradas "clásicas" y que sirven de apoyo a la programación:
  • Espacios de trabajo (workspaces) para combinar múltiples proyectos.
  • Espacio de trabajo adaptable (cambia según la tarea que se esté realizando o como se configure).
  • Navegador de proyectos; vista de archivos, símbolos (heredados, etc.), clases, recursos.
  • Editor tabulado, múltiples archivos.
  • Intercambio rápido .h/.cpp.
  • Lista de tareas (ToDo)

 ¿Cuáles son sus características de compilación?

Sistema de construcción (build) rápido (sin necesidad de makefiles).
Soporte para compilación en paralelo (usando múltiples procesadores/núcleos).
Dependencias entre proyectos dentro del espacio de trabajo.
Proyectos con múltiples objetivos (multi-target).
Estadísticas y resumen de código (code profiler).

¿Cuál es la compatibilidad de Code::Blocks con bibliotecas?

Code::Blocks trae integradas plantillas para generar varias clases de programas, ya sea la clásica aplicación de consola, bibliotecas estáticas o dinámicas, o proyectos completos enlazados con populares bibliotecas como OpenGL y SDL; sin embargo, Code::Blocks integra sólo las plantillas, las bibliotecas deben instalarse por separado.


COMENTA:

  • ¿CUALES SON LAS PRINCIPALES CARACTERISTICAS DE CODEBOCKS?
  • ¿QUE DIFERENCIA HAY ENTRE COMPILAR Y EJECUTAR UN PROGRAMA?
  • ¿CUAL ES LA GRAN VENTAJA QUE NOS BRINDA GNU?





miércoles, 23 de octubre de 2013

PROGRAMACIÓN ORIENTADA OBJETOS

CARACTERISTICAS, VENTAJAS Y DESVENTAJAS DE LA P.O.O.
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. 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.

Orientada a Objetos (OO) se define por herencia, encapsulación, métodos y mensajes.
Es un modelo de simula el comportamiento ya sea de una parte del mundo real o imaginario.

Abstracción de datos: Cada objeto en el sistema sirve como modelo de un "agente" abstracto que puede realizar trabajo, informar y cambiar su estado, y "comunicarse" con otros objetos en el sistema sin revelar cómo se implementan estas características. Los procesos, las funciones o los métodos pueden también ser abstraídos y cuando lo están, una variedad de técnicas son requeridas para ampliar una abstracción.
Encapsulamiento: Significa reunir a todos los elementos que pueden considerarse pertenecientes a una misma entidad, al mismo nivel de abstracción. Esto permite aumentar la cohesión de los componentes del sistema. Algunos autores confunden este concepto con el principio de ocultación, principalmente porque se suelen emplear conjuntamente.
Principio de ocultación: Cada objeto está aislado del exterior, es un módulo natural, y cada tipo de objeto expone una interfaz a otros objetos que específica 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 pueden cambiar el estado interno de un objeto de maneras inesperadas, 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++.
La Herencia: las clases no están aisladas, sino que se relacionan entre sí, formando una jerarquía de clasificación. Los objetos heredan las propiedades y el comportamiento de todas las clases a las que pertenecen. La herencia organiza y facilita el polimorfismo y el encapsulamiento permitiendo a los objetos ser definidos y creados como tipos especializados de objetos preexistentes. 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.

Los objetos son entidades autónomas que tienen un estado y responden a mensajes.
Las clases agrupan los objetos por sus atributos y operaciones.
Todas tienen el común de usar objetos como una encapsulación para proteger los datos con todas las operaciones legales que actúan sobre esa información oculta

METODOLOGÍAS “ORIENTADAS A OBJETOS”:

Adaptación: mezclar una aproximación orientada a objetos con una metodología bien conocida de desarrollo estructural.
Asimilación: usar una metodología orientada a objetos para desarrollar sistemas de software, pero que siguen el modelo tradicional del ciclo de vida del software.


VENTAJAS Y DESVENTAJAS DE LA P.O.O.


VENTAJAS:

Los lenguajes orientados a objetos presentan las siguientes ventajas:

Lo interesante de la POO es que proporciona conceptos y herramientas con las cuales se modela y representa el mundo real tan fielmente como sea posible.

Flexibilidad: Si partimos del hecho que mediante la definición de clases establecemos módulos independientes, a partir de los cuales podemos definir nuevas clases, entonces podemos pensar en estos módulos como bloques con los cuales podemos construir diferentes programas.

Extensibilidad: Gracias a la modularidad y a la herencia una aplicación diseñada bajo el paradigma de la orientación a objetos puede ser fácilmente extensible para cubrir necesidades de crecimiento de la aplicación.
Reusabilidad. Cuando hemos diseñado adecuadamente las clases, se pueden usar en distintas partes del programa y en numerosos proyectos.
Una vez que hemos definido a la entidad persona para utilizarla en una aplicación de negocios, por mencionar un ejemplo, y deseamos construir a continuación una aplicación, digamos de deportes, en donde requerimos definir a la misma entidad persona, no es deseable volver a escribir la definición para la entidad persona. Por medio de la reusabilidad podemos utilizar una clase definida previamente en las aplicaciones que nos sea conveniente. Es claro que la flexibilidad con la que se definió la clase va a ser fundamental para su reutilización.
Mantenibilidad. Las clases que conforman una aplicación, vistas como módulos independientes entre sí, son fáciles de mantener sin afectar a los demás componentes de la aplicación.
Debido a la sencillez para abstraer el problema, los programas orientados a objetos son más sencillos de leer y comprender, pues nos permiten ocultar detalles de implementación dejando visibles sólo aquellos detalles más relevantes.
Modificabilidad. La facilidad de añadir, suprimir o modificar nuevos objetos nos permite hacer modificaciones de una forma muy sencilla.
Fiabilidad. Al dividir el problema en partes más pequeñas podemos probarlas de manera independiente y aislar mucho más fácilmente los posibles errores que puedan surgir.
Conclusión de las Ventajas:
·         Fomenta la reutilización y extensión del código.
·         Permite crear sistemas más complejos.
·         Relacionar el sistema al mundo real.
·         Facilita la creación de programas visuales.
·         Construcción de prototipos
·         Agiliza el desarrollo de software
·         Facilita el trabajo en equipo
·         Facilita el mantenimiento del software


DESVENTAJAS:

La programación orientada a objetos presenta también algunas desventajas como pueden ser:

A pesar de que las ventajas de la programación orientada a objetos superan a las limitaciones de la misma, podemos encontrar algunas características no deseables en ésta.

Limitaciones para el programador. No obstante que la tecnología orientada a objetos no es nueva, un gran porcentaje de programadores no están familiarizados con los conceptos de dicha tecnología. En otras palabras, la lógica de la programación estructurada sigue siendo predominante en la mayoría de los desarrolladores de software, después de haber revisado de forma breve los principios de la programación orientada a objetos, nos es claro que en ésta se requiere una lógica de pensamiento totalmente diferente a la lógica comúnmente utilizada para la programación estructurada.

Tamaño excesivo en las aplicaciones resultantes. La gran mayoría de los equipos de cómputo cuentan con capacidades tanto de almacenamiento como de memoria lo suficientemente buena como para ejecutar la mayoría de las aplicaciones que puedan desarrollarse con la tecnología orientada a objetos, sin embargo existen casos en los que lo anterior no se cumple. Una de las desventajas de la programación orientada a objetos es que cuando se heredan clases a partir de clases existentes se heredan de forma implícita todos los miembros de dicha clase aun cuando no todos se necesiten, lo que produce aplicaciones muy grandes que no siempre encajan en los sistemas con los que se disponga.

Velocidad de ejecución: Esto tiene que ver, en cierto modo, con el punto anterior, una aplicación innecesariamente pesada en muchas ocasiones es más lenta de ejecutar que una aplicación conformada únicamente por los módulos necesarios

Conclusión de las Desventajas:

·         Cambio en la forma de pensar de la programación tradicional a la orientada a objetos.
·         La ejecución de programas orientados a objetos es más lenta.
·         La necesidad de utilizar bibliotecas de clases obliga a su aprendizaje y entrenamiento.


CONCLUSIONES:

Podemos decir que los lenguajes de programación orientados a objetos tratan a los programas como conjuntos de objetos que se ayudan entre ellos para realizar acciones, entendiendo como objeto a las entidades que contienen datos y permitiendo que los programas sean más fáciles de escribir, mantener y reutilizar.

Por otra parte la POO (programación orientada a objetos) representa un gran avance en la programación, entre sus ventajas más importante se encuentran un notable aumento de la productividad del programador y de la robustez de los programas, personalmente el lenguaje orientado a objetos que más me agrada es Eiffel (además de sus características de orientación a objetos, soporta la metodología de diseño por contratos). Otro lenguaje muy bien diseñado (y de uso creciente) es Ruby. También es recomendable, y muy simple para comenzar, el lenguaje Python.


COMENTA AL FINAL DE ESTA SECCIÓN, CUALES SON LOS LENGUAJES DE PROGRAMACIÓN ORIENTADA A OBJETOS QUE SE EXISTEN.



Identifica las herramientas de UML, para elaborar la documentación de un programa
UML son las siglas de “Unified Modeling Language” o “Lenguaje Unificado de Modelado”. Se trata de un estándar que se ha adoptado a nivel internacional por numerosos organismos y empresas para crear esquemas, diagramas y documentación relativa a los desarrollos de software (programas informáticos).
serie de normas y estándares gráficos respecto a cómo se deben representar los esquemas relativos al software. UML no es un lenguaje de programación. Como decimos, UML son una serie de normas y estándares que dicen cómo se debe representar algo.


Las herramientas de UML son las siguientes:

Astah community: herramienta sencilla, adecuada para aprender. Se puede descargar una versión gratuita enhttp://astah.net/editions/community.
Astah (antes conocido como Jude) también tiene una versión profesional.

Rational Rose: conjunto de herramientas IBM usado por muchas empresas.

Otros: Erwin, Oracle Designer, EasyCASE, Power Designer, etc. son herramientas que incorporan muchas utilidades, entre ellas UML.

LOS PRINCIPALES BENEFICIOS DE UML SON:
·       Mejores tiempos totales de desarrollo (de 50 % o más).
·       Modelar sistemas (y no sólo de software) utilizando conceptos orientados a objetos.
·       Establecer conceptos y artefactos ejecutables.
·       Encaminar el desarrollo del escalamiento en sistemas complejos de misión crítica.
·       Crear un lenguaje de modelado utilizado tanto por humanos como por máquinas.
·       Mejor soporte a la planeación y al control de proyectos.
·       Alta reutilización y minimización de costos.

FASES DEL DESARROLLO DE UN SISTEMA

Las fases del desarrollo de sistemas que soporta UML son: Análisis de requerimientos, Análisis, Diseño, Programación y Pruebas.

1.       Análisis de Requerimientos

UML tiene casos de uso (use-cases) para capturar los requerimientos del cliente. A través del modelado de casos de uso, los actores externos que tienen interés en el sistema son modelados con la funcionalidad que ellos requieren del sistema (los casos de uso). Los actores y los casos de uso son modelados con relaciones y tienen asociaciones entre ellos o éstas son divididas en jerarquías. Los actores y casos de uso son descritos en un diagrama use-case. Cada use-case es descrito en texto y especifica los requerimientos del cliente: lo que él (o ella) espera del sistema sin considerar la funcionalidad que se implementará. Un análisis de requerimientos puede ser realizado también para procesos de negocios, no solamente para sistemas de software.

2.       Análisis

La fase de análisis abarca las abstracciones primarias (clases y objetos) y mecanismos que están presentes en el dominio del problema. Las clases que se modelan son identificadas, con sus relaciones y descritas en un diagrama de clases. Las colaboraciones entre las clases para ejecutar los casos de uso también se consideran en esta fase a través de los modelos dinámicos en UML. Es importante notar que sólo se consideran clases que están en el dominio del problema (conceptos del mundo real) y todavía no se consideran clases que definen detalles y soluciones en el sistema de software, tales como clases para interfaces de usuario, bases de datos, comunicaciones, concurrencia, etc.

3.       Diseño

En la fase de diseño, el resultado del análisis es expandido a una solución técnica. Se agregan nuevas clases que proveen de la infraestructura técnica: interfaces de usuario, manejo de bases de datos para almacenar objetos en una base de datos, comunicaciones con otros sistemas, etc. Las clases de dominio del problema del análisis son agregadas en esta fase. El diseño resulta en especificaciones detalladas para la fase de programación.

4.       Programación

En esta fase las clases del diseño son convertidas a código en un lenguaje de programación orientado a objetos. Cuando se crean los modelos de análisis y diseño en UML, lo más aconsejable es trasladar mentalmente esos modelos a código.

5.       Pruebas

Normalmente, un sistema es tratado en pruebas de unidades, pruebas de integración, pruebas de sistema, pruebas de aceptación, etc. Las pruebas de unidades se realizan a clases individuales o a un grupo de clases y son típicamente ejecutadas por el programador. Las pruebas de integración integran componentes y clases en orden para verificar que se ejecutan como se especificó. Las pruebas de sistema ven al sistema como una "caja negra" y validan que el sistema tenga la funcionalidad final que le usuario final espera. Las pruebas de aceptación conducidas por el cliente verifican que el sistema satisface los requerimientos y son similares a las pruebas de sistema.



 COMENTA AL FINAL DE ESTA SECCIÓN Y EXPLICA CON TUS PALABRAS UNA DE LAS FASES DEL DESARROLLO DE DE UN SISTEMA (PROGRAMA)


martes, 22 de octubre de 2013