44
22/04/22 1 Universidad Domingo Savio Facultad de Ciencias y Tecnología Facultad de Ciencias y Tecnología de la Información de la Información Carrera Ingeniería en Redes y Telecomunicaciones Materia : Programación I Programación Orientada a Objetos

29/05/20141 Universidad Domingo Savio Facultad de Ciencias y Tecnología de la Información Carrera Ingeniería en Redes y Telecomunicaciones Materia : Programación

Embed Size (px)

Citation preview

Page 1: 29/05/20141 Universidad Domingo Savio Facultad de Ciencias y Tecnología de la Información Carrera Ingeniería en Redes y Telecomunicaciones Materia : Programación

10/04/23 1

Universidad Domingo Savio

Facultad de Ciencias y Tecnología de la Facultad de Ciencias y Tecnología de la InformaciónInformación

CarreraIngeniería en Redes y Telecomunicaciones

Materia : Programación IProgramación Orientada a Objetos

Page 2: 29/05/20141 Universidad Domingo Savio Facultad de Ciencias y Tecnología de la Información Carrera Ingeniería en Redes y Telecomunicaciones Materia : Programación

10/04/23 2

Clases y Objetos en C#

Page 3: 29/05/20141 Universidad Domingo Savio Facultad de Ciencias y Tecnología de la Información Carrera Ingeniería en Redes y Telecomunicaciones Materia : Programación

10/04/23 3

Agenda

Representación de ClasesDeclaración de ClasesModificadores de AccesoDeclaración de campos de instanciaDeclaración de métodos

Page 4: 29/05/20141 Universidad Domingo Savio Facultad de Ciencias y Tecnología de la Información Carrera Ingeniería en Redes y Telecomunicaciones Materia : Programación

10/04/23 4

Representación de una clase

+Operaciones()

-Atributos

Nombre de la Clase

+Arrancar()+Acelerar()+Frenar()

-Color-Cilindros-Vel_Maxima

Motocicleta

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

Complejo

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

Televisión

Page 5: 29/05/20141 Universidad Domingo Savio Facultad de Ciencias y Tecnología de la Información Carrera Ingeniería en Redes y Telecomunicaciones Materia : Programación

Cómo se define una clase en C#

Sintaxis:[atributos] [modificador_de_acceso] class nombre_de_la_clase [ : clase_base [ , interface(s) ] ]

{ Declaración_de_atributos Declaración_de_métodos}

10/04/23 5

Page 6: 29/05/20141 Universidad Domingo Savio Facultad de Ciencias y Tecnología de la Información Carrera Ingeniería en Redes y Telecomunicaciones Materia : Programación

