Vous êtes sur la page 1sur 6

Objetos y clases

Un objeto es una combinación de código y datos que puede tratarse como una
unidad. Un objeto puede ser una porción de una aplicación, como un control o un
formulario. Una aplicación entera también puede ser un objeto.

Reutilizar el código
Los objetos permiten declarar variables y procedimientos una vez y utilizarlos
siempre que sean necesarios. Por ejemplo, si desea agregar un corrector
ortográfico a una aplicación, puede definir todas las variables y funciones
auxiliares para proporcionar funcionalidad de corrección ortográfica. Si crea el
corrector ortográfico como una clase, puede volver a utilizarlo en otras
aplicaciones mediante la inclusión de una referencia en el ensamblado compilado.
Aún mejor, tal vez pueda ahorrarse trabajo mediante el uso de una clase de
corrector ortográfico que otra persona ya haya desarrollado.

Clases
Cada objeto de Visual Basic está definido por una clase. Una clase describe las
variables, propiedades, procedimientos y eventos de un objeto. Los objetos son
instancias de clases; pueden crearse tantos objetos como sean necesarios una
vez que se defina una clase.

Para comprender la relación entre un objeto y su clase, piense en los moldes de


hacer galletas y en las galletas. El molde es la clase. Define las características de
cada galleta, por ejemplo, el tamaño y la forma. La clase se utiliza para crear
objetos. Los objetos son las galletas.

Dos ejemplos en Visual Basic podrían ayudar a ilustrar la relación entre las clases
y objetos.

• Los controles en el Cuadro de herramientas de Visual Basic representan


las clases. Cuando se arrastra un control del Cuadro de herramientas a un
formulario, se está creando un objeto; una instancia de una clase.
• El formulario con el que se trabaja en tiempo de diseño es una clase. En
tiempo de ejecución, Visual Basic crea una instancia de la clase del
formulario, es decir, un objeto.

Varias instancias
Los objetos recientemente creados a partir de una clase son a menudo idénticos.
Una vez que existen como objetos individuales no obstante, sus variables y
propiedades se pueden cambiar independientemente de las demás instancias. Por
ejemplo, si agrega tres casillas de verificación a un formulario, cada objeto de
botón de casilla de verificación es una instancia de la clase CheckBox. Los objetos
CheckBox individuales comparten un conjunto de características y funciones
comunes (propiedades, variables, procedimientos y eventos) definidos por la
clase. No obstante, cada uno tiene su propio nombre, puede habilitarse y
deshabilitarse por separado, y puede colocarse en una ubicación diferente en el
formulario.

Atributos
Los atributos de una clase sirven, en principio, para almacenar datos de los
objetos que se
instancian a partir de esa clase.
La sintaxis general es la siguiente:
[ModificadorDeAtributo] tipo nombreAtributo;
5.4.2.1 Modificadores de atributo:
Un atributo puede tener más de un modificador y en caso de ser así, estos se
especificarán
uno detrás de otro, separados mediante un espacio en blanco.
• static
Ya hemos estudiado que existen dos tipos generales de atributos:
• Atributos de instancia/objeto
• Atributos de clase
Los atributos de objeto son variables u objetos que almacenan valores distintos
para objetos
instanciados a partir de esa clase. Los atributos de clase son variables u objetos
que
almacenan el mismo valor para todos los objetos instanciados a partir de esa
clase.
Dicho de otra forma: mientras que a partir de un atributo de objeto de una clase,
se crean en
memoria tantas copias de ese atributo como objetos de esa clase se instancien, a
partir de un
atributo de clase, sólo se crea en memoria una copia de ese atributo que será
compartido por
todos los objetos de la clase que se instancien.
�En Java, si no se especifica lo contrario, los atributos son de objeto y no de
clase.
Para declarar un atributo de clase se utiliza la palabra reservada static. Este
comportamiento
se puede observar en el siguiente ejemplo:

