miércoles, 26 de enero de 2011

~Semana 1, Herramientas UML

Semana 1
Materia: Taller de Programación Orientada a Objetos
Jueves M1-M2


Hola a todos, bueno en esta entrada les hablaré sobre algunas herramientas que se utilizan para modelar los sistemas orientados a objetos.

DIAGRAMAS UML

Los diagramas UML son un conjunto de herramientas que sirven para modelar, diseñar y analizar un sistema orientado a objetos.

Como se muestra en la figura de la derecha, estos diagramas sirven para describir métodos o procesos. Por ejemplo en la imagen, el crítico de comidas en un restaurant puede: probar la comida, pagar la comida y beber vino, en cuanto el chef es el que prepara la comida.

Existen diferentes tipos de diagramas. 
  • Diagramas de Estructura. Estos diagramas hacen énfasis a los elementos que deben existir en el sistema de modelado.
    - Diagrama de clases
    - Diagrama de componentes
    - Diagrama de objetos
    - Diagrama de estructura compuesta
    - Diagrama de despliegue
    - Diagrama de paquetes
  • Diagramas de comportamiento. Estos diagramas hacen énfasis a lo que debe de suceder en el sistema.
    - Diagrama de actividades
    - Diagrama de caso de uso
    - Diagrama de estados
  • Diagramas de interacción. Son subtipos de los diagramas de comportamiento, hacen énfasis en el flujo de control y datos entre los elementos del sistema.
    - Diagrama de secuencia
    - Diagrama de comunicación
    - Diagrama de tiempos
    - Diagrama global de interacciones


BOUML 
Es una aplicación UML2 gratuita con modelador que te permite generar código en C++, Java, Idl, PHP y Phyton.

Bouml esta disponible para Unix, Linux, Solaris, MacOS X y Windows.

Es muy rápido y requiere de muy poca memoria para ejecutar miles de clases, es extensible, los programas llamados plug-outs pueden ser escritos a través de Java o C++ a través de Bouml como cualquier otro programa.

En la siguiente imagen se muestra un diagrama de secuencia diseñado en BOUML.




Esta aplicación la pueden descargar en el siguiente link BOUML, en esta misma página en la pestaña de Documentation viene un manual de referencia que puede servirles también. 

Desde Ubuntu lo pueden descargar en el Ubuntu Software Center que se encuentra en el menú Applications. Ahí del lado superior derecho viene el buscador y escriben bouml y les aparece ya nadamas lo descargan. Desde la terminal escriben sudo apt-get install bouml.

Les dejo también un tutorial de Bouml.


UMBRELLO
Es una herramienta libre que se ujtiliza para crear y editar diagramas UML. Fue desarrollada por Paul Hengsen. Se permite código en C++, Java, Phtyon, IDL, Pascal/Delphi, Ada. Te permite crear un diagrama y genera el código automáticamente.

Aquí les dejo una imagen con un diagrama que hicieron con  umbrello.


Aquí les dejo el link para descargarlo.

También se puede descargar de la misma forma qe el bouml, se meten a Ubuntu Software Center y lo buscan con el buscador. 

Les dejo un manual también.

Bueno, esta fue mi primer entrada para taller, espero que les sirva de algo y si tienen dudas o comentarios háganlos :) saludos.

~Semana 1, Descripción de proyecto

Semana 1.
Materia: Programación Orientada a Objetos
Martes M1-M3

Hola a todos compañeros, en esta entrada les hablaré sobre el proyecto que pienso desarrollar en esta materia de Programación Orientada a Objetos. Quiero hacer un sistema para la administración de consultas de pacientes, mi prima esta estudiando nutrición y me pidio que si le podría hacer un sistema que le ayude a tener un orden con las consultas de sus pacientes con sus datos personales, con campos para hacer anotaciones de como han ido avanzando, que dieta tienen cada uno de los pacientes entre otras cosas. Esto es lo que yo quiero realizar para mi proyecto final, en internet encontre la siguiente imagen de un sistema parecido a lo que quiero lograr.


Bueno esto lo quería hacer en C++ ya que me gustaría aprender un nuevo lenguaje y hacer este sistema en este lenguaje nuevo pero el inconveniente es que se qe C++ no es un lenguaje muy portable y pues como mi prima lo va a utilizar en su computadora puede que no funcione en la suya, entonces estoy entre C++ o Java. Y ya si no lo logro hacer en estos pues optare por Phyton que es más sencillo.

Me gusta la idea de este proyecto ya que el cliente es una persona real y pues ella me puede decir que tal le funciona o no, o  lo que le pueda faltar para mejorarlo entre otras cosas. 

