Documentos de Académico
Documentos de Profesional
Documentos de Cultura
PROGRAMACIÓN
Clase 3
Clases de objetos
• Espacios de nombres
• Clases
• Propiedades
• Métodos
• Constructores
• Instanciación
Colecciones
• Si bien el manejo de arreglos en C# permite resolver un
sinfín de problemas, muchas veces resulta interesante
manejar un array que creciera dinámicamente, o también,
disponer de un array a cuyos valores pudiéramos acceder
a través de claves, y no por el número de índice.
• Estas funcionalidades y algunas más, se encuentran
disponibles en un tipo especial de array denominado
colección (collection).
• Una colección es un objeto que internamente gestiona un
array, pero que está preparado para manejarlo de una
manera especial; podríamos definirla como un array
especializado en ciertas tareas.
Colecciones
• .NET tiene decenas de tipos de colecciones donde cada
una aporta algún manejo especial para ciertos problemas.
Crea un ArrayList
ArrayList al1 = new ArrayList(); vacío.
a.Insert(4, "Hola");
ArrayList
• Los elementos de los ArrayList pueden ser recorridos con
las estructuras de control for y foreach
foreach(int o in a)
Console.WriteLine(o);
ArrayList
• Los elementos de los ArrayList pueden ser recorridos con
las estructuras de control for y foreach
Count da la cantidad
ArrayList a = new ArrayList(new int[] de
{1,2,3,4,5,6});
elementos que
tiene un ArrayList
foreach(int o in a)
Console.WriteLine(o);
ArrayList
• Los elementos de los ArrayList pueden ser recorridos con
las estructuras de control for y foreach
Los elementos se
acceden mediante el
ArrayList a = new ArrayList(new int[]uso de corchetes.
{1,2,3,4,5,6});
El primer elemento es
el de la posición cero.
for(int x=0; x < a.Count; x++)
Console.WriteLine(a[x]);
foreach(int o in a)
Console.WriteLine(o);
ArrayList
• Los elementos de los ArrayList pueden ser recorridos con
las estructuras de control for y foreach
namespace Ejemplo
{
class ClaseEjemplo
{
public static void MetodoEjemplo()
{
En
En el
el item
item C#
C#
seleccionar
seleccionar Class
Class
Agregando un nuevo archivo al proyecto
El archivo es
agregado al árbol
del proyecto
Agregando un nuevo archivo al proyecto
Por defecto el
archivo es creado
dentro del mismo
namespace del
propio proyecto
Creando una función dentro de la clase
namespace Ejercicio1
{ Este código es
/// <summary> agregado
/// Description of MiPrimerClase. automáticamente al
/// </summary> crear una clase.
public class MiPrimerClase Más adelante veremos
{ para que se usa
public MiPrimerClase()
{
}
public static void Saludar()
{
Console.WriteLine("Perfecto funcionó");
}
}
}
MiPrimerClase.cs
Creando una función dentro de la clase
namespace Ejercicio1
{
/// <summary>
/// Description of MiPrimerClase.
/// </summary>
public class MiPrimerClase Agregar esta
{ función
public MiPrimerClase()
{
}
public static void Saludar()
{
Console.WriteLine("Perfecto, funcionó");
}
}
}
MiPrimerClase.cs
Usando la nueva clase
• Modificar el archivo Program.cs
namespace Ejercicio1
{
class Program
{
public static void Main(string[] args)
{
MiPrimerClase.Saludar();
Console.ReadKey(true);
}
}
}
Program.cs
Usando la nueva clase
• Modificar el archivo Program.cs
namespace Ejercicio1
{
class Program
{
public static void Main(string[] args)
{
MiPrimerClase.Saludar();
¿Compila?
Console.ReadKey(true); ¿Ejecuta?
} ¿Por qué?
}
}
Program.cs
Entendiendo el uso de namespace
• A pesar de que el programa principal (Program.cs) y la
clase creada (MiPrimerClase.cs) están en archivos
distintos, ambas están declaradas en un mismo
namespace (Ejercicio1)
• .NET asocia todos los archivos que estén declarados en
un mismo namespace como si fuera un único archivo.
• Es como si creáramos un único archivo con todo nuestro
código.
• El uso del mismo namespace permite crear tantos
archivos como se deseen permitiendo así una mejor
organización del código
Usando otro namespace
namespace MiPropioNamespace
{
/// <summary>
/// Description of MiPrimerClase.
/// </summary>
Cambiar el nombre
public class MiPrimerClase
{ del namespace
public MiPrimerClase()
{
}
public static void Saludar()
{
Console.WriteLine("Perfecto funcionó");
}
}
}
MiPrimerClase.cs
Usando la clase creada
namespace Ejercicio1
{
class Program
{
public static void Main(string[] args)
{
MiPrimerClase.Saludar(); ¿Y ahora?
¿Compila?
Console.ReadKey(true); ¿Ejecuta?
} ¿Por qué?
}
}
Program.cs
Usando la clase creada
namespace Ejercicio1
{ El namespace
El namespace
Ejercicio1 no
class Program Ejercicio1 no tiene
tiene definida
definida una clase
{ una clase
llamada
public static void Main(string[] args) llamada
MiPrimerClase
MiPrimerClase
{
MiPrimerClase.Saludar();
Console.ReadKey(true);
}
}
}
Program.cs
Usando la clase creada
namespace Ejercicio1
{
class Program
{
public static void Main(string[] args)
{
MiPrimerClase.Saludar();
Console.ReadKey(true); ¿Cómo se
} soluciona?
}
}
Program.cs
Usando la clase creada
namespace Ejercicio1
{
class Program
{
public static void Main(string[] args)
{
MiPropioNamespace.MiPrimerClase.Saludar();
Console.ReadKey(true); Alternativa 1.
}
Especificar el
} namespace
} correspondiente
Program.cs
Usando la clase creada
using System;
using MiPropioNamespace;
Alternativa 2.
Program.cs MisClases.cs
using System; namespace MiPropioNamespace
using MiPropioNamespace; {
public class MiPrimerClase
namespace Ejercicio1 {
{ public MiPrimerClase() { … }
class Program
{
public static void Main(string[] args) public static void Saludar() { … }
{
…
} public static void Despedir() { … }
namespace Ejercicio1
{
class Program
{
public static void Main(string[] args)
{
// Punto de entrada de cualquier programa
}
}
}
Clases
• ¿ Qué es exactamente una clase ?
fundamentales.
Programación Orientada a Objetos
Modelo Acelerar
Marca Desacelerar
Color Apagar
Velocidad Arrancar
Clase de objetos
nombre Auto
marca
modelo
Atributos color
(datos) velocidad
capacidad baúl
acelerar()
desacelerar()
arrancar()
apagar()
Comportamiento
(métodos) Todos los métodos
necesarios para ver y
modificar c/ característica
¿Qué es un objeto?
Es instancia de una clase.
Todas las instancias de una misma clase tienen los
mismos estados y el mismo comportamiento.
Cada instancia tiene sus propios valores para cada
estado
Clases en C#
• Sintaxis de definición de clases
class <nombreClase>
{
<miembros>
}
class Auto {
}
Console.ReadKey(true);
}
}
class Auto
{
}
}
Clases en C#
namespace Ejercicio1
{
class Program
{
public static void Main(string[] args)
{
Auto a1; Creación de una
a1 = new Auto(); instancia de la
clase Auto
Console.ReadKey(true); almacenada en la
} variable a1
}
class Auto
{
}
}
Clases en C# - Campos
• Campos: es un dato común a todos las instancias de
una determinada clase.
<tipoCampo> <nombreCampo>;
Clases en C# - Campos
• Ejemplo definición de clase Auto con dos campos
(marca y modelo)
class Auto
{
public string marca; Por ahora cada vez que
declaremos un campo
public int modelo; le agregaremos el
} modificador public.
Ya veremos que
significa.
Clases en C# - Campos
Para acceder a un campo de un determinado
objeto se usa la sintaxis:
<objeto>.<campo>
A.modelo = 2001;
Clases en C# - Campos
public static void Main(string[] args)
{
Auto a1;
a1 = new Auto();
a1.marca = "Fiat";
a1.modelo = 2000;
Auto a2;
a2 = new Auto();
a2.marca = "Ford";
a2.modelo = 2001;
Console.WriteLine("Marca " + a1.marca + " modelo " + a1.modelo);
Console.WriteLine("Marca " + a2.marca + " modelo " + a2.modelo);
}
Clases en C# - Métodos
• A las funciones que se implementan en una clase de objetos se las
llaman métodos.
class Auto {
public string marca;
public int modelo;
public void imprimir(){
Console.WriteLine("Marca " + marca + " modelo " + modelo);
}
}
Console.WriteLine(a1.acelerar());
Console.WriteLine(a1.acelerar(25));
Console.WriteLine(a1.acelerar(1.1));
}
Clases en C# - Constructores
public static void Main(string[] args)
{
Auto a1;
a1 = new Auto(); En este ejemplo
a1.marca = "Fiat"; luego de
a1.modelo = 2000; instanciar la
Auto a2; clase Auto se
a2 = new Auto(); asignan valores a
a2.marca = "Ford"; sus campos
a2.modelo = 2001;
a1.imprimir();
a2.imprimir();
}
Clases en C# - Constructores
• Pero nada impide que se haga lo siguiente:
Auto a = new Auto();
a.imprimir(); // ¿qué imprime?
<modificadores> <nombreClase>(<parámetros>)
{
<código>
}
Clases en C# - Constructores
• Redefinimos la clase Auto definiendo un constructor adecuado para poder
asignar valor a las variables de instancia en el momento de crear el objeto.
class Auto {
public string marca;
public int modelo;
public void imprimir(){
Console.WriteLine("Marca y modelo: {0} {1}", marca, modelo);
}
public Auto(string marca, int modelo) {
this.marca = marca;
this.modelo = modelo;
}
}
Clases en C# - Constructores
• Redefinimos la clase Auto definiendo un constructor adecuado para poder
asignar valor a las variables de instancia en el momento de crear el objeto.
class Auto {
public string marca;
public int modelo;
public void imprimir(){
Console.WriteLine("Marca y modelo: {0} {1}", marca, modelo);
}
public Auto(string marca, int modelo) { En el constructor utilizamos
this.marca = marca; this.marca para
referirnos a la variable de
this.modelo = modelo;
instancia marca, y
} simplemente marca para
} referirnos al parámetro del
método.
Clases en C# - Constructores
• Ahora se reescribe el método Main de la siguiente
forma:
Console.ReadKey(true);
}
Clases en C# - Constructores
Console.ReadKey(true);
}
Clases en C# - Constructores
Constructor por defecto
En caso de no definir un constructor para la clase el compilador
creará uno por defecto:
<nombreClase>()
{
}
Console.WriteLine(a1.marca);
Console.WriteLine(a2.marca);
Console.WriteLine(a2.marca);
Miembros de instancia
• Los miembros de instancia, ya sean variables o métodos
son utilizados cuando se trabaja con instancias
a1 a2 a3
a1 a2 a3
a1.imprimir();
a1 a2 a3
a2.imprimir();
a1 a2 a3
a3.imprimir();
class Auto
{ Declaración de
public string marca;
una variable de
public int modelo;
public static int impresiones = 0; clase
class Auto
{ La variable es usada
public string marca;
public int modelo; como una variable más.
public static int impresiones = 0; En este ejemplo la
usamos para llevar la
public Auto(string marca, int modelo){ contabilidad de la
this.marca = marca; cantidad de veces que se
this.modelo = modelo; imprime un auto
}
public void imprimir(){
Console.WriteLine("Marca y modelo: {0} {1}", marca, modelo);
impresiones++;
}
}
Miembros de clase
class Program
{
public static void Main(string[] args)
{
Auto a1 = new Auto("Ford", 1987);
Auto a2 = new Auto("Peugeot", 1995);
Notar que para hacer
Auto a3 = new Auto("Fiat", 2008); referencia a una
a1.imprimir(); variable de clase se
a2.imprimir(); usa la propia clase
a3.imprimir();
Console.WriteLine(Auto.impresiones);
}
}
Miembros de clase
class Program
{
public static void Main(string[] args)
{
Auto a1 = new Auto("Ford", 1987);
Auto a2 = new Auto("Peugeot", 1995);
Auto a3 = new Auto("Fiat", 2008);
a1.imprimir(); ¿Qué imprime?
a2.imprimir();
a3.imprimir();
Console.WriteLine(Auto.impresiones);
}
}
Miembros de clase
RAM
Auto
impresiones = 3
a1 a2 a3
a.Insert(4, "Hola");
Console.WriteLine(a.Count);
Programación orientada a objetos
• ¿Recuerdan los ArrayList?
ArrayList es una
ArrayList a = new ArrayList(); clase y por eso hay
double d = 4.67; que instanciar
a.Add(d); objetos ArrayList
antes de poder
usarlos
int[] i = new int[] {1,2,3,4,5,6,7};
a.AddRange(i);
a.Insert(4, "Hola");
Console.WriteLine(a.Count);
Programación orientada a objetos
• ¿Recuerdan los ArrayList?
Add,
Add, AddRange,
AddRange,
ArrayList a = new ArrayList(); Insert
Add,
Insert son
AddRange,
son
métodos
Insert
métodos de
de la
son métodos
la
double d = 4.67;
declase
clase ArrayList
la clase
ArrayList
ArrayList
a.Add(d); que
que definen
que definen el
definen el
el
comportamiento
comportamiento
comportamientode
int[] i = new int[] {1,2,3,4,5,6,7}; losde
de los
los objetos
objetos
objetos
ArrayList
ArrayList
ArrayList
a.AddRange(i);
a.Insert(4, "Hola");
Console.WriteLine(a.Count);
Programación orientada a objetos
• ¿Recuerdan los ArrayList?
a.Insert(4, "Hola");
Console.WriteLine(a.Count);
Programación orientada a objetos
• ¿Recuerdan los String? .NET tiene una clase
String que define el
estado y el
string i = "hola mundo"; comportamiento de todas
las variables string
int a = i.IndexOf("mundo");
i = i.Insert(a-1, " mi lindo ");
i = i.Remove(a, 3);
i = i.Replace("mundo", "MunDo ");
string s = i.Substring(10, 8);
s = s.ToLower();
s = s.ToUpper();
s = s.Trim();
Programación orientada a objetos
• ¿Recuerdan los String?
¿Cuál es el
comportamiento de un
string i = "hola mundo"; string?
int a = i.IndexOf("mundo");
i = i.Insert(a-1, " mi lindo ");
i = i.Remove(a, 3);
i = i.Replace("mundo", "MunDo ");
string s = i.Substring(10, 8);
s = s.ToLower();
s = s.ToUpper();
s = s.Trim();
Programación orientada a objetos
• ¿Recuerdan los String?
int i = Int32.Parse("5");
double d = Double.Parse("9.1");
char c = 'Y';
string s = i.ToString() + d.ToString() + c.ToString();
Console.WriteLine(s);
Programación orientada a objetos
• ¿Recuerdan la clase Console?
¿Qué
¿Quéson sonReadLine
ReadLine,y
WriteLine
WriteLiney en
ReadKey
la claseen
la clase
Console?
Console?
Programación orientada a objetos
• ¿Recuerdan la clase Console?