Está en la página 1de 9

Qu son clases?

Una clase es como una plantilla que describe cmo deben ser las instancias de dicha clase, de
forma que cuando creamos una instancia, sta tendr exactamente los mismos mtodos y
variables que los que tiene la clase. Los datos y mtodos contenidos en una clase se llaman
miembros de la clase y se accede a ellos siempre mediante el operador "..
Una clase describe cualquier cantidad de objetos que puede fabricarse a partir de ella mediante la
palabra clave new
Clases consisten en:
Datos private (variables) que contienen informacin sobre el objeto;
Opcionalmente uno o ms mtodos constructores, que se utilizan al momento de crear un
Objeto; su propsito es llevar a cabo cualquier inicializacin, por ejemplo, asignando
valores
Iniciales a las variables del objeto;
Mtodos public que el usuario del objeto puede invocar para llevar a cabo funciones
tiles;
Propiedades que nos permiten acceder o modificar las propiedades de un objeto;
Mtodos private, que se utilizan slo dentro del objeto y son inaccesibles desde fuera de
l.
Cmo disear una clase
Cuando el programador piensa en la creacin de un nuevo programa, tal vez contemple la
necesidad de incluir un objeto que no est disponible en la biblioteca de clases de C#. Para
ejemplificar lo anterior utilizaremos un programa cuyo objetivo es desplegar y manipular un globo,
y representaremos el globo como un objeto (un crculo dentro de un cuadro de imagen, como se
muestra en la Figura 10.1). Adems, pondremos dos botones para cambiar la posicin y el tamao
del globo. Construiremos este programa a partir de dos objetos y, por ende, de dos clases:

La clase Globo proveer los mtodos denominados Mover y CambiarTamao, cuyos
comportamientos son obvios.
La clase Form1 provee la GUI del programa. Esta clase utilizar la clase Globo segn sea
necesario.
Ambas clases se muestran en el diagrama de clases de la Figura 10.2. Estos diagramas representan
las clases mediante rectngulos. Cualquier conexin que exista entre ellas se ilustra a travs de
lneas de unin. En este caso la relacin se explica con una anotacin arriba de la lnea.
Para empezar completaremos la clase Form1, y despus escribiremos la clase Globo.
Como siempre, declaramos las variables de instancia en la parte superior de la clase Form1 (afuera
de los mtodos), incluyendo una variable llamada globo:

Private Globo globo;
Private Graphics reaDibujo;





























Dentro del mtodo constructor de Form1 realizamos la inicializacin necesaria, incluyendo la
creacin de una nueva instancia de la clase Globo. ste es el punto crucial en el que creamos un
objeto a partir de nuestra propia clase.
globo = new Globo();
reaDibujo = pictureBox1.CreateGraphics();
Ahora viene el cdigo para responder a los eventos de clic de botn:
private void botnMover_Click(object sender, EventArgs e)
{
globo.MoverDerecha(20);
reaDibujo.Clear(Color.White);
globo.Mostrar(reaDibujo);
}
private void botnCrecer_Click(object sender, EventArgs e)
{
globo.CambiarTamao(20);
reaDibujo.Clear(Color.White);
globo.Mostrar(reaDibujo);
}
ste es todo el cdigo de la clase Form1. Escribirlo nos ayuda a entender cmo se utiliza el objeto
globo y, al mismo tiempo, nos permite ver cules mtodos y propiedades debe proveer la clase
Globo, as como la naturaleza de sus parmetros. Esto nos conduce a escribir el cdigo para la
clase
Globo:
public class Globo
{
private int x = 50;
private int y = 50;
private int dimetro = 20;
public void MoverDerecha(int pasoX)
{
x = x + pasoX;
}
public void CambiarTamao(int cambio)
{
dimetro = dimetro + cambio;
}
public void Mostrar(Graphics reaDibujo)
{
Pen lpiz = new Pen(Color.Black);
reaDibujo.DrawEllipse(lpiz, x, y, dimetro, dimetro);
}
}

El encabezado de la descripcin de la clase empieza con las palabras clave public y class, y
proporciona el nombre de la misma. La descripcin completa termina con una llave. La convencin
de C# (y de casi todos los lenguajes orientados a objetos) es que el nombre de las clases empieza
con mayscula. El cuerpo de la clase consiste en las declaraciones de las variables, los mtodos y
las propiedades. Observe cmo mejora la legibilidad de la clase gracias al uso de sangra y lneas
en blanco. En las siguientes secciones del captulo veremos con detalle cada uno de los
ingredientes que conforman la descripcin de la clase Globo.
La estructura general de las clases es:
public class Globo
{
// variables de instancia
// mtodos
// propiedades
}

