Vous êtes sur la page 1sur 44

Universidad Domingo Savio

Facultad de Ciencias y Tecnologa de la Informacin

Carrera Ingeniera en Redes y Telecomunicaciones Materia : Programacin I Programacin Orientada a Objetos


01/04/2014 1

Clases y Objetos en C#

01/04/2014

Agenda
Representacin de Clases Declaracin de Clases Modificadores de Acceso Declaracin de campos de instancia Declaracin de mtodos

01/04/2014

Representacin de una clase


Nombre de la Clase -Atributos +Operaciones()

Motocicleta -Color -Cilindros -Vel_Maxima +Arrancar() +Acelerar() +Frenar()

Complejo +Sumar() +Restar() +Multiplicar() +Dividir() +LeerModulo() +LeerArgumento() +LeerParteReal() +LeerParteImaginaria()


01/04/2014

Televisin +Enceder() +Apagar() +CambiarCanal() +RegularVolumen()


4

Cmo se define una clase en C#


Sintaxis: [atributos] [modificador_de_acceso] class nombre_de_la_clase [ : clase_base [ , interface(s) ] ] { Declaracin_de_atributos Declaracin_de_mtodos }
01/04/2014 5

Ejemplo de una clase


class Dado { public Random generador; public Dado() { generador = new Random(); }
public int Lanzar() { int valor = generador.Next(1, 7); return valor; }

}
01/04/2014 6

Creacin y uso de objetos


Las clases son slo declaraciones. Los verdaderos actores de la Programacin Orientada a Objetos son los objetos. Una vez declarada una clase, podemos utilizar el nombre de la clase como un nuevo Tipo. Por lo que podemos declarar una variable de referencia a un objeto que sea del tipo de la clase.
01/04/2014 7

Creacin y uso de objetos


Dado d;
Declara un objeto, d, que es una instancia de la clase Dado. Una instancia de un objeto es una variable de referencia, por lo tanto los datos del objeto se almacenan en el montculo (heap). Sin embargo el enunciado anterior no crea el objeto. Es necesario utilizar el operador new

Dado d1 = new Dado(); Dado d2; d2 = new Dado();


01/04/2014 8

Creacin y uso de objetos


Una vez que la instancia del objeto est definido, podemos acceder a los campos del objeto mediante el operador . int n = d1.Lanzar(); Console.WriteLine(d2.Lanzar());

01/04/2014

Modificadores de visibilidad
Los atributos y los mtodos pueden tener modificadores, que indican los niveles de acceso que otros mtodos pueden tener sobre ellos. C# cuenta con un conjunto de modificadores de visibilidad.

01/04/2014

10

Modificadores de Acceso de C#
Modificador Restriccin de acceso
public Sin restricciones. Los miembros marcados como public estn visibles a cualquier mtodo de la clase Los miembros de una clase A marcados como private son accesibles slo a los mtodos de la clase A. Los miembros de una clase A marcados protected pueden ser accedidos por los mtodos de la clase A y tambin por los mtodos de las clases derivadas de la clase A.
11

private

protected

01/04/2014

Modificadores de Acceso de C#
Modificador de acceso
internal

Restriccin
Los miembros de una clase A marcados internal pueden ser accedidos por los mtodos de cualquier clase en el ensamblado (assembly) de A. Los miembros de una clase A marcados protected internal pueden ser accedidos por los mtodos de la clase A y tambin por los mtodos de las clases derivadas de la clase A, as como por los mtodos de cualquier clase en el ensamblado (assembly) de A. Esto equivale a protected OR internal.
12

protected internal

01/04/2014

Laboratorio 3: Encapsulamiento
Modifique la clase DemoDado para generar el nmero aleatorio directamente, sin llamar al mtodo Lanzar(): Console.WriteLine("Al lanzar el dado cay {0}", d.generador.Next(1,7));
01/04/2014 13

Laboratorio 3: Encapsulamiento
Modifique el acceso al campo de instancia generador clase haciendo su acceso privado: private Random generador; Compile y ejecute el programa. Qu sucedi? Vuelva a escribir el cdigo para que se invoque al mtodo Lanzar(). Console.WriteLine("Al lanzar el dado cay {0}", d.Lanzar());

01/04/2014

14

