Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Práctica N° 01
Elaborado por:
”
ii
Práctica N° 1: Estructuras, Archivos y Clases en C++
GRUPO N° 1
Presentado por:
iii
Práctica N° 1: Estructuras, Archivos y Clases en C++
RECONOCIMIENTOS
La autora de este trabajo reconoce con gratitud a su mentor para este trabajo, al Ingeniero
Montesinos.
PALABRAS CLAVES
ÍNDICE
1. RESÚMEN 1
2. INTRODUCCIÓN.......................................................................................................1
3. MARCO TEÓRICO.....................................................................................................1
3.1 Abstracción de una entidad...............................................................................1
3.2 Encapsulamiento y ocultamiento de datos dentro de una clase.........................1
3.3 Métodos de servicio para las clases diseñadas.................................................1
4. EXPERIENCIAS DE PRÁCTICA................................................................................1
4.1 Primera Experiencia..........................................................................................1
5. CÓDIGO E …………………………………………………………………………………4
6. CONCLUSIONES.....................................................................................................15
7. CUESTIONARIO......................................................................................................15
Práctica N° 1: Estructuras, Archivos y Clases en C++
Práctica N° 1: Estructuras, Archivos y Clases en C++
1. RESÚMEN
Este documento trata los temas de abstracción de una entidad para ser representada en un
programa como una clase, encapsulamiento y ocultamiento de datos dentro de una clase. Ver las
relaciones de la herencia con los tipos de acceso que puede tener un miembro de clase. Métodos y
la manipulación de los atributos de la clase, las variables locales, los parámetros formales y
valores de retorno
2. INTRODUCCIÓN
Para poder comprender un problema es necesario el comprender los elementos que intervienen en
este, y también los datos o comportamientos que tienen dichos elementos. Es por eso que para
poder comprender un problema y poder resolverlo con programación orientada a objetos uno tiene
que poder definir clases (clases padres y clases hijas) para poder analizar debidamente un
problema.
3. MARCO TEÓRICO
3.1 Abstracción de una entidad
La abstracción nos sirve para poder discernir entre los detalles de los elementos (características o
comportamientos) que son importantes y los que no, nos permiten usar la herencia y aplicar los
modificadores de acceso.
Los miembros private de una clase base son accesibles sólo dentro del cuerpo de esa clase base y
de las funciones friend de esa clase base.
3.3.3 Protected
El uso del acceso protected ofrece un nivel intermedio de protección entre el acceso public y
private. Se puede acceder a los miembros protected de una clase base dentro del cuerpo de esa
clase base, mediante los miembros y funciones friend de esa clase base y mediante los miembros y
funciones friend de cualquier base que se derive de esa clase base. Las funciones miembro de la
clase derivada pueden hacer referencia a los miembros public y protected de la clase base, con
sólo utilizar los nombres de los miembros.
4. EXPERIENCIAS DE PRÁCTICA
4.1 Primera Experiencia
Aprender sobre la abstracción en clases, el uso de la generalización para definir los atributos y
métodos de la clase padre. El uso de la especificación para poder definir los métodos y atributos
propios de las clases hijas.
El programa trata sobre herencia, tenemos la clase padre “persona”, y la clase hija “trabajador”,
esta clase “trabajador” es a su vez clase padre de las clases “albanil”, “gasfitero”, “pintor”.
4.1.1 Modelamiento de la solución clases
2
Práctica N° 1: Estructuras, Archivos y Clases en C++
5. CÓDIGO E
1.
2. /***************************************************************
3. * CODIGO : persona.h
4. * AUTOR :
5. * FECHA : 26/03/2019
7. ****************************************************************/
8. #ifndef PERSONA_H
9. #define PERSONA_H
3
Práctica N° 1: Estructuras, Archivos y Clases en C++
/***************************************************************
* CODIGO : trabajador.h
* AUTOR :
* FECHA : 26/03/2019
* DESCRIPCION : clase persona, modela a la persona
****************************************************************/
#ifndef TRABAJADOR_H
#define TRABAJADOR_H
#include "persona.h"
#include <string>
using namespace std;
/***************************************************************
* CODIGO : albanil.h
* AUTOR :
* FECHA : 26/03/2019
* DESCRIPCION : clase persona, modela a la persona
****************************************************************/
#ifndef ALBANIL_H
#define ALBANIL_H
#include <string>
using namespace std;
#endif
4
Práctica N° 1: Estructuras, Archivos y Clases en C++
/***************************************************************
* CODIGO : gasfitero.h
* AUTOR :
* FECHA : 26/03/2019
* DESCRIPCION : clase persona, modela a la Gasfitero
****************************************************************/
#ifndef GASFITERO_H
#define GASFITERO_H
#include <string>
using namespace std;
#endif
/***************************************************************
#include "persona.h"
* CODIGO : persona,h
* AUTOR :
#include <iostream>
* FECHA : 26/03/2019
#include <string>
* DESCRIPCION : clase persona, modela a la persona
****************************************************************/
usingPINTOR_H
#ifndef namespace std;
#define PINTOR_H
extern void manejaPersona(Persona juan)
{
#include <string>
cout << "DATOS DE LA PERSONA " << endl;
using namespace std;
cout << "=================== " << endl;
juan.mostrar();
class Pintor : public
cout Trabajador
<< "INGRESAR DATOS DE LA PERSONA " << endl;
{ cout << "============================ " << endl;
public: juan.ingresar();
Pintor::Pintor();
cout << "DATOS DE LA PERSONA " << endl;
voidcout
ingresar();
<< "=================== " << endl;
voidjuan.mostrar();
mostrar();
} void pintar();
extern
voidvoid manejaPersona1(Trabajador juan)
lijar();
{ void aplicarBase();
private: cout << "DATOS DEL TRABAJADOR " << endl;
coutturno;
string << "==================== " << endl;
juan.mostrar();
float bonificacion;
}; cout << "INGRESAR DATOS DEL TRABAJADOR " << endl;
cout << "============================= " << endl;
juan.ingresar();
#endif
cout << "DATOS DEL TRABAJADOR " << endl;
cout << "==================== " << endl;
juan.mostrar();
}
extern void manejaPersona2(Pintor juan)
{ 5
cout << "DATOS DEL PINTOR " << endl;
cout << "================ " << endl;
juan.mostrar();
Práctica N° 1: Estructuras, Archivos y Clases en C++
#include "persona.h"
#include "trabajador.h"
#include "albanil.h"
#include "gasfitero.h"
#include "pintor.h"
#include "menu.h"
#include "manejarlo.h"
#include <iostream>
#include <string>
#define _CRT_SECURE_NO_WARNINGS
int main()
{
const int nro = 6;
Menu uno("\t\t\tMENU\n\t\t\t====\n", nro);
Menu dos("\t\t\tMENU PINTOR\n\t\t\t===========\n", 4);
uno.cargarArchivoOpciones("menu.txt");
dos.cargarArchivoOpciones("menupintor.txt");
Trabajador luis;
Persona juan;
Albanil pedro;
Gasfitero jose;
Pintor mario;
//uno.ingresar();
int n = 0;
do{
uno.mostrar();
n = uno.elijeOpcion();
system("cls");
cout << n << endl;
switch (n)
{
case 1:
manejaPersona(juan);
break;
case 2:
manejaPersona1(luis);
break;
case 3:
dos.mostrar();
dos.elijeOpcion();
manejaPersona2(mario);
break;
case 4:
manejaPersona3(jose);
break;
case 5:
manejaPersona4(pedro);
break;
}
system("pause");
} while (n != nro);
system("pause");
return 0;
}
6
/***************************************************************
* CODIGO : trabajador.cpp
* AUTOR :
Práctica N° 1: Estructuras, Archivos y Clases en C++
/***************************************************************
* CODIGO : pintor.cpp
* AUTOR :
* FECHA : 26/03/2019
* DESCRIPCION : Define los metodos de la clase Pintor
****************************************************************/
#include "persona.h"
#include "trabajador.h"
#include "pintor.h"
#include <iostream>
#include <string>
Pintor::Pintor()
{
turno = "";
bonificacion = 0;
}
void Pintor::ingresar()
{
Trabajador::ingresar();
fflush(stdin);
cout << "TURNO : ";
getline(cin, turno);
cout << "BONIFICACION : ";
cin >> bonificacion;
}
void Pintor::mostrar()
{
Trabajador::mostrar();
cout << "TURNO : " << turno << endl;
cout << "BONIFICACION : " << bonificacion << endl;
}
void Pintor::pintar()
{
float area = 0;
float tiempo = 0;
float precio = 0;
cout << "pintar casa : " << endl;
cout << "area : ";
cin >> area;
cout << "tiempo : ";
cin >> tiempo;
precio = area * tiempo;
}
void Pintor::lijar()
{
cout << "lijar pared : " << endl;
}
void Pintor::aplicarBase()
{
cout << "Taplicar base " << endl;
}
7
/***************************************************************
* CODIGO : persona.cpp
* AUTOR :
* FECHA : 26/03/2019
Práctica N° 1: Estructuras, Archivos y Clases en C++
/***************************************************************
* CODIGO : menu.cpp
* AUTOR :
* FECHA : 26/03/2019
* DESCRIPCION : Define los metodos de la clase Menu
****************************************************************/
#include "menu.h"
#include "trabajador.h"
#include "pintor.h"
#include <iostream>
#include <string>
do{
cin >> opcionElegida;
if (opcionElegida < 1 || opcionElegida > nroOpciones)
{
cout << "ERROR: ELIJA UNA OPCION ENTRE (1-";
cout << nroOpciones;
cout << ") ..." << endl;
}
8
Práctica N° 1: Estructuras, Archivos y Clases en C++
/***************************************************************
* CODIGO : gasfitero.cpp
* AUTOR :
* FECHA : 26/03/2019
* DESCRIPCION : Define los metodos de la clase Gasfitero
****************************************************************/
#include "persona.h"
#include "trabajador.h"
#include "gasfitero.h"
#include <iostream>
#include <string>
Gasfitero::Gasfitero()
{
especialidad = "";
bono = 0;
}
void Gasfitero::ingresar()
{
Trabajador::ingresar();
fflush(stdin);
cout << "ESPECIALIDAD : ";
getline(cin, especialidad);
cout << "BONO : ";
cin >> bono;
}
9
Práctica N° 1: Estructuras, Archivos y Clases en C++
void Gasfitero::mostrar()
{
void Menu::cargarArchivoOpciones(char* nombreArchivo)
{ Trabajador::mostrar();
cout <<
FILE * archivo;
"ESPECIALIDAD : " << especialidad << endl;
cout <<
char cadena[80];
"BONO : " << bono << endl;
} archivo = fopen(nombreArchivo, "rt");
/***************************************************************
for (int i = 0; i < nroOpciones; i++)
* CODIGO
{ : albanil.cpp
* AUTOR :
* FECHA : 26/03/2019
* DESCRIPCION fgets(cadena, 80, archivo);
: Define los metodos de la clase Albanil
//copiar cadena al arreglo tipo string, opciones[i]
****************************************************************/
opciones[i].append(cadena);
opciones[i].append("\n\0");
#include "persona.h"
cout << opciones[i];
#include "trabajador.h"
//opciones[i] += '\n';
#include "albanil.h"
}
#include <iostream>
opciones[nroOpciones]
#include <string> += "\n\n\t\t\tElija una opcion:(1-";
opciones[nroOpciones] += std::to_string(nroOpciones);
opciones[nroOpciones]
using namespace std; += "): ";
//system("cls");
Albanil::Albanil()
{ }
categoria = "";
/***************************************************************
jornal = 0;
*
} CODIGO : gasfitero.cpp
* AUTOR
void Albanil::ingresar() :
*
{ FECHA : 26/03/2019
* DESCRIPCION : Define los metodos de la clase Gasfitero
Trabajador::ingresar();
****************************************************************/
fflush(stdin);
cout << "CATEGORIA : ";
#include "persona.h"categoria);
getline(cin,
#include "trabajador.h"
cout << "JORNAL : ";
#include
cin"gasfitero.h"
>> jornal;
}
#include <iostream>
void Albanil::mostrar()
#include
{ <string>
Trabajador::mostrar();
using namespace std;
cout << "CATEGORIA : " << categoria << endl;
cout << "JORNAL : " << jornal << endl;
Gasfitero::Gasfitero()
}
{
especialidad = "";
bono = 0;
}
void Gasfitero::ingresar()
{
Trabajador::ingresar();
fflush(stdin);
cout << "ESPECIALIDAD : ";
getline(cin, especialidad);
cout << "BONO : ";
cin >> bono;
}
void Gasfitero::mostrar()
{
Trabajador::mostrar();
cout << "ESPECIALIDAD : " << especialidad << endl;
cout << "BONO : " << bono << endl;
10
Práctica N° 1: Estructuras, Archivos y Clases en C++
27. **********************************************************
29. * AUTOR :
32. ****************************************************************/
35.
6. CONCLUSIONES
Conclusiones de la práctica:
La encapsulación de datos se refiere al control de acceso, y al uso de private, protected y public
Los diagramas UML nos ayudan a saber qué tipo de acceso tiene un miembro de clase y saber qué tipo
de variable guarda, atributo, o retorna (o recibe) método.
7. CUESTIONARIO
1. ¿En qué consiste la abstracción?
En deshacerse de los detalles de un problema para poder resolverlo.
2. ¿Qué papel juega la abstracción en el diseño de clases?
Nos ayuda a poder simplificar un problema complejo y poder tratarlo con objetos.
Además también nos ayuda a poder usar la herencia diferenciando los atributos y métodos
que se repiten y poder definir una clase padre y clases hijas.
3. ¿Cómo se usa la clasificación?
La clasificación se usa para poder definir de forma adecuada las clases hijas y la clase
padre.
4. ¿Cómo determinamos los atributos de clase a partir de la abstracción?
Para poder determinar los atributos de una clase, nos fijamos en características que sean
importantes para la comprensión y resolución del problema.
La abstracción nos permite discernir entre los comportamientos de los objetos, que forman
parte del problema, y nos ayudaran a resolverlo.
6. ¿Qué es la generalización?
La generalización es tomar y/o definir un modelo que nos permita comprender y definir el
problema.
En herencia la generalización nos ayuda a poder saber que atributos y comportamientos se
repiten, y a partir de eso definir una clase padre con dichos métodos y atributos.
7. ¿Qué es la especificación?
Es hacer usos de los detalles para poder definir mejor el problema y para tratarlo.
En herencia la especificación nos ayuda a poder definir los métodos y atributos de las
clases hijas.
8. ¿En qué consiste la jerarquía de conceptos?
Consiste en que el concepto de la clase padre, lo tiene la clase hijo, aunque la clase hijo
tiene, aparte del heredado, un concepto propio.
9. ¿Qué es un método?
Es una función que se define dentro de una clase y puede trabajar con los atributos de
dicha clase.
10. ¿Qué es un mensaje?
Cada operación llamada por un objeto se interpreta como un mensaje al objeto, que utiliza
un método específico para procesar la operación.
11. ¿Qué es un método de servicio?
Es un método que permite que otros objetos consulten o modifiquen los atributos de los
objetos, las clases suelen presentar estos métodos.
12. ¿Qué es un método set?
Los métodos set se utilizan para establecer datos asociados a la clase.
13. ¿Qué es un método get?
Los métodos get se usan para recuperar datos contenidos en el objeto.
14. ¿Cómo actúa un método público?
Un método público es aquel que permite a otras clases externas acceder a sus datos.
15. ¿Cómo actúa un método privado?
Un método privado es aquel que permite el acceso a sus métodos, a través de datos
internos de la misma clase y no a través de clases externas.
12
Práctica N° 1: Estructuras, Archivos y Clases en C++
14