Bueno, esta seria mi entrada de la semana 1, saludos a todos (=

lunes, 22 de noviembre de 2010

Smalltalk

Laboratorio de Lenguajes de Programación

Smalltalk es un lenguaje de programación que permite realizar diferentes tareas de computación mediante la interacción con un entorno de objetos virtuales. Smalltalk es como un mundo virtual donde viven objetos que se comunican mediante el envío de mensajes.
 
Un sistema Smalltalk está compuesto por: 
  • Máquina virtual
  • Imagen virtual que contiene todos los objetos del sistema
  • Lenguaje de programación (Smalltalk)
  • Biblioteca de Objetos reusables
  • Opcionalmente un entorno de desarrollo que funciona como un sistema en tiempo de ejecución.
 
Un programa Smalltalk consiste solamente de objetos, un concepto que se utiliza universalmente dentro de todo sistema Smalltalk. Todo, desde un número natural como el 4 hasta un servidor web es considerado un objeto. Los objetos Smalltalk tienen ciertas características:
  • Tienen una memoria propia.
  • Poseen capacidad para comunicarse con otros objetos.
  • Poseen la capacidad de heredar características de objetos ancestros.
  • Tienen capacidad de procesamiento.
 
Los objetos se comunican entre sí mediante el envío de mensajes. Un objeto puede hacer muchas operaciones. 
 
Las definiciones de estas operaciones en los objetos son llamadas métodos. Un método define la reacción de un objeto cuando recibe un mensaje que es dirigido a ese método. La resolución de un mensaje a un método es dinámica. La colección entera de métodos de un objeto se llamada protocolo de mensajes o interfaz de mensajes del objeto. 

Características
 
Smalltalk se considera como el primero de los lenguajes orientados a objetos (OOP), aunque en realidad el primero en implementar programación orientada a objetos fue Simula. En Smalltalk todo es un objeto, incluidos los números reales o el propio entorno Smalltalk.
 
 Como lenguaje tiene las siguientes características: 
  • Orientación a Objetos Pura
  • Interacción entre objetos mediante envío de mensajes
  • Herencia simple y con raíz común
  • Reflexión computacional completa
  • Recolección de basura
  • Compilación en tiempo de ejecución o Interpretado
  • Diversas Implementaciones

 

C++

Lenguajes de Programación - PUNTOS EXTRA
 
Hola compañeros, les hablaré sobre el lenguaje C++
C++ es un lenguaje de programación desarrollado a mediación de los años 1980, fue creado por Bjarne Stroustrup. Se desarrolló con el fin de extender al exitoso lenguaje de programación C con mecanismos que permitan la manipulación de objetos.

Más adelante se añadieron facilidades de programación genérica, que se agregó a los otros dos paradigmas que ya estaban admitidos (programación estructurada y la programación orientada a objetos). Por esto se dice que el C++ es un lenguaje de programación multiparadigma.

En estos tiempos existe un estándar, denominado ISO C++, al cual se le han agregado la mayoría de los fabricantes de compiladores más modernos. Existen también algunos intérpretes, como ROOT.

Una característica particular del C++ es que tiene la posibilidad de volver a definir los operadores (sobrecarga de operadores), y poder crear nuevos tipos que se comporten como tipos fundamentales.

El nombre del lenguaje C++ fue propuesto por Rick Mascitti en el año 1983, cuando el lenguaje se utilizó por primera vez fuera de un laboratorio científico. Antes se había usado el nombre "C con clases". En C++, la expresión "C++" significa "incremento de C" y se refiere a que C++ es una extensión de C.
Constructores

Son métodos especiales que se ejecutan automáticamente al crear un objeto de la clase. En la declaración de los constructores no se especifica que tipo de dato devuelverán, y poseen el mismo nombre que la clase a la que pertenecen. Al igual que otros métodos, puede existir varios constructores sobrecargados, aunque no pueden existir constructores virtuales.

Una característica a la hora de implementar un constructor, es que después de la declaración de los parámetros, se encuentra lo que se llama lista de inicializadores. Su objetivo es llamar a los constructores de los atributos que conforman el objeto a construir.

Una cosa importante es que no es necesario declarar un constructor al igual que un destructor, pues el compilador lo puede hacer, aunque no es la mejor forma de programar.

Existen diferentes constructores en C++:

Constructor predeterminado. Es el que no recibe ningún parámetro en la función. Si no se define ningún constructor, el sistema proporcionará uno predeterminado. Es necesario para la construcción de estructuras y contenedores de la STL.

Constructor de copia. Es el constructor que recibe un objeto de la misma clase, y realiza una copia de los atributos del mismo. Igual que el predeterminado, si no se define el sistema proporciona uno.

Constructor de conversión. Es el constructor que recibe solo un parámetro: un objeto o variable de otro tipo diferente que el suyo. O sea, convierte un objeto de un tipo determinado a otro objeto del tipo que estamos generando.


Esto es todo, saludos:)








