03-Implementacion de Clases y Encapsulamiento en C Sharp
03-Implementacion de Clases y Encapsulamiento en C Sharp
03-Implementacion de Clases y Encapsulamiento en C Sharp
clases, Encapsulamiento
V1.0
Febrero 2014
Ferreiras
Encapsulamiento 1
C#: Implementación de Clases,
Encapsulamiento
• ..
Unidad No. 3
Encapsulamiento 2
Miembros de clases en C#
• En C#, los miembros de una clase pueden
ser:
• Properties, Indexers y Operators son conceptos
introducidos por C#.
• Constantes
• En el tema 21, “Aportaciones de MS en C# “ lo
• Variables o campos veremos.
• Constructores
• Destructores • Properties (C# Programming Guide)
http://msdn.microsoft.com/en-us/library/x9fsa0sw.aspx
• Propiedades
• Indexers (C# Programming Guide)
• Indexadores http://msdn.microsoft.com/en-us/library/6x16t2tx.aspx
Encapsulamiento 3
Implementación de clases
Encapsulamiento 4
Implementación de clases
Encapsulamiento 5
Implementación de clases
Encapsulamiento 6
Implementación de clases
Encapsulamiento 7
Implementación de clases
Encapsulamiento 8
Implementación de clases
• Estructura general de una clase simple
• Modificadores
• Controlan el acceso a la clase y determinan la visibilidad que
tendrán sus clientes ( los que usan la clase ) de sus miembros:
MODIFICADOR VISIBILIDAD
public Acceso total
protected El acceso está permitido a la clase que contiene el miembro y a
sus tipos derivados
internal El acceso está limitado al proyecto actual
protected internal El acceso esta limitado al proyecto actual y a los tipos derivados
de la clase que contiene el miembro.
private El acceso esta limitado al tipo de clase que contiene el miembro
Encapsulamiento 10
Implementación de clases
• Modificadores - continuación -
Forma la interfaz de
los objetos para
comunicarse con el
public: mundo exterior
Encapsulamiento 11
Implementación de clases
• Modificadores - continuación -
protected:
Encapsulamiento 12
Implementación de clases
• Modificadores - continuación -
1
• Otros modificadores en C# son:
• abstract, • readonly
• async, • sealed,
• const, • static,
• event, • unsafe,
• extern, • virtual,
• new, • volatile
• override,
• partial
Encapsulamiento 13
Implementación de clases
• Estructura general de una clase simple
• Modificadores - continuación -
Encapsulamiento 14
Implementación de clases
Encapsulamiento 15
Implementación de clases
• Estructura general de una clase simple
Encapsulamiento 16
Implementación de clases
• Estructura general de una clase simple
<modificador> class NombreClase {
...
}
Encapsulamiento 17
Implementación de clases
• Ya sea por defecto o declaradas por el
programador, cada definición de clase
contiene las operaciones para crear y
destruir sus objetos;
• Las operaciones para crear objetos están
definidas en métodos especiales de la
clase llamados constructores, los cuales
se diferencian de los otros métodos porque
tienen el mismo nombre de la clase
Encapsulamiento 18
Implementación de clases
• La función básica del constructor es
permitir inicializar las variables miembros
de un objeto de una clase en el momento
en que éste es creado.
• Los valores almacenados en cada variable
miembro definen lo que se llama el estado
del objeto.
Encapsulamiento 19
Implementación de clases
• Un constructor debe:
• Tener el mismo nombre de la clase.
• Ser public
• No tener ningún retorno, ni siquiera void.
• Puede haber más de un constructor en una clase.
• Para crear un objeto se utilizará la instrucción:
• NombreClase unObjeto = new NombreClase();
• NombreClase() Es el constructor, el cual podrá
tener o no tener parámetros para argumentos.
• Si no tiene parámetros es constructor por defecto (ver
más adelante)
Encapsulamiento 20
Implementación de clases
• Para crear un objeto la clase necesita usar
un constructor el cual podrá ser:
• Por defecto Suplido por el compilador ( el
constructor por defecto suplido por el compilador tiene
la forma NombreClase() ); Ó, Creado por el
desarrollador. Se caracteriza porque no tiene
parámetros para argumentos;
• Definido por el desarrollador.
• << A ver más adelante en el tema “Constructores y
destructores definidos por el programador” >>
• ...
Encapsulamiento 21
Implementación de clases
• El destructor de una clase:
• Contiene el código que se ha de ejecutar cuando un objeto de
dicha clase es destruido.
• Tiene el mismo nombre de la clase, precedido del carácter
especial "~".
• No retorna ningún tipo ( ni siquiera void ).
• La forma general es:
~ nombreClase( ) {
// código
}
Encapsulamiento 22
Implementación de clases
• El destructor puede ser ejecutado en cualquier momento después de
que la instancia de la clase deja de ser accesible (por ejemplo, cuando la
referencia se establece como null o queda fuera de ámbito).
• Ver más en
http://msdn.microsoft.com/es-es/library/66x5fx1b.aspx
Encapsulamiento 23
Implementación de clases
• Interfaz ( no interface ) de una clase
Encapsulamiento 24
Implementación de clases
interfase
Su implementación
está oculta a los
usuarios de la clase.
IMPLEMENTACIÓN Solo su desarrollador
(código fuente) lo conoce.
Encapsulamiento 25
Implementación de clases
• Gráficamente, la Objeto
interfaz:
Interfaz
operaciones
Cliente definidas en
la clase del
objeto
Un cliente de la clase
interactuando con un objeto
por medio de su interfaz. Datos
Encapsulamiento 26
Implementación de clases
• Al igual que las variables, los métodos pueden ser de
instancia o estáticos.
• Para acceder a los métodos, fuera de la clase, es
también igual que con las variables:
• Si es un método de instancia:
• NombreDelObjeto.nombreMetodo();
• Si es un método estático:
• NombreDeLaClase.nombreMetodo();
Encapsulamiento 27
Implementación de clases
• Los métodos estáticos tienen algunas
restricciones, a saber:
• Sólo pueden llamar a métodos
estáticos
• Solamente pueden acceder a campos
estáticos
• No pueden referirse a this.
Encapsulamiento 28
Implementación de clases
• Dentro de la clase, los métodos tienen
acceso a todas las variables miembro ( y
a otros métodos ) de la clase.
Encapsulamiento 29
Implementación de clases
• Estructura general de un archivo .cs con implementación de clases y
la Tester-class:
// Archivo.cs
class C1 { // .. }
class C1 { // .. }
class C1 { // .. }
...
// Tester-class
class NombreClaseTester {
Encapsulamiento 30
Ejemplo Encap0.cs
/*
Encap0.cs
*/
using System;
class Martillo {
~ Martillo() { // Es el destructor
Console.WriteLine("\n Se ha destruido un objeto");
}
} Encapsulamiento 31
Ejemplo Encap0.cs
Encap0.cs - continuación -
// Tester-class
class Encapsulamiento {
Encapsulamiento 32
Ejemplo Encap0.cs
Encap0.cs - continuación -
/*
EJECUCION
Se ha construido un objeto
Se ha destruido un objeto
Encapsulamiento 33
Ejemplo Encap0.cs
Encap0.cs - continuación -
++++++++++++++++++++++++++++++++++++++
NOTA No. 1
Encapsulamiento 34
Ejemplo Encap0.cs
Encap0.cs - continuación -
NOTA No. 2
*/
Encapsulamiento 35
Ejemplo Encapsulamiento0.cs
Ferreiras / C# / Implementación de clases / Encapsulamiento
Abanico
- marca: string
- color: string
- precio: double
+ abanicar(): void
+ setEstado( m: string, c: string, p: double): void
+ verEstado(): void
Encapsulamiento 36
Ejemplo Encapsulamiento0.cs
using System;
// Definición de la clase
class Abanico {
// miembros encapsulados
Encapsulamiento 37
Ejemplo Encapsulamiento0.cs
// miembros public o interfaz de la clase.
Encapsulamiento 38
Ejemplo Encapsulamiento0.cs
// Tester-class
class Encapsulamiento0 {
Encapsulamiento 39
Ejemplo Encapsulamiento0.cs
D:\Ferreiras2\C#, Mi Codigo C#>csc Encapsulamiento0.cs
Microsoft (R) Visual C# 2008 Compiler version 3.5.30729.1
for Microsoft (R) .NET Framework version 3.5
Copyright (C) Microsoft Corporation. All rights reserved.
Encapsulamiento 40
Ejemplo Encapsulamiento0a.cs
using System;
// Definición de la clase
class Abanico {
// miembros encapsulados
Encapsulamiento 41
Ejemplo Encapsulamiento0a.cs
// miembros public
Encapsulamiento 42
Ejemplo Encapsulamiento0a.cs
// Tester-class
class Encapsulamiento0 {
Encapsulamiento 43
Ejemplo Encapsulamiento0a.cs
D:\Ferreiras2\C#, Mi Codigo C#>csc Encapsulamiento0a.cs
Microsoft (R) Visual C# 2008 Compiler version 3.5.30729.1
for Microsoft (R) .NET Framework version 3.5
Copyright (C) Microsoft Corporation. All rights reserved.
El constructor por defecto
usó los valores de
D:\Ferreiras2\C#, Mi Codigo C#> Encapsulamiento0a
inicialización con los cuales
=> El abanico actual tiene el siguiente estado: se declararon las variables
miembros de la clase
Marca: UKRANIO
Color: ROJO
Precio: 12567.9
Encapsulamiento 44
Implementación de clases
• this Es una referencia implícita al
propio objeto.
• this Permite referirse, en el código de
una clase, al propio objeto o instancia de
dicha clase.
• this Si una variable local de un método
tiene el mismo nombre que un miembro de
la clase, entonces this permite ocultarlo.
Ver más en http://msdn.microsoft.com/es-es/library/dk1507sz.aspx
Encapsulamiento 45
Implementación de clases
• this No se puede usar en métodos
estáticos. Debido a que los métodos
miembro estatoc existen en el nivel de
clase y no como parte de un objeto, no
tienen un puntero this. Es un error hacer
referencia a this en un método estático.
• this Permite Pasar un objeto como
parámetro a otros métodos, por ejemplo,
para:
Encapsulamiento 46
Ejemplo This0.cs
/*
This0.cs
// Variables de instancia
public string autor = " Ferreiras "; // no es recomendable, debe ser private.
private int valor1 = 123;
private double valor2;
Encapsulamiento 47
Ejemplo This0.cs
This0.cs - continuación -
Obsérvese el uso del
// metodo auxiliar, solo puede ser accedido dentro de la clase + como “operador de
inserción” en el flujo de
private void B( double valor2) { salida stdout
Encapsulamiento 48
Ejemplo This0.cs
This0.cs - continuación -
// Tester-class
Vemos que se puede acceder al
class This0 { miembro public sin la necesidad
de un método en la interfaz de la
static void Main() { clase.
Encapsulamiento 49
Ejemplo This0.cs
* Valor1: 123
* valor1 = 123
* valor2 = 9556152.51035224
Ferreiras
++++++++++++++++++++++
Encapsulamiento 50
Revisitando conceptos
Encapsulamiento 51
variables de instancia Son declaradas
dentro de la clase ( es decir, una variable
miembro), pero no dentro de un método;
Es una variable de la cual cada objeto de la
clase tendrá una copia por separado y viven
en RAM durante la vida de éste.
Encapsulamiento 52
Una variable de instancia (también
llamada campo de instancia) es una
variable que se relaciona con una sola
instancia de una clase. Cada vez que una
instancia de una clase se crea, el sistema
crea una copia de las variables de instancia
relacionadas con esa clase.
Encapsulamiento 53
Por defecto, todas las variables se
crean como variables de instancia;
Encapsulamiento 54
Variable estática: Lo contrario
de una variable de instancia es una
variable estática, también
conocida como una variable de
clase. Una variable estática existe
en todas las instancias de una
clase.
Encapsulamiento 55
Método de instancia Es un método que
está asociado con un objeto y utiliza las
variables de instancia de ese objeto.
Encapsulamiento 56
Método de clase ( ó método static) Es
un método que pertenece a su clase, en
lugar de a un objeto de esa clase;
Mientras que un método de instancia
tiene acceso tanto a las variables de
instancia como a las variables de clase,
un método de clase sólo tiene acceso a
las variables de clase (variables static).
Encapsulamiento 57
Un método de clase se declara con el
modificador static, así, por ejemplo:
Encapsulamiento 58
En un método static La palabra clave
static adhiere el método a la clase, en
lugar de a los objetos de esa clase;
Para invocarlo, se hace con el nombre
de la clase, en lugar de un objeto de
ésta:
ClaseConMetodoStatic.metodoStatic();
Encapsulamiento 59
Dentro de un método, NO es posible
declarar variables static:
// Vichy0.cs No compila. El error
class Fofi {
reportado es: The
void Yiyo( double x) {
static double y = 0.0;
modifier 'static' is not
}
valid...
}
public class Vichy0 {
public static void Main() {
//...
}
}
Encapsulamiento 60
Cada instancia de la clase poblará sus datos
con valores particulares de sus atributos;
Encapsulamiento 61
Las operaciones de la clase pueden ser
invocadas por cada una de sus instancia;
Encapsulamiento 62
Ocultar los detalles de
implementación de una clase se
llama ocultamiento de
información o encapsulación;
Encapsulamiento 63
Encapsulación se refiere a la
combinación de los datos y las
operaciones en un objeto;
Ocultamiento de información se
refiere a la habilidad del objeto para
ocultar sus datos de código que esta
fuera del objeto;
Encapsulamiento 64
La encapsulación protege el estado
interno del objeto de ser corrompido por
sus clientes;
Encapsulamiento 65
El mecanismo de encapsulamiento
prevé que los valores de los atributos del
objeto puedan ser cambiados únicamente
por operaciones suplidas por el objeto
mismo;
El mecanismo de encapsulamiento
proporciona operaciones para acceder a los
valores de los atributos que el cliente
necesita cambiar;
Encapsulamiento 66
El estado del objeto no puede ser
modificado directamente por el cliente de
la clase;
Encapsulamiento 67
El código cliente no puede conocer la
implementación de las operaciones ni
tomar ventajas de ello;
Encapsulamiento 68
Funciones de acceso, mutadora y
utilidad
Encapsulamiento 70
encapsulación se refiere a la
combinación de los datos y las operaciones
en un objeto;
Encapsulamiento 71
La encapsulación protege el estado
interno del objeto de ser corrompido por sus
clientes;
Encapsulamiento 72
La encapsulación prevé que los valores
de los atributos del objeto puedan ser
cambiados únicamente por operaciones
suplidas por el objeto mismo;
La encapsulación proporciona
operaciones para acceder a los valores de
los atributos que el cliente necesita
cambiar;
Encapsulamiento 73
El encapsulamiento impide que el
estado del objeto no puede ser modificado
directamente por el cliente;
Encapsulamiento 74
El encapsulamiento impide que el
código cliente puede conocer la
implementación de las operaciones ni tomar
ventajas de ello;
Encapsulamiento 75
• El encapsulamiento en objetos se logra
usando modificadores en su clase, llamados
modificadores de visibilidad, debido a que
controlan el acceso a los miembros de la
clase.
• Las palabras reservadas public, private y
protected son modificadores de visibilidad
que se aplican a las variables y a los
métodos de las clases.
Encapsulamiento 76
Operaciones de acceso, de
transformación
Debido a que los datos son encapsulados
(private), toda clase debe proveer las
operaciones para accederlos y
modificarlos. Las operaciones de acceso
permiten acceder a los datos y las
operaciones de transformación permiten
cambiarlos.
Encapsulamiento 77
PROCESO PARA LA
IMPLEMENTACIÓN DE UNA
CLASE
1) A partir de la narrativa de la
declaración del problema, hacer el
proceso de “Encontrar objetos y Clases”.
Encapsulamiento 78
2) Hacer la notación UML de la clase
encontrada:
Nombre
atributos Estándar
operaciones
{ información Opcional
adicional }
Encapsulamiento 79
Los atributos son mapeados a
variables miembros de la clase;
Encapsulamiento 80
3) Hacer la definición de clase
Encapsulamiento 81
Por ejemplo:
La parte de la clase
class AsignacionNotas { que encapsula la
información que
private string nombre; almacenarán sus
private int nota; objetos.
private double indice;
La parte de la
public string getNombre(){ }
public void setNota(int n ){ }
clase que
public void calculaIndice( ){ } establece la
interfaz para sus
} usuarios.
Obsérvese que los métodos son
definidos completamente dentro de
la clase.
Encapsulamiento 82
cada instancia de la clase poblará sus datos
con valores particulares de sus atributos;
Encapsulamiento 83
las operaciones de la clase pueden ser
invocadas por cada una de sus instancia;
Encapsulamiento 84
Partes de una Clase C#
Inicio
bloque de
la clase
Especificador de acceso
a nivel de clases
class nombreDeLaClase {
Especificador de acceso
a nivel de miembros de la clase
Variables de instancia
Especificador de acceso
a nivel de miembros de la clase
Métodos
fin
bloque de
}
la clase
Encapsulamiento 85
Especificador de nombre de la
acceso a nivel de
Por ejemplo: la clase
clase
Variable
public class Libro {
Método
private int numeroPaginas;
Especificador de acceso
a nivel de miembros public void setPaginas( int num){
de la clase
numeroPaginas = num;
}
} Variable local al
método
Encapsulamiento 86
Los modificadores de acceso a nivel de
clase :
public
Significa que a la clase se puede acceder
desde cualquier lugar;
Encapsulamiento 87
Los modificadores de acceso a nivel de
miembros ( variables y métodos ) :
public
Significa que se le puede acceder desde
cualquier lugar; Es visible para todas las clases
en todas partes.
Si no tiene modificador
Significa que solo se le puede acceder en
el mismo archivo .
Encapsulamiento 88
private
Significa que puede ser accedido solamente
por miembros de la misma clase, en su misma
clase; Solo puede ser accedido en su propia
clase;
protected
Significa que se le puede acceder desde el
mismo package o desde cualquier subclase (
clase derivada) de su clase, existente en
cualquier otro package.
Encapsulamiento 89
En resumen:
Encapsulamiento 90
class Es una palabra reservada de C#, la cual
comunica al intérprete que se definirá una nueva
clase ; Todo el quehacer de C# esta en una class;
Encapsulamiento 91
Método constructor Es un método
especial que se utiliza para inicializar
las variables miembro de un objeto
recién creado. Es la forma correcta
para definir el estado inicial de un
objeto.
Encapsulamiento 92
Un Método constructor Se caracteriza
porque:
Encapsulamiento 93
Por ejemplo (definición) :
Constructor con
public Libro( int paginas) { parámetros para
numeroPaginas = paginas; argumentos
Encapsulamiento 94
Por ejemplo (uso) :
Construye, crea un
Libro unLibro = new Libro(); objeto Libro con
valores por defecto.
Construye, crea un
objeto Libro con
valores
especificados como
argumentos del
constructor
Encapsulamiento 95
Si un constructor no es definido para la
clase, C# usa su constructor implícito por defecto para
inicializar las variables a sus valores por defecto:
Encapsulamiento 96
Sobrecarga de Constructores La clase
puede tener cualquier cantidad de
constructores. Para diferenciarlo el
compilador se basa en los tipos, la cantidad
y el orden de los parámetros:
Libro() { ... }
Libro(int x) { ... }
Libro( String c, double p, int z) { ... }
Encapsulamiento 97
Cuando un objeto es construido,
ocurren las siguientes acciones:
Todas las variables de instancia son inicializadas con
0, false o null;
Los inicializadores y los bloques de inicialización son
ejecutados en el orden en el cual fueron declarados;
El cuerpo del constructor es invocado;
Encapsulamiento 98
Método auxiliar Es un método que es
exclusivo a la clase; Solo otros métodos en la
misma clase lo pueden invocar. No están
destinado para prestar servicios directamente
a clientes fuera de la clase. Se declara con el
modificador private:
private tipoDeRetorno nombreDelMetodo( lista par){
// cuerpo
}
Encapsulamiento 99
{ y } Las llaves, Indican el inicio y el
final del cuerpo de la clase.
// Cuerpo de la clase
Encapsulamiento 100
Organización de los miembros
La organización (recomendada) de las
partes de una clase es como sigue:
Las variables miembros al principio, antes que los métodos;
Los métodos son organizados así, en ese orden:
▪ constructores
▪ métodos generales ( acceso y cambio )
▪ métodos estáticos
▪ métodos private ( si los hay )
▪ método Main ( si hay uno en el archivo ) de ultimo.
Encapsulamiento 101
Uso de la clase: Creación de
objetos
Variable primitiva: Almacenan valores de los
tipos primitivos de java, esto es, valores tipo byte,
short, int, long, float, double, char, bool, que les son
asignados.
Variable objeto: Almacena una referencia a un
objeto, esto es, almacena la dirección del objeto al
que se refiere, es también llamada “puntero al
objeto”.
Encapsulamiento 102
instanciación Es el acto de la creación de un
objeto mediante el operador new. Un objeto se
dice que es una instancia de una clase en
particular. El operador new crea el objeto, usando
el constructor apropiado, y retorna su referencia
(una dirección en RAM) que es almacenada en la
variable objeto. La variable objeto es un sinónimo,
un alias, del objeto.
Encapsulamiento 103
Construye, crea un objeto
Por ejemplo : Libro con valores por
defecto.
Encapsulamiento 104
La variable Objeto se puede considerar
como un puntero a la ubicación en la
memoria donde se encuentre el objeto:
“Felix Ferreiras”
nombre
Encapsulamiento 105
Accesando Después de que el objeto
ha sido construido, el operador de punto
es usado para acceder a sus métodos de
instancia:
variableObjeto.metodoDeInstancia( );
Encapsulamiento 106
Referencias
• Classes and Structs (C# Programming Guide)
http://msdn.microsoft.com/en-us/library/ms173109.aspx
• Visual C# Language
http://msdn.microsoft.com/en-us/library/aa287558(v=vs.71).aspx
• Head First C#; Andrew Stellman and Jennifer Greene ; Second Edition; O’Reilly Media, 2010.
• Desarrollo de aplicaciones .NET con Visual C#; Miguel Rodríguez Gómez-Stern, Marcos Antonio Besteiro
Gorostizaga; McGra2-Hill/Interamericana de España, S.A.U., 2002.
• ...
Encapsulamiento 107