Ejemplo de una claseclass Dado { public Random generador; public Dado() { generador = new Random(); }

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

10/04/23 6

Page 7: 29/05/20141 Universidad Domingo Savio Facultad de Ciencias y Tecnología de la Información Carrera Ingeniería en Redes y Telecomunicaciones Materia : Programación

Creación y uso de objetos

Las clases son sólo declaraciones.Los verdaderos actores de la Programación 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.

10/04/23 7

Page 8: 29/05/20141 Universidad Domingo Savio Facultad de Ciencias y Tecnología de la Información Carrera Ingeniería en Redes y Telecomunicaciones Materia : Programación

Creación y uso de objetosDado 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 montículo (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();

10/04/23 8

Page 9: 29/05/20141 Universidad Domingo Savio Facultad de Ciencias y Tecnología de la Información Carrera Ingeniería en Redes y Telecomunicaciones Materia : Programación

Creación 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());

10/04/23 9

Page 10: 29/05/20141 Universidad Domingo Savio Facultad de Ciencias y Tecnología de la Información Carrera Ingeniería en Redes y Telecomunicaciones Materia : Programación

10/04/23 10

Modificadores de visibilidad

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

Page 11: 29/05/20141 Universidad Domingo Savio Facultad de Ciencias y Tecnología de la Información Carrera Ingeniería en Redes y Telecomunicaciones Materia : Programación

Modificadores de Acceso de C#Modificador de acceso

Restricción

public Sin restricciones. Los miembros marcados como public están visibles a cualquier método de la clase

private Los miembros de una clase A marcados como private son accesibles sólo a los métodos de la clase A.

protected Los miembros de una clase A marcados protected pueden ser accedidos por los métodos de la clase A y también por los métodos de las clases derivadas de la clase A.10/04/23 11

Page 12: 29/05/20141 Universidad Domingo Savio Facultad de Ciencias y Tecnología de la Información Carrera Ingeniería en Redes y Telecomunicaciones Materia : Programación

Modificadores de Acceso de C#Modificador de acceso

Restricción

internal Los miembros de una clase A marcados internal pueden ser accedidos por los métodos de cualquier clase en el ensamblado (assembly) de A.

protected internal

Los miembros de una clase A marcados protected internal pueden ser accedidos por los métodos de la clase A y también por los métodos de las clases derivadas de la clase A, así como por los métodos de cualquier clase en el ensamblado (assembly) de A.Esto equivale a protected OR internal.

10/04/23 12

Page 13: 29/05/20141 Universidad Domingo Savio Facultad de Ciencias y Tecnología de la Información Carrera Ingeniería en Redes y Telecomunicaciones Materia : Programación

Laboratorio 3: Encapsulamiento

Modifique la clase DemoDado para generar el número aleatorio directamente, sin llamar al método Lanzar():Console.WriteLine("Al lanzar el dado cayó {0}", d.generador.Next(1,7));

10/04/23 13

Page 14: 29/05/20141 Universidad Domingo Savio Facultad de Ciencias y Tecnología de la Información Carrera Ingeniería en Redes y Telecomunicaciones Materia : Programación

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 código para que se invoque al método Lanzar().Console.WriteLine("Al lanzar el dado cayó {0}", d.Lanzar());

10/04/23 14

Page 15: 29/05/20141 Universidad Domingo Savio Facultad de Ciencias y Tecnología de la Información Carrera Ingeniería en Redes y Telecomunicaciones Materia : Programación

Encapsulamiento

La recomendación es hacer que los campos de instancia tengan visibilidad privada, manteniéndolos en secreto, mientras que los métodos tengan visibilidad pública.En algunas ocasiones se puede requerir que un método tenga visibilidad privada.

10/04/23 15

Page 16: 29/05/20141 Universidad Domingo Savio Facultad de Ciencias y Tecnología de la Información Carrera Ingeniería en Redes y Telecomunicaciones Materia : Programación

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 sólo lectura o de sólo escritura.

10/04/23 16

Page 17: 29/05/20141 Universidad Domingo Savio Facultad de Ciencias y Tecnología de la Información Carrera Ingeniería en Redes y Telecomunicaciones Materia : Programación

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

10/04/23 17

Page 18: 29/05/20141 Universidad Domingo Savio Facultad de Ciencias y Tecnología de la Información Carrera Ingeniería en Redes y Telecomunicaciones Materia : Programación

Métodos de instanciaLos métodos 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 método define una acción específica o un cálculo.Un método es identificado por su firma (signature), que consiste del nombre del método y el número y tipos de datos de sus parámetros. Además, un método 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 polimórfico.

10/04/23 18

Page 19: 29/05/20141 Universidad Domingo Savio Facultad de Ciencias y Tecnología de la Información Carrera Ingeniería en Redes y Telecomunicaciones Materia : Programación

Ejemplo de método

public int Lanzar() { int valor = generador.Next(1, 7);

return valor;}

10/04/23 19

Page 20: 29/05/20141 Universidad Domingo Savio Facultad de Ciencias y Tecnología de la Información Carrera Ingeniería en Redes y Telecomunicaciones Materia : Programación

Parámetros

Para poder realizar su acción o cálculo un método puede requerir información adicional que será enviada por el código que invoque el método.En el ejemplo anterior, el método Lanzar() no tiene parámetros.Sin embargo, un método puede tener cualquier número de parámetros.

10/04/23 20

Page 21: 29/05/20141 Universidad Domingo Savio Facultad de Ciencias y Tecnología de la Información Carrera Ingeniería en Redes y Telecomunicaciones Materia : Programación

Métodos con parámetrospublic void Depositar(Decimal cantidad) { saldo = saldo + cantidad;}

public void Transferir(double cantidad, CuentaBancaria otraCuenta) {

if (Retirar(cantidad) == true) { otraCuenta.Depositar(cantidad); }}

10/04/23 21

Page 22: 29/05/20141 Universidad Domingo Savio Facultad de Ciencias y Tecnología de la Información Carrera Ingeniería en Redes y Telecomunicaciones Materia : Programación

Métodos que retornan un valorpublic double GetSaldo() { return saldo;}public bool Retirar(double cantidad) { boolean seEfectuoRetiro; if (saldo >= cantidad) { saldo = saldo - cantidad; seEfectuoRetiro = true; } else { seEfectuoRetiro = false; } return seEfectuoRetiro;}

10/04/23 22

Page 23: 29/05/20141 Universidad Domingo Savio Facultad de Ciencias y Tecnología de la Información Carrera Ingeniería en Redes y Telecomunicaciones Materia : Programación

Sobrecarga de métodos

public CuentaBancaria() { saldo = 0.0;}

public CuentaBancaria(double nuevoSaldo) {

saldo = nuevoSaldo;}

10/04/23 23

Page 24: 29/05/20141 Universidad Domingo Savio Facultad de Ciencias y Tecnología de la Información Carrera Ingeniería en Redes y Telecomunicaciones Materia : Programación

10/04/23 24

Métodos get y set

¿Si los atributos son privados cómo otros objetos pueden acceder a ellos ?Los Métodos selectores (métodos get) devuelven todo el o parte del estado de un objeto encapsulado.Los métodos modificadores (métodos set) cambian todo el o parte del estado de un objeto encapsulado.

Page 25: 29/05/20141 Universidad Domingo Savio Facultad de Ciencias y Tecnología de la Información Carrera Ingeniería en Redes y Telecomunicaciones Materia : Programación

10/04/23 25

AlcanceLas variables declaradas dentro de un método, constructor u otro bloque de código 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 sólo puede ser utilizada en dentro del bloque de código donde ha sido definida.Así, dependiendo de donde estén declaradas, una variable puede tener alcance de clase o puede ser una variable local.

Page 26: 29/05/20141 Universidad Domingo Savio Facultad de Ciencias y Tecnología de la Información Carrera Ingeniería en Redes y Telecomunicaciones Materia : Programación

Ejemplo de alcanceclass 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); } }}

