UNIVERSIDAD MAYOR DE SAN ANDRES Facultad de Ciencias Puras y Naturales Postgrado en Informática Maestría en Ingeniería del Software Programación Orientada a Objetos
MODELO OO PARA PÓRTICOS PLANOS EN INGENIERÍA ESTRUCTURAL
Presentado a: Presentado por:
Ing. M. Sc. Esteban Saavedra Roger Saravia & J. J.
La Paz, Bolivia – Octubre de 2007
Introducción
Objetivo General
Este proyecto se desarrolla en la programación orientada a objetos rama modelos conceptuales. El campo de aplicación elegido es la rama estructural de la ingeniería civil.
• Diseñar el modelo O-O para una aplicación de análisis estructural.
Un problema el cálculo de estructuras es la falta de aplicaciones diseñadas a partir de modelos conceptuales que permitan la mejor abstracción de sistemas tan complejos como las estructuras. Se abordará este problema mediante el diseño de una aplicación a partir del modelo orientado a objetos OO. Se considerarán estructuras en 2D denominadas pórticos.
Objetivos Específicos • Desarrollar las especificaciones entidad-relación E-R. • Desarrollar el modelo entidadrelación E-R. • Usar herramientas ORM para sincronizar partiendo del diagrama E-R (Incluyendo una reciente alternativa). • Logar el modelo orientado a objetos OO a partir del modelo E-R. • Desarrollar la implementación de clases en Java.
Marco Teórico (Síntesis) Modelo Entidad-Relación E-R El modelo de datos E-R está basado en una percepción del mundo real que consta de un conjunto de objetos básicos llamados entidades y relaciones entre estos objetos. Modelo Orientado a Objetos OO La POO es fundamental para lenguajes modernos como C++, Java, C# y Visual Basic .NET. La POO permite a cada objeto heredar las propiedades de otros objetos. La POO promueve la reutilización de código. El DOO con herencia, composición, agregación, asociación, interfaz e implementación, son las bases para una abstracción eficiente y sobresaliente en términos del desarrollo orientado a objetos.
El Análisis Estructural Tiene que ver con el comportamiento de las estructuras bajo condiciones de diseño. Las estructuras son sistemas que soportan cargas y su comportamiento es la tendencia a deformarse, vibrar, pandearse o fluir según las condiciones a las que estén sometidas. Los resultados del análisis se usan para determinar la deformación de las estructuras y para verificar si pueden soportar las cargas de diseño.
(1,1)
Coordenadas
R
(0,N)
CargNud
CodBor Borx Bory Borz
CodEle TipoE
CodNud TipoNu
R
CodCE Tipo Inicio Longitud Fx Fy Mz
Propiedades
(1,1)
R
CodCN Px Py Pz
CodCoor X Y
CodProp Elasticidad Inercia Ă rea
Considerando el Modelo E-R
PARTE (1,N)
(0,N)
(1,1)
R
CodFI fix fiy fiz
(1,1)
FuerInter
Elemento
(1,1) (1,1) (1,N) Nudo
(1,1)
(1,N)
(1,1)
R
(0,1)
TERMINA
(1,1)
Borde
(1,1)
R
R CodReac Rx Ry Rz
CargElem
(1,1)
CodDN Dx Dy Gz
(1,N)
R
(0,1)
Reacciones
(1,1)
DespNud
Aplicando la Herramienta Object-Relational Mapping (ORM) Visual Paradigm
E-R
Clases
Estructura
Diagrama de Clases
+nNu : Integer +nEle : Integer +graficar() +calcular()
*
1 Nud
{codNu>0}
+codNu : Integer +descr : String +enX : Double +enY : Double +enZ : Double +calcResul() : Double
1
«interfaz» Util1 +calcResul() : Double
* Elemento
1 *
1
+codEle : Integer +nuIni : Integer +nuFin : Integer +calcResul() : Double
{codEle>0}
* Coord
CargNud
Borde
+enZ : Double = 0
+dinami : Boolean
+resorte : Boolean +getTipo() : String
DespNud
Reacciones
+asentamien : Boolean +getEnNorma() : Boolean
-calcFuerResor() : Double
Propiedades +elasti : Double +base : Double +altura : Double +getIner() : Double +getArea() : Double
CargElem +tipo : String +ini : Double +apli : Double +fx : Double +fy : Double +mz : Double +verif() : Boolean +calcResul() : Double
FuerInter +fix : Double +fiy : Double +fiz : Double +calcResul() : Double
«requisito» verif() valida la carga
Diagrama de Caso de Uso (UML) – Primera Parte In t r o d u c ir C o o r d e n a d a s < < in c lu d e > > < < in c lu d e > >
I n g r e s a r Nu d o
< < in c lu d e > > In g r e s a r Ele m e n t o
In t r o d u c ir C a r g a s
I n t r o d u c ir P r o p ie d a d e s
< < in c lu d e > > I n t r o d u c ir C a r g a
I n g r e s a r C o n d ic ió n d e B o r d e
S o l. V e r ific a c ió n d e G r á fic a
S o l. C a lc u lo Es t r u c t u r a l I n g e n ie r o S o l. R e p . D e s p la z a m ie n t o Nu d o s
S o lic it a R e p . F u e r z a I n t e r n a
S o l. R e p . R e a c c ió n A p o y o
S o lic it a G r á fic a D e fo r m a d a
Diagrama de Caso de Uso (UML) – Segunda Parte Actor: El ingeniero Solicita analisis estructural
Caso de Uso: Calcular la Estructura Descripción: Permite la determinación de los desplazamientos de los nudos.
Ingeniero Recuperar datos
Ensamblar matriz rigidez
Ensamblar vector fuerza
Resolver sistema ecuaciones
Calcular fuerzas internas
Escenario principal 1
El usuario elige la opción de análisis estructural.
2
El sistema recupera la información de la estructura de sus archivos internos e inicializa el modelo de objetos.
3
El sistema ensambla la matriz de rigidez, el vector fuerza y resuelve las ecuaciones obteniendo los desplazamientos en los nudos.
4
El sistema calcula las fuerzas internas en los elementos a partir de los desplazamientos en los nudos. Y así continúa...
Diagrama de Secuencia (UML) para el Caso de Uso “Analizar la Estructura” Estructu
Elemen
Prop
CargE
FuerIn
Coords
armar K
calcular solución calcular calcular
CargN
Bor
DespN
Reac
Diagrama de Componentes (UML)
Implementación de las Clases del Modelo OO – Primera Parte package estructuras; // Estructura.java public class Estructura { public int nNu; public int nEle; public void graficar() { // código para graficar la estructura } public void calcular() { // rutina para el cálculo estructural } public Estructura() { } } package estructuras; // Util1.java public interface Util1 { public float calcResul(); } package proy03; // Main.java import estructuras.*; import nudos.*; import elementos.*; public class Main { public Main() { } public static void main(String[] args) { } }
Implementación de las Clases del Modelo OO – Segunda Parte /* Nudo.java */ package nudos; import estructuras.*; public abstract class Nudo extends Estructura { public int codNu; public String descr; public double enX; public double enY; public double enZ; public double calcResul() { return 1; // se retornará un valor calculado } public Nudo() { } } package nudos; // Coord.java public class Coord extends Nudo { public final double enZ = 0; public Coord() { } } package nudos; // CargNud.java public class CargNud extends Nudo { public boolean dinami; public CargNud() { } }
/* DespNud.java */ package nudos; public class DespNud extends Nudo { public boolean asentamien; public boolean getEnNorma() { return true; // se retornará un valor lógico } public DespNud() { } } /* Reacciones.java */ package nudos; public class Reacciones extends Nudo { private double calcFuerResor() { return 0; // se retornará un valor calculado } public Reacciones() { } }
Implementación de las Clases del Modelo OO – Tercera Parte /* Elemento.java */ package elementos; import estructuras.*; public class Elemento extends Estructura { public int CodEle; public int nuIni; public int nuFin; public double calcResul() { return 0; // se retornará un valor calculado } public Elemento() { } } /* Propiedades.java */ package elementos; public class Propiedades extends Elemento { public double elasti; public double base; public double altura; public double getIner() { return 0; // se retornará un valor calculado } public double getArea() { return 0; // se retornará un valor calculado } public Propiedades() { } }
package elementos; // CargElem.java public class CargElem extends Elemento { public String tipo; public double ini; public double apli; public double fx; public double fy; public double mz; public boolean verif() { return true; // retornará un valor de verdad } public double calcResul() { return 1; // se retornará un cálculo } public CargElem() { } } package elementos; // FuerInter.java public class FuerInter extends Elemento { public double fix; public double fiy; public double fiz; public double calcResul() { return 1; // retornará un valor calculado } public FuerInter() { } }
Nuestra Reciente Alternativa: Generaciรณn del Modelo Orientado a Objetos a partir de la Base de Datos Relacional y usando JDeveloper Versiรณn 10.1.3.3
1. Crear la conexiรณn a DB
1. Crear la conexiรณn a DB
1. Crear la conexiรณn a DB
1. Crear la conexiรณn a DB
Paso 2. Crear nueva aplicaciรณn
Paso 3. Crear modelo OO
Paso 3. Crear modelo OO
Paso 3. Crear modelo OO
Paso 3. Crear modelo OO
Paso 3. Crear modelo OO
Paso 3. Crear modelo OO
Paso 3. Crear modelo OO
Paso 3. Crear modelo OO
Paso 4. Crear pantallas
Paso 4. Crear pantallas
Paso 4. Crear pantallas
Paso 4. Crear pantallas
Paso 4. Crear pantallas
Paso 4. Crear pantallas
Conclusiones La Programación Orientada a Objetos POO ha demostrado ser de gran soporte para la solución de problemas de otras áreas del conocimiento como la ingeniería estructural. Si bien el modelo E-R estrictamente no forma parte de la POO, su participación en un proceso de diseño puede ser de gran ayuda. Las herramientas ORM son una alternativa con futuro por su asistencia en el mapeo de modelos conceptuales; no obstante, aún requieren la supervisión del hombre. La correcta concepción del modelo y su adecuada representación mediante el diagrama de clases (UML) son el centro y revisten vital importancia para el diseño de cualquier aplicación. El diagrama de secuencias UML juega un papel preponderante puesto que representa la parte dinámica (en función del tiempo) del funcionamiento del modelo. El diagrama de componentes es algo así como un “plano” de la implementación física del modelo. La implementación de las clases mediante programación en un lenguaje como el Java, es algo que puede fluir sin mucho esfuerzo siempre y cuando se tenga bien realizado el modelo OO.