UNIVERSIDAD DON BOSCO FACULTAD DE ESTUDIOS TECNOLÓGICOS ESCUELA DE COMPUTACION GUIA DE LABORATORIO #13 Nombre de la Practica: CICLO: 01/ 2013 Lugar de Ejecución: Tiempo Estimado: MATERIA: Programación Orientada a Objetos (POO) en C++ Centro de Computo 2 horas y 30 minutos Introducción a la Programación I. OBJETIVOS Que el alumno sea capaz de: • Redactar la sintaxis apropiada para definir una "Clase" en lenguaje C++. • Definir las capacidades de realizar tareas específicas que tendrá un objeto, por medio de los métodos. II. INTRODUCCION TEORICA PROGRAMACION ORIENTADA A OBJETOS (POO) A continuación se dan los puntos básicos para la definición de clases y creación de objetos. Clases y Objetos en C++: C++ es un lenguaje orientado a objetos, su gran virtud es usar este prototipo para hacer software más depurado y reutilizable. La base de la programación orientada a objetos es el uso de clases, una clase es un tipo de datos abstracto con la cual podemos definir objetos, un objeto es un tipo especial de variable con atributos propios y funciones miembro (métodos). Los que tengan experiencia con estructuras no les será muy ajeno el concepto, una clase es muy parecida a las estructuras solo con funciones propias y un sistema de protección. Escribiendo la primera clase: 1 Siempre los ejemplos visuales son los mejores, una clase se define con la palabra reservada class, en el ejemplo de la Figura 13.1 se define una clase con el nombre de Ejemplo con una función miembro pública (que se explicará en breve) llama diHola, el cuerpo de la clase se introduce entre llaves y termina con punto y coma (;). Métodos Públicos y Privados: C++ cuenta con las palabras reservadas public, private y protected que forman el sistema de protección. public: Al establecer un método como público (public), este puede ser accesado desde cualquier lugar del programa, este es el nivel de seguridad más bajo. Figura 13.1: definición de una clase y 3 métodos Private: Determina que solo puede ser usado dentro de la misma clase (este es el nivel más restrictivo) Protected: Indica que solo puede ser usado por la clase y clases padre. Se verá en otra práctica, cuando se trate el tema de la Herencia. Para establecer métodos como públicos solo basta con indicar la palabra public seguida de dos puntos y añadir los métodos y atributos bajo de eso, todo lo que se encuentre bajo de eso será establecido como publico hasta encontrar otro nivel de protección. A continuación se pondrá un cuerpo a al método diHola ya que lo escrito antes es solo el prototipo del método, los prototipos son declaraciones que indican solamente el tipo y parámetros del método (o función). 2 Al nombre del método se antepone el nombre de la clase a la que pertenece y su tipo, aquí se agrega un método llamado “diHola” del tipo void, un método void no retorna ningún valor, hace su proceso y finaliza. Inicializando un objeto: Ahora dentro del método main() se declara un objeto de Ejemplo llamado ej, esto se logra anteponiendo el tipo: Para acceder a los métodos se puede usar el operador de acceso . (Punto), con los métodos y atributos públicos, recuerde que los métodos privados son solo accesibles desde la misma clase. Ya el ejercicio completo quedaría de la siguiente manera (ver Figura 13.2). Si se quiere ejecutar el metodoPrivado, no se podría hacer ya que este solo es accesible desde la misma clase, pero se podría utilizar un método público de la misma clase que llame al método privado, Ver ejemplo en la Figura 13.3 Figura 13.2: Codigo fuente con la declaración de una Clase y sus métodos. El método diHola(), llama al metodoPrivado(), entonces ya se puede visualizar el contenido desde main. 3 Figura 13.3: Cómo invocar a un método privado de una Clase, solamente desde sus propios métodos, en este caso desde método diHola(). III. MATERIALES Y EQUIPO Para la realización de la guía de práctica se requerirá lo siguiente: No. Requerimiento 1 Guía de Laboratorio # 13 de IP 2 Compilador de C++. 3 Disquete ó Memoria USB Cantidad 1 1 1 4 IV. PROCEDIMIENTO Redacte, pruebe y analice los siguientes códigos fuentes. Ejercicio 1. Utilizando los miembros de una clase Crear un archivo de código fuente denominado guia13ejemplo1. Implementar a una clase cPersona con los siguientes datos miembros: nombre, dNacimiento (día de nacimiento), mNacimiento (mes de nacimiento), aNacimiento (año de nacimiento) y dirección. Las funciones miembro serán obtenNombre, obtenDomicilio, obtenFechaNacimiento, ponerNombre, ponerDirección, ponerFechaNacimiento. #include <iostream> #include <conio.h> #include <string.h> using namespace std; //declaracion de clase cPersona class cPersona{ public: //miembros publicos/externos de clase cPersona(); //constructor //metodos char *obtenNombre(void); void obtenDomicilio(char midireccion[]); void obtenFechaNacimiento(void); void ponerNombre(void); void ponerDireccion(void); void ponerFechaNacimiento(void); private: //miembros privados //campos (variables y arreglos) char nombre[20]; int dNacimiento; //día de nacimiento int mNacimiento; //mes de nacimiento int aNacimiento; //año nacimineot char direccion[50]; };//fin clase cpersona main(){ //crea a objeto luis segun la clase cPersona cPersona luis; char *direccioncasa; 5 //invoca a metodos de objeto luis luis.ponerNombre(); luis.ponerDireccion(); luis.ponerFechaNacimiento(); //retorna valores almacenados en objeto luis cout<<endl<<"Yo me llamo "<<luis.obtenNombre(); luis.obtenDomicilio(direccioncasa); cout<<", vivo en "<<direccioncasa<<", y naci el "; luis.obtenFechaNacimiento(); getch(); }//fin funcion principal //definicion de metodos de clase cPersona cPersona::cPersona(){ cout<<endl<<"Acabas de crear a una persona"<<endl; }//fin constructor clase void cPersona::ponerNombre(void){ cout<<endl<<"Dime como me llamo yo: "; gets(nombre); }//fin metodo ponerNombre void cPersona::ponerDireccion(void){ cout<<endl<<"indicame mi domicilio: "; gets(direccion); }//fin metodo ponerDireccion void cPersona::ponerFechaNacimiento(void){ cout<<endl<<"indicame mi fecha de nacimiento, asi: "; cout<<endl<<" dia= "; cin>>dNacimiento; cout<<endl<<" mes= "; cin>>mNacimiento; cout<<endl<<" año= "; cin>>aNacimiento; }//fin metodo ponerFechaNacimiento char *cPersona::obtenNombre(void){ //retorna arreglo interno (nombre) de la clase return(nombre); }//fin metodo obtenNombre void cPersona::obtenDomicilio(char midireccion[]){ //retorna en arreglo midireccion[] a campo direccion strcpy(midireccion,direccion); }//fin metodo obtenDomicilio 6 void cPersona::obtenFechaNacimiento(void){ cout<<dNacimiento<<"/"<<mNacimiento<<"/"<<aNacimiento; }//fin metodo obtenFechaNacimiento Ejercicio 2. Creando una Clase Crear un archivo de código fuente denominado guia13ejemplo2. Redactar el ejemplo indicado en la Figura 13.3 de la introducción teorica de esta practica. Comprobar que el mismo funciona… Agregar los comentarios que hagan falta por líneas y luego por bloques de codigo. Ejercicio complementario: Modificar la clase cPersona del ejercicio 1, para agregar un método publico que indique si una fecha de nacimiento recibida es correcta (‘s’) o es invalida (‘n’). Ejemplos de algunas fechas incorrectas: dia: 30, mes: 2, año 1998 dia: 19, mes: 62, año 1960 dia: -5, mes: 9, año 2001, Luego, modificar función principal main para que indique cuando la fecha asignada a una persona es incorrecta y asi volverla a solicitar!! V. DISCUSION DE RESULTADOS 1. Crea una clase CRectángulo. Esta clase tiene dos datos miembro, largo y ancho. También, la clase cuenta con métodos que calculan el perímetro (obtenPerímetro) y el área (obtenArea) del rectángulo, así como métodos para obtener y poner los valores correspondientes a los atributos largo y ancho. 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”. 2. 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. 3. Crear una aplicación en C, que contenga una clase donde calcule el área de al menos 3 figuras planas trigonométricas (triangulo, cuadrado, rombo, circulo, etc.). Y otra clase 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