Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 32

Programación orientada a objetos con

C# (I)

Laboratorio de programación II (LPII)

Marco A. Peña
[email protected]

Índice de contenidos

„Encapsulación
„ Clases y objetos
„ Variables de tipo referencia
„ Clases y constructores
„ Más sobre Métodos
„ Clases y espacios de nombres comunes en C#/.NET

LPII: Laboratorio de Programación II 4

1
Abstracción → Encapsulación

„ La abstracción es ignorancia selectiva


z Decidir qué es importante y qué no lo es
z Concentrarse en lo importante y depender de ello
z Ignorar lo que no es importante y no depender de ello
z Usar encapsulación para forzar una abstracción

„ Encapsulación
z Quien programa un objeto controla los métodos de acceso a su
estado y su comportamiento
z El programador puede (y debe) responsabilizarse de la corrección
del código correspondiente a un objeto → “compromiso
contractual”

LPII: Laboratorio de Programación II 5

Encapsulación: datos + métodos

„ Combinación de datos y métodos en una sola cápsula


„ La frontera de la cápsula crea un espacio interior y otro exterior

Retirar( ) Retirar( )

saldo saldo

Ingresar( ) Ingresar( )

¿CuentaBancaria ? ¿CuentaBancaria ?

LPII: Laboratorio de Programación II 6

2
Encapsulación: control de acceso

„ Los métodos son públicos, accesibles desde el exterior


„ Los datos son privados, accesibles sólo desde el interior

Retirar( ) Retirar( )

saldo 8 saldo

Ingresar( ) Ingresar( )

¿CuentaBancaria ? ¿CuentaBancaria ?

LPII: Laboratorio de Programación II 7

Encapsulación: ocultar la implementación

„ El objeto se usa sólo con los métodos públicos


„ El uso del objeto no varía si cambia el tipo de los datos privados

Retirar( ) Retirar( )

Ingresar( ) Ingresar( )

saldo 12,56 euros 12

céntimos 56

LPII: Laboratorio de Programación II 8

3
Encapsulación: datos estáticos (I)

„ Los datos de objetos describen información para objetos


concretos
z Por ejemplo, cada cuenta bancaria tiene su propio saldo. Si dos
cuentas tienen el mismo saldo, será sólo una coincidencia.

Retirar( ) Retirar( )
Ingresar( ) Ingresar( )
saldo 12,56 saldo 12,56
prop. “Juan" prop. “Pedro"

LPII: Laboratorio de Programación II 9

Encapsulación: datos estáticos (II)

„ Los datos estáticos describen información para todos los


objetos de una clase
z Por ejemplo, supongamos que todas las cuentas comparten el
mismo interés. ¿No sería conveniente almacenar el interés en
todas las cuentas?

Retirar( ) Retirar( )
Ingresar( ) Ingresar( )
saldo 12,56 saldo 12,56
interés 7% 8 interés 7% 8

LPII: Laboratorio de Programación II 10

4
Encapsulación: métodos estáticos

„ Los métodos estáticos acceden sólo a datos estáticos


z Un método estático pertenece y se invoca en la clase, no el objeto

La clase cuenta Un objeto cuenta

Retirar( )
Interés( )
8 Ingresar( )
9 saldo 99,12
interés 7% 8 prop. “Pedro"

Las clases contienen datos Los objetos contienen datos


y métodos estáticos y métodos de objetos

LPII: Laboratorio de Programación II 11

Índice de contenidos

„ Encapsulación

„Clases y objetos
„ Variables de tipo referencia
„ Clases y constructores
„ Más sobre Métodos
„ Clases y espacios de nombres comunes en C#/.NET

LPII: Laboratorio de Programación II 13

5
Programación Orientada a Objetos

„ La Orientación a Objetos (OO) se “inventó” para programar


simuladores de sistemas físicos complejos
z Simulación viaria: peatón, coche, calle, semáforo, ...

„ Luego se vio que iba muy bien para implementar interfaces


gráficas
z Ventana, botón, icono, ...

„ Finalmente la Programación Orientada a Objetos (POO) es útil


en cualquier sistema “modelable” en componentes más o menos
independientes (i.e. casi cualquier sistema)

LPII: Laboratorio de Programación II 14

Partición en objetos