JAVA

Lenguajes de programación - PUNTOS EXTRA

Bueno, Java es un lenguaje de programación orientado a objetos, fue desarrollado por Sun Microsystems a principios de 1990. El lenguaje tiene mucho parecido a la sintaxis de C y C++, pero tiene un modelo de objetos más simple y elimina herramientas de nivel bajo, que pueden causar muchos errores, como la manipulación directa de punteros o memoria.

Las aplicaciones Java están típicamente compiladas en un bytecode (código intermedio más abstracto que el lenguaje máquina), aunque la compilación en código máquina también puede ser posible. En tiempo de ejecución, el bytecode es generalmente interpretado o compilado a código nativo para la ejecución, aunque la ejecución directa por hardware del bytecode por un procesador Java también puede pasar.

Características de JAVA.
Java además de ser un lenguaje orientado a objetos tiene características muy importantes:

Es un lenguaje que es compilado, generando archivos de clases compilados, estas clases compiladas en realidad son interpretadas por la máquina virtual de java. Siendo la máquina virtual de java la que mantiene el control sobre las clases que se estén ejecutando.

Es un lenguaje seguro, la máquina virtual al ejecutar el código java realiza comprobaciones de seguridad, aparte este lenguaje no tiene características inseguras, como por ejemplo los punteros.

Gracias al API de java podemos ampliar el lenguaje para que sea capaz de, por ejemplo, comunicarse con equipos mediante red, acceder a bases de datos, crear páginas HTML dinámicas, crear aplicaciones visuales, entre otras cosas.

Para trabajar con java es necesario utilizar un software que permita desarrollar en java. Existen varias alternativas comerciales en el mercado como JBuilder, Visual Age, Visual Café, etc. y un conjunto de herramientas shareware, e incluso freeware, que permiten trabajar con java.
Applet Java

Un applet Java es un programa escrito en el lenguaje de programación Java. Los applets de Java pueden ejecutarse en un navegador web utilizando la Java Virtual Machine (JVM), o en el AppletViewer de Sun.

Entre sus características se puede mencionar un esquema de seguridad que permite que los applets que se ejecutan en el equipo no tengan acceso a partes sensibles, a excepción que nosotros mismos le demos permisos necesarios en el sistema. Uno de los objetivos de los Java applets es proporcionar una forma fácil de ejecutar aplicaciones desde el navegador web.

En Java un applet es un programa que puede incluirse en un documento HTML, o sea en una página web. Cuando un navegador carga una página web que contiene un Applet, el applet se descarga en el navegador web y empieza a ejecutarse. Esto nos permite crear programas que cualquier usuario puede ejecutar con tan solo cargar la página Web en su navegador.

Esto es todo, saludos :)





Programación multiparadigma

Laboratorio de lenguajes de programación

Un lenguaje de programación multiparadigma es el  que soporta más de un paradigma de programación. Permiten crear programas usando más de un estilo de programación.

El objetivo de dichos lenguajes es permitir a los programadores elegir el mejor paradigma para cada trabajo, sabiendo que ninguno resuelve todos los problemas de la forma más fácil y eficiente posible.

Lenguajes de programación como C++, Genie, Delphi, Visual Basic o PHP, combinan el paradigma imperativo con orientación a objetos. Incluso existen lenguajes multiparadigma que permiten la mezcla de forma natural, como el lenguaje Oz, el cual tiene subconjuntos  y otras características propias de lenguajes de programación funcional y de orientación a objetos. Otro ejemplo son los lenguajes como Scheme (paradigma funcional) o Prolog (paradigma lógico), los cuales tienen estructuras repetitivas,  del paradigma imperativo.


Paradigmas de programación
  • En la nube
  • Imperativo
  • Lógico
  • Funcional
  • Declarativo
  • Estructurado
  • Dirigido por eventos
  • Modular
  • Orientado a aspectos
  • Orientado a objetos
  • Con restricciones
  • A nivel funcional 
  • A nivel de valores
Bueno esto  es todo, saludos:) 

Patrones de diseño

Lenguajes de Programación - PUNTOS EXTRA

Hola compañeros, en esta entrada les hablaré sobre los patrones de diseño. 

