Вы находитесь на странице: 1из 20

1

Implementacin
Ingeniera del Software de Gestin
Tema 10
DSIC - UPV
Escuela Tcnica Superior de Informtica Aplicada Curso 2005-06
2
1. Introduccin
2. Implementacin de Constructores
2.1 Carga del Sistema
3. Concepto de aplicacin OO
4. Reutilizacin
. Herencia
. Agregacin
Contenidos Contenidos
2
3
Programacin Orientada a Objetos
Programacin Orientada a Objetos
En este tema se presentan cuestiones relacionadas
directamente con la implementacin de un sistema.
Los conceptos bsicos de la OO ya se vieron en el tema 1.
El lenguaje de programacin OO elegido es C#, que tambin
se present en el tema 1
Introducci Introducci n n
4
Implementacin de Constructores
Carga del sistema
3
5
En el desarrollo de un sistema, una vez obtenido
el diseo, a partir del diagrama de clases realizado
en la fase de modelado
ya podemos declarar e implementar los
constructores de las clases.
Consideraciones:
En la implementacin de los constructores hay que tener en
cuenta cmo se va a realizar la invocacin de los mismos
para crear todo el sistema en un estado inicial (Lo que
denominaremos carga del sistema)
Implementacin de Constructores
Implementaci Implementaci n de Constructores n de Constructores
6
Constructores. Resumen
La creacin de objetos se realiza invocando el constructor de la
clase.
En C#.
Hay un constructor por defecto
Se pueden definir constructores.
El operador new:
Crea el objeto,
inicializa sus atributos de acuerdo con el constructor y
devuelve una referencia al objeto creado.
Implementacin de Constructores
Implementacin de Constructores
(Visto en el tema 1)
4
7
Constructores. Resumen
Implementacin de Constructores
Implementacin de Constructores
(Visto en el tema 1)
Definir un constructor
class Fecha
{
private int dia,mes,anyo;
public Fecha(int d, m, a)
{
dia=d;
mes=m;
anyo=a;
}
}
class Fecha
{
private int dia,mes,anyo;
public Fecha(int d, m, a)
{
dia=d;
mes=m;
anyo=a;
}
}
Creacin de objetos
Fecha Fecha_hoy;
Fecha_hoy = new Fecha(1,10,2003);
Fecha Fecha_hoy;
Fecha_hoy = new Fecha(1,10,2003);
8
Ejemplo: Cajero Automtico
Implementacin de Constructores
Implementacin de Constructores
class red
{
private string nombre;
private int recargo;
public red(string n, int r)
{
nombre=n;
recargo=r;
}
}
class red
{
private string nombre;
private int recargo;
public red(string n, int r)
{
nombre=n;
recargo=r;
}
}
Creacin de objetos
red servired = new red(Servired,4);
red servired = new red(Servired,4);
5
9
Ejemplo: Cajero Automtico
Implementacin de Constructores
Implementacin de Constructores
class banco
{
private string nombre;
private int codEntidad;
private red miRed;
private ArrayList LCuentas;
}
class banco
{
private string nombre;
private int codEntidad;
private red miRed;
private ArrayList LCuentas;
}
public banco (string n, int cod)
{
nombre=n;
codEntidad=cod;
miRed=null;
LCuentas=null;
}
public banco (string n, int cod)
{
nombre=n;
codEntidad=cod;
miRed=null;
LCuentas=new ArrayList();
}
Inicializar la
coleccin
Distintas posibilidades
de implementacin
del constructor
10
Ejemplo: Cajero Automtico
Implementacin de Constructores
Implementacin de Constructores
class banco
{
private string nombre;
private int codEntidad;
private red miRed;
private ArrayList LCuentas;
}
class banco
{
private string nombre;
private int codEntidad;
private red miRed;
private ArrayList LCuentas;
}
public banco (string n, int cod, red r)
{
nombre=n;
codEntidad=cod;
miRed=r;
LCuentas=null;
}
Pasar al constructor el
objeto ya creado
Distintas posibilidades
de implementacin
del constructor
public banco (string n, string nr, int cod, int rr)
{
nombre=n;
codEntidad=cod;
miRed=new red(nr,rr);
LCuentas=new ArrayList();
}
Crear el objeto como
parte del constructor
6
11
Ejemplo: Cajero Automtico
Implementacin de Constructores
Implementacin de Constructores
class banco
{
private string nombre;
private int codEntidad;
private red miRed;
private ArrayList LCuentas;
}
class banco
{
private string nombre;
private int codEntidad;
private red miRed;
private ArrayList LCuentas;
}
public banco (string n, int cod, red r)
{
nombre=n;
codEntidad=cod;
miRed=r;
LCuentas=new ArrayList();
cargar_cuentas();
}
Inicializar y cargar la coleccin
Distintas posibilidades
de implementacin
del constructor
private void cargar_cuentas()
{
mientras existan cuentas del banco
cuenta c =new cuenta(N,T,S);
LCuentas.Add(c);
siguiente cuenta;
end_mientras
}
12
Como hemos visto existen distintas posibilidades
de implementar un constructor.
Hemos de elegir una implementacin coherente
con:
El problema o caso de estudio abordado, y
El proceso de creacin a seguir en la carga del
sistema (orden de invocacin de los constructores).
Implementacin de Constructores
Implementacin de Constructores
7
13
Ejemplo: Cajero Automtico
Implementacin de Constructores
Implementacin de Constructores
class tarjeta
{
private string idTarjeta;
private date FechaCaducidad;
private string Titular;
private string Pin;
private double saldo;
private double LimiteMaximo;
private bool Anulada;
private Cuenta miCuenta;
private Banco miBanco;
}
class tarjeta
{
private string idTarjeta;
private date FechaCaducidad;
private string Titular;
private string Pin;
private double saldo;
private double LimiteMaximo;
private bool Anulada;
private Cuenta miCuenta;
private Banco miBanco;
}
public tarjeta (string idT, . . ., string N, string T, double S)
{
idTarjeta=idT;
. . .// asignacin de los atributos (FechaCaducidad, Titular, Pin, saldo, LimiteMaximo, Anulada)
miCuenta=new Cuenta (N,T,S);
miBanco=null;
}
Se crea la cuenta
14
Ejemplos: Cajero Automtico
Implementacin de Constructores
Implementacin de Constructores
El constructor de tarjeta debe crear la cuenta?
De acuerdo con el problema o caso de estudio.
No, cuando se crea una tarjeta, la cuenta ya existe (ya ha
sido creada previamente) y simplemente se asocia
Es decir, un usuario del banco primero abre una cuenta y
luego puede pedir tarjetas asociadas a la misma.
Segn el proceso de creacin (Carga del sistema).
Se tendr que considerar que una vez creada una tarjeta, la siguiente
tarjeta que se cree de la misma cuenta, ya no tendr que crear la cuenta,
porque ya existe.
Adems, el constructor de Banco, tampoco deber volver a crear las
cuentas, porque ya han sido creadas desde tarjeta.
Etc
Si consideramos la clase tarjeta de forma aislada, la implementacin
es correcta, pero
8
15
Ejemplo: Cajero Automtico
Implementacin de Constructores
Implementacin de Constructores
class banco
{
private string nombre;
private int codEntidad;
private red miRed;
private ArrayList LCuentas;
}
class banco
{
private string nombre;
private int codEntidad;
private red miRed;
private ArrayList LCuentas;
}
class tarjeta
{
private string nombre;
private int codEntidad;
private Cuenta miCuenta;
private Banco miBanco;
}
class tarjeta
{
private string nombre;
private int codEntidad;
private Cuenta miCuenta;
private Banco miBanco;
}
public banco (string n, int cod, red r)
{nombre=n; codEntidad=cod;
miRed=r;
LCuentas=new ArrayList();
cargar_cuentas; }
private cargar_cuentas
{mientras existan cuentas del banco
cuenta c = new cuenta(N,T,S);
LCuentas.Add(c);
siguiente cuenta;
end_mientras}
public tarjeta (string idT, . . .,
string N, string T, double S)
{
idTarjeta=idT;
. . .// asignacin de los atributos (FechaCaducidad,
// Titular, Pin, saldo, LimiteMaximo, Anulada)
miCuenta=new Cuenta (N,T,S);
miBanco=null;
}