„ Partición del programa en piezas controlables


z Mantener la complejidad bajo control
z Evitar puzzles
„ Un objeto es un trocito de programa y un programa es un
conjunto de objetos
„ Partición en unidades comprensibles por separado: objetos
z Principio de encapsulación
z Un objeto es autosuficiente (hasta cierto punto)
z El programador puede responsabilizarse de su correcto
funcionamiento
z Simplifica el mantenimiento y aumenta la reusabilidad

LPII: Laboratorio de Programación II 15

6
Objetos

„ Un objeto es básicamente:
z Los datos (variables) que representan una “entidad”
z Las operaciones (funciones) que actúan sobre estos datos,
consultando o modificando el estado del objeto

Tipo de objeto Persona

int dni
Datos String nombre
String direccion
int telefono

Funciones void mostrarPorPantalla()


int obtenerDni()
void modificarDni(int dni)

LPII: Laboratorio de Programación II 16

Clases de objetos

„ Habitualmente un programa emplea muchos objetos de la


misma clase
z Muchos coches, muchos satélites, muchas conexiones www, ...
„ Primero se definen clases
z class Car { ... detalles ... }
„ Y luego se crean los objetos necesarios (instancias) de las
clases definidas
z Car miCoche = new Car (...);
z Car cocheDeElisa = new Car (...);
„ Estructuras vs. clases:
z Una estructura define un valor
9 Sin identidad, estado accesible, sin comportamiento añadido
z Una clase define un objeto
9 Identidad, estado inaccesible, comportamiento añadido
LPII: Laboratorio de Programación II 17

7
Representación gráfica
Una clase Un objeto

Nombre de la clase nombre Nombre del objeto

Atributos Atributos
nombre
nombre
Características de la Estado particular de
nombre
clase: lo que se es o cada objeto
nombre
cómo se está
...

Métodos nombre Métodos


nombre
Lo que puede nombre Todos los objetos de
hacerse con objetos nombre una clase hacen
de esta clase ... exactamente lo
mismo

LPII: Laboratorio de Programación II 18

Ejemplo: clase Circulo


class Circulo {
double radio;
UML: Unified Modeling Languaje Circulo (double _radio) {
radio = _radio;

Circulo }
double dameRadio () {
radio: double return radio;
}
Circulo: double area () {
dameRadio: double return (Math.PI * radio * radio);
area: double
circunferencia: double }
escala: void double circunferencia () {
return (2 * Math.PI * radio);
}
void escala (double proporcion) {
radio = radio * proporcion;
}
}
LPII: Laboratorio de Programación II 19

8
Composición

„ Un objeto puede se parte integrante de otro objeto


„ Ejemplo: Un rectángulo está compuesto por 4 puntos

p1 p2

p4 p3

Rectangulo
Punto

p1: Punto
x: double
p2: Punto
y: double
p3: Punto
Punto: p4: Punto
distancia: double
Rectangulo:
Rectangulo:
area: double

LPII: Laboratorio de Programación II 20

Composición
class Punto { class Rectangulo {
double x, y; Punto p1, p2, p3, p4;
Punto (double _x, double _y) Rectangulo (Punto _p1, Punto _p2,
{ Punto _p3, Punto _p4)
x = _x; {
y = _y; p1 = _p1; p2 = _p2;
} p3 = _p3; p4 = _p4;
void desplaza (double dX, double dY) }
{ Rectangulo (double b, double a)
x = x + dX; {
y = y + dY; p1 = new Punto(0.0, a);
} p2 = new Punto(b, a);
double distancia (Punto Q) { ... } p3 = new Punto(0.0, 0.0);
} p4 = new Punto(b, 0.0);
}
double area () { ... }
LPII: Laboratorio de Programación II } 21

9
Índice de contenidos

„ Encapsulación
„ Clases y objetos

„Variables de tipo referencia


„ Clases y constructores
„ Más sobre Métodos
„ Clases y espacios de nombres comunes en C#/.NET

LPII: Laboratorio de Programación II 23

Tipos valor y tipos referencia

„ Tipos valor
z La variable contiene el valor directamente: char, int, ...

int
int mol;
mol;
mol 42
42
mol == 42;
42;

„ Tipos referencia
z La variable contiene una referencia al dato
z El dato se almacena en un área de memoria aparte