Encapsulamiento
La recomendacin es hacer que los campos de instancia tengan visibilidad privada, mantenindolos en secreto, mientras que los mtodos tengan visibilidad pblica. En algunas ocasiones se puede requerir que un mtodo tenga visibilidad privada.
01/04/2014 15

Declarando un campo de instancia


Los campos de instancia almacenan los valores de los atributos que forman parte del estado de los objetos de una clase. Cada objeto almacenar por separado los valores de sus campos. Los campos de instancia de una clase pueden ser de lectura y escritura, de slo lectura o de slo escritura.
01/04/2014 16

Accediendo un campo de instancia.


Para acceder un campo de instancia es necesario crear previamente un objeto (o instancia) de la clase. Para acceder a los campos de instancia se utiliza la siguiente sintaxis:
Nombre_instancia.nombre_campo

01/04/2014

17

Mtodos de instancia
Los mtodos son a las clases lo que los verbos son a las oraciones. Indican las acciones que definen el comportamiento de los objetos de la clase. Un mtodo define una accin especfica o un clculo. Un mtodo es identificado por su firma (signature), que consiste del nombre del mtodo y el nmero y tipos de datos de sus parmetros. Adems, un mtodo tiene un valor de retorno, o la palabra reservada void si no se retorna nada, y una lista de modificadores que determina su accesibilidad y comportamiento polimrfico.
01/04/2014 18

Ejemplo de mtodo
public int Lanzar() { int valor = generador.Next(1, 7); return valor; }

01/04/2014

19

Parmetros
Para poder realizar su accin o clculo un mtodo puede requerir informacin adicional que ser enviada por el cdigo que invoque el mtodo. En el ejemplo anterior, el mtodo Lanzar() no tiene parmetros. Sin embargo, un mtodo puede tener cualquier nmero de parmetros.
01/04/2014 20

Mtodos con parmetros


public void Depositar(Decimal cantidad) { saldo = saldo + cantidad; }
public void Transferir(double cantidad, CuentaBancaria otraCuenta) { if (Retirar(cantidad) == true) { otraCuenta.Depositar(cantidad); } }
01/04/2014 21

Mtodos que retornan un valor


public double GetSaldo() { return saldo; } public bool Retirar(double cantidad) { boolean seEfectuoRetiro; if (saldo >= cantidad) { saldo = saldo - cantidad; seEfectuoRetiro = true; } else { seEfectuoRetiro = false; } return seEfectuoRetiro; }
01/04/2014 22

Sobrecarga de mtodos
public CuentaBancaria() { saldo = 0.0; }
public CuentaBancaria(double nuevoSaldo) { saldo = nuevoSaldo; }
01/04/2014 23

Mtodos get y set


Si los atributos son privados cmo otros objetos pueden acceder a ellos ? Los Mtodos selectores (mtodos get) devuelven todo el o parte del estado de un objeto encapsulado. Los mtodos modificadores (mtodos set) cambian todo el o parte del estado de un objeto encapsulado.
01/04/2014 24

Alcance
Las variables declaradas dentro de un mtodo, constructor u otro bloque de cdigo no pueden ser utilizadas en toda la clase. El Alcance de una variable se refiere a la parte de un programa donde puede ser utilizada una variable. Una variable slo puede ser utilizada en dentro del bloque de cdigo donde ha sido definida. As, dependiendo de donde estn declaradas, una variable puede tener alcance de clase o puede ser una variable local.
01/04/2014 25

Ejemplo de alcance
class MiClase { int x; public void UnMetodo(int a) { int x; Console.WriteLine({0}\t{1},x, this.x); if (a > 0) { int x = 5; Console.WriteLine({0}\t{1},x, a); } } }
01/04/2014 26

Constructores
Un constructor es un mtodo especial que es invocado automticamente cuando se instancia (crea) un objeto. Los constructores frecuentemente se utilizan para inicializar las variables de atributo de un objeto.

01/04/2014

27

Ejemplo de constructor
class Dado { public Random generador; public Dado() { generador = new Random(); }
public int Lanzar() { int valor = generador.Next(1, 7); return valor; }

}
01/04/2014 28

Constructores
Como con los mtodos, es posible sobrecargar los constructores, incluyendo mltiples constructores en una clase, cada uno con el mismo nombre y una serie diferente de argumentos.

01/04/2014

29

