03-Implementacion de Clases y Encapsulamiento en C Sharp

Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 107

C#: Implementación de

clases, Encapsulamiento
V1.0
Febrero 2014
Ferreiras

Encapsulamiento 1
C#: Implementación de Clases,
Encapsulamiento
• ..

Unidad No. 3

Implementación de 1. Encapsulamiento: Implementación usando los


clases: Encapsulamiento constructores y destructores por defecto del
compilador;
2. Constructores y destructores definidos por el
programador;
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.

• Métodos • Ver en estos links: 

• 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

• Operadores. • Operators (C# Programming Guide)


http://msdn.microsoft.com/en-us/library/ms173145.aspx

Encapsulamiento 3
Implementación de clases

• Es la escritura del código de la clase


diseñada y su uso y/o prueba en una
Tester Class.
• Se puede hacer todo en un mismo
archivo .cs, ó en librerías .DLL
mediante los namespace.

Encapsulamiento 4
Implementación de clases

 Provee una plantilla para la creación de


objetos;
 Establece qué tipos de datos se utilizaran
para representar los atributos;
 Implementa los métodos que
representarán las operaciones de los
objetos que representa;

Encapsulamiento 5
Implementación de clases

• A partir de la clase diseñada:

 Mapear los atributos a variables


miembros de la clase;

 Mapear los comportamientos a


funciones miembros de la clase,
llamadas métodos, en C#;

Encapsulamiento 6
Implementación de clases

• Los atributos de los objetos se convierten en


atributos de la clase que los agruparán y se
mapean a variables miembro de la clase;

• Las acciones (operaciones u comportamiento)


de los objetos se convierten en acciones de la
clase que los agrupará y se mapean a métodos
miembros de la clase

Encapsulamiento 7
Implementación de clases

• Estructura general de una clase simple

<modificador> class NombreClase {

// Declaración de constantes ( si hay )


// Declaración de las variables miembro
// Declaración de los métodos miembro
}

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

• Un miembro que no tiene un modificador de acceso es, por


defecto, private. Encapsulamiento 9
Implementación de clases
• Modificadores - continuación -
Encapsula la
información que
private: almacenaran los
objetos

• El miembro puede ser accedido


sólo por los métodos miembro;
• Esta especificado por defecto;

Encapsulamiento 10
Implementación de clases
• Modificadores - continuación -

Forma la interfaz de
los objetos para
comunicarse con el
public: mundo exterior

• Fuera de la clase, el miembro puede ser


accedido con un objeto de la clase:
unObjetoDeLaClase.miembro;

Encapsulamiento 11
Implementación de clases
• Modificadores - continuación -

protected:

• Lo mismo que para private;


• También las funciones miembros lo
pueden acceder;
[ A ver Más detalles en el tema de
herencia ]

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

1: Ver Modifiers (C# Reference) en


http://msdn.microsoft.com/en-us/library/6tcf2h8w.aspx

Encapsulamiento 13
Implementación de clases
• Estructura general de una clase simple

• Modificadores - continuación -

• En esta parte del curso sólo serán de interés


los modificadores private y public.

• En el tema de herencia veremos el uso de


los modificadores protected, abstract y
sealed.

Encapsulamiento 14
Implementación de clases

• Estructura general de una clase simple

• Las variables miembro mapean los atributos y


de la clase;

• Las variables miembro deben ser private, para


cumplir con el principio de encapsulamiento de
la TOO.

Encapsulamiento 15
Implementación de clases
• Estructura general de una clase simple

• Las variables miembro de una clase son caracterizadas


como:
• Variable de instancias
Cada objeto de la clase contiene su propia copia.
Para acceder a ellas, fuera de la clase, se requiere de un
objeto de la clase
• Variable estática
• Son compartidas por todos los objetos de la clase
• No requieren de un objeto de la clase para acceder a ellas.
• Para acceder a ellas, fuera de la clase, únicamente es
necesario especificar el nombre de la clase seguido del
operador de punto y del nombre de la variable:
NombreDeLaClase.variableEstatica;

Encapsulamiento 16
Implementación de clases
• Estructura general de una clase simple
<modificador> class NombreClase {

// Declaración de las variables miembro Los Atributos


private T variable1; Mapean a de los
private T variable2; variables miembros objetos
...
// Declaración de los métodos miembro
public tipoRetorno metodo1( T par1, T par2, ...) {
// cuerpo del método Las acciones
} Mapean a de los
funciones miembros
objetos
public tipoRetorno metodo2( Tpar3, Tpar2, ... ) {
// cuerpo del método
}

...
}

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
}

• Siempre se ejecuta cuando la clase no se puede acceder en RAM


por ninguna referencia.

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

• El destructor es llamado por el recolector de basura cuando un objeto


va a ser destruido.

• Una clase solo puede tener un destructor

• En este curso dejaremos que el recolector de basura sea quien llame


de manera automática al destructor. Esto es, no escribiremos código
para el destructor de las clases.

• 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

• Esta constituida por el conjunto de sus métodos que son public :


<modificador> class NombreClase {

// Declaración de las variables miembro • Es la interfaz de la clase.


private T variable1;
private T variable2;
... • No es lo mismo que interface
( a ver más adelante )
// Declaración de los métodos miembro

public tipoRetorno metodo1( T par1, T par2, ...) {


// cuerpo del método
}

public tipoRetorno metodo2( Tpar3, Tpar2, ... ) {


// cuerpo del método
}
...

Encapsulamiento 24
Implementación de clases

• La interfaz de una clase :


Puede ser vista y usada por los
clientes de la clase

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.

• Fuera de la clase, a los miembros


encapsulados sólo se puede acceder por
los métodos de la interfaz 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 {

static void Main( ) { // ó Main( string [ ] args )


// Cuerpo de Main
}

Encapsulamiento 30
Ejemplo Encap0.cs
/*
Encap0.cs

Ferreiras / C#/ Implementación de clases, encapsulamiento / Destructores en C#

*/

using System;

class Martillo {

private double valor = 0.00456e+02;

public Martillo() { // Es el constructor, ver NOTA No. 1


Console.WriteLine("\n Se ha construido un objeto");
}

~ Martillo() { // Es el destructor
Console.WriteLine("\n Se ha destruido un objeto");
}

public double getValor() { return valor; }

} Encapsulamiento 31
Ejemplo Encap0.cs
Encap0.cs - continuación -

// Tester-class

class Encapsulamiento {

static void Main() {


Martillo objetoMartillo = new Martillo();
// objetoMartillo = null; // Hacer esto y ver lo que ocurre. Ver NOTA No. 2
// Console.Write( objetoMartillo.getValor() );
}
}

Encapsulamiento 32
Ejemplo Encap0.cs
Encap0.cs - continuación -

/*

EJECUCION

D:\Ferreiras2\C#, Mi Codigo C#> Encap0

Se ha construido un objeto

Se ha destruido un objeto

D:\Ferreiras2\C#, Mi Codigo C#>

Encapsulamiento 33
Ejemplo Encap0.cs
Encap0.cs - continuación -

++++++++++++++++++++++++++++++++++++++

NOTA No. 1

Si el constructor NO ES public se genera este ERROR:

Encap0.cs(30,28): error CS0122: 'Martillo.Martillo()' is inaccessible due to its protection level

Encap0.cs(14,4): (Location of symbol related to previous error)

Encapsulamiento 34
Ejemplo Encap0.cs
Encap0.cs - continuación -

NOTA No. 2

a) Compila sin errores Es el


ERROR
D:\Ferreiras2\C#, Mi Codigo C#>csc Encap0.cs generado
Microsoft (R) Visual C# 2008 Compiler version 3.5.30729.1
for Microsoft (R) .NET Framework version 3.5
cuando el
Copyright (C) Microsoft Corporation. All rights reserved. código usa
una
b) En tiempo de ejecución corre hasta que llega al uso de una referencia null referencia
D:\Ferreiras2\C#, Mi Codigo C#> Encap0 null

Se ha construido un objeto < a partir de aquí se genera la pantalla de error >

Unhandled Exception: System.NullReferenceException: Object reference not set to


an instance of an object at Encapsulamiento.Main()

D:\Ferreiras2\C#, Mi Codigo C#>

*/

Encapsulamiento 35
Ejemplo Encapsulamiento0.cs
Ferreiras / C# / Implementación de clases / Encapsulamiento

Hacer la abstracción de un abanico, diseñar la clase escribiendo su notación


UML, implementarla y probarla. Todo en un mismo archivo .cs

La notación UML de la clase diseñada es ( con un mínimo de


funcionalidades ): 

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

private string marca ;


private string color;
private double precio ; Obsérvese que no están
inicializadas estas variables.

Encapsulamiento 37
Ejemplo Encapsulamiento0.cs
// miembros public o interfaz de la clase.

public void abanicar( ) {


Console.WriteLine( "\n\t => Y estoy echando fresco, buuuuuuuuuuu" );
}

public void setEstado(string m, string c, double p) {


marca = m;
color = c;
precio = p;
}

public void verEstado() {


Console.WriteLine( "\n\t=> El abanico actual tiene el siguiente estado: \n");
Console.WriteLine( "\t Marca: {0} \n\t Color: {1} \n\t Precio: {2}" , marca, color, precio );
}

} // fin clase Abanico

Encapsulamiento 38
Ejemplo Encapsulamiento0.cs
// Tester-class

class Encapsulamiento0 {

static void Main() {

// Instanciación de la clase o creación de un objeto usando el constructor por defecto


// suplido por el compilador.

Abanico unAbanico = new Abanico(); // Abanico() es el constructor por defecto


// Acceso al estado del objeto (valores almacenados en las variables miembro de la clase)
unAbanico.verEstado();
// Cambio del estado actual con una función mutadora
unAbanico.setEstado("KDK", "Blanco", 1345.56);
unAbanico.verEstado();
unAbanico.abanicar();
}

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.

D:\Ferreiras2\C#, Mi Codigo C#> Encapsulamiento0 Estos son valores suplidos


por el constructor por
=> El abanico actual tiene el siguiente estado:
defecto del compilador, si
Marca: las variables miembro no
Color: están inicializadas.
Precio: 0

=> El abanico actual tiene el siguiente estado:


Estos son valores que
Marca: KDK fueron establecidos con el
Color: Blanco método setEstado()
Precio: 1345.56

=> Y estoy echando fresco, buuuuuuuuuuu

D:\Ferreiras2\C#, Mi Codigo C#>

Encapsulamiento 40
Ejemplo Encapsulamiento0a.cs
using System;

// Definición de la clase

class Abanico {

// miembros encapsulados

private string marca = "UKRANIO";


private string color = "ROJO";
private double precio = 12567.90 ; • Obsérvese ahora que las
variables miembro están
inicializadas.
• Estos valores serán
usados por el constructor
por defecto suplido por el
compilador.

Encapsulamiento 41
Ejemplo Encapsulamiento0a.cs
// miembros public

public void abanicar( ) {


Console.WriteLine( "\n\t => Y estoy echando fresco, buuuuuuuuuuu" );
}

public void setEstado(string m, string c, double p) {


marca = m;
color = c;
precio = p;
}

public void verEstado() {


Console.WriteLine( "\n\t=> El abanico actual tiene el siguiente estado: \n");
Console.WriteLine( "\t Marca: {0} \n\t Color: {1} \n\t Precio: {2}" , marca, color, precio );
}

} // fin clase Abanico

Encapsulamiento 42
Ejemplo Encapsulamiento0a.cs
// Tester-class

class Encapsulamiento0 {

static void Main() {

// Instanciacion de la clase o creacion de un objeto

Abanico unAbanico = new Abanico(); // usa constructor suplido por el compilador.


// Acceso al estado del objeto (valores almacenados en las variables miembro de la clase)
unAbanico.verEstado();
// Cambio del estado actual con una función mutadora
unAbanico.setEstado("KDK", "Blanco", 1345.56);
unAbanico.verEstado();
unAbanico.abanicar();
}

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

=> El abanico actual tiene el siguiente estado:


Estos son valores que
fueron establecidos con el
Marca: KDK método setEstado()
Color: Blanco
Precio: 1345.56

=> Y estoy echando fresco, buuuuuuuuuuu

D:\Ferreiras2\C#, Mi Codigo C#>

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

Ferreiras / C# / Encapsulamiento / El uso de this

*/ Esta variable es public solo para mostrar que


fuera de la clase se puede acceder con un
using System;
objeto de la clase, esto es, no requiere un
class A { método de la interfaz de la clase.

// Variables de instancia
public string autor = " Ferreiras "; // no es recomendable, debe ser private.
private int valor1 = 123;
private double valor2;

public A() { // Constructor por defecto


// El objeto a ser construido llama el metodo auxiliar B
this.B( 3.34);
}

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

// asigna a la variable de instancia valor2 el nuevo valor


this.valor2 = Math.Pow( valor1, valor2 );
// lee la variable de instancia valor1 en el objeto actual
Console.WriteLine("\nEl metodo B ha sido llamado: " + this.valor2);
Console.WriteLine("\n* Valor1: " + valor1);
Console.WriteLine("\nEl estado actual del objeto es:\n\n\t" +
"* valor1 = " + valor1 +
"\n\n\t* valor2 = " + this.valor2 ); // ver NOTA No.1
}
}

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.

A unObjeto = new A();


Console.WriteLine("\n" + unObjeto.autor);
}
}

Encapsulamiento 49
Ejemplo This0.cs

D:\Ferreiras2\C#, Mi Codigo C#> This0

El metodo B ha sido llamado: 9556152.51035224

* Valor1: 123

El estado actual del objeto es:

* valor1 = 123

* valor2 = 9556152.51035224

Ferreiras

D:\Ferreiras2\C#, Mi Codigo C#>

++++++++++++++++++++++

NOTA No. 1: Si no es this.valor2 se muestra * valor2 = 3.34


( A ver si usted se puede autoexplicar eso al profesor)

Encapsulamiento 50
Revisitando conceptos

• Esto significa que a partir de aquí usted


encontrarás conceptos que ya han sido
tratados en diapositivas anteriores.

• No obstante, están expuesto de otra forma y


podrían ayudarle en su entendimiento.

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;

 Se recomienda Que todas las


variables de instancias sean private,
para garantizar el encapsulamiento
de la información, uno de los
prinicipios básicos de la TOO;

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.

Lo contrario de un método de instancia es


un método estático, También conocido
como método de la clase; Por defecto, un
método es un método de instancia.

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:

public static tipoDeRetorno metodoStatic(lista de parametros){


// cuerpo del método
}

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;

 En cualquier momento una clase tiene cero o


más instancias;

 La afiliación de clase de un objeto no cambia


durante su vida útil;

Encapsulamiento 61
 Las operaciones de la clase pueden ser
invocadas por cada una de sus instancia;

 Usualmente, las clases son estáticas, su


existencia, semántica y relaciones están
definidas antes de la ejecución del
programa;

 Los objetos son dinámicos, pueden ser


creados y destruidos durante la ejecución del
programa ;

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;

 La encapsulación protege el código


del cliente de que se vea afectado por
cambios en la representación interna de
un objeto;

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;

 el código cliente puede usar


únicamente las operaciones
proporcionadas en la interfaz de la
clase;

Encapsulamiento 67
 El código cliente no puede conocer la
implementación de las operaciones ni
tomar ventajas de ello;

 El código cliente no será afectado


por cambios en la implementación;

Encapsulamiento 68
Funciones de acceso, mutadora y
utilidad

 Funciones de acceso: Proporcinan acceso a


los miembros datos privados de un objeto;

 Funciones mutadoras: Proporcinan una


forma para cambiar el estado de un objeto;

 Funciones de utilidad: Son de tipo private y


permiten realizar operaciones domésticas dentro
de la misma clase.
Encapsulamiento 69
 Encapsulamiento Es el proceso de
ocultar detalles de implementación,
mientras se publica una interfaz.

 Ocultar los detalles de implementación


de una clase se llama ocultamiento de
información o encapsulación;

Encapsulamiento 70
 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 71
 La encapsulación protege el estado
interno del objeto de ser corrompido por sus
clientes;

 La encapsulación protege el código del


cliente de que se vea afectado por cambios
en la representación interna de un objeto;

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;

 El encapsulamiento garantiza que el


código cliente puede usar únicamente las
operaciones proporcionadas en la
interfase;

Encapsulamiento 74
 El encapsulamiento impide que el
código cliente puede conocer la
implementación de las operaciones ni tomar
ventajas de ello;

 El encapsulamiento garantiza que el


código cliente no será afectado por
cambios en la implementación

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;

 Las operaciones (acciones)son


mapeadas como métodos de la
clase

Encapsulamiento 80
3) Hacer la definición de clase

