Las clases son los tipos más fundamentales de C#.
Una clase es
una estructura de datos que combina estados (campos) y acciones
(métodos y otros miembros de función) en una sola unidad. Una
clase proporciona una definición para instancias creadas
dinámicamente de la clase, también conocidas como objetos. Las
clases admiten herencia y polimorfismo, mecanismos por los que
las clases derivadas pueden extender y especializar clases base.
Las clases nuevas se crean mediante declaraciones de clase. Una
declaración de clase se inicia con un encabezado que especifica los
atributos y modificadores de la clase, el nombre de la clase, la clase
base (si se indica) y las interfaces implementadas por la clase. Al
encabezado le sigue el cuerpo de la clase, que consta de una lista
de declaraciones de miembros escritas entre los delimitadores { y }.
Clases base
Una declaración de clase puede especificar una clase base
colocando después del nombre de clase y los parámetros de tipo
dos puntos seguidos del nombre de la clase base. Omitir una
especificación de la clase base es igual que derivarla del
tipo object. En el ejemplo siguiente, la clase base
de Point3D es Point y la clase base de Point es object:
La instrucción switch nos va a facilitar mucho trabajo en
determinados programas. Supongamos que queremos hacer un
programa que dé un número entero y escriba por pantalla su valor
ordinal (primero, segundo, etc...).
Los operadores lógicos condicionales se utilizan para añadir
condiciones, tanto en los if como en cualquiera de las
instrucciones que lleven una condición (ya las veremos).
Vamos a suponer, tomando alguno de los ejemplos anteriores, que
queremos hacer algo si una variable vale 1 ó 5.
Lo haríamos así:
La instrucción "if" tiene un par de modificadores que ayudan a tener
mayor control del programa. Éstas son else y else if. Ambas son
opcionales.
La diferencia entre este ejemplo y el de la lección anterior con 3
instrucciones "if", es que esta sentencia está anidada. Quiere decir
que cambia la forma de actuación.
La instrucción "if " es algo básico en programación, y se utiliza para
el control de flujo del programa.
Vamos a empezar con una muy sencilla para ver si funcionamiento:
Declaramos una variable "a" que toma el valor de cinco (5). Con la
instrucción "if" comprobamos si "a" vale "5". Para comprobar si una
variable es igual a algún valor se utiliza el operador de
comparación de igualdad, que son dos signos de igual juntos
(==).
Las clases en C# se definen de forma parecida a los registros
(struct), sólo que ahora, además de variables (que representan sus
detalles internos, y que llamaremos sus "atributos"), también
incluirán funciones (las acciones que puede realizar ese objeto, que
llamaremos sus "métodos"). Atributos y métodos formarán parte de
"un todo", en vez de estar separados en distintas partes del
programa. Esto es lo que se conoce como "Encapsulación".
Así, una clase "Puerta" se podría declarar así:
Para hacer uso de los métodos creados, únicamente necesitamos
llamarlos desde donde lo utilicemos.
Para los métodos sin retorno de información únicamente colocamos
el nombre del método seguido de paréntesis.
1 MetodoUno();
Si el método no retorna información, pero si requiere parámetros,
hay que enviar esos parámetros entre los paréntesis.
1 MetodoUno(3);
Los métodos con retorno de datos requieren de una variable
previamente, para almacenar el dato devuelto por el método.
1 int respuesta = MetodoDos();
En caso de que el método necesite parámetros los colocamos entre
los paréntesis.
Veamos la estructura que debe tener un método simple.
1 public void MetodoUno(){}
Se define el permiso de acceso, public.
Establecemos si retornara o no algún resultado, void no regresa
información.
Agregamos un nombre (MetodoUno); seguido de paréntesis, entre
los paréntesis se pueden agregar parámetros.
Por ultimo se colocan llaves, entre estas llaves se realizan todas
las operaciones.
Veamos algunos ejemplos de métodos simples, para identificar los
que podemos ver en el código.
Un método es un bloque de código que contiene una serie de
instrucciones. Un programa hace que se ejecuten las instrucciones
al llamar al método y especificando los argumentos de método
necesarios. En C#, todas las instrucciones ejecutadas se realizan
en el contexto de un método. El método Main es el punto de
entrada para cada aplicación de C# y se llama mediante Common
Language Runtime (CLR) cuando se inicia el programa.
Los métodos se declaran en una class o struct al especificar:
Un nivel de acceso opcional, como, por ejemplo, public o private. El
valor predeterminado es private.
Modificadores opcionales, como, por ejemplo, abstract o sealed.
El valor devuelto o, si el método no tiene ninguno, void.
El nombre del método.
Los parámetros del método. Los parámetros de método se
encierran entre paréntesis y se separan por comas. Los paréntesis
vacíos indican que el método no requiere parámetros.
Los operadores de incremento (++) y decremento (--) sirven para
incrementar o disminuir el valor de una variable en una unidad. Por
ejemplo:
num++;
hará que num incremente su valor en una unidad, es decir, si valía
10 ahora vale 11. Los operadores de incremento y decremento se
pueden poner delante (preincremento ó predecremento) o bien
detrás (postincremento ó postdecremento), teniendo
comportamientos distintos. Me explico: si hay un postincremento o
postdecremento, primero se toma el valor de la variable y después
se incrementa o decrementa. En caso contrario, si lo que hay es un
preincremento o un predecremento, primero se incrementa o
decrementa la variable y después se toma el valor de la misma. En
una línea como la anterior esto no se ve claro, porque, además, el
resultado sería el mismo que poniendo ++num. Sin embargo,
veamos este otro ejemplo (num vale 10):
Los espacios de nombres son un modo sencillo y muy eficaz de
tener absolutamente todas las clases perfectamente organizadas,
tanto las que proporciona el .NET Framework como las que
podamos escribir nosotros. Podemos verlo verdaderamente claro
con echar un simple vistazo al explorador de objetos de Visual
Studio.NET (menú Ver...Otras ventanas...Examinador de objetos, o
bien la combinación de teclas Ctrl+Alt+J).
Lo que tenemos a la izquierda es toda la biblioteca de clases
del .NET Framework. Como ves están completamente organizadas
en árbol, de modo que toda ella está fuertemente estructurada.
Además, fíjate bien en la rama que está parcialmente desplegada.
No se trata de nada que esté dentro de la biblioteca de clases
del .NET Framework, sino de una aplicación diseñada en C#. Por lo
tanto, como ves, nosotros también podemos definir nuestros
propios espacios de nombres.
Las ventajas principales de estos espacios de nombres son su
fuerte estructuración y, sobre todo, la posibilidad de usar varias
clases distintas con el mismo nombre en un mismo programa si los
espacios de nombres son diferentes. No, no es el mismo perro con
distinto collar. Es relativamente fácil que varios fabricantes de
software den el mismo nombre a sus clases pues, al fin y al cabo,
solemos basarnos en nuestro idioma para nombrarlas. Sin embargo
es mucho menos probable que los espacios de nombres coincidan,
sobre todo si se tiene la precaución de seguir las recomendaciones
de Microsoft, que consisten en comenzar por llamar al espacio de
nombres igual que se llama la compañía, más luego lo que sea. Por
ejemplo, si mi compañía se llama NISU, y escribo un espacio de
nombres con clases que realizan complejos cálculos para la
navegación espacial, mi espacio de nombres podría llamarse
NISUNavegacionEspacial. Si, después, IBM desarrolla una
biblioteca similar, su espacio de nombres se llamaría
IBMNavegacionEspacial (venga, hombre, échame una mano...
imagínate que los de IBM hablan español). Aunque el nombre de
mis clases coincida en gran número con los de las clases de IBM,
cualquier desarrollador podría utilizar las dos sin problemas gracias
a los espacios de nombres.