string
string mol;
mol;
mol
mol == “Hola";
“Hola"; •• Hola
Hola

LPII: Laboratorio de Programación II 24

10
Declaración y liberación de referencias

„ Declaración de variables referencia

coordenada
coordenada c1;c1;
c1
c1 == new
new coordenada();
c1.x
coordenada();
c1.x == 6.12;
6.12;
•• 6.12
6.12 4.2
4.2
c1.y
c1.y == 4.2;
4.2;

„ Liberación de variables referencia

c1
c1 == null;
null; •• 6.12
6.12 4.2
4.2

LPII: Laboratorio de Programación II 25

Referencias no válidas

„ Una referencia no válida es una referencia a null


„ Si hay referencias no válidas
z No es posible acceder a miembros o variables
„ Referencias no válidas en tiempo de compilación
z El compilador detecta el uso de referencias no inicializadas
„ Referencias no válidas en tiempo de ejecución
z El sistema generará un error de excepción

LPII: Laboratorio de Programación II 26

11
Referencias como parámetros

„ Las referencias se pueden usar como parámetros


z Si se pasan por valor, es posible cambiar el dato referenciado

22 33 33 44
•• cc
static
static void
void PassCoordinateByValue(coordenada
PassCoordinateByValue(coordenada c)
c)
{{
c.x++;
c.x++; c.y++;
c.y++;
}}

loc.x
loc.x == 2;
2; loc.y
loc.y == 3;
3;
PassCoordinateByValue(loc); •• locloc
PassCoordinateByValue(loc);
Console.WriteLine(loc.x
Console.WriteLine(loc.x ++ "" ,, "" ++ loc.y);
loc.y);

LPII: Laboratorio de Programación II 27

Referencias y objetos

„ Cuando se crea un objeto de una clase, el programador se


queda con una referencia para poder llegar a ese objeto

Circulo c1= new Circulo(1.0); Circulo c2= new Circulo(3.5);

c1 Circulo c2 Circulo

1.0 3.5

Circulo Circulo
dameRadio dameRadio
area area
circunferencia circunferencia
escala escala

LPII: Laboratorio de Programación II 28

12
Acceso a atributos y métodos

„ A los componentes de un objeto se accede:


referenciaDelObjeto.nombreDelComponente

„ Ejemplos:
z c1.dameRadio(); // 1.0
z c2.dameRadio(); // 3.5
z c1.area(); // 3.1416
z c2.area(); // 38.4846
z c1.escala(2.0);
z c1.area(); // 12.5664

LPII: Laboratorio de Programación II 29

Referencias compartidas: alias

„ Un objeto puede tener varias referencias: alias

Circulo c1 = new Circulo(1.0);


c1 Circulo Circulo c2 = c1;

1.0
c1.area(); // 3.1416
Circulo c2.area(); // 3.1416
dameRadio
area
circunferencia c1.escala(2.0);
c2 escala c2.area(); // 12.5664

LPII: Laboratorio de Programación II 30

13
Comparación

„ Se comparan referencias
z Cierto si ambas referencian el mismo objeto
„ No se comparan los objetos
z False incluso si son dos objetos iguales en todo

Circulo c1 = new Circulo(1.0); Circulo c1 = new Circulo(1.0);


Circulo c2 = c1; Circulo c2 = new Circulo(1.0);

if (c1 == c2) // True if (c1 == c2) // False


... ...
c1.escala(2.0);
if (c1 == c2) // True
...

LPII: Laboratorio de Programación II 31

null

„ Cuando una referencia no se refiere a ningún objeto (como


antes de crearlo) se dice que referencia a null

Circulo c1;

c1.area(); // Error!

c1 = new Circulo(1.0);
c1.area(); // 3.1416

c1 = null;
c1.area(); // Error!

LPII: Laboratorio de Programación II 32

14
Des-referenciación

„ Cuando un objeto se queda sin referencias


z No es accesible por el programa
z El sistema se reserva el derecho de reciclarlo

Circulo c1 = new Circulo(1.0); Circulo c1 = new Circulo(1.0);


Circulo c2 = c1;
c1 = null; // Reciclable
c1 = null; // Queda c2
c2 = null; // Reciclable

LPII: Laboratorio de Programación II 33