En dnde debemos colocar las clases? Una opcin consiste en escribir todas las clases y
colocarlas en un solo archivo, pero es mejor ponerlas en archivos distintos. El IDE provee una
herramienta para ayudarnos a hacerlo. Los pasos son:
1. Seleccione el comando Agregar clase del men Proyecto. Enseguida se desplegar la ventana
Agregar nuevo elemento.
2. Seleccione Clase de la lista de plantillas.
3. Sobrescriba el nombre de la clase.
4. Haga clic en el botn Agregar.
Este procedimiento crea un archivo distintivo que contendr el cdigo de la clase. Este archivo es
parte del proyecto del programa, de manera que se compila y vincula automticamente al
ejecutarlo.

Modificadores de Acceso

- Permiten definir el nivel de acceso (visibilidad) de los miembros (atributos o mtodos) de
una clase
* Public: Cualquier clase puede ver los miembros pblicos de otra clase
* Private: Slo la clase puede ver sus propios miembros privados
* Protected: un miembro protected solamente puede ser accedido desde la clase en la que
est declarado y desde las clases que hereden de ella.

Constructores

Son mtodos dentro de la clase que son llamados automticamente cuando se crea una instancia
de dicha clase

Destructores

Al igual que es posible definir mtodos constructores que incluyan cdigo que gestione la creacin
de objetos de un tipo de dato, tambin es posible definir un destructor que gestione cmo se
destruyen los objetos de ese tipo de dato. Este mtodo suele ser til para liberar recursos tales
como los ficheros o las conexiones de redes abiertas que el objeto a destruir estuviese
acaparando en el momento en que se fuese a destruir.

La destruccin de un objeto es realizada por el recolector de basura cuando realiza una
recoleccin de basura y detecta que no existen referencias a ese objeto ni en pila, ni en registros
ni desde otros objetos s referenciados. Las recolecciones se inician automticamente cuando el
recolector detecta que queda poca memoria libre o que se va a finalizar la ejecucin de la
aplicacin, aunque tambin puede forzarse llamando al mtodo Collect() de la clase System.GC

La sintaxis que se usa para definir un destructor es la siguiente:

Cdigo:

~()
{

}
Mltiples constructores

Una clase puede tener cero, uno o varios mtodos constructores. Si tiene uno o ms
constructores, por lo general stos llevan parmetros y deben invocarse con los parmetros
apropiados. Por ejemplo, en la clase Globo podemos escribir los siguientes dos constructores:

public Globo(int xInicial, int yInicial,
int dimetroInicial)
{
x = xInicial;
y = yInicial;
dimetro = dimetroInicial;
}
public Globo(int xInicial, int yInicial)
{
x = xInicial;
y = yInicial;
}

Lo cual nos permitira crear objetos globo de cualquiera de estas formas:

Globo globo1 = new Globo(10, 10, 50);
Globo globo2 = new Globo(10, 10);
pero no podramos hacer esto:
Globo globo3 = new Globo();

Por lo tanto, si escribe varios constructores pero de todas maneras necesita un constructor sin
parmetros, tendr que escribirlo explcitamente, por ejemplo:

public Globo()
{
}

Ahora tenemos tres constructores para la clase Globo; he aqu cmo podramos usarlos para crear
Tres objetos distintos a partir de la misma clase:

Globo globo1 = new Globo();
Globo globo2 = new Globo(10, 10, 50);
Globo globo3 = new Globo(10, 10);

Mtodos

Un mtodo es un conjunto de instrucciones a las que se les asocia un nombre de modo que si se
desea ejecutar las basta referenciar las a travs de dicho nombre en vez de tener que escribirlas.
Dentro de estas instrucciones es posible acceder con total libertad a la informacin almacenada
en los campos pertenecientes a la clase dentro de la que el mtodo se ha definido, por lo que
como al principio del tema se indic, los mtodos permiten manipular los datos almacenados en
los objetos.

Todo mtodo puede devolver un objeto como resultado de la ejecucin de las instrucciones que lo
forman, y el tipo de dato al que pertenece este objeto es lo que se indica en "tipoDevuelto". Si no
devuelve nada se indica void, y si devuelve algo es obligatorio finalizar la ejecucin de sus
instrucciones con alguna instruccin return "objeto"; que indique qu objeto ha de devolverse.

Opcionalmente todo mtodo puede recibir en cada llamada una lista de objetos a los que podr
acceder durante la ejecucin de sus instrucciones. En "parmetros" se indica es cules son los
tipos de dato de estos objetos y cul es el nombre con el que harn referencia las instrucciones
del mtodo a cada uno de ellos. Aunque los objetos que puede recibir el mtodo pueden ser
diferentes cada vez que se solicite su ejecucin, siempre han de ser de los mismos tipos y han de
seguir el orden establecido en "parmetros".



Propiedades

Las propiedades permiten implementar el encapsulamiento, impidiendo el acceso directo a los
atributos de una clase y proporcionando un mecanismo para poder obtener y asignar sus valores

