Está en la página 1de 32

Programacin Orientada a Objetos con C#

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

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

Dr. Ramn Roque Hernndez M.C. Bruno Lpez Takeyas

Programacin Orientada a Objetos con C#

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

Dr. Ramn Roque Hernndez M.C. Bruno Lpez Takeyas

Programacin Orientada a Objetos con C#

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

Dr. Ramn Roque Hernndez M.C. Bruno Lpez Takeyas

Programacin Orientada a Objetos con C#

Cmo declarar !na clase


class nombre_de_la_clase { contenido de la clase }

"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.
8

Dr. Ramn Roque Hernndez M.C. Bruno Lpez Takeyas

Programacin Orientada a Objetos con C#

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

Modi$icadores 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 protected internal public

SI

SI

SI

NO

NO

SI

SI

SI

SI

NO

SI

SI

SI

SI

SI 10

Dr. Ramn Roque Hernndez M.C. Bruno Lpez Takeyas

Programacin Orientada a Objetos con C#

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; }

11

'epresentacin de modi$icadores de acceso en C# y UM


Modificador de acceso Privado Pblico Protegido Interno Protegido interno Codificacin en C# Representacin en UML

private public protected internal protected internal

+ # ~ #
12

Dr. Ramn Roque Hernndez M.C. Bruno Lpez Takeyas

Programacin Orientada a Objetos con C#

Miembros est(ticos 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 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

Dr. Ramn Roque Hernndez M.C. Bruno Lpez Takeyas

Programacin Orientada a Objetos con C#

"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 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

Dr. Ramn Roque Hernndez M.C. Bruno Lpez Takeyas

Programacin Orientada a Objetos con C#

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

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.
1.

Ejemplo en dos pasos:


claseA miobjetoA; miobjetoA = new claseA();

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

claseA miobjetoA = new claseA();


18

Dr. Ramn Roque Hernndez M.C. Bruno Lpez Takeyas

Programacin Orientada a Objetos con C#

Objetos en UM
En UML un objeto se representa como un rectngulo con un nombre subrayado
Automvil Persona CuentaBancaria

19

*ccediendo a los miembros de los objetos


Asignacin: miobjetoA . Numero2 = 50;
Nombre del objeto Seleccin Miembro

Lectura: miOtraVariable = miobjetoA . Numero2;


20

Dr. Ramn Roque Hernndez M.C. Bruno Lpez Takeyas

10

Programacin Orientada a Objetos con C#

M+todos

21

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)
22

Dr. Ramn Roque Hernndez M.C. Bruno Lpez Takeyas

11

Programacin Orientada a Objetos con C#

M+todos
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

,inta-is de los m+todos


< tipoValorDevuelto > < nombreMtodo > (< parmetros >) { < cuerpo > void significa que NO } devuelve valor (procedimiento)

Ejemplo: void Saludo( ) { Console.Write(Hola); }


24

Dr. Ramn Roque Hernndez M.C. Bruno Lpez Takeyas

12

Programacin Orientada a Objetos con C#