10/04/23 26

Page 27: 29/05/20141 Universidad Domingo Savio Facultad de Ciencias y Tecnología de la Información Carrera Ingeniería en Redes y Telecomunicaciones Materia : Programación

10/04/23 27

ConstructoresUn constructor es un método especial que es invocado automáticamente cuando se instancia (crea) un objeto.Los constructores frecuentemente se utilizan para inicializar las variables de atributo de un objeto.

Page 28: 29/05/20141 Universidad Domingo Savio Facultad de Ciencias y Tecnología de la Información Carrera Ingeniería en Redes y Telecomunicaciones Materia : Programación

Ejemplo de constructor

10/04/23 28

class Dado { public Random generador; public Dado() { generador = new Random(); }

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

Page 29: 29/05/20141 Universidad Domingo Savio Facultad de Ciencias y Tecnología de la Información Carrera Ingeniería en Redes y Telecomunicaciones Materia : Programación

10/04/23 29

Constructores

Como con los métodos, es posible sobrecargar los constructores, incluyendo múltiples constructores en una clase, cada uno con el mismo nombre y una serie diferente de argumentos.

Page 30: 29/05/20141 Universidad Domingo Savio Facultad de Ciencias y Tecnología de la Información Carrera Ingeniería en Redes y Telecomunicaciones Materia : Programación

10/04/23 30

Constructor predeterminado

Cuando el compilador encuentra una clase que no tiene un constructor explícitamente 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.

Page 31: 29/05/20141 Universidad Domingo Savio Facultad de Ciencias y Tecnología de la Información Carrera Ingeniería en Redes y Telecomunicaciones Materia : Programación

La referencia thisLa 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 métodos no estáticos de una clase.Cada método puede hacer referencia a los otros métodos y variables de instancia de ese objeto por medio de la referencia this.

10/04/23 31

Page 32: 29/05/20141 Universidad Domingo Savio Facultad de Ciencias y Tecnología de la Información Carrera Ingeniería en Redes y Telecomunicaciones Materia : Programación

Usos de la referencia this

Por lo general se utiliza para calificar miembros de instancia que pueden ser ocultados por los parámetros:

Public CuentaBancaria(decimal saldo) {

this.saldo = saldo;}

10/04/23 32

Page 33: 29/05/20141 Universidad Domingo Savio Facultad de Ciencias y Tecnología de la Información Carrera Ingeniería en Redes y Telecomunicaciones Materia : Programación

Usos de la referencia this

También se puede utilizar para pasar el objeto actual como un parámetro a otro objeto:

class miClase { public void MiMetodo(OtraClase otroObjeto) {

otroObjeto.OtroMetodo(this); }}

10/04/23 33

Page 34: 29/05/20141 Universidad Domingo Savio Facultad de Ciencias y Tecnología de la Información Carrera Ingeniería en Redes y Telecomunicaciones Materia : Programación

Usos de la referencia thisOtro 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; } …}