Índice de contenidos

„ Encapsulación
„ Clases y objetos
„ Variables de tipo referencia

„Clases y constructores
„ Más sobre Métodos
„ Clases y espacios de nombres comunes en C#/.NET

LPII: Laboratorio de Programación II 35

15
¿Qué es una clase?

„ Tipo compuesto definido por el usuario


z Contiene datos
z Contiene funciones para usar esos datos

„ Consiste en un bloque de código con un nombre, dentro del cual


z Se declaran variables de tipos primitivos o compuestos (campos)
z Se definen métodos

„ Una clase define un ámbito


z Región del código en el que se pueden declarar y usar nombres
„ Un objeto (instancia, ejemplar) es una variable del tipo definido
por una clase

LPII: Laboratorio de Programación II 36

Una clase en C#
using System;

public class Persona


{
protected int dni;
protected String nombre;
protected String direccion;
protected int telefono;

public int obtenerDni() {


return dni;
}

public void modificarDni (int dni) {


this.dni = dni;
}

public void mostrarPorPantalla() {


Console.WriteLine("DNI: "+dni);
Console.WriteLine("Nombre: "+nombre);
Console.WriteLine("Direccion: "+direccion);
Console.WriteLine("Telefono: "+telefono);
}
}
LPII: Laboratorio de Programación II 37

16
Instanciación y constructores

„ Una clase es una “plantilla” para construir objetos


„ Creamos (instanciamos) nuevos objetos con el operador new
„ new reserva espacio en memoria para el nuevo objeto e
inicializa sus atributos mediante un constructor

Persona yo = new Persona();

„ Un constructor es un método que se invoca automáticamente


al crear un objeto de ese tipo
„ En el constructor se inicializan los atributos del objeto

LPII: Laboratorio de Programación II 38

Constructores

„ Un constructor se define como un método con el mismo nombre


que la clase
„ Un constructor NO puede devolver ningún valor
„ Puede haber diferentes constructores con diferentes parámetros:

// Crea una nueva persona sin inicializar nada


Persona p1 = new Persona();

// Crea una nueva persona inicializando su DNI


Persona p2 = new Persona(23643455);

// Crea una nueva persona inicializando su DNI y su nombre


Persona p3 = new Persona(45345665, “Paco Soria”);

LPII: Laboratorio de Programación II 39

17
Constructor por defecto

„ Acceso público
„ Mismo nombre que la clase
„ No tiene tipo de retorno (ni siquiera void)
„ No recibe ningún argumento
„ Inicializa todos los campos a cero, false o null
„ Sintaxis del constructor por defecto
class Persona {
...
public Persona( ) {
...
}
...
}
LPII: Laboratorio de Programación II 40

Otros constructores

„ El constructor por defecto puede no ser adecuado


z En ese caso no hay que usarlo, sino escribir otro

public class Persona


{
...
public Persona(int _dni) {
dni = _dni;
}
...
}

LPII: Laboratorio de Programación II 41

18
Sobrecarga de constructores

„ C# sólo añadirá un constructor por defecto si no existe otro


„ Por eso, en el ejemplo, añadimos el constructor Persona()
aunque el código sea vacío
public class Persona
{
public Persona() {
}
public Persona(int _dni) {
dni = _dni;
}
public Persona(int _dni, String _nombre) {
dni = _dni;
nombre = _nombre;
}
...
}
LPII: Laboratorio de Programación II 42

Referencias en el uso de objetos

„ No pueden compararse objetos directamente, se comparan


referencias
z bool equal (Persona p)
„ No pueden copiarse objetos directamente
z object clone()
„ Un objeto (su referencia) puede pasarse como parámetro o
devolverse mediante return desde un método
„ Un objeto puede imprimirse directamente con
Console.Write o Console.WriteLine si posee un método
public string ToString()

LPII: Laboratorio de Programación II 43

19
Referencias y this

„ La palabra reservada this es una referencia al objeto usado


para la llamada al método
z Es útil en caso de conflicto entre identificadores de distintos ámbitos
z this existe para todo objeto

class
class CuentaBancaria
CuentaBancaria
{{
...
...
public
public void
void PoneNombre(string
PoneNombre(string nombre)
nombre)
{{ Si esta instrucción fuera
nombre = nombre;
this.nombre
this.nombre == nombre;
nombre; ¿qué ocurriría?
}}
private
private string
string nombre;
nombre;
}}

