Está en la página 1de 32

Programacin Orientada a Objetos con C#

Dr. Ramn Roque Hernndez


M.C. Bruno Lpez Takeyas 1
1
Programacin Orientada
a Objetos en C#
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
Unidad 2.- Clases y objetos
2.- Clases y objetos
2.1 Declaracin de clases: atributos, mtodos,
encapsulamiento.
2.2 Instanciacin de una clase.
2.3 Referencia al objeto actual.
2.4 Mtodos: declaracin, mensajes, paso de
parmetros, retorno de valores.
2.5 Constructores y destructores: declaracin
uso y aplicaciones.
2.6 Sobrecarga de mtodos.
2.7 Propiedades*
2
Programacin Orientada a Objetos con C#
Dr. Ramn Roque Hernndez
M.C. Bruno Lpez Takeyas 2
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
Programacin Orientada a Objetos con C#
Dr. Ramn Roque Hernndez
M.C. Bruno Lpez Takeyas 3
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 UM
Cada clase se representa en un
rectngulo con tres compartimentos:
Nombre
Atributos y propiedades
Mtodos
6
Programacin Orientada a Objetos con C#
Dr. Ramn Roque Hernndez
M.C. Bruno Lpez Takeyas 4
7
Cmo declarar !na clase
class nombre_de_la_clase
{
contenido de la clase

}
8
"entro 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.
Programacin Orientada a Objetos con C#
Dr. Ramn Roque Hernndez
M.C. Bruno Lpez Takeyas 5
9
Modi$icadores 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
10
Modi$icadores de acceso
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
Accesible desde
Programacin Orientada a Objetos con C#
Dr. Ramn Roque Hernndez
M.C. Bruno Lpez Takeyas 6
11
Ejemplo% &ariables con
Modi$icadores de acceso
class claseA
{
//Si no se indica, es private
int numero;
private int numero1;
public int numero2;
protected int numero3 = 99;
internal int numero4;
protected internal int numero5;
}
'epresentacin de
modi$icadores de acceso en
C# y UM
12
Modificador de
acceso
Codificacin en C# Representacin en
UML
Privado private
-
Pblico public
+
Protegido protected
#
Interno internal
~
Protegido interno protected internal
#
Programacin Orientada a Objetos con C#
Dr. Ramn Roque Hernndez
M.C. Bruno Lpez Takeyas 7
Miembros est(ticos y de
instancia
13
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.
Miembros est(ticos 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
Programacin Orientada a Objetos con C#
Dr. Ramn Roque Hernndez
M.C. Bruno Lpez Takeyas 8
"eclaracin de miembros
est(ticos
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
static void Main(string[] args)
{
Console.WriteLine(Tec Laredo);
}
15
Miembros Estticos
16
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).
Programacin Orientada a Objetos con C#
Dr. Ramn Roque Hernndez
M.C. Bruno Lpez Takeyas 9
Ejemplo de !na clase
class Persona
{
string Nombre;
// Campo de cada objeto que almacena su nombre
int Edad;
// Campo de cada objeto que almacena su edad
public void IncrementarEdad() // Incrementa la edad del objeto
{
Edad++;
}
}
17
18
Crear objetos%
)nstanciacin
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.
Ejemplo en dos pasos:
claseA miobjetoA;
miobjetoA = new claseA();
Ejemplo en un paso:
claseA miobjetoA = new claseA();
1. Definir el tipo de
miObjetoA
2. Adquirir memoria sin
inicializar para el nuevo
objeto usando new.
3. Ejecutar el constructor
para inicializar la memoria
y convertirla en un objeto
usable
Programacin Orientada a Objetos con C#
Dr. Ramn Roque Hernndez
M.C. Bruno Lpez Takeyas 10
Objetos en UM
En UML un objeto se representa como
un rectngulo con un nombre
subrayado
19
Persona
Automvil
CuentaBancaria
20
*ccediendo a los miembros
de los objetos
Asignacin:
miobjetoA . Numero2 = 50;
Lectura:
miOtraVariable = miobjetoA . Numero2;
Nombre
del objeto
Seleccin
Miembro
Programacin Orientada a Objetos con C#
Dr. Ramn Roque Hernndez
M.C. Bruno Lpez Takeyas 11
21
M+todos
22
M+todos
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)
Programacin Orientada a Objetos con C#
Dr. Ramn Roque Hernndez
M.C. Bruno Lpez Takeyas 12
M+todos
En C# las subrutinas se conocen como
mtodos, se codifican como parte de una
clase y se clasifican en
23
Subrutinas
Procedimientos NO devuelven valor
Funciones Devuelven un valor
,inta-is de los m+todos
24
< tipoValorDevuelto > < nombreMtodo > (< parmetros >)
{
< cuerpo >
}
Ejemplo:
void Saludo( )
{
Console.Write(Hola);
}
void significa que NO
devuelve valor (procedimiento)
Programacin Orientada a Objetos con C#
Dr. Ramn Roque Hernndez
M.C. Bruno Lpez Takeyas 13
25
Ejemplo de m+todo
(En la clase)
class Carro
{
public void Encender()
{
System.Console.WriteLine("El Auto se ha
encendido!");
}
}
Modificador
de acceso
Tipo de dato
del valor regresado
Identificador
Parmetros
lamadas a los m+todos
26
class Program
{
static void Main(string[] args)
{
Subrutina(); // Llamada
}
static void Subrutina( )
{
. . . // Codificacin
}
}
Programacin Orientada a Objetos con C#
Dr. Ramn Roque Hernndez
M.C. Bruno Lpez Takeyas 14
lamadas de
procedimientos
27
class Program
{
static void Main(string[] args)
{
Procedimiento(); // Llamada
}
static void Procedimiento( )
{
Console.Write(Tec Laredo);
return();// Fin del Procedimiento
}
}
El Procedimiento
NO devuelve
valor
28 28
M+todos .!e reciben
par(metros
Entre los parntesis se especifican una o mas variables
(separadas por comas) con sus respectivos tipos de datos.
Esas variables estarn accesibles dentro del mtodo.
public void CambiarEstado( string nuevoestado )
{
estado = nuevoestado;
}
Al momento de invocar el mtodo, se deben incluir esos valores
en la llamada:
miCarro.CambiarEstado(Apagado);
Dato
de
entrada
Programacin Orientada a Objetos con C#
Dr. Ramn Roque Hernndez
M.C. Bruno Lpez Takeyas 15
Par(metros recibidos por
los m+todos
29
Parmetros
Por valor Se enva una copia del valor de
la variable
Por referencia Se enva la direccin de la
variable
En/0o de par(metros por
/alor
30
class Program
{
static void Main(string[] args)
{
int x=10;
Subrutina( x ); // Se envia el valor de x
Console.Write(x=+x.ToString()); // x=10
}
static void Subrutina(int y)
{
y+=5;
Console.Write(y=+y.ToString()); // y=15
}
}
Programacin Orientada a Objetos con C#
Dr. Ramn Roque Hernndez
M.C. Bruno Lpez Takeyas 16
31
&ariables% Por /alor
Las variables de los tipos de datos bsicos (primitivos) se
crean en el STACK. Se dice que son manejados por valor.
No
definido
int num1;
STACK
num1
50
num1 = 50;
STACK
num1
En/0o de par(metros por
re$erencia
32
static void Main(string[] args)
{
int x = 10;
Rutina(ref x); // Se envia la referencia de x
Console.WriteLine("x=" + x); // x=15
Console.ReadKey();
}
static void Rutina(ref int y)
{
y += 5;
Console.WriteLine("\n\ny=" + y); // y=15
}
Programacin Orientada a Objetos con C#
Dr. Ramn Roque Hernndez
M.C. Bruno Lpez Takeyas 17
33
Objetos% Por re$erencia
Los objetos se crean en el HEAP. En el STACK solo se
guarda una referencia a la direccin del HEAP donde se
encuentran. Se dice que son manejados por referencia.
No
definido

Cliente cli;
STACK
cli
objeto cli
HEAP
[ Referencia
cli ]

cli = new Cliente();
STACK
cli
?
34
Objetos% Por re$erencia
objeto cli
objeto cli2
HEAP
[ Referencia
cli ]

[ Referencia
cli2 ]

Cliente cli2 = new Cliente();
STACK
cli
cli2
objeto cli
objeto cli2
HEAP
[ Referencia
cli ]

[ Referencia
cli2 ]

cli2 = cli;
STACK
cli
cli2
cli2 = cli solo copia las
referencias, no copia los
objetos.
El objeto cli2 queda sin
referencias hacia l .
Programacin Orientada a Objetos con C#
Dr. Ramn Roque Hernndez
M.C. Bruno Lpez Takeyas 18
35 35
M+todos .!e retornan /alores
El Tipo de dato del mtodo NO es void.
Dentro del mtodo debe haber una sentencia return con algn
valor del tipo de dato del mtodo.
Ejemplo (Al declararlo):
public string ConsultarEstado()
{
return estado;
}
Al llamar al mtodo (desde el programa):
string estado_actual = miCarro.ConsultarEstado();
lamadas de m+todos .!e
retornan /alor ($!nciones)
36
static void Main(string[ ] args)
{
double Radio = 10, Area;
Area = Funcion(Radio);
Console.WriteLine("Area=" + Area);
Console.ReadKey();
}
static double Funcion(double r)
{
return (Math.PI * r * r);
}
Valor devuelto por la
Funcin
Argumento enviado
a la Funcin
Variable
receptora
Programacin Orientada a Objetos con C#
Dr. Ramn Roque Hernndez
M.C. Bruno Lpez Takeyas 19
37
)n/ocando al m+todo
(En el programa)
Carro miCarro = new Carro();
miCarro.Encender();
Nombre del
objeto
Nombre del
mtodo
Parmetros
)n/ocando m+todos
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
Programacin Orientada a Objetos con C#
Dr. Ramn Roque Hernndez
M.C. Bruno Lpez Takeyas 20
1mbito de las /ariables
El mbito de una variable define dnde
puede usarse una variable
Una variable local declarada en un bloque
de programa, slamente puede ser usada
en ese bloque
El mbito de una variable tambin aplica a
los mtodos y a los ciclos for
39
1mbito de las /ariables
40
mbito de
variables
Locales Se declaran y utilizan dentro de un
contexto especfico. No se puede hacer
referencia a ellas fuera de la seccin de cdigo
donde se declara.
Globales Se declaran fuera del cuerpo de
cualquier mtodo
Programacin Orientada a Objetos con C#
Dr. Ramn Roque Hernndez
M.C. Bruno Lpez Takeyas 21
1mbito de /ariables en !n
ciclo $or
41
for(int x = 1; x<=10; x++)
{
Console.Write(x);
}
Console.Write(x);
42
t2is
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.
Programacin Orientada a Objetos con C#
Dr. Ramn Roque Hernndez
M.C. Bruno Lpez Takeyas 22
43
Ejemplos de m+todos
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;
}
}
44 44
Ejemplos de llamadas a los
m+todos
class Programa
{
static void Main()
{
Carro miCarro = new Carro();
miCarro.Encender();
System.Console.WriteLine(miCarro.ConsultarEstado());
miCarro.CambiarEstado("En marcha");
System.Console.WriteLine(miCarro.ConsultarEstado());
miCarro.Apagar();
System.Console.WriteLine(miCarro.ConsultarEstado());
System.Console.ReadLine();
}
}
Continuacin del ejemplo anterior (Clase Carro)
Programacin Orientada a Objetos con C#
Dr. Ramn Roque Hernndez
M.C. Bruno Lpez Takeyas 23
45
,obrecarga
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)
No es posible que 2 mtodos sobrecargados solo difieran en
el modificador static.
46 46
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();
}
}
Programacin Orientada a Objetos con C#
Dr. Ramn Roque Hernndez
M.C. Bruno Lpez Takeyas 24
47
M+todo Constr!ctor
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.
Constr!ctor
48
Programacin Orientada a Objetos con C#
Dr. Ramn Roque Hernndez
M.C. Bruno Lpez Takeyas 25
49
Ejemplo de constr!ctor
class Persona
{
public string Nombre;
public Persona()
{
Nombre = "Desconocido";
}
}
Constructor.
(notar que tiene
el mismo nombre
de la clase)
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();
}
}
50
Ejemplo de constr!ctor .!e
recibe par(metros
class Persona
{ public string Nombre;
public Persona(string nombreDeLaPersona)
{ Nombre = nombreDeLaPersona;
}
}
class Programa
{ static void Main()
{ Persona otraPersona = new Persona("Ramon");
System.Console.WriteLine(otraPersona.Nombre);
System.Console.ReadLine();
}
}
Se debe proporcionar el valor de los parmetros
al momento de la creacin del objeto.
Programacin Orientada a Objetos con C#
Dr. Ramn Roque Hernndez
M.C. Bruno Lpez Takeyas 26
51
Ejemplo%
,obrecarga de Constr!ctor
class Persona
{ public string Nombre;
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();
}
}
Constructores
Dos constructores
= Dos diferentes
formas de
crear objetos
52
M+todo "estr!ctor
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.
Programacin Orientada a Objetos con C#
Dr. Ramn Roque Hernndez
M.C. Bruno Lpez Takeyas 27
"estr!ctor
53
54
Ejemplo de destr!ctor
class Empleado
{
~Empleado()
{
System.Console.WriteLine("Se ha destruido el Empleado ");
}
}
Un destructor NO puede sobrecargarse, y se ejecuta cuando
el recolector de basura destruye el objeto.
Programacin Orientada a Objetos con C#
Dr. Ramn Roque Hernndez
M.C. Bruno Lpez Takeyas 28
55
"estr!ccin 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.
56
"estr!ccin 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.
Programacin Orientada a Objetos con C#
Dr. Ramn Roque Hernndez
M.C. Bruno Lpez Takeyas 29
57
El 3arbage Collector
(recolector de bas!ra)
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()
58
Propiedades
Programacin Orientada a Objetos con C#
Dr. Ramn Roque Hernndez
M.C. Bruno Lpez Takeyas 30
59
Propiedades
Son mecanismos para acceder a los valores (variables) que
poseen los objetos.
Algunos autores las consideran sinnimos de los datos, sin
embargo no siempre lo son (solamente en el caso de las
propiedades autoimplementadas).
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.
Declarando un mtodo de acceso a la variable
Empobrece la legibilidad del cdigo. Puede crear confusin.
Utilizando accesadores get{ } y set { } para las propiedades
Recomendado en C#
60
)mplementado propiedades con m+todos
de acceso
class Persona
{
private int edad;
public void EstablecerEdad(int a)
{
edad = a;
}
public int ConsultarEdad()
{
return edad;
}
}
class Programa
{
static void Main()
{
Persona unaPersona = new Persona();
unaPersona.EstablecerEdad(25);
System.Console.WriteLine
("La edad es: " +
unaPersona.ConsultarEdad());
}
}
Es la nica opcin en algunos lenguajes de programacin orientados a objetos.
En C#.NET existe otra manera mas recomendable.
Programacin Orientada a Objetos con C#
Dr. Ramn Roque Hernndez
M.C. Bruno Lpez Takeyas 31
61
)mplementando propiedades
con accesadores get4 set
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);
}
}
(Manera recomendada)
62
Propiedades de solo lect!ra
Si se desea que una propiedad sea de solo lectura,
solo se debe incluir get.
class Cuenta
{ private double _saldo=0;
public double Saldo
{
get { return _saldo; }
}
}
class Programa
{
static void Main()
{
Cuenta miCuenta = new Cuenta();
//miCuenta.Saldo = 32;
System.Console.WriteLine(miCuenta.Saldo);
System.Console.ReadLine();
}
}
Realizar
una
asignacin
provocara
un error
Programacin Orientada a Objetos con C#
Dr. Ramn Roque Hernndez
M.C. Bruno Lpez Takeyas 32
63
5i/el de acceso asim+trico en
las propiedades
Si una propiedad posee get y
set, entonces uno de los dos
puede tener un modificador de
acceso explcito.
El nivel de acceso explcito de get
o set debe ser mas restrictivo que
el usado en la propiedad a la que
pertenece.
No se pueden utilizar en interfaces
o implementacin de ellas.
class Empleado
{
private int _numero;
public int Numero
{ get
{
return _numero;
}
private set
{
_numero = value;
}
}
}
get sigue siendo public