Laboratorio de Programación Orientada a Objetos (Grupo C) Miguel Angel Mendoza Moreno 1 LABORATORIO 3: Clases y Objetos CONTENIDOS 1 2 3 4 5 6 Objetivo Conceptualización Ejemplo Observaciones Aplicación Consulta 2 2 4 5 5 5 Laboratorio de Programación Orientada a Objetos (Grupo C) Miguel Angel Mendoza Moreno 2 Objetivo. Determinar las diferencias ambientales de un lenguaje de programación Orientado a Objetos con respecto a uno tradicional a partir del manejo de Tads por medio de clases y objetos. CONCEPTUALIZACIÓN TAD Recordemos que: - Un Tipo de Datos contiene características y comportamientos, por ejemplo el Tipo de Dato int está descrito por el uso dos bytes para manejar diferentes ejemplares entre -32768 y 327647 y cada uno de esos ejemplares puede ser adicionado en uno (++), reducido en uno (--), adicionado a otros ejemplares, ser multiplicado, ser leído, visualizado, en fin, contamos con múltiples comportamientos para ese tipo de dato. - Cuando el diseñador requiere solucionar un problema por medio de la implementación de un programa, debe organizar su abstracción por medio de la definición de unidades funcionales bien definidas denominadas Tipos Abstractos de Datos, así pues constituimos el concepto de Tad. - ¿Qué compone a un Tad?, o Cierta relatoría de la información administrativa que tiene por objetivo permitir a cualquier programador conocer las características y dimensiones propias (nombre, invariante, operaciones con pre y post condiciones) o Definición de la unidad fundamental de datos o Especificación de las operaciones para brindar la funcionalidad al dato - ¿Cómo representar un Tad?, cualquier abstracción coherente que pueda ser enmarcada dentro de una estructura de datos resulta válida para representar un Tad, contando entre estas: o Enumeraciones o Uniones o Registros (struct) o Clases. (Será nuestra representación a emplear) Es importante escribir programas que sean comprensibles y fáciles de mantener. Las modificaciones son la regla más que la excepción. Los programadores deberán prever que su código sea modificado. Las clases facilitan la capacidad de modificación de los programas. ! CLASES Y OBJETOS - - Las clases permiten que un programador modele objetos que tiene atributos (representados como miembros de datos) y comportamientos u operaciones (funciones miembro) Los tads en C++ son definidos regularmente por medio de la palabra reservada class (siempre en minúscula) Un objeto es la instanciación de una clase, es decir, es una “construcción” que posee atributos específicos y la posibilidad de tratarlos por medio de operaciones Laboratorio de Programación Orientada a Objetos (Grupo C) Miguel Angel Mendoza Moreno - 3 El comportamiento o métodos se activan como respuesta a los mensajes enviados por un objeto en particular Un mensaje corresponde a una llamada de función miembro Definición de una Clase Sintácticamente una clase posee: class Estudiante{ private: … protected: … public: … }; - - - Una buena práctica de ingeniería es dejar siempre la primera letra del nombre de la clase en mayúscula. Las etiquetas private:, protected: y public: se denominan especificadores de acceso a miembro, no tienen un orden riguroso dentro de la especificación de la clase y siempre finalizan con “:” Por defecto todo lo que se encuentre en el cuerpo de la clase es privado, a menos que sea especificado de forma diferente No se debe olvidar en “;” al final de las llaves {} Cada uno de los métodos (operaciones definidas para la clase) son implementados fuera del cuerpo de la clase, empleando el operador de resolución de ámbito ::. Ejemplo: Estudiante::leerDatos(){ … } Accesibilidad a una Clase Dado que el ocultamiento es una característica básica de la Orientación a Objetos, ésta debe verse reflejada en la clase, de modo que una clase debe determinar el grado de visibilidad de sus componentes. ! Cuando se habla de visibilidad, se referencia a la disponibilidad para permitir que el exterior acceda a cada uno de los componentes que posee la clase. En la práctica un objeto debe ocultar su información esencial y hacer visibles los métodos para accederla indirectamente. Reglas Generales: - Todos los atributos deben estar definidos dentro del especificador de acceso private:, para corresponder a un adecuado ocultamiento –posteriormente se evidenciarán atributos en otros especificadores- Todo componente que el exterior requiera acceder directamente será dispuesto en el especificador de acceso public: - Normalmente la mayoría de operaciones de clase son definidos dentro del especificador public: - En síntesis una clase poseerá una interfaz (operaciones e información visible directamente al exterior) y un “módulo oculto” (atributos y operaciones propias y no accesibles directamente desde el exterior) - Los miembros dato de una clase (atributos) no pueden inicializarse dentro de la clase Laboratorio de Programación Orientada a Objetos (Grupo C) Miguel Angel Mendoza Moreno 4 Definición y acceso de los Objetos Se definen como cualquier tipo de dato: NombreClase nombre_objeto; Ejemplo: Estudiante primiparo; Cada objeto accede a los respectivos métodos: nombre_objeto.método(parámetros reales); Ejemplo: primiparo.leerDatos(); EJEMPLO Definición del Problema. La empresa comercializadora de productos de belleza “Encanto Salvaje” le ha contratado a usted para que desarrolle un sistema que permita discriminar el pago para cada empleado, de quien se posee nombre, identificación, nivel (junior, medium, master), salario básico y puntos de bonificación. La política del pago es que a todo junior percibe adicional a su salario básico el producto de sus bonificaciones * 1000, un empleado médium adicional al básico recibe el producto de sus bonificaciones* 2200 y un master adicional a su básico el producto de bonificaciones por 4500. a cada empleado se le deduce el 4% para salud, 8% para pensiones y 10% para el fondo de empleados. Debe usted generar entonces el formato de impresión de especificando el salario bruto, deducciones y el salario neto de un solo empleado. Análisis del Problema. Estamos ante una nómina simple porque solo se aplicará un empleado por ejecución, ¿Cómo estructurar nuestra solución?, La respuesta es por medio de un TAD, pero, ¿Cómo representamos un tipo abstracto de datos en la OO? R./ Con clases! /*ARCHIVO empleado.h *INFORMACIÓN ADMINISTRATIVA * */ class Empleado{ private: int id; char nombre[30]; char nivel; //'j'=junior,'e'=medium,'a'=master int bonos; float basico,neto,seguro,pensiones,fondo; public: fijarDatos(); obtenerDatos(); }; /*ARCHIVO empleado.cpp */ #include<iostream.h> #include"empleado.h" Empleado::fijarDatos(){ cout<<"\nFIJACION DE DATOS DE UN EMPLEADO"<<endl; cout<<"ID: "<<endl; cin>>id; cout<<"NOMBRE: "<<endl; cin.ignore(); cin.getline(nombre,30); cout<<"NIVEL: "<<endl; Laboratorio de Programación Orientada a Objetos (Grupo C) Miguel Angel Mendoza Moreno 5 cin.get(nivel); cout<<"SAL. BASICO: "<<endl; cin>>basico; cout<<"BONOS: "<<endl; cin>>bonos; } Empleado::obtenerDatos(){ cout<<"\n\nIMPRESION DE DATOS DE UN EMPLEADO"<<endl; cout<<"ID: "<<id<<endl; cout<<"NOMBRE: "<<nombre<<endl; cout<<"NIVEL: "<<nivel<<endl; cout<<"SAL. BASICO: "<<basico<<endl; cout<<"BONOS: "<<bonos<<endl; } /* ARCHIVO principa.cpp */ #include<iostream.h> #include"empleado.h" int main(){ Empleado emp; emp.fijarDatos(); emp.obtenerDatos(); return 0; } OBSERVACIONES ¿Cuál es la estructura de datos? ¿Cuál es el nuevo tipo de datos creado? ¿Dónde se creó un objeto? ¿Cómo pudo el objeto acceder a las partes ocultas o privadas? ¿Cuántas y cuáles son las funciones miembro definidas? APLICACIÓN 1. A partir del ejercicio anterior produzca modificaciones de la siguiente manera: - - Suponga que no se hace el registro para un empleado sino para n. Considere necesario realizar los respectivos cálculos para poder deducir los valores del seguro social, pensiones y fondo de empleados y finalizar brindando un salario neto. Ahora a un empleado se le adicionarán dos campos interesantes: fecha de nacimiento y Fecha de vinculación. 2. Recordemos el ejercicio guía desde nuestro laboratorio 0: Desarrollar una aplicación que permita clasificar en dos vectores (aprobados, reprobados) la información perteneciente a los 20 estudiantes de cierta asignatura; cada estudiante posee un código, nombre, nota, fecha nacimiento. CONSULTAS ¿Qué es un constructor y qué tiene que ver con el proceso de inicialización? ¿Qué es sobrecargar?