LPII: Laboratorio de Programación II 44

Ciclo de vida de un objeto

„ Crear una referencia para el objeto

„ Crear el objeto mediante new y llamar al método constructor

„ Usar el objeto mediante su referencia y el operador de acceso

„ Liberar el objeto asignando null a su referencia

LPII: Laboratorio de Programación II 45

20
Recolección de basura

„ No es posible destruir objetos de forma explícita


z C# no incluye un inverso de new (como delete o free)
z Ello se debe a que una función de eliminación explícita es una
importante fuente de errores en otros lenguajes

„ Los objetos se destruyen por recolección de basura (garbage


collection)
z Busca objetos inalcanzables y los destruye
z Los convierte de nuevo en memoria binaria no utilizada
z Normalmente lo hace cuando empieza a faltar memoria

LPII: Laboratorio de Programación II 46

Control de acceso

„ Una clase contiene


z Los datos que recogen lo que es y/o cómo está
z Los métodos que permiten acceder a ese estado
„ Si las variables que mantienen el estado son privadas, sólo los
métodos pueden modificarlas y por tanto el autor de los
métodos puede y debe responsabilizarse de su corrección
„ Control de acceso
z No todo el mundo puede usar elementos
z Parte privada: accesible sólo dentro de clase/objeto
z Parte pública: accesible desde cualquier sitio
„ Podemos diferenciar en dos partes:
z Interfaz: parte pública de la clase
z Implementación: parte privada de la clase
LPII: Laboratorio de Programación II 47

21
Control de acceso

„ El control de acceso de un atributo o método se especifica


mediante un modificador
„ public (aplicable a clases, atributos y métodos)
z Cualquier objeto puede invocar el método o ver/modificar
directamente el atributo
„ private (aplicable a atributos y métodos)
z Sólo el propio objeto puede invocar el método o ver/modificar el
atributo (son internos)
z Recomendado para atributos
„ protected (aplicable a atributos y métodos)
z Sólo el objeto y sus “hijos” pueden invocar el método o
ver/modificar el atributo. Es el modificador por defecto

LPII: Laboratorio de Programación II 48

Control de acceso

„ Datos y métodos juntos dentro de una clase


„ Los métodos son públicos, los datos son privados

class
class CuentaBancaria
CuentaBancaria
{{ Métodos
Métodos públicos
públicos
describen
describen un
un
public
public void
void Retirar(decimal
Retirar(decimal cantidad)
cantidad) comportamiento
comportamiento
{{ ... }
... } accesible
accesible
public
public void
void Ingresar(decimal
Ingresar(decimal cantidad)
cantidad)
{{ ... }
... } Campos
Campos privados
privados
private
private decimal
decimal saldo;
saldo; describen
describen unun
private
private string nombre;
string nombre; estado
estado
}} inaccesible
inaccesible

LPII: Laboratorio de Programación II 49

22
Elementos de clase

„ Cualquier elemento definido en una clase con la palabra static


z Métodos
z Variables
z Constantes
„ ¿Cuándo definir elementos de clase?
z Constantes
z Variables únicas y comunes para todos los objetos de esa clase
z Métodos que necesitemos usar aunque no haya objetos
z Métodos que sólo usan elementos de clase
z Método Main

LPII: Laboratorio de Programación II 51

Atributos y métodos de clase

„ Normalmente los atributos declarados en una clase existen en


cada objeto y no se mezclan
z Los atributos static
9 Sólo existe uno para todos los objetos
9 Todos los objetos lo comparten
9 Si un objeto lo modifica, todos lo ven modificado

„ Los métodos de una clase son compartidos por todos los objetos
de esa clase
z Los métodos static
9 Se pueden llamar referidos a la clase
9 No hace falta crear un objeto para poder llamarlos
9 No puede trabajar sino sobre atributos static pues los atributos
normales no están creados

LPII: Laboratorio de Programación II 52

23
Atributos y métodos de clase

