lunes, 20 de febrero de 2012

14.02.2012 SISTEMAS CONTINUOS


 

Sistemas Continuos: el sistema evoluciona de forma contínua (ej: Temperatura, no hay saltos.) Se definen con ecuaciones diferenciales: sistemas lineales o no lineales.

Sistemas de Eventos Discretos:
en el sistema se producen eventos, sucesos. Procesos estocásticos, Modelos de colas, Sistemas reactivos.
Estos eventos pueden ser producidos por comunicación de sistemas (ej: choques, ...). Estos eventos pueden aparecer de forma natural o construídos, muy sofisticados.

Métodos de Simulación:
Dynamic Systems (EJS), System Dynamics (Anylogic), Discrete Event, Agent Based.
Programas de Simulación:
veremos algo con EJS y usaremos Anylogic.

EDO (Ecuación Diferencial Ordinaria)

Problema del Valor Inicial:
dx/dt  = f(t,x)
x(0) = x0

Con un ejemplo:

dx/dt  = -3x
x(0) =2

La solución sería: x(t) = 2·e^-3t


Esta ecuación diferencial la podemos resolver con
Anylogic gracias al Diagrama de Forrester de la siguiente manera, dando la solución numérica:
 Donde el símbolo de la válvula representa flow o grifo y el cuadrado representa un depósito o stock.
Esta forma de escribir las ecuaciones deferenciales simplifica su resolución.
Para el ejemplo Dx = -3x + 5 se quedaría:

En Anylogic hacemos click en la válvula y escribimos dx/dt = -3x + 5
Y haciendo click en el cuadrado escribimos: dx/dt = Dx

14.02.2012 PROGRAMACIÓN ORIENTADA A OBJETOS

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 objetos y sus interacciones, para diseñar aplicaciones y programas informáticos. Está basado en varias técnicas, incluyendo herencia, abstracción, polimorfismo y encapsulamiento.

Los objetos son entidades que tienen un determinado estado, comportamiento (método) e identidad:
  • El estado está compuesto de datos, será 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 POO, en cambio, primero definen objetos para luego enviarles mensajes solicitándoles que realicen sus métodos por sí mismos.


DEFINICION DE PALABRAS TECNICAS
  • 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. 
  • 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. 
  • 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.
  • 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.
  • Herencia: 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.
  • Paradigma de programación: Es una propuesta tecnológica que es adoptada por una comunidad de programadores cuyo núcleo central es incuestionable en cuanto a que unívocamente trata de resolver uno o varios problemas claramente delimitados. La resolución de estos problemas debe suponer consecuentemente un avance significativo en al menos un parámetro que afecte a la ingeniería de software. Tiene una estrecha relación con la formalización de determinados lenguajes en su momento de definición. Un paradigma de programación está delimitado en el tiempo en cuanto a aceptación y uso ya que nuevos paradigmas aportan nuevas o mejores soluciones que la sustituyen parcial o totalmente.
  • 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++.
  •  Programación estructurada: Técnica para escribir programas (programación de computadora) de manera clara. Para ello se utilizan únicamente tres estructuras: secuencia, selección e iteración; siendo innecesario el uso de la instrucción o instrucciones de transferencia incondicional (GOTO, EXIT FUNCTION, EXIT SUB o múltiples RETURN).
  • Programación dirigida por eventos es un paradigma de programación en el que tanto la estructura como la ejecución de los programas van determinados por los sucesos que ocurran en el sistema, definidos por el usuario o que ellos mismos provoquen.



martes, 31 de enero de 2012

PRESENTACIÓN

JAVA
Java es un lenguaje de programación orientado a objetos con sintaxis heredada de C y C++. Puede ejecutarse en cualquier plataforma ya que al compilar genera un código intermedio llamado "bytecode" que puede ser ejecutado por una máquina virtual (JVM) instalada previamente o bien compilado de nuevo para generar código ejecutable por una máquina determinada. Dispone de los programas:
  • javac - Java compiler to bytecode
  • java - Java Application Launcher
  • jdb - Java Application Debugger
  • javah - C Header and Stub File Generator
  • javap - Class File Disassembler
  • javadoc - API Documentation Generator
  • jar - JAR Archive Tool
 
LIBRERÍAS DE JAVA
Las librerías (o packages) de Java son una colección de utilidades y funciones, ordenadas por su aplicación, que sirven para facilitar las tareas de programación. Las más básicas son:
  • java.applet
  • java.awt
  • java.beans
  • java.io
  • java.lang
  • java.math
  • java.net
  • java.sql
  • java.text
  • java.util
JAVA IDE
Los entornos Integrated Development Environments (IDE) facilitan las tareas de edición, compilación y ejecución de programas y permiten que se puedan crear proyectos complejos de manera ordenada y efectiva.
 Los más utilizados son:
  • Eclipse (IBM, liberado)
  • Netbeans (Sun Microsystems)
  • JBuilder X (Borland)
  • JDeveloper (Oracle)
  • jEdit