Programacin Orientada
a Objetos en C#
Unidad 2.- Clases y objetos
Autor:
Dr. Ramn Roque Hernndez
http://ramonroque.com/Materias/pooTec.htm
ramonroque@yahoo.com
Colaboradores:
Ing. Gloria Ma. Rodrguez Morales
grodriguez@itnuevolaredo.edu.mx
Ing. Bruno Lpez Takeyas, M.C.
www.itnuevolaredo.edu.mx/takeyas
takeyas@itnuevolaredo.edu.mx
Espacios de nombres
(namespace)
Organizan los diferentes componentes
Un programa puede contener varios
namespaces
Un namespace puede contener muchas clases
El programador puede crear sus propios
namespaces
Para accesar a namespaces se usa la directiva
using:
using System;
using System.Array;
3
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Ejemplo
{
class Program
{
static void Main(string[] args)
{
}
}
}
4
Clases y objetos
Una clase es bsicamente un plano
para un tipo de datos personalizado.
Cuando se define una clase, se utiliza
cargndola en la memoria. Una clase
que se ha cargado en la memoria se
denomina objeto o instancia. Se crea
una instancia de una clase utilizando la
palabra clave de C# new
5
Clases en UML
Cada clase se representa en un
rectngulo con tres compartimentos:
Nombre
Atributos y propiedades
Mtodos
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.
8
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
protected
SI
SI
SI
NO
NO
protected
internal
SI
SI
SI
SI
NO
public
SI
SI
SI
SI
SI
10
11
Representacin de
modificadores de acceso en
C# y UML
Modificador de
acceso
Codificacin en C#
Representacin en
UML
Privado
private
Pblico
public
Protegido
protected
Interno
internal
Protegido interno
protected internal
+
#
~
#
12
Miembros estticos y de
instancia
Miembro esttico (static): Slo se crea una
copia del miembro de la clase. Se crea
cuando se carga la aplicacin que contiene
la clase y existe mientras se ejecute la
aplicacin
Miembro de instancia: Se crea por default.
Se crea una copia para cada instancia de la
clase.
13
Miembros estticos y de
instancia
Un miembro esttico es un mtodo o campo
al que se puede obtener acceso sin hacer
referencia a una instancia determinada de
una clase
No es necesario crear una instancia de la
clase contenedora para llamar al miembro
esttico
Cuando se tiene acceso a mtodos estticos,
puede utilizar el nombre de clase, no el
nombre de instancia
14
Declaracin de miembros
estticos
Cuando declara un campo de clase
esttico, todas las instancias de esa clase
compartirn ese campo
Una clase esttica es una cuyos
miembros son todos estticos Miembros Estticos
static void Main(string[] args)
{
Console.WriteLine(Tec Laredo);
}
15
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).
16
Crear objetos:
Instanciacin
Una vez creada la clase, ya es posible consumirla
mediante la instanciacin.
La instanciacin es el proceso de crear objetos a
partir de una clase.
1.
Ejemplo en un paso:
2.
3.
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
Objetos en UML
En UML un objeto se representa como
un rectngulo con un nombre
subrayado
Automvil
Persona
CuentaBancaria
19
Seleccin
Miembro
Lectura:
miOtraVariable = miobjetoA . Numero2;
20
10
Mtodos
21
Mtodos
Contienen instrucciones para ejecutar al
momento de ser invocados.
Un mtodo contiene:
11
Mtodos
En C# las subrutinas se conocen como
mtodos, se codifican como parte de una
clase y se clasifican en
Procedimientos NO devuelven valor
Subrutinas
Funciones Devuelven un valor
23
Ejemplo:
void Saludo( )
{
Console.Write(Hola);
}
24
12
Ejemplo de mtodo
(En la clase)
Modificador
de acceso
Tipo de dato
del valor regresado
Identificador
Parmetros
class Carro
{
public void Encender()
{
System.Console.WriteLine("El Auto se ha
encendido!");
}
}
25
26
13
Llamadas de
procedimientos
class Program
{
static void Main(string[] args)
{
Procedimiento(); // Llamada
}
static void Procedimiento( )
{
El Procedimiento
Console.Write(Tec Laredo);
NO devuelve
valor
return();// Fin del Procedimiento
}
}
27
miCarro.CambiarEstado(Apagado);
28
14
Parmetros
Por referencia Se enva la direccin de la
variable
29
15
num1
int num1;
num1 = 50;
STACK
STACK
No
definido
num1
50
31
32
16
cli;
STACK
cli
No
definido
cli
STACK
HEAP
[ Referencia
cli ]
objeto cli
33
STACK
cli
[ Referencia
cli ]
cli2
[ Referencia
cli2 ]
HEAP
El objeto cli2 queda sin
referencias hacia l .
objeto cli
cli2 = cli;
objeto cli2
STACK
HEAP
cli
[ Referencia
cli ]
objeto cli
[ Referencia
cli2 ]
objeto cli2
cli2
34
17
35
Argumento enviado
a la Funcin
36
18
Invocando al mtodo
(En el programa)
Nombre del
objeto
Nombre del
mtodo
Parmetros
37
Invocando mtodos
class Arbol
{
int Altura;
public void Podar( )
{
Console.WriteLine(Podando );
}
}
Arbol Pino = new Arbol(); // Se crea el objeto Pino
Pino.Podar(); //Se invoca el mtodo Podar() del
objeto Pino
38
19
mbito de
variables
40
20
mbito de variables en un
ciclo for
for(int x = 1; x<=10; x++)
{
Console.Write(x);
}
Console.Write(x);
41
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;
}
}
21
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;
}
}
43
22
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)
45
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();
}
}
46
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.
47
Constructor
48
24
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();
}
}
49
25
Ejemplo:
Sobrecarga de Constructor
class Persona
{
public string Nombre;
Constructores
public Persona()
{ Nombre = "Desconocido";
}
public Persona(string nombreDeLaPersona)
{ Nombre = nombreDeLaPersona;
}
}
class Programa
{
static void Main()
{
Persona unaPersona = new Persona();
System.Console.WriteLine(unaPersona.Nombre);
Persona otraPersona = new Persona("Ramon");
System.Console.WriteLine(otraPersona.Nombre);
System.Console.ReadLine();
Dos constructores
= Dos diferentes
formas de
crear objetos
}
}
51
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.
52
26
Destructor
53
Ejemplo de destructor
class Empleado
{
~Empleado()
{
System.Console.WriteLine("Se ha destruido el Empleado ");
}
}
54
27
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.
55
Destruccin de objetos
Se puede indicar en el programa cuando un objeto
deja de ser util, asignndole el valor null.
miObjeto = null
56
28
El Garbage Collector
(recolector de basura)
Se asegura que:
Los objetos son destruidos una sola vez
Se destruyan objetos que ya no son utilizados.
Trabaja cuando:
Hay poca memoria disponible
La aplicacin est finalizando
El programador lo invoca manualmente (NO recomendado):
System.GC.Collect()
57
Propiedades
58
29
Propiedades
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.
59
class Programa
{
static void Main()
{
Persona unaPersona = new Persona();
unaPersona.EstablecerEdad(25);
System.Console.WriteLine
("La edad es: " +
unaPersona.ConsultarEdad());
}
}
60
30
Implementando propiedades
con accesadores get, set
(Manera recomendada)
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);
}
}
61
Realizar
una
asignacin
provocara
un error
62
31
63
Convenciones de nomenclatura
de los componentes de un
proyecto en C# .NET
http://www.itnuevolaredo.edu.mx/takeyas/A
puntes/POO/Apuntes/02.CodingConventionsCSharp.pdf
64
32