10/04/23 34

Page 35: 29/05/20141 Universidad Domingo Savio Facultad de Ciencias y Tecnología de la Información Carrera Ingeniería en Redes y Telecomunicaciones Materia : Programación

Usos de la referencia thisFinalmente, la referencia this se puede utilizar para invocar explícitamente métodos y miembros de clase, como una forma de documentación:

public bool Retirar(double cantidad) {

boolean seEfectuoRetiro;

if (this.saldo >= cantidad) {

this.saldo = this.saldo - cantidad;

seEfectuoRetiro = true;

} else {

seEfectuoRetiro = false;

}

return seEfectuoRetiro;

}

10/04/23 35

Page 36: 29/05/20141 Universidad Domingo Savio Facultad de Ciencias y Tecnología de la Información Carrera Ingeniería en Redes y Telecomunicaciones Materia : Programación

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 través de un método de la clase.Por lo general el cliente desea acceder al estado del objeto y no trabajar con métodos.El diseñador de la clase quiere encapsular la implementación ocultando los campos miembros, proporcionando el acceso indirectamente a través de un método.

10/04/23 36

Page 37: 29/05/20141 Universidad Domingo Savio Facultad de Ciencias y Tecnología de la Información Carrera Ingeniería en Redes y Telecomunicaciones Materia : Programación

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 métodos de acceso get y set.Ninguno de estos métodos de acceso tienen parámetros explícitos.Sin embargo, el método set tiene un parámetro implícito de nombre value, como se muestra a continuación.

10/04/23 37

Page 38: 29/05/20141 Universidad Domingo Savio Facultad de Ciencias y Tecnología de la Información Carrera Ingeniería en Redes y Telecomunicaciones Materia : Programación

Ejemplo de propiedadesPublic class Curso { private string nombre; public string NombreDelCurso { get { return nombre; } set { nombre = value; } }}

10/04/23 38

Page 39: 29/05/20141 Universidad Domingo Savio Facultad de Ciencias y Tecnología de la Información Carrera Ingeniería en Redes y Telecomunicaciones Materia : Programación

Ejemplo de propiedades

Curso mate = new Curso();mate.NombreDelCurso = “Matemáticas I”;Console.WriteLine(“Nombre del curso: {0}”, mate.NombreDelCurso;

10/04/23 39

Page 40: 29/05/20141 Universidad Domingo Savio Facultad de Ciencias y Tecnología de la Información Carrera Ingeniería en Redes y Telecomunicaciones Materia : Programación

Ejemplo de propiedadespublic 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; } } } }}

10/04/23 40

Page 41: 29/05/20141 Universidad Domingo Savio Facultad de Ciencias y Tecnología de la Información Carrera Ingeniería en Redes y Telecomunicaciones Materia : Programación

PropiedadesPuede incluirse sólo la parte del getter o del setter de una propiedad para cambiar la accesibilidad de la propiedad.Si se proporciona sólo el getter la propiedad será de sólo lectura.Si se proporciona sólo el setter, algo que es muy raro, la propiedad será de sólo escritura.

10/04/23 41

Page 42: 29/05/20141 Universidad Domingo Savio Facultad de Ciencias y Tecnología de la Información Carrera Ingeniería en Redes y Telecomunicaciones Materia : Programación

Ejemplo

public clase CuentaBancaria { private decimal saldo; public decimal Saldo { get { return saldo; } }}

10/04/23 42

Page 43: 29/05/20141 Universidad Domingo Savio Facultad de Ciencias y Tecnología de la Información Carrera Ingeniería en Redes y Telecomunicaciones Materia : Programación

Propiedades como campos virtuales

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

10/04/23 43

Page 44: 29/05/20141 Universidad Domingo Savio Facultad de Ciencias y Tecnología de la Información Carrera Ingeniería en Redes y Telecomunicaciones Materia : Programación

Ejemplo

public class Empleado { private string nombre; private string apellidos public string NombreCompleto { get { return nombre + “ “ + apellidos; } }}

10/04/23 44