viernes, 17 de febrero de 2012

MODELIZACION Y POO (14-02-2012)


Clase: Martes, 14-2-2012

MODELIZACIÓN y POO:


1.-  Clases de Modelos:
·       Sistemas Continuos (Funciones Suaves, Temperatura, velocidad, caudal,…)
- Ecuaciones Diferenciales
- Sistemas Lineales
- Sistemas No Lineales

·       Sistemas de Eventos Discretos
- Procesos Estocásticos
- Modelos de Colas
- Sistemas Reactivos

2.-  Tipos de Modelos:
·       Modelos Matemáticos
·       Modelos Computacionales

3.-  EVENTO:

·                     Suceso aleatorio de cualquier naturaleza, que ocurre dentro de un entorno, en el que influye por el hecho de ocurrir, cambiando el propio sistema (entorno). Generalmente ocurren de forma instantánea. Por ejemplo, un entorno es un partido de futbol, y consideramos su trayectoria, un evento, sería, una patada, que cambia el comportamiento observado (la trayectoria), e influye en el entorno.
·                     Los eventos suceden por comunicación entre varios sistemas, cintas de transporte con sensores, bolas de billar,…
·                     Los sistemas Reactivos son mucho más complejos pues reaccionan ante los sucesos: 

                                             Balón + patada = cambio de trayectoria.

4.-  PARADIGMAS DE SIMULACIÓN:
         
       Trataremos de simular los sistemas, teniendo en cuenta diversos métodos (paradigmas), y usando diferentes programas.

   4.1.-  Metodos o Paradigmas de Simulación: 

·         Dynamic Systems, son los más antiguos.
·         System Dynamics, creado en la 2ª GuerraMundial, en el MIT (Masachushets Institute Tecnologic), para resolver Ecuaciones Diferenciales Ordinarias (EDO) para Problemas de Valor Inicial (PVI).
  • ·                              Discrete Event
  • ·                              Agent Based
Dynamic Systems, y System Dynamics, son usados para resolver Ecuaciones Diferenciale.
   4.2.-  Programas de Simulación:
  • ·         Easy JAVA Simulation
  • ·         GPSS, Simscrip, Arena
  • ·         AnyLogic
  • ·         Matlab


SYSTEM DYNAMICS:


Para una Ecuación Diferencial Ordinaria, sólo tenemos una variable independiente, sobre la que derivo la función estudiada, y si solo tengo un valor o condición de inicio, estamos ante un caso de EDO – PVI:


Dado el amplio conocimiento matemático requerido por los grupos multidisciplinares que intervenían en el MIT, Forrester encargo a un informático, una simulación de estas EDO para PVI, de forma que fuese rápido de calcular.
Para ello, pasó de un lenguaje matemático a un lenguaje de simbolos, suponiendo que:

Para resolver por métodos de Dynamic Systems, usaremos programas como EJS (aplicación de JAVA), o Matlab; y AnyLogic para System Dynamics, Discrete Events, y Agent Based. Para nuestro uso, nos conformaremos con la solución numérica, en vez de la algebraica.
AnyLogic, se basa en el Diagrama de Forrester:


PROGRAMACIÓN ORIENTADA A OBJETOS (POO):



1.-  Introducción:
            La programación Orientada a objetos (POO) es una forma de programar, más cercana a como expresaríamos las cosas en la vida real, 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.

Durante años, los programadores se han dedicado a construir aplicaciones muy parecidas que resolvían 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 que otras personas pueden utilizar para adelantar su trabajo, de manera que consigamos que el código se pueda reutilizar. Es una manera de pensar, a veces subjetiva, de quien la programa.
Pensar en términos de objetos es muy parecido a cómo lo haríamos en la vida real. Para tratar de modelizar un coche en POO, diríamos que el coche es el elemento principal (Objeto) que tiene una serie de características (Propiedades), como podrían ser el color, el modelo o la marca. Además tiene una serie de funcionalidades asociadas (Métodos), como pueden ser ponerse en marcha, parar o aparcar.
Una fracción en un esquema POO, sería el objeto, y tendría 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.
2.-  DEFINICIONES BÁSICAS:

   2.1.-  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 “instance” 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. 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.
·                     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.

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

   2.3.-  ATRIBUTOS:
·                     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. Es un 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 propio del objeto.
·                     Estado interno: 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. 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.
·                     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.

   2.4.-  METODOS:
·                     Las funcionalidades asociadas a los objetos son los Métodos. Los métodos son como funciones que están asociadas a un objeto. Sirven para que los objetos se relacionen o comuniquen entre sí. Es un 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 en un objeto, es la acción de efectuar una llamada a un método (función asociada). 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.

3.-  CARACTERISTICAS BÁSICAS 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:
   3.1.-  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 POO. 
·                     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.
   3.2.-  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
   3.3-  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. 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.
   3.4.-  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.

   3.5.-  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.
   3.6.-  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 pueden cambiar el estado interno de un objeto de maneras inesperadas, eliminando efectos secundarios e interacciones inesperadas. 
   3.7.-  Recolección de basura:
La recolección de basura o garbage collector 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.

4.-  RELACIÓN ENTRE OBJETOS, MÉTODOS, Y ATRIBUTOS:
·          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.
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.
   4.1.-  PROGRAMACIÓN ESTRUCTURADA:
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.

No hay comentarios:

Publicar un comentario