Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Programacin Orientada a
Objetos
(Segunda Parte)
Departamento de Informtica
FCEFN UNSJ
Ao 2011
1
Bibliografa y Sitios WEB
(*6) http://www.msdn.microsoft/es-es/vcsharp/
2
Relaciones entre Clases en C# (1)
Las relaciones entre las clases expresan una forma de acoplamiento entre ellas.
3
Relaciones entre Clases en C# (2)
4
Asociacin (1)
Provincia Gobernador
+ Provincia() + Gobernador()
+ +
5
Asociacin (2)
El sistema va registrando las compras de todos los clientes con las facturas que emiten en los
distintos locales a medida que el cliente realiza sus compras.
El sistema permite:
1. Informar a un cliente cada una de las compras realizadas incluyendo: nmero e importe de
cada factura, e importe total acumulado.
2. Informar a un cliente sobre la bonificacin que recibir por todas sus compras realizadas
6
Asociacin (3)
Factura Cliente
-nro_f:int - dni:string;
-descuento:float - direccion:string
7
Asociacin (4)
8
Asociacin (5)
public class Cliente {
private string dni;
private string telefono;
private string direccion;
Factura []fac;
int tope;
public Cliente() { }
public Cliente(string dni, string telefono, string direccion) {
fac = new Factura[100];
tope = 0;
this.dni = dni;
this.telefono=telefono;
this.direccion = direccion;
}
}
9
http://www.devx.com/enterprise/Article/28576
dni: string
-nombre: nombre
-nombre: nombre
- cant_habitantes
+
+
1
1 Reserva
-vuelo
n n
- vendedor
Para una tupla Vuelo Vendedor de Billetes, existen ms de un objeto de la clase Reserva. Esto
es, podemos tener mltiples reservas por vuelo y vendedor. En este caso no podemos definir a
Reserva como una clase asociacin, sino que existe una relacin de asociacin entre Vuelo
y Vendedor de Billetes que se deriva o modela a travs de Reserva
11
Agregacin Agregacin (1)
Un objeto de una clase contiene como partes a objetos de otras clases
La destruccin del objeto continente no implica la destruccin de sus partes.
Los tiempos de vida de los objetos continente y contenido no estn tan estrechamente acoplados, de
modo que se pueden crear y destruir instancias de cada clase independientemente.
Bebida
- cantidad: int
- denominacion: string
Orden
+ Bebida() : void
- mesa: int
+ mostrarDatos() : void
- mesero: string
+ Orden() : void
+ mostrarDatos() : void PlatoPrincipal
- cantidad: int
- denominacion: string
+ PlatoPrincipal() : void
+ mostrarDatos() : void
12
Agregacin Agregacin (2)
13
Agregacin Agregacin (3)
class Pedido {
private int mesa;
private string mesero;
private Bebida bebida; // referencia al agregado
private PlatoPrincipal plato; // referencia al agregado
public Pedido(int m, string mozo,Bebida b, PlatoPrincipal p){
mesa = m;
mesero = mozo;
bebida = b;
plato = p;
}
public void mostrarDatos(){
Console.WriteLine("Nmero de Mesa: {0}",mesa);
Console.WriteLine("Mozo: {0}",mesero);
Console.WriteLine("Plato Principal: ");
plato.mostrarDatos();
Console.WriteLine("Bebida:");
bebida.mostrarDatos();
}
}
14
Agregacin Agregacin (4)
15
(*) Pro C# 2005 and the .NET 2.0 Plataform Cap. 6 Pg. 146
Composicin _Ejemplo
Un objeto de una clase contiene como partes a objetos de otras clases y estas partes estn fsicamente
contenidas por el agregado.
Los tiempos de vida de los objetos continente y contenido estn estrechamente acoplados
La destruccin del objeto continente implica la destruccin de sus partes.
class System
E_Mail
Alumno
- Id_cuenta: string
- registro: int
- dominio: string
- nombre: string - tipo_dominio: string
- curso: int - contrasena: string
16
E_Mail.cs
Agregacin Composicin (2)
namespace Composicin__Ejemplo
{
public class Alumno {
private int registro;
private string nombre;
private int curso;
private E_Mail mail= new E_Mail(); //el agregado se crea dentro de la clase
public Alumno(int r, string n, int c, string i, string d, string t, string cl){
registro = r;
nombre = n;
curso = c;
mail.setID(i);
mail.setdominio(d);
mail.settipo(t);
mail.setclave(cl);
}
18
Agregacin Composicin (4)
~ Alumno() {
GC.Collect();
GC.WaitForPendingFinalizers();
Console.WriteLine("Alumno eliminado");
}
public void mostrarDatos(){
Console.WriteLine("Datos del Alumno: {0}",nombre);
Console.WriteLine("Curso: {0}",curso);
Console.WriteLine("E_Mail: {0}", mail.Retorna_Email());
} }}
Utilizar la clase Alumno antes definida, si es necesario, agregar los mtodos que crea conveniente
lista
:Lista :nodo
comienzo dato
.
:nodo :nodo
dato dato
:Alumno
Null
:Alumno 8752
:E_Mail Ana Perez
12563
1
5
:Alumno
11245 Luis Flores :E_Mail
4 Ana Garcia
:E_Mail
21
Vista del proyecto con las tres clases utilizadas
22
Clase nodo Lista_Enlazada
namespace MI_Lista {
Cilindro
En este ejemplo, un objeto instancia de la
clase cilindro adems de los miembros de -Altura: real
la clase crculo, tendr un nuevo miembro +cilindro() Clase
(altura) +listar() derivada o
+calcularsuperficie()
hija
27
(*2) Tema 5 Pag. 72
Ejemplo 10
Herencia (2)
class circulo
{
double radio;
public circulo() {}
public circulo(double r){radio=r;}
public double calcularsuperficie(){
return 3.14*radio*radio;
}
public double obtenerradio()
{
return radio;
}
public void Listar(){
{
Console.WriteLine(" Radio:{0,6:f2}", radio);
Console.Write(" Superificie del circulo:{0,6:f2}",
calcularsuperficie());
} }
}
28
(*2) Tema 5 Pag. 72
Ejemplo 10
Herencia (2)
}
29
Ejemplo 10
Herencia (3)
class Program
{ static void Main(string[] args)
{ float r,a;
Console.WriteLine("Ingrese los datos del circulo");
Console.Write("Radio: ");
r = float.Parse(Console.ReadLine());
circulo cir = new circulo(r);
Console.WriteLine("Ingrese los datos del cilindro");
Console.Write("Radio: ");
r = float.Parse(Console.ReadLine());
Console.Write("Altura: ");
a = float.Parse(Console.ReadLine());
cilindro cil = new cilindro(r, a);
Console.Write("Circulo:\n ");
cir.Listar();
Console.Write("\nCilindro:\n ");
cil.Listar();
int tecla=Console.Read(); }
}
}
30
Herencia (5)
Detalles de programacin
Errores de Warning:
31
Herencia (6) Detalles de programacin
32
(*2) Pag. 72 El lenguaje de Programacin C# - Jose A. Gonzalez Seco
Herencia (7)
Como vemos, al escribir el constructor de la clase derivada (hija), es necesario hacerlo con
una sintaxis especial que consiste en preceder la llave de apertura del cuerpo del mtodo
con : seguido de una expresin de la siguiente forma:
: base(<parametrosBase>)
A esta estructura se le llama inicializador base y se utiliza para indicar cmo deseamos
inicializar los campos heredados de la clase padre.
33
Actividad Conjunta 5
class circulo {
double radio; El siguiente ejemplo
public circulo() { muestra una clase circulo
Console.Write("Radio: ");
donde el ingreso de los
radio = double.Parse(Console.ReadLine());
}
atributos se realiza en el
public double calcularsuperficie(){ constructor.
return 3.14 * radio * radio;
Defina la clase cilindro
}
public double obtenerradio() {
correspondiente y realice
return radio; el programa principal
} necesario para probar la
public void Listar() { jerarqua de clases.
Console.WriteLine(" Radio:{0,6:f2}", radio);
Console.Write(" Superificie del Circulo:{0,6:f2}", calcularsuperficie());
}
}
34
Compatibilidad de referencias: Upcasting
Ejemplo
Circulo c1 = new Circulo(3);
Cilindro c2l = new Cilindro(2,5);
c1=c2
PERMITIDO, qu pas en memoria???
c2=c1; // qu pasar??????
35
Compatibilidad y Memoria
Clase Circulo
Clase Cilindro
Memoria
compatible
36
Vinculacin dinmica vinculacin esttica
Pro C# 2005 and the .NET 2.0 Plataform Cap. 4 Pg. 146
El Lenguaje de programacin C# Pg. 71 37
Funciones virtuales (1)
C# posee una Tabla de Mtodos (que analizaremos ms adelante). Esta tabla entre
otros contiene una direccin por cada Mtodo Virtual definido en una clase o heredado.
As, los objetos instancias de clases adems de los datos propios de la instancia,
poseen la direccin de la Tabla de Mtodos desde donde se redireccionan los mtodos
virtuales asociados a ella.
Un mtodo debe declararse virtual en la clase en la que aparece por primera vez, y
luego redefinido en las subclases (override).
38
Funciones virtuales (2)
Pro C# 2005 and the .NET 2.0 Plataform Cap. 4 Pg. 146
El Lenguaje de programacin C# Pg. 71 39
Funciones virtuales y polimorfismo (1)
p
polimorfismo, 0xff050f2b
10
6.15 0xff050f2b
5.30
generamos un 0xff050e01
0xff050e01 0xff050e01
arreglo de
referencias, que
pueda guardar tanto
crculos como
cilindros. TM Cilindro TM Circulo
----------- +-------
--------- ---------
Cilindro.CalcularSuperficie Crculo.CalcularSuperficie
40
cdigo cdigo
Funciones virtuales y polimorfismo (2)
p
Cilindro.CalcularSuperficie Crculo.CalcularSuperficie
41
cdigo cdigo
Funciones virtuales y polimorfismo (3)
42
Funciones virtuales y polimorfismo (4)
Clase Circulo:
Clase Cilindro:
namespace PolimorfismoCirculoCilindro{
class Cilindro : Circulo{
private double altura;
public Cilindro(double r, double a):base(r) {
altura = a;
}
public override void mostrarDatos() {
base.mostrarDatos();
Console.WriteLine("Altura: {0}", altura);
}
public override double Calcular_Superficie(){
return Math.PI*2*obtenerRadio()*altura
+2*Math.PI*Math.Pow(obtenerRadio(),2);
}
}
} 44
Funciones virtuales y polimorfismo (5)
46
Funciones virtuales y polimorfismo
Ejemplo (2)
Sea A un objeto de la clase Arreglo, en tiempo de ejecucin, despus de haber insertado
tres objetos en el arreglo de referencias a circulo, el objeto A se puede representar
grficamente as:
:Arreglo
3
A
7
(items)
Dir. TM Arreglo
:circulo
7 :circulo :cilindro
Dir.TM Circulo 3 5
Dir.TM Circulo 2
DirTM Cilindro 47
Funciones virtuales y polimorfismo
Ejemplo (3)
namespace PolimorfismoCirculoCilindro{
class Arreglo{ public void mostrarElementos(){
private Circulo[] items; int i;
private int tope; for (i = 0; i < tope; i++){
private int tamanio; Console.WriteLine("A[" + i + "]");
public Arreglo(int cantidad){ items[i].mostrarDatos();
if (cantidad > 0) }
tamanio = cantidad; }
else
tamanio = 5; public void mostrarSuperficie(){
items = new Circulo[tamanio]; int i;
tope = 0; for (i = 0; i < tope; i++){
} Console.WriteLine("Superficie de A[{0,1:d}]={1,4:f2}",
public void insertar(Circulo c){ i, items[i].Calcular_Superficie());
if (tope == tamanio){ }
tamanio = tamanio + 5; }
Array.Resize(ref items, tamanio); }
} }
items[tope++] = c;
}
48
arreglo-circulo-cilindro
----------------
Dir M.V. mostrarDatos
5 Dir. M. V. Calcular_Superficie
2
Dir TM Cilindro
c2 TM Circulo
3 ----------------
c1
Dir TM Circulo
Dir M.V. mostrarDatos
Dir. M. V. Calcular_Superficie
50
Clase de los objetos referenciados
Operador is: este operador del lenguaje C# permite identificar en tiempo de ejecucin a qu
clase pertenece un objeto referenciado. As, la expresin e is T se evala verdadera si el objeto
referenciado por e pertenece a la clase T
if (c1 is circulo)
Console.WriteLine("c1 pertenece a la clase circulo");
if (c1 is cilindro)
Console.WriteLine("c1 pertenece a la clase cilindro");
else Console.WriteLine("c1 NO pertenece a la clase cilindro");
if (c2 is cilindro)
Console.WriteLine("c2 pertenece a la clase cilindro");
if (c2 is circulo)
Console.WriteLine("c2 SI pertenece a la clase circulo");
Console.WriteLine(asigno a c1=c2");
c1 = c2; //ahora c1 referencia a un objeto de la clase cilindro
if (c1 is circulo)
if (c1 is circulo)
Console.WriteLine("c1 pertenece a la clase circulo");
if (c1 is cilindro)
Console.WriteLine("c1 pertenece a la cilindro");
Console.ReadKey();
}
51
ACTIVIDAD CONJUNTA 6
if (items[i] is Cilindro)
Console.WriteLine( ((Cilindro)items[i]).Calcular_Volumen());
53
circulo-cilindro-volumen
Actividad Conjunta 7
ACTIVIDAD:
Agregue al ejemplo de la clase Arreglo los mtodos necesarios para
dar respuesta a las siguientes opciones:
Mostrar la cantidad de crculos y cilindros del arreglo
Indicar la cantidad de cilindros con mxima superficie
Mostrar el volumen de cada uno de los cilindros, sabiendo que el
volumen es:
Volumen = superficie de la base * altura
54
Clase Abstracta
Como es conocido, las clases abstractas no son instanciables. Se utilizan para proporcionar
comportamiento comn a las subclases. Para definir una clase abstracta en C# se antepone
abstract a su definicin.
EMPLEADO
public abstract class EMPLEADO
{
DOCENTE ADMINISTRATIVO
abstract public class EMPLEADO
{
NO_PROFESIONAL PROFESIONAL
55
Clase Abstracta Mtodos abstractos (1)
La utilidad de las clases abstractas radica en que pueden contener mtodos que no
proporcionan una implementacin, la cual se deja en manos de sus clases derivadas. Estos
mtodos se llaman mtodos abstractos y se definen precediendo su definicin del modificador
abstract y sustituyendo su cdigo por un punto y coma (;) .
Un mtodo abstracto es un mtodo virtual que permite declarar un comportamiento comn a las
subclases de la clase donde se defini, el cual ser redefinido en cada una de ellas.
Una clase que contiene al menos un mtodo abstracto (an cuando contenga mtodos concretos)
debe declararse como abstracta.
Una clase concreta derivada de una clase abstracta debe proporcionar implementacin a los
mtodos abstractos para eso el mtodo de la subclase debe incluir el modificador override.
56
Clase Abstracta Mtodos abstractos (2)
ALUMNO
- string nombre;
- string carrera;
- long ingreso;
+ALUMNO()
+ abstract long permanencia();
+ long get_ingreso()
+ void mostrar()
EGRESADO REGULAR
- long egreso; - int aprobadas
+ EGRESO()
+ override long permanencia(); + REGULAR(.)
+ override long permanencia();
57
Ejemplo 13
60
ACTIVIDAD CONJUNTA 8 (1)
Atributos:
lado, altura del tringulo y altura del prisma
Prisma triangular
Superficie: ---
Volumen: Superficie de la base * altura
Superficie: ---
Pirmide cuadrangular Volumen: Superficie de la base * altura/3
61
ACTIVIDAD CONJUNTA 8 (1)
62
La Clase System.Object (1)
63
La Clase System.Object (2)
Equals Sobrecargado. Determina si dos instancias de Object son iguales.
Finalize Permite que un objeto Object intente liberar recursos y realizar otras
operaciones de limpieza antes de que el objeto Object sea reclamado por
el recolector de elementos no utilizados.
ToString Devuelve una clase String que representa la clase Object actual.
64
La Clase System.Object (3)
(*2) Captulo 5 - Pag. 67 El lenguaje de Programacin C#
(*5) Captulo 3 Pg. 104 Professional C#
Mtodo Equals: (*4) Deitel y Deitel Pg. 338
1) public virtual bool Equals(object o): Se usa para comparar el objeto sobre el que se
aplica Equals con cualquier otro que se le pase como parmetro. Devuelve true si ambos
objetos son iguales y false en caso contrario.
En este caso hemos considerado que dos crculos son iguales si ambos apuntan a la
misma referencia en memoria dinmica (igualdad por referencia)
65
La Clase Object (4)
(*2) Captulo 5 - Pag. 67 El lenguaje de Programacin C#
(*5) Captulo 3 Pg. 104 Professional C#
Mtodo Equals:
Por ser virtual, en cada clase puede redefinirse el mtodo Equals para indicar cuando dos objetos
de una clase son iguales.
Toda redefinicin del mtodo Equals() que hagamos cumple con una serie de propiedades que
muchos de los mtodos incluidos en las distintas clases de la BCL esperan que se cumplan:
Reflexividad, Simetra, Transitividad, Consistencia y tratamiento de objetos nulos. (Ver Bibliografa)
Por ejemplo podemos redefinir el mtodo Equals, suponiendo que dos objetos de la clase circulo
son iguales cuando tienen el mismo radio, aunque apunten a distinta rea de memoria dinmica.
cir cir1
8 8
Dir. T.M. Dir. T.M
66
(*2) Captulo 5 - Pag. 67 El lenguaje de Programacin C#
(*5) Captulo 3 Pg. 104 Professional C#
Redefinir Equals() no implica que el operador de igualdad (==) quede tambin redefinido
67
(*2) Captulo 5 - Pag. 67 El lenguaje de Programacin C#
(*5) Captulo 3 Pg. 104 Professional C#
68
(*2) Captulo 5 - Pag. 67 El lenguaje de Programacin C#
(*5) Captulo 3 Pg. 104 Professional C#
69
(*2) Captulo 5 - Pag. 67 El lenguaje de Programacin C#
(*5) Captulo 3 Pg. 104 Professional C#
3) public virtual string ToString(): Devuelve una representacin en forma de cadena del
objeto sobre el que se el mtodo es aplicado.
int i=-50;
string s=i.ToString(); // retorna -50
La implementacin por defecto de este mtodo simplemente devuelve una cadena de texto
con el nombre de la clase a la que pertenece el objeto sobre el que es aplicado.
Ejemplo:
circulo cir = new circulo(8);
Console.Write("\ncir.ToString() + cir.ToString()); Herencia.circulo
Lo habitual suele ser redefinir ToString() en cada nueva clase de modo de mostrar con ms70
facilidad el estado de los objetos
(*2) Captulo 5 - Pag. 67 El lenguaje de Programacin C#
(*5) Captulo 3 Pg. 104 Professional C#
Ejemplo13_bis
Console.Write( r.ToString());
71
}
El Lenguaje de programacin C# Pg. 127 a 132
Propiedades
Definicin de propiedades:
<tipoPropiedad> <nombrePropiedad>{
set{
<cdigoEscritura>
}
get{
<cdigoLectura>
}
}
72
Propiedades
class Program {
static void Main(string[] args) {
string a, b, c;
Console.WriteLine("Ingrese Denominacin \n "); a = Console.ReadLine();
Console.WriteLine("Ingrese Domicilio \n" ); b = Console.ReadLine();
Console.WriteLine("Telfono \n "); c= Console.ReadLine();
Empresa e = new Empresa(a, b, c);
e.mostrarDatos();
/// Modifico la denominacin
e.Denominacion="La Positiva";
e.mostrarDatos();
/// uso propiedades directamente
Empresa f= new Empresa();
Console.WriteLine("Ingrese Denominacin \n "); f.Denominacion = Console.ReadLine();
Console.WriteLine("Ingrese Domicilio \n"); f.Domicilio = Console.ReadLine();
Console.WriteLine("Telfono \n "); f.Telefono = Console.ReadLine();
Console.ReadKey();
}
}
74
La biblia de C# p. 301
Pro C# 2005 and the .NET 2.0 Plataform Cap. 7 Pg. 221
El Lenguaje de programacin C# Pg. 171
Interfaces (1)
75
La biblia de C# p. 301
Pro C# 2005 and the .NET 2.0 Plataform Cap. 7 Pg. 221
El Lenguaje de programacin C# Pg. 171
Interfaces (2)
Al igual que las clases abstractas, son tipo referencia, pero no pueden crearse objetos
directamente de ellas (solo de las clases que las implementen).
Las clases pueden implementar cualquier nmero de interfaces (no confundir con herencia
mltiple)
Una clase que implementa una interfaz, provee implementacin a todos los mtodos de la
interfaz.
Definicin de Interface
Sintaxis: <modificadores> interface <nombre>{ <miembros> }
Los <modificadores> son los mismos que los de las clases (public, protected, private, internal)
Los miembros de la interface pueden ser:Mtodos, Propiedades, Indizadores, Eventos
76
(*4) deite y deitel Pg. 365
Factura Empleado
EmpleadoAsalariado
El objetivo de esta interfaz ser proveer la firma de los mtodos que debern
implementar las clases que requieran proveer una forma de persistencia para los
objetos.
Ntese la libertad que deja la interfaz, de modo que una clase que la implemente
podr guardar/leer los datos en un archivo de texto, en un archivo binario, o en
una base de datos, todo depender de la implementacin que realice de los
mtodos LeerDatos y GuardarDatos.
80
Ejemplo Interfaces (4)
public bool LeerDatos(){ //implementacin del mtodo declarado en la Interfaz
bool resultado = true;
try
{ StreamReader entrada = new StreamReader("personas.txt");
while (!entrada.EndOfStream)
{ string linea = entrada.ReadLine();
string[] arreglo = linea.Split('-');
Persona p = new Persona(int.Parse(arreglo[0]), arreglo[1], arreglo[2]);
this.insertar(p);
}
entrada.Close();
}
catch (Exception e)
{
resultado = false;
Console.WriteLine("Error de Entrada/Salida {0}", e.Message);
}
return resultado;
} 81
ejemplo_persistencia1
Para utilizar una coleccin de objetos, que pertenecen a una misma jerarqua,
se necesita que las referencias sean todas del tipo base (las ms genrica de
todas: referencias a Object)
Colecciones de objetos
85
Pro C# 2005 and the .NET 2.0 Plataform Cap. 7 Pg. 250
Colecciones (Collections 2)
86
ArrayList (1)
Un ArrayList, es similar a un arreglo, la diferencia radica en que el ArrayList puede
crecer en tiempo de ejecucin.
87
ArrayList (2)
Ejemplo:
ArrayList v1 = new ArrayList();
v1.Add(Luis);
v1.Insert(1,Jos)
V1.Insert(2,23);
88
Propiedades y Mtodos de ArrayList
Sort() Ordena la coleccin (ojo para usar este mtodo la clase debe
implementar la interface IComparable y refinir el mtodo
CompareTo)
GetEnumerator() Obtiene un enumerador a partir de la coleccin, y este enumerador sirve
para recorrer la coleccin, obtener el elemento actual de enumerador, etc.
89
array_list_clientes
Ejemplo ArrayList(1)
using System;
using System.Collections.Generic; public float Saldo{
using System.Collections; get { return saldo; }
using System.Linq; set { saldo = value; }
using System.Text; }
namespace array_list_clientes public int NumeroCuenta {
public class Cuenta{ get { return numeroCuenta; }
private float saldo; set { numeroCuenta = value; }
private int numeroCuenta; }
public Cuenta(int nc, float s){ public virtual void mostrarDatos(){
Console.WriteLine("Cuenta Nmero: {0}", this.numeroCuenta);
saldo=s;
numeroCuenta=nc; Console.WriteLine("Saldo: {0}", this.saldo);
} }
public Cuenta(){ }
saldo = 0.0f; }
numeroCuenta = 0;
}
90
array_list_clientes
Ejemplo ArrayList(2)
public class Cliente{
Ejemplo ArrayList(2)
int numeroCliente;
string apellidoyNombre;
public float obtenerSaldoCuenta(int nc)
{
ArrayList cuentas=new ArrayList(10); bool bandera = false;
public Cliente(){ int i=0;
numeroCliente = 0; Cuenta c;
} float saldo = -1.0f;
public Cliente(int nroCli, string AyN){ while (!bandera && i < cuentas.Count){
numeroCliente = nroCli; c = (Cuenta)cuentas[i]; //downcasting
apellidoyNombre = AyN; if (c.NumeroCuenta == nc){
} bandera = true;
public int NumeroCliente { saldo = c.Saldo;
get { return numeroCliente; } }
set { numeroCliente = value; } i++;
} }
if (!bandera){
public string ApellidoyNombre{
Console.WriteLine("Cuenta {0} inexistente", nc);
get { return apellidoyNombre; }
Console.WriteLine("Presione Enter");
set { apellidoyNombre = value; } Console.ReadKey();
} }
public void nuevaCuenta(Cuenta c){ return saldo;
cuentas.Add(c); }
} }
}
91
array_list_clientes
Ejemplo ArrayList(3)
class Program
{
static void Main(string[] args)
{
Cliente clienteBanco = new Cliente(1001, "Andrea Luque");
int opcion = 0;
do
{ Console.WriteLine("\n Men Clientes Banco");
Console.WriteLine("1 - Crear Cuenta Cliente");
Console.WriteLine("2 - Obtener saldo de cuenta de Cliente");
Console.WriteLine("5 - Salir");
opcion = int.Parse(Console.ReadLine());
switch (opcion)
{ case 1:
{Console.Write("Nmero de Cuenta: ");
int numeroCuenta = int.Parse(Console.ReadLine());
Console.Write("Saldo: ");
float saldo = float.Parse(Console.ReadLine());
Cuenta cuentaCliente = new Cuenta(numeroCuenta, saldo);
clienteBanco.nuevaCuenta(cuentaCliente);
}
break; 92
array_list_clientes
Ejemplo ArrayList(4)
case 2:
{
Console.Write("Nmero de Cuenta: ");
int numeroCuenta = int.Parse(Console.ReadLine());
Console.WriteLine(clienteBanco.ApellidoyNombre + " tiene en la cuenta " + numeroCuenta + " un saldo de $"
+ clienteBanco.obtenerSaldoCuenta(numeroCuenta));
}
break;
}
} while (opcion != 5);
}
}
}
93
ACTIVIDAD CONJUNTA 9
Utilice las clases Cuenta y Cliente antes definida y genere una coleccin de clientes de
un banco.
Realice un programa que responda al siguiente men de opciones:
1: Insertar un cliente
2: Mostrar el total de cuentas de cada uno de los clientes
3: Listar monto total acumulado de cada uno de los clientes
4: Dado el nombre de un cliente, mostrar los saldos de cada una de sus cuentas.
5: Eliminar un cliente.
6: Mostrar datos de todos los clientes
7: Salir
94