Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Fundamentos de C# 3.0 - (PG 136 - 143)
Fundamentos de C# 3.0 - (PG 136 - 143)
Introducción a las
clases, objetos y
métodos
Copyright © 2010. McGraw-Hill España. All rights reserved.
Schildt, Herbert. Fundamentos de C# 3.0, McGraw-Hill España, 2010. ProQuest Ebook Central, http://ebookcentral.proquest.com/lib/unadsp/detail.action?docID=3196018.
Created from unadsp on 2018-10-13 17:10:58.
120 Fundamentos de C# 3.0
A ntes de avanzar más en el estudio de C#, necesitas obtener conocimiento sobre las clases. La
clase es la esencia de C# porque define la naturaleza de un objeto; y como tal, la clase con-
forma las bases de la programación orientada a objetos en C#. Dentro de una clase se definen los
datos y el código que actúa sobre ellos. El código está contenido en métodos. Como las clases, los
objetos y los métodos son fundamentales para C#; en este capítulo presentamos una introducción
sobre ellos. Tener un conocimiento básico de estas características te permitirá escribir programas
más sofisticados y entender mejor ciertos elementos clave de C# descritos en el capítulo 5.
Copyright © 2010. McGraw-Hill España. All rights reserved.
Schildt, Herbert. Fundamentos de C# 3.0, McGraw-Hill España, 2010. ProQuest Ebook Central, http://ebookcentral.proquest.com/lib/unadsp/detail.action?docID=3196018.
Created from unadsp on 2018-10-13 17:10:58.
Capítulo 4: Introducción a las clases, objetos y métodos 121
}
// ...
acceso tipo-recuperado métodoN(parámetros) {
// cuerpo del método
}
}
Observa que cada variable y método es antecedido por un acceso. Aquí, acceso es una espe-
cificación, como public, que indica la manera como puede ser accesado ese miembro de la clase.
Como se mencionó en el capítulo 1, los miembros de clase pueden ser exclusivos de una clase, o
bien tener más alcance. El delimitador de acceso determina el alcance permitido para la variable
o método al que se aplica. El delimitador de acceso es opcional, y en su ausencia, el exclusivo de
la clase a la que pertenece. Los miembros con acceso exclusivo (private) pueden ser utilizados
únicamente por otros miembros de la misma clase. Para los ejemplos de este capítulo, todos los
miembros de clase (excepto el método Main( )) serán especificados como public (públicos). Ello
significa que podrán ser utilizados por todo el código restante, incluso el escrito fuera de la clase
a la que pertenecen. El método Main( ) continuará utilizando el acceso por omisión porque es la
Schildt, Herbert. Fundamentos de C# 3.0, McGraw-Hill España, 2010. ProQuest Ebook Central, http://ebookcentral.proquest.com/lib/unadsp/detail.action?docID=3196018.
Created from unadsp on 2018-10-13 17:10:58.
122 Fundamentos de C# 3.0
Las variables de instancia definidas en Vehículo ilustran la manera como se declaran en gene-
ral. El formato estándar para declarar una variable de instancia es el siguiente:
acceso tipo nombre-de-variable;
Aquí, acceso especifica el alcance de la variable, tipo es el tipo de dato asignado a la variable y
nombre-de-variable es el nombre con el que será conocida en el programa. De esta manera, fuera
del delimitador de acceso, una variable de instancia se declara de la misma manera que una local.
Para Vehículo, las variables van antecedidas por el delimitador public. Como se explicó anterior-
mente, esto permite que sean accesadas por el código que se encuentra fuera de la clase Vehículo.
Una definición de clase (class) crea un nuevo tipo de dato. En este caso, el nuevo tipo de dato
recibe el nombre de Vehículo. Utilizarás este nombre para declarar objetos de tipo Vehículo. Re-
cuerda que la declaración de una clase es sólo un tipo descriptivo, no crea un objeto de hecho. Así,
el código anterior no trae a la existencia ningún objeto del tipo Vehículo.
Para crear de hecho un objeto Vehículo, utilizarás una declaración como la siguiente:
Vehículo minivan = new Vehículo(); // crea un objeto de Vehículo llamado
minivan
Schildt, Herbert. Fundamentos de C# 3.0, McGraw-Hill España, 2010. ProQuest Ebook Central, http://ebookcentral.proquest.com/lib/unadsp/detail.action?docID=3196018.
Created from unadsp on 2018-10-13 17:10:58.
Capítulo 4: Introducción a las clases, objetos y métodos 123
Después de que se ejecuta esta declaración, minivan será una instancia de Vehículo. De esta manera
tendrá una existencia “física”. Por el momento, no te preocupes por los detalles de esta declaración.
Cada vez que creas una instancia de una clase, estás creando un objeto que contiene su propia
copia de cada variable de instancia definida en la clase. Así, cada objeto de Vehículo contendrá sus
propias copias de las variables Pasajeros, CapComb y Kpl. Para accesar estas variables, utilizarás
el operador de acceso a miembros de la clase, que es un punto (.); comúnmente se le conoce como
operador de punto. Este operador vincula el nombre de un objeto con el nombre de un miembro.
El formato general del operador de punto es el siguiente:
objeto.miembro
De tal manera que el objeto es especificado a la izquierda del punto y el miembro a la derecha. Por
ejemplo, para asignar el valor 72 a la variable CapComb de minivan, utiliza la siguiente declara-
ción:
minivan.CapComb = 72;
En general, puedes utilizar el operador de punto para obtener acceso tanto a variables como a mé-
todos.
He aquí el programa completo que utiliza la clase Vehículo:
/* Un programa que utiliza la clase Vehículo.
Llama a este archivo UsaVehículo.cs
*/
using System;
// Una clase que encapsula información sobre vehículos.
class Vehículo {
public int Pasajeros; // cantidad de pasajeros
public int CapComb; // la capacidad de combustible en litros
public int Kpl; // consumo de combustible en kilómetros por litro
Copyright © 2010. McGraw-Hill España. All rights reserved.
}
// Esta clase declara un objeto de tipo Vehículo.
class VehículoDemo {
static void Main() {
Crea una instancia de Vehículo
Vehículo minivan = new Vehículo();
llamada minivan.
int alcance;
// Asigna valores a los campos en minivan.
minivan.Pasajeros = 7;
Observa el uso del operador de punto para
minivan.CapComb = 72;
obtener acceso a un miembro de la clase.
minivan.Kpl = 5;
// Calcula el alcance de kilómetros por tanque lleno.
alcance = minivan.CapComb * minivan.Kpl;
Console.WriteLine("Minivan puede transportar " + minivan.Pasajeros +
" un alcance de " + alcance);
}
}
Schildt, Herbert. Fundamentos de C# 3.0, McGraw-Hill España, 2010. ProQuest Ebook Central, http://ebookcentral.proquest.com/lib/unadsp/detail.action?docID=3196018.
Created from unadsp on 2018-10-13 17:10:58.
124 Fundamentos de C# 3.0
Con este procedimiento se creará el archivo VehículoDemo.exe, porque ésa es la clase que con-
tiene el método Main( ). Si utilizas el IDE de Visual Studio, necesitarás añadir ambos archivos al
mismo proyecto y luego generarlo.
Antes de continuar, revisemos un principio fundamental: cada objeto tiene sus propias copias
de las variables de instancia definidas por su clase. De esta forma, el contenido de las variables
en un objeto puede ser diferente del contenido de las mismas variables en otro objeto. No hay
Copyright © 2010. McGraw-Hill España. All rights reserved.
conexión entre los dos objetos, salvo que ambos pertenecen al mismo tipo. Por ejemplo, si tienes
dos objetos Vehículo, cada uno tiene su propia copia de las variables Pasajeros, CapComb y Kpl,
pero su contenido puede ser diferente en cada uno de ellos. El siguiente programa muestra este
hecho:
// Este programa crea dos objetos Vehículo.
using System;
Schildt, Herbert. Fundamentos de C# 3.0, McGraw-Hill España, 2010. ProQuest Ebook Central, http://ebookcentral.proquest.com/lib/unadsp/detail.action?docID=3196018.
Created from unadsp on 2018-10-13 17:10:58.
Capítulo 4: Introducción a las clases, objetos y métodos 125
Los datos de salida generados por este programa son los siguientes:
Minivan puede transportar 7 un alcance de 360
Deportivo puede transportar 2 un alcance de 189
Como puedes ver, los datos de minivan están completamente separados de los datos conteni-
Copyright © 2010. McGraw-Hill España. All rights reserved.
pasajeros 7
minivan capComb 72
kpl 5
pasajeros 2
deportivo capComb 63
kpl 3
Figura 4-1 Las variables de instancia de un objeto están separadas de las del otro
Schildt, Herbert. Fundamentos de C# 3.0, McGraw-Hill España, 2010. ProQuest Ebook Central, http://ebookcentral.proquest.com/lib/unadsp/detail.action?docID=3196018.
Created from unadsp on 2018-10-13 17:10:58.
126 Fundamentos de C# 3.0
Esta declaración realiza tres funciones: primero, declara una variable llamada minivan de la clase
tipo Vehículo. Esta variable no es, en sí, un objeto. En lugar de ello, es simplemente una variable
que puede hacer referencia a un objeto. Segundo, la declaración crea de hecho una instancia física
del objeto. Esto se lleva a cabo utilizando el operador new. Finalmente, asigna a minivan una re-
ferencia a ese objeto. Así, después de que se ejecuta la línea, minivan hace referencia a un objeto
de tipo Vehículo.
El operador new coloca dinámicamente (esto es, en tiempo de ejecución) el objeto en la
memoria de la computadora y regresa una referencia al mismo. Esta referencia es almacenada
entonces en una variable. Así, todos los objetos de clase en C# deben ser colocados en memoria
dinámicamente.
Como podrías esperar, es posible separar la declaración minivan de la creación del objeto al
cual hará referencia, como se muestra aquí:
Vehículo minivan; // declara la referencia a un objeto
minivan = new Vehículo(); // coloca en memoria el objeto Vehículo
La primera línea declara minivan como referencia a un objeto tipo Vehículo. De esta manera,
minivan es una variable que puede hacer referencia a un objeto, pero no es un objeto en sí. La si-
guiente línea crea un nuevo objeto Vehículo y asigna a la variable minivan una referencia al mis-
mo. Ahora minivan está vinculada con un objeto.
El hecho de que los objetos de clase sean accesados a través de una referencia explica por qué
las clases son llamadas tipos de referencia. La diferencia clave entre los tipos de valor y los tipos
de referencia es el significado intrínseco de cada uno. En una variable tipo valor, la variable en sí
contiene el valor que le ha sido asignado. Por ejemplo, en el código:
Copyright © 2010. McGraw-Hill España. All rights reserved.
int x;
x = 10;
x contiene el valor 10, porque es una variable int, tipo de dato para almacenar valores. Sin embar-
go, en el caso de
Vehículo minivan = new Vehículo();
Schildt, Herbert. Fundamentos de C# 3.0, McGraw-Hill España, 2010. ProQuest Ebook Central, http://ebookcentral.proquest.com/lib/unadsp/detail.action?docID=3196018.
Created from unadsp on 2018-10-13 17:10:58.