ARREGLOS DE OBJETOS UNIDAD 5 ING. YOELMA MELENDRES CRITERIO DE DESEMPEÑO Aplica aspectos avanzados de la programación orientada a objetos; empleando arreglos de objetos y clases de utilidad.
2. CRITERIO DE DESEMPEÑO
Aplica aspectos avanzados de la
programación orientada a objetos;
empleando arreglos de objetos y clases de
utilidad.
2
3. CONTENIDO
• Definición de arreglos
• Definición de objetos
• Declaración de arreglos de objetos
• Operaciones con arreglos de objetos
• Aplicaciones con arreglos de objetos
• Problemas de arreglos de objetos
3
5. 5.1.1. variable string
• El contenido de la cadena se parece a un vector de caracteres.
• Cada carácter ocupa una posición cuyo índice inicia en 0.
• Se puede obtener un carácter específico, indicando el nombre de la
cadena y su posición. Ejemplo:
◦ cadena[0] devuelve el carácter 'S'.
◦ cadena[1] devuelve el carácter ‘a'.
◦ Etc.
5
string cadena = "Santa Cruz"; cadena.length
0123456789 10
6. 5. 1. Clases de utilidad
funciones predefinidas String - I
6
//Contains(subCadena). Devuelve true si el caracter o subcadena existe en la cadena
string correo = "ymelendres@gmail.com";
bool resultado = correo.Contains("@");
MessageBox.Show(resultado.ToString()); // true
//ToUpper(). Devuelve una cadena con el contenido de la variable nombre en MAYUSCULAS
string nombre = "Juan Evo Morales";
string resultado = nombre.ToUpper();
MessageBox.Show(resultado);
7. //ToLower(). Devuelve una cadena con el contenido de la variable nombre en minúsculas
string nombre = "Juan Evo MORALES";
string resultado = nombre.ToLower();
MessageBox.Show(resultado); //“juan evo morales"
//Insert(posicionInicial, subCadena)
//A partir de la posición indicada. Inserta una subcadena a la cadena actual.
string pregunta = "Cuales los 3 colores basicos";
pregunta = pregunta.Insert(7, "son "); //inserta "son" en la posición 7
MessageBox.Show(pregunta ); //Cuales son los 3 colores básicos
5.1. Clases de utilidad
Funciones predefinidas String - II
7
8. //Remove(inicio, cantidad).
Elimina cierta cantidad de caracteres a partir de un posición inicial
string pregunta = "Santa Cruz de la Sierra";
string resultado = pregunta.Remove(10, 6); //A partir del carácter 10 elimina 6 caracteres
MessageBox.Show(resultado); //Santa Cruz Sierra
//IndexOf("subCadena") Devuelve la primera posición donde aparece una cadena dada
string correo = "ymelendres@gmail.com";
int resultado = correo.IndexOf("."); //Devuelve el índice de la 1ra aparición del carácter
MessageBox.Show(resultado.ToString()); //16
5.1. Clases de utilidad
Funciones predefinidas String - III
8
9. //Replace(viejoCaracter, nuevoCaracter). Reemplaza un caracter por otro en la cadena
string correo = "Escuela Militar de Ingenieria";
string resultado = correo.Replace('a','@');
MessageBox.Show(resultado); //"Escuel@ Milit@r de Ingenieri@"
// Replace(viejoCadena, nuevoCadena). Reemplaza una subcadena por otra en la cadena
string correo = "La Escuela Militar de Ingenieria en Santa Cruz";
correo = correo.Replace("Escuela Militar de Ingenieria", "EMI");
MessageBox.Show(correo);//"La EMI en Santa Cruz"
5.1. Clases de utilidad
Funciones predefinidas String - IV
9
10. //equals(cadena). Devuelve true si dos cadena son iguales
string password = "ana";
bool resultado = password.equals("benito");
MessageBox.Show(resultado.ToString());
//Trim(). Elimina los espacios del inicio y final de la cadena
string nombre = " ana maria ";
string resultado = nombre.Trim();
MessageBox.Show(nombre); //" ana maria "
MessageBox.Show(resultado); //"ana maria"
5.1. Clases de utilidad
Funciones predefinidas String - V
10
11. 5.1. Clases de utilidad
Funciones predefinidas String - VI
11
string pregunta = "Cuales los 3 colores básicos";
int posicion = pregunta.IndexOf("básicos");
this.listBox1.Items.Add(pregunta.Substring(posicion,5)); //básico
IndexOf: Devuelve una subcadena a partir de una posición especificada
12. 5.1. Clases de utilidad
5.1.2. clase Math
12
Ofrece varias funciones matemáticas predefinidas, listas para usar si se le dan
los parámetros que requieren.
13. 5.1. Clases de utilidad
5.1.2. clase Math - I
13
// Math.Abs(valor). Devuelve el valor absoluto de un nro.
double valor = -3.45;
double resultado= Math.Abs(valor);
listBox1.Items.Add("Valor absoluto de "+ valor + "=" + resultado);
//Math.Pow(basse, exponente), resuelve una potencia, dada la base y el exponente
int basse = 2;
int exponente = 3;
double potencia = Math.Pow(basse, exponente);
listBox1.Items.Add(basse + " elevado a " + exponente + "=" + potencia);
14. 5.1. Clases de utilidad
5.1.2. clase Math- II
14
//Math.Sqrt(numero). Devuelve la raiz cuadra de un numero
double numero = 25;
double raizCuadrada = Math.Sqrt(numero);
listBox1.Items.Add("Raiz cuadrada de " + numero + "=" + raizCuadrada);
//Math.Truncate(nroDecimal). Devuelve la parte entera de un nro. decimal
especificado
double nroDecimal = 125.81;
double parteEntera = Math.Truncate(nroDecimal);
listBox1.Items.Add("Truncar" + nroDecimal + "=" + parteEntera);
15. 5.1. Clases de utilidad
5.1.2. clase Math - III
15
//Math.Round(nroFraccionario, nroDecimales).
//Corta a cierta cantidad de decimales un nro. fraccionario,
//redondeando si es necesario.
double nroDecimal = 34.0578789;
nroDecimal= Math.Round(nroDecimal, 2);
listBox1.Items.Add(nroDecimal);
16. 5.2. Arreglo
Es una estructura de datos que almacena una
colección finita de elementos homogéneos.
Los datos pueden ser de tipo primitivo u
objetos de la misma clase.
Se almacena en memoria de forma contigua y
ordenada.
16
17. ..5.2. Arreglo
Tipos de Arreglos:
◦ De una dimensión (Vector)
◦ De dos dimensiones (tabla)
◦ De tres o más dimensiones (matriz)
17
Unidimensional Bidimensional
Multidimensional
18. 5.2 Definición de objetos
Representa alguna entidad de la vida real, es
decir, alguno de los objetos que pertenecen al
negocio con que estamos trabajando o al
problema con el que nos estamos enfrentando,
y con los que podemos interactuar.
Características:
Identidad
Comportamiento
Estado
Coco: Perro
Nombre=“COCO”
Raza=“LABRADOR RETRIEVER”
Altura=“55 cm”
Comer()
Dormir()
Ladrar()
Clase Objeto
18
19. 5.3 Declaración de arreglos de objetos
Vector de Objetos
Sintaxis para la declaracion (1ra forma):
Perro[] vector; //Perro es una clase
vector = new Perro[50]; // y vector es el nombre del arreglo.
Sintaxis para la declaracion (2da forma):
Producto[] venta= new Producto[100];
Pieza[,] tablero;
tablero = new Pieza[8,8];
Simbolo[,] tabla = new Simbolo[3,3];
Tabla de Objetos
19
20. 5.4 Operaciones con arreglos de objetos
Creación del objeto en memoria
vec[0] = new Item("mouse", "Periférico de entrada, que permite …",
"C:/imagen/mouse.png");
vec[1] = new Item("teclado",“Permite ingresar caracteres …",
"C:/imagen/teclado.png");
Item objetoItem = new Item("teclado",“Permite ingresar caracteres
alfanumericos al PC", "C:/imagen/teclado.png");
vec[2] = objetoItem;
20
21. …5.4 Operaciones con arreglos de objetos
vec[0].setSignificado(“Unidad de entrada por defecto, sirve …");
vec[0].setFoto("C:/imagen/raton.png");
Mensajes al objeto
ListBox1.Items.Add(vec[0].getPalabra() + ":" + vec[0].getSignificado());
21
22. 5.5 Aplicaciones con arreglos de objetos
Caso de estudio 1:
◦ Implementar una aplicación
llamada Diccionario
Informático que, permita
almacenar palabras del área
de informática, junto a su
significado y foto.
◦ Que la aplicación permita
agregar nuevas palabras,
modificar las existentes y
buscar cualquier palabra
almacenada.
22
Item
- palabra: string
- significado: string
- foto: string
+ Item()
+ Item(string, string, string)
+ setPalabra(string) : void
+ setSignificado(string) : void
+ setFoto(string) : void
+ getPalabra() : string
+ getSignificado() : string
+ getFoto() : string
Diccionario
- vec: Item ([])
- n: int
- MAXIMO: int = 100
+ Diccionario()
- inicializar() : void
+ buscar(string) : Item
+ modificar(string, string, string) : void
+ agregar(string, string, string) : void
+ existe(string) : int
1
*
23. 23
class item
{
string palabra;
string significado;
string foto;
public item()
{ this.palabra = "";
this.significado = "";
this.foto = "";
}
public item(string palabra, string significado,
string rutaFoto)
{ this.palabra = palabra;
this.significado = significado;
this.foto = rutaFoto;
}
public void setPalabra(string nuevaPalabra)
{ this.palabra = nuevaPalabra;
}
public void setSignificado(string nuevoSignificado)
{ this.significado = nuevoSignificado;
}
public void setFoto(string nuevaFoto)
{
this.foto = nuevaFoto;
}
public string getPalabra()
{
return this.palabra;
}
public string getSignificado()
{
return this.significado;
}
public string getFoto()
{
return this.foto;
}
24. 24
class diccionario
{
item[] vec; //vector de objetos
int n; //dimension logica
const int MAXIMO = 50; //Dimension fisica
public diccionario()
{
vec = new item[MAXIMO];
n = 0;
}
public void inicializar()
{
string ruta = Directory.GetCurrentDirectory()+ "imagen";
vec[0] = new item("mouse", "Periférico de entrada, que pemite introducir pulsaciones u ordenes al computador", ruta + "mouse.jpg");
vec[1] = new item("teclado", "Periferico de entrada, permite ingresar caracteres alfanumericos al PC", ruta + "teclado.jpg");
vec[2] = new item("computador", "Maquina electronica, capaz de ejecutar gran cantidad de instrucciones", ruta + "computador.jpg");
vec[3] = new item("monitor", "Periferico de salida, permite visualizar de forma gráfica, los resultados de la CPU", ruta + "monitor.jpg");
vec[4] = new item("impresora", "Unidad de salida, imprime en papel la información.", ruta + "impresora.jpg");
vec[5] = new item("disco duro", "Unidad de almacenamiento masivo de forma permanente", ruta + "discoDuro.jpg");
vec[6] = new item("dvd", "Unidad de almacenamiento para video. Capadidad desde 4 GB", ruta + "dvd.jpg");
n = 7;
}
public int cantidadDePalabras() //devuelve la cantidad de palabras registradas
{ return n;
}
25. 25
public item buscar(string criterio)
{ criterio = criterio.ToLower(); //convirtiendo a minuscula
for(int i=0; i< n;i++)
{
if (vec[i].getPalabra().Equals(criterio))
return vec[i];
}
return null; //en caso de que la palabra no exista.
}
public item elemento(int pos)
{ if (pos >= 1 && pos <= n)
return vec[pos - 1];
else
{ MessageBox.Show("Error posicion fuera de rango");
return null;
}
}
public void agregarPalabra(item nuevoItem)
{ if(n==MAXIMO)
MessageBox.Show("Error, Diccionario lleno!");
else
{ vec[n]= nuevoItem;
n++;
}
}
28. 28
public partial class Form1 : Form
{
diccionario dic; //declaracion del objeto diccionario
public Form1()
{
InitializeComponent();
dic = new diccionario(); //creacion del objeto en memoria
dic.inicializar(); //mensaje al objeto
}
private void btnBuscar_Click(object sender, EventArgs e)
{
try {
item objetoItem = dic.buscar(txtPalabra.Text);
if (objetoItem != null)
{
txtSignificado.Text = txtPalabra.Text.ToUpper() + ": " + objetoItem.getSignificado();
pbxFoto.Image = Image.FromFile(objetoItem.getFoto());
}
else
{
txtSignificado.Text = "La palabra no esta registrada!";
pbxFoto.Image = null;
}
txtPalabra.Clear();
}
catch
{ MessageBox.Show("Error al recuperar los datos");
}
}
Llamada al
método
buscar
palabra en
el
diccionario
29. 29
private void btnSeleccionarFoto_Click(object sender, EventArgs e)
{
txtRutaNueva.Text = seleccionarArchivo();
}
private string seleccionarArchivo()
{
OpenFileDialog ofd = new OpenFileDialog();
ofd.Filter = "Archivos jpg (*.jpg)|*.jpg";
ofd.Title = "Seleccionar";
string ruta = "";
if (ofd.ShowDialog() == DialogResult.OK)
{
ruta= ofd.FileName;
}
ofd.Dispose(); //Libera el espacio en memoria ocupado
return ruta;
}
private void btnAgregar_Click(object sender, EventArgs e)
{
item objItem = new item();
objItem.setPalabra(txtPalabraNueva.Text);
objItem.setSignificado(txtSignificadoNuevo.Text);
objItem.setFoto(txtRutaNueva.Text);
dic.agregarPalabra(objItem);
}
Procedimiento
para seleccionar
la ruta de un
archivo .jpg
Llamada al
método Agregar
palabra al
diccionario
30. 30
private void btnVer_Click(object sender, EventArgs e)
{
lbxListado.Items.Clear();
int cantidad = dic.cantidadDePalabras();
for(int i=1;i<=cantidad;i++)
{
item objItem = dic.elemento(i);
lbxListado.Items.Add(objItem.getPalabra());
}
}
Método para
listar todas las
palabras
registradas en el
diccionario
31. 31
… 5.5 Aplicaciones con arreglos de objetos
Ejemplo 2. Registro de Notas
grupo
- MAXIMO: int = 50
- cantidad: int
- vec: estudiante ([])
+ grupo(int)
+ registrar(int, estudiante) : void
+ mostrarTodo(ListBox) : void
+ promedioNotas() : double
+ mayorNota(ListBox) : void
+ menorNota(ListBox) : void
estudiante
- codigo: string
- nombre: string
- nota: double
+ estudiante(string, string, double)
+ Codigo() : string
+ Nombre() : string
+ Nota() : double
-vec
• Se requiere una programa para almacenar los datos de un grupo de estudiantes.
De cada estudiante interesa su código, nombre y nota.
• Se requiere poder calcular el promedio de notas, la mayor y menor nota del
grupo y mostrar los datos de todos los estudiantes registrados.
32. 32
class estudiante
{
private string codigo;
private string nombre;
private double nota;
public estudiante(string codigo, string nombre,
double nota)
{ this.codigo = codigo;
this.nombre = nombre;
this.nota = nota;
}
public string Codigo
{
get { return codigo; }
set { codigo = value; }
}
public string Nombre
{
get { return nombre; }
set { nombre = value; }
}
public double Nota
{
get { return nota; }
set { nota = value; }
}
}
Solución al Ejemplo 2. Registro de Notas
33. class grupo
{
private const int MAXIMO = 50;
private int cantidad;
private estudiante[] vec;
//crea el vector en base a la cant. De alumnos
public grupo(int cantidadAlumnos)
{
if (cantidadAlumnos >= 1 && cantidadAlumnos <= MAXIMO)
{
vec = new estudiante[cantidadAlumnos];
this.cantidad = cantidadAlumnos;
}
else
MessageBox.Show("Error: la cantidad de alumnos debe ser maximo " + MAXIMO);
}
//almacena un objeto de tipo estudiante en la posición especificada.
public void registrar(int posicion, estudiante objEstudiante)
{
if (posicion >= 1 && posicion <= cantidad)
vec[posicion - 1] = objEstudiante;
else
MessageBox.Show("Error: posicion fuera de rango!");
} 33
Implementación de la clase Grupo
34. //Muestra los datos almacenados en el vector
public void mostrarTodo(ListBox lista) {
lista.Items.Clear();
for(int i=0; i<cantidad; i++)
{
lista.Items.Add(vec[i].Codigo + " Nota:" + vec[i].Nota + " "+ vec[i].Nombre);
}
}
//Muestra los estudiantes que tienen la mayor nota
public void mayorNota(ListBox lista) {
double mayorActual = -1;
for (int i = 0; i < cantidad; i++)
{
if (mayorActual < vec[i].Nota)
mayorActual = vec[i].Nota;
}
for (int i = 0; i < cantidad; i++)
{
if (mayorActual == vec[i].Nota)
lista.Items.Add(vec[i].Codigo + " Nota:" + vec[i].Nota + " " + vec[i].Nombre);
}
} 34
35. 5.6. Colección List
Representa una lista de objetos fuertemente tipados a la
que se puede obtener acceso por índice. Proporciona
métodos para buscar, ordenar y manipular listas.
Espacio de nombres: System.Collections.Generic
Declaración y Creación
List<tipoDato> lista = new List<tipoDato>();
35
36. … 5.6. Propiedades de List
36
Nombre Descripción
Capacity Obtiene o establece el número total de elementos que puede
contener la estructura de datos interna sin cambiar el tamaño.
Count Obtiene el número de elementos incluidos en List<T>.
Item[Int32] Obtiene o establece el elemento en el índice especificado.
37. … 5.6. Métodos de List
Nombre Descripción
Add(T) Agrega un objeto al final de List<T>.
Clear() Quita todos los elementos de List<T>.
IndexOf(T) Busca el objeto especificado y devuelve el índice de base cero de la
primera aparición en todo el objeto List<T>.
Insert(Int32, T) Inserta un elemento en List<T>, en el índice especificado.
Remove(T) Quita la primera aparición de un objeto específico de la
interfaz List<T>.
Sort() Ordena los elementos de toda la List<T> utilizando el comparador
predeterminado.
37
38. Ejemplo: Lista de String
38
List<string> lista = new List<string>();
private void btnMostrar_Click(object sender, EventArgs e)
{
lista.Add("Ruben");
lista.Add("Jose");
lista.Add("Dan");
lista.Add("Isacar");
lista.Add("Dina");
mostrar();
//Obtener el nro. de indice de un elemento
lbVitrina.Items.Add(“Indice del elemento Dan:" + lista.IndexOf("Dan")); //2
//Insertando un nuevo elemento, en una posicion especificada
lista.Insert(1, "Gad");
mostrar();
39. … Ejemplo: Lista de String
39
//eliminando un elemento de la lista
lista.Remove("Isacar");
mostrar();
//ordena los elementos
lista.Sort();
mostrar();
//Verificando si existe un elemento.
bool bandera= lista.Contains("Dina");
lbVitrina.Items.Add("Existe Dina en la lista?" + bandera);
//eliminando todos los elementos de la lista
lista.Clear();
lbVitrina.Items.Add("Cantidad de elementos:" + lista.Count);
}
40. … Ejemplo: Lista de String
40
//mostrando todos los elementos, en base a su posición
private void mostrar()
{
lbVitrina.Items.Add("--- ELEMENTOS DE LA LISTA ----");
for (int i = 0; i < lista.Count; i++)
lbVitrina.Items.Add(lista[i]);
}
43. …Ejemplo: Lista de Objetos
43
class Policia
{
public int CI { get; set; }
public string Nombre { get; set; } //autopropiedad
public string TipoSangre { get; set; }
public Policia()
{
CI = 0;
Nombre = "";
TipoSangre = "";
}
}
44. 44
public partial class Form1 : Form
{
List<Policia> lista = new List<Policia>();
public Form1()
{
InitializeComponent();
}
private void btnGuardar_Click(object sender, EventArgs e)
{
Policia objPolicia = new Policia();
objPolicia.CI = int.Parse(txtCI.Text);
objPolicia.Nombre = txtNombre.Text;
objPolicia.TipoSangre = txtTipoSangre.Text;
lista.Add(objPolicia);
Mostrar();
LimpiarControles();
}
…Ejemplo: Lista de Objetos