Clases y Objetos
Clases y Objetos
Clases y Objetos
● Para el filósofo…
● Un artefacto de clasificación humana
● Clasificamos según un comportamiento o atributos
comunes
● Acordamos descripciones y nombres de clases útiles
● Creamos vocabulario; nos comunicamos; ¡pensamos!
● Para el programador orientado a objetos…
● Una construcción sintáctica con nombre que describe un
comportamiento y atributos comunes
● Una estructura de datos que incluye datos y funciones
Declarar Clases
El nivel de acceso precede a
la palabra clave class. Las clases se
En este caso, se utiliza public definen mediante
, que significa que cualquiera
puede crear objetos a partir
la palabra clave
de esta clase class
El nombre de la
public class Customer clase sigue a la
palabra clave class
{
//Fields, properties, methods and events go here...
<tipoAtributo> <nombreAtributo>;
int edad;
Miembros de una clase
● Métodos
Es un conjunto de instrucciones a las que se les asocia un
nombre de modo que si se desea ejecutarlas basta
referenciarlas a través de dicho nombre.
// métodos
public void Cumpleaños ( )
{
edad ++;
}
}
video
Compilar y crear .exe de aplicación “hola mundo” en
consola
https://www.youtube.com/watch?v=WFBe0K-B2ZI
Instanciación de una clase
¿Qué es un objeto?
● Un objeto es una instancia de una clase
● Los objetos se caracterizan por:
● Identidad: Los objetos se distinguen unos de otros
● Estado: Los objetos contienen información
● Comportamiento: Los objetos pueden realizar tareas
Creación de objetos
class Fecha
{
public Fecha( ) { ... }
}
Sustitución del constructor por defecto
● El constructor por defecto puede no ser adecuado, en
ese caso no hay que usarlo, sino escribir otro.
class Fecha
{
private int aa, mm, dd;
public Fecha( )
{
aa = 1970;
mm = 1;
dd = 1;
}
}
Sobrecarga de constructores
● Los constructores son métodos y pueden estar
sobrecargados
● Mismo ámbito, mismo nombre, distintos parámetros
● Permite inicializar objetos de distintas maneras
● AVISO
● Si se escribe un constructor para una clase, el
compilador no creará un constructor por defecto
class Fecha
{
public Fecha( ) { ... }
public Fecha(int año, int mes, int dia) { ... }
...
}
Propiedades
Las propiedades son miembros que ofrecen un mecanismo
flexible para leer, escribir o calcular los valores de campos
privados.
class TimePeriod
{
private double _seconds;
class CuentaBancaria
{
private string nombre;
public void AsignarNombre(string nombre)
{ Si esta instrucción fuera
nombre = nombre;
this.nombre = nombre;
¿qué ocurriría?
}
}
Métodos: declaración, mensajes, paso de
parámetros, retorno de valores
Método
● Un método es un conjunto de instrucciones a las que se les
da un determinado nombre de tal manera que sea posible
ejecutarlas en cualquier momento sin tenerlas que reescribir
sino usando sólo su nombre.
● A estas instrucciones se les denomina cuerpo del método, y
a su ejecución a través de su nombre se le denomina
llamada al método.
● El uso de métodos mantiene el código legible porque las
instrucciones se colocan en bloques mas pequeños, en lugar
de en un gran bloque de código. Los métodos también
permiten tomar instrucciones que pueden ser ejecutadas
varias veces y colocarlas en un bloque de código que puede
ser llamado todas las veces que haga falta.
25
Método
26
Estructura de un método
● En <tipoRetorno> se indica cuál es el tipo
de dato del objeto que el método
devuelve, y si no devuelve ninguno se ha
de escribir void en su lugar. ● Aunque es posible escribir métodos que no
tomen parámetros, si un método los toma se
ha de indicar en <parámetros> cuál es el
● Como nombre del método se puede nombre y tipo de cada uno, separándolos con
poner en <nombreMétodo> cualquier comas si son más de uno.
identificador válido.
● El <cuerpo> del método es el bloque de
instrucciones que compone el código del
método. El cuerpo del método esta entre
llaves. Si el método retorna algún tipo de
objeto entonces ha de incluir al menos una
instrucción return que indique cuál objeto
regresa.
sintaxis:
<tipoRetorno> <nombreMétodo> (<parámetros>)
{
<cuerpo>
}
27
Ejemplo 3
Definir un método de nombre Saluda cuyo cuerpo consista
en escribir en la consola el mensaje “Hola Mundo” y que
devuelva un objeto int de valor 1:
Nombre del
Tipo Lista de
método
devuelto parámetros
int Saluda( )
{
Console.WriteLine(“Hola Mundo”);
Cuerpo del
método return 1;
}
28
Llamada a métodos
● Para llamar a un método, se escribe su nombre en el lugar
donde debería ejecutarse el código de ese método. Después
del nombre del método se escriben dos paréntesis, la
instrucción de la llamada al método debe terminar con
punto y coma.
29
Llamada a métodos
● Una vez definido el método, se puede:
30
Llamar a un método desde dentro de la misma clase.
using System;
class ExampleClass
{
static void ExampleMethod( )
{
Console.WriteLine("Hola, mundo");
}
31
Llamadas a métodos desde otras clases
using System;
class A
{
public static void TestMethod( )
{
Console.WriteLine("Esto es TestMethod en clase A");
}
}
class B
{
static void Main( )
{
A.TestMethod ( );
}
}
32
Llamadas anidadas a métodos
using System;
class NextExample
{
static void Method1( )
{ Console.WriteLine("Method1"); }
33
Uso de variables locales
● Variables locales
● Se crean cuando comienza el método
● Son privadas para el método
● Se destruyen a la salida
● Variables compartidas
● Para compartir se utilizan variables de clase
● Conflictos de ámbito
● El compilador no avisa si hay conflictos entre nombres
locales y de clase
34
Uso de la instrucción return
● return inmediato
● return con una instrucción condicional
Console.WriteLine("Hello");
if (numBeans < 10)
return;
Console.WriteLine("World");
}
35
Uso de la instrucción return
Devolución de valores
● El método se debe declarar con un tipo que no sea
void
● Se añade una instrucción return con una expresión
● Fija el valor de retorno
● Se devuelve al llamador
● Los métodos que no son void deben devolver un valor
● Parámetros de valores
● Parámetros de referencias
● Parámetros de salida
● Matrices de parámetros
Declaración y llamadas a parámetros
● Declaración de parámetros
● Se ponen entre paréntesis después del nombre del
método
● Se definen el tipo y el nombre de cada parámetro
● Llamadas a métodos con parámetros
● Un valor para cada parámetro
38
Parámetros de valores
Se utilizan para el paso "hacia dentro" de parámetros,
que consiste en pasar a un método los valores de un
argumento sin que las modificaciones del parámetro
afecten al argumento original.
Un parámetro de valores hace referencia a su propia
variable, que es exclusiva de la variable del argumento
correspondiente.
Para inicializar esta variable se copia el valor del
argumento correspondiente.
39
Paso por valor
● Mecanismo predeterminado para el paso de parámetros:
● Se copia el valor del parámetro
● Se puede cambiar la variable dentro del método
● No afecta al valor fuera del método
● El parámetro debe ser de un tipo igual o compatible
42
Paso por referencia
● ¿Qué son los parámetros referencia?
● Una referencia a una posición de memoria
43
Ejemplo 5
using System;
class Test {
static void Swap(ref int a, ref int b) {
int t = a;
a = b;
b = t;
resultado:
}
pre: x = 1, y = 2
static void Main() { post: x = 2, y = 1
int x = 1;
int y = 2;
Console.WriteLine("pre: x = {0}, y = {1}", x, y);
Swap(ref x, ref y);
Console.WriteLine("post: x = {0}, y = {1}", x, y);
}
}
44
Parámetro de salida
45
Parámetros de salida
● ¿Qué son los parámetros de salida?
● Pasan valores hacia fuera, pero no hacia dentro
● Uso de parámetros de salida
● Como ref, pero no se pasan valores al método
● Se usa la palabra clave out en la declaración y las
llamadas al método
46
Ejemplo 6
using System;
class Test
{
static void Divide(int a, int b, out int result,out int remainder)
{
result = a / b;
remainder = a % b;
}
static void Main()
{
for (int i = 1; i < 10; i++)
for (int j = 1; j < 10; j++)
{
int ans, r;
Divide(i, j, out ans, out r);
Console.WriteLine("{0} / {1} = {2}r{3}", i, j, ans, r);
}
}
}
47
Matriz de parámetros
48
Uso de listas de parámetros de longitud
variable
● Se usa la palabra clave params
● Se declara como tabla al final de la lista de
parámetros
● Siempre paso por valor
using System;
class Test
{ Resultado:
static void F(params int[] args) { # of arguments: 0
Console.WriteLine("# of arguments:{0}", # of arguments: 1
args.Length); args[0] = 1
for (int i = 0; i < args.Length; i++) # of arguments: 2
{ Console.WriteLine("\targs[{0}] = {1}", i, args[0] = 1
args[i]); } args[1] = 2
static void Main() # of arguments: 3
{ F(); args[0] = 1
F(1); args[1] = 2
F(1, 2); args[2] = 3
F(1, 2, 3); # of arguments: 4
F(new int[] {1, 2, 3, 4}); args[0] = 1
} args[1] = 2
args[2] = 3
}
args[3] = 4
50
Normas para el paso de parámetros
● Mecanismos
● El paso por valor es el más habitual
● El valor de retorno del método es útil para un solo valor
● ref y/o out son útiles para más de un valor de retorno
● ref sólo se usa si los datos se pasan en ambos sentidos
● Eficiencia
● El paso por valor suele ser el más eficaz
51
Sobrecarga de métodos
Uso de métodos sobrecargados
53
Declaración de métodos sobrecargados
● Métodos que comparten un nombre en una clase
● Se distinguen examinando la lista de parámetros
class EjemplodeSobrecargado
{
static int Suma(int a, int b)
{
return a + b;
}
static int Suma(int a, int b, int c)
{
return a + b + c;
}
static void Main( )
{
Console.WriteLine(Suma(1,2) + Suma(1,2,3));
}
}
54
Signaturas de métodos
● Las signaturas de métodos deben ser únicas
dentro de una clase
● Definición de signatura
■ Nombre de
■ Nombre del parámetro
método ■ Tipo de retorno de
■ Tipo de parámetro método
■ Modificador
55
Uso de métodos sobrecargados
● Conviene usar métodos sobrecargados si:
● Hay métodos similares que requieren parámetros diferentes
● Se quiere añadir funcionalidad al código existente
56