Ejemplo de m+todo (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

lamadas a los m+todos


class Program { static void Main(string[] args) { Subrutina(); // Llamada } static void Subrutina( ) { . . . // Codificacin } }
26

Dr. Ramn Roque Hernndez M.C. Bruno Lpez Takeyas

13

Programacin Orientada a Objetos con C#

lamadas 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

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 ) Dato { de estado = nuevoestado; entrada }

Al momento de invocar el mtodo, se deben incluir esos valores en la llamada:

miCarro.CambiarEstado(Apagado);
28

Dr. Ramn Roque Hernndez M.C. Bruno Lpez Takeyas

14

Programacin Orientada a Objetos con C#

Par(metros recibidos por los m+todos

Por valor Se enva una copia del valor de la variable

Parmetros
Por referencia Se enva la direccin de la variable

29

En/0o de par(metros por /alor


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 } }
30

Dr. Ramn Roque Hernndez M.C. Bruno Lpez Takeyas

15

Programacin Orientada a Objetos con C#

&ariables% Por /alor


Las variables de los tipos de datos bsicos (primitivos) se crean en el STACK. Se dice que son manejados por valor.
int num1;

num1 = 50;

STACK

STACK

num1

No definido

num1

50

31

En/0o de par(metros por re$erencia


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 }

32

Dr. Ramn Roque Hernndez M.C. Bruno Lpez Takeyas

16

Programacin Orientada a Objetos con C#

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.
Cliente cli; cli = new Cliente();

STACK

STACK

HEAP

cli

No definido

cli

[ Referencia cli ]

objeto cli

33

Objetos% Por re$erencia


Cliente cli2 = new Cliente();

cli2 = cli solo copia las referencias, no copia los objetos.

STACK

HEAP El objeto cli2 queda sin referencias hacia l .


cli2 = cli;

cli

[ Referencia cli ] [ Referencia cli2 ]

objeto cli

objeto cli2

cli2

STACK

HEAP

cli

[ Referencia cli ] [ Referencia cli2 ]

objeto cli

objeto cli2

cli2

34

Dr. Ramn Roque Hernndez M.C. Bruno Lpez Takeyas

17

Programacin Orientada a Objetos con C#

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();

35

lamadas de m+todos .!e retornan /alor ($!nciones)


static void Main(string[ ] args) { double Radio = 10, Area; Area = Funcion(Radio); Console.WriteLine("Area=" + Area); Variable receptora Console.ReadKey(); } static double Funcion(double r) { return (Math.PI * r * r); }
Argumento enviado a la Funcin

Valor devuelto por la Funcin

36

Dr. Ramn Roque Hernndez M.C. Bruno Lpez Takeyas

18

Programacin Orientada a Objetos con C#

)n/ocando al m+todo (En el programa)

Carro miCarro = new Carro(); miCarro.Encender();

Nombre del objeto

Nombre del mtodo

Parmetros

37

)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

Dr. Ramn Roque Hernndez M.C. Bruno Lpez Takeyas

19

Programacin Orientada a Objetos con C#

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

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

40

Dr. Ramn Roque Hernndez M.C. Bruno Lpez Takeyas

20

Programacin Orientada a Objetos con C#

1mbito de /ariables en !n ciclo $or


for(int x = 1; x<=10; x++) { Console.Write(x); } Console.Write(x);

41

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.
42

Dr. Ramn Roque Hernndez M.C. Bruno Lpez Takeyas

21

Programacin Orientada a Objetos con C#

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; } }
43

Ejemplos de llamadas a los m+todos


Continuacin del ejemplo anterior (Clase Carro)
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(); } }
44

Dr. Ramn Roque Hernndez M.C. Bruno Lpez Takeyas

22

Programacin Orientada a Objetos con C#

,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.

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

Dr. Ramn Roque Hernndez M.C. Bruno Lpez Takeyas

23

Programacin Orientada a Objetos con C#

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.
47

Constr!ctor

48

Dr. Ramn Roque Hernndez M.C. Bruno Lpez Takeyas

24

Programacin Orientada a Objetos con C#

Ejemplo de constr!ctor
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

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.


50

Dr. Ramn Roque Hernndez M.C. Bruno Lpez Takeyas

25

Programacin Orientada a Objetos con C#

Ejemplo% ,obrecarga de Constr!ctor


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

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.

52

Dr. Ramn Roque Hernndez M.C. Bruno Lpez Takeyas

26

Programacin Orientada a Objetos con C#

"estr!ctor

53

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.

54

Dr. Ramn Roque Hernndez M.C. Bruno Lpez Takeyas

27

Programacin Orientada a Objetos con C#

"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.
55

"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.

56

Dr. Ramn Roque Hernndez M.C. Bruno Lpez Takeyas

28

Programacin Orientada a Objetos con C#

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()

57

Propiedades

58

Dr. Ramn Roque Hernndez M.C. Bruno Lpez Takeyas

29

Programacin Orientada a Objetos con C#

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#
59

)mplementado propiedades con m+todos de acceso


Es la nica opcin en algunos lenguajes de programacin orientados a objetos. En C#.NET existe otra manera mas recomendable.
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()); } }

60

Dr. Ramn Roque Hernndez M.C. Bruno Lpez Takeyas

30

Programacin Orientada a Objetos con C#

)mplementando propiedades con accesadores get4 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

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


62

Dr. Ramn Roque Hernndez M.C. Bruno Lpez Takeyas

31

Programacin Orientada a Objetos con C#

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.
get sigue siendo public
class Empleado { private int _numero; public int Numero { get { return _numero; } private set { _numero = value; } } }

63

Dr. Ramn Roque Hernndez M.C. Bruno Lpez Takeyas

32

También podría gustarte