Laboratorio de Programación Orientada a Objetos (Grupo C) 1

Anuncio
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?
Descargar