Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Dentro de la clase
Se pueden declarar variables, propiedades, mtodos, etc. Cada elemento puede tener un modificador de acceso. Un Modificador de acceso especifica quienes estn autorizados a ver ese elemento. Si no se especifica ningn modificador de acceso, se asume que se trata de un elemento private.
3
Modificadores de acceso
public
Accesible a todos los elementos
private
Accesible solo a esa misma clase
protected
Accesible solo a la misma clase y mtodos de sus clases derivadas. No accesible desde el exterior.
internal
Accesible solo a ese ensamblado
protected internal
Accesible desde el mismo ensamblado, la misma clase y mtodos de sus clases derivadas
Modificadores de acceso
Accesible desde Modificador de acceso Clase donde se declar Subclase (Mismo assembly) Subclase (Distinto Assembly) Externamente (Mismo Assembly) Externamente (Distinto Assembly)
private
SI
NO
NO
NO
NO
internal
SI
SI
NO
SI
NO
SI
SI
SI
NO
NO
SI
SI
SI
SI
NO
SI
SI
SI
SI
SI 5
Campos
Un campo es un dato comn a todos los objetos de una determinada clase. Las variables declaradas dentro de una clase son ejemplos de campos (fields).
2.
3.
Ejemplo en un paso:
Definir el tipo de miObjetoA Adquirir memoria sin inicializar para el nuevo objeto usando new. Ejecutar el constructor para inicializar la memoria y convertirla en un objeto usable
STACK
STACK
num1
No definido
num1
50
STACK
STACK
HEAP
cli
No definido
cli
[ Referencia cli ]
objeto cli
10
STACK
cli
objeto cli
objeto cli2
cli2
STACK
HEAP
cli
objeto cli
objeto cli2
cli2
11
Mtodos
13
Mtodos
Contienen instrucciones para ejecutar al momento de ser invocados. Un mtodo contiene:
Modificador de Acceso (Determina su visibilidad) Tipo de dato (Devuelto al finalizar su ejecucin) Identificador (Nombre con el cual se invoca) Parmetros (Cero o mas variables que recibe el mtodo)
14
Ejemplo de mtodo
Modificador de acceso Tipo de dato del valor regresado
Identificador
Parmetros
Invocando al mtodo
Parmetros
16
17
miCarro.CambiarEstado(Apagado);
18
this
Para hacer referencia (explcita) a un elemento que se encuentra dentro de la misma clase (sta) se utiliza this.
class Articulo { private double precio = 0; public void PonerPrecio ( double precio ) { this.precio = precio; } public double ConsultarPrecio() { return this.precio; } }
Muy til cuando existen distintos elementos con el mismo nombre, pero con distinto significado dentro de un mbito determinado.
19
Ejemplos de mtodos
class Carro { private string estado = "Apagado"; public void Encender() { estado = "Encendido"; } public void Apagar() { estado = "Apagado"; } public string ConsultarEstado() { return estado; } public void CambiarEstado(string nuevoestado) { estado = nuevoestado; } }
20
10
Sobrecarga
Se refiere a la posibilidad de crear mtodos que posean el mismo nombre y difieran en la cantidad y/o tipo de parmetros (Firma).
No es posible crear 2 funciones con el mismo identificador que solo difieran en el tipo de dato devuelto.
static bool impresion(int num) static char impresion(int num)
22
11
Ejemplo de sobrecarga
class Impresion { public void Imprimir() { System.Console.WriteLine("Sistema de Usuarios"); } public void Imprimir(string mensaje) { System.Console.WriteLine(mensaje); } public void Imprimir (string titulo, string mensaje) { System.Console.WriteLine("===== " + titulo + " ====="); System.Console.WriteLine(mensaje); } } class Programa { static void Main() { Impresion im = new Impresion (); im.Imprimir(); im.Imprimir("Siga las instrucciones en pantalla", "Use minusculas"); im.Imprimir(" Gracias! "); System.Console.ReadLine(); } } 23
Mtodo Constructor
Mtodo especial que es invocado automticamente cada vez que un objeto nuevo es creado (new). Debe poseer el mismo nombre de la clase. No posee tipo de dato de retorno. Si la clase no posee un constructor, C# crea uno vaco por default.
24
12
Ejemplo de constructor
class Persona { public string Nombre; Constructor. (notar que tiene el mismo nombre de la clase) public Persona() { Nombre = "Desconocido"; } }
Dentro del constructor se realizan las inicializaciones correspondientes
class Programa { static void Main() { Persona unaPersona = new Persona(); System.Console.WriteLine(unaPersona.Nombre); System.Console.ReadLine(); } }
25
13
27
Mtodo Destructor
No puede llamarse explcitamente. Se invoca automticamente cuando el objeto es destruido. Invocado por el Garbage Collector (GC) justo antes de desasignar la memoria del objeto. Usado para cerrar archivos, conexiones de red, canales abiertos, etc. Sintaxis similar al mtodo constructor, pero anteponiendo una tilde (~) al nombre.
28
14
Ejemplo de destructor
29
Destruccin de objetos
C# gestiona la memoria de modo automtico mediante el recolector de basura (Garbage Collector o GC), quien se encarga de eliminar la memoria que en algn momento se solicit y no se ocupa mas. En C# no existe el operador contrario a new. Por lo que, de manera general, NO es posible controlar exactamente el momento en el cual la memoria vuelve a estar disponible.
30
15
Destruccin de objetos
Se puede indicar en el programa cuando un objeto deja de ser util, asignndole el valor null.
miObjeto = null
Cuando el GC lo note, tomar cartas en el asunto. El instante preciso en que lo har, queda fuera del alcance del programador.
31
Trabaja cuando:
Hay poca memoria disponible La aplicacin est finalizando El programador lo invoca manualmente (NO recomendado): System.GC.Collect()
32
16
Propiedades
33
Propiedades
Son valores (variables) que poseen los objetos. Se pueden implementar:
Declarando la variable como public
No sera posible especificarla como Solo-Lectura o Solo-Escritura No se puede implementar cdigo adicional asociado a la Lectura o Escritura de la variable.
34
17
35
class Persona { private int edad; public int Edad { get { return edad; } set { edad = value; } } }
class Programa { static void Main() { Persona unaPersona = new Persona(); unaPersona.Edad = 25; System.Console.WriteLine (unaPersona.Edad); } }
36
18
38
19
Herencia y Composicin
39
Herencia
Caracterstica de la POO que permite definir nuevas clases a partir de otras ya existentes. Puede usarse para:
Relaciones del tipo es un
Ejemplo: Un Gerente es un Empleado con caractersticas propias adicionales.
40
20
Uso de la Herencia
Beneficios:
Permte escribir menos cdigo. Mejora la reusabilidad de los componentes. Facilita el mantenimiento del sistema completo.
Util para un buen diseo del programa. Un diseo pobre sin herencia implementara las clases involucradas de manera independiente.
41
Herencia en C#
En C# solo se permite Herencia simple. Ejemplo de Herencia en C#
class A { } class B : A { }
Indica que B Hereda de A
21
Ejemplo de Herencia
Se deben modelar dos clases con las siguientes caractersticas:
Automovil CaballosDeFuerza: int CantidadDePuertas: int Arrancar() : void Detener() : void Acelerar(int cuanto): void PalaMecanica CaballosDeFuerza: int PesoMaximoDeLevante: int Arrancar() : void Detener() : void MoverPala(string direccion) : void
43
44
22
45
23
class Programa { static void Main() { Automovil unAuto = new Automovil(); unAuto.Arrancar(); unAuto.Acelerar(10); unAuto.Detener(); PalaMecanica unaPala = new PalaMecanica(); unaPala.Arrancar(); unaPala.MoverPala ("arriba"); unaPala.Detener(); System.Console.ReadLine(); } }
47
class Vehiculo { public void Arrancar() { System.Console.WriteLine("....Arrancando....Clase Vehiculo... "); } } class Automovil : Vehiculo { public void Acelerar(int cuanto) { System.Console.WriteLine("Primero, hay que arrancar"); base.Arrancar(); System.Console.WriteLine("Despues, hay que acelerar..."); System.Console.WriteLine("Acelerando "+ cuanto + " km/hr"); } } class Programa { static void Main() { Automovil miCarro = new Automovil(); miCarro.Acelerar(10); System.Console.ReadLine(); } 48 }
24
50
25
La palabra reservada base( ) hace referencia a la clase padre inmediata desde la cual se invoca. Entre parntesis se especifican los parmetros requeridos.
51
52
26
53
Composicin
Un objeto puede tener como miembro otro objeto definido previamente. Cuando un objeto se encuentra compuesto por otros objetos, se dice que hay Composicin. La composicin permite implementar relaciones del tipo tiene un.
Ejemplo: Un Auto tiene un Motor.
54
27
Composicin
ProcesosDeUsuario Impresion
class Impresion { public void Imprimir(string Titulo, string mensaje) { System.Console.WriteLine(Titulo.ToUpper()); System.Console.WriteLine(mensaje); } } class ProcesosDeUsuario Composicin { private Impresion imp; public void ImprimirInstrucciones() { imp = new Impresion(); imp.Imprimir("Bienvenido", "Presione Enter para continuar"); System.Console.ReadLine(); } } 55
56
28
57
(Es un)
Composicin
(Tiene un o unos)
58
29
ERROR!
Polimorfismo
60
30
Polimorfismo
Es la habilidad que poseen los objetos para reaccionar de modo diferente ante los mismos mensajes. En C# el polimorfismo est intimamente relacionado con la sobrecarga y mtodos virtuales.
61
Mtodos Virtuales
Son mtodos en la clase base pensados para ser sobre-escritos por subclases. Para declararlos, se utiliza la palabra reservada virtual; para sobreescribirlos, en la subclase se utiliza la palabra reservada override. Un mtodo virtual PUEDE ser sobreescrito, o utilizarse tal como est. Solo se puede utilizar override si el mtodo en la clase base est marcado como virtual, abstract u override. El mtodo override debe mantener el mismo nivel de acceso que el mtodo Virtual correspondiente
62
31
Ejemplo virtualoverride
class Vehiculo { public virtual void Arrancar() { System.Console.WriteLine("Arrancar...Clase Vehiculo"); } } class Carro: Vehiculo { public override void Arrancar() { System.Console.WriteLine("Arrancar....Clase Carro"); } } class Programa { static void Main() { Carro miCarro = new Carro(); miCarro.Arrancar(); System.Console.ReadLine(); } } Ejecucin del programa Arrancar....Clase Carro 63
64
32
override sealed
Agregar sealed a un mtodo override impide la futura sobre-escritura de ese mtodo, proporcionando una implementacin final.
class Aparato { public virtual void Prender() { System.Console.WriteLine(" Prendiendo el Aparato "); } } class TV : Aparato { public override sealed void Prender() { System.Console.WriteLine(" LA TV SE ESTA PRENDIENDO "); } } ERROR!!!...El mtodo ya class TVColor : TV no se puede sobreescribir. { public override void Prender() { System.Console.WriteLine(" La tele a color se esta prendiendo"); } } 65
class Vehiculo { public void Arrancar() { System.Console.WriteLine(" Clase Vehiculo. Metodo Arrancar "); } } class Automovil : Vehiculo { public new void Arrancar() { System.Console.WriteLine(" Clase Automovil. Metodo Arrancar "); } }
66
33
Clases abstractas
67
Clases Abstractas
Son clases que NO pueden ser instanciadas. Se utilizan solamente para heredar de ellas (Forzar la herencia). Se antepone la palabra abstract a la clase.
68
34
abstract class Persona { private string nombre; private string apellido; public string Nombre { get { return nombre; } set { nombre = value; } } public string Apellido { get { return apellido; } set { apellido = value; } class Empleado : Persona } { public string ObtenerNombreCompleto() private int claveEmpleado; { public int Clave return { this.Nombre + " " + this.Apellido; get { return claveEmpleado; } } set { claveEmpleado = value; } } } } class Cliente : Persona { private string rfc; public string RFC { get { return rfc; } set { rfc = value; } 69 } }
35
72
36
73
74
37