Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Página Principal
/ ► Mis cursos
/ ► P.O.O C#
/ ► Tema 3
/ ► Métodos. Creación de clases y objetos. Manejo de l...
Objetivo: Conocer la sintaxis específica de elementos principales de las clase como los
métodos y los objetos así como su propia declaración.
Contenidos:
Métodos
Clases y objetos
Manejo de instancias
Sesión de Cuestionario:
Sesión Foro:
Métodos
< Tipo devuelto > < Nombre simbólico del método > ([<Parámetros>])
cuerpo
A su vez todo método puede devolver un objeto como resultado de haber ejecutado las
<instrucciones>. En tal caso el tipo del objeto devuelto tiene que coincidir con el
especificado en <TipoDevuelto>, y el método tiene que terminar con la cláusula return
<objeto>; En caso que se desee definir un método que no devuelva objeto alguno se omite
la cláusula return y se especifica void como <TipoDevuelto>.
Opcionalmente todo método puede recibir en cada llamada una arreglo de parámetros a los
que podrá acceder en la ejecución de las <instrucciones> del mismo. En <Parámetros> se
indican los tipos y nombres de estos parámetros y es mediante estos nombres con los que se
deberá referirse a ellos en el cuerpo del método.
Aunque los objetos que puede recibir el método como parámetro pueden ser diferentes cada
vez que se solicite su ejecución (llamado), siempre han de ser de los mismos tipos y seguir
el orden establecido en <Parámetros>.
La sintaxis usada para llamar a los métodos de un objeto es la misma que se utiliza para
acceder a sus campos, solo que además tras el nombre del método que se desea invocar
habrá que indicar entre paréntesis cuales son los valores que se desea dar a los parámetros.
O sea se escribe de la siguiente forma:
<objeto> no tiene que ser explícitamente el nombre de una variable, es cualquier expresión
que retorne como resultado un objeto.
class Estudiante;
{
...
int Promedio()
...
...
Es el momento propicio para citar un par de notas: “los términos método y función suelen
usarse de forma indistinta, pero hay una diferencia. Un método es una función contenida
en una clase. Una función suele ser un grupo de instrucciones que no está contenido en una
clase y que suele estar en un lenguaje, como C o C++. Como en C# no se puede añadir
código fuera de una clase, usted nunca tendrá una función. Todos los métodos se encierran
en una clase. Un método no puede existir fuera de una clase”.
Tipo devuelto
Para la definición de los métodos que no retornan ningún valor es utilizada en C# la palabra
reservada void, como se muestra seguidamente a través del ejemplo de la clase
Cronómetro.
class Cronómetro;
...
void Arranca()
...
}
class Persona
}
{
Pregunta: ¿Cuáles son los datos o valores que necesita el método Edad() para cumplir con
su responsabilidad de retornar el valor de la edad (con relación a un año determinado) de
cualquier Persona?
Los parámetros son definidos entre paréntesis a continuación del nombre de la clase. Un
método puede contener varios parámetros (Arreglo de parámetros) o ninguno. En caso de
contener una lista de parámetros éstos van antecedidos por su tipo y separados por coma.
En caso contrario la lista de parámetros estaría vacía
En caso de que el método no tenga que retornar ningún valor, simplemente no hay que usar
el return dentro del cuerpo.
Sobrecarga de métodos
Pregunta: ¿Es posible ofrecer otra variante para la responsabilidad que determina la
edad en la clase Persona a través del mismo identificador Edad?
El referido método podría calcular la edad de una instancia de Persona a través del valor
retornado por el reloj interno de la máquina (el año en este caso), si existiese alguna forma
de obtener el mismo. Felizmente en la BCL existe una clase que dispone de esa
responsabilidad (System.DateTime.Now.Year).
Lo interesante de este planteamiento es que ahora la propuesta del método Edad dispone de
toda la información para dar un resultado ya que el año a comparar sería obtenido de la
referida forma desde el reloj interno de la máquina.
Por supuesto que no, tómese que por otra parte se quiere brindar las dos facilidades, una
que calcule la edad a partir de un año dado y otra que la calcule a partir del año actual
adquirido a través del reloj de la máquina. Evidentemente esta propuesta trae o conlleva a
interrogantes interesantes, pues como se ha decidido brindar las dos facilidades se tienen
que definir dos métodos para acceder a estas de forma independiente, puesto que sus
propuestas de solución difieren notablemente.
Lo que supuestamente es una respuesta evidente, conlleva a otra interrogante aún más
interesante. Como ambos métodos están definidos con el objetivo de calcular la edad de
una instancia de Persona el nombre más lógico con el cual se debe hacer referencia a cada
uno de ellos debe ser Edad, pues otro nombre se contradice con lo que realmente hace o con
el objetivo para lo cual fue diseñado. Luego en la clase Persona existirían dos métodos con
igual identificador, tipo devuelto y solo con la diferencia de que uno necesita de un
parámetro para establecer con respecto a que año se calcularía la edad, mientras que el otro
no necesita del parámetro porque la calcula respecto al año actual tomado del reloj de la
máquina.
Pregunta: ¿Puede contener una clase más de un método con igual identificador? En caso
positivo, ¿cómo el compilador es capaz de diferenciarlos?
Situación de análisis
class A
...
Pregunta: ¿Qué reacción tiene el lenguaje ante las definiciones anteriores?
El ejemplo anterior consta de 5 definiciones del método f. Las cuatro primeras son
aceptadas por el lenguaje, ya que difieren en el tipo, la cantidad u orden de los parámetros.
El último caso no es correcto pues solo se diferencia del primero en los identificadores de
los parámetros. Este produce un error semántico puesto que existe un método previamente
definido que tiene dos parámetros enteros. Es decir, el nombre de los parámetros, no
establece diferencia alguna para la signatura de distintos métodos.
A la posibilidad de disponer de varios métodos con el mismo nombre, pero con diferente
lista de parámetros es lo que se conoce como sobrecarga de métodos y es posible ya que
cuando se les invoque el compilador podrá determinar a cual llamar a partir de los
parámetros pasados en la llamada.
Sin embargo, lo que no se permite es definir varios métodos que solamente se diferencien
en su valor de retorno, puesto que la forma de invocar a los métodos a través de instancias
de la clase es