class
class CuentaBancaria
CuentaBancaria
{{
static
static float
float interes;
interes;
private
private decimal
decimal saldo;
saldo;

static
static void
void FijarInteres(float
FijarInteres(float pct)
pct) Métodos
Métodos estáticos
estáticos
{{ sólo
sólo acceden
acceden aa
datos
datos estáticos
estáticos
interes
interes == pct;
pct;
}}
public
public void
void Retirar(decimal
Retirar(decimal cantidad)
cantidad)
{{ ...
... }}
public
public void
void Ingresar(decimal
Ingresar(decimal cantidad)
cantidad)
{{ ...
... }}
}}

LPII: Laboratorio de Programación II 53

Índice de contenidos

„ Encapsulación
„ Clases y objetos
„ Variables de tipo referencia
„ Clases y constructores

„Más sobre Métodos


„ Clases y espacios de nombres comunes en C#/.NET

LPII: Laboratorio de Programación II 55

24
Paso de objetos como parámetro

„ Se usa el paso por referencia


z Es implícitos, i.e. no se usa ref
„ Se “comparte” el objeto dentro y fuera del método invocado
z Si se modifica el objeto dentro del método, el objeto queda
modificado al salir del método

class
class Punto
Punto {{
int
int x, y;
x, y;
Punto
Punto (int
(int _x,
_x, int
int _y)
_y) {{ x=
x= _x;
_x; y=
y= _y;
_y; }}
void
void escala (int s) { x*= s; y*= s; }}
escala (int s) { x*= s; y*= s;
void
void muestra
muestra ()
() {{
System.Console.WriteLine(“x=
System.Console.WriteLine(“x= ““ ++ x); x);
System.Console.WriteLine(“y=
System.Console.WriteLine(“y= ““ ++ y); y);
}}
...
...
LPII: Laboratorio de Programación II 56

Paso de objetos como parámetro

...
...

void
void mm (Punto
(Punto p)
p) {{
p.escala(2);
p.escala(2);
}}
}}

Punto
Punto a=
a= new
new Punto(3,
Punto(3, 4);
4);
a.muestra();
a.muestra(); // 3,
// 3, 44
m(a);
m(a); //
// se
se pasa
pasa la
la referencia
referencia
a.muestra(); // 6,
a.muestra(); // 6, 8 8

LPII: Laboratorio de Programación II 57

25
Ámbitos

„ Ámbito estático: accesibilidad


z Determina dónde puede referirse
9 A un componente de un objeto (atributo o método)
9 A una variable de un método

„ Ámbito dinámico: vida


z Determina cuándo nace y muere un atributo o una variable
z Cuando un contenedor muere, se pierde su valor y habrá que
volver a inicializarlo

LPII: Laboratorio de Programación II 58

Variables automáticas

„ Se pueden declarar variables (automáticas) en el interior de


cualquier bloque
„ Las variables del bloque class pueden usarse aunque
textualmente aparezcan después
„ Las variables del bloque método pueden usarse sólo después
de definirse
z Textualmente debe aparecer primero la definición y luego el uso

LPII: Laboratorio de Programación II 59

26
Ámbito de variables

class
class Punto
Punto {{
public
public float
float distancia
distancia (Punto
(Punto p)
p) {{
double xdiff = x -
double xdiff = x - p.x;p.x;
double
double ydiff
ydiff == yy -- p.y;
p.y;
xdiff
ydiff
x, y

return
return Math.sqrt (xdiff*xdiff
Math.sqrt (xdiff*xdiff ++
p

ydiff*ydiff)
ydiff*ydiff)
}}

double
double x,
x, y;
y;
}}

LPII: Laboratorio de Programación II 60

Ámbito dinámico

„ Al llamar a un método, se crea un ámbito dinámico


z Se generan todas las variables-parámetros
z Se generan las variables automáticas
„ Al salir del método desaparecen dichas variables
„ El ámbito dinámico existe (está activo) mientras estemos
ejecutando el método
z Incluso si se llaman nuevos métodos desde el éste

LPII: Laboratorio de Programación II 61

27
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

static
static long
long AddList(params
AddList(params long[long[ ]] v)
v)
{{
long
long total,
total, i; i;
for
for (i
(i == 0,
0, total
total == 0;
0; ii << v.Length;
v.Length; i++)
i++)
total += v[i];
total += v[i];
return
return total;
total;
}}
static
static void
void Main(
Main( ))
{{
long
long xx == AddList(63,21,84);
AddList(63,21,84);
}}

