3. DEFINICIÓN DE CLASES:
Conceptos de clase y objeto
C# es un lenguaje orientado a objetos puro, lo que significa que
todo con lo que vamos a trabajar en este lenguaje son objetos.
objeto es un agregado de datos y de métodos que permiten
manipular dichos datos, y un programa en C# no es más que un
conjunto de objetos que interaccionan unos con otros a través
sus métodos
4. Una clase es la definición de las características
concretas de un determinado tipo de objetos. Es decir,
de cuáles son los datos y los métodos de los que van a
disponer todos los objetos de ese tipo. Por esta razón, se
suele decir que el tipo de dato de un objeto es la clase
que define las características del mismo.
5. SINTAXIS DE DEFINICIÓN DE CLASES
La sintaxis básica para definir una clase es la que a continuación se muestra:
class <nombreClase>
{
<miembros>
}
6. De este modo se definiría una clase de nombre <nombreClase>
cuyos miembros son los definidos en <miembros> Los miembros
de una clase son los datos y métodos de los que van a disponer
todos los objetos de la misma. Un ejemplo de cómo declarar una
clase de nombre A que no tenga ningún miembro es la siguiente:
class A
{
}
7. CAMPOS:
Un campo es un dato común a todos los objetos de una
determinada clase. Para definir cuáles son los campos de los
que una clase dispone se usa la siguiente sintaxis dentro de la
zona señalada como <miembros> en la definición de la misma:
<tipoCampo> <nombreCampo>;
8. El nombre que demos al campo puede ser cualquier identificador
que queramos siempre y cuando siga las reglas descritas en el
Tema Aspectos Léxicos para la escritura de identificadores y no
coincida con el nombre de ningún otro miembro previamente
definido en la definición de clase.
9. Ejemplo de definición de una clase de nombre Persona que dispone de tres campos:
class Persona
{
string Nombre; // Campo de cada objeto Persona que almacena su nombre
int Edad; // Campo de cada objeto Persona que almacena su edad
string NIF; // Campo de cada objeto Persona que almacena su NIF
}
10. Según esta definición, todos los objetos de clase Persona
incorporarán campos que almacenarán cuál es el nombre de la
persona que cada objeto representa, cuál es su edad y cuál es
su NIF.
11. MÉTODO:
Un método es un conjunto de instrucciones a las que se les asocia un nombre de modo
que si se desea ejecutarlas basta referenciarlas a través de dicho nombre en vez de tener
que escribirlas. Dentro de estas instrucciones es posible acceder con total libertad a la
información almacenada en los campos pertenecientes a la clase dentro de la que el
método se ha definido, por lo que como al principio del tema se indicó, los métodos
permiten manipular los datos almacenados en los objetos.
12. La sintaxis que se usa en C# para definir los métodos es la
siguiente:
<tipoDevuelto> <nombreMétodo> (<parametros>)
{
<instrucciones>
}
13. Un ejemplo de cómo declarar un método de nombre
Cumpleaños es la siguiente modificación de la definición de la
clase Persona usada antes como ejemplo:
14. class Persona
{
string Nombre; // Campo de cada objeto Persona que almacena su nombre
int Edad; // Campo de cada objeto Persona que almacena su edad
string NIF; // Campo de cada objeto Persona que almacena su NIF
void Cumpleaños() // Incrementa en uno de la edad del objeto Persona
{
Edad++;
}
}
15. CREACIÓN DE OBJETOS
Operador new
Ahora que ya sabemos cómo definir las clases de objetos que podremos usar en nuestras
aplicaciones ha llegado el momento de explicar cómo crear objetos de una determinada
clase. Algo de ello ya se introdujo en el Tema 4: Aspectos Léxicos cuando se comentó la
utilidad del operador new, que precisamente es crear objetos y cuya sintaxis es:
new <nombreTipo>(<parametros>)
16. Este operador crea un nuevo objeto del tipo cuyo nombre se le
indica y llama durante su proceso de creación al constructor del
mismo apropiado según los valores que se le pasen en
<parametros>, devolviendo una referencia al objeto recién
creado.
17.
18.
19.
20.
21. ejemplo:
public abstract class A
{
public abstract void F();
}
abstract public class B: A
{
public void G() {}
}
class C: B
{
public override void F()
{}
}
22.
23. LA CLASE PRIMIGENIA: SYSTEM.OBJECT
Ahora que sabemos lo que es la herencia es el momento apropiado
para explicar que en .NET todos los tipos que se definan heredan
implícitamente de la clase System.Object predefinida en la BCL, por lo
que dispondrán de todos los miembros de ésta. Por esta razón se dice
que System.Object es la raíz de la jerarquía de objetos de .NET.
24.
25.
26.
27.
28.
29.
30. CLASES MÉTODOS Y SELLADOS:
Una clase sellada es una clase que no puede tener clases hijas, y para
definirla basta anteponer el modificador sealed a la definición de una
clase normal. Por ejemplo:
sealed class ClaseSellada
{
}
31. Una utilidad de definir una clase como sellada es que
permite que las llamadas a sus métodos virtuales heredados
se realicen tan eficientemente como si fuesen no virtuales,
pues al no poder existir clases hijas que los redefinan no
puede haber polimorfismo y no hay que determinar cuál es la
versión correcta del método a la que se ha de llamar.
32. OCULTACIÓN DE MIEMBROS:
Hay ocasiones en las que puede resultar interesante usar la
herencia únicamente como mecanismo de reutilización de código
pero no necesariamente para reutilizar miembros. Es decir, puede
que interese heredar de una clase sin que ello implique que su
clase hija herede sus miembros tal cuales sino con ligeras
modificaciones.
33. En C# podemos ocultar miembros (funciones: métodos,
propiedades, indezadores, eventos; y campos) a través de
construcciones del lenguaje. Exactamente por medio de la
palabra clave new .En los ejemplos próximos, veremos que la
ausencia de esta construcción, hace que el compilador
arrojará una advertencia sobre el uso no adecuado y
consciente de la ocultación del miembro heredado.
34. Miembros de tipo
En realidad, dentro la definición de un tipo de dato no tiene porqué incluirse sólo definiciones de
miembros comunes a todos sus objetos, sino también pueden definirse miembros ligados al tipo
como tal y no a los objetos del mismo. Para ello basta preceder la definición de ese miembro de la
palabra reservada static, como muestra este ejemplo:
class A
{
int x;
static int y;
}
35. Los objetos de clase A sólo van a disponer del campo x, mientras que
el campo y va a pertenecer a la clase A. Por esta razón se dice que los
miembros con modificador static son miembros de tipo y que los no
lo tienen son miembros de objeto.
Para acceder a un miembro de clase ya no es válida la sintaxis hasta
ahora vista de <objeto>.<miembro>, pues al no estar estos
miembros ligados a ningún objeto no podría ponerse nada en el
campo <objeto>.