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