class Persona
{
static int numPersonas=0; // atributo de clase
String nombre; // atributo de objeto
public Persona (String n) //Constructor de la clase.
{
nombre = n;
numPersonas++;
}
public void muestra()
{
System.out.println(" pero hay "+ (numPersonas-1) +" personas
más.");
}
}
public class EjStatic {
public static void main(String[] args) {
Persona p1,p2,p3; //se declaran p2 = new Persona("Ana"); //Se instancia otro
objeto
p2.muestra();//En pantalla:Soy Ana pero hay 1 persona más
p3 = new Persona("Maria"); //Se instancia otro objeto
p3.muestra();//En pantalla:Soy María pero hay 2 personas más
p1.muestra();//En pantalla:Soy Iker pero hay 2 personas má3 objetos
p1 = new Persona("Pedro"); //Se instancia un objeto
p1.muestra();//En pantalla:Soy Pedro pero hay 0 personas más

miembros public y prívate

C++ define tanto para las estructuras como para las clases tres características
aplicables a los miembros de éstas de tal manera que pueden ser public, private ó
protected, éstas son palabras clave de C++. La palabra clave public implica que es
posible tener libre acceso tanto a las variables como a las funciones miembro de
un objeto utilizando el operador punto, como se hace en el programa
clases01.cpp. Por el contrario, la palabra clave private condiciona el acceso a los
miembros de una clase solamente utilizando los métodos de la clase en sí. La
palabra clave protected la estudiaremos más adelante. De lo dicho señalaré la
primera diferencia entre una estructura y una clase en C++, por defecto, los
miembros de una estructura son de caracter public en tanto que los miembros de
una clase tienen la propiedad private, con respecto a la clase ohm del programa
clases02.cpp las variables miembro tienen todas el caracter de private, Usted
puede verificar ésto tratando de asignar un valor de la siguiente manera:

calculo1.voltaje = 127.85; // ERROR, "voltaje" es private

En el programa clases02.cpp solo es posible asignar valores a las variables


utilizando el método llamado asigna( ) y justamente podemos utilizar éste método
porque lo hemos declarado como public, está claramente señalado al utilizar la
palabra clave public en la línea 14 del programa, ésto significa que en la clase
llamada ohm todos los miembros declarados, sean variables ó métodos en
seguida de la palabra clave public son de libre acceso utilizando el operador
punto. En la POO se dice que los miembros de caracter private constituyen datos
ocultos, por lo ya expuesto, las variables miembro de la clase ohm están ocultas
para el resto del programa. Es práctica general en C++ declarar a las variables
miembro de una clase como private en tanto que a los métodos les corresponde el
caracter de public, sin embargo ésto depende de las necesidades propias del
programa. El programa clases02.cpp demuestra claramente la importancia de
mantener ocultas a las variables miembro, de ésta manera se evitan errores de
cálculo atribuibles al diseño del programa. Bjarne Stroustrup, el inventor de C++
dijo "Los mecanismos de control de acceso de C++ proveen protección contra
accidentes, no contra fraudes" (ARM, 1990). En el archivo comprimido
clases03.zip que puede descargar al final de éste artículo encontrará un programa
adicional llamado clases03.cpp que le permitirá comparar la funcionalidad del
programa clases02.cpp pero utilizando una estructura, ahora bién, si es posible
efectuar el mismo trabajo con dos palabras clave diferentes, ¿Cuál es la razón de
la existencia de éstas dos entidades aparentemente iguales? La respuesta a ésta
pregunta es de carácter histórico, C++ evolucionó a partir de C, de hecho, el
nombre inicial de C++ era "C con clases". C++ aporta en todo caso una estructura
más poderosa y además agrega el uso de clases que como veremos a
continuación tienen características adicionales no compartidas por las estruct

Constructores y destructores

Probablemente ya conozcas el concepto de métodos constructores que ofrecen los lenguajes


de programación orientados a objetos. En caso de que no estés al día aún, el concepto es
bastante simple. Un constructor es aquel método que se ejecutará al momento de crear una
instancia de un objeto. Un destructor por el otro lado, es un método que se ejecutará cada
vez que el objeto sea destruido.

Generalmente los programadores usamos los constructores para inicializar propiedades o


variables miembro así como aceptar parámetros que son críticos para el correcto
funcionamiento de los demás métodos miembros del objeto. También usamos destructores
(aunque este último no es tan común en ciertos lenguajes. No existe este concepto en Java)
para generalmente limpiar y recuperar recursos. Muchas veces este último método es
pasado por alto y con buena razón; los intérpretes generalmente hacen un buen trabajo
destruyendo objetos a medida que no son usados. Sin embargo, en ciertos casos es crítico
usarlo, por ejemplo si queremos cerrar una conexión con una base de datos.

Desde PHP5, el lenguaje ha incorporado un nuevo método para crear constructores y


destructores. Tradicionalmente en programación orientada a objetos, tanto los constructores
como los destructores comparten el mismo nombre de la clase o del objeto. En PHP5 sin
embargo, los creadores decidieron darle un nombre específico a estos procedimientos.
__construct() y __destruct() permiten definir nuestos constructores y destructores.
Obviamente, sólo se permite uno de cada uno por clase. Este nuevo cambio me encanta por
que facilita muchísimo el cambio de nombres, también conocido como refactorización.
Un método constructor es aquél que un objeto llama cuando es creado, i.e. cuando se
construye. Un constructor tiene las siguientes características:

• Siempre tienen el mismo nombre que la clase

• No tienen tipo de regreso

• El objetivo de un constructor es el de inicializar un objeto cuando éste es creado.


Asignaremos los valores iniciales así como los procesos que ésta clase deba realizar.

• Se utiliza para crear tablas de métodos virtuales y poder así desarrollar el polimorfismo,
una de las herramientas de la programación orientada a objetos. Al utilizar un constructor,
el compilador determina cual de los objetos va a responder al mensaje (virtual) que hemos
creado.

• Tiene un tipo de acceso, un nombre y un paréntesis.

Un constructor es una función especial que sirve para construir o inicializar objetos. En C+
+ la inicialización de objetos no se puede realizar en el momento en que son declarados; sin
embargo, tiene una característica muy importante y es disponer de una función llamada
constructor que permite inicializar objetos en el momento en que se crean.

• Un constructor es una función que sirve para construir un nuevo objeto y asignar valores a
sus miembros dato. Se caracteriza por:

- Tener el mismo nombre de la clase que inicializa

- Puede definirse inline o fuera de la declaración de la clase

- No devuelve valores

- Puede admitir parámetros como cualquier otra función

- Puede existir más de un constructor, e incluso no existir

• Si no se define ningún constructor de una clase, el compilador generará un constructor por


defecto. El constructor por defecto no tiene argumentos y simplemente sitúa ceros en cada
byte de las variables instancia de un objeto. Si se definen constructores para una clase, el
constructor por defecto no se genera.

• Un constructor del objeto se llama cuando se crea el objeto implícitamente: nunca se


llama explícitamente a las funciones constructoras. Esto significa que se llama cuando se
ejecuta la declaración del objeto. También, para objetos locales, el constructor se llama
cada vez que la declaración del objeto se encuentra. En objetos globales, el constructor se
llama cuando se arranca el programa.

• El constructor por defecto es un constructor que no acepta argumentos. Se llama cuando


se define una instancia pero no se especifica un valor inicial.

• Se pueden declarar en una clase constructores múltiples, mientras tomen parte diferentes
tipos o número de argumentos. El compilador es entonces capaz de determinar
automáticamente a qué constructor llamar en cada caso, examinando los argumentos.

• Los argumentos por defecto se pueden especificar en la declaración del constructor. Los
miembros dato se inicializarán a esos valores por defecto, si ningún otro se especifica.

DESTRUCTORES

Un destructor es una función miembro con igual nombre que la clase, pero precedido por el
carácter ~. Una clase sólo tiene una función destructor que, no tiene argumentos y no
devuelve ningún tipo. Un destructor realiza la operación opuesta de un constructor,
limpiando el almacenamiento asignado a los objetos cuando se crean. C++ permite sólo un
destructor por clase. El compilador llama automáticamente a un destructor del objeto
cuando el objeto sale fuera del ámbito. Si un destructor no se define en una clase, se creará
por defecto un destructor que no hace nada.

Vous aimerez peut-être aussi