LPII: Laboratorio de Programación II 62

Declaración de métodos sobrecargados

„ Métodos que comparten un nombre en una clase


z Se distinguen examinando la lista de parámetros

class
class OverloadingExample
OverloadingExample
{{
static
static int
int Suma(int
Suma(int a, a, int
int b)
b)
{{
return
return aa ++ b;
b;
}}
static
static int
int Suma(int
Suma(int a, a, int
int b,
b, int
int c)
c)
{{
return
return aa ++ bb ++ c;
c;
}}
static
static void
void Main(
Main( ))
{{
Console.WriteLine(Suma(1,2)
Console.WriteLine(Suma(1,2) ++ Suma(1,2,3));
Suma(1,2,3));
}}
}}

LPII: Laboratorio de Programación II 63

28
Programas en C#: método Main

„ Para ejecutar un programa, es necesario empezar por algún


sitio, pero no hay objetos...
„ Al ejecutar el intérprete, se le dice qué clase debe ejecutar
„ Método de clase: Main
using System;

public class MainClass {


static void Main(String[] args) {
Persona p = new Persona();

p.modificarDni(1234567);
p.mostrarPorPantalla();

int dni = p.obtenerDni();


Console.WriteLine("El dni es "+dni);
}
}
LPII: Laboratorio de Programación II 64

Índice de contenidos

„ Encapsulación
„ Clases y objetos
„ Variables de tipo referencia
„ Clases y constructores
„ Más sobre Métodos

„Clases y espacios de nombres comunes


en C#/.NET

LPII: Laboratorio de Programación II 66

29
Clase Exception

„ Exception es una clase


„ Los objetos Exception se usan para lanzar excepciones
z Para crear un objeto Exception se usa new
z Para lanzar el objeto se usa throw
„ Los tipos Exception son subclases de Exception
try
try {{
...
...
if
if (minuto
(minuto << 11 ||
|| minuto
minuto >=
>= 60)
60) {{
throw
throw new Exception (minuto+" no
new Exception (minuto+" no es
es un
un minuto
minuto válido");
válido");
}}
...
...
}}
catch
catch (Exception)
(Exception) {{
}}

LPII: Laboratorio de Programación II 67

Clase String

„ Cadenas de caracteres Unicode


„ Abreviatura de System.String

string
string ss == "Hola";
"Hola";

„ Operaciones comunes: corchetes, método Insert, propiedad


Length, método Copy, método Concat, método Trim,
métodos ToUpper y ToLower, ...

LPII: Laboratorio de Programación II 68

30
Clase String

„ Comparación de cadenas de caracteres


z Método Equals
9 Comparación de valores
z Método Compare
9 Más comparaciones
9 Opción para no distinguir mayúsculas y minúsculas
9 Ordenación alfabética
z Opciones de Compare en función del idioma
„ Los operadores == y != están sobrecargados
z Son equivalentes a String.Equals y !String.Equals
string
string aa == "Test";
"Test";
string
string bb == "Test";
"Test";
if
if (a
(a ==
== b)
b) ...
... //
// Devuelve
Devuelve true
true

LPII: Laboratorio de Programación II 69

Tipo Object y jerarquía de objetos

„ Sinónimo de System.Object
„ Clase base para todas las demás clases

Object
Object

String
String Exception
Exception MyClass
MyClass

SystemException
SystemException

„ Métodos comunes para todos los tipos referencia: ToString,


Equals, GetType, Finalize
LPII: Laboratorio de Programación II 70

31
Espacios de nombre en .NET

„ Espacio de nombres System.IO


z Acceso a entrada/salida del sistema de archivos
9 File, Directory, StreamReader, StreamWriter, FileStream,
BinaryReader, BinaryWriter
„ Espacio de nombres System.Xml
z Soporte a estándares de XML
„ Espacio de nombres System.Data
z System.Data.SqlClient: SQL Server .NET Data Provider
z System.Data: Clases que constituyen la arquitectura ADO.NET
„ Otros espacios de nombres útiles
z System, System.Net, System.Net.Sockets,
System.Windows.Forms
LPII: Laboratorio de Programación II 72

Preguntas y respuestas

LPII: Laboratorio de Programación II 73

32

También podría gustarte