GUÍA DE LABORATORIO N.2:CLASES, CONSTRUCTORES Y DESTRUCTORES 30 de marzo de 2014

Anuncio
GUÍA DE LABORATORIO N.2:CLASES, CONSTRUCTORES Y DESTRUCTORES
30 de marzo de
2014
Fundamentos
La programación orientada a objetos surge en la historia como un intento para dominar la complejidad que, de forma
innata, posee el software. Tradicionalmente, la forma de enfrentarse a esta complejidad ha sido empleando lo que
llamamos programación estructurada, que consiste en descomponer el problema objeto de resolución en
subproblemas y más subproblemas hasta llegar a acciones muy simples y fáciles de codificar. Se trata de descomponer
el problema en acciones, en verbos.
El modelo Orientado a Objetos
Para entender este modelo es necesario revisemos inicialmente 2 conceptos básicos:
 Objetos
 Clases
1. Objetos
Un objeto del mundo real es cualquier cosa que vemos a nuestro alrededor. Digamos que para leer este artículo lo
hacemos a través del monitor y una computadora, ambos son objetos, al igual que nuestro teléfono celular, un árbol o
un automóvil.
Analicemos un poco más a un objeto del mundo real, como la computadora. No necesitamos ser expertos en hardware
para saber que una computadora está compuesta internamente por varios componentes: la tarjeta madre, el chip del
procesador, un disco duro, una tarjeta de video, y otras partes más. El trabajo en conjunto de todos estos componentes
hace operar a una computadora.
Internamente, cada uno de estos componentes puede ser sumamente complicado y puede ser fabricado por diversas
compañías con diversos métodos de diseño. Pero nosotros no necesitamos saber cómo trabajan cada uno de estos
componentes, como saber que hace cada uno de los chips de la tarjeta madre, o cómo funciona internamente el
procesador. Cada componente es una unidad autónoma, y todo lo que necesitamos saber de adentro es cómo
interactúan entre sí los componentes, saber por ejemplo si el procesador y las memorias son compatibles con la tarjeta
madre, o conocer donde se coloca la tarjeta de video. Cuando conocemos como interaccionan los componentes entre
sí, podremos armar fácilmente una computadora.
¿Que tiene que ver esto con la programación? La programación orientada a objetos trabaja de esta manera. Todo el
programa está construido en base a diferentes componentes (Objetos), cada uno tiene un rol específico en el programa
y todos los componentes pueden comunicarse entre ellos de formas predefinidas.
Todo objeto del mundo real tiene 2 componentes: características y comportamiento.Por ejemplo, los automóviles
tienen características (marca, modelo, color, velocidad máxima, etc.) y comportamiento (frenar, acelerar, retroceder,
llenar combustible, cambiar llantas, etc.).
Los Objetos de Software, al igual que los objetos del mundo real, también tienen características y comportamientos.
Un objeto de software mantiene sus características en una o más "variables", e implementa su comportamiento con
"métodos". Un método es una función o subrutina asociada a un objeto.
1
GUÍA DE LABORATORIO N.2:CLASES, CONSTRUCTORES Y DESTRUCTORES
30 de marzo de
2014
Para redondear estas ideas, imaginemos que tenemos estacionado en nuestra cochera un Ford Focus color azul que
corre hasta 260 km/h. Si pasamos ese objeto del mundo real al mundo del software, tendremos un objeto Automóvil
con sus características predeterminadas:
Marca = Ford
Modelo = Focus
Color = Azul
Velocidad Máxima = 260 km/h
Cuando a las características del objeto le ponemos valores decimos que el objeto tiene estados. Las variables
almacenan los estados de un objeto en un determinado momento.
Definición teórica: Un objeto es una unidad de código compuesto de variables y métodos relacionados.
2. Las Clases
En el mundo real, normalmente tenemos muchos objetos del mismo tipo. Por ejemplo, nuestro teléfono celular es sólo
uno de los miles que hay en el mundo. Si hablamos en términos de la programación orientada a objetos, podemos decir
que nuestro objeto celular es una instancia de una clase conocida como "celular". Los celulares tienen características
(marca, modelo, sistema operativo, pantalla, teclado, etc.) y comportamientos (hacer y recibir llamadas, enviar
mensajes multimedia, transmisión de datos, etc.).
Cuando se fabrican los celulares, los fabricantes aprovechan el hecho de que los celulares comparten esas
características comunes y construyen modelos o plantillas comunes, para que a partir de esas se puedan crear muchos
equipos celulares del mismo modelo. A ese modelo o plantilla le llamamos CLASE, y a los equipos que sacamos a partir
de ella la llamamos OBJETOS.
2
GUÍA DE LABORATORIO N.2:CLASES, CONSTRUCTORES Y DESTRUCTORES
30 de marzo de
2014
Esto mismo se aplica a los objetos de software, se puede tener muchos objetos del mismo tipo y mismas características.
Definición teórica: La clase es un modelo o prototipo que define las variables y métodos comunes a todos los objetos de
cierta clase. También se puede decir que una clase es una plantilla genérica para un conjunto de objetos de similares
características.
Por otro lado, una instancia de una clase es otra forma de llamar a un objeto. En realidad no existe diferencia entre un
objeto y una instancia. Sólo que el objeto es un término más general, pero los objetos y las instancias son ambas
representación de una clase.
Ejemplo 1: Empleando programación orientada a objetos realice un programa que calcule el
área y el perímetro de un rectángulo
class Rectangulo {
public:
void capturarDatos();
void calcularArea();
void calcularPerimetro();
private:
int base;
int altura;
};
La definición de la clase Rectangulo inicia con la palabra clave class. El cuerpo de la definición de la clase se delimita
mediante llaves { }. La definición de la clase termina con un punto y coma. La definición de la clase Rectangulo contiene
los miembros enteros base y altura y las funciones miembro capturarDatos, calcularArea y calcularPerimetro.
Las etiquetas public: protected: y private: son especificadores de acceso de miembros. Cualquier dato miembro o
función miembro declarado después del especificador de acceso de miembros public es accesible cuando el programa
tiene acceso a un objeto de la clase Rectangulo. Cualquier dato miembro o función miembro declarado tras el
especificador de acceso de miembros private es accesible sólo para las funciones miembro de la clase. Los
especificadores de acceso de miembros siempre van seguidos por dos puntos y pueden aparecer varias veces y en
cualquier orden en una definición de clase.
3
GUÍA DE LABORATORIO N.2:CLASES, CONSTRUCTORES Y DESTRUCTORES
30 de marzo de
2014
Los dos miembros enteros aparecen tras el especificador de acceso de miembros private. Esto indica que estos datos
miembro de la clase sólo pueden ser accedidos por las funciones miembro de la clase. Por lo tanto, los datos miembro
sólo pueden ser accedidos por las tres funciones miembro en la parte public.
El nombre de la clase se vuelve un nuevo especificador de tipo. Puede haber muchos objetos de una clase, así como
puede haber muchas variables de un tipo como int.
En el siguiente ejemplo, el programa instancia (crea) un solo objeto de la clase Rectangulo llamado rec. Utilizando este
objeto se pueden mandar llamar a las funciones miembro.
El operador de ámbito (::) es el medio que tiene el compilador para identificar en donde están definidos los
componentes de una clase; por tanto, su uso es necesario cuando alguno de estos componentes se utiliza fuera del
ámbito de la clase.
#include<conio.h>
#include<iostream.h>
class Rectangulo {
public:
void capturarDatos();
void calcularArea();
void calcularPerimetro();
private:
int base;
int altura;
};
void Rectangulo::capturarDatos()
{
cout<<"Cual es la base del rectangulo";
cin>>base;
cout<<"Cual es la altura del rectangulo";
cin>>altura;
}
void Rectangulo::calcularArea()
{
cout<<"El area del rectángulo es:"<<base*altura;
cout<<"\n";
}
void Rectangulo::calcularPerimetro()
{
cout<<"El perímetro del rectángulo es:" <<2*base+2*altura;
cout<<"\n";
}
main()
{
4
GUÍA DE LABORATORIO N.2:CLASES, CONSTRUCTORES Y DESTRUCTORES
30 de marzo de
2014
Rectangulo rec;
//declaración del objeto
system("cls"); // clrscr();
rec.capturarDatos(); //el objeto manda llamar la función miembro
capturarDatos
rec.calcularArea();
rec.calcularPerimetro();
getch();
}
Inicialización de objetos mediante constructores
C++ requiere una llamada a un constructor para cada objeto que se crea, lo cual ayuda a asegurar que cada objeto se
inicialice antes de utilizarlo en un programa. La llamada al constructor ocurre de manera implícita cuando se crea el
objeto. Si una clase no incluye un constructor de forma explicita, el compilador proporciona un constructor
predeterminado, es decir un constructor sin parámetros.
Definición de un constructor: El constructor tiene el mismo nombre que su clase, en su lista de parámetros específica los
datos que requiere para realizar su tarea.
Prototipo de la Función:
nombre_clase();
Desarrollo de la Función:
nombre_clase::nombre_clase(){
cuerpo;
}
En la clase Rectangulo, se define un constructor que no tiene parámetros de entrada. Posteriormente este constructor
Rectangulo::Rectangulo asigna un valor e cero para las variables de clase base y altura.
Destrucción de objetos mediante funciones Destructoras
El complemento de un constructor es la función destructora. A esta función se le llama automáticamente cuando se
destruye el objeto. El nombre de las funciones destructoras debe ser el mismo que el de la clase a la que pertenece
precedido del carácter ~ .Los objetos se destruyen cuando se salen de ámbito cuando son locales, y al salir del
programa si son globales. Las funciones destructoras no devuelven valor y tampoco pueden recibir parámetros.
El uso mas apropiado de las funciones destructoras es para liberar memoria, esto es cuando se esta trabajando con
estructuras de memoria dinámica.
Prototipo de la Función:
~nombre_clase();
Desarrollo de la Función:
nombre_clase:: ~nombre_clase(){
cuerpo;
}
En la clase Rectangulo, se define un destructor que se ejectura en el momento que el objeto se termina de emplear.
5
GUÍA DE LABORATORIO N.2:CLASES, CONSTRUCTORES Y DESTRUCTORES
30 de marzo de
2014
#include<conio.h>
#include<iostream.h>
class Rectangulo {
public:
Rectangulo(); //definición del constructor
~Rectangulo();
void capturarDatos();
void calcularArea();
void calcularPerimetro();
private:
int base;
int altura;
};
Rectangulo::Rectangulo() // función constructor
{
base=0;
altura=0;
}
Rectangulo:: ~Rectangulo() // función constructor
{
cout << "Destruyendo...\n";
getch();
}
void Rectangulo::capturarDatos()
{
cout<<"Cual es la base del rectangulo";
cin>>base;
cout<<"Cual es la altura del rectangulo";
cin>>altura;
}
void Rectangulo::calcularArea()
{
cout<<"El area del rectángulo es:"<<base*altura;
cout<<"\n";
}
void Rectangulo::calcularPerimetro()
{
cout<<"El perímetro del rectángulo es:" <<2*base+2*altura;
cout<<"\n";
}
main()
{
Rectangulo rec;
//declaración del objeto
system("cls"); // clrscr();
6
GUÍA DE LABORATORIO N.2:CLASES, CONSTRUCTORES Y DESTRUCTORES
rec.capturarDatos(); //el
capturarDatos
rec.calcularArea();
rec.calcularPerimetro();
getch();
}
objeto
manda
llamar
la
30 de marzo de
2014
función
miembro
Ejercicios propuestos
Considerando las temáticas tratadas previamente realice los siguientes programas:
1.- Crear una clase Círculo que contenga funciones miembro que permitan calcular el área y la circunferencia del círculo.
2.- Crear la clase Pesos que contenga funciones miembro para convertir pesos a dólares y dólares a pesos.
3.- Crear la clase Fecha que contenga una función miembro para capturar el día, mes y año y otra función miembro que
indique si el año es bisiesto, tomando en cuenta que el año es bisiesto si cumple con las siguientes condiciones: si el año
es divisible entre 4 pero no entre 100, o si el año es divisible entre 400.
4.- Crear la clase Triangulo que contenga funciones miembro que permitan capturar los valores de los 3 lados de un
triángulo, y que muestre un mensaje donde indique si es un triángulo equilátero, escaleno o isósceles. El triángulo
equilátero es el que tiene sus 3 lados iguales, el isósceles tiene dos lados iguales y el escaleno tiene todos sus lados
distintos.
5. Complemente la clase Rectángulo considerando que el método que recibe valores, debe comprobar que tanto largo
como ancho sean mayores que 0 y menores que 20, de lo contrario mostrara mensaje “calculo imposible”.
6. Crear una aplicación que contenga una clase llamada Calculadora, con las siguientes características:
• variable primero, variable segundo – son los números con los que operará.
• fijarNumeros(n1, n2) – guardará en el objeto los números para operar luego con ellos.
• sumar() – sumará los números. No necesita parámetros porque accede directamente a las
propiedades (variables) que tenga guardadas el objeto de clase calc que creemos.
• dividir() – lo mismo que antes, dividirá primero entre segundo, pero para asegurarnos de que
pueda hacerse, recurrirá a otro método.
• comprobar() – este método comprobará que segundo sea distinto de cero para poder dividir.
• Los números deben ser introducidos por el usuario.
7. Crear una aplicación en C++, permita el cálculo del área de al menos 3 figuras planas trigonométricas (triangulo,
cuadrado, rombo, circulo, etc.). Y otra estructura donde calcule el volumen de al menos 3 cuerpos con volumen (cubo,
cono, cilindro, esfera, etc.). Las variables necesarias para calcular el área y el volumen deben ser introducidas por el
usuario.
7
Documentos relacionados
Descargar