Las propiedades pueden utilizarse como un mecanismo para otorgar a los usuarios un acceso
conveniente pero controlado a los datos de un objeto. De hecho, hemos utilizado ya las
propiedades de los componentes del cuadro de herramientas y sabemos que, por ejemplo,
podemos escribir instrucciones para acceder a los valores de las propiedades de un cuadro de
texto:

nombre = textBox1.Text;
textBox1.Visible = false;

stos son ejemplos de cmo acceder a los datos que forman parte de un objeto, pero hay que
tener en cuenta que existen dos tipos distintos de acceso:
leer un valor: a esto se le conoce como acceso get (por ejemplo, extraer el texto de un cuadro de
texto utilizando la propiedad Text);
escribir el valor: a esto se le conoce como acceso set (por ejemplo, cambiar la propiedad Visible
de un cuadro de texto).
A continuacin exploraremos cmo proveer este tipo de acceso a los datos. Por ejemplo, suponga
que queremos permitir que el usuario de un objeto globo haga referencia (get) a la coordenada x
del globo. Este valor se guarda en la variable llamada x, establecida en la parte superior de la clase.
Imagine que el usuario del objeto globo (globo) quiere ser capaz de extraer y utilizar el valor, como
en el siguiente ejemplo:

textBox1.Text = Convert.ToString(globo.coordX);

Suponga tambin que, como programadores, deseamos que el usuario pueda cambiar (set) el
valor de la coordenada x con una instruccin como la siguiente:

globo.coordX = 56;

La manera de proporcionar estas herramientas es mediante una propiedad. He aqu una nueva
versin de la clase Globo, que incluye el cdigo de la propiedad:

public class GloboConPropiedades
{
private int x = 50;
private int y = 50;
private int dimetro = 20;
public void MoverDerecha(int xPasos)
{
x = x + xPasos;
}
public void CambiarTamao(int cambio)
{
dimetro = dimetro + cambio;
public void Mostrar(Graphics reaDibujo)
{
Pen lpiz = new Pen(Color.Black);
reaDibujo.DrawEllipse(lpiz, x, y, dimetro, dimetro);
}
public int coordX
{
get
{
return x;
}
set
{
x = value;
}
}
}

El encabezado de las propiedades es similar al que se utiliza en los mtodos, excepto que no hay
Parntesis para especificar parmetros. La declaracin completa termina con una llave de cierre.

Mtodo o propiedad?

Tanto los mtodos como las propiedades proporcionan mecanismos para acceder a un objeto.
Entonces
Cmo elegimos cul usar? Utilizamos los mtodos cuando queremos que un objeto realice
Cierta accin (por lo general los nombres de los mtodos son verbos). En contraste, empleamos
Propiedades cuando deseamos hacer referencia a cierta informacin asociada a un objeto
(generalmente los nombres de las propiedades son sustantivos).
Esto queda bien ilustrado en las bibliotecas de clases. Por ejemplo, los cuadros de texto tienen los
Mtodos Clear (borrar) y AppendText (anexar texto) para realizar acciones, y cuenta con las
propiedades Text (texto) y Visible para referirse al estado del objeto.

Algunos ejemplos de mtodos asociados al globo de nuestro ejercicio anterior podran ser:
Mostrar, MoverArriba, MoverAbajo, MoverIzquierda, MoverDerecha, ReducirTamao y
AumentarTamao, mientras que algunos ejemplos de propiedades seran: coordX, coordY,
Dimetro, Color y Visible. En ocasiones se hace necesario elegir entre utilizar una propiedad o
crear un mtodo para cumplir un propsito determinado; en este sentido, la decisin es cuestin
de estilo. Por ejemplo, para cambiar el color de un componente podramos crear un mtodo
llamado CambiarColor, aunque tambin podramos usar una propiedad denominada Color para el
mismo fin.







Las clases tienen la siguiente estructura:

public class NombreClase
{
// declaraciones de las variables de instancia
// declaraciones de los mtodos y las propiedades
}

Las variables, los mtodos y las propiedades pueden describirse como public o private.
Uno o ms de los mtodos que forman parte de una clase pueden tener el mismo nombre que
sta. Es posible invocar cualquiera de estos mtodos constructores (con los parmetros
apropiados) para inicializar el objeto al momento de crearlo.
La declaracin de un mtodo pblico tiene la estructura siguiente:

public void NombreMtodo(parmetros)
{
// cuerpo
}
La declaracin de una propiedad tiene esta estructura:
public int NombrePropiedad
{
get
{
// instrucciones para devolver un valor
}
set
{
// instrucciones para asignar un valor a una variable
}
}

Se puede declarar una propiedad sin la parte set o sin la parte get.
Las propiedades o mtodos independientes llevan el prefijo static en su encabezado.
Para invocar un mtodo esttico de una clase debe emplearse una lnea como sta:

NombreClase.NombreMtodo(parmetros);

También podría gustarte