Error
16
Modelo General de Aplicacin
T.CargoInmediato
T.Monedero T.Credito
Acumulado : Double
Operacion
CodOperacion
Fecha : Date
Concepto : String
Cantidad : Double
0..n 0..n
0..n 0..n
Red
Nombre : String
Recargo : Integer
Banco
CodEntidad : Integer
Nombre : String
1..n 1..n
asociado a / incluye
Cuenta
Numero : String
Titular : String
Saldo : Double
0..n 0..n
0..n 0..n
tiene
Tarjeta
IdTarjeta : String
FechaCaducidad : Date
Titular : String
PIN : String
Saldo : Double
LimiteMaximo : Double
Anulada : Boolean
0..n 0..n
conectada a
0..n 0..n
emite / pertenece a
Cajero
IdCajero : String
Saldo : Double
0..n 0..n
0..1
0..1 0..1
0..1
insertada_en
9
17
Establecer un orden de creacin
Ejemplo: Cajero Automtico
Red
Bancos
Cuentas
Tarjetas
Cajero
Implementacin de Constructores
Implementacin de Constructores
18
Implementacin de Constructores
Implementacin de Constructores
Ejemplo: Cajero Automtico
class red
{
private string nombre;
private int recargo;
public red(string n, int r)
{
nombre=n;
recargo=r;
}
public string obtener_nombre() { return nombre}
public int obtener_recargo() { return recargo }
public void asignar_nombre(string n){ nombre=n }
public void asignar_recargo(int r){ recargo=r }
}
class red
{
private string nombre;
private int recargo;
public red(string n, int r)
{
nombre=n;
recargo=r;
}
public string obtener_nombre() { return nombre}
public int obtener_recargo() { return recargo }
public void asignar_nombre(string n){ nombre=n }
public void asignar_recargo(int r){ recargo=r }
}
10
19
Implementacin de Constructores
Implementacin de Constructores
Ejemplo: Cajero Automtico
class banco
{
private string nombre;
private int codEntidad;
private red miRed;
private ArrayList LCuentas
public banco(string n, int c, red r)
{
nombre=n;
codEntidad=c;
miRed=r;
LCuentas=new ArrayList();
cargar_cuentas; //crea las cuentas asociadas al banco y las
//aade a LCuentas.
}
. . .
}
class banco
{
private string nombre;
private int codEntidad;
private red miRed;
private ArrayList LCuentas
public banco(string n, int c, red r)
{
nombre=n;
codEntidad=c;
miRed=r;
LCuentas=new ArrayList();
cargar_cuentas; //crea las cuentas asociadas al banco y las
//aade a LCuentas.
}
. . .
}
20
Implementacin de Constructores
Implementacin de Constructores
Ejemplo: Cajero Automtico
class cuenta
{
private string numero;
private string titular;
private double saldo;
private ArrayList LOperaciones;
public cuenta(string n, string t, double s)
{
numero=n;
titular=t;
saldo=s;
LOperaciones=new ArrayList();
}
. . .
}
class cuenta
{
private string numero;
private string titular;
private double saldo;
private ArrayList LOperaciones;
public cuenta(string n, string t, double s)
{
numero=n;
titular=t;
saldo=s;
LOperaciones=new ArrayList();
}
. . .
}
11
21
Implementacin de Constructores
Implementacin de Constructores
Ejemplo: Cajero Automtico
class tarjeta
{
private string idTarjeta;
private date FechaCaducidad;
private string Titular;
private string Pin;
private double saldo;
private double LimiteMaximo;
private bool Anulada;
private Cuenta miCuenta;
private Banco miBanco;
public tarjeta(string idT, date FC, string T, string P, double S,
double LM, bool A, cuenta MC, banco MB)
{
idTarjeta=idT; FechaCaducidad=FC; Titular=T; Pin=P; saldo=S;
LimiteMaximo=LM; Anulada=A; miCuenta=MC; miBanco=MB
}
. . .
}
class tarjeta
{
private string idTarjeta;
private date FechaCaducidad;
private string Titular;
private string Pin;
private double saldo;
private double LimiteMaximo;
private bool Anulada;
private Cuenta miCuenta;
private Banco miBanco;
public tarjeta(string idT, date FC, string T, string P, double S,
double LM, bool A, cuenta MC, banco MB)
{
idTarjeta=idT; FechaCaducidad=FC; Titular=T; Pin=P; saldo=S;
LimiteMaximo=LM; Anulada=A; miCuenta=MC; miBanco=MB
}
. . .
}
22
Implementacin de Constructores
Implementacin de Constructores
Ejemplo: Cajero Automtico
class TMonedero:Tarjeta
{
private ArrayList LOperaciones;
public TMonedero(string idT, date FC, string T, string P, double S,
double LM, bool A, cuenta MC, banco MB)
: base (idT,FC,T,P,S,LM,A,MC,MB)
{
LOperaciones=new ArrayList();
}
. . .
}
class TMonedero:Tarjeta
{
private ArrayList LOperaciones;
public TMonedero(string idT, date FC, string T, string P, double S,
double LM, bool A, cuenta MC, banco MB)
: base (idT,FC,T,P,S,LM,A,MC,MB)
{
LOperaciones=new ArrayList();
}
. . .
}
12
23
Implementacin de Constructores
Implementacin de Constructores
Ejemplo: Cajero Automtico
class TCredito:Tarjeta
{
private double Acumulado;
private ArrayList LOperaciones;
public TCredito(string idT, date FC, string T, string P, double S,
double LM, bool A, cuenta MC, banco MB, double AC)
: base (idT,FC,T,P,S,LM,A,MC,MB)
{
Acumulado=AC;
LOperaciones=new ArrayList();
}
. . .
}
class TCredito:Tarjeta
{
private double Acumulado;
private ArrayList LOperaciones;
public TCredito(string idT, date FC, string T, string P, double S,
double LM, bool A, cuenta MC, banco MB, double AC)
: base (idT,FC,T,P,S,LM,A,MC,MB)
{
Acumulado=AC;
LOperaciones=new ArrayList();
}
. . .
}
25
Implementacin de Constructores
Implementacin de Constructores
Ejemplo: Cajero Automtico
class Operacion
{
private int CodOperacion;
private date Fecha;
private string Concepto;
private double Cantidad;
public Operacion(int CO, date F, string C, double Cant)
{
CodOperacion=CO;
Fecha=F;
Concepto=C;
Cantidad=Cant;
}
. . .
}
class Operacion
{
private int CodOperacion;
private date Fecha;
private string Concepto;
private double Cantidad;
public Operacion(int CO, date F, string C, double Cant)
{
CodOperacion=CO;
Fecha=F;
Concepto=C;
Cantidad=Cant;
}
. . .
}
13
26
Implementacin de Constructores
Implementacin de Constructores
Ejemplo: Cajero Automtico
class Cajero
{
private string IdCajero;
private double saldo;
private Banco PerteneceA;
private Tarjeta TieneTarjeta;
public Cajero(int IdC, double S, Banco Ban)
{
IdCajero=IdC;
saldo= S;
PerteneceA=Ban;
TieneTarjeta=null;
}
. . .
}
class Cajero
{
private string IdCajero;
private double saldo;
private Banco PerteneceA;
private Tarjeta TieneTarjeta;
public Cajero(int IdC, double S, Banco Ban)
{
IdCajero=IdC;
saldo= S;
PerteneceA=Ban;
TieneTarjeta=null;
}
. . .
}
27
Concepto de Aplicacin OO
Aplicaciones como Objetos
14
28
Simulacin Dinmica
Arquitectura de Tres Capas Genrica
Nivel del Domini o
o Aplicacin
Nivel del Domini o
o Aplicacin
Objetos del Dominio Objetos del Dominio
obtenidos a partir de obtenidos a partir de
los modelos conceptuales los modelos conceptuales
Interfaz Grfica Interfaz Grfica
de Usuario de Usuario
Interfaz Grfica Interfaz Grfica
de Usuario de Usuario Nivel de Presentacin Nivel de Presentacin
Objetos de Objetos de
Acceso a los datos Acceso a los datos
SGBD SGBD
Objetos de Objetos de
Acceso a los datos Acceso a los datos
SGBD SGBD
Nivel de Persistencia Nivel de Persistencia
+
Bucle de
Temporizacin
adaptada a la Simulacin Dinmica
29
Simulacin Dinmica
Arquitectura de Tres Capas
en el caso de estudio del
TPV:
1) Nivel de presentacin
2) Nivel de aplicacin
3) Nivel de persistencia
Nivel P resentacin
Nivel Aplicacin
Interfaz de usuario
Formulario
principal
Formulario
1
Formulario
2
Formulario
n
...
...
Tienda TPV Empleado Transaccin ...
...
Clase de
acceso a
datos
...
Fichero
de
productos
Fichero
de
empleados
Fichero
de
catlogos
Nivel P ersistencia
... ...
15
30
Nivel de Presentacin
El nivel de
presentacin es la
vista que el usuario
tiene de la aplicacin
Dependiente de la
tecnologa
Puede ser interesante
un modelo ms
general de la
aplicacin
Nivel Presentacin (C#)
Interfaz de usuario
Formulario
principal
Formulario
1
Formulario
2
Formulario
n
...
31
Modelo General de Aplicacin
T.CargoInmediato
T.Monedero T.Credito
Acumulado : Double
Operacion
CodOperacion
Fecha : Date
Concepto : String
Cantidad : Double
0..n 0..n
0..n 0..n
Red
Nombre : String
Recargo : Integer
Banco
CodEntidad : Integer
Nombre : String
1..n 1..n
asociado a / incluye
Cuenta
Numero : String
Titular : String
Saldo : Double
0..n 0..n
0..n 0..n
tiene
Tarjeta
IdTarjeta : String
FechaCaducidad : Date
Titular : String
PIN : String
Saldo : Double
LimiteMaximo : Double
Anulada : Boolean
0..n 0..n
conectada a
0..n 0..n
emite / pertenece a
Cajero
IdCajero : String
Saldo : Double
0..n 0..n
0..1
0..1 0..1
0..1
insertada_en
Aplicacin
tiene
?
Aplicacin
Crear
Ejecutar
Destruir
16
32
Modelo General de Aplicacin
T.CargoInmediato
T.Monedero T.Credito
Acumulado : Double
Operacion
CodOperacion
Fecha : Date
Concepto : String
Cantidad : Double
0..n 0..n
0..n 0..n
Red
Nombre : String
Recargo : Integer
Banco
CodEntidad : Integer
Nombre : String
1..n 1..n
asociado a / incluye
Cuenta
Numero : String
Titular : String
Saldo : Double
0..n 0..n
0..n 0..n
tiene
Tarjeta
IdTarjeta : String
FechaCaducidad : Date
Titular : String
PIN : String
Saldo : Double
LimiteMaximo : Double
Anulada : Boolean
0..n 0..n
conectada a
0..n 0..n
emite / pertenece a
Cajero
IdCajero : String
Saldo : Double
0..n 0..n
0..1
0..1 0..1
0..1
insertada_en
Aplicacin
tiene
?
Aplicacin
Crear
Ejecutar
Destruir
Men
Opcin
tiene
0..n
0..1
0..1
Tiene_submenu
33
Aplicacin
public class Aplicacion {
private cajero CajeroAplicacion;
private menu MenuAplicacion;
public Aplicacion (){}/ /Crea los objetos de la aplicacin
public ejecutar (){} // Se ejecuta la aplicacin
protected override void Finalize(){}// Destruye los objetos de
// la aplicacin
}
17
34
Opcin de Men
public class Opcion {
//Clase para las opciones de los mens
private string Texto;
private int Codigo, Activa;
private menu MenuAsociado;
public int ObtCodOpcion(){}// Obtiene el cdigo de la opcin
seleccionada
public void mostrar (){}//Muestra la opcin
public void Activar(){}// Activa la opcin
public void Desactivar(){}// Desactiva la opcin
public int Esta_Activa(){}//Est activa la opcin?
public Opcion(string Texto, int Codig, menu Submenu, int Activ){}
// Texto de la Opcion, Codigo Asignado, SubMenu asociado?, Activa?
protected override void Finalize(){}
}
35
Men
public class Menu {
// Clase para los mens
private string Titulo;
private ArrayList Opciones;
private ArrayList Teclas;
private int NOpc;
private string MensajeDeError;
public void AnyadirOpcion(string Text, int Codig, Menu Mn, int Activ) {}
// Aade una opcin al men. La primera que se aade es la que sale abajo con el
// nmero 0. El resto se numeran a partir del 1 y salen al principio
public void ActivarOpcion(int i){}// Activa una opcin al men
public int Esta_Activa(int i){}// Est activa una opcin del men ?
public void DesactivarOpcion(int i){}// Desactiva una opcin al men
public int ObtCodOpcion(){}// Obtiene el cdigo de la opcin que se ha seleccionado
// en el men
public Menu (string Text){}
protected override void Finalize(){}
private void Mostrar{} // Este mtodo es privado porque slo es necesario para el
//mtodo ObtCodOpcion
}
18
36
Reutilizacin
Herencia
Agregacin
37
Reutilizaci Reutilizaci n n
Dos aproximaciones:
Herencia: cuando la nueva componente software
tiene todo el comportamiento de la existente, y algo
ms (lo nuevo es-un viejo)
Composicin: cuando la nueva componente se basa
en otra existente, pero difiere notablemente de sta
(Lo nuevo tiene-un viejo)
19
38
Reutilizaci Reutilizaci n n
Ejemplo:
Construccin de conjuntos a partir de listas
/ / par t i mos de l as l i st as
/ / con est a i nt er f az:
cl ass l i st a
{
publ i c voi d i nser t ar ( i nt i ) {}
publ i c bool ean i ncl ui do( i nt i ) {}
publ i c bool ean bor r ar ( i nt i ) {}
publ i c i nt pr i mer _el ement o{}
. . .
}
39
Reutilizaci Reutilizaci n: uso de herencia n: uso de herencia
Ejemplo:
Cl ass conj unt o : l i st a
{
publ i c voi d i nser t ar ( i nt i ) {} / / r edef i ni ci n
}
Slo se ha de definir la parte emergente y/o de redefinicin
20
40
Reutilizaci Reutilizaci n: uso de composici n: uso de composici n n
Ejemplo:
cl ass conj unt o
{
pr i vat e l i st a dat os;
publ i c voi d i nser t ar ( i nt i ) {) }
publ i c bool ean i ncl ui do( i nt i ) {}
publ i c bool ean bor r ar ( i nt i ) {}
publ i c i nt pr i mer _el ement o ( ) {}
. . .
}
Se debe redefinir todo, pero la implementacin
puede hacer uso de la lista mediante delegacin
Permite simular la herencia
mediante delegacin
41
Reutilizaci Reutilizaci n: uso de composici n: uso de composici n n
Delega en la lista
cl ass conj unt o
{
pr i vat e l i st a dat os;
public void insertar(int i){ datos.insertar(i) }
public boolean incluido(int i){return datos.incluido(i)}
public boolean borrar(int i){return datos.borrar(i)}
public int primer_elemento(){return
datos.primer_elemento()}
. . .
}

Вам также может понравиться