Constructor predeterminado
Cuando el compilador encuentra una clase que no tiene un constructor explcitamente definido, inserta un constructor predeterminado. Por lo tanto toda clase tiene un constructor. El constructor predeterminado no recibe argumentos. Se recomienda, declarar constructores dentro de una clase para evitar que el compilador inserte un constructor predeterminado.
01/04/2014 30

La referencia this
La palabra reservada this hace referencia a la instancia actual de un objeto. La referencia this es una referencia oculta que se pasa a todos los mtodos no estticos de una clase. Cada mtodo puede hacer referencia a los otros mtodos y variables de instancia de ese objeto por medio de la referencia this.

01/04/2014

31

Usos de la referencia this


Por lo general se utiliza para calificar miembros de instancia que pueden ser ocultados por los parmetros:
Public CuentaBancaria(decimal saldo) { this.saldo = saldo; }

01/04/2014

32

Usos de la referencia this


Tambin se puede utilizar para pasar el objeto actual como un parmetro a otro objeto:
class miClase { public void MiMetodo(OtraClase otroObjeto) { otroObjeto.OtroMetodo(this); } }

01/04/2014

33

Usos de la referencia this


Otro uso es para llamar a un constructor sobrecargado desde otro constructor:
class CuentaBancaria { private decimal saldo; public CuentaBancaria() : this(0) { } public CuentaBancaria(decimal saldoInicial) { this.saldo = saldoInicial; } }
01/04/2014 34

Usos de la referencia this


Finalmente, la referencia this se puede utilizar para invocar explcitamente mtodos y miembros de clase, como una forma de documentacin:
public bool Retirar(double cantidad) { boolean seEfectuoRetiro; if (this.saldo >= cantidad) { this.saldo = this.saldo - cantidad; seEfectuoRetiro = true; } else { seEfectuoRetiro = false; } return seEfectuoRetiro; }
01/04/2014 35

Encapsulamiento de datos con propiedades


Las propiedades permiten a los cliente el acceso al estado de los objetos de la clase como si estuvieran accediendo directamente a los campos miembros, mientras realmente implementan ese acceso a travs de un mtodo de la clase. Por lo general el cliente desea acceder al estado del objeto y no trabajar con mtodos. El diseador de la clase quiere encapsular la implementacin ocultando los campos miembros, proporcionando el acceso indirectamente a travs de un mtodo.
01/04/2014 36

Encapsulamiento de datos con propiedades


Para declarar una propiedad, escriba el tipo y el nombre de la propiedad, seguido de un par de llaves. Dentro de las llaves se pueden declarar los mtodos de acceso get y set. Ninguno de estos mtodos de acceso tienen parmetros explcitos. Sin embargo, el mtodo set tiene un parmetro implcito de nombre value, como se muestra a continuacin.

01/04/2014

37

Ejemplo de propiedades
Public class Curso { private string nombre; public string NombreDelCurso { get { return nombre; } set { nombre = value; } } }
01/04/2014 38

Ejemplo de propiedades
Curso mate = new Curso(); mate.NombreDelCurso = Matemticas I; Console.WriteLine(Nombre del curso: {0}, mate.NombreDelCurso;

01/04/2014

39

Ejemplo de propiedades
public class Empleado { private string nombre; public string Nombre { get { return nombre; } set { if (value == null) { throw new NullReferenceException(); } else { value = value.Trim(); if (value == ) { throw new ApplicationException(El nombre est en blanco); } else { nombre = value; } } } } }
01/04/2014 40

Propiedades
Puede incluirse slo la parte del getter o del setter de una propiedad para cambiar la accesibilidad de la propiedad. Si se proporciona slo el getter la propiedad ser de slo lectura. Si se proporciona slo el setter, algo que es muy raro, la propiedad ser de slo escritura.
01/04/2014 41

Ejemplo
public clase CuentaBancaria { private decimal saldo; public decimal Saldo { get { return saldo; } } }
01/04/2014 42

Propiedades como campos virtuales


Algunas veces no se requiere contar con un campo miembro para implementar las propiedades. La propiedad podra calcular el valor a partir de otros campos miembros.

01/04/2014

43

Ejemplo
public class Empleado { private string nombre; private string apellidos public string NombreCompleto { get { return nombre + + apellidos; } } }
01/04/2014 44

Vous aimerez peut-être aussi