Los Patrones de diseño son normalmente conocidos como "Design Patterns". Y se preguntarán ¿Qué son los patrones de diseño? Bueno los patrones de diseño son simples soluciones elegantes a problemas específicos y comunes del diseño orientado a objetos. Son soluciones que se basan en la experiencia y que se ha demostrado que funcionan correctamente.

Es evidente que a lo largo de la variedad de diseños de aplicaciones existen problemas que se repiten o que son análogos, o sea, que responden a un cierto patrón. Sería deseable tener una colección de dichos patrones con las soluciones más óptimas para cada caso. Les hablaré de los más comunes y conocidos.

Los patrones de diseño no son fáciles de comprender, pero cuando entiendes su funcionamiento, los diseños serán mucho más flexibles, modulares y reutilizables. Han ido revolucionado el diseño orientado a objetos.  

Les hablaré de los patrones de diseño a objetos más comunes publicados en el libro "Design Patterns", escrito por los que normalmente se conoce como GoF (gang of four, "+pandilla de los cuatro).

Patrones de creación



Abstract Factory. Nos proporciona una interfaz para crear familias de objetos o que dependen entre sí, sin especificar sus clases concretas.

Builder. Separa la construcción de un objeto complejo de su representación, de forma que el mismo proceso de construcción pueda crear diferentes representaciones.

Factory Method. Define la interfaz para crear un objeto, pero deja que sean las subclases quienes decidan qué clase instanciar. Permite que una clase delegue en sus subclases la creación de objetos.

Prototype. Especifica los tipos de objetos a crear por medio de una instancia prototípica, y crear nuevos objetos copiando este prototipo.

Singleton. Garantiza que una clase sólo tenga una instancia, y proporciona un punto de acceso global a ella.


Patrones estructurales



Adapter. Convierte la interfaz de una clase en otra diferente que es la que esperan los clientes.

Bridge. Separa una abstracción de su implementación, de manera que las dos puedan variar de forma independiente.

Composite. Combina objetos en estructuras de árbol para representar jerarquías de parte-todo. Permite que los clientes traten de manera uniforme a los objetos individuales y a los compuestos.

Decorator. Añade dinámicamente nuevas responsabilidades a un objeto, proporcionando una alternativa flexible a la herencia para extender la funcionalidad.

Facade. Proporciona una interfaz unificada para un conjunto de interfaces de un subsistema. Define una interfaz de alto nivel que hace que el subsistema se más fácil de usar.

Flyweight. Usa el compartimiento para permitir un gran número de objetos de grano fino de forma eficiente.

Proxy. Proporciona un sustituto o representante de otro objeto para controlar el acceso a éste.


Patrones de comportamiento


Chain of Responsibility. Evita unic el emisor de una petición a su receptor, al dar a más de un objeto la posibilidad de responder a la petición. Crea una cadena con los objetos receptores y pasa la petición a través de la cadena hasta que esta sea tratada por algún objeto.

Command. Envuel una petición en un objeto, permitiendo así hacer algo de tal forma que mediante la configuracion de ciertos parametros modifiques el resultado mediante las distintas peticiones, llevar un registro de las peticiones y poder deshacer la operaciones.

Interpreter. Define una representación de su gramática junto con un intérprete que usa dicha representación para interpretar las sentencias del lenguaje.

Iterator. Proporciona una forma de acceder secuencialmente a los elementos de un objeto agregado sin exponer su representación interna.

Mediator. Define un objeto que envuelve cómo interactúan un conjunto de objetos. Difine un bajo acoplamiento al evitar que los objetos se refieran unos a otros explícitamente, y permite variar la interacción entre ellos de forma independiente.

Memento. Representa y externaliza el estado interno de un objeto sin violar la encapsulación, de forma que éste puede volver a dicho estado más tarde.

Observer. Define una dependencia de uno-a-muchos entre objetos, de forma que cuando un objeto cambia de estado se notifica y actualizan automáticamente todos los objetos.

State. Permite que un objeto modifique su comportamiento cada vez que cambia su estado interno.

Strategy. Define una familia de algoritmos, encapsula uno de ellos y los hace intercambiables. Permite que un algoritmo varíe independientemente de los clientes que lo usan.

Template Method. Define en una operación el esqueleto de un algoritmo, delegando en las subclases algunos de sus pasos. Permite que las subclases redefinan ciertos pasos del algoritmo sin cambiar su estructura.

Visitor. Representa una operación sobre los elementos de una estructura de objetos. Permite definir una nueva operación sin cambiar las clases de los elementos sobre los que opera.