<< Según la estructura general de


una clase, ya antes vista >>

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;

 en cualquier momento una clase tiene cero o


mas instancias;

 la afiliación de clase de un objeto no cambia


durante su vida útil;

Encapsulamiento 83
 las operaciones de la clase pueden ser
invocadas por cada una de sus instancia;

 usualmente, las clases son estáticas, su


existencia, semántica y relaciones están
definidas antes de la ejecución del programa;

 los objetos son dinámicos, pueden ser


creados y destruidos durante la ejecución del
programa ;

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;

Si la clase no tiene modificador


Significa que a la clase solo se puede
acceder en el mismo archivo.

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:

Misma Mismo otros


Subclase
Modificador de clase Package packages
acceso
public S S S S
protected S S S N
no access
S S N N
modifier
private S N N N

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;

nombreDeLaClase Es el nombre de la clase y


debe ser descriptivo de ésta; Suele ser muy
largo, muy laaaargo, en C#; Se escribe como
mostrado, esto es, al estilo “camellado”. Por
ejemplo:
ClaseVerLimitesTipoPrimitivo

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:

 Tiene un solo modificador ( public o private ). Rara vez


es private;
 No retorna ningún valor, ni siquiera void;
 Tiene exactamente el mismo nombre de su clase;
 No puede ser invocado directamente. La palabra
reservada “new” debe ser usada;

Encapsulamiento 93
Por ejemplo (definición) :

public Libro() { Constructor por


defecto, definido por
numeroPaginas = 344;
el desarrollador
}

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.

Libro otroLibro = new Libro(1344);

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:

 Las variables de tipo numérico son establecidas a 0;


 Las variables de tipo char son establecidas al
carácter nulo ‘\0’;
 Las referencias de las variables objetos son
establecidas a null;

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.

class Ferrom { // Inicio del cuerpo de la clase

// Cuerpo de la clase

} // Fin del 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.

Libro unLibro = new Libro( );

Libro otroLibro = new Libro(1344);


Construye, crea un
objeto Libro con valores
especificados como
argumentos del
Usando el constructor apropiado, el
constructor
operador new construye el objeto,
asignándole recursos de RAM, y
almacena su dirección en la variable
objeto (el alias del objeto, o,
simplemente, el objeto) .

Encapsulamiento 104
 La variable Objeto se puede considerar
como un puntero a la ubicación en la
memoria donde se encuentre el objeto:

String nombre = new String( “Felix Ferreiras”);

 “Felix Ferreiras”
nombre

Toda interacción con un objeto es al través de una variable de referencia, luego,


solo si tenemos una referencia a un objeto es que podemos usarlo.

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

variableObjeto.metodoDeInstancia( arg1, arg2);

variableObjeto Es el nombre del objeto

Encapsulamiento 106
Referencias
• Classes and Structs (C# Programming Guide)
http://msdn.microsoft.com/en-us/library/ms173109.aspx

• Types (C# Programming Guide)


http://msdn.microsoft.com/en-us/library/ms173104.aspx

• Visual C# Language
http://msdn.microsoft.com/en-us/library/aa287558(v=vs.71).aspx

• C# Concisely; Judith Bishop, Nigel Hospool; Pearson, Addison Wisley 2003.

• 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

También podría gustarte

pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy