Sie sind auf Seite 1von 6

Definicin de clases La definicin de una clase especifica cmo sern los objetos de dicha clase, esto es, de que

variables y de que mtodos constarn. La siguiente es la definicin ms simple de una clase:


class nombreClase { /* Declaracin de la clase */

/* Aqu va la definicin de variables y mtodos */

Como se puede observar, la definicin de una clase consta de dos partes fundamentales: * La declaracin de la clase Indica el nombre de la clase precedido por la palabra clave class.

Miembros de clase
La mayora de los miembros (mtodos y propiedades) descritos hasta ahora en este captulo son de un tipo denominado miembros de instancias. Por cada miembro de instancia, existe una copia exclusiva de dicho miembro en cada instancia de la clase. Por ejemplo, la variable de miembro email de la clase Sample tiene un miembro de instancia, porque cada persona tiene una direccin de correo electrnico diferente. Otro tipo de miembro es un miembro de clase. Slo hay una copia de un miembro de clase, que se utiliza para toda la clase. Todas las variables declaradas dentro de una clase, pero fuera de una funcin, son propiedades de la clase. En el siguiente ejemplo, la clase Person tiene dos propiedades, age y username, de tipo Number y String, respectivamente:

class Person { public var age:Number; public var username:String; }

Asimismo, todas las funciones declaradas dentro de una clase se consideran un mtodo de la clase. En el ejemplo de la clase Person, puede crear un mtodo denominado getInfo():

class Person { public var age:Number; public var username:String; public function getInfo():String { // Definicin del mtodo getInfo() }

En el fragmento de cdigo anterior, el mtodo getInfo() de la clase Person, as como las propiedades age y username, son miembros de instancia pblicos. La propiedad age no sera un buen miembro de clase, dado que cada persona tiene una edad diferente. Slo deberan ser miembros de clase las propiedades y mtodos compartidos por todos los individuos de la clase. Supongamos que desea que todas las clases tengan una variable species que indique el nombre latino de cada especie a la que representa la clase. Por cada objeto Person, la especie es Homo sapiens. Sera un despilfarro almacenar una copia exclusiva de la cadena "Homo sapiens" por cada instancia de la clase, por lo que este miembro debe ser un miembro de clase. Los miembros de clases se declaran con la palabra clave static. Por ejemplo, puede declarar el miembro de clase species con el siguiente cdigo:

class Person { public static var species:String = "Homo sapiens"; // ... }

Tambin puede declarar mtodos de una clase para que sean estticos, como se muestra en el siguiente cdigo:

public static function getSpecies():String { return Person.species; }

Los mtodos estticos slo pueden acceder a las propiedades estticas, no a las propiedades de instancia. Por ejemplo, el siguiente cdigo provoca un error de compilador porque el mtodo de la clase getAge() hace referencia a la variable de instancia age:

class Person { public var age:Number = 15; // ... public static function getAge():Number { return age; /* **Error**: No se puede acceder a variables de instancia en funciones estticas. */ } }

Para resolver este problema, podra hacer que el mtodo fuera un mtodo de instancia o hacer que la variable fuera una variable de clase. Para ms informacin sobre los miembros de clase (tambin denominados propiedades estticas), consulte Mtodos y propiedades estticos. Para ver ejemplos que ilustran la creacin de un men dinmico con datos XML y un archivo de clase personalizado, visite la pgina de ejemplos de Flash en www.adobe.com/go/learn_fl_samples_es. El ejemplo llama al constructor XmlMenu() de ActionScript y le pasa dos parmetros: la ruta al archivo de men XML y una referencia a la lnea

de tiempo actual. Descargue y descomprima el archivo zip Samples y vaya a la carpeta ActionScript2.0/XML_Menu para acceder a los ejemplos.

XmlMenu.as xmlmenu.fla

Creacin de objetos
Operador new
Ahora que ya sabemos cmo definir las clases de objetos que podremos usar en nuestras aplicaciones ha llegado el momento de explicar cmo crear objetos de una determinada clase. Algo de ello ya se introdujo en el Tema 4: Aspectos Lxicos cuando se coment la utilidad del operador new, que precisamente es crear objetos y cuya sintaxis es: new <nombreTipo>(<parametros>) Este operador crea un nuevo objeto del tipo cuyo nombre se le indica y llama durante su proceso de creacin al constructor del mismo apropiado segn los valores que se le pasen en <parametros>, devolviendo una referencia al objeto recin creado. Hay que resaltar el hecho de que new no devuelve el propio objeto creado, sino una referencia a la direccin de memoria dinmica donde en realidad se ha creado. El antes comentado constructor de un objeto no es ms que un mtodo definido en la definicin de su tipo que tiene el mismo nombre que la clase a la que pertenece el objeto y no tiene valor de retorno. Como new siempre devuelve una referencia a la direccin de memoria donde se cree el objeto y los constructores slo pueden usarse como operandos de new, no tiene sentido que un constructor devuelva objetos, por lo que no tiene sentido incluir en su definicin un campo <tipoDevuelto> y el compilador considera errneo hacerlo (aunque se indique void) El constructor recibe ese nombre debido a que su cdigo suele usarse precisamente para construir el objeto, para inicializar sus miembros. Por ejemplo, a nuestra clase de ejemplo Persona le podramos aadir un constructor dejndola as:

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 Cumpleaos() { // Incrementa en uno la edad del objeto Persona

Edad++; } Persona (string nombre, int edad, string nif) // Constructor { Nombre = nombre; Edad = edad; NIF = nif; } } Como se ve en el cdigo, el constructor toma como parmetros los valores con los que deseemos inicializar el objeto a crear. Gracias a l, podemos crear un objeto Persona de nombre Jos, de 22 aos de edad y NIF 12344321-A as:

new Persona("Jos", 22, "12344321-A") Ntese que la forma en que se pasan parmetros al constructor consiste en indicar los valores que se ha de dar a cada uno de los parmetros indicados en la definicin del mismo separndolos por comas. Obviamente, si un parmetro se defini como de tipo stringhabr que pasarle una cadena, si se defini de tipo int habr que pasarle un entero y, en general, a todo parmetro habr que pasarle un valor de su mismo tipo (o de alguno convertible al mismo), producindose un error al compilar si no se hace as. En realidad un objeto puede tener mltiples constructores, aunque para diferenciar a unos de otros es obligatorio que se diferencien en el nmero u orden de los parmetros que aceptan, ya que el nombre de todos ellos ha de coincidir con el nombre de la clase de la que son miembros. De ese modo, cuando creemos el objeto el compilador podr inteligentemente determinar cul de los constructores ha de ejecutarse en funcin de los valores que le pasemos al new. Una vez creado un objeto lo ms normal es almacenar la direccin devuelta por new en una variable del tipo apropiado para el objeto creado. El siguiente ejemplo -que como es lgico ir dentro de la definicin de algn mtodo- muestra cmo crear una variable de tipo Persona llamada p y cmo almacenar en ella la direccin del objeto que devolvera la anterior aplicacin del operador new:

Persona p; // Creamos variable p p = new Persona("Jose", 22, "12344321-A"); // Almacenamos en p el objeto creado con new

A partir de este momento la variable p contendr una referencia a un objeto de clase Persona que representar a una persona llamada Jos de 22 aos y NIF 12344321-A. O lo que prcticamente es lo mismo y suele ser la forma comnmente usada para decirlo: la variable p representa a una persona llamada Jos de 22 aos y NIF 12344321-A. Como lo ms normal suele ser crear variables donde almacenar referencias a objetos que creemos, las instrucciones anteriores pueden compactarse en una sola as:

Persona p = new Persona("Jos", 22, "12344321-A");

De hecho, una sintaxis ms general para la definicin de variables es la siguiente:

<tipoDato> <nombreVariable> = <valorInicial>; La parte = <valorInicial> de esta sintaxis es en realidad opcional, y si no se incluye la variable declarada pasar a almacenar una referencia nula (contendr el literal null)

Constructor por defecto


No es obligatorio definir un constructor para cada clase, y en caso de que no definamos ninguno el compilador crear uno por nosotros sin parmetros ni instrucciones. Es decir, como si se hubiese definido de esta forma:

<nombreTipo>(){} Gracias a este constructor introducido automticamente por el compilador, si Coche es una clase en cuya definicin no se ha incluido ningn constructor, siempre ser posible crear uno nuevo usando el operador new as:

Coche c = new Coche(); //Crea coche c llamando al constructor por defecto de Coche Hay que tener en cuenta una cosa: el constructor por defecto es slo incluido por el compilador si no hemos definido ningn otro constructor. Por tanto, si tenemos una clase en la que hayamos definido algn constructor con parmetros pero ninguno sin parmetros no ser vlido crear objetos de la misma llamando al constructor sin parmetros, pues el compilador no lo habr definido automticamente. Por ejemplo, con la ltima versin de la clase de ejemplo Persona es invlido hacer:

Persona p = new Persona(); // ERROR: // El nico constructor de Persona // toma 3 parmetros

Referencia al objeto actual con this


Dentro del cdigo de cualquier mtodo de un objeto siempre es posible hacer referencia al propio objeto usando la palabra reservada this. Esto puede venir bien a la hora de escribir constructores de objetos debido a que permite que los nombres que demos a los parmetros del constructor puedan coincidir nombres de los campos del objeto sin que haya ningn problema. Por ejemplo, el constructor de la clase Persona escrito anteriormente se puede rescribir as usando this:

Persona (string Nombre, int Edad, string NIF) { this.Nombre = Nombre; this.Edad = Edad; this.NIF = NIF; }

Es decir, dentro de un mtodo con parmetros cuyos nombres coincidan con campos, se da preferencia a los parmetros y para hacer referencia a los campos hay que prefijarlos con el this tal y como se muestra en el ejemplo. El ejemplo anterior puede que no resulte muy interesante debido a que para evitar tener que usar this podra haberse escrito el constructor tal y como se mostr en la primera versin del mismo: dando nombres que empiecen en minscula a los parmetros y nombres que empiecen con maysculas a los campos. De hecho, ese es el convenio que Microsoft recomienda usar. Sin embargo, como ms adelante se ver s que puede ser til this cuando los campos a inicializar a sean privados, ya que el convenio de escritura de identificadores para campos privados recomendado por Microsoft coincide con el usado para dar identificadores a parmetros (obviamente otra solucin sera dar cualquier otro nombre a los parmetros del constructor o los campos afectados, aunque as el cdigo perdera algo legibilidad) Un uso ms frecuente de this en C# es el de permitir realizar llamadas a un mtodo de un objeto desde cdigo ubicado en mtodos del mismo objeto. Es decir, en C# siempre es necesario que cuando llamemos a algn mtodo de un objeto precedamos al operador .de alguna expresin que indique cul es el objeto a cuyo mtodo se desea llamar, y si ste mtodo pertenece al mismo objeto que hace la llamada la nica forma de conseguir indicarlo en C# es usando this. Finalmente, una tercera utilidad de this es permitir escribir mtodos que puedan devolver como objeto el propio objeto sobre el que el mtodo es aplicado. Para ello bastara usar una instruccin return this; al indicar el objeto a devolver.

Das